[Modul] Notice (Mitteilungen)

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

Changelog

  • 1.0 @ 25.02.2022 17:42 (beta)
    initiale Version

Moin,

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)

Gruß,
Loerdy

ah, mist. bitte update

Hört sich top an, werde ich demnächst versuchen!
Danke und Gruss Seppm

Hi,

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:

Werd weiter probieren soweit ich Zeit finde.

Danke und Gruss Seppm

Wenn du die Anzahl der Wdh. auf „0“ stellst, sollte er nicht meckern, oder?

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.

Cheers Seppm

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:

  1. Default für max_repetitions ist nun 0
  2. 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.
1 „Gefällt mir“

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.

Gruß,
Loerdy

1 „Gefällt mir“

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 :frowning:
jetzt habe ich gerade die 1.0.6 als Beta eingestellt

Hallo,

gerade aktuelle 1.0.6 installiert da ist der Fehler auch noch.

Gruß WiBo

ja, ich habe gesehen, anscheinend gibt es Actions mit interessantem Inhalt bei dir.
Habe ich (hoffentlich) abgesichert
1.0.7 ist im Beta

Hallo @demel42,

vielen Dank für dein tolles Modul! Ich habe dazu zwei Kleinigkeiten, vielleicht sind es Bugs, vielleicht bediene ich es auch falsch:

  1. 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.

  2. 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 :slight_smile:

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);

Frohe Ostern!

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:

CleanShot 2022-04-17 at 02.15.58

Leider führt das „leer lassen“ der Nachricht dazu:

CleanShot 2022-04-17 at 02.19.25

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).