Hallo Kollegen,
ich habe ein neues Plugin in Github gestellt mit dem es möglich ist, die Sprachassistentin Siri in sh.py zu integrieren. Ihr findet es im Branch "siri": https://github.com/mknx/smarthome/tree/siri
Das Plugin ist eine Ableitung des "sirious" Projekts von Will Broyce: https://github.com/wrboyce/sirious
Da sirious iOS6 (noch) nicht unterstützt habe ich zum generieren der notwendigen Zertifikate das Script von pysiriproxy verwendet: https://code.google.com/p/pysiriprox...nfig%2Fscripts
Die Zertifikate müssen dann nach /usr/local/smarthome/plugins/siri/certificates kopiert und in server.crt, server.key und ca.pem umbenannt werden. Außerdem muss natürlich der lokale DNS Server (z.B. dnsmasq) den Namen kryten.apple.com und guzzoni.apple.com auf den sh.py Server umbiegen. Im pysiriproxy Projekt von oben findet ihr auch ein Shell Skript, dass die notwendigen Anpassungen in dnsmasq vornimmt. Um das notwendige Client Zertifikat auf's iOS Device zu bekommen reicht es aus, dass man später bei laufendem sh.py auf dem iOS Device die URL https://kryten.apple.com aufruft (Achtung: https, also SSL). Ist der Pfad im DNS korrekt umgebogen fordert euch Safari auf, ob ihr das Zertifikat installieren wollt... es muss also nicht extra per Mail geschickt werden.
Wichtig ist auch, dass sh.py mit root Rechten gestartet werden muss, da das Plugin den Port 443 verwendet, was leider nur als root geht:
Das Plugin unterstützt bisher nur Items vom type boolean, also type=bool (wird aber natürlich noch erweitert). Um ein Item via Siri schalten zu können muss beim Item das Attribut "siri=" angegeben werden. Beispiel:
Es handelt sich dabei um einen regulären Ausdruck. Das Plugin versucht das Item auszusteuern, wenn dieser reguläre Ausdruck von Siri erkannt wurde. In diesem Fall also entweder bei "Wohnzimmer Licht an" oder bei "Wohnzimmer Licht aus". Derzeit können im Ausdruck nur deutsche Kommandos verarbeitet werden. "an", "ein" und "runter" wird bisher auf True gemapped, alles andere auf False. Also "Wohnzimmer Licht an" oder "Schlafzimmer Rollladen runter" setzen das entsprechende Item auf True sonst auf False.
Aktiviert wird das Plugin ganz normal in der etc/plugin.conf:
Notwendige Abhängigkeiten sind 'biplist', 'pyopenssl' und 'twisted' die natürlich installiert sein müssen:
[ACHTUNG]Seit iOS6 versucht Siri neben Wifi auch über 3G den Apple Server zu erreichen. Zum Testen sollte man also erstmal in den Flugmodus gehen und dann lediglich Wifi wieder aktivieren. (Danke an Thorsten für den Tipp)[/ACHTUNG]
Wer wie ich eine FritzBox hat und daher dem iOS Device nicht so einfach einen eigenen DNS mitteilen kann, der kann einfach in den Einstellungen des iOS Devices bei seinem WLAN Netzwerk auf den blauen Pfeil tippen und unter DNS die IP selber eingeben.
Ich teste derzeit noch verschiedene Konstellationen um das iPhone auch bei aktiviertem 3G auf den eigenen DNS festzunageln. Bisher hat das noch nicht so funktioniert. Ich habe zwar Dank OpenVPN es hinbekommen, dass ein Lookup auf kryten.apple.com das VPN aktiviert, aber scheinbar nutzt das iPhone dennoch zusätzlich den DNS des Mobilfunkproviders. Was ich noch testen möchte ist, im iPhone Konfigurationstool die IP des Apple Servers übers VPN zu routen, mal sehen ob das klappt.
TODO
An die, die sich mit Regexp unter Python auskennen: Was mein Wunschzustand wäre, dass man beim Attribut "siri=" beliebige Strings angeben kann und über Namen dann auf den eigentlichen Wert und die Möglichkeiten im Regexp zugreifen kann. Das ich es quasi so definieren kann:
Um es dann irgendwie so abzufragen (Achtung Pseudocode):
Also das ich beim Auswerten das entsprechende Item auf True setze, wenn die erste Option der entsprechenden Gruppe gesprochen wurde, andernfalls auf False. Hat hier jemand eine Idee wie ich das erreiche? Auch Ideen wie man Prozentwerte etc. via Regexp verarbeiten könnte sind gerne willkommen!
[WICHTIG]Bitte in diesem Thread nur über Bugs/Anregungen zum Plugin selber diskutieren. Fragen rund um das Thema Siri Proxy und wie man DNS etc. umbiegt sollten an anderer Stelle (evtl. hier) gestellt werden.[/WICHTIG]
Und nun, viel Spass beim Testen
ich habe ein neues Plugin in Github gestellt mit dem es möglich ist, die Sprachassistentin Siri in sh.py zu integrieren. Ihr findet es im Branch "siri": https://github.com/mknx/smarthome/tree/siri
Das Plugin ist eine Ableitung des "sirious" Projekts von Will Broyce: https://github.com/wrboyce/sirious
Da sirious iOS6 (noch) nicht unterstützt habe ich zum generieren der notwendigen Zertifikate das Script von pysiriproxy verwendet: https://code.google.com/p/pysiriprox...nfig%2Fscripts
Die Zertifikate müssen dann nach /usr/local/smarthome/plugins/siri/certificates kopiert und in server.crt, server.key und ca.pem umbenannt werden. Außerdem muss natürlich der lokale DNS Server (z.B. dnsmasq) den Namen kryten.apple.com und guzzoni.apple.com auf den sh.py Server umbiegen. Im pysiriproxy Projekt von oben findet ihr auch ein Shell Skript, dass die notwendigen Anpassungen in dnsmasq vornimmt. Um das notwendige Client Zertifikat auf's iOS Device zu bekommen reicht es aus, dass man später bei laufendem sh.py auf dem iOS Device die URL https://kryten.apple.com aufruft (Achtung: https, also SSL). Ist der Pfad im DNS korrekt umgebogen fordert euch Safari auf, ob ihr das Zertifikat installieren wollt... es muss also nicht extra per Mail geschickt werden.
Wichtig ist auch, dass sh.py mit root Rechten gestartet werden muss, da das Plugin den Port 443 verwendet, was leider nur als root geht:
Code:
sudo bin/smarthome.py
Code:
[living_room] [[light]] type=bool siri="Wohnzimmer Licht (an|aus)"
Aktiviert wird das Plugin ganz normal in der etc/plugin.conf:
Code:
[siri] class_name = Siri class_path = plugins.siri
Code:
sudo easy_install biplist sudo easy_install pyopenssl sudo easy_install twisted
Wer wie ich eine FritzBox hat und daher dem iOS Device nicht so einfach einen eigenen DNS mitteilen kann, der kann einfach in den Einstellungen des iOS Devices bei seinem WLAN Netzwerk auf den blauen Pfeil tippen und unter DNS die IP selber eingeben.
Ich teste derzeit noch verschiedene Konstellationen um das iPhone auch bei aktiviertem 3G auf den eigenen DNS festzunageln. Bisher hat das noch nicht so funktioniert. Ich habe zwar Dank OpenVPN es hinbekommen, dass ein Lookup auf kryten.apple.com das VPN aktiviert, aber scheinbar nutzt das iPhone dennoch zusätzlich den DNS des Mobilfunkproviders. Was ich noch testen möchte ist, im iPhone Konfigurationstool die IP des Apple Servers übers VPN zu routen, mal sehen ob das klappt.
TODO
An die, die sich mit Regexp unter Python auskennen: Was mein Wunschzustand wäre, dass man beim Attribut "siri=" beliebige Strings angeben kann und über Namen dann auf den eigentlichen Wert und die Möglichkeiten im Regexp zugreifen kann. Das ich es quasi so definieren kann:
Code:
[living_room] [[light]] type=bool siri="(Wohnen|Wohnzimmer) (Deckenspots|Spots|Licht) (?P<value>an|aus)"
Code:
if val is re.groups('value')[0]: item(True) else: item(False)
[WICHTIG]Bitte in diesem Thread nur über Bugs/Anregungen zum Plugin selber diskutieren. Fragen rund um das Thema Siri Proxy und wie man DNS etc. umbiegt sollten an anderer Stelle (evtl. hier) gestellt werden.[/WICHTIG]
Und nun, viel Spass beim Testen

Kommentar