Hallo Zusammen,
wie versprochen, hier eine Anleitung wie man sein SmartHome mit Siri steuern kann.
Voraussetzung für die Umsetzung ist ein iPhone mit Jailbreak. Für diejenigen die nicht wissen was ein Jailbreak ist:
Apple hat sein Betriebssystem soweit abgesichert, dass nur offiziell freigegebene Apps aus dem App-Store darauf installiert werden können. Dadurch ist es nur bedingt möglich sein iPhone / iPad zu personalisieren. Ein Jailbreak ist eine Software welche die Beschränkungen von Apple aufhebt.
Ich möchte hier nicht darauf eingehen wie ein Jailbreak installiert wird, es gibt dutzende (einfache) Anleitungen und Videos im Internet wie man in 5 Minuten sein iPhone / iPad jailbreakt. Am besten klappt das meiner Erfahrung nach mit dem kostenlosen Tool von „TaiG“. Einfach mal nach „TaiG Jailbreak“ googeln.
Achtung, nach einem Softwareupdate ist der Jailbreak wieder weg. Bei neu erschienenen iOS Versionen kann es unter Umständen Wochen bis Monate dauern bis findige Entwickler wieder einen Weg finden das Gerät zu jailbreaken. Also immer gut überlegen vor einem Update ob man seinen Jailbreak auf unbestimmte Zeit verlieren will.
Ist der Jailbreak erfolgreich durchgeführt habt ihr ein zusätzliches App-Symbol für einen alternativen App-Store (Cydia) auf eurem Homescreen.
Hier könnt ihr alle möglichen Apps (teilweise kostenlos) zur Modifizierung eures iPhones/iPads runterladen.
Öffnet nun Cydia und ladet (falls erforderlich) die Updates runter. Anschließend sucht ihr nach der App „Assistant+“ (aktuell 1,99 €) und installiert diese.
Leider gibts hier im Forum eine Beschränkung auf 10.000 Zeichen pro Beitrag, daher gehts im nächsten Post weiter[IMG]file:///C:/Users/Marco/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif[/IMG]
Nun beginnt die eigentliche Arbeit.
In der App könnt ihr unter dem Punkt „Capture Group Commands“ die gewünschten Befehle die Siri erkennen und ausführen soll erstellen.
Dazu drückt ihr auf das „+“ und vergebt einen Namen für die neue Funktion.
Unter „Trigger“ werden die Wörter eingetragen die Siri erkennen muss um das Kommando auszuführen.
Unter „Command“ wird die Funktion bzw die Funktionen (mehrere möglich) eingetragen.
Ausserdem besteht die Möglichkeit durch erneutes Drücken auf das „+“ sogenannte „Variablen“ und „Conditionals“ anzulegen. Mehr dazu später.
1.) Trigger:
Am einfachsten ist es GENAU den Satz reinzuschreiben auf welchen Siri später hören soll.
Man wird allerdings schnell merken, dass diese Methode nicht sehr praktisch ist, da man in der Regel verschiedene Ausdrücke und Satzstellungen verwendet und nicht für jeden ähnlichen Satz ein eigenes Kommando anlegen will.
Alternativ dazu könnt ihr hier mit sogenannten „Regular Expressions“ (kurz: RegEx) arbeiten. Die Verwendung von diesen sieht auf den ersten Blick etwas kryptisch und schwierig aus. Wenn man sich hier allerdings anhand der zahlreichen Erklärungen im Internet kurz einlest hat man schnell heraussen wie‘s funktioniert.
Hier einige Beispiele:
Ich möchte, dass Siri den Befehl erkennt sobald das Wort Licht/Beleuchtung, Vorzimmer/Garderobe undeinschalten/auf in dieser Reihenfolge in einem Satz vorkommt, dann würde der RegEx-String den man bei Trigger reinschreibt folgendermaßen aussehen:
Code:
(Licht|Beleuchtung).+(Garderobe|Vorzimmer).+(einsc halten|auf)
Damit werden dann verschiedene Sätze erkannt.
z.B.:
„Dreh das Licht im Vorzimmer auf“
„Beleuchtung bei der Garderobe einschalten“
„|“ = Dieses Zeichen (senkrechter Strich) bedeutet ein ODER. Es ist darauf zu achten, dass man die verschiedenen Ausdrücke in Klammern setzt. Es können beliebig viele Ausdrücke durch dieses Zeichen getrennt werden und somit verschiedene Begriffe für Räume oder sonstiges angegeben werden.
„.+“ = Die Kombination aus Punkt und Plus bedeutet, dass zwischen den Wörtern eine beliebige Anzahl an Zeichen/Wörter (inklusiv Leerzeichen) vorkommen darf.
Wichtig dabei ist nur, dass die Reihenfolge der Wörter eingehalten wird.
Möchte man jede beliebige Reihenfolge zulassen, muss man diese an allen Positionen im Satz mit einem „|“ (oder) einfügen.
z.B.:
Code:
(Licht|Beleuchtung|Garderobe|Vorzimmer|einschalten |auf).+(Licht|Beleuchtung|Garderobe|Vorzimmer|eins chalten|auf).+(Licht|Beleuchtung|Garderobe|Vorzimm er|einschalten|auf)
Grundsätzlich seid ihr damit schon ziemlich flexibel, was in der Regel auch ausreichend sein sollte.
Es gibt allerdings noch sehr viel mehr Möglichkeiten um komplexere Regeln mit RegEx zu erstellen, das würde hier jedoch die Anleitung sprengen ;-)
2.) Command
Hier wird dann die eigentliche Aktion welche ausgeführt werden soll definiert.
Die Befehle werden dann direkt am iPhone/iPad im Hintergrund in der Unix/Linux ähnlichen Shell ausgeführt.
Um euch langes Suchen im Internet zu ersparen, hier die wichtigsten Befehle mit denen ich alles realisieren konnte:
WEB Befehle um z.B.: Ausgänge zu setzen, Schalter zu betätigen, usw funktionieren folgendermaßen:
Code:
curl –s –S “http://[username]:[passwort]@[IP-Adresse oder Web-Adresse]:[port]/dev/sps/io/[Name oder ID des Loxone Bausteins]/[Befehl bzw. Wert]“
Das Ganze natürlich ohne eckige Klammern, aber mit den Anführungszeichen.
Eine genaue Anleitung wie man WEB Befehle verwendet gibt es direkt von Loxone unter folgendem Link:
Webservices, Remotezugriff, SPS Fernwartung | Loxone
Möchte man, dass Siri auf den gesprochenen Satz antwortet, gibt man folgendes ein:
Code:
siriSay “Beliebiger Text“
(mit Anführungszeichen)
Möchte man mehrere Befehle im selben Siri-Kommando kombinieren, muss man die Befehle mit „&&“ trennen.
Zu erwähnen wäre vielleicht noch „sleep“.
Mit z.B. „sleep 10“ zwischen den Befehlen wird eine Pause von 10 Sekunden gemacht bevor der zweite Befehl ausgeführt wird.
Beispiel:
Code:
curl –s –S “http://username

Diese Verkettung würde als erstes das Licht einschalten, dann 10 Sekunden warten und anschließend würde Siri sagen „Licht ist jetzt eingeschalten“
Damit können beliebig viele Aktionen bei Loxone mit nur 1 Kommando ausgeführt werden.
3.) Variablen:
Durch die Verwendung von Variablen könnt ihr nicht nur fixe Befehle wie „on“ und „off“ bei eurem Miniserver umsetzen, sondern auch variable Werte für Temperatur, Lautstärke, Dimmer einstellen. Das funktioniert natürlich auch für das Feedback von Siri. Sprachantworten können dadurch ebenfalls flexibel gestaltet werden.
Dazu über den „+“ Button eine Variable hinzufügen.
Nun vergebt ihr einen beliebigen Namen für eure Variable
Anschließend wird diese beim gesprochenen Befehl erkannt und kann 1:1 an Loxone weitergegeben werden.
Beispiel:
Variable nenne ich „Zahl“ (ohne Anführungszeichen)
Um den Satz „Dreh das Licht im Wohnzimmer auf 80 %“ zu erkennen, könnte der Trigger dann so aussehen:
Code:
Licht.+Wohn.+\s[Zahl]\s%
Hier muss man mittels RegEx schon etwas genauer angeben wo sich der zu interpretierende Text/Zahl im Satz befindet.
% bedeutet hier, dass das Ende des Satzes erreicht ist
\s bedeutet ein Leerzeichen
[Zahl] ist der Text bzw die Zahl die übergeben wird (unbedingt mit eckigen Klammern).
Das Kommando dazu sieht dann beispielsweise so aus:
Code:
curl –s –S “http://username

4.) Conditionals
Damit ist es z.B. möglich, ein gefundenes Wort (Variable) in einen Wert umzuwandeln.
Conditionals werden ebenfalls mit dem „+“ Button eingefügt (Voraussetzung: ihr habt bereits entsprechende Variablen definiert.
Beispiel:
„Schalt das Licht auf blau“
Angenommen blau ist die zweite Szene in eurem Lichtbaustein, dann könnte das Wort blau als „2“ interpretiert werden und die zweite Szene gestartet werden. Sollte hierzu jemand genauere Infos benötigen, einfach fragen ;-)
5.) Wie kann Siri Auskunft über einen aktuellen Status in meinem SmartHome geben?
Wer nicht nur Befehle an Loxone senden möchte, sondern auch Infos über Temperatur oder sonstiges erfragen möchte kann das natürlich auch machen.
Dazu wie beschrieben erstmal einen entsprechenden Trigger anlegen.
Im zweiten Schritt benötigen wir nun ein etwas komplizierteres Kommando.
Geht dazu wie folgt vor…
Sucht euch den entsprechenden Web-Befehl für den gewünschten Status welcher abgefragt werden soll mithilfe der bereits erwähnten Loxone Anleitung:
Webservices, Remotezugriff, SPS Fernwartung | Loxone
Diesen gebt ihr nun im Browser auf dem Computer ein.
Beispiel:
Code:
http://username:passwort@IP-Adresse:Port/dev/sps/io/Temperatur_Wohnzimmer/state
Als Antwort erhaltet ihr nun zwei Zeilen die in etwa so aussehen:
Code:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<LL control="dev/sps/io/Temperatur_Wohnzimmer/state" value="21.5°" Code="200"/>
Nun müsst ihr Siri beibringen, dass der Wert zwischen den Anführungszeichen bei value=”21.5°“ ausgegeben werden soll.
Das funktioniert wieder mit den bereits erwähnten „Regular Expressions“, allerdings gelten hier die Regeln der Regular Expressions für Linux, und nicht wie bei der Eingabe des Triggers für PHP. Die RegEx für Linux sind etwas schwieriger und habe ich selbst nur durch stundenlanges herumprobieren und Anleitungen lesen erstellen können.
Der langen Rede kurzer Sinn, um Werte aus dem Feld „value“ auszulesen und diesen anschließend von Siri vorlesen zu lassen, hat mich folgendes Kommando ans Ziel gebracht:
Code:
curl -s -S 'http://username:passwort@IP-Adresse:Port/dev/sps/io/Temperatur_Wohnzimmer/state' | sed -n -e 's/.*value="\(.*\)"[^"]Code.*/\1/p' | xargs printf "Die Temperatur im Wohnzimmer betraegt %s" | siriSay
Als Ergebnis dieses Kommandos kriegt ihr nun von Siri den Satz „Die Temperatur im Wohnzimmer beträgt 21.5°“ vorgelesen.
Das Kürzel %s gibt den zuvor ausgelesenen Wert aus und kann an jeder beliebigen Position im Satz eingefügt werden.
6.) Mit Siri UDP Pakete an beliebige Empfänger (Bsp.: Loxone) senden:
Falls dieses Feature für irgendjemand von Interesse ist kann ich den Punkt noch ergänzen.
Bei der Erstellung von Kommandos gibt es quasi keine Grenzen, alle Aktionen lassen sich beliebig kombinieren (&&) und mit eigenen Ideen erweitern. Hoffentlich konnte ich alles einigermaßen verständlich erklären und würde mich über euer Feedback und Erfolgserlebnisse freuen [IMG]file:///C:/Users/Marco/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif[/IMG]
Getestet habe ich das Ganze bei meinem iPhone 6 unter iOS 8.1.2
Sollte aber auch bei allen anderen Versionen/Geräten funktionieren.
Garantie gebe ich dafür natürlich keine ;-)
Sollte die App (Assistant+) aus irgendeinem Grund nicht kompatibel mit eurer derzeit installierten iOS Version sein, werdet ihr im Normalfall von Cydia informiert und könnt die App dann nicht installieren.
Kommentar