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.
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!!
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.
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?
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.
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.
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?
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?
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.