Hallo,
ich habe auch eine Lupusec XT1 Alarmanlage und möchte gern die Contact-ID Nachrichten mit IPS auswerten! Der Empfang mittels eines Serversocket in IPS klappt auch nur leider kann ich die Bestätigung zur Anlage nicht senden.
Woher weiß IPS wenn ich den Befehlausführe wohin (Ziel-IP) die Daten gesendet werden?PHP-Code:
SSCK_SendText($ID,$Text);
MfG Tommy
Irren ist menschlich. Aber wenn man richtig Mist bauen will, braucht man einen Computer. (Dan Rather, CBS-Fernsehreporter)
Moin,
in Kurzform:Wie hast du hinbekommen mittels contact id Nachrichten an ips zu senden?
- in der AA unter Einstellungen -> Contact-ID eine Reporting-URL eingetragen , z.B. ip://1234@192.168.10.20:4711/CID (die 1234 ist egal, Haupsache vierstellig)
- habe bei mir alle Ereignisse ausgewählt
- im IPS einen Server-Socket erstellen mit Port 4711 (den aus der AA)
- ein Script erstellen (s.u.)
- eine Reg-Var anlegen für den Socket und mit dem Script verbinden
RegVar-Script (String-Variable anlegen -> hier 39290)
Damit wird der ankommende Satz aufbereitet, so dass nur nur Ziffern enthalten sind. Durch weitere Zerlegung kann man dann weitere Infos daraus gewinnen, wie den auslösenden Benutzer, das Event, die Area.PHP-Code:
<?
$id_satz = 39290 /*[Alarmanlage\Contact_ID\Datensatz]*/;
$datensatz = $_IPS['VALUE'];
$datensatz = str_replace('[', '', $datensatz);
$datensatz = str_replace(' ', '', $datensatz);
$satz = substr($datensatz, 0, 15);
SetValue($id_satz, $satz);
?>
Beispiel 1: 123418160200000
- 1234 - ist immer gleich, entspricht bei Aufschaltung bei einem Wachdienst der Kundennummer
- 18 - Nachrichtentyp ist Contact-ID
- 1602 - zyklische Alive-Statusmeldung (AA lebt noch)
- 00 - Area (hier keine spezielle)
- 000 - Benutzer System
Beispiel 2: 123418340701002
- 1234 - ist immer gleich, entspricht bei Aufschaltung bei einem Wachdienst der Kundennummer
- 18 - Nachrichtentyp ist Contact-ID
- 3407 - Scharfschaltung
- 01 - Area 1
- 002 - Benutzer 2 (in der AA unter Home -> Pin-Codes)
Beispiel 3: 123418140702006
- 1234 - ist immer gleich, entspricht bei Aufschaltung bei einem Wachdienst der Kundennummer
- 18 - ist immer gleich, Nachrichtentyp ist Contact-ID
- 1407 - Unscharfschaltung
- 02 - Area 2
- 006 - Benutzer 6 (in der AA unter Home -> Pin-Codes)
Beispiel 4: 123418176000000
- 1234 - ist immer gleich, entspricht bei Aufschaltung bei einem Wachdienst der Kundennummer
- 18 - ist immer gleich, Nachrichtentyp ist Contact-ID
- 1760 - Automationsregel wurde ausgeführt
- 00 - Area (hier keine spezielle)
- 000 - Benutzer System
Als weitere Aktionen generiere ich mir Push-Nachrichten mit den gewonnenen Infos und setze eine Statusvariable im IPS für die entsprechende Area auf true/false.
Das habe ich auch noch nicht herausgefunden. Ist für meine Zwecke auch egal, da ich nur unterbinden wollte, dass IPS zyklisch die Anlage abfragt. Mittels der obigen Lösung meldet sich die AA, wenn etwas passiert. Im Log der AA sammeln sich daher Fehlermeldungen, dass die Contact-ID-Meldungen nicht bestätigt wurden.... nur leider kann ich die Bestätigung zur Anlage nicht senden ...
Eine Übersicht als Leitfaden für die Codes im Anhang.
Geändert von hrahlers (09.12.16 um 15:07 Uhr)
Gruß Andreas.
-----------------------------------------------------------------
IP-Symcon 5.0, Windows x64, 16.12.2018, 93cb63bbeb2 - virt. W2k8 R2, CCU2, HM-Funk-und Wired-Komponenten, Tasmota-Geräte, FB7390 (Telefonie), 1-wire-Temp.fühler, Pokeys, RPi, Sophos-UTM, Ubiquiti-APs
PHP-Code:
<?
$username = GetValue(35633 /*[Alarmanlage\Basisdaten\Benutzer]*/);
$password = GetValue(46457 /*[Alarmanlage\Basisdaten\Passwort]*/);
$url_base = 'https://'.GetValue(55395 /*[Alarmanlage\Basisdaten\IP-Adresse]*/).'/';
$area = 1;
// Login
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_URL, $url_base);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_exec ($ch);
$ergebnis = $url_base."/action/userCodeGet?area={$area}";
curl_setopt($ch, CURLOPT_URL,$ergebnis);
$result=curl_exec ($ch);
//echo $result;
curl_close ($ch);
$result = str_replace("\t", "", $result);
$json = json_decode($result, true);
//print_r($json);
for ($i=1; $i<11; $i++)
{
$users[$i] = array(
'code' => $json['forms']['ucform']['code_'.$i],
'name' => $json['forms']['ucform']['name_'.$i],
'valid' => $json['forms']['ucform']['valid_'.$i],
'arm' => $json['forms']['ucform']['can_arm_'.$i],
'disarm' => $json['forms']['ucform']['can_disarm_'.$i],
'melden' => $json['forms']['ucform']['latch_'.$i]);
}
print_r($users);
?>
Gruß Andreas.
-----------------------------------------------------------------
IP-Symcon 5.0, Windows x64, 16.12.2018, 93cb63bbeb2 - virt. W2k8 R2, CCU2, HM-Funk-und Wired-Komponenten, Tasmota-Geräte, FB7390 (Telefonie), 1-wire-Temp.fühler, Pokeys, RPi, Sophos-UTM, Ubiquiti-APs
Hi,
kann man aus der Lupusec XT2 Plus auch die Ereignisse, Benachrichtigungen und systemlogs anzeigen lassen?
Geändert von Stefan71 (04.02.17 um 19:37 Uhr)
Geht. Im Bereich "URLs" die gewünschte Anzeige aktivieren.
PHP-Code:
<?
$username = GetValue(35633 /*[IPS - Zentrale Angaben\Basisdaten\Alarmanlage\Benutzer]*/);
$password = GetValue(46457 /*[IPS - Zentrale Angaben\Basisdaten\Alarmanlage\Passwort]*/);
$ip = GetValue(55395 /*[IPS - Zentrale Angaben\Basisdaten\Alarmanlage\IP-Adresse]*/);
$url_base = 'https://'.$ip.'/';
// -----------------------------------------------------------------------------
// Login
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_URL, $url_base);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_exec ($ch);
// -----------------------------------------------------------------------------
// URLs
//URL für Systemereignisse:
$ereignisse = $url_base."/action/loggerListGet";
// URL für Ereignissmeldungen
//$ereignisse = $url_base."/action/logsGet";
// URL für gemeldete Ereignisse
//$ereignisse = $url_base."/action/reportEventListGet";
// -----------------------------------------------------------------------------
curl_setopt($ch, CURLOPT_URL, $ereignisse);
$result = curl_exec ($ch);
//echo $result;
curl_close ($ch);
$result = str_replace("\t", "", $result);
$json = json_decode($result, true);
print_r($json);
?>
Geändert von hrahlers (17.04.17 um 14:45 Uhr)
Ich habe das gestern mal bei der Secvest versucht. Sie unterstützt Contact-ID oder IP im Prinzip.
Habe nur einen Symcon UDP Socket auf den, in der Secevst konfigurierten Port, lauschen lassen und dann geschaut ob im Debug des Sockets was ankommt. Das war leider nicht der Fall. Außerdem hat die Secvest einen Fehler angezeigt, wohl durch die ausbleibenden ACKs begründet. Wenn ich das nicht gelöst bekomme, kann ich diesen Hack leider nicht verwenden, da anstehende Fehler das Scharfschalten verhindern.
Das mit der Register-Variable kapiere ich übrigens leider auch nicht. Habe auch schon im Forum gesucht und leider keine verständliche Anleitung gefunden wie man die anlegt. Liegt es vielleicht and er fehlenden Variable, dass ich im Debug nichts sehe?
Bin unter Linux. Ich gehe davon aus, dass wenn ich einen Port in einer APP öffne, dieser Port auch (automatisch?) durch die Firewall erreichbar ist.
Also zu lösende Probleme in der Zusammenfassung:
1.) Keine Daten im Debug des Sockets
- Fehlende Registervariable?
- Linux Firewall?
- Contact-ID ist nicht UDP?
2.) Alarmanlage geht auf Error
- Vielleicht reicht des ein Art ACK auf den Socket zu senden, nachdem Daten empfangen wurden?
Ich hoffe jemand kann mir etwas weiterhelfen.
Geändert von DrFrank (17.04.17 um 16:02 Uhr)
Ob Daten ankommen kannst Du z.B. mit Packet Sender ausprobieren indem Du an den Raspberry mit dem UDP Socket was schickst dann sollte das auch im Debug Fenster zu sehen sein.
Die Register Variable ist nur der Puffer der das dann weiterreicht. Siehe RegisterVariable
Genau wie Fonzo sagt:
erstmal muss was ankommen im Debug-Fenster im IPS. Und nimm mal den Server-Socket im IPS. Dafür muss die Contact-ID-URL in der Secvest natürlich auf die IP vom IPS verweisen. Den Port muss du auch angeben und in der Firewall freischalten/duchreichen.
Wenn dem so ist, speicherst du diese Meldungen in der RegisterVariable. Diese ist quasi nur der Pförtner, der alle Meldungen annimmt und zwischenspeichert.
Bemerkung:
Bei der Lupusec kann ich trotz solcher Fehlermeldungen scharfschalten, daher brauche ich auch nicht zwangsweise eine Rückantwort basteln. Die Verwendung von Contact-ID over IP ist für mich eh nur eine Krücke, um dem ewigen Pollen aus dem Wege zu gehen. Allerdings geht das für die wichtigsten Dinge ganz gut. Wenn z.B. ein Fenster geöffnet wird, gibt es nur eine allgemeine Meldung ("Automationsbefehl") ohne Hinweis auf Verursachersensor. Das muss ich dann als Reaktion auf diese Meldung bewußt von IPS auslesen, welches Fenster gerade offen ist. Aber das soll mit einer Action-URL demnächst besser gehen. Muss noch die aktuelle 2.17F einspielen und testen. Bislang ging nur ein Parameter als Übergabe.
Geändert von hrahlers (17.04.17 um 13:31 Uhr)
Gruß Andreas.
-----------------------------------------------------------------
IP-Symcon 5.0, Windows x64, 16.12.2018, 93cb63bbeb2 - virt. W2k8 R2, CCU2, HM-Funk-und Wired-Komponenten, Tasmota-Geräte, FB7390 (Telefonie), 1-wire-Temp.fühler, Pokeys, RPi, Sophos-UTM, Ubiquiti-APs
Kleines Update:
Register Variable habe ich dank wupperi hinbekommen. Mir war nicht klar, dass das ein Modul ist, obwohl es in der Anleitung ja so genannt wird. Was sie macht war mir klar, nur nicht wie mal sie einrichtet :-)
Die Linux Firewall auf dem Symcon Service war sowieso aus, daran kann es also nicht liegen.
Werde mal den Vorschlag testen den Server Socket zu verwenden, anstatt des UDP Sockets. Dann sehe ich hoffentlich mehr.
Das doofe ist, dass die Secvest Software alles andere als Bugfrei ist und damit auch als Fehlerursache in Frage kommen kann.