Siri API – Siri Befehle an Heimautomatisierung übergeben

Achtung: Unter iOS8 funktioniert diese Version nicht. Es gibt aber inzwischen ein Update, das hier zu finden ist.

Da ich bei meiner Heimautomatisierung von Anfang an eine Sprachsteuerung eingeplant hatte, ich aber nicht so recht wusste, wie ich das umsetzen sollte, kam mir Siri auf Apples iPhone gerade recht. Allerdings bietet Siri keine offene API an um mit anderen Apps oder gar Webanwendungen zu kommunizieren. Mit Jailbreak ging mal hier und da was, auch verschiedene Siri Proxys, die es ermöglichen sollten die Eingaben abzufangen, haben sich inzwischen zurückgezogen, nachdem Apple mit iOS 7 das Protokoll offenbar grundlegend überarbeitet hat.

Nachdem ich also fast 4 Stunden damit verbracht hatte nicht funktionierende Siri Proxys ans laufen zu bekommen, wollte ich endlich Erfolge sehen. Das Ergebnis waren 3 weitere Tage herumspielen mit dem Squid Proxy und einige verkürzte Nächte 😉 Jetzt kann ich aber sagen: Es funktioniert.

Der Trick ist denkbar einfach: Siri ermöglicht Google Suchanfragen. Also greife ich nicht mehr irgendwo im Siri Protokoll ein, sondern ich lasse den HTTPS Traffic von Google über den Proxy laufen. Mit einem gefälschten Zertifikat, dass nur einmal auf dem iPhone akzeptiert werden muss, kann ich den Proxy im sogennanten transparent Modus betreiben und so mitlesen, welche URL mein iPhone anfordert.

Um allerdings nicht jede Google Suchanfrage direkt auflaufen zu lassen – ich möchte Google ja weiterhin verwenden – muss ein vorher definiertes Schlüsselwort in der Anfrage enthalten sein, damit der Proxy den Traffic überhaupt zu gesicht bekommt. Anderfalls steuert eine per PAC (automatische Proxykonfiguration) gesteuerte Umleitung den Traffic an meinem Proxy vorbei, direkt zu Google.  Mann muss dann zwar immer Google + Schlüsselwort und dann seinen Befehl sagen, das ist mir allerdings allemal lieber als ein Jailbreak oder ein Siri Proxy der nach dem nächsten Update nicht mehr funktioniert.

Der Proxy leitet dann die Anfrage an einen HTTP Server weiter, der komplett in Python geschrieben ist. Dieser nimmt dann die Auswertung vor und kann z.B. das Licht einschalten. Dass das funktioniert ist in dem folgendem Video zu sehen:

Mir ist der Dienst GoogolPlex zwar zuvor gekommen und zwar mit der gleichen Lösung, allerdings wollte ich meinen eigenen Dienst haben und nicht auf einen externen zurückgreifen müssen. Außerdem habe ich den Dienst erst gefunden, nachdem ich die HTTP Umleitung schon fertig hatte.

Den Quellcode habe ich (mal ausnahmsweise gut dokumentiert) unter https://github.com/HcDevel/Siri-API online gestellt. Die dazugehörige Dokumentation ist unter https://github.com/HcDevel/Siri-API/wiki/_pages zu finden.

Wer Fragen oder Probleme hat, kann sich damit gerne in den Kommentaren melden, allerdings würde ich es bevorzugen, wenn diese im Git als Issue auf Englisch gestellt werden könnten. Je nachdem, wie groß das Projekt noch wird, könnte ich mir damit eventuell ein wenig Arbeit ersparen.

Subscribe
Notify of
25 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Marc
9 years ago

Sehr coole Geschichte, muss ich mal ausprobieren! Danke für die Doku!

Squid compiliert gerade auf meinem RasPi…

Marc
9 years ago
Reply to  Marc

Seit ein paar Tagen nun erfolgreich im Einsatz. Nett wäre es, wenn Worte nicht nur genau in Reihenfolge erkannt würden, sondern in beliebiger Folge.

Bsp:

Alle Rollos schließen
Rollos alle schließen

Ist das möglich?

Danke für das nette Tool!!

Stefan
9 years ago

Hallo,

war lange auf der Suche nach einer Alternative für SiriProxy :). Super Job, den Du da machst! Welche Hardware hast du denn für die Hausautomation im Einsatz? Möchte das nämlich gern nachbauen.

Danke

Marcus
9 years ago

Hallo,

wird SiriApi von Dir noch aktiv weiterentwickelt?

Marcus

Marcus
9 years ago
Reply to  robin

Hey Robin,

tolle Arbeit! Ich würde SiriAPI gerne unter iOS 8 nutzen.
Bist du mit der Entwicklung schon weitergekommen?

Gruß,
Marcus.

[…] Hier ein Interessanter Link zu dem Thema Siri API – Siri Befehle an Heimautomatisierung übergeben | SmartNOOB Blog […]

basti
9 years ago

Hi, endlich alternative zum Siri Proxy gefunden 🙂 ich hoffe die Version für die IOS8 funktioniert bald 😉 oder wurde die Arbeit schon eingestellt?

mfg

nice job

Matthias
9 years ago

Hallo,

Bin gerade auf deine Seite gestoßen,
Versuche jetzt schon seit Tagen Sprachbefehle vom iPhone (iOS 8) am Raspberry zu geben aber leider ohne Erfolg 🙁

Bist du denn schon weiter gekommen?
Oder ist die eine Alternative bekannt?

Gruß
Matt

Yannick
9 years ago

cooles Projekt!:D zu schade das es nicht mehr unter ios8 funktioniert. Neulich ist mir beim erstellen einer Notiz mit Siri aufgefallen dass diese innerhalb von Sekunden durch die iCloud mit anderen Geräten syncronisiert wird. Ich als blutiger Python Anfänger habe leider keinen blassen Schimmer, aber ist es irgendwie möglich, mithilfe der pyicloud libary (https://github.com/picklepete/pyicloud) einen Raspberry Pi iCloud-Notizen auslesen/auswerten zulassen? Danke im vorraus..

Yannick
9 years ago
Reply to  robin

Ich habe mich in den letzen Tagen auch mal etwas rumprobiert und bin zu einer funktionierenden, aber äußerst unvorteilhaft und ‘primitiven’ Lösung gekommen. Mal abgesehen von den fast peinlichen Python-Skills die ich mir da zusammen gegoogelt habe ist hier auch das Problem das permanent auf Apples Server zugegriffen wird. Dieses Skript (http://pastebin.com/9FEdSMeg) läuft auf meinem Pi zusammen mit der inotes.py (https://github.com/xme/inotes.py). Die inotes.py ließt soweit ich das verstanden habe alle Notizen irgendwie per IMAP aus und durch den Parameter die oben in meinen Skript angegeben sind bekomme ich eine schöne Liste aller meiner Notizen. Danach läuft eine Schleife in der… Read more »

Yannick
9 years ago
Reply to  robin

achsoo… Genial! Das freut mich zuhören :D. Erstmal einen großen Dank und Respekt für deine Mühe!

[…] einem Kommentar von Yannick unter dem ursprünglichen Beitrag, gibt es jetzt eine neue Version. Diesmal greift ein einfaches Python3 Script auf den IMAP Dienst […]

[…] SiriAPI bis iOS 7 […]