IPS siri Integration

Das Spuckt Siri aus:

(eval):1: syntax error, unexpected ‚<‘
<br />
^
(eval):2: unknown regexp option - b
(eval):2: syntax error, unexpected ‚:‘
<b>Warning</b>: Variable #0 existiert nicht…

und das kommt bei http://192.168.0.5:82/user/siri/siri.php?values=Kinderzimmer%20Licht%20an:

Warning: Variable #0 existiert nicht in C:\IP-Symcon\webfront\user\siri\siri.php on line 124

Warning: Variablenprofil # existiert nicht in C:\IP-Symcon\webfront\user\siri\siri.php on line 130

Warning: Variable #0 existiert nicht in C:\IP-Symcon\webfront\user\siri\siri.php on line 133
say „Kinderzimmer Licht ist .“

Und hier meine Struktur in IPS:

Kann es sein, dass du eventuell versuchst einen nicht Homematic Aktor zu schalten?
Das ist momentan nicht implementiert. Siehe erster Beitrag.

Oder versuchst du eine nicht boolean Variable ohne Variablenprofil zu schalten?

? ja ich versuche einen HM Gerät zu schalten ?

Und es hat eine Bootlean Variable ?

Siehe hier:

Momentan Nutzbar mit:
Variablen lesen und schreiben (über CustomAction)
Scripte ausführen
HomeMatic Aktoren lesen und schalten
HomeMatic Devices lesen
HomeMatic Dimmer, KeyMatic, WinMatic sind momentan noch nicht implementiert und getestet zum schalten

Setzt du den Link auf die boolean Variable oder auf das Homematic Device?

Aufs Device, er schaltet ihn auch aber die Meldung kommt trotzdem…

Wenn ich nur das Device Auslese kommt nur diese Meldung

ich gehe mal davon aus, dass du die version 0.0.3 von meinen script benutzt.
dann muss irgendwas mit den assoziationen in deinem variablenprofil nicht stimmen. kann es sein, dass dort keine hinterlegt sind, oder der text fehlt?

veruch mal bitte folgendes zu verändern im siri.php script
Zeile 124

$p = IPS_GetVariable($id);

durch

$p = @IPS_GetVariable($id);

Zeile 130

$p = IPS_GetVariableProfile($p);

durch

$p = @IPS_GetVariableProfile($p);

und Zeile 133

$state=GetValue($id);

durch

$state=@GetValue($id);

dann müsste zumindest der Fehler unterdrückt werden, sodass er nicht mehr ausgegeben wird.

Hallo basti,

super arbeit, das Ding läuft gut.
Ich hab das Script mal um X-Comfort erweitert. (Schaltaktor und Jalousieaktor).

Einfach folgende Zeilen einfügen:
Zeile 17:

	"jalousiestring" => array("runter" => "runter" , "rauf" => "rauf", "schließen" => "zu", "zu" => "zu", "öffnen" => "auf", "auf" => "auf","stoppen" => "stop","stop" =>"stop"),

Zeile 224:

elseif ($instance['ModuleInfo']['ModuleName'] == 'xComfort Switch') {
                            if (isset($source['STATE']) && $source['STATE'] != "") {
                                $value = $stateValues['boolean'][$source['STATE']];
                                MXC_SwitchMode($linkTargetID,$value);
                               
                                
                                
                            }
						}
                        
                        elseif ($instance['ModuleInfo']['ModuleName'] == 'xComfort Shutter') {
                            if (isset($source['STATE']) && $source['STATE'] != "") {
                                $value = $stateValues['jalousiestring'][$source['STATE']];
                                
                                switch ($value) {
                                    case 'rauf':
                                        MXC_ShutterStepUp($linkTargetID);
                                        break;
                                    case 'runter':
                                         MXC_ShutterStepDown($linkTargetID);
                                         break;
                                    case 'auf':
                                        MXC_ShutterMoveUp($linkTargetID);
                                        break;
                                    case 'zu':
                                        MXC_ShutterMoveDown($linkTargetID);
                                        break;
                                    case 'stop':
                                        MXC_ShutterStop($linkTargetID);
                                        break;
                                }
                                
                                
                                
                            }
						}

Den Status von anderen XComfort Komponenten kann man ja mit dem Link auf die Variable bereits verwenden.

@basti85: evtl kannst du ja die Änderungen in dein Script übernehmen, dann ist X-Comfort acuh fix mit drinnnen, auch bei zukünfigen Updates. (Bei Bedarf kann ich das File auch schicken bzw hochladen)

gruß garfi

So habe das Rätsel gelöst, der Link muss auf die Statusvariable gesetzt werden :slight_smile:

Hallo grafi

ist es eventuell möglich hier den Text eine Assoziation einer Statusvariable aus dem Variablenprofil als Schaltbefehl zu verwenden? wie das Array oben sollte möglichst klein gehalten werden, weil nun müsste man die ganzen Sonderfälle abfangen, wenn man z.B. ein licht auf stop schalten will, wird er ja nichts finden und schalten können. Aber der Reguläre Ausdruck würde es im Vorfeld zulassen. Da ich beim prüfen vom regulären Ausdruck ja noch nicht weiß um was für ein Device es sich handelt.

Hallo Bast,

Leider gibt es in den Standard X-Comfort Statusprofilen nur 3 Zustände (Öffnen, Schließen, Stop).
Zum Bedienen gibt es aber 5 Zustände (Öffnen, Schließen, Stop, Schritt auf, Schritt runter). Für Jalousien sind halt die die Schritt rauf und runter wichtig, wegen der Lamellenverstellung.
Die Variablen und dem X-Comfort sind auch nur Read only, über diese kann keine Aktion augelöst werden.

evtl kann man ja noch eine zuätzliche Variable anlegen, die die Erlaubten zustände kennt, und trotzdem über MXC_ … schalten

gruß garfi

Es ist nun Version 0.0.4 Online.
Achtung!!! Neue Configdatei. Dort muss wieder die Siri-Root-Kategorie eingetragen werden.
Nun kann jeder in den Unterordner selbst Module integrieren ohne, dass diese bei jedem Update verlohren gehen.

@grafi: ich habe nun das script so umgebaut, dass eigene module selbst integriert werden können. Ich war so frei und hab deine Erweiterung als xComfort.modules.php integriert, im Unterordner „modules“. Entsprechendes mit einen benötigten values im Unterordner „values“. Wenn du nicht willst, dass dein Code als festes Modul integriert ist, dann sag bescheid, dann nehme ich es raus.

Hallo Basti,

super arbeit, das funktioniert gut. Einzig Siri jammert noch etwas, da es anscheinend auf eine Antwort wartet. Daher hab ich das XComfort Script etwas ereitert.

<?php
	/*************
	Version:	0.0.2
	Author: 	Garfi35
	Date:		24.08.2013
	**************/
	if ($instance['ModuleInfo']['ModuleName'] == 'xComfort Switch') { 
	    if (isset($source['STATE']) && $source['STATE'] != "") { 
	        $value = $stateValues['boolean'][$source['STATE']]; 
	        MXC_SwitchMode($linkTargetID,$value); 
            if ($value==true) {
                addToSay($categoryName." ".$linkName." ist an.");
                } 
                else {
                    addToSay($categoryName." ".$linkName." ist aus.");
                }
            
            
	    } 
	} 
	elseif ($instance['ModuleInfo']['ModuleName'] == 'xComfort Shutter') { 
	    if (isset($source['STATE']) && $source['STATE'] != "") { 
	        $value = $stateValues['xComfortShutterPositions'][$source['STATE']]; 
	        switch ($value) { 
	            case 1: 
	                MXC_ShutterStepUp($linkTargetID); 
                    addToSay($categoryName." ".$linkName." geht rauf.");
	                break; 
	            case -1: 
	                 MXC_ShutterStepDown($linkTargetID);
                     addToSay($categoryName." ".$linkName." geht runter.");
	                 break; 
	            case 2: 
	                MXC_ShutterMoveUp($linkTargetID); 
                    addToSay($categoryName." ".$linkName." wird hoch gefahren.");
	                break; 
	            case -2: 
	                MXC_ShutterMoveDown($linkTargetID); 
                    addToSay($categoryName." ".$linkName." wird geschlossen.");
	                break; 
	            case 0: 
	                MXC_ShutterStop($linkTargetID); 
                    addToSay($categoryName." ".$linkName." gestoppt.");
	                break; 
	        } 
	    } 
	}
?>

Und ein Problem hab ich noch mit umlauten. Wenn ich im IPS einen Ordner anlege mit z.B „Büro“, wird darunter nichts ausgeführt, er findet die Kategorie nicht. Wenn ich den aber auf „Arbeitsraum“ umbenne, funktioniert es. Alsp liegt es am „ü“

gruß garfi

Irgendwas klappt bei mir noch nicht Richtig . Ich nutze die Version 0.0.4

Wenn ich um zu Testen in den Browser http://192.168.178.51:82/user/siri/siri.php?values=Wohnzimmer20%Licht20%an eingebe

Kommt als Anwort

say „Ich habe keine passende Aktion für „Wohnzimmer20cht20“ gefunden!“

Die Variable Licht ist Boolean mit dem Profil ~Switch.

siri_test.png

Hat jemand eine Idee warum das nicht funktioniert?

Hi, also ich habe in der Anleitung beschrieben, dass nur Variablen mit einer hinterlegten „Eigenen Aktion“ oder auch „CustomAction“ genannt geschaltet werden können. Des weiteren muss der Variable ein VariablenProfil mit hinterlegten Assoziationen zugeordnet werden. Dann kann die Variable über den Text der bei den Assoziationen hinterlegt ist geschaltet werden.

für deinen Zweck solltest du einfach mal ein Script mit folgendem Inhalt anlegen und dieses dann als „Eigene Aktion“ der Variable zuordnen:

<?
	SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
?>

Hi grafi,

also ich hab es gerade bei mir getestet. „äüöß“ klappt alles bei mir wunderbar.
Vielleicht ist ein Bug in der Version 0.0.4, dass kann ich leider nicht mehr prüfen, bin schon weiter :wink:

Ansonsten musst du mal deinen SiriProxy prüfen ob der auch auf UTF-8 arbeitet. Es kann sein, dass dort kein UTF-8 verarbeitet wird sondern standardmäßig ein anderer Charset eingestellt ist, dann gibt es natürlich Probleme.

Version 0.0.5 ist Online.
Download, Neuerungen und Anforderungen siehe erster Post.

der download für version 0.0.5 beinhaltet version 0.0.4

Bin jetzt auch mal endlich auf Siri eingestiegen. Leider wird bei mir aber partout nichts wirklich geschaltet.

Ich habe bspw. eine Bool Variable mit Custom Action (Profil ~Switch für Hue Lampen). Auch, wenn ich direkt mit einem Browser bspw. folgendes aufrufe: http://ips-server/user/siri/siri.php?values=Wohnzimmer%20Beleuchtung%20auf%20An. Ergebnis ist dann:

Notice: Undefined index: location in C:\IP-Symcon\webfront\user\siri\siri.php on line 15
say "Erledigt!" say "Wohnzimmer Beleuchtung ist An." 

Es passiert aber genau nichts und es erscheint nichts im Meldungsfenster. Händisches Schalten funktioniert, auch bei Variablenänderung per Skript.

Habe es dann mit einem Homematic HM-LC-Sw4-SM versucht (auf die STATE-Variable eines Kanals): http://ips-server/user/siri/siri.php?values=Garten%20Poolpumpe%20An. Leider wieder nichts, ausser:

Notice: Undefined index: location in C:\IP-Symcon\webfront\user\siri\siri.php on line 15
say "Garten Poolpumpe ist Aus." 

Was mache ich falsch?

Danke & Gruß, Axel

Hi,
nee ich hatte nur vorher vergessen den Ordner um zu benennen :wink:
Kannst es überprüfen: Die Version steht immer oben im Siri-IPS-Script (siri.php)

Hi Axel,

hatte ich vergessen zu Dokumentieren.
Ab Version 0.0.5 ist ein zusätzlicher Parameter in der URL nötig:

http://ips-server/user/siri/siri.php?[b]location=ZUHAUSE&[/b]values=Wohnzimmer%20Beleuchtung%20auf%20An

Ab Version 0.0.6 wird dann noch ein zusätzlicher Parameter in der URL nötig sein:

http://ips-server/user/siri/siri.php?[b]hashkey=<HASHKEY>&[/b]location=ZUHAUSE&values=Wohnzimmer%20Beleuchtung%20auf%20An

Bitte nochmal für deine Version testen, ob es dann geht.