Siri @home

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…:wink:

Zeige doch mal Deine Skripte in der:

  • siriproxy-ips.rb
  • siri.php
  • deine „Gegenstücke“ im IPS

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? :confused:

´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