Hallo Mastershort,
ich konnte es nicht abwarten und habe es nun gleich mal probiert:
Die Zahlen > 12 werden nun korrekt übergeben, leider werden die Zahlen <13 immer noch als Text ausgegeben…
Noch eine Idee?
Joachim
Hallo Mastershort,
ich konnte es nicht abwarten und habe es nun gleich mal probiert:
Die Zahlen > 12 werden nun korrekt übergeben, leider werden die Zahlen <13 immer noch als Text ausgegeben…
Noch eine Idee?
Joachim
Moin Joachim,
schau mal im KNX-User-Forum vorbei und gib da Siri in der Suche ein oder nimm Google.
Die haben da auch einen Mörder-Siri-Threat! Vielleicht kannst das finden?!
Da hat einer ne Positionierung der Jalousien per Siri gebastelt wo er Zahlenwerte übergibt und der hatte die gleichen Probleme!
Oder hast Du einen heftigen Dialekt?! Haha… kleiner Scherz!
Gruß,
Peter
Hallo Leute,
eine „schöne“ Variante habe ich leider nicht gefunden. Ich habe es jetzt so gelöst:
siriproxy-ips.rb
# TV Programm nach Programmnamen
listen_for (/TV Programm (.*)/i) do |program|
program = program.strip
programsend = URI::encode(program)
result = HTTParty.get("http://#{self.host}/user/siri/siri.ips.php?room=Wohnzimmer&type=TV_Programm&state=#{programsend}")
say "Ich schalte auf Programm #{program}!"
request_completed #always complete your request! Otherwise the phone will "spin" at the user!
end
# TV Programm nach Kanalnummer
listen_for (/TV.*Kanal.*([0-9]{2}|eins|zwei|drei|vier|fünf|sechs|sieben|acht|neun|zehn|elf|zwölf)/i) do |program|
program = program.strip
programsend = program
result = HTTParty.get("http://#{self.host}/user/siri/siri.ips.php?room=Wohnzimmer&type=TV_Kanal&state=#{programsend}")
say "Ich schalte auf Programm #{result}!"
request_completed #always complete your request! Otherwise the phone will "spin" at the user!
end
In IPS dann:
$Zahlen = array("null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf");
ElseIf ($Type == "TV_Programm")
{
$Kanalnummer = (array_keys($k_SIRI_DEVICES["TV_Programm"], strtoupper($State)));
$Referenznummer = $k_SIRI_DEVICES["TV_Kanal"][$Kanalnummer[0]];
ENIGMA2_Zap($k_KATHREIN['IP'], $Referenznummer);
}
ElseIf ($Type == "TV_Kanal")
{
If (is_numeric($State) == false)
{
$Zahl = (array_keys($Zahlen, $State));
$State = (int)$Zahl[0];
}
$State = $State - 1;
$Referenznummer = $k_SIRI_DEVICES["TV_Kanal"][(int)$State];
$Kanalname = $k_SIRI_DEVICES["TV_Programm"][(int)$State];
ENIGMA2_Zap($k_KATHREIN['IP'], $Referenznummer);
SetValueString(48388 /*[Siri\Siri-Aktionen\Siri-Variable]*/ , $Kanalname);
}
Die entsprechenden Information zu den Programmnamen und Referenznummern für das Enigma 2-Image sehen dann so aus (hier etwas gekürzt):
"TV_Programm" => array("DAS ERSTE", "ZDF", "SAT 1", "RTL TELEVISION", "RTL2", "PRO SIEBEN", "KABEL EINS", "VOX", "SAT 1 GOLD", "DMAX", "TELE 5", "DAS VIERTE", "SUPER RTL", "KIKA"),
"TV_Kanal" => array("1:0:19:283D:3FB:1:C00000:0:0:0:", "1:0:19:2B66:3F3:1:C00000:0:0:0:", "1:0:1:445C:453:1:C00000:0:0:0:", "1:0:1:2EE3:441:1:C00000:0:0:0:", "1:0:1:2EF4:441:1:C00000:0:0:0:", "1:0:1:445D:453:1:C00000:0:0:0:", "1:0:1:445E:453:1:C00000:0:0:0:", "1:0:1:2F1C:441:1:C00000:0:0:0:", "1:0:1:4460:453:1:C00000:0:0:0:", "1:0:19:132F:3EF:1:C00000:0:0:0:", "1:0:19:1330:3EF:1:C00000:0:0:0:", "1:0:1:3F:21:85:C00000:0:0:0:", "1:0:1:33:21:85:C00000:0:0:0:", "1:0:1:701:5:85:C00000:0:0:0:")
Bei den erkannten Programmnamen muss man sicher noch etwas experimentieren (z.B. weil man wohl kaum „RTL TELEVISION“ sagen wird)…
Joachim
Hab die Lösung gefunden, einfach Ctrl + Z drücken und man kann auf der Konsole wieder was eingeben.
Der Befehl „bg“ schickt den aktuellen Prozess dann komplett in den Hintergrund.
@JPaeper: Mensch du legst ja richtig los :D:D
@all: gibt ein neues Image von Siriproxy:
http://sourceforge.net/p/siriproxyrpi/news/2013/03/release-2013-03-xx/
und hier Details von SiriProxy selber:
GitHub - plamoni/SiriProxy: A (tampering) proxy server for Apple's Siri
Gruß Thomas
Hallo Thomas,
gibt es auch eine Möglichkeit ein Update zu machen oder muss man wieder ganz von vorne beginnen?
Joachim
Gute Frage, kann ich dir (noch) nicht beantworten.
Wenn ich was rausgefunden hab, melde ich mich.
Aber zum Basteln reicht mir auch erstmal das jetztige Setup.
Gruß Thomas
hallo gemeinde,
habe mich gestern an´s werk gemacht und versucht, das siriproxy image auf meinem raspberry pi zu installieren. hat auch soweit ohne großartige linux-kenntnisse gefunzt. der proxy verkündet auch nach dem start „up and running“.
auch die kommunikation mit meinem eierphone scheint zu klappen. kann allgemeine anfragen an siri stellen, aber auch bei einem „test siriproxy“ antwortet siri brav: „siriproxy is up and running“.
die siriproxy-ips.rb habe ich schon versuchsweise angepasst, um einen schaltbefehl per homematic auszuführen.
wenn ich nun „licht schlafzimmer an“ sage, bekomme ich die antwort zurück: „das licht im schlafzimmer ist an“.
das licht wird aber nicht wirklich angeschaltet. die instanz-id ist angepasst!
ich glaube, ich stehe kurz vor´m ziel, sehe aber nach nunmehr 2 tagen den wald vor lauter bäumen nicht mehr.
könnte mir vorstellen, dass bei der einbindung der siri.php in iPS der hase im pfeffer liegt.
oder muss hier wirklich nur unter …/webfront/user ein ordner siri angelegt und die siri.php dort abgelegt werden?
wäre schön, wenn jemand einen tipp hätte.
auf jeden fall allen einen schönen rest vom sonntag!
gruß, sven
Hallo Sven,
ich habe eben noch mal meine Glaskugel gescheckt - ist offenbar defekt…
Zeige doch mal Deine Skripte in der:
Joachim
siriproxy-ips.rb
# encoding: utf-8
require 'httparty'
require 'cora'
require 'siri_objects'
require 'pp'
class SiriProxy::Plugin::IPS < SiriProxy::Plugin
attr_accessor :host
def initialize(config = {})
self.host = config["host"]
end
#capture light status
listen_for(/licht.*schlafzimmer.*an/i) { switch_light_on }
listen_for(/licht.*schlafzimmer.*aus/i) { switch_light_off }
def switch_light_on
Thread.new {
result = HTTParty.get("http://192.168.178.33:82/user/siri/siri.php?id=55983&state=1")
say "Das Licht im Schlafzimmer ist an."
request_completed #always complete your request! Otherwise the phone will "spin" at the user!
}
end
def switch_light_off
Thread.new {
result = HTTParty.get("http://192.168.178.33:82/user/siri/siri.php?id=55983&state=0")
say "Das Licht im Schlafzimmer ist aus."
request_completed #always complete your request! Otherwise the phone will "spin" at the user!
}
end
end
siri.php
<?php
$id = intval($_GET['id']);
$type = $_GET['type'];
// HOMEMATIC
if ($type == "HM")
{
$state = $_GET['state'];
if ($state == 1)
{
HM_WriteValueBoolean($id, "STATE", true);
}
elseif ($state == 0)
{
HM_WriteValueBoolean($id, "STATE", false);
}
}
// Variable setzen
if ($type == "SETVAR")
{
$state = $_GET['state'];
SetValue($id, $state);
}
// Variable auslesen
if ($type == "READVAR")
{
$Var = GetValue($id);
echo $Var;
}
// Skript starten
if ($type == "RUNSCRIPT")
{
IPS_RunScript($id);
}
?>
aber jetzt fängt´s an! welche gegenstücke in ips??? :o
…ich glaube das hatten wir schon mal (irgendwo auf Seite 20 in diesem Thread) - vielleicht…
Zeige mir bitte mal die Funktion „HM_WriteValueBoolean“ die in Deinem Skript aufgerufen wird.
Joachim
Nachtrag: Beitrag 192
Liegt vielleicht doch nicht daran - was passiert denn im Raspberry Pi wenn Du den Befehl eingibst?
Setze mal versuchsweise eine Testvariable im IPS (String) mit den Werten die vom Siriproxy übertragen werden…
genau da hapert´s ja bei mir dran!
wie, was und vorallem wohin schickt der raspberry pi denn seine befehle an iPS?
´ne string-variable kann ich ja in iPS anlegen, aber wo fange ich die werte ab, die vom siriproxy übertragen werden?
…in Deiner siri.php
Dort z.B. nach der Variablenübergabe
SetValueString(ID Deiner Stringvariablen im IPS, $id." - ".$type." - ".$state);
z.B. so (Ausschnitt!)
<?php
$id = intval($_GET['id']);
$type = $_GET['type'];
$state = $_GET['state'];
SetValueString(ID Deiner Stringvariablen im IPS, $id." - ".$type." - ".$state);
// HOMEMATIC
if ($type == "HM")
{
if ($state == 1)
Ansonsten: Was gibt denn Dein Raspberry Pi aus, wenn Du in Dein iPhone sprichst?
Joachim
in der string-variablen steht: 55983 - - 1
kann leider keinen screenshot von der ausgabe auf dem raspberry pi machen. kein plan, wie das auf dem teil geht.
meine ansage wird verstanden, bekomme auch zurück gesagt: „das licht im schlafzimmer ist an“.
dann kommt „sending request completed“.
…im Putty einfach markieren (nichts weiter) und dann hier im Thread per Kontextmenü einfügen…
Joachim
Nachtrag: Es sieht ja so aus, als ob der Type nicht ankommt…
Nachtrag 2: Ist ja auch kein Wunder:
result = HTTParty.get(„http://192.168.178.33:82/user/siri/siri.php?id=55983&state=1“)
das müsste dann ungefähr so ergänzt werden:
result = HTTParty.get(„http://192.168.178.33:82/user/siri/siri.php?id=55983&state=1&type=HM“)
jetzt steht in der string variablen 55983 - HM - 1.
aber das licht geht immer noch nicht an. sieht aber so aus, als kämen wir der sache näher.
…ist denn die ID korrekt??
Joachim
ja, das ist die id der entsprechenden status-variablen. oder muss hier die id der instanz hin?!?
Ich habe kein HM, deswegen kann ich Dir das nicht sagen…
Kannst Du nicht mal an anderer Stelle im IPS schauen wie es dort gemacht wurde? Ansonsten: probieren…
Joachim
Nachtrag: Mache doch mal ein Testskript irgendwo im IPS, trage dort z.B. ein:
HM_WriteValueBoolean(55983, „STATE“, true);
bzw.
HM_WriteValueBoolean(55983, „STATE“,false);
Wir das Licht nun geschaltet?
Hallo,
ich habe auch ein Thema, vielleicht hat sich jmd damit hier schon beschäftigt.
Ich hab den Vorteil, dass fast mein komplettes Equipment per URL Aufrufe steuerbar ist.
Dazu habe ich in der Datei „siriproxy-example.rb“ folgenden Eintrag gemacht, der auch funktionniert:
listen_for /Test/i do
say "klappt"
system "curl 'http://192.168.1.42/preset?switch=9&value=on'"
end
Damit wird ein T10 und eine Funksteckdose geschaltet.
Leider klappt folgendes nicht, ganz SiriProxy funktionniert dann nicht.
listen_for /Test/i do
say "klappt"
system "curl 'http://192.168.1.12:8181/MaxWrestler.exe?ergebnis=dom.GetObject("BidCos-RF.HEQ0481427:3.PRESS_LONG").State(1)'"
end
Es handelt sich dabei um eine Keymatic.
Im Terminal funktionniert der Befehl ohne Probleme.
Jmd eine Idee!?
Gruß Thomas
Nun, ich vermute jetzt bist Du genau in die Falle gerannt, weswegen die anderen hier das Ganze über IPS laufen lassen…
Du kannst so keine Nachricht verschicken. Wenn Du vor den zu versendenen Text ein URI::decode (siehe Ruby-Dokumentation) machst wird es wohl versendet, dass Gerät wird es aber wohl nicht verstehen…
Joachim