Miniserver mit Sprachassistent (Siri) steuern

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Marco Grasso
    LoxBus Spammer
    • 03.09.2015
    • 249

    #1

    Miniserver mit Sprachassistent (Siri) steuern

    Der Beitrag stammt von nightfreak ich hoffe das ist ok wenn ich das hier Poste!

    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://usernameasswort@IP-Adresse:Port/dev/sps/io/Licht_Vorzimmer/on” && sleep 10 && siriSay “Licht ist jetzt eingeschalten”
    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://usernameasswort@IP-Adresse:Port/dev/sps/io/Dimmer_Wohnzimmer/[Zahl]” && siriSay “Das Licht ist jetzt auf [Zahl] Prozent“
    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.
  • Marco Grasso
    LoxBus Spammer
    • 03.09.2015
    • 249

    #2
    Noch eine Anmerkung, curl aus dem Cydia Store sollte auch installiert werden, dass ist Gratis und curl -s -S muss immer vor den Befehl!
    Ich schreibe dass, weil ich per PM gefragt wurde, so haben alle etwas davon!

    Kommentar


    • Negropo
      Negropo kommentierte
      Kommentar bearbeiten
      Hallo Marco,

      ich habe noch eine Frage zu den ID's der Loxone Bausteine: Wie hast du die ID's herausgefunden bzw. wie setzen sich die ID's zusammen. Habe versucht einen Taster an einer Extension zu schalten und dafür die ID der Extension und den Eingang I3 (getrennt durch einen Punkt) verwendet. Leider funktioniert das nicht.

      Vielen Danke und Gruß

      Norman
  • Gast

    #3
    Hallo Marco,
    danke für die Anleitung.

    Konnte es nicht abwarte zu testen. Leider hatte ich schon 9.0.2 auf meinem iPad und konnte es nicht Jailbreaken. Ein Downgrade geht ja auch nicht mehr. Dann kam der Jailbreak ja letzte Woche endlich. Dann wollte ich loslegen und musste feststellen das Assistant+ noch nicht für iOS 9.0.2 geht.

    Grade war es dann so weit und ich konnte loslegen. Ich bin vollkommen begeistert was man damit alles machen kann und wie schnell Siri Reagiert und den Befehl ausführt.
    Werde mir mal ein paar Grenzflächenmikrofone zulegen und sie in den Zimmern verteilen und dann alle schön auf das Pad. Mal schauen ob das geht.

    Eine frage habe ich aber. Gibt es eine Möglichkeit die Kommandos irgendwie zu Importiren?
    Ich habe zwar schon eine Tastatur am Pad aber das ist doch sehr Zeitaufwändig das alles zu tippen.
    Das mit dem kopieren und einfügen ist so ne Sache auf dem Pad, auch nicht optimal.

    Gruß Sven

    Kommentar

    • Marco Grasso
      LoxBus Spammer
      • 03.09.2015
      • 249

      #4
      Hi, ich habe noch keine möglichkeit gefunden, die Komandos zu importieren! Ich wollte mein iPhone mal an den Pc hängen und den Ordner /Libary/AssistantPlusPlugin mal mit Notepad++ untersuchen! Das habe ich aber noch nicht geschafft! Du weisst ja der Dimmer nervt noch xD!
      Aber ich habe herausgefunden, wie mann mit einem Befehl mehrere Variablen einsetzen kann. Somit kann mann z. B. Die Tv Sender umschalten oder die gesammten Lichtbaustein die Szenen steuern.

      Das ganze funktioniert so:
      1: Trigger: Schalte auf [Kanal]
      2: Dann 2 Variablen einfügen
      Kanal und Kanalnummer
      3: Conditional einfügen
      When Kanal
      Equals RTL
      Set Kanalnummer
      To 5

      Der Befehl bleibt gleich nur am ende [Kanalnummer] einsetzen

      Kommentar

      • Gast

        #5
        So habe noch etwas getestet und das abfragen von Temperaturen aus den Zimmern klappt leider bei mir nicht.

        Habe mir den Code von oben Kopiert und mit meinen angaben gefüttert. da ist mir aufgefallen das du oben nach -s -S und state keine " hast ist das richtig so?

        Also Siri scheint den Trigger zu verstehen da sie nicht antwortet. Wenn ich nen Fehler im Trigger habe sagt sie immer das sie was Suchen will.
        Dann passt das schon mal. Sie bleibt stumm und unten der Balken am Bildschirm wandert die ganze zeit von links nach rechts.

        Hoffe du kannst mir da weiter helfen.

        Kommentar

        • Marco Grasso
          LoxBus Spammer
          • 03.09.2015
          • 249

          #6
          curl -s -S 'http:/xxxxx:Xxxx@192.168.1.11:80/dev/sps/io/0C000001.80A264.RAI18/state' | sed -n -e 's/.*value="\(.*\)"[^"]Code.*/\1/p' | xargs printf "Die Luftfeuchtigkeit im Badezimmer betraegt %s" | siriSay

          So sieht das ganze bei mir aus!

          Kommentar

          • Marco Grasso
            LoxBus Spammer
            • 03.09.2015
            • 249

            #7
            Aber eigentlich war das ganze nur mal eine Spielerei zum testen! Meine Frau ist nun ganz heiss drauf mit dem iPhone den Tv zu bedienen!
            Mir schwebt aber etwas anderes vor! Sowas hier https://www.youtube.com/watch?v=KTcB2gtOXps
            So das das iPhone iPad nicht benötigt wird

            Da werde ich mich mal mit beschäftigen, wenn ich etwas Zeit habe
            Zuletzt geändert von Marco Grasso; 20.10.2015, 16:18.

            Kommentar

          • Gast

            #8
            Das mit der Abfrage geht bei mir einfach nicht.

            Das sieht gut aus, nur mir ist aufgefallen das er ein Headset trägt. Da liegt meiner Meinung nach immer der Knackpunkt.
            Die befehle richtig zu hören und zu erkennen. Ich möchte nicht mit einem Headset zu Hause rumlaufen. Grade wo er Musik laufen hatte wird es mit einem Mikro im Raum schwierig.

            Ansonsten aber sehr umfangreich und auch recht schnelle Reaktion.

            Kommentar

            • Marco Grasso
              LoxBus Spammer
              • 03.09.2015
              • 249

              #9
              Bei mir klappt es so!
              Aber auch mit Siri wird das schwer, wenn bei mir Fernsehen oder Musik läuft, dann ist das ganze schon schwierig............das Micro schaltet nicht ab und Siri hört solange zu, bis ich das Micro zuhalte
              Zuletzt geändert von Marco Grasso; 20.10.2015, 17:49.

              Kommentar

              • geko
                Smart Home'r
                • 26.08.2015
                • 52

                #10
                Hallo Sven,
                ich verfolge auch schon lange das Thema
                Hast du mit dem Grenzflächenmikrofon schon Erfahrung gemacht ?

                Das Problem ist auch die Abschaltung des Lautsprechers, wenn ein Micro im Iphone,Ppad...
                gesteckt ist.
                Beste Grüße
                geko

                Kommentar

                • Gast

                  #11
                  Also mit Grenzflächenmikrofon direkt nicht. Aber mit anderen Mikrofonen schon mehr. Hatte mal ein Tonstudio.
                  Das mit dem Lautsprecher löse ich so, ich habe einen kleinen Lautsprecher mit einem mini Verstärker hinter dem iPad.
                  Da kommen auch meine Sprachausgabe von Loxone raus.

                  Kommentar

                  • geko
                    Smart Home'r
                    • 26.08.2015
                    • 52

                    #12
                    Hallo Sven,

                    du hast also getrennt das Micro und einen kleinen Lautsprecher
                    ( wie ein Hadset ) nur halt ein kleiner LS ?
                    Danke

                    Kommentar

                    • Gast

                      #13
                      Kann man so sagen. nur das der kleine Lautsprecher ca 10cm groß ist.
                      Das Mikro wird dann an der Decke angebracht. Das Mikro im iPad ist dafür nicht gut. Das erkennt schon nach ein paar Metern nicht mehr was man sagt.

                      Kommentar

                      • Marco Grasso
                        LoxBus Spammer
                        • 03.09.2015
                        • 249

                        #14
                        Ja Sven, da hast du recht! Das Mico ist nicht wirklich gut! Stellt sich nur die Frage, wie mann die Nebengeräusche herausfiltert

                        Kommentar

                        • geko
                          Smart Home'r
                          • 26.08.2015
                          • 52

                          #15
                          Sven, da kannst du uns als Ton-Profie einen Tip geben, 😉
                          Welches Micro, welcher Vorverstärker.
                          Danke

                          Kommentar


                          • Marco Grasso
                            Marco Grasso kommentierte
                            Kommentar bearbeiten
                            Da wäre ich auch dankbar für!
                        Lädt...