ich möchte die Sensoren meiner Alarmanlage (AA) via Openhab nutzen um Aktionen ZB via KNX zu triggern (z.B. wenn Sensor Garagentor beim Sonnenuntergang noch offen, dann mach das Tor zu). Zunächst versuche ich das Ergebnis in einer Sitemap darzustellen.
Die AA ist eine Lupus XT2 und kann via php und REST API ausgelesen werden.
Ein prima Skript gibt es hier, das ich leicht verändert habe, um für einen Sensor die Ausgabe "ZU" oder "OFFEN" zu bekommen: https://www.symcon.de/forum/threads/296 ... s-auslesen.
Das php Skript gibt im Browser aufgerufen (XAMPP/Apache) das richtige Ergebnis aus "ZU".
Wenn ich das Skript allerdings mit dem Exec binding aufrufe, erhalte ich im log Errormeldungen aus dem php Skript.
Das Spannende: Selten gibt es einen Wert "ZU" aus, meist aber nur Errormeldungen, ohne dass das Tor bewegt wurde o.ä. Hält ggf. der Wert aus php "nicht lange genug", muss ich Updatefrequenzen ändern? Was mache ich falsch?
Mein Thing:
Code: Alles auswählen
Thing exec:command:TorExec [command="C:/php/php.exe C:/openHAB2/conf/scripts/Lupus3.php",interval=45, timeout=5, autorun=true]
String TorExecExitOutput {channel="exec:command:TorExec:output"}[/code]
Map:
Code: Alles auswählen
Text item=TorExecExitOutput
Code: Alles auswählen
20:13:09.518 [INFO ] [smarthome.event.ItemStateChangedEvent] - TorExecExitOutput changed from ZU to PHP Warning: Invali d argument supplied for foreach() in C:\OpenHAB2\conf\scripts\Lupus3.php on line 43
PHP Warning: ksort() expects parameter 1 to be array, null given in C:\OpenHAB2\conf\scripts\Lupus3.php on line 48
PHP Warning: Invalid argument supplied for foreach() in C:\OpenHAB2\conf\scripts\Lupus3.php on line 56
PHP Warning: Invalid argument supplied for foreach() in C:\OpenHAB2\conf\scripts\Lupus3.php on line 91
PHP Warning: Invalid argument supplied for foreach() in C:\OpenHAB2\conf\scripts\Lupus3.php on line 43
PHP Warning: ksort() expects parameter 1 to be array, null given in C:\OpenHAB2\conf\scripts\Lupus3.php on line 48
PHP Warning: Invalid argument supplied for foreach() in C:\OpenHAB2\conf\scripts\Lupus3.php on line 56
PHP Warning: Invalid argument supplied for foreach() in C:\OpenHAB2\conf\scripts\Lupus3.php on line 91
Code: Alles auswählen
<?php
// Dieses Script liest die Sensoren und deren Daten aus einer Lupus XT2 Plus aus und stellt die Stati in einer Tabelle im Webfront dar
// Variablen definieren
$username = "XX";
$password = "XX";
$ip = "192.XXX";
$url = 'http://'.$ip.'/';
//$id_html = 44077 /*[Alarmanlage\Sensoren\Sensoren]*/; // String-Variable mit Profil "~HTML-Box" für die Anzeigen im Webfront
// Gerätetypen
$typen = array("2" => "Fernbedienung", "4" => "Türkontakt", "5" => "Wassermelder", "9" => "IR", "11" => "Rauchmelder", "16" => "Tag Reader", "37" => "Keypad", "46" => "Sirene", "58" => "Hitzemelder");
// -----------------------------------------------------------------------------
// ab hier ist nichts mehr anzupassen
// Login
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$result=curl_exec ($ch);
// Sensorliste lesen
$sensorliste = "http://".$ip."/action/deviceListGet";
curl_setopt($ch, CURLOPT_URL,$sensorliste);
$result=curl_exec ($ch);
// echo $result;
curl_close ($ch);
// Umwandeln von JSON in ein Array
$result = str_replace("\t", "", $result);
$json = json_decode($result, true);
// print_r($json);
// jeweilge Zone als Index des neuen Arrays $sensoren verwenden und dieses nach Index (=Zone) sortieren
foreach ($json['senrows'] as $sensor)
{
$zone = $sensor['zone'];
$sensoren[$zone] = $sensor;
}
ksort($sensoren);
// print_r($sensoren);
// HTML-Ausgabe erstellen
$html = "<table width='90%' align='left'>"; // Farbe anpassen oder style entfernen
$html .= "<tr><td><b>Area</b></td><td><b>Zone</b></td><td><b>Typ</b></td><td><b>SID</b></td><td><b>Name</b></td><td><b>Zustand</b></td><td><b>Batterie</b></td><td><b>Stärke</b></td></tr>";
foreach ($sensoren as $sensor)
{
// Daten aus Array zur besseren Anzeige bearbeiten
$status = @GetTextBetween($sensor['status'], '{WEB_MSG_DC_', '}');
$status = str_replace("CLOSE", "ZU", $status);
$status = str_replace("OPEN", "OFFEN", $status);
$rssi = substr($sensor['rssi'], -1);
$name = utf8_decode($sensor['name']);
$battery = str_replace("0", "Schwach", $sensor['battery_ok']);
$battery = str_replace("1", "OK", $sensor['battery_ok']);
// Zeilen mit Daten befüllen
$html .= "<tr>";
$html .= "<td>" . $sensor['area'] . "</td>"; // area
$html .= "<td>" . $sensor['zone'] . "</td>"; // zone
$html .= "<td>" . $typen[$sensor['type']] . "</td>"; // typ
$html .= "<td>" . $sensor['sid'] . "</td>"; // sid
$html .= "<td>" . $name . "</td>"; // name
$html .= "<td>" . $status . "</td>"; // status
$html .= "<td>" . $battery . "</td>"; // battery_ok
$html .= "<td>" . $rssi . "</td>"; // rssi
$html .= "</tr>";
}
// -----------------------------------------------------------------------------
function GetTextBetween($string, $start, $end)
{
preg_match_all( "/$start(.*)$end/U", $string, $match );
return $match[1][0];
}
// HTML-Ausgabe 2 erstellen
$html = "<table width='90%' align='left'>"; // Farbe anpassen oder style entfernen
$html .= "<tr><td><b>Area</b></td><td><b>Zone</b></td><td><b>Typ</b></td><td><b>SID</b></td><td><b>Name</b></td><td><b>Zustand</b></td><td><b>Batterie</b></td><td><b>Stärke</b></td></tr>";
foreach ($sensoren as $sensor)
{
if ($sensor['sid'] == "RF:0149e510") {
echo $status;
} else {
}
}
?>
Danke Euch !