Remote HomeMatic Script Schnittstelle

Hallo alle zusammen,

da ich das in diesem Forum noch nicht in dieser deutlichkeit gefunden habe nochmals zur Info:

Per XML-RPC lassen sich HomeMatic Geräte über die HomeMatic Zentrale oder den BidCoS-Service direkt ansteuern (z.B. über VB.NET).

Sie bietet aber keine Möglichkeit, auf Programme, Systemvariablen, Räume, Gewerke oder Favoriten zuzugreifen. Für diese Zwecke ist HomeMatic Script besser geeignet.

Zur Fernsteuerung der HomeMatic Zentrale kann die Remote HomeMatic Script Schnittstelle eingesetzt werden. Dabei wird das HomeMatic Script per HTTP-POST (genauso wie beim versenden von XML-Literalen) an die HomeMatic Zentrale gesendet. Diese verarbeitet das Script und überträgt die Standardausgabe sowie die Werte der verwendeten Variablen in der HTTP-Antwort zurück an den aufrufenden Prozess.

Der HomeMatic Script-Interpreter verbrigt sich hinter folgender URL auf der Homematic Zentrale:

http://<ip_der_ccu>:8181/Test.exe

Beispiel:


var switch = dom.GetObject("BidCos-RF.FEQ0048598:1.STATE");
if (switch)
{
switch.State(1);
}

Mit diesem Script per HTTP-Post an „http://<ip_der_ccu>:8181/Test.exe„ ist es mir möglich einen Aktor zu schalten.

Die HomeMatic Script-Dokumentation Teil 1-4 hat auch über die Remote-Schnittstelle ihre Gültigkeit!!

Wenn interesse besteht kann ich mein VB.NET Beispielprojekt einstellen. Mit diesem Beispielprojekt können dann auch XML-Literale (XML-RPC) versendet und empfangen werden.

Hallo alle zusammen,

mir ist die geringe Resonanz nicht ganz klar. Ist das schon allgemein bekannt? Ich finde diese Möglichkeit HomeMatic-Scripte per HTTP-Post zu versenden eigentlich sehr schön.

Hier mal ein (das) Beispiel in PHP :


$CCU_IP = "192.168.2.100";

$HM_Script = "
var switch = dom.GetObject('BidCos-RF.FEQ0048598:1.STATE');
if (switch)
{
switch.State(1);
}
";

echo HMRS_HTTP_Post($CCU_IP, $HM_Script);

function HMRS_HTTP_Post($CCU_IP, $HM_Script)
{
/*=============================================
HMRS_HTTP_Post - Martin Heinzel - 20.02.2011
Version: 0.0

Beschreibung:
Mit dieser Funktion werden HomeMatic Scripte per HTTP Post an die HomeMatic
verschickt.


Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

//--------------------------- Main ----------------------------

// Initialisieren der Socket-Verbindung
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";

if (!$fp)
{
	$res = "$errstr ($errno)<br />
";
}
else
{
	// Zusammenstellen des Header für HTTP-Post
	fputs($fp, "POST /Test.exe HTTP/1.1
");
  	fputs($fp, "Content-type: application/x-www-form-urlencoded
");
  	fputs($fp, "Content-length: ". strlen($HM_Script) ."
");
  	fputs($fp, "Connection: close

");
  	fputs($fp, $HM_Script);
	while(!feof($fp))
	{
   	$res .= fgets($fp, 500);
  	}
  fclose($fp);
}

return $res;

//----------------------- Main ENDE ----------------------------

}

Mit dem Besitz von IPS hinkt das Beispiel etwas (schalten eines Aktors).
Es soll ja nur ein Beispiel zum versenden von Scripten sein.

Wie gesagt:

Die HomeMatic Script-Dokumentation Teil 1-4 hat auch über die Remote-Schnittstelle ihre Gültigkeit!!

Hallo Martin,

Du hättest besser ein Beispiel zum auslesen oder setzen einer Systemvariable geben sollen. Das kann IPS nicht!

$HM_Script = ’
var mySysVar = dom.GetObject(„Anwesenheit“);
WriteLine(mySysVar.Variable());
WriteLine(mySysVar.Variable(0));
WriteLine(mySysVar.Variable());
WriteLine(mySysVar.Variable(1));
WriteLine(mySysVar.Variable());
';

Dein Hinweis ist super. Ich benutze momentan den XML-API (FW-Patch) um mit IPS an die Systemvariablen der Homematic zu kommen. Ich denke ich werde den Firmwarepatch wieder deinstallieren und diese Methode verwenden.

Besten Dank!
Uwe

Hallo Uwe,

sorry für die späte Antwort. Ich bin gerade im schönen Göttingen bei der netten Firma Satorius.

Noch ein Beispiel:

Starten von Programmen auf der HomeMatic:


$HM_Script = "
var programObj = dom.GetObject('test_Buero');
programObj.ProgramExecute();
";

@ Martin

Dein Ansatz gefällt mir sehr gut und ich möchte mich da einarbeiten.

Du sagtest bei einem Deiner Beiträge:

Wie gesagt:

Die HomeMatic Script-Dokumentation Teil 1-4 hat auch über die Remote-Schnittstelle ihre Gültigkeit!!

Ich hatte mir damals nicht alle Script Dokus gezogen - nur den Teil ‚HM_Script_Teil_4_Datenpunkte_V1.0‘ - kann den Rest nun aber nicht mehr finden. Könntest Du mir die fehlenden Teile evtl. rüber schieben?

An diese seltsame Syntax muss ich mich wohl erst gewöhnen - ber vielleicht kannst Du mir kurz sagen, wie ich per PHP eine CCU-Systemvariable nur auslesen - also nicht verändern - kann?

Schon mal Danke und Gruss aus Wisebaden

Dieter

Hallo Dieter,

sorry fuer die spaete Antwort.
Ich bin wie gesagt noch am Gardasee.

Bin am Donnerstag wieder zu hause.
Dann melde ich mich noch mal!

Hallo Dieter,

hier ist ein Link zur Scriptdokumentation.

Das ist aber eine alte Version :cool:

Die neuere ist bei G… mit Eingabe der schwierigen Stichworte „homematic datenpunkte“ direkt bei eq-3 downloadbar.
http://www.eq-3.de/tl_files/eq3/Downloads_2/PDFs/Dokumentation_und_Tutorials/HM_Script_Teil_4_Datenpunkte_1_503.pdf

Warum eq-3 diese allerdings nicht auf der Homematic-Seite anbietet bleibt eines der ungelüfteten Geheimnisse dieser Firma.

Gruß
Bruno

@Schablone
@Powerfreddy

Vielen Dank für die Hinweise zur Script Doku - jetzt kann es weiter gehen!

Gruss aus dem momentan gewittrigen Wiesbaden

Dieter

Hallo,

ich bin am verzweifeln. Ich wollte die Schnitstelle für eine HTML/Jquery mobile seite benutzen. Bisher hab ich aber keinen weg gefunden mit der POST methode etwas ohne ein Form zu senden.
Also wollte ich mal das PHP script nutzen um zu sehen was da überhaupt gesendet wird. Leider hab ich von PHP gar keine Ahnung.
Nachdem ich ein wenig gesucht habe ist mir aufgefallen das man den POST auch in der Browser Adresszeile eingeben kann.

Das sieht ja dann in etwa so aus: http://192.168.0.1/test.exe?befehl

Geht das auch bei der Homematic CCU? Wie muss das dann aussehen?

Wenn ich das hier eingebe: http://192.168.0.1/test.exe?dom.GetObject(„Test“).ProgramExecute(); zeigt er mir auf der dann folgenden XML seite das hier an:
<xml>
<exec>
/Test.exe
</exec>
<sessionId/>
<httpUserAgent>
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; de) Presto/2.10.289 Version/12.01
</httpUserAgent>
<dom>
null
</dom>
</xml>

Ich nehme an die Antwort „null“ soll heissen er hat keine Ahnung was er damit anfangen soll.

Ich bin für Hilfe sehr dankbar.

Update: Ich hab das PHP script zum laufen bekommen. Aber die CCU scheint nicht auf die Befehle zu reagieren. Die Firewall ist richtig konfiguriert. Gibt es noch wo anders etwas das man einstellen kann?

Änderungen sieht man in der CCU erst nach einer Aktualisierung der Seite.
Mach mal einen Seitenwechsel!!

Hm OK. Ich hab versucht ein Programm auszuführen bei dem ein Licht angeht, aber es ist nichts passiert. Das sollte ja funktionieren ohne das man die Seite der Homematic aktualisiert.
Muss man sich irgendwie Authentifizieren an der Schnittstelle, so wie bei der JSON-RPC?

Hallo Jey Cee,

bei mir klappt das:

Script in der HomeMatic:

Script in IPS:


<?
$CCU_IP 				= "192.168.2.100";

$HM_Script = "
var programObj = dom.GetObject('test_Buero');
programObj.ProgramExecute();
";

echo HMRS_HTTP_Post($CCU_IP, $HM_Script);

function HMRS_HTTP_Post($CCU_IP, $HM_Script)
{
/*=============================================
HMRS_HTTP_Post - Martin Heinzel - 20.02.2011
Version: 0.0

Beschreibung:
Mit dieser Funktion werden HomeMatic Scripte per HTTP Post an die HomeMatic
verschickt.


Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

//--------------------------- Main ----------------------------

// Initialisieren der Socket-Verbindung
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";

if (!$fp)
{
	$res = "$errstr ($errno)<br />
";
}
else
{
	// Zusammenstellen des Header für HTTP-Post
	fputs($fp, "POST /Test.exe HTTP/1.1
");
  	fputs($fp, "Content-type: application/x-www-form-urlencoded
");
  	fputs($fp, "Content-length: ". strlen($HM_Script) ."
");
  	fputs($fp, "Connection: close

");
  	fputs($fp, $HM_Script);
	while(!feof($fp))
	{
   	$res .= fgets($fp, 500);
  	}
  fclose($fp);
}

return $res;

//----------------------- Main ENDE ----------------------------

}
?>

Als Antwort bekomme ich das:

HTTP/1.1 200 OK
Server: ise GmbH HTTP-Server v2.0
Accept-Ranges: bytes
Cache-Control: no-store, no-cache
Content-Type: text/xml
Content-Length: 122
Date: Sun, 19 Aug 2012 13:34:21 GMT

/Test.exetest_Buero

Das Licht im Büro geht an!

Hi Schablone,

also mit dem php-script hab ichs nicht hinbekommen. Da ich das nur zum Testen benutzen wollte ist das auch nicht weiter schlimm. Obwohl ich es nur um zu wissen wie es geht trotzdem zum laufen bringen möchte. Am Wochende hab ich nicht viel gemacht, aber im Homematic-forum hab ich von jemandem die Lösung für mein eigentliches Problem bekommen.

Man kann scripte auch aufrufen in dem man in der Adresszeile z.B. folgendes eingibt:
http://192.168.2.100:8181/MaxWrestler.exe?go=dom.GetObject(129xx).ProgramExecute();
Das ganze ist eigentlich auch ein HTTP-Post nur halt eben manuell.

Ich bedanke mich für die Hilfe.