[veraltet] Low Battery (Meldungen)

Hier ein kleines Beispiel, um auf eine „Low Battery“ Meldung eines HMS Geräts zu reagieren.

Zunächst muss im „EventHandler AddIn“ eine Variable vom Typ „String“ dem Eintrag „Message“ zugeordnet werden (siehe Bild).
Diese kann dann ein Skript triggern, das eine entsprechende Meldung ausgibt oder Aktion auslößt.
Hier ein paar Links zum Text-Schnibbeln:
http://de.php.net/manual/de/function.substr.php
http://de.php.net/manual/de/function.trim.php
http://de.php.net/manual/de/function.explode.php
http://de.php.net/manual/de/function.strpos.php

Die „Echos“ dienen zu Testzwecken und sollten auskommentiert werden.
Hier das überarbeitete Skript (Hinweis von Franz „Undefined offset“ mit explode):

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Meldungen.ips.php
Trigger  : IPS_Meldungen
Interval : 
*/
$meldung = GetValueString("IPS_Meldungen");
// Beispiel:
//$meldung = "NOTIFY|HMSRX #40947|Low Battery";
//echo $meldung;

$teile =  explode("|", $meldung);

// zum Testen
//echo "$teile[0]
";
//echo "$teile[1]
";
//echo "$teile[2]
";

$pos = strpos($meldung, "|" ,10);
//echo $pos;
$id = substr($meldung, $pos - 5 , 5); // 5 Zeichen von dem zweiten |
//echo $id;

if ($teile[2] == "Low Battery") {
   TTS_Speak(37579, "Die Batterien sind fast leer");
   IPS_Sleep(2000);
   TTS_Speak(37579, "Im Gerät " . $id);
   echo  "Low Battery";
}
?>

MST

event_handler.jpg

Hallo,

könnte man eine Liste aller möglichen Varianten von Störungsmeldungen haben, sodass man die direkt mitimplementieren kann in den scripts?
Somit bräuchte man nicht abzuwarten bis man die Störmeldungen bekommt um sie im Script zu integrieren.

mfG Franz

Hallo,

ich habe das Batt_Low Fehler Melde System in mein Projekt integriert, und es funktionniert tadellos, nur auf etwas sollte man sehr genau aufpassen, denn sonst gerät man in Teufel´s Küche:

Wenn man das Script schreibt, resp. umbaut oder erweitert, sollte man aufpassen, zuerst den Trigger -die Meldungs-Variable-, die man im EventHandler AddIn eingetragen hat, zu löschen. Tut man dies nicht, und das Script ist noch nicht lauffähig, generiert man endlos Fehler-Meldungen, und das Script läuft amok. Dann gibt es nur noch Ctrl-Alt-Del um aus IPS rauszukommen. Schlimmer noch, man kommt auch bei Neustart nicht mehr rein da wiederum Meldungen generiert werden, und wieder läuft die Lawine los. Also muss eine alte Setting.xml ran, dann läuft es wieder.

Also höchste Vorsicht beim Script editieren !!

Danke für den Hinweis.
Zum Verständnis für die anderen:
Es kommt nur einer „Endlosschleife“, wenn sich ein Syntax Fehler in dem o.g. Skript befindet.
Dadurch wird eine Meldung generiert, deren verknüpfte Variable wiederum das Skript triggert.
Alles klar? Also zum Testen den Trigger deaktivieren.

Gruß MST

hmm…ich kann dieses Add-In gar nicht konigurieren??:confused:

Also, ich habe mich jetzt ausführlich mit diesem Problem beschäftigt, und bei Steiners Script gefällt mir ein Teil nicht, resp. wird das zu einem totalen Blockieren von IPS kommen -> CPU rast auf 100% und LogFile erschöpft in kurzer Zeit die 300 GB Festplatte :stuck_out_tongue:

Hier, wenn man dieses Teil benutzt:

$unterteil =  explode("#", $teile[1]);
$id = $unterteil[1];
echo "ID: $id
";

und man hat eine Meldung, die z.B. so lautet: (beim starten vom IPS Designer)

„MESSAGE|Designer Interface|Client Connected [127.0.0.1]“

spätestens dann kommt es zum Crash, so in dieser Art:

12/28/2005 10:16:36 PM | ERROR | EventScripter | Notice: Undefined offset: 1 in line 32
12/28/2005 10:16:36 PM | DEBUG | VariableManager | Variable: DEVICE_ALARM (String), Value: ERROR|EventScripter|# END #
12/28/2005 10:16:36 PM | DEBUG | EventScripter | [Queued,Size=4049] | Script: KERNEL_ALARM_MANAGING | Variable: DEVICE_ALARM
12/28/2005 10:16:36 PM | ERROR | EventScripter | # END #

Und schon hat man eine schööööne Endlosschleife !

deshalb, bitte schön diese Variante benutzen:

$id = substr($meldung, $pos - 5 , 5); // 5 Zeichen von dem zweiten |

mfG, Franz

hmm…ich kann dieses Add-In gar nicht konigurieren??:confused:

kann ich auch nicht.
So ganz habe ich es auch noch nicht verstanden.
Wer oder was schickt denn jetzt die Meldung ?

Moin,

Hallo,

könnte man eine Liste aller möglichen Varianten von Störungsmeldungen haben, sodass man die direkt mitimplementieren kann in den scripts?
Somit bräuchte man nicht abzuwarten bis man die Störmeldungen bekommt um sie im Script zu integrieren.

mfG Franz

Gibt es da eine Liste aller IPS Meldungen :confused:

Grüße
Thomas

Hallo IPSler,

habe das Script auch bei mir in Bertrieb genommen um die Batterie im Rauchmelder zu kontrollieren.

Leider kommt bei mir immer folgende Fehlermeldung

<br />
<b>Warning</b>:  strpos() [<a href='function.strpos'>function.strpos</a>]: Offset not contained in string. in <b>C:\Programme\IP-SYMCON\scripts\.currentscript</b> on line <b>22</b><br />

das Script habe ich auf meine Bedürfnisse angepasst um es zu testen.

File     : low_battery_meldung.ips.php
Trigger  : IPS_Meldung
Interval : 
*/
$meldung = GetValueString("low_battery_meldung");
// Beispiel:
//$meldung = "NOTIFY|HMSRX #20323|Low Battery";
//echo $meldung;

$teile =  explode("|", $meldung);

// zum Testen
//echo "$teile[0]
";
//echo "$teile[1]
";
//echo "$teile[2]
";

$pos = strpos($meldung, "|" ,10);
//echo $pos;
$id = substr($meldung, $pos - 5 , 5); // 5 Zeichen von dem zweiten |
//echo $id;

//if ($teile[2] == "Low Battery") {
   //TTS_Speak(37579, "Die Batterien sind fast leer");
   //IPS_Sleep(2000);
   //TTS_Speak(37579, "Im Gerät " . $id);
   //echo  "Low Battery";
//}
?>

hat jemand der mehr Ahnung von PHP hat eine Ahnung wo der Fehler liegt?

Grüße Mirco

Es gibt seit etwas Längerer Zeit eine direkte Variable für den BatterieStatus.

Somit ist der ganze Aufwand nicht unbedingt nötig.

paresy