Problemstellung:
Für verschiedenste Ereignisse die im System vorkommen können sollte es ein Modul geben das diese einheitlich sammelt, anzeigt, benachrichtigt bzw. daran erinnert und ggf. eskaliert. Die Benachrichtigung sollte (sofern ein Tracker vorhanden ist) auch gezielt an die Anwesende Person gerichtet sein, wenn es sie betrifft. Besser kann ichs leider nicht erklären, deshalb beschreib ich einfach mal was ich bisher dazu realisiert habe…evtl wird es dadurch nachvollziehbarer.
Ähnlich wie beim IPSLogger kann aus jedem Script heraus ein Ereignis generiert werden. Die meisten Parameter die dabei übergeben werden sind optional. Daher gleich mal 2 Beispiele:
- Das Backupscript hat erfolgreich meine Webseite gesichert:
php IPS_RunScriptEx(16940 /*[eigene Module\Informationsmodul\Beta\create]*/,array("initiator"=>$_IPS['SELF'],"text"=>"Website erfolgreich gesichert"));
- Die Temperatur im Gefrierschrank hat einen Schwellwert überschritten:
php IPS_RunScriptEx(16940 /*[eigene Module\Informationsmodul\Beta\create]*/,array("escal_sw"=>1,"escal_ts"=>date()+60*60, "interval"=>30*60,"recallmax"=>20, "prio"=>"3","who"=>0,"initiator"=>$_IPS['SELF'],"initiator_ro"=>false,"ack_req"=>true,"text"=>"Problem mit dem Gefrierschrank" ));
Welche Parameter gibt es:
drop = [TS]Verfallszeitpunkt (Wann kann das Erreignis aufgeräumt bw. gelöscht werden)
escal_sw = [int]Eskalation (Soll/Ist → 0= nicht gewünscht, 1= gewünscht aber inaktiv, 2= Eskalation sofort aktiv)
escal_ts = [TS]Eskalationszeitpunkt (Wann soll, wenn gewünscht, eskaliert werden?)
interval = [int]Erinnerungsintervall (In welchen Abständen (s) soll erinnert werden? -1=nur einmal Initial )
recallmax = [int]Maximale Anzahl Erinnerungen
prio = [int]Priorität
who = [int]Für wen ist es gedacht (0=alle, 1=Person1, 2=Person2)
initiator = [int]ID der Verursachervariable (Diese Variable wird überwacht, ein Wechsel von „true“ auf „false“ führt zu einer Quittierung des Ereignisses)
initiator_ro= [bool]Initiatorvariable nur lesend (D.h. es gibt keine Möglichkeit der manuellen Quittierung, z.B. Batterie leer Variable)
ack_req = [bool]Bestätigung erforderlich?
text = [int]Referenz auf Text für Sprachausgabe, Webfront, Log und Mail (immer in Verbindung mit der „ack“-Variable)
Es gibt noch weitere Parameter die bei der Generierung des Events hinzugefügt werden. Für alle nicht übergebenen Parameter werden Standardwerte gesetzt. Pflicht ist nur „Initator“ und „Text“.
Jedes Ereignis ist ein separates Objekt das alle Daten enthält. Timer werden zusätzlich dem Objekt untergeordnet und enthalten den erforderlichen Code um ihre Aktion auszulösen. So sieht das dann aus:
Im Webfront kann man sich dann die relevanten Daten anzeigen lassen (diese Beispielansicht ist noch eher funktional, die meisten Details braucht man später nicht zu visualisieren):
Bei Ereignissen deren Zustand über eine Variable wiedergegeben wird, ist es praktisch diese als Initiator zu übergeben. Dann wird das entsprechende Ereignis automatisch quittiert wenn sich der Zustand ändert. Wenn z.B. der HM-ZwischenStecker (erster Eintrag im Bild) wieder erreichbar wird.
Wie die Erinnerung/Benachrichtigung abläuft wird über die Prio geregelt:
z.B. bei mir so:
/*
prio = [int]Priorität
1--> für sehr dringende Ereignisse
Webfront-Popup, Sprache (auch Nachts und beim Filmschauen), Telefonanruf (bei Abwesenheit), Email (bei Abwesenheit), Protokoll
2--> für dringende Ereignisse
Webfront-Popup, Sprache (auch Nachts und beim Filmschauen), Email (bei Abwesenheit), Protokoll
3--> für normale Ereignisse
Webfront-Popup, Sprache (_nicht_ wenn Schlafenszeit, Abwesenheit oder Filmschauen), Protokoll
4--> für wenig wichtige Ereignisse
Webfront-Popup, Protokolleintrag
*/
In den Parameter für Text kommt nur eine ID, die dann über ein Sprachscript erst zur Meldung umgeschrieben wird. Damit kann man unterscheiden wie die Meldung im Webfront-Popup, Email, Telefon, Sprache auszugeben ist. Auch kann sich der Inhalt ändern wenn ein Ereignis als „Erledigt“ markiert wurde.
Ziel ist einfach ein Standardverfahren für alle Ereignisse im IPS-System zu schaffen die mehr Beachtung benötigen als einen Logeintrag. Das bisher beschriebene funktioniert so bereits, aber bis zu einem fertigen Modul das sich für jeden individuell parametrisieren lässt…naja ist es noch ein weiter Weg.:rolleyes: