Hallo,
ich habe mich mal hingesetzt und eine etwas flexiblere Siri-erweiterung für IPS gebastelt.
VERSION 0.0.6
Wichtig!!!: Bei Siri muss immer auf Groß- und Klein-Scheibung geachtet werden.
Neuerungen
[ul]
[li]Update des xComfort-Modules von grafi35 (hab ich an die Neuerungen angepasst. Müsste noch getestet werden und ggf. korrigiert)
[/li][li]KeyMatic von HomeMatic ist nun Integriert => Zustand über Instanz, Öffnen über Script
[/li][li]Die Konfiguration im SiriProxy-Plugin und die Konfiguration im Siri-IPS-Skript wurden um einen Hashkey ergänzt, der zur Sicherheit dient und bei beiden identisch seinen muss.
[/li][li]Es wurde eine Hilfefunktion integriert. (Doku siehe unten)
[/li][li]Die Hilfefunktion ist über die Konfiguration auf Dauer komplett abschaltbar, Oder temporär über Siri selbst.
[/li][li]HomeMatic Aktoren mit STATE Variable sind nun auch über die Texte der Assoziationen schaltbar.
[/li][li]Skripte werden nun nicht mehr einfach so direkt ausgeführt sondern es muss noch eins der Keywords dahinter => „ausführen, an, ja“
[/li][/ul]
Anforderungen
[ul]
[li]Das siriproxy-ips Plugin für den SiriProxy wurde überarbeitet. Es muss also neu in den SiriProxy kopiert werden. In der Konfiguration muss noch der Eintrag hashkey ergänzt werden (Siehe Doku unten). Bitte anschließend den SiriProxy einmal neu starten.
[/li][li]Die „config.siri.php“ vom Siri-IPS-Script muss angepasst werden. (Siehe Doku unten).
[/li][/ul]
VERSION 0.0.5
Neuerungen
[ul]
[li]Es können nun auch HomeMatic-Dimmer geschaltet werden.
[/li][li]Update des xComfort-Modules durch grafi35
[/li][li]es gibt nun auch Interaktion mit Siri: Wenn eine Variable geschaltet werden soll und Siri das Keyword in den Assoziationen des Variablenprofils nicht findet, bekommt man nun durch Siri alle Möglichkeiten erzählt und kann dann den gewünschten Wert sagen und Siri versucht es erneut. So lange bis ein akzeptabler Wert erkannt wird
[/li][/ul]
Anforderungen
[ul]
[li]Das siriproxy-ips Plugin für den SiriProxy wurde überarbeitet. Es muss also neu in den SiriProxy kopiert werden. Die Konfiguration bleibt unverändert. Bitte anschließend den SiriProxy einmal neu starten.
[/li][/ul]
VERSION 0.0.4
Neuerungen
[ul]
[li]Das Script wurde nun erweitert und verändert, sodass eigene Module integriert werden können.
[/li][li]Die Erweiterung von Grafi35 wurde als Modul integriert um xComfort Jalosien und Aktoren zu steuern.
[/li][/ul]
VERSION 0.0.3
Neuerungen
[ul]
[li]Fehler mit unterschiedlichen Charsets im bei der Kommunikation zwischen SiriProxy und dem siri.php Skript behoben
[/li][/ul]
VERSION 0.0.2
Neuerungen
[ul]
[li]Es wurde eine Konfiguration als Array für spätere Einstellungen integriert. Dieses wird als serialisiertes array in der ObjectInfo gespeichert.
[/li][li]Siri kann nun auch stumm geschaltet werden, sodass die Antworten nur noch als Text erscheinen. Siri bleibt so lange still, bis Ihm wieder gesagt wird, dass er reden Darf. Die Keywords sind hierzu Zuhause schweige und Zuhause sprich
[/li][/ul]
VERSION 0.0.1
Momentan Nutzbar mit:
[ul]
[li]Variablen lesen und schreiben (über CustomAction)
[/li][li]Scripte ausführen
[/li][li]HomeMatic Aktoren lesen und schalten
[/li][li]HomeMatic Devices lesen
[/li][li]HomeMatic Dimmer, KeyMatic, WinMatic sind momentan noch nicht implementiert und getestet zum schalten
[/li][/ul]
Es wird im IPS eine Root-Kategorie für Siri angelegt.
Darunter können nun in der ersten Ebene entweder weitere Kategorien oder Links zu Instanzen, Variablen oder Scripten abgelegt werden. Unterhalt der ersten Kategorieebene dürfen nur noch Links zu Instanzen, Variablen und Scripten abgelegt werden.
Dieses sieht bei mir wie folgt aus:
Nun ladet Ihr euch den Anhang herunter und speichert den Ordner siri im Ordner [b]IP-Symcon\Webfront\user[/b] ab. Im Script config.siri.php müsst ihr nun noch in der zweiten Zeile den Eintrag
define('SIRI_ROOT',####);
define('SIRI_KEYWORD_HELP',"Hilfe") ;
define('SIRI_HASHKEY','91c731a8ad504c4dde932f79104f992c');
define('SIRI_ALLOW_HELP',true);
anpassen und dort die ID eurer Root-Kategorie für Siri eintragen.
[Ab Version 0.0.6] Des weiteren muss hier ein Keyword für Hilfe definiert werden und ein Hashkey zur Identifikation eingetragen werden. Dieser Hashkey kann beliebig sein.Es muss aber im siriproxy-ips plugin der exakt gleiche Hashkey eingetragen werden.
Nun können eigene Module programmiert werden und dann im Unterordner „modules“ gespeichert werden. Der Dateiname muss mit „.modules.php“ enden. Sollten für das Modul eigene Schaltbefehle nötig sein, so können diese ebenfalls über eine eigene values-Datei, die im Unterordner „values“ abgelegt wird und deren Dateiname mit".values.php" endet, erzeugt werden.
Wer noch keinen SiriProxy am laufen hat, kann sich am besten über diese Anleitung einen ans laufen bringen: http://www.hometoys.com/emagazine/2013/02/siri-home-automation-integration-from-start-to-finish-brpart-1–the-basics-using-a-linux-vm/2087
Wenn der SiriProxy läuft müsst ihr den, aus dem Anhang, entpacken Ordner siriproxy-ips in den Ordner /home/siri/SiriProxy/plugins/ kopieren.
Nun können in Zeile 8 der Datei siriproxy/lib/siriproxy-ips.rb noch die Keywords angepasst werden auf die euer Siri hört und weiß, dass es alle folgende Befehle an IPS weiterleiden soll.
KEYWORDS_ZUHAUSE = "Zu Hause|Zuhause"
Momentan hört das script auf die Worte Zu Hause und Zuhause, wenn weitere Schlüsselwörter gewünscht werden, einfach mit in die Zeile eintragen und die Schlüsselwörter immer mit einem senkrechten Strich von einander trennen.
Nun muss die Config.yml vom Siriproxy um folgende Zeilen ergänzen:
- name: 'IPS'
path: './plugins/siriproxy-ips'
server:
ZUHAUSE:
host: '192.168.178.23:82'
protocol: 'http://'
script: '/user/siri/siri.php'
hashkey: '91c731a8ad504c4dde932f79104f992c'
diese muss unterhalt der Section plugins: eingefügt werden. Bitte auf das richtige Einrücken achten.
Nun muss bei der Eintrag bei host: angepasst werden. Hier muss die : von eurem IPS server stehen.
[Ab Version 0.0.6] Der Hashkey ist ein Sicherheitsschlüssel, dieser muss in der Config beim SiriProxy und in der Config beim Siri-IPS-Skript identisch sein.
Soweit sind alle Konfigurationen abgeschlossen. Nun kann es losgehen Siri zum leben zu erwecken.
Dieses geschieht wie oben beschrieben mittels Kategorien und Links die unterhalt der Siri-Root-Kategorie gelegt werden. Hierbei ist zu beachten, dass der Name jeweils so lauten muss wie er von Siri auch geschrieben wird. Manchmal schreibt Siri auch Wörter manchmal groß und manchmal klein, dann am besten einfach zwei Links oder Kategorien anlegen. Auch muss auf eventuelle Worttrennungen Rücksicht genommen werden.
So kommunizieren Sie über Siri mit IPS:
Zuerst das Keywort nennen, dann gehts weiter mit der Kategorie und dann der der Name vom Link. Soll etwas geschaltet oder verändert werden kann noch der neue Wert gesagt werden.
als Beispiel
Zuhause[KEYWORD], Wohnzimmer[KATEGORIE], Beleuchtung[LINK], an[VALUE]
„Zuhause schalte bitte im Wohnzimmer die Beleuchtung sofort für mich an“
würde nun die Beleuchtung im Wohnzimmer anschalten und mir anschließend den aktuellen Zustand der Beleuchtung mitteilen.
Selbes Ergebnis würde auch „Zuhause Wohnzimmer Beleuchtung an“ liefern. Hierbei ist zu beachten, dass es sich um einen HomeMatic Schaltaktor handeln muss. Statt dem Keyword an sind noch folgende Keywords hinterlegt: aus, ein, einschalten, ausschalten, anschalten.
Soll nur der Zustand abgefragt werden, ohne dass etwas geschaltet wird, so kann einfach das Keyword am Ende für das Value weggelassen werden.
Soll z.B. eine eigene Variable mit hinterlegter CustomAction und Profil gesteuert werden.
Dann wird als Keyword für den wert einfach das gesagt, als als Name für die Assoziazion im VariablenProfil hinterlegt ist. und vor diesem Keyword muss noch auf gesagt werden.
Als Beispiel: Wir haben eine Variable, die direkt unterhalt der Siri-Root-Kategorie mittels eines Links verknüpft ist, worüber die Anwesenheit im Haus festgelegt wird. Diese nennt sich z.B. Hausstatus
für den Hausstaus sind folgende Assoziationen über das VariablenProfil hinterlegt: Anwesend, Abwesend, Urlaub, Party
Mit „Zuhause Hausstatus auf Anwesend“ wird die Variable auf Anwesend geschaltet. lässt man das „auf Anwesend“ weg, so bekommt man den aktuellen Zustand ohne etwas zu verändern.
Dimmer sind zum einen wie normale Aktoren schaltbar. Das heiße mit den Keywords: „an, aus, ein, …“ ebenfalls sind Dimmer über eine eventuell vorhandenen Assoziationstext im Variablenprofil schaltbar wie auch über den Sprachbefehl „auf x %“ wobei x für eine Zahl zwischen 0 und 100 steht. [Dimmer erst ab Version 0.0.5 verfügbar]
Zu guter letzt ist es auch möglich mehrere Kategorien und Links mit einer Ansage gemeinsam zu schalten. Diese müssen jeweils mit und verknüpft werden. Wichtig: es muss das selbe Value für den Schaltbefehl sein.
Als Beispiel:
„Zuhause schalte im Wohnzimmer und in der Küche die Beleuchtung und den TV ein“
Jetzt wird geschaut ob im Wohnzimmer eine Beleuchtung verknüpft ist und diese dann ggf. angeschaltet. Das selbe geschieht mit dem TV und in der Küche ebenfalls für Beleuchtung und TV.
[Ab Version 0.0.6] Es gibt eine Hilfefunktion wo Siri einem auflistet was alles geschaltet werden kann. Hierzu muss das Keyword welches in der Config für Help definiert wurde genannt werden. Dieses kann an jeder Stelle genannt werden.
„Zuhause Hilfe“ => es werden alle Kategorien und Links direkt unterhalt der Siri-Root-Kategorie aufgelistet und können dann mittels Antwort ausgewählt werden.
„Zuhause Hilfe“ => Es werden alle Links unterhalb der genannten Kategorie aufgelistet und es kann ein Links ausgewählt werden.
„Zuhause Hilfe“ => Wenn der Link auf eine Instance, Variable, oder Script führt, dass schaltbar ist, werden nun alle Möglichkeiten zum schalten genannt und es kann eine ausgewählt werden. Ist die Variable oder Instanz nicht schaltbar, so wird deren Zustand wieder gegeben.
Die Hilfefunktion ist in der Config mit dem Wert SIRI_ALLOW_HELP deaktivierbar, wenn der Wert auf false geändert wird.
Ansonsten kann die Hilfe auch direkt über Siri an und abgeschaltet werden, aber nur wenn der Config-WErt auf true steht. Die Kommandos dazu lauten „Zuhause Hilfe deaktivieren“ und „Zuhause Hilfe aktivieren“.
Wenn das Grundgerüst einmal steht, ist es sehr einfach nur über IPS-Konsole Siri weitere Befehle beizubringen. Man kann so natürlich auch die selbe Funktion über mehrere Keywords verknüpfen in dem man einfach mehrere Links erzeugt und diese anders benennt.
Wenn man Siri etwas sagt, sieht man auf dem Bildschirm vom iPhone zum Glück auch immer die Schreibweise, sodass es ggf. an einer falschen Schreibweise liegt wenn etwas nicht funktioniert. Nochmals möchte ich betonen, dass auch die Groß- und Kleinschreibung unterschieden wird.
VMWare Image SiriProxy:
So ich hab nun nochmal eine VMWare-Vorlage für einen SiriProxy erzeugt.
Liegt in einer Dropbox: https://www.dropbox.com/l/aCQBCHthCR1BTCbeh4b4E9
mit folgender Standard-Konfiguration:
[ul]
[li]IP: 192.168.0.100
[/li][li]Gateway: 192.168.0.1
[/li][li]Username: siri
[/li][li]Passwort: siri
[/li][li]sudo Passwort: siri
[/li][/ul]
Die Vorlage wird wie folgt im vSphere-Client eingespielt:
Dann immer auf weiter. Name der Vorlage und so anpassen
![Bildschirmfoto 2013-08-15 um 21.52.25.png](https://community.symcon.de/uploads/default/original/2X/c/c55dbb32cbbddfaf0e5061a80e9d2c9ee82dcb2f.png)
Wichtig, auf Thin-Provisioned stellen, damit nicht der ganze zugewiesene Speicherplatz auch wirklich auf der Festplatte benutzt wird!
![Bildschirmfoto 2013-08-15 um 21.52.35.png](https://community.symcon.de/uploads/default/original/2X/a/a598af4f95511963adc91e84143508d38e9eae66.png)
Am ende noch das direkte booten aktivieren.
Nun müsst ihr folgendes anpassen:
sudo nano /etc/network/interfaces
Hier bitte die IP von diesem SiriProxy ändern und genauso wie gateway und so
address 192.168.XXX.YYY
netmask 255.255.255.0
network 192.168.XXX.0
broadcast 192.168.XXX.255
gateway 192.168.XXX.ZZZ
also alle XXX, YYY, und ZZZ anpassen
dann mit Strg +O speichern, einmal enter drucken
dann Strg+x zum schließen
Anschließend bitte mit
sudo nano /etc/dnsmasq.conf
folgenden Eintrag anpassen und die Selbe IP dahinter schreiben wie zuvor oben für diesen Server definiert wurde:
address=/guzzoni.apple.com/192.168.XXX.YYY
in die Datei /etc/resolv.conf muss auch noch der richtige DNS Server eingetragen werden [Danke grafi35 für den Hinweis]
jetzt noch die config vom siriproxy-ips script anpassen. Dies geschieht mit:
sudo nano \home\siri.siriproxy\config.yml
und dann folgende Zeilen suchen und an eurer IPS-Server anpassen:
- name: 'IPS'
path: './plugins/siriproxy-ips'
server:
ZUHAUSE:
host: '<IPS-Server-IP>:<PORT>'
protocol: 'http://'
script: '/user/siri/siri.php'
jetzt einmal den server neustarten sudo shutdown -r now und dann sollte er funktionieren, wenn ihr die IP vom Server im Iphone in der Wlan-Konfiguration als DNS-Server eintragt.
Dann siri mal testen mit „Test Siriproxy“ dann werdet ihr sehen ob alles geklappt hat.
ich habe in diesen siriproxy noch eine aktion integriert womit man den proxy mittels siri mal neustarten kann. Dazu einfach zu siri sagen: Siriproxy jetzt neustarten und die Frage die Siri dann stellt mit Ja beantworten.
siriproxy-ips_v0.0.6.zip (19.2 KB)