Hi,
bevor ich vor einem Jahr mit IPS anfing hatte (habe noch) einen Lightmanager Air. Die Szenen lassen sich sehr leicht aus IPS aufrufen mit:
file_get_contents("http://<IP des LM>/control?scene=1);
So wird Szene 1 gestartet das wäre das selbe als wenn man mit einer Harmony L001 an den LM schicken würde.
Es ist also kinderleicht. Ich habe ein Script geschrieben mit dem es kinderleichter wird:-)
Das Script:
<?php
// Die ganzen Idents werden benutzt damit nicht jeder Aufruf erneut alles anlegt
// IP vom LeightManager Air
$IP = '192.168.178.49';
// Lege Stringvariable für Konfiguration an falls noch nicht vorhanden
$ConfigID = IPS_GetObjectIDByIdent("Config", $_IPS['SELF']);
if ($ConfigID == false){
$ConfigID = IPS_CreateVariable(3);
IPS_SetName($ConfigID, "Config"); // Variable benennen
IPS_SetParent($ConfigID, $_IPS['SELF']);
IPS_SetIdent($ConfigID, "Config");
}
// Lese Konfiguration aus LM
if (file_exists('http://'.$IP.'/config.xml')){
$file = implode(gzfile('http://'.$IP.'/config.xml'));
}
else{
// Lese Konfiguration aus Variable
$file = GetValue($ConfigID);
}
// Konfiguration in Variable speichern
SetValue($ConfigID, $file);
// Konfiguration ist eine XML Datei
$xml = simplexml_load_string($file);
// XML -> Json
$json = json_encode($xml);
// Jason -> Array
$array = json_decode($json,TRUE);
// Für Debug-Zwecke
//var_dump($xml);
//return;
// Anlegen einer neuen Kategorie mit dem Namen "Szenen" falls nocht nicht vorhanden
$CatID = IPS_GetObjectIDByIdent("Szenen", $_IPS['SELF']);
if ($CatID == false){
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "Szenen"); // Kategorie benennen
IPS_SetParent($CatID, $_IPS['SELF']); // Kategorie einsortieren unter dem Objekt
IPS_SetIdent($CatID, "Szenen");
}
// Alle Szenen als Scripte anlegen wenn noch nicht vorhanden
$i1 = 0;
while ($xml->lightscenes->scene[$i1]){
$ident = preg_replace("/[^0-9a-zA-Z]/", "", (string) $xml->lightscenes->scene[$i1]->name);
$ScriptID = IPS_GetObjectIDByIdent($ident, $CatID);
if ($ScriptID == false){
$ScriptID = IPS_CreateScript(0); // Script erzeugen
IPS_SetParent($ScriptID, $CatID); // Script einsortieren unter dem Objekt
IPS_SetName($ScriptID, (string) $xml->lightscenes->scene[$i1]->name); // Script bennenen
IPS_SetIdent($ScriptID, $ident);
}
// Script zusammenbasteln ist einfach nur "http://<IP vn LM>/control?scene=x"
$content = "<?\rfile_get_contents('http://".$IP."/control?".(string) $xml->lightscenes->scene[$i1]->param."');\r?>";
IPS_SetScriptContent($ScriptID, $content);
$i1++;
}
// Anlegen einer neuen Kategorie mit dem Namen "Zonen" falls nocht nicht vorhanden
// Zonen enthalten die einzelnen Kommandos der Geräte aus den Szenen
$CatID = IPS_GetObjectIDByIdent("Zonen", $_IPS['SELF']);
if ($CatID == false){
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "Zonen"); // Kategorie benennen
IPS_SetParent($CatID, $_IPS['SELF']); // Kategorie einsortieren unter dem Objekt
IPS_SetIdent($CatID, "Zonen");
}
$i1 = 0;
// Anlegen einer neuen Kategorie mit dem Zonen-Name falls nocht nicht vorhanden
while ($xml->zone[$i1]){
$ident = preg_replace("/[^0-9a-zA-Z]/", "", (string) $xml->zone[$i1]->zonename);
$ZoneID = IPS_GetObjectIDByIdent($ident, $CatID);
if ($ZoneID == false){
$ZoneID = IPS_CreateCategory();
IPS_SetName($ZoneID, (string) $xml->zone[$i1]->zonename); // Variable benennen
IPS_SetParent($ZoneID, $CatID);
IPS_SetIdent($ZoneID, $ident);
}
$i2 = 0;
// Anlegen einer neuen Kategorie mit dem Aktuator-Name falls nocht nicht vorhanden
while ($xml->zone[$i1]->actuators->actuator[$i2]){
$ident = preg_replace("/[^0-9a-zA-Z]/", "", (string) $xml->zone[$i1]->actuators->actuator[$i2]->name);
$ActuatorsID = IPS_GetObjectIDByIdent($ident, $ZoneID);
if ($ActuatorsID == false){
$ActuatorsID = IPS_CreateCategory();
IPS_SetName($ActuatorsID, (string) $xml->zone[$i1]->actuators->actuator[$i2]->name); // Variable benennen
IPS_SetParent($ActuatorsID, $ZoneID);
IPS_SetIdent($ActuatorsID, $ident);
}
$i3 = 0;
// Anlegen eines neuen Scripts mit dem Kommando-Name falls nocht nicht vorhanden
while ($xml->zone[$i1]->actuators->actuator[$i2]->commandlist->command[$i3]){
$ident = preg_replace("/[^0-9a-zA-Z]/", "", (string) $xml->zone[$i1]->actuators->actuator[$i2]->commandlist->command[$i3]->name);
$ScriptID = IPS_GetObjectIDByIdent($ident, $ActuatorsID );
if ($ScriptID == false){
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, (string) $xml->zone[$i1]->actuators->actuator[$i2]->commandlist->command[$i3]->name); // Variable benennen
IPS_SetParent($ScriptID, $ActuatorsID );
IPS_SetIdent($ScriptID, $ident);
}
// Script zusammenbasteln ist einfach nur "http://<IP vn LM>/control?" und der Parameter aus dem XML
$content = "<?\rfile_get_contents('http://".$IP."/control?".(string) $xml->zone[$i1]->actuators->actuator[$i2]->commandlist->command[$i3]->param."');\r?>";
IPS_SetScriptContent($ScriptID, $content);
$i3++;
}
$i2++;
}
$i1++;
}
?>
liest die aktuelle Konfiguration vom LM aus. Im Script muss nur die IP vom LM eingetragen werden und dann gestartet werden.
Das Script legt die aktuelle Konfiguration vom LM in der Variablen „Config“ ab um bei Fehlersuche hilfreich zu sein. Es werden 2 Kategorien „Szenen“ und „Zonen“ angelegt. In „Szenen“ liegen Scripte mit den Szenen-Namen die die jeweilige Szene starten. „Zonen“ enthält auch die Szenen aber darin sind alle Aktoren mit Scripten abgespeichert. Für das Web-Front empfiehlt es sich direkt die LM-Web-Seite als externe Seite einzurichten.
Vielleicht hilft es ja jemanden.
Ralf