Siri @home

Bei mir geht es auch wieder.

Hat es jemand rausgefunden, wie man z.B. Werte von Siri an IPS übergeben kann ?

z.B. Man sagt zu Siri: Setzte im Wohnzimmer die Heizung auf 22 Grad

Dann hätte ich gerne Wohnzimmer und 22 Grad an IPS übergeben, aber ich will das nicht für jeden Raum und jede Gradzahl machen !

Einen Wert kann ich mittlerweile aus einer Frage extrahieren aber mehrere habe ich bis dato noch nicht filtern können.

Es gibt leider auch keine Beschreibung der SIRI-API.

Ich habe es derzeit mit dem Umweg über zwei Fragen gemacht.

[ol]
[li]Frage an SIRI => Heizung[/li][li]Welcher Raum => z.b. Wohnzimmer[/li][li]Welche Temperatur => 25 (ohne Ansage von Grad oder Celsius)[/li][/ol]und das übergebe ich an die siri.php im User-Verzeichnis.

Folgenden Erweiterungen der Skripte sind dazu notwendig.

siri.php:

if ($type == "SETTEMP") {
 $room = $_GET['room'];
 $temp = $_GET['temp'];
 $array= array("Raum" => $room, "Temperatur" => $temp);
 IPS_LogMessage("Siri", $room);
 IPS_LogMessage("Siri", $temp);
 IPS_LogMessage("Siri", "Raum: ".$room." - Temperatur: ".$temp);
}

[ul]
[li]in $temp steht die gewünschte Temperatur[/li][li]in $room der gewünschte Raum[/li][li]in $array sollte das für die Weitergabe an IPS_RunScriptEx evtl. als Array verpackt sein[/li][li]in der $id ist die übergebene ID für einen Aufruf von IPS_RunScriptEx.[/li][/ul]
und natürlich die siriproxy-ips.rb

  listen_for(/Heizung/i) do
    room1 = ask "Raum?"
    temp1 = ask "Temperatur in #{room1} ?"
    room = room1.strip
    temp = temp1.strip
    result = HTTParty.get("http://#{host}/user/siri/siri.php?type=SETTEMP&id=33375&room=#{room}&temp=#{temp}")
    say "Dem Raum #{room} wurde die Temperatur #{temp} Grad uebergeben!"
    request_completed
  end

Den Parameter „id“ kann man z.b. für eine Übergabe der SkriptID für einen evtl. IPS_RunScriptEx nutzen in dem man auch das $array mit übergibt und dort seine Heizung steuern kann.

Danke an bmwm3 für die Leihgabe seines Tokens :smiley:

Als Alternative für die erste Variante mit mehreren Abfragen hier die Version mit einer Frage und Übergabe des Raumes sowie der Temperatur.

  listen_for (/(Wohnzimmer|Kueche|Esszimmer|Schlafzimmer) auf ([0-9,]*[0-9])° (einstellen|stellen|einschalten)/i) do |room1,temp1,action|
    room = room1.strip
    temp = temp1.strip
    result = HTTParty.get("http://192.168.0.5:82/user/siri/siri.php?type=SETTEMP&id=33375&room=#{room}&temp=#{temp}")
    say "Der Raum #{room} wurde auf #{temp}° eingestellt!"
    request_completed #always complete your request! Otherwise the phone will "spin" at the user!
  end 

Hi vielen Dank für dein Script es hat mich Lichtjahre weitergebracht.

Habe noch 2 Problemchen:

Wie kann ich Siri sagen: Flur Licht 50 % einschalten

Er schreibt die 50 als Text hin und nicht als Zahl ? Bei ° geht es super.

Wie bekomme ich es hin, das im SiriProxy üäö erkannt werden ?

Vielen Dank im Vorraus für eure Hilfe.

Hallo, sind nun auch in die iphone Gemeinde eingetreten. Habe diesen interessanten Thread hier gefunden … ehe ich loslege eine Frage: Ist das alles noch aktuell? Funktioniert das auch mit einem ihpone 5 ?

Gruß Michael

Hallo Michael,

das funktioniert sehr gut mit einem iPhone 5 :slight_smile:

LG,
Udo

Fein, dann werde ich mich demnächst mal an die Sache Randlage. Welchen Siri Proxy setzt du denn ein? Hast du da noch einen Tipp welchem HowTo ich da folgen sollte um mich nicht zu oft zu verrennen?

Gruß, Michael

Hallo Michael,

mein Proxy läuft aktuell in einer VM auf Ubuntu und wenn ich mich noch richtig erinnere, es waren verschiedene Informationen aus dem Netz, ausgehend von diesem Thread hier.

Aktuell gibt es hier im Forium noch etwas interessantes

Siri Proxy auf Rasberry Pi
http://www.ip-symcon.de/forum/showthread.php?p=189031#post189031

LG,
Udo

Hallo Leute,

auch ich habe so meine „Startschwierigkeiten“. Ich habe in der config.yml unter /.siriproxy den folgenden Eintrag hinzugefügt:

 - name: 'IPS'
      path: './plugins/siriproxy-ips'
      host: '192.168.178.29:82'

(Darüber steht der Verweis auf das Example - mir irgendwie unverständlich warum er das eine nimmt, das andere aber nicht:confused:)

Ich habe die Dateien aus dem Download auch entsprechend unter /plugins/siriproxy-ips eingefügt.

Wie so einige andere habe ich aber das Problem beim „siriproxy bundle“ das die Fehlermeldung kommt, das der Pfad zu diesem Plugin nicht existiert: The path /usr/local/rvm/gems/ruby-1.9.3-p374@SiriProxy/gems/siriproxy-0.3.2/plugins/siriproxy-ips does not exist.
Interessanterweise wird - wenn ich „bundle install“ (trotzdem) ausführe - dieses Plugin mit aufgeführt.

Ich habe auch den Tipp mit dem Pfad beginnend mit „home“ gelesen, nur ist mein home-Verzeichnis leer und ich weiß nicht was ich dort als „DEIN_USER_VERZEICHNIS“ eintragen soll…

Vielleicht hat ja trotzdem jemand einen Tipp für mich…

Joachim

Trag mal den absoluten Pfad zum Plugin Directory ein.

Hallo wupperi,

vielen Dank für Deine Antwort! Ich habe den Pfad jetzt beginnend vom root-Verzeichnis eingetragen - und es läuft!
Licht in der Garage geht per Sprachbefehl an!:smiley:

(Mir etwas unverständlich warum es hier komplett eingegeben werden muss und es beim Example auch so funktioniert - aber so ist das wohl manchmal…;))

Joachim

Du machst das doch auch auf dem Raspberry, oder? Laeuft denn der „say“ Befehl? Bei mir bleibt Siri einfach stehen, sobald der Proxy einen „say“ Befehl sendet.

So weit bin ich leider noch nicht…

Es hat mich schon diverse Stunden gekostet so weit zu kommen (von Freitag bis heute abend diverse Zeit zur Installation auf dem Raspberry Pi), aber an der Stelle mache ich dann weiter…:wink:

Was soll den der „Say-Befehl“ machen?

Joachim

Nabend, ich habe es mit Eventghost auf dem IPS-Server und EGSpeech auf meinen Android-Geräten gelöst.

Eventghost leitet dann an IPS weiter und ein Script agiert dann.

Läuft sehr stabil :slight_smile:

Der lässt Siri etwas auf deinem iPhone sagen. Schau mal, das hier ist aus der siriproxy-ips.rb:

#capture light status
listen_for(/licht.*wohnzimmer.*an/i) { switch_light_on }
listen_for(/licht.*wohnzimmer.*aus/i) { switch_light_off }

def switch_light_on

Thread.new {

result = HTTParty.get(„http://#{self.host}/user/siri/siri.php?id=25539&state=1“)
say „Das Licht im Wohnzimmer ist an.“
request_completed #always complete your request! Otherwise the phone will „spin“ at the user!
}
end

listen_for heisst, das Siri auf die Wortfolge Licht, und dann muss noch Wohnzimmer und an im Satz sein, hören soll. Das wird als Befehl switch_light_on definiert.

Wenn switch_light_on dann identifiziert wird, wird über httparty und das webfront der Aktor geschaltet. Dann sollte Siri eigentlich sagen (say) dass das Licht jetzt an ist.

Hallo wupperi,

ich habe das Beispielskript auf meine Bedürfnisse angepasst und es kommt bei meine gestrigen „Spätabendsversuchen“ auch brav die Rückmeldung von Siri…
Ob das System nun stabil läuft kann ich Dir noch nicht sagen, dafür war es gestern ein zu kurze Testzeit - aber zumindest dort lief alles so wie es sollte…

Joachim

Hallo wupperi,

ich habe jetzt nach der gestrigen „Testinstallation“ die Skripte weiter meinen Bedürfnissen angepasst und erweitert.

Ich habe die Wahrnehmung, dass nur jeder zweite Befehl korrekt ausgeführt wird.
In etwas sieht das so aus:

  • Ich gebe einen Sprachbefehl, er wird korrekt ausgeführt
  • Ich gebe einen weiteren Sprachbefehl, es dauert so lange, dass man den Befehl abbricht (kreisförmige „Sanduhr“ um das Mikrofonsymbol) und ihn erneunt durchführt
  • Sprachbefehl wird korrekt ausgeführt

Kann das jemand bestätigen??

Joachim

P.S.: Interessant wäre es ja auch einen Wert aus dem IPS abzufragen. Ist das schon jemanden gelungen?

Der Befehl um etwas von der siriproxy-ips-.rb ist ja ein HTTParty.get und beginnt ja mit einen „result =“. Müsste man nicht auf diesem Weg etwas übergeben können und das „result“ in das „say“ einbauen???

Klar. Hier steht es. http://www.ip-symcon.de/forum/threads/16170-Siri-home?p=151420#post151420.

Ja das kann ich bestätigen. Ist bei mir auch der Fall.

Meine Konfiguration: iPhone 4S, RPi mit SiriProxy

Grüße
BunnyMC

Bei mir auch. Es scheint als bekommt er dann keine Verbindung zum guzzoni.apple.com.

EDIT: Habe mal den dnsmasq deaktiviert und auf meinem Windows DNS server guzzoni.apple.com auf meine IP Adresse umgebogen. Läuft jetzt wesentlich stabiler. Ca. 90% Erfolgsquote.