Montag, 27. Mai 2013
Ihr seid gefragt !
Heute nöchte ich euch um eure Hilfe bitten.
Ich möchte von euch wissen:
- was haltet ihr von EVACmd ?
- welche Funktionen wären noch sinnvoll ?
- welche Kommandozeilenprogramme verwendet ihr für Automatisierung ?
- Welche Funktionalität im Bezug auf den Raspberry-Pi könntet ihr euch noch vorstellen ?
zudem:
Suche ich interessierte Mitentwickler
- Für EVACmd
- Für die Spracherkennung (Über Julius Spracherkennung)
- Für Raspberry-Pi Projekte.
Wünsche/Vorschläge oder Interesse an der Entwicklung ?
Mail an Admin@nbhcrew.de !
Donnerstag, 16. Mai 2013
Hilfreiche Web-Dienste
Hilfreiche Web-Dienste
als erstes ist natürlich hier Google mit den meisten Webdiensten zu nennen.
Google bietet hier jede menge an API´s:
Suche im Web: http://www.google.com/search?q=XML
Sucht im Internet nach "XML"
Sprachausgabe:http://translate.google.com/translate_tts?tl=de&q=Sprachausgabe
Bis zu 100 Zeichen, Download der Datei über Curl oder WGet als Ogg-Vorbis Datei.
Spracherkennung: http://www.google.com/speech-api/v1/recognize?lang=de
Für die Spracherkennung muss auf die angegebene URL ein Post mittels Curl oder WGet mit der Flac-Datei ausgeführt werden. Um diese Datei zu erzeugen verwende ich SOX.
Ein Beispiel hierfür ist:
Sox -d -r 16000 Ausgabe.flac
wget -U "Mozilla/5.0" --post-file ausgabe.flac --header="Content-Type: audio/x-flac; rate=16000" -O -
"http://www.google.com/speech-api/v1/recognize?lang=de-de&client=chromium"
Nach dem Absenden der Daten erhalte ich eine Antwort in Form eines Json mit folgendem Inhalt:
"status":0,"id":"43a03e18ee7fcd777a0c491f064ccd34-1","hypotheses":[{"utterance":
"hallo das ist ein Test","confidence":0.91318667}]}
Um eine kleinere Datei für den Upload zu schaffen kann das Programm Julius verwendet werden.
Julius ist eine Spracherkennungssoftware, die auf Kommandozeile basiert.
Mit der Datei adintool aus dem Bin-Verzeichnis kann mithilfe des Kommandos -segment
der Teil der Sprache aus der Originaldatei herausgeschnitten werden.
Julius unterstützt hierbei lediglich die Formate wav und Raw, weshalb man die Sprache mittels Julius
aufzeichnen sollte und dann mit SOX in eine Flac-Datei konvertieren sollte.
Hier ein funktionierendes Batch-Script (wenn sich die Dateien Adinrec + Dll´s, SOX, WGet im gleichen Ordner befinden):
adinrec.exe -input mic -lv 1000 ausgabe.wav
sox ausgabe.wav -r 16000 ausgabe.flac
wget -U "Mozilla/5.0" --post-file ausgabe.flac --header="Content-Type: audio/x-flac; rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=de-de&client=chromium" >> result.txt
pause
Knowledge Graph: https://www.wolframalpha.com/input/?i=Wetter%20in%20Pocking
=> Zeigt z.B. aktuelle Wetterdaten an. Für weitere Befehle auf der Seite in der Hilfe nachsehen.
=> Für das einbinden in ein Programm ist ein Wrapper erforderlich
Youtube: https://www.youtube.com/results?search_query=evacmd
=> Öffnet Youtube mit der Suche
=> Für das einbinden in ein Programm ist ein Wrapper erforderlich
Dienstag, 14. Mai 2013
Fernsehzeitung parsen
Fernsehzeitung parsen
um über EVACmd eine Vorhersage von aktuellen und interessanten TV-Sendungen zu treffen habe ich versucht eine Internetseite (www.tvtoday.de) zu parsen.
die Inhalte auf der Internetseite werden sehr einfach und sehr strukturiert ausgegeben, weshalb man mit einfachen Mitteln (Dom-Browser über F12 in Firefox), einer Settings.xml für die Einstellungen und etwas Zeit zum anlernen eine passende Liste für die interessanten Sendungen des Tages herausbekommt.
Als Vorbereitung muss auf der Internetseite der Sender gesucht werden, den man parsen möchte z.B. RTL. Als Anzeige bekommt man den Sender RTL und ein paar weitere Sender in weiteren Spalten.
Diese müssen dann nicht extra definiert werden. am besten man sucht sich Sender aus, bei denen auch gleich andere gewünschte Sender folgen.
Diesen Sender tragen wir dann in die Konfigurations-XML im Knoten "Fetch" ein.
Beim start des Programms werden alle Fetch knoten durchlaufen und eine Gesamtliste aller Sender und Sendungen erstellt.
Danach folgen die Definitionen, was wir gerne sehen würden.
Die Einstellung beginnt mit "Channel" wo wir in die Attribute "Name" den Namen des Senders eintragen. Zu jedem Sender können wir uns jetzt Wunschsendungen definieren. dazu legen wir einen Knoten mit dem Namen "Settings" an, der je Wort einen Knoten mit dem Namen "Text" und ein Attribut "Rule" enthält.
Als Regel kann "Include" oder "Exlude" angegeben werden. die Regeln werden als "und" ausgeführt. Sprich bei 2 includes muss der Text der Sendung für den Sender beide Worte enthalten.
Bei Exclude werden alle Sendungen gelöscht, die ein Wort aus Exclude enthalten.
Eine Beispielkonfiguration für alle Dokusendungen auf RTL2 (jedoch keine Soaps, Tier, Kultur oder Reisedokus) sieht z.B. so aus:
<TVP>
<Fetch Name="SAT1"/> <!--Kabel1, RTL2, VOX,3SAT-->
<Channel Name="RTL2">
<Setting>
<Text Rule="Include">Doku</Text>
<Text Rule="Exclude">soap</Text>
<Text Rule="Exclude">tier</Text>
<Text Rule="Exclude">reise</Text>
<Text Rule="Exclude">kultur</Text>
</Setting>
<Setting>
<Text Rule="Include">Reportage</Text>
<Text Rule="Exclude">tier</Text>
<Text Rule="Exclude">reise</Text>
<Text Rule="Exclude">kultur</Text>
</Setting>
</Channel>
</TVP>
Das Programm, um die TV-Sender zu parsen wird demnächst in EVACmd unter den Modulen zu finden sein.
https://sourceforge.net/projects/evacmd/files/Plugins/
Sonntag, 12. Mai 2013
Bewegungserkennung mit Live-Video
Bewegungserkennung mit Live-Video
Um EVACmd für die Bewegungserkennung einzurichten benötigen wir einen Raspberry-PI mit installiertem Paket "Motion". In Motion können wir über das Webinterface unter http://IP-DES-RASPBERRY:8080 die Kamera (auch Netzwerkkamera) auswählen und die Einstellungen
der Bewegungserkennung konfigurieren.
Um das Video Live in EVACmd anzuzeigen ist bei erkannter Bewegung mittels httpget die Internetseite der EVACmd aufzurufen mit dem Befehl (z.B. BEW = http://IP-EVA/?BEW).
Die EVACmd erhält dann bei einer Bewegung den Befehl "BEW", auf den Sie reagieren kann.
Für das anzeigen des Videos kann nun entweder der aktuelle Livestream des MOTION verwendet
werden oder der direkte Stream von der Kamera.
Um den Stream direkt anzuzeigen, benötigen wir das Programm ffplay aus dem ffmpeg-Paket.
dieses Programm können wir dann als Regel beim Webinterface eintragen (Wenn 1 eq BEW) dann
Start (Programm CAM1 Bin:bin\ffplay.exe -v 0 [Pfad zum Stream der Cam]).
Um den Stream zu beenden definieren wir eine weitere Regel für einen Timer auf z.B. 15 Sec mit
(\Bin\sleep.exe -s 15, wait = True) und einen Befehl, der ffplay wieder schließt (kill /F /IM ffplay.exe).
Sollte jetzt eine Bewegung eintreten, so wird der Stream geöffnet, gleichzeitig ein Timer gestartet, der den nächsten Prozess nach 15 Sec ausführt und dann ffplay wieder beendet. Voilla !
Eine zweite (unstabile) Möglichkeit ist, den Stream des MOTION direkt per URL von http://IP-RASPBERRY:8081 aufzurufen. Hier besteht sogar die Möglichkeit, die bewegten Bereiche sichtbar zu machen. Für die Anzeige kann MOD_Show mit der URL verwendet werden. Leider stürzt MOTION hier des öfteren ab, und gibt keine Ausgabe des Videos mehr.
Zusätzlich kann über EVACmd der Befehl des "Bewegung Ende" definiert werden, als Trigger verwende ich hier das Event "Video Ende".
Samstag, 4. Mai 2013
Apache für FBCMD vorbereiten (Minimalen Webserver bauen)
Apache für FBCMD und andere Zwecke vorbereiten (Minimalkonfiguration erstellen)
Als erstes besorgen wir uns das Paket XAMPP für Windows:
Dann erstellen wir einen Ordner, den wir für die Minimalkonfiguration verwenden wollen
z.B. Desktop\Test.
Hier erstellen wir 4 Unterordner mit den Namen
conf
htdocs
logs
modules
Dann kopieren wir aus dem XAMPP Verzeichnis unter "Apache\Bin\" die Dateien:
httpd.exe
libapr-1.dll
libapriconv-1.dll
libaprutil-1.dll
libhttpd.dll
in das Hauptverzeichnis unseres neu erstellten Ordners.
Zudem kopieren wir aus Apache\Modules die Dateien
mod_dir.so
mod_log_config.so
mod_mime.so
in den Ordner Modules unseres erstellten Ordners.
und noch die Datei \Apache\conf\mime.types nach \Conf.
Dann erstellen wir eine Datei namens httpd.conf im Ordner conf
und fügen folgenden Inhalt ein:
Listen 80
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
ServerName localhost:80
DocumentRoot "htdocs"
<IfModule dir_module>
DirectoryIndex index.html index.htm
</IfModule>
DefaultType text/plain
<IfModule mime_module>
TypesConfig "conf/mime.types"
</IfModule>
LogLevel warn
LogFormat "\"%r\"" combined
CustomLog "logs/access.log" combined
unsere Dokumente kommen in den Ordner htdocs.
jetzt laden wir uns die UnixUtils herunter.
UnixUtils enthält eine Datei Namens Tail.exe, welche
wir für die Logausgabe für die EVACMD benötigen.
Diese Datei kopieren wir in den Hauptordner der Anwendung.
Jetzt erstellen wir noch eine Start.bat Datei mit dem Inhalt
start httpd.exe
tail -f -n 1 logs\access.log
und führen die Datei aus ..
Als ausgabe erhalten wir den Webrequest in einem CMD-Fenster.
Das Paket der EVACmd enthält ein Start-Tool, welches den Webserver
startet und die Ausgabe von Tail umleitet, sowie Tail beendet wenn der
Webserver geschlossen wird.
Mittwoch, 1. Mai 2013
Modul Facebook CMD
Facebook Commandline (nicht PHP)
MOD_FB kann einfach als Anwendung mit Parametern gestartet werden.
Die Parameter und Rechte können dabei in der beiliegenden XML selbst
konfiguriert werden. z.B.
<FB>
<Option Name="Feed" Type="OpenGraph" Command="feed"/>
<Option Name="Events" Type="OpenGraph" Command="events"/>
<Option Name="Notifications" Type="FQL"
Command="SELECT title_text,body_text from notification where recipient_id=me()"/>
<Right Name="publish_stream"/>
<Right Name="offline_access"/>
<Right Name="read_mailbox"/>
<Right Name="manage_notifications"/>
</FB>
Somit wird z.B. bei Feed das OpenGraph Kommando für die Feeds abgerufen.
Mit FQL kann eine Select-Abfrage auf die Facebook Datenbank durchgeführt werden.
Beim ersten Start wird ein Token generiert, dass unter dem Anwendungspfad gespeichert wird.
Dieses Token sollte ca. 2 Monate gültig sein.
!Dieses Token öffnet den Zugriff auf alle Rechte. passen Sie gut darauf auf!
Für spezielle Kommandos benötigen Sie spezielle Rechte, die auf der Facebook-Developer Seite:
https://developers.facebook.com/docs/reference/fql/permissions zu finden sind.
Diese müssen unter Right unter Name eingefügt werden. (Möglich sind auch mehrere Rechte mit Komma getrennt.)
Die Daten, die im JSON-Format vorliegen, werden in XML konvertiert, um
dann mit XSLT-Templates (Transformation) eine lesbare Benutzerausgabe zu erhalten.
Die Steuerung erfolgt über Kommandozeile über den Parameter Output=.
Hier stehen XML,[JSON] und XSLT zur Verfügung.
als Transformation kann dieses einfache Beispiel für Friends verwendet werden:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<xsl:for-each select="data">
<xsl:value-of select="name"/>
<xsl:text> </xsl:text>
<xsl:value-of select="id"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Um Daten eines anderen Benutzers zu lesen, können Sie den Parameter User= verwenden.
Der Parameter erforder dann die Angabe einer Benutzer-ID oder eines Benutzernamens.
Alternativ können Sie die Original FBCmd von http://fbcmd.dtompkins.com verwenden.
Hierbei ist darauf zu achten dass der PHP-Interpreter auf dem Rechner installiert ist und
die FBCmd mit PHP.exe fbcmd.php %Befehle% angesprochen wird.
Am besten wird die fbcmd.php im PHP-Ordner abgelegt, und ein Batch-Script generiert,
welches die Parameter an den PHP-Interpreter übergibt.
Mit etwas PHP-Erfahrung und der Anleitung über PHP-Debugging in meinen Blogs
(http://heimautomatisierung.blogspot.de/2013/04/aptana-fur-php-debugging-von-fbcmd.html)
können Sie die gesendeten Befehle auch Debuggen und in diese FBCMD integrieren.
Bitte hinterlassen Sie mir dann den FQL-Code bzw. das Opengraph-Kommando, um
es für andere Benutzer ebenfalls zur Verfügung stellen zu können.
Die Anwendung ist unter den EVACmd-Plugins auf der Sourceforge-Seite von EVACmd zu finden.
Modul WinGUI
Beschreibung des WinGui-Moduls:
das WinGUI Modul stellt eine einfache Benutzeroberfläche für die Steuerung der EVACmd zur Verfügung.
In VS.Net kann ganz einfach eine Benutzerobfläche Programmiert werden, indem einfach Buttons platziert werden und bei dem Click Ereignis ein Console.Writeline mit einem Befehl ausgelöst wird.
die vorbereitete Gui beinhaltet eine Standardoberfläche für XBMC-Befehle und ein Menü, dass über die beiliegende Settings.xml konfiguriert werden kann. Bei der XML-Definition ist darauf zu achten dass immer alle Attribute vergeben sind.
WinGUI erstellt aus den Informationen im Hintergrund im Programmordner eine Test.svg, die die Default.svg und die Einstellungen aus der XML enthält.
Wenn Sie diese Test.svg in den Ordner des Webservers kopieren, haben sie die Einstellungen der Settings-Datei im Webinterface.
Nach dem Start der EVACmd und starten des GUI als Deamons ist am linken oberen Bildschirmrand ein
kleines Kästchen, dass beim Überfahren die Oberfläche mit den Steuerungen zeigt.
Ein klick auf den Befehl sendet das hinterlegte Kommando an die EVACmd, dass je nach definierter Regel einen Prozess startet.
<MENU>
<Node Name="Ports" Zeilen="1" Spalten="4">
<Node Zeile="1" Spalte="1" Name="Port 1" Result="Port1"/>
<Node Zeile="1" Spalte="2" Name="Port 2" Result="Port2"/>
<Node Zeile="1" Spalte="3" Name="Port 3" Result="Port3"/>
<Node Zeile="1" Spalte="4" Name="Port 4" Result="Port4"/>
</Node>
</MENU>
Abonnieren
Posts (Atom)

