Wie jeder habe ich auch diverse Benachrichtigungen und Protokollierungen implementiert, die bei entsprechende Vorfällen eine zielgerichtete Benachrichtigungen ermöglichen.
Einerseits gibt es Wünsche der verschiedenen Personen im Haushalt, die das eine oder andere wissen wollen / sollen, eventuell auch verschiedenen Benachrichtigungswege. Und es gibt Meldungen, die wiederholt kommen sollen … kennt jeder auf die ein oder andere Weise.
Das hatte ich im laufe der Jahre mit einer Reihe von Skripten mit verteilter Logik realisiert.
Nun war es für mich Zeit, das mal etwas zu strukturieren und zu vereinfachen und habe dazu ein passendes Set von Modulen erstellt.
Die Dokumentation findet sich hier, das Modul ist im Store erstmal nur als Beta zu finden unter dem Suchbegriff Notice bzw. im GitHub.
Da es ja diverse Kommunikationswege gibt, die ich nicht abbilden kann/will oder es bereits Module gibt, kann man diese zusätzlichen Wege über ein Script einbinden.
Die mit im Paket enthaltenen Protokollierung-Möglichkeit deckt nur Basis-Funktionen ab, es gibt ja viele sehr ausgefeilte Lösungen, daher habe ich die Möglichkeit geschaffen, die eigenen Scripte einzubinden.
Wie immer bin ich für Anregung oder Wünsche offen
Änderung: aufgrund eines Namenskonflikts mit einem vorhandenen Modul heisst das Paket nun Notice statt Notification
das Modul klingt sehr interessant, ich wollte es gleich mal testen.
Beim Einrichten der Notification Base erhalte ich allerdings folgende Meldung:
Fehler beim Übernehmen der Änderungen
Notice: Undefined index: script_params in /mnt/data/symcon/modules/.store/demel42.symcon.notification/NotificationBase/module.php on line 128
Notice: Undefined index: script_params in /mnt/data/symcon/modules/.store/demel42.symcon.notification/NotificationBase/module.php on line 128
(Code: -32603)
das Modul eben mit Base, Rule und Event installiert.
War erstmal stressfrei, bin gerade am Erkunden was ich alles machen kann.
Macht aber direkt einen sehr guten Eindruck. Dafür schon mal vielen Dank!
An einem Punkt hab ich eine Frage:
Warum kann man die Wiederholungen nicht auf 0 (als Standard eingestellt) lassen wenn man keine Wiederholung möchte? Hier meine ich:
ah, ich hab das falsch interpretiert, „fester Wert“ bezieht sich ja auf die Minuten.
Gleichwohl ist es mE nicht ideal wenn die Wiederholungen per se auf „-1“ stehen, denn dann wirft er den Fehler und das finde ich beim Standard-Setting nicht so ideal. Aber das ist sicher Ansichtssache.
kann ma sicher drüber reden. Liegt auch daran, das ich am Anfang gar nicht vorgesehen hatte, das es „keine“ Wdh. gibt, weil man einzelne Meldungen auch so machen kann, das man ein passendes Ereignis zu einer „Rule“ erstellt und dann die passende Aktion auswählt.
Ist aber eine Frage der Übersichtlichkeit, daher habe ich in der nächsten Vorversion, wann wo was benutzt wird, besser zu sehen ist. Kommt morgen oder so.
Nachtrag:
Default für max_repetitions ist nun 0
in den Instanzen ist im Action-Bereich ein Panel „Referenzen“. Da kann man sehen, wo die Instanz referenziert wird bzw. Ein Teil davon wird durch „Referenz suchen“ im Objektbaum abgebildet, aber nicht alles (z.B. keine Ereignisse) und in der Anzeige hat man alles zusammen.
Sorry, das ich mich nicht zurückgemeldet habe. Da ich aktuell von dem RAM Bug der Symbox heimgesucht bin halte ich meine Aktivitäten etwas zurück. Ich bin aber weiterhin interessiert und teste dann gerne weiter.
Hallo,
bei mir kommt folgender Fehler beim anlegen des Base Moduls.
Wird angelegt dann beim öffner kommt der gleiche Fehler.
Konnte Konfigurationsform nicht laden
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\modules\.store\demel42.symcon.notification\libs\CommonStubs\common.php on line 600
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\modules\.store\demel42.symcon.notification\libs\CommonStubs\common.php on line 600
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\modules\.store\demel42.symcon.notification\libs\CommonStubs\common.php on line 600
Warning: Invalid argument supplied for foreach() in C:\ProgramData\Symcon\modules\.store\demel42.symcon.notification\libs\CommonStubs\common.php on line 600
Welche Version hast du im Einsatz (Konfigurationsformular → Information)?
dachte nämlich, das schon mit der 1.0.5 gefixed zu haben (ich hatte die Instanz-ID von Kern → Utils irrtümlicherweise fix eingetragen
jetzt habe ich gerade die 1.0.6 als Beta eingestellt
vielen Dank für dein tolles Modul! Ich habe dazu zwei Kleinigkeiten, vielleicht sind es Bugs, vielleicht bediene ich es auch falsch:
Der Webfront-Sound für die Severity „Information“ wird bei mir nicht angewendet. Egal ob ich ihn nur in der Base oder in der Rule oder beiden konfiguriere.
Wenn ich zur Nachrichtenerzeugung ein Script einsetze, würde ich gerne dort $_IPS['instanceID']verwenden, die Variable (Array-Index) gibt es aber leider nicht. Kann es sein, dass der versehentlich (entgegen deiner Doku) nicht gesetzt wird?
Ciao
Golo
PS: Punkt 2 hat sich grade erledigt, sorry. Nach Wechsel auf den Beta-Kanal ist die Variable auch da. Leider enthält sie nicht das was ich bräuchte. Ich würde gerne im Script keine harten Links zu IDs einbauen, wenn ich dort dynamisch die ID der Variable kommen könnte, welche das Event ausgelöst hat, dann wäre das genial. Also sowas wie $_IPS['VARIABLE'] oder noch besser direkt $_IPS['VALUE'].
Das ist merkwürdig, ich habe bei mir genau so etwas im Einsatz (Rule für „Türglocke“). Ist das bei einem speziellen Sound oder bei jedem Sound so?
Zum Test der Sounds habe ich in der Base eine Test-Funktion implementiert
bin mir nicht sicher, ob ich an diese Werte komme. Du könntest mal etwas prüfen: in dem normalen Log sowie im Instanz-Debug zeige ich die Aufruf-Kette an (Call-Chain), die ich mir zusammengesucht habe.
Die wird im Symcon-Log (entsprechende Protokollierung-Einstellung in der Instanz vorausgesetzt) ausgegeben (IDs in eckigen Klammern). Ist da die erwartete ID dabei? Wenn ja, wäre das etwas, wo ich aufbauen kann.
Ich bräuchte noch eine etwas genauere Beschreibung, wie ich das nachstellen kann, damit ich das dann wirklich richtig verstanden habe
Korrektur: gerade gesehen, das im Instanz-Debug die CallChain noch nicht zu sehen ist, nur in dem Meldungen bei Level „Standardnachricht“.
Zu #1: habe ich gerade getestet, wenn ich in einer Rule eine spezifischen Sound bei „Information“ eintrage, wird der verwendet.
Eventuell habe ich aber das Problem nicht richtig verstanden?
zu #: versuch mal 1.2.3(Modulstore/beta) - siehe README
Ist das bei einem speziellen Sound oder bei jedem Sound so?
Der Fehler tritt nicht immer auf, ich bekomme ihn grade nur auf eine Art reproduziert: Im Event habe ich als Mitteilungs-Details ein Script mit folgender Zeile:
if ($_IPS['recovery']) { $r['severity'] = 2; $r['subject'] = "Die Küche ist wieder trocken."; $r['message'] = ""; }
Dabei wir anscheinend die Severity nicht übergeben, am Handy kommt ein nicht definierter (also Standard) Ton an an statt des eigentlich in der Base für die Severity „Info“ konfigurierten („Rolle“). Bei den anderen Severities (3 und 4, siehe unten), funktioniert es aber.
versuch mal 1.2.3
Cool, danke! Im Debug sehe in der CallChain genau das gesuchte. In diesem Beispiel die ID der Variable (18041) und sogar auch noch die es Events (27877). Nur der VALUE selbst ist leider nicht direkt dabei - macht aber ja nichts, der lässt sich dann ja mit einem GetValue() besorgen.
16.04.2022, 20:59:52 | PrintCallChain | cause=EventTrigger, chain=Array<LF>(<LF> [0] => Variable #18041 STATE (Wassermelder)<LF> [1] => Event #27877 On Variable Change for Variable "Räume\Küche\Wassermelder\STATE"<LF>)<LF>
Wenn die nun im $_IPS Array drin wären, könnte ich meinen Code ohne harte Links bauen. Leider hat der Wassermelder nämlich drei Zustände (trocken, feucht, nass), daher komme ich nicht um eigenen Code herum:
Also so (Ausschnitt):
$r = [];
if (GetValue($_IPS['VARIABLE']) == 1) { $r['severity'] = 3; $r['subject'] = "Warnung"; $r['message'] = "Feuchtigkeit unter der Spüle!"; }
Statt so:
if (GetValue(18041) == 1) { $r['severity'] = 3; $r['subject'] = "Warnung"; $r['message'] = "Feuchtigkeit unter der Spüle!"; }
bist du dir sicher, das die jetzt nicht dein ist?
ich hatte VARIABLE, VALUE und OLDVALUE dazu gepackt - sofern die mir dort zur Verfügung steht.
Du kannst in diesem Scriog zwar nichts micht echo ausgeben, aber mit IPS_LogMessage(‘xxx‘, ‘_IPS=‚. print_r($_IPS, true));
sollen drin sein, setzt nur voraus, das mit das im IPS zur Verfügung gestellt wird. Bau das mal ein und schau, das in den Mitteilungen auftaucht
Das kann ja nicht das ganze Script sein, die Struktur ($r) muss ja mit echo json_encode($r); zurück gegeben werden … (im README ist ja ein Bsp)
Und severity = 2 ist doch NOTICE, nicht INFO?
würde mich auch interessieren, was im Instanz-Debug diese NoticeEvents und des dazugehörigen NoticeRule sowie NotuceBase so auftaucht
Perfekt! Die Werte sind da - funktioniert! Sehr cool.
Update/Edit: In einer Webfront Push gehts, aber in einer Scipt-Benachrichtigung (möchte ich für Sprachausgabe über Amazon Echo verwenden) kommen die Daten noch nicht an. Hast du sie dort eventuell noch nicht mit übergeben?
Natürlich war die eine Zeile nicht alles, nur ein Beispiel. Und du hattest Recht, Flüchtigkeitsfehler mit der 2, es muss eine Severity 1 sein, dann funktioniert es auch mit dem Sound
Der Vollständigkeit halber:
$r = [];
if ($_IPS['VALUE'] == 1) { $r['severity'] = 3; $r['subject'] = "Warnung"; $r['message'] = "Feuchtigkeit unter der Spüle!"; }
if ($_IPS['VALUE'] == 2) { $r['severity'] = 4; $r['subject'] = "Alarm"; $r['message'] = "Wasser der Küche!"; }
if ($_IPS['recovery']) { $r['severity'] = 1; $r['subject'] = "Die Küche ist wieder trocken."; $r['message'] = ""; }
echo json_encode($r);
Noch eine Kleinigkeit, nicht wichtig, nur zur Info, falls es dich „triggern“ sollte: Bei Meldungen finde ich es nicht immer schön, einen Betreff und einen Text mit einem Doppelpunkt getrennt zu haben. Daher konfiguriere ich Nachrichten oft ähnlich wie diese:
Leider führt das „leer lassen“ der Nachricht dazu:
Hier wäre eine mögliche Lösung, wenn im Feld für die alternative Nachricht ein Schalter wäre in der Art „keine“ oder „leer“. Da ich mit den neuen Möglichkeiten über das $_IPS Array nun die Meldungen eh über Script errechnen werde, erübrigt es sich (für mich).