Achtung: Mit iOS 9 funktioniert diese Version nicht mehr. Eine ausführliche Erklärung gibt es hier.

Im April hatte ich bereits SiriAPI auf GitHub veröffentlicht. Damals funktionierte sie bis einschließlich iOS 7 und hatte Tücken ohne Ende. Neben der komplizierten Installation, für die es erforderlich war Squid selber zu kompillieren, war der Code Quick&Dirty und der Betrieb ressourcenhunrig. Mit iOS 8 war das Ganze dann vorbei, Apple hatte offenbar eine erweiterte Zertifikatsprüfung eingebaut, die die Manipulation des HTTPS Traffics durch selbstsignierte Zertifikate nicht mehr zulies.

Dank 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 der iCloud zu und liest damit die Notizen aus. Mit Siri können Notizen erstellt werden. Enthalten sie das Schlüsselwort (Standardmäßig iPhone), reagiert das Python Script und eine gewünschte Aktion wird ausgeführt.

Wildcards sind nach wie vor vorhanden, nur anstatt dem Einsatz irgendwelcher externen Tools wie Squid läuft alles in dieser einen Python Anwendung. Außerdem ist das Ganze jetzt objektorientiert aufgebaut. Damit wird SiriAPI also anstatt als Programm als Bibliothek genutzt und kann so auch direkt in bestehende Projekte eingebunden werden. Ich verwende SiriAPI8 beispielsweise für meine Heimautomatisierung.

Siri API heißt jetzt SiriAPI8 und ist in einem neuen GitHub Repository unter https://github.com/HcDevel/SiriAPI8 verfügbar. Damit möchte ich eine klare Abgrenzung zwischen der alten Version erreichen, die unter iOS 7 nach wie vor funktioniert. Theoretisch sollte aber SiriAPI8 unter iOS 7 funktionieren, sodass iOS 7 Nutzer nun wählen können. Für Siri API gibt es aber definitiv keine Updated oder Support mehr.

Erkannte Notizen werden nach dem Ausführen automatisch gelöscht, sodass sich auch kein Müll ansammelt. Man sollte natürlich davon absehen Notizen zu erstellen, die das Schlüsselwort enthalten und nicht für SiriAPI8 bestimmt sind, da auch diese gelöscht werden würden. Wer also Notizen mit dem Inhalt iPhone erstellt, der sollte das Schlüsselwort ändern.

Siri ist also wieder einmal gehackt worden, diesmal kann Apple theoretisch nichts mehr dagegen tun, weil genauso wie SiriAPI8 auch andere Email Programme wie Thunderbird oder Outlook auf IMAP zugreifen. Hoffen wir mal das Apple nicht wieder einen seltsamen Weg findet um mich auszusperren.

103 thoughts on “SiriAPI8 – Siri API für iOS8”

  1. Hey danke du bist echt genial!
    aber eine kleine frage ich bin ein echter anfanger in sowas
    könntest du mir erklaren wie ich das auf ein raspberry pi machen könnte? und so auch die ausgänge zu steuern?

    1. Die Anleitung zur Installation steht im Wiki. Da dann einfach die Linux Schritte ausführen. Anschließend gibt es in dem SiriAPI8 Verzeichnis eine Datei example.py. Die einfach mal mit Benutzername und Passwort anpassen und ein bisschen probieren. Die GPIOs habe ich bisher am Pi noch nicht benutzt. Von daher kann ich dir da keine Anleitung geben.

      1. Okey.
        Ich habe die “setup.py” installiert aber wenn ich die “example.py” starten möchte mit python shell
        sagt er:
        nameError: name”get_version” is not defined.
        was mache ich falsch? oder muss man die Datei anders öffnen?

        Entschuldige für die dummen fragen. ich kenne mich zwar in der Elektronik aus und auch etwas in der Programierung von Microkontrollern mit Assambler aber ich habe keine Ahnung von Python und Linux.

        1. Hast du alles (auch die Installation) mit python3 ausgeführt oder hast du nur python eingegeben?

          1. Python3

            Bloß es kommt immer dasselbe wenn ich example.py starten möchte

          2. Was passiert wenn du in der example.py die Zeile mit get_version() mit einer # auskommentierst?

          3. Ich habe gerade einen Fehler in der Software gefunden. Kümmere mich darum

    2. Falls du die GPIOs über SiriAPI ansteuern möchtest musst du zuerst die GPIO Bibliothek in dein Python Script einbinden.

      import RPi.GPIO as GPIO “bindet Bibliothek ein”
      GPIO.setmode(GPIO.BCM) “legt die Belegung der GPIOs fest.(Pinnummern oder GPIO-Nummern)”

      Um das Python Script dann mit der SiriApi zu nutzen musst du diese einbinden. Anleitung dazu hat Robin ja verlinkt. Die GPIOs über Siri anzusteuern ist jedoch momentan? nicht sinnvoll, da das Ansteuern der GPIOs nur per sudo bzw. root möglich ist. Dein Pi könnte also leicht geknackt und missbraucht werden.

      Ende meines kleinen Vortrags 😀

      1. Naja, so leicht ist das nun auch wieder nicht, da SiriAPI ja keinen Server erstellt sondern sich mir der “vertrauenswürdigen” Apple Cloud verbindet. Damit die Ausführung durch root ein Sicherheitsrisiko werden würde, müsste ich schon eine Backdoor einbauen, was bei Open Source Software nicht wirklich clever wäre. Alternativ scheint es aber auch WiringPi zu geben (http://www.sirmc.net/view/9001/). Damit ist es laut Beitrag möglich die GPIOs von Python aus ohne root Rechte anzusteuern.

  2. Hallo Robin, ich würde gerne mein raspberry pi mit siriproxy betreiben, wenn ich jetzt ein iphone mit iOS 6 besorge, wird es noch funktionieren?

    1. Dazu kann ich nichts sagen, da ich nicht der Entwickler von siriproxy bin und ihn auch nie benutzt habe. Du solltest auch nicht vergessen, dass iOS 6 von Apple inzwischen mehr oder weniger abgeschrieben ist und die aktuellen Entwickler Tools darauf ausgelegt sind nur noch Apps für iOS 7 und höher zu erzeugen. Dementsprechend gibt es einige Apps für iOS 6 gar nicht bzw. keine Updates mehr.

  3. Hallo
    Das ist eine super Arbeit was du hier leistest danke.
    Aber kannst du mir vielleicht kurz helfen?
    Ich hab die Setup.py ausgeführt in der example.py den Login ausgebessert. Aber wenn ich Siri auf meinem iPhone starte und “erstelle Notiz iPhone hallo Name” sage wird nur eine neue Notiz angelegt ohne Antwort. Kannst du mir weiterhelfen? Ich möchte in Zukunft meine Hausautomatisierung von Homematic per Siri steuren. Ich kann alle Geräte über http Link ansprechen.
    Hast du hierfür vielleicht schon ein Beispiel wie ich mir einen Link aufrufen kann?
    Danke
    lG Huby

  4. Hallo Robin,

    vielen Dank für Deine tolle Arbeit.

    Kannst Du mir vielleicht noch sagen, wie ich als Aktion z.B. einen TCP Call starten kann ?
    Normalerweise muss ich folgenden Befehl in der Kommandozeile eingeben:

    echo “Hallo” > /dev/tcp/192.168.40.10/11024

    Wie kann ich das aus der example.py starten, wenn alle Bedingungen stimmen ?

    Danke für Deine Hilfe

    Gruß
    Martin

        1. Über Python Sockets. Ich übergebe das ganze an meinen HTPC, auf dem meine komplette Heimautomatisierung IP-Symcon läuft.

  5. Hallo Robin,

    Jetzt habe ich doch noch eine Frage:

    Wie bekomme ich es hin, das die SiriAPI8 beim Start geladen wird ?

    Habe mehrere Sachen versucht, es aber nicht hinbekommen.

    Danke für Deine Hilfe
    Martin

        1. Um die Umlaute habe ich mich bisher noch nicht gekümmert, weil ich gehofft habe, dass die keiner braucht 😉 Da werde ich mir die Kodierung mal genau ansehen müssen um die entsprechend korrekt darstellen zu können.

          1. Das wäre Super. Solange werde ich mein “Büro” als “Arbeitszimmer” deklarieren. 😀

          2. Erst mal Danke !!!! Somit geht meine Voicesteuerung teilweise wieder.

            Wegen der Umlaute hab ich die Dateien mit Notepad++ in UTF-8 gewandelt und in den Dateien im Kopf (Header) folgende 2 Zeilen eingefügt. Funktioniert.

            #!/usr/bin/env python
            # -*- coding: utf-8 -*-

          3. Danke für den Tipp. Ich werde das mal ausprobieren und dann im Projekt einpflegen. Dann kann ich das Umlaut Ticket auch schließen.

  6. Hallo Robin,
    wie kann ich denn das Schlüsselwort “iPhone” in etwas anderes ändern?
    Gibt es noch andere Möglichkeiten außer die Notitzen zu nutzen?
    Mit schwebt ein einfacherer Befehl wie “Siri, Licht an!” vor.
    Vielen Dank für deine Antwort.
    Viele Grüße,
    Tobi

    1. Wie du das Schlüsselwort ändern kannst steht in der Dokumentation auf GitHub. Ich verstehe allerdings nicht ganz, wieso du da nicht mal geguckt hast. Immerhin habe ich das mehrfach verlinkt, unter anderem am Ende der Installationsanweisungen.
      Es ist auch schön, dass dir etwas vorschwebt wie Siri licht an. Das geht aber nur mit einem Jailbreak, solange Apple Siri nicht öffnet. Es gibt von Apple keinen offiziellen Weg Siri für solche Zwecke zu benutzen und damit muss man immer Umwege gehen. Klar gibt es auch andere Wege wie Abrufen von SMS oder Emails die du mit Siri erstellt hast. Dann aber viel Spaß das zu programmieren bzw. noch die nötige Hardware dazu anzuschaffen.

    2. Du kannst das Schlüsselwort in der SiriAPI.py (liegt im Unterverzeichnis SiriAPI8) ändern.

      Es muss in den Zeilen 13 und 22 ausgetauscht werden:

      self.keyword = “iphone”

      def set_keyword(self, keyword=”iphone”):

      ===========================================================

      Normalerweise gibt es auch eine Funktion für die example.py aber die funtioniert bei mir nicht:

      SiriAPI.set_keyword(keyword) #Changes the keyword from iPhone to any string

        1. Ähm, *hust* ich glaube das mit den Gänsefüßchen hättest Du für die ganz do….. nochmal dabeischreiben sollen. 😀

          1. Das habe ich einfach vorrausgesetzt, weil das in eigentlich jeder Programmiersprache die ich kenne so ist, wenn man einen String übergeben möchte. Ich werde das im Wiki entsprechend ergänzen.

  7. Hallo Robin,
    ich habe jetzt alles versucht, die example.py beim reboot automatisch zu starten. Es wird auch in den tasks angezeigt, dass der Prozess läuft, allerdings tut sich nichts wenn ich eine Notiz erstelle. Wenn ich die example von Hand starte läuft alles bestens. Liegt das eventuell an falschen Rechten ? Ich habe nicht so die Ahnung was python betrifft. Vielleicht kannst Du mir nochmal genau sagen, mit welchem Befehl und welchen Rechten es bei Dir läuft.

    Danke und Gruß
    Martin

    1. Die Rechte müssen eigentlich immer gehen. SiriAPI8 benötigt keine besonderen Rechte. Bei mir lasse ich das einfach mit Benutzerrechten laufen und habe keine Probleme. Es kann aber natürlich sein, dass dein Programm besondere Rechte benötigt. Das sollte aber auch im normalen Betrieb passieren. Gestartet wird SiriAPI8 immer mit python3 . Wenn du das von Hand startest bist du wahrscheinlich in irgendeinem Unterverzeichnis, in das du per cd gewechselt bist? Hast du im Autostart den kompletten Pfad angegeben?
      Ansonsten kannst du die Ausgabe mal umleiten, indem du hinter python3 example.py noch > /home/user/siri_out.txt setzt. Damit sollte wenn du user anpasst die Ausgabe in dein Homeverzeichnis umgeleitet werden und du kannst nachsehen, ob da irgendwas passiert. Wichtig dabei: SiriAPI8 erst stoppen und dann in die siri_out.txt sehen.

    2. Hi Robin,

      habe jetzt auch das Problem lösen können.

      Manchmal muss man einfach suchen und probieren. Auch wenns Stunden dauert. :/

      Jetzt lasse ich Dich erstmal in Ruhe weiter an der SiriAPI8 feilen.

      Ich freue mich schon auf weitere Releases von Dir.

      Gruß
      Martin

      1. Ich mache das Ganze jetzt über ein autostart bash Skript welches beim reboot Durch die /etc/rc.local ausgeführt wird.

  8. Hi, super Sache!
    Ist es möglich das ganze mit pilight zu verbinden oder wie funktioniert das ?

    1. Ich kenne pilight nicht aber ich habe mir das mal kurz angesehen. So wie es aussieht stellt pilight eine HTTP API zur Verfügung. An die könntest du per Python aus der jeweiligen Aktion passende Steuerbefehle senden. So mache ich das auch mit meiner eigenen Heimautomatisierung.

      1. okay gut.
        es wäre nett wenn du deine konfiguration einmal hochladen kannst bzw wenn sie online ist den link senden kannst?

  9. Hi Robin,

    erstmal danke für deine Mühe.

    Beim iCloud Login muss ich bei deinem Script meinen Usernamen (also das vor dem “@icloud.com”) angeben, nicht meine eMail, sonst kriege einen Login Fehler.

    Als ich das rausgefunden habe, dachte ich das example würde gehen, aber er gibt nichts aus. Ich habe 4 Notizen auf iCloud erstellt (iPhone Hallo Benjamin, iphone hallo Benjamin, … etc wegen Gross/Kleinschreibung), aber er gibt nur die Versionsnummer aus…
    Er löscht die Nachrichten auch nicht.
    Hast du eine Idee?

    Und kann ich auch komplett auf das keyword verzichten und alle Notizen parsen?
    Muss ich dann SiriAPI.set_keyword(“”) oder SiriAPI.set_keyword(” “) ausführen?

    Und für alle, die sprechfaul sind: Siri versteht auch “Notiz bla bla”. Man muss nicht “Erstelle” oder “Neue” sagen 🙂

    1. Ganz auf das Schlüsselwort verzichten ist (noch) nicht möglich. Mir war das Risiko bisher zu groß, dass irgendjemand das Schlüsselwort deaktivert und dann seine wichtigen Notizen löscht…
      Wenn du dich auf icloud.com anmeldest, kannst du da deine Notizen sehen und hast du im Beispiel hello durch hallo ersetzt?

      1. Ich nutze die Notizen gar nicht, daher wäre mir egal, wenn er alle löscht 🙂

        Ja, ich sehe die Notizen in iCloud. Ich habe die Notizen dort angelegt.

        Und ich habe auch “hello” durch “hallo” ersetze in der example.py

        1. Nachtrag: er löscht die Nachrichten doch aus iCloud raus.
          Aber ich kriege keine Ausgabe, nur die Version und Press any key
          Auch mit anderen Schlüsselwörtern geht es nicht, zB “bla”…

          1. Ich glaube ich habe es falsch benutzt. Ich habe die Notizen immer vor dem Start angelegt. Aber ich habe im Code gesehen, dass du beim Start “aufräumst” und die vorhandenen Nachrichten löscht.

            Wenn ich in iCloud selbst Notizen anlege, während dein Code läuft, dann kriege ich diese Ausgabe:
            SiriAPI8 error: No action defined for iphone hallo ben

            Wenn ich Notizen übers iPhone anlege, dann klappt es 🙂

            Gibst du mir noch einen Tipp, wie ich den Code so anpasse, dass er ohne das keyword funktioniert?

          2. Schön, dass auch mal jemand in den Quellcode guckt, wenn er Probleme hat. Den Aufräumvorgang habe ich eingebaut, damit sich keine wiedersprüchlichen Nachrichten ansammeln wie Licht an und aus, die dann unsinnigerweise abgearbeitet werden würden.
            Um das Keyword zu deaktivieren ist diese Zeile für dich interessant.
            Jetzt frag mich nicht, wie man das abändern muss, da müsste ich selber erstmal probieren 😉 Die muss jedenfalls so abgeändert werden, dass sie alle Nachrichten ausgibt. Theoretisch müsste sie so aussehen: typ, data = self.connection.search(None, 'ALL')

          3. So, ich habe den Code mal angepasst:

            if self.keyword.strip() == “”:
            typ, data = self.connection.search(None, ‘ALL’) #Delete unhandled commands
            else:
            typ, data = self.connection.search(None, ‘ALL’, ‘SUBJECT “‘ + self.keyword + ‘”‘) #Delete

            Funktioniert. Ist keine so super schöne Lösung, da man den gleichen Code an 2 Stellen hat: in connect und in fetch, aber es funktioniert

  10. Hey Robin,

    vielen Dank für deine Arbeit. Ich habe die ganze Zeit schon nach so etwas gesucht 😉
    Hast du vielleicht eine Idee, wie man das ganze mit WiringPi realisieren könnte? Das Programm nutzt einfache Terminalbefehle z.B.: sudo ./send 00000 2 1
    Darüber wird dann die Funksteckdose mit dem Systemcode 00000 B angeschaltet. Wenn man am Schluss anstatt der 1 eine 0 setzt, geht sie wieder aus…
    Vielleicht kannst du mir helfen das mit Python und deiner SiriAPI8 zu realisieren 🙂

    Danke
    LG Paco

    1. Nachtrag: Ich habe leider fast keine Ahnung von Python, kann da also selber nicht viel machen…

    2. Das geht so:


      def cmdline(command):
      from subprocess import PIPE, Popen
      process = Popen(
      args=command,
      stdout=PIPE,
      shell=True
      )
      return process.communicate()[0]

      Und dann später verwenden:

      cmdline(“sudo ./send 00000 2 1”)

      1. Ok cool, danke!

        Aber wie baue ich das jetzt in die SiriAPI ein? Ich würde z.B. gerne sagen: Notiz Licht Wohnzimmer an/aus. Tut mir leid, dass ich so blöd frage, aber ich bin absoluter Neuling in Sachen Python…

    3. Du musst alles in die example.py eintragen.

      So sollte es eigentlich funktionieren:

      from SiriAPI8.SiriAPI import *
      import os

      def lichttreppeon(q, wildcards): #Answer function
      resultcode = os.system(“sudo ./send 00000 2 1”)

      def lichttreppeoff(q, wildcards): #Answer function
      resultcode = os.system(“sudo ./send 00000 2 0”)

      SiriAPI = SiriAPI(“user@icloud.com”, “password”) #Create SiriAPI8 object
      #print(SiriAPI.get_version())

      SiriAPI.action.add([[‘licht treppe einschalten’, ‘*’]], lichttreppeon)
      SiriAPI.action.add([[‘licht treppe ausschalten’, ‘*’]], lichttreppeoff)

      SiriAPI.connect() #Connect to iCloud

      SiriAPI.set_keyword(“siri”)

      input(“Press any key…n”)
      SiriAPI.disconnect() #Close connection

      1. Danke schon mal für deine Mühe 🙂
        Leider bekomme ich jetzt einen Fehler angezeigt:

        File “Siri.py”, line 1
        from SiriAPI8.SiriAPI import os def ^

        SyntaxError: invalid syntax

        1. Das Problem liegt beim def am Ende der Zeile. Das muss eigentlich vor den Namen deiner eigenen Funktion, die vermutlich in der nächsten Zeile steht.

          1. Ok, aber jetzt bekomme ich erneut einen Error:

            File “Licht.py”, line 5
            resultcode = os.system(“sudo ./send 00000 2 1″)
            ^
            IndentationError: expected an indented block

          2. Ehrlich gesagt möchte ich jetzt nicht jeden Fehler in deinem Code beheben. Dein Problem ist die Einrückung. Da ist Python sehr zickig. Aber ohne den ganzen Code kann ich dir dazu keine weiteren Tipps geben. Du kannst einfach mal versuchen vier Leerzeichen davor zu setzen.

          3. Ja ich weiß, es wäre total dämlich jetzt jeden einzelnen Fehler hier zu posten. Ich habe einfach den Code verwendet, den Martin mir geschrieben hat, aber jetzt meckert er schon wieder wegen dem ./send da der Punkt vor dem Befehl anscheinend nicht funktioniert (invalid character) :/

          4. Korrigiere mal alle ” und ‘ in dem Code, dann funktioniert es. Mir hat es weiter geholfen, Danke dafür!

  11. Super Projekt.
    Nur da ich halt Windows Nutzer hat SiriApi8 bei mir nicht so ganz funktioniert.
    Aber anhand deines Python Scriptes konnte ich eine Funktionierende Windows Version mit C# programmieren.

    Werde ich evt demnächst auch auf GitHub stellen 🙂

    Vielen Dank an dich & Mach weiter so!

    1. Ich habe in einem Forum inzwischen Nutzer gesehen, die berichtet haben, dass SiriAPI8 bei ihnen erfolgreich unter Windows läuft. Kann eigentlich nur ein Problem mit deiner Python Umgebung gewesen sein.

      1. Naja, macht ja nichts.
        Habe inzwischen sogar noch ein wenig rumprobiert und nun Zwei weitere Wege unter Windows gefunden wie man Siri umleiten und somit eigene Befehle ausführen kann, manchmal braucht man nur einwenig Hilfestellung, die ich dank deines Skriptes hinbekommen habe 🙂

  12. Nur mal so eine Idee um dein Hack auszubauen…

    Da man für die Notizen ja ein Standartkonto angeben kann, könnte man ja z.B. auf einem RaspberryPi ein Server aufsetzen und dann die Notes darauf einrichten – im Prinzip dann ein dauerloop nach neuen Notes machen und sofort das Command ausführen – würde die zeitliche Verspätung durch die Nutzung vom IMAP deutlich reduzieren.

    1. Würde z.b. über Dovecot möglich sein.

      Eine andere Möglichkeit wäre es natürlich anstatt Notizen direkt mit e-mails zu arbeiten – obwohl da die Siri Befehle echt lang würden, wäre es bei Postfix z.b. möglich ein postalias einzurichten, so dass jede e-mail an einen bestimmten account direkt als script ausgeführt würde und erst gar nicht als E-mail im Postfach landet.

      Z.b. /etc/aliases
      siri: “|/siriAPI/script”

      Im script selber müsste dann aber sau viel regxp laufen, denn der gesamte Inhalt der e-mail inkl. Headers würde als stdin ankommen.

      Dann einen Eintrag im Adressbuch der z.B. “Mich” heisst und die e-mail hinterlegt hat – und ein Kommando an Siri wie: e-mail an “mich” – Licht im Wohnzimmer an

      Blöde daran ist nur, dass Siri anfängt nach dem Betreff der mail zu fragen und man den Versand auch noch bestätigen muss.

      Na ja, nur so ein paar Ideen…

    2. Da hatte ich bei der Planung auch drüber nachgedacht. Natürlich würde das die Verspätung deutlich reduzieren aber den Aufwand auch deutlich erhöhen. Schließlich würde das bedeuten, dass ich eine komplett eigene IMAP Server Implementierung bauen müsste und da habe ich definitiv nicht die Zeit zu, zumal SiriAPI ursprünglich nur so nebenbei entstanden ist und ich gar nicht mit einer großen Nutzerzahl gerechnet hatte. Das war bei der iOS7 Implementierung auch noch deutlich an der Umsetzung zu sehen, die iOS8 Version ist da ja deutlich besser geworden.
      Dennoch möchte ich SiriAPI8 jetzt nicht zu meinem primären Projekt machen. Ein großer Aufwand in Relation zu der Gefahr, dass Apple mit iOS9 wieder einen Weg findet mich auszusperren ist es einfach nicht wert.

  13. Erstmal geniale Idee, das so zu machen! Und nun zu meiner Frage. Die Anmeldedaten werden ja nicht verschlüsselt übertragen? Richtig?

  14. Hallo Robin,

    SiriAPI8 funktioniert Super!!! Vor allem ist das ja eigentlich nicht Siri abhängig und kann also auch auf älteren iPhones usw. genutzt werden. DANKE!! 🙂

    Nun eine Frage: Kann SiriAPI8 auch selber Notizen anlegen?
    Eine feedback von SiriAPI8 wehre manchmal nämlich schon praktisch. (Ob ein Prozess z. B. erfolgreich abgeschlossen wurde)

    MfG
    Jannis

    1. SiriAPI8 kann (derzeit) keine Notizen anlegen. Wenn ich mich richtig erinnere liegt, dann habe ich auch nur einen Lesezugriff aktiviert. Ich denke deutlich praktischer wäre es eine App wie QPush für Rückmeldungen zu benutzen. Eine Erlaubnis ihre API zu nutzen habe ich bereits samt Dokumentation erhalten.

  15. Hallo Robin,
    klasse Arbeit – bin echt begeistert wie gut das funktioniert!
    (nutze SiriAPI8 mit FHEM). Einzig das mit den Umlauten
    hab ich noch nicht zum Laufen gebracht – ist hier schon
    eine Lösung in Sicht?

    1. Ich habe das bisher aus Zeitgründen leider noch nicht umsetzen können, aber sieh dir den Kommentar 170 an. Das könnte eine Lösung für dich sein.

      1. Hallo Robin, den Tip von Andreas mit der UTF-8 Umwandlung hab ich schon ausprobiert – hat bei mir leider nicht funktioniert. Evtl. weil ich nicht konsequent alle Dateien umgewandelt habe…

        Aber vielleicht kann ja Andreas nochmal Details dazu geben, wie er’s gemacht hat.

        Wär schon super wenn das noch klappen würde. Arbeitszimmer für Büro geht ja noch, bei Küche wird’s schon schwieriger…

  16. Hallo in die Runde,
    ich bin ziemlich frisch mit Python unterwegs. Alles hat super geklappt aber wenn ich example.py starte läuft es durch bis imaplib. Dann kommt “imaplib.error: SEARCH command error: BAD [‘Invalid Search criteria’]”. Habe es auf nem Mac installiert. Python 3.5. Lief auch alles sauber durch. Kann mir bitte jemand helfen. Bin am verzweifeln. Danke im Voraus.
    Tom

  17. Irgendwo habe ich es schonmal gefuden, aber ich finde es nicht mehr wieder.

    Wo lässt sich nochmal die Zeit für den Abrufintervall ändern? Und was ist die min Zeit die bei SiriAPI funktioniert?

    1. Es gibt kein Parameter um das Intervall zu verändern. SiriAPI8 prüft laufend auf neue Notizen, ungefähr im Sekundentakt. Das ist aber auch nur dadurch begründet, dass es bei schnelleren Abfragen in meinen Tests zu Problemen gekommen ist. Vielleicht kann man das Timing noch etwas verbessern aber an sich sollte die Geschwindigkeit doch reichen?
      Wenn du das unbedingt tun willst, dann kannst du das natürlich machen. Die Datei und Zeile ist hier zu finden: https://github.com/HcDevel/SiriAPI8/blob/master/SiriAPI8/SiriAPI.py#L94
      Sollte es danach aber nicht mehr funktionieren setz bitte erstmal den Wert wieder hoch.

  18. Okay Danke! Ich werd mal ein bisschen rumprobieren.

    Bei mir dauert es von der Befehlannahme bis zum ausführen ca. 5-12 sec. Dabei weiss man aber auch nicht wie schnell das iphone die notiz auf der cloud abgelegt hat. Muss ja garnicht mal an SiriAPI liegen.

  19. Hallo Robin,

    vielen Dank fürs Teilen deines Projektes! Ich komme leider mit meinen Credentials nicht in die Cloud. Habe es schon nur mit dem ersten Teil vor dem @icloud.com probiert, aber es funktioniert nicht. Kann es ggf. an der 2Factor Authentifizierung liegen?

    1. Die zwei Faktor Authentifizierung scheint definitv ein Problem darzustellen. Ich habe da auch auf GitHub schon eine Fehlerbeschreibung erhalten, leider hat sich der Ersteller nicht mehr gemeldet.
      Scheinbar muss man ein Application Password festlegen, womit eigentlich der Sinn der zwei Faktor Authentifizierung flöten geht, wenn das Passwort nicht signifikant stärker ist, als das das man sonst verwendet hat.
      Beschrieben ist das bei Apple unter https://support.apple.com/en-us/HT204397

      1. Danke! Damit komme ich schon etwas weiter, bekomme aber nun Fehler mit dem Keyword. Ich schaue mir das erstmal an….

      2. funktioniert jetzt…. man muss auch die richtige Python Version nehmen 🙂
        pi@raspberrypi1 ~/SiriAPI8 $ python –version
        Python 2.7.3
        pi@raspberrypi1 ~/SiriAPI8 $ python3 example.py
        8.0.2
        Press any key…

        1. Einer der häufigsten Fehler ;). Ich glaube ich muss mal eine Überprüfung vor dem Start einbauen, ob die richtige Python Version genutzt wird.

  20. Hallo,
    Wie bekomme ich das exaple.py in den Autostart?
    Mit crontab -e hab ich es schon versucht, aber erfolglos!

  21. Hi,

    super API. Ich habe aber ein Problem. Wenn ich sie auf meinen PI und PI2 nutze, kommt nach mehreren Stunden folgende Meldung:

    Exception in thread Thread-1:
    Traceback (most recent call last):
    File “/usr/lib/python3.2/threading.py”, line 740, in _bootstrap_inner
    self.run()
    File “/usr/lib/python3.2/threading.py”, line 693, in run
    self._target(*self._args, **self._kwargs)
    File “/home/pi/SiriAPI8/SiriAPI8/SiriAPI.py”, line 81, in __fetch
    email_message = email.message_from_bytes(raw_email)
    File “/usr/lib/python3.2/email/__init__.py”, line 48, in message_from_bytes
    return BytesParser(*args, **kws).parsebytes(s)
    File “/usr/lib/python3.2/email/parser.py”, line 135, in parsebytes
    text = text.decode(‘ASCII’, errors=’surrogateescape’)
    AttributeError: ‘int’ object has no attribute ‘decode’

    Hast Du da eine Idee?
    Danke.
    Mfg
    Basti

      1. Hi,

        ist die Version 8.02.
        Momentan behelfe ich mir damit, dass ich stündlich einen Restart des Scriptes mache .. Dirty, aber geht ….

        Mfg
        Basti

    1. So wirklich weiß ich nicht was da schiefläuft. Es ist auf jeden Fall durch das letzte Release passiert, weil ich da das Error Handling verbessert habe, sodass es nur noch bei Verbindungsproblemen reagiert. Was man mal versuchen könnte wäre Exceptions des entsprechenden Befehls zu behandeln und die Verbindung bei Fehlern neu herzustellen. Ich komme da leider frühestens erst nächstes Wochenende zu.
      Wenn du da selber mal nachsehen kannst und willst, der Befehl steht in Zeile 81: GitHub

  22. Gibt es mitlerweile eine möglichkeit, dass die Skripte automatisch im Hintergrund beim systemstart auf dem Raspberry Pi gestartet werden ?

    1. Keine die SiriAPI8 direkt mitbringen würde. So wie es aussieht wird SiriAPI8 auch nicht mehr unter iOS 9 funktionieren und ich werde die Entwicklung wohl einstellen.

      1. Hi Robin,
        Die Idee ist toll und es lief auch super unter IOS8.
        Hast du eine Ahnung warum die Inbox “Notes” plötlich einfach leer ist?

  23. Hi Robin,

    leider kann ich es nur bestätigen. Ich habe soeben iOS9 installiert und nichts geht mehr. Ich könnte echt kotzen. Das war total super. Mit dem Mopped nach Hause gekommen und eben mal der Haussteuerung gesagt, dass die Garage zu öffnen ist. Ich würde mich total freuen, wenn Du einen Weg finden könntest unter iOS9.

    Viele Grüße
    AL

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.