Ankündigung

Einklappen
Keine Ankündigung bisher.

Siri-Proxy - wer hat know how und will mitbasteln?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • wiba
    antwortet
    @Thorsten
    Meine Idee war ganz einfach: ich nehme aus dem Video-Tutorial das RB-Script, wandle es etwas um, um meine MusicPals zu steuern.
    Also bin ich hingegangen und habe dieses Demo-Script verändert (also erst mal statt "Up and Running" einfach dort nur "up" reingeschrieben und gespeichert. Alles neu gestartet und nichts funktioniert. Anhand Deiner Anleitung habe ich nun bemerkt, dass man das script irgendwo noch (kompilieren?) muss. Danach flogen mir die Fehler (z. B. mit require Cora) um die Ohren. ich weiß gar nicht was Cora ist, also minimal-Script (die Snippets) genommen aus dem Forum hier. Aber das klappt auch nicht, auch Fehlermeldung. Ich glaube ich gebe das Projekt auf, das dauert mir alles zu lange.
    Werner

    Einen Kommentar schreiben:


  • phreaks
    antwortet
    Guten Morgen zusammen,
    extrem spannendes Topic hier mal wieder

    Hab selber leider nur ein iPhone4, aber ein Siri-Port gibt es ja schon. Nur die Kommunikation zu Apple scheint nicht zu gehen. Ist das bei dem Siri-Proxy notwendig?
    So wie ich Siri verstanden habe, schickt die App ja nur komprimierte Sprache bzw. Worte an Apple, der diese analysiert und gegen eine DB abgleicht.

    Macht das der Siri-Proxy auch oder erfüllt dieser die Aufgaben, sprich antwortet direkt auf die Spracheingabe des Benutzers? Denn in den Scripten lese ich ja die Kommandos in Klartext "Licht an" mit den entsprechenden Aktionen dahinter...

    Viele Grüße und weiter so.. wirklich cool!

    Ciao
    --Ted

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi,
    ich war mal wieder auf Copy&Paste-Tour.
    Hier ist ein Baustein zum Hoch/Runterdimmen - geklaput hier:
    https://github.com/IMcD23/SiriProxy/

    Erstmal hört das script auf "computer heller" bzw. "computer dunkler"

    Code:
      listen_for /computer (.*)/i do |userAction|
        say "Kommando #{userAction} "
        if userAction == "Heller " or userAction == "Hella " then
            currentvol = `/home/rubyuser/readhex.sh 1/1/81`
            newvol = (currentvol.to_i + 20)
            if newvol > 255 then
                newvol = 255
            end
            wasGood = system( "/home/rubyuser/sendhex.sh 1/1/43 #{newvol}" )
            #say "Hellichkeit hoch auf #{newvol} prozent."
            begin
                keepgoing = ask "Hell genug?"
                keepgoing.strip!
                if keepgoing == "Nein" or keepgoing == "Nope" or keepgoing == "weiter" or keepgoing == "heller" or keepgoing == "That's not good" then
                    keepgoing = "1"
                    currentvol = `/home/rubyuser/readhex.sh 1/1/81`
                    newvol = (currentvol.to_i + 20)
                    if newvol < 0 then
                        newvol = 0
                    end
                    wasGood = system( "/home/rubyuser/sendhex.sh 1/1/43 #{newvol}" )
                    #say "Hellichkeit hoch auf #{newvol} prozent."
                else
                    keepgoing = "0"
                    say "Ok. Bleibe bei #{newvol} Prozent."
                end
            end while keepgoing == "1"
        elsif userAction == "dunkler " or userAction == "weiter "  then
            currentvol = `/home/rubyuser/readhex.sh 1/1/81`
            newvol = (currentvol.to_i - 20)
            if newvol < 0 then
                newvol = 0
            end
            wasGood = system( "/home/rubyuser/sendhex.sh 1/1/43 #{newvol}" )
            #say "Hellichkeit runter auf #{newvol} prozent."
            begin
                keepgoing = ask "Ist das ok?"
                keepgoing.strip!
                if keepgoing == "Nein" or keepgoing == "Nope" or keepgoing == "weiter" or keepgoing == "That isn't good" or keepgoing == "That's not good" then
                    keepgoing = "1"
                    currentvol = `/home/rubyuser/readhex.sh 1/1/81`
                    newvol = (currentvol.to_i - 20)
                    if newvol < 0 then
                        newvol = 0
                    end
                    wasGood = system( "/home/rubyuser/sendhex.sh 1/1/43 #{newvol}" )
                    #say "Hellichkeit runnter auf #{newvol} prozent."
                else
                    keepgoing = "0"
                    say "Ok. Bleibe bei #{newvol} Prozent."
                end
            end while keepgoing == "1"
        else
            say "Das kann ich gerade nicht tun."
        end
        request_completed
    end
    dazu noch die shell-scripte
    readhex.sh
    Code:
    #!/bin/bash
    #echo "Wert1: $1 "
    vara=`groupcacheread ip:wiregate $1 | awk '{ if (FNR == 1) print "0x"$4 }'`
    varb=`printf %d  $vara `
    echo $varb
    exit 0
    sendhex.sh
    Code:
    #!/bin/bash
    echo "Wert1: $1 $2"
    groupwrite ip:wiregate $1 `/usr/bin/perl -e 'printf("%X\n",$ARGV[0]);' $2`
    
    exit 0
    Mit den Shell-Scripten wandle ich die Hex-Werte vom Eibd in Dezimal-Werte (bzw. umgekehrt)
    Eigentlich müsste ich noch 0-255 auf 0-100% "normalisieren" - hatte aber gerade keine Lust & Idee.

    Gruß
    Thorsten

    Nachtrag: damit´s "sauberer" wird könnte man noch die "vol" durch "light" oder "percent" ersetzen ;-)

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi
    @Wiba: was willst du denn mit cora machen?
    Hier im thread geht es um die KNX-Anbindung und sinnvolle scripts - cora braucht man dazu IMHO nicht.
    Die hier genannten Textbausteine sind Anpassungen im Siri-Proxy-Example-Script.
    Sorry - aber ich habe keine Lust Siri-Proxy-Installationshilfe zu geben - und ein Mehrwert für die KNX-Community ist nicht drinn... (dazu sollte es andere Foren geben).

    @All: hier mal ein Textblock für meine Wecker:
    Code:
    #Thorsten
      listen_for /(Wecker|Weckzeit|Weckruf) (für|von) Thorsten (auf) ([0-9,]*[0-9]):([0-9,]*[0-9]) Uhr/i do |weckzeit,von,auf,number1,number2|
        say "Okay, HausWecker für Thorsten wird auf #{number1}:#{number2} eingestellt"
        wasGood = system( "/home/rubyuser/senduhr.sh 8/2/1 #{number1} 8/2/2 #{number2}" )
        request_completed #always complete your request! Otherwise the phone will "spin" at the user!
      end
      listen_for /(Wecker|Weckzeit|Weckruf) (für|von) Thorsten (aus|ausschalten|deaktivieren)/i do
        say "Okay, der Wecker von Thorsten ist nun ausgeschaltet."
        wasGood = system( "groupwrite ip:wiregate 8/2/3 1" )
        wasGood = system( "groupwrite ip:wiregate 8/2/3 0" )
        request_completed #always complete your request! Otherwise the phone will "spin" at the user!
      end
      listen_for /(Wecker|Weckzeit|Weckruf) (für|von) (Klara|Clara|Verena|Thorsten) (ein|einschalten|aktivieren)/i do
        say "Zum Einschalten bitte die Weckzeit angeben."
        request_completed #always complete your request! Otherwise the phone will "spin" at the user!
      end
    Sicher - bei Weckruf einschalten könnte man auch Nachfragen welcher und wann... aber das war mir zu viel.
    Was mir zur vollständigkeit beim Wecker fehlt sind Fragen wie "wie ist die Weckzeit von ...." - da muss ich mir mal gedanken machen, kommt aber noch.
    (hat schon jemand groupread in diesem zusammenhang verwendet??? tips erwünscht)

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • wiba
    antwortet
    ok, ich sehe schon das wird wohl komplizierter. Gibt es ein einfaches Script, welches ich ausprobieren kann, ohne das irgendwelche Libraries nachgeladen werden müssen? In diesem Thread gibt es einige Snippets aber wenn man daraus eine .rb Datei macht, wird das System Fehler.

    Einen Kommentar schreiben:


  • wiba
    antwortet
    @ThorstenGehrig

    ok, wir kommen der Sache schon näher. Ich bin nicht so der Ruby/Linux-Profi. Ich habe den Server aus dem Youtube-Video von Siri mit Siriproxy erweitern – mit ungeahnten Möglichkeiten | Robins Blog nachgebaut und funktioniert. Jetzt verlangt das System cora (weil es in dem Script vorkommt). Wie kann man das nachinstallieren?

    LG
    Werner

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Relativ einfach.
    Die Verbindung zu guzzoni ist eine HTTPS-Verbindung.
    D.h. das iPhone will die gültigkeit des zertifikats überprüfen.
    Da wir aber guzzoni spielen, passt das Zertifikat nicht.
    Daher erstellen wir ein eigenes Zertifikat durch eine eigene CA (certification authority). Das diese CA aber dem Iphone nicht bekannt ist, vertraut dem iPhone diesem auch nicht....
    ... wenn man das Zertifikat dem iPhone aber als "Vertrauenswürdig" einpflanzt... ist alles gut.

    ACHTUNG: Security gefahr! Wenn jetzt ein Hacker diese VM nimmt, damit falsche Zertifikate erstellt und damit Man-in-the-Middle-Attacken gegen euch fährt - wird das iPhone diesen Zertifikaten auch vertrauen.

    Wer davor Angst hat: eigene Fake-CA mit eigenen Fake-Zertifikaten erstellen (Aufwand: 2 Minuten, Anleitung: siehe Siri-Guthup)

    Gruß
    Thorsten

    Nachtrag: gen_certs.zsh ist das script zum erzeugenen eigener Zertifikate. Zeitaufwand dann nur 20 Sekunden ;-)

    Einen Kommentar schreiben:


  • marlan99
    antwortet
    Zitat von ThorstenGehrig Beitrag anzeigen
    Hi,

    Du brauchst die ca.pem
    Ja, aber weshalb wird die benötigt? Was ist der Zweck?

    Gruss
    Marcel

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi,
    Zitat von marlan99 Beitrag anzeigen
    Hab da mal ne Anfängerfrage: Für was benötigt man das Zertifikat auf dem Iphone?
    Du brauchst die ca.pem

    Die ist zwar auch in der VM - ich habe sie hier aber nochmal attached (muss in ca.pem umbenannt werden)

    Zum umbiegen des DNS: wäre schön wenn ein Fritzbox-user mal screenshots posten würde... :-)
    Wenn jemand openwrt oder ähnliches hat: einfach in /etc/dnsmasq.com folgende zeile einfügen:
    address=/guzzoni.apple.com/192.168.x.y

    @Berliner:
    von einem Import der ETS Daten halte ich nicht viel - da hat jeder sicherlich eine eigene Namensdefinition. Eine Anpassung der Config - im Source oder als ausgelagerte Config - wird unumgänglich sein.

    @WiBa: doch - das anpassen des Example-Scripts reicht aus!
    Danach musst du den proxy natürlich neu starten.
    Ich mache das gerne in 2 unterschiedlichen sessions (mit dem "screen" Befehl) ("strg+a c" erzeugt ein neues Screen, "strg+a n" springt zum nächsten fenster, wenn man die Sitzung beendet kommt man mit "screen -Dr" wieder zum letzten screen)

    Also: script anpassen, ins proxy-screen wechseln, ctrl-c zum abbrechen und wieder mit "rvmsudo ruby start.rb" starten.

    Gruß
    Thorsten


    Gruß
    Thorsten
    Angehängte Dateien

    Einen Kommentar schreiben:


  • Bodo
    antwortet
    Hoi

    Soweit ich weiss muss man ruby-scripte nicht kompilieren.

    Einen Kommentar schreiben:


  • wiba
    antwortet
    Ich habe es hinbekommen, das der Testproxy antwortet. Wie kann ich die Scripte erweitern? Eine Änderung des Example-Scripts unter SiriProxy/plugins/siriproxy-example/lib/siriproxy-example.rb hat nichts gebracht. Muss ich die Scripte irgendwie noch komplilieren?
    Wie geht das?

    LG
    Werner

    Einen Kommentar schreiben:


  • Berliner
    antwortet
    Und wie sehen die nächsten Schritte aus?

    Hier ein Vorschlag: das Script liest ein XML/CSV File mit den Gruppenadressen ein, welches mit ETS generiert wurde. Bislang ist jede Applikation ja sehr speziell und individuell. Da im XML File ja auch die Bezeichnungen inkl. GA stehen, wäre das ein großer Schritt in Richtung Flexibilität.

    Wenn die Bezeichnungen dann so etwa lauten "Wohnzimmer Decklicht schalten" und die GA 1/0/1, hätte man doch a) den Suchstring und b) die dann zu schaltende Gruppenadresse..

    Einen Kommentar schreiben:


  • marlan99
    antwortet
    Hallo ihr Cracks :-)

    Hab da mal ne Anfängerfrage: Für was benötigt man das Zertifikat auf dem Iphone?

    @muerlemann: Hat das bei dir mit der statischen route in der Firewall geklappt um guzzoni umzubiegen?

    Gruss
    Marcel

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi,
    @h3ko: DANKE!
    Eigentlich hatte ich das auch schonmal probiert - aber irgendwie hatte das nicht geklappt.
    Jetzt passt alles.

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • h3ko
    antwortet
    Hallo,
    das sollte klappen:

    Code:
    listen_for /(Rollladen|Jalousie) im Wohnzimmer (auf) ([0-9,]*[0-9])/i do |raum,auf,nummer|
        say "Rolladen wird im Wohnzimmer auf #{nummer} % gefahren " #say something to the user!
        request_completed #always complete your request! Otherwise the phone will "spin" at the user!
        end
    
        listen_for /Wecker (für|von) Verena (auf) ([0-9,]*[0-9]):([0-9,]*[0-9]) Uhr (einstellen|stellen|einschalten)/i do |von,auf,nummer1,nummer2|
        say "Okay, Wecker für Verena wird auf #{nummer1}:#{nummer2} eingestellt"
            request_completed #always complete your request! Otherwise the phone will "spin" at the user!
        end
    Für jede () die du im listen_for benutzt brauchs du eine eigene Variable.

    Gruß
    Markus

    Einen Kommentar schreiben:

Lädt...
X