Hallo,
nachdem ich im Forum noch nichts von einer Lupusec-Alarmanlage gelesen hatte, hier ein Betrag zum Auslesen der angelernten Sensoren und deren Stati. Ich hoffe, es funktioniert auch woanders. Rückmeldungen über Fehler oder Erfolge würden mich freuen.
Getriggert wird das Script vorerst manuell oder zyklisch. Mir schwebt eine Anbindung per Contact-ID vor, wobei die Anlage Meldungen an diese(n) Empfänger versendet, wenn was los ist. Das scheint jedoch etwas schwieriger zu sein. Hatte schon mal mit einem UPD-Socket gespielt - will noch nicht so richtig.
<?
// 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 = GetValue(35633 /*[Alarmanlage\Daten\Benutzer]*/);
$password = GetValue(46457 /*[Alarmanlage\Daten\Passwort]*/);
$ip = GetValue(55395 /*[Alarmanlage\Daten\IP-Adresse]*/);
$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("4" => "Türkontakt", "16" => "Tag Reader", "37" => "Keypad", "46" => "Sirene");
// -----------------------------------------------------------------------------
// 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(" ", "", $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", "Geschlossen", $status);
$status = str_replace("OPEN", "Geöffnet", $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>";
}
$html .= "</table>";
SetValue($id_html ,$html);
// -----------------------------------------------------------------------------
function GetTextBetween($string, $start, $end)
{
preg_match_all( "/$start(.*)$end/U", $string, $match );
return $match[1][0];
}
?>