NEWS
[Script] MessageHandler: Nachrichten protokollieren +Widget
-
Ich habe ein Skript "MessageHandler" , "MessageGlobal" und "MessageStateCreator" erstellt zur Protokollierung von Nachrichten/Ereignissen.
Beispiel:


Kernfunktionen:
-
Ermöglicht es Nachrichten aus Skripten auszulösen und zu entfernen. Dies kann über zwei Wege erfolgen:
-
Automatisches Erzeugen/Entfernen von Nachrichten über das Javascript MessageStateCreator.
Es werden konfigurierte Datenpunkte überwacht und bei konfigurierten Bedingungen Nachrichten erzeugt oder auch entfernt. Die Textausgabe der Nachrichten kann auch konfiguriert werden und dynamisch erzeugt werden. -
Aufruf Javascript-Funktionen postMessage(..) oder removeMessage(..)
-
-
Es können entweder alle Nachrichten eines Nachrichtentyps protokolliert werden oder immer nur die letzte eingetretende Nachricht.
-
Nachrichten werden nach Prioritäten visuell in VIS dargestellt. Es stehen zwei VIS-Ausgaben zur Verfügung:
- einfache HTML-Tabelle (ohne Schnickschnack)
- Material Design CSS 2.0 Card für Uhula.
-
Nachrichten können (optional) in VIS global quittiert werden.
-
Nachrichtendefinition: Nachrichten werden über eine Konfigurationsstruktur definiert und damit wesentliche Eigenschaften der Nachricht bestimmt, darunter:
- Nachrichtenüberschrift
- Nachrichtentext
- Kritikalität (Information, Warnung, Alarm etc.) / Priorität
- Icon für die VIS Ausgabe
- Farbe des Icons
Beispiele für Nachrichtenereignisse:
- Alarmanlage ausgelöst!
- Wasseralarm
- Erinnerung Fenster lüften!
- Erinnerung Fenster zu lange geöffnet!
- Aktuell offene Fenster
- Aktuell
- Aktuell offene Türen
- Lichter angeschaltet
- Aktive Steckdosen
- Post im Briefkasten mit Datum letzter Einwurf
- Nächster Müllabfuhrtermin mit Information zur Tonne
- Ausgabe Temperatur / Luftfeuchte
- Corona-Statistiken
- Termine des Tages
- Termine morgen
Nachrichten können damit als kompakte Darstellung des globalen Systemzustands in VIS verwendet werden.
Die Idee ist es, alle relevanten Informationen auf "einen Blick" zu erkennen. Wichtige und kritische Ereignisse werden daher in der Liste zentral oben platziert. Unwichtigere Informationen eher unten.Installation
-
Das Javascript "MessageGlobal" als globales Script installieren und starten.
-
Den Javascript "MessageHandler" serverseitiges Script installieren und starten-5 Sek warten-stoppen-starten.
Beim 1.Start werden die notwendigen States unter STATE_PATH = '0_userdata.0.messageHandler.'
erzeugt. Erst beim 2.Start instanziiert das Script die Event-Handler und läuft dann. -
Das Javascript "MessageStateCreator" installieren und starten (optional)
-
VIS-Ausgabe: Für das Material Design CSS von Uhula steht eine eigene Card in Form einer View zur Verfügung.
Optional gibt es auch eine einfache HTML-Tabellenausgabe als View zur Verfügung.
Konfiguration
Zur Konfiguration sind zwei Schritte erforderlich:
-
Die Grundkonfiguration erfolgt über die Festlegung von MESSAGE-IDs (Nachrichten-Ids)
im Javascript "MessageHandler" (siehe Anleitung weiter unten). Optional kann in der Funktion MessageHandler|doInit() eine Anpassung der KONFIGURATION vorgenommen werden. -
Über das Javascript "MessageStateCreator" können Datenpunkte überwacht werden
und Nachrichten automatisiert ausgelöst werden.
Die Konfiguration erfolgt hierfür im Javascript "MessageStateCreator".
Im Javascript selbst sind auch Beispiele enthalten, wie die Konfiguration durchgeführt wird.
Definition of MESSAGE-IDs (Nachrichten-Ids)
Nachrichten sind die Grundlage der Meldungen, die später aus Skripten ausgelöst werden.
Eine Nachricht trägt eine eindeutige ID und Eigenschaften, die die Verarbeitung der Nachricht oder das Verhalten der Ausgabe steuern. Nachrichten werden über eine Konfigurationsstruktur definiert und damit wesentliche Eigenschaften der Nachricht bestimmt, darunter:- Nachrichtenüberschrift
- Nachrichtentext
- Kritikalität (Information, Warnung, Alarm etc.) / Priorität
- Icon für die VIS Ausgabe
- Farbe des Icons
Die Konfiguration erfolgt über die Konstante MESSAGE_IDS im Skript MessageHandler:
Spoiler Details zur Konfiguration von Nachrichten-IDs / msgIDs:
Script MessageStateCreator: Automatisiertes Auslösen / Löschen von Nachrichten
Über das Skript "MessageStateCreator" werden konfigurierte Datenpunkte überwacht und bei konfigurierten Bedingungen Nachrichten erzeugt oder auch entfernt. Die Textausgabe der Nachrichten kann auch konfiguriert werden und dynamisch erzeugt werden.
Die Grundkonfiguration erfolgt über die Festlegung von MESSAGE-IDs (Nachrichten-Ids) im Javascript "MessageHandler".
Anschließend kann im Skript "MessageStateCreator" in der Konstante MESSAGE_EVENTS die Konfiguration von zu überwachenden Datenpunkten erfolgen.Spoiler zur exemplarischen Konfiguration von Datenpunkten, die automatisch Nachrichten erzeugen:
Javascript: Auslösen / Löschen von Nachrichten
Über das globale Javascript "MessageFunctions" stehen zwei Methoden
für das Erzeugen/löschen von Nachrichten zur Verfügung.States die durch das Skript angelegt werden
. Filter
Ideen für die Zukunft / Work in Process
- Nachrichten habe eine definierbare Zeit in der sie ablaufen (und damit automatisch entfernt werden)
- Integration Push-Dienste (Telegram, Pushover, Email etc.) mit Nachrichtendefinition
- Zyklisches Wiederholen von Nachrichten-Pushs (alle 20 Minuten bei Alarmen z.B.)
Skripte
Version 0.3
-
"MessageGlobal" als globales Skript installieren und starten
MessageGlobal.js -
"MessageHandler" als normales JS installieren und starten.
MessageHandler.js -
"MessageStateCreator" als normales JS installieren und starten
MessageStateCreator.js
Views
MDCSS v2 ListView
cardMessages.viewHTML-Tabelle
cardMessages_html.view -
-
Ich habe ein Skript "MessageHandler" , "MessageGlobal" und "MessageStateCreator" erstellt zur Protokollierung von Nachrichten/Ereignissen.
Beispiel:


Kernfunktionen:
-
Ermöglicht es Nachrichten aus Skripten auszulösen und zu entfernen. Dies kann über zwei Wege erfolgen:
-
Automatisches Erzeugen/Entfernen von Nachrichten über das Javascript MessageStateCreator.
Es werden konfigurierte Datenpunkte überwacht und bei konfigurierten Bedingungen Nachrichten erzeugt oder auch entfernt. Die Textausgabe der Nachrichten kann auch konfiguriert werden und dynamisch erzeugt werden. -
Aufruf Javascript-Funktionen postMessage(..) oder removeMessage(..)
-
-
Es können entweder alle Nachrichten eines Nachrichtentyps protokolliert werden oder immer nur die letzte eingetretende Nachricht.
-
Nachrichten werden nach Prioritäten visuell in VIS dargestellt. Es stehen zwei VIS-Ausgaben zur Verfügung:
- einfache HTML-Tabelle (ohne Schnickschnack)
- Material Design CSS 2.0 Card für Uhula.
-
Nachrichten können (optional) in VIS global quittiert werden.
-
Nachrichtendefinition: Nachrichten werden über eine Konfigurationsstruktur definiert und damit wesentliche Eigenschaften der Nachricht bestimmt, darunter:
- Nachrichtenüberschrift
- Nachrichtentext
- Kritikalität (Information, Warnung, Alarm etc.) / Priorität
- Icon für die VIS Ausgabe
- Farbe des Icons
Beispiele für Nachrichtenereignisse:
- Alarmanlage ausgelöst!
- Wasseralarm
- Erinnerung Fenster lüften!
- Erinnerung Fenster zu lange geöffnet!
- Aktuell offene Fenster
- Aktuell
- Aktuell offene Türen
- Lichter angeschaltet
- Aktive Steckdosen
- Post im Briefkasten mit Datum letzter Einwurf
- Nächster Müllabfuhrtermin mit Information zur Tonne
- Ausgabe Temperatur / Luftfeuchte
- Corona-Statistiken
- Termine des Tages
- Termine morgen
Nachrichten können damit als kompakte Darstellung des globalen Systemzustands in VIS verwendet werden.
Die Idee ist es, alle relevanten Informationen auf "einen Blick" zu erkennen. Wichtige und kritische Ereignisse werden daher in der Liste zentral oben platziert. Unwichtigere Informationen eher unten.Installation
-
Das Javascript "MessageGlobal" als globales Script installieren und starten.
-
Den Javascript "MessageHandler" serverseitiges Script installieren und starten-5 Sek warten-stoppen-starten.
Beim 1.Start werden die notwendigen States unter STATE_PATH = '0_userdata.0.messageHandler.'
erzeugt. Erst beim 2.Start instanziiert das Script die Event-Handler und läuft dann. -
Das Javascript "MessageStateCreator" installieren und starten (optional)
-
VIS-Ausgabe: Für das Material Design CSS von Uhula steht eine eigene Card in Form einer View zur Verfügung.
Optional gibt es auch eine einfache HTML-Tabellenausgabe als View zur Verfügung.
Konfiguration
Zur Konfiguration sind zwei Schritte erforderlich:
-
Die Grundkonfiguration erfolgt über die Festlegung von MESSAGE-IDs (Nachrichten-Ids)
im Javascript "MessageHandler" (siehe Anleitung weiter unten). Optional kann in der Funktion MessageHandler|doInit() eine Anpassung der KONFIGURATION vorgenommen werden. -
Über das Javascript "MessageStateCreator" können Datenpunkte überwacht werden
und Nachrichten automatisiert ausgelöst werden.
Die Konfiguration erfolgt hierfür im Javascript "MessageStateCreator".
Im Javascript selbst sind auch Beispiele enthalten, wie die Konfiguration durchgeführt wird.
Definition of MESSAGE-IDs (Nachrichten-Ids)
Nachrichten sind die Grundlage der Meldungen, die später aus Skripten ausgelöst werden.
Eine Nachricht trägt eine eindeutige ID und Eigenschaften, die die Verarbeitung der Nachricht oder das Verhalten der Ausgabe steuern. Nachrichten werden über eine Konfigurationsstruktur definiert und damit wesentliche Eigenschaften der Nachricht bestimmt, darunter:- Nachrichtenüberschrift
- Nachrichtentext
- Kritikalität (Information, Warnung, Alarm etc.) / Priorität
- Icon für die VIS Ausgabe
- Farbe des Icons
Die Konfiguration erfolgt über die Konstante MESSAGE_IDS im Skript MessageHandler:
Spoiler Details zur Konfiguration von Nachrichten-IDs / msgIDs:
Script MessageStateCreator: Automatisiertes Auslösen / Löschen von Nachrichten
Über das Skript "MessageStateCreator" werden konfigurierte Datenpunkte überwacht und bei konfigurierten Bedingungen Nachrichten erzeugt oder auch entfernt. Die Textausgabe der Nachrichten kann auch konfiguriert werden und dynamisch erzeugt werden.
Die Grundkonfiguration erfolgt über die Festlegung von MESSAGE-IDs (Nachrichten-Ids) im Javascript "MessageHandler".
Anschließend kann im Skript "MessageStateCreator" in der Konstante MESSAGE_EVENTS die Konfiguration von zu überwachenden Datenpunkten erfolgen.Spoiler zur exemplarischen Konfiguration von Datenpunkten, die automatisch Nachrichten erzeugen:
Javascript: Auslösen / Löschen von Nachrichten
Über das globale Javascript "MessageFunctions" stehen zwei Methoden
für das Erzeugen/löschen von Nachrichten zur Verfügung.States die durch das Skript angelegt werden
. Filter
Ideen für die Zukunft / Work in Process
- Nachrichten habe eine definierbare Zeit in der sie ablaufen (und damit automatisch entfernt werden)
- Integration Push-Dienste (Telegram, Pushover, Email etc.) mit Nachrichtendefinition
- Zyklisches Wiederholen von Nachrichten-Pushs (alle 20 Minuten bei Alarmen z.B.)
Skripte
Version 0.3
-
"MessageGlobal" als globales Skript installieren und starten
MessageGlobal.js -
"MessageHandler" als normales JS installieren und starten.
MessageHandler.js -
"MessageStateCreator" als normales JS installieren und starten
MessageStateCreator.js
Views
MDCSS v2 ListView
cardMessages.viewHTML-Tabelle
cardMessages_html.viewDas Skript ist sehr klein? Ist das Alles?
-
-
@sigi234 Hallo Sigi 234, hast du dir nur das message.js angesehen? Die Hauptlogik ist in der Datei MessageHandler.js
@Tirador sagte in [Script] MessageHandler: Nachrichten protokollieren +Widget:
@sigi234 Hallo Sigi 234, hast du dir nur das message.js angesehen? Die Hauptlogik ist in der Datei MessageHandler.js
Aha, also einmal das Hauptskript und einmal Global.
-
@Tirador sagte in [Script] MessageHandler: Nachrichten protokollieren +Widget:
@sigi234 Hallo Sigi 234, hast du dir nur das message.js angesehen? Die Hauptlogik ist in der Datei MessageHandler.js
Aha, also einmal das Hauptskript und einmal Global.
-
Ok, teste gerade.
Also Skripte laufen ohne Fehler.
Was muss wo der User konfigurieren?
Die Skripte und die Views zum runterladen sind nicht im .txt Format? Warum?
Ich weis mir ja zu helfen.Also ein Beispiel, ich möchte diese Message :
postMessage("DOOR_ISOPEN_INFO", "Haustür"); // Haustür ist geöffnet.
DP:
hm-rpc.0.NEQ1818500.1.STATEWo muss ich jetzt was ändern?
-
Ok, teste gerade.
Also Skripte laufen ohne Fehler.
Was muss wo der User konfigurieren?
Die Skripte und die Views zum runterladen sind nicht im .txt Format? Warum?
Ich weis mir ja zu helfen.Also ein Beispiel, ich möchte diese Message :
postMessage("DOOR_ISOPEN_INFO", "Haustür"); // Haustür ist geöffnet.
DP:
hm-rpc.0.NEQ1818500.1.STATEWo muss ich jetzt was ändern?
@sigi234 aktuell gibt es nur das Framework zur Erzeugung und Ausgabe der Nachrichten.
D.h. du brauchst noch ein separates Skript, welches deinen Datenpunkt überwacht und dann die Javascript Methode postMessage aufruft.
Das geht auch in blockly. Ein blockly Beispiel kann ich morgen posten.In vielen anderen Skripten kann man natürlich auch direkt die Nachrichten integrieren. Die Nachricht für die aktuell anwesenden Personen erzeuge ich direkt im presence tr64 Skript von mic.
Ich arbeite aktuell noch an einem weiteren Skript, um in Abhängigkeit von einstellbaren überwachenden Datenpunkten die Nachrichten auszulösen. Damit wird das Problem dann vereinfacht und generalisiert.
-
Ich habe jetzt ein einfaches Blockly als Beispiel exportiert, die den Einsatz der Funktion zeigen.
Das Beispiel ist mein Briefkastensensor, der eine Nachricht auslöst, wenn jemand Post einwirft.

Blockly-Skript
-
@Tirador
Idee und Umsetzung gefallen mir sehr gut. Danke für die Arbeit. Leider habe ich beim Blockly-Beispiel nur Fehlermeldungen...
Poste doch bitte mal andere Beispiele (Kalender, presence tr64, Stati, ...) für ein besseres Verständnis.@uwe12489 Hallo Uwe, vielen Dank! :)
Ein weiteres Beispiel, wie man das Auslösen von Nachrichten in anderen Skripten integrieren kann am Beispiel des "Script: An- und Abwesenheitserkennung über TR-064-Community-Adapter" (Quelle: https://github.com/Mic-M/iobroker.presence-script-for-tr-064-community-adapter)
Dort kann man die folgenden im Screenshot gelb markierten Codezeilen ergänzen, damit die Nachrichten ausgelöst werden:

Codezeilen:
// Send global Message of available Users! if(presentPersons.length > 0) { postMessage("PERSONS_AVAILABLE_INFO", presentPersons, counter); } else { removeMessage("PERSONS_AVAILABLE_INFO"); }An einem zusätzlichen "generischen" Skript zur Auslösung von Nachrichten bin ich dran. Die Idee ist dort, dass ich Datenpunkte für die Überwachung und Ausgabe der Nachrichtentexte definieren kann. Damit werden die Messages dann automatisiert angelegt. Damit kann man sich Eingriffe in andere Skripte ersparen, was die Wartbarkeit vereinfacht. D.h. wenn Mic sein Skript aktualisiert, muss ich nicht ständig die Codezeilen wieder ergänzen bei mir.
Einen Prototyp habe ich gestern begonnen, dass wird aber noch etwas dauern, bis ich da einen Stand habe der veröffentlicht werden kann.Bezüglich Blockly:
Das Blockly ist nur ein Beispiel von mir. Da der Datenpunkt für den Briefkastensensor bei dir nicht vorhanden sein wird, kann es nicht "out of the box" funktionieren. Es soll ja nur aufzeigen, wie man die Javascript-Funktion "postMessage" auch in Blockly verwenden kann.
Wenn Du Details zu den Fehlermeldungen postest kann ich dir gerne versuchen zu helfen beim Blockly. Vielleicht schreibst du mir eine private Nachricht, um dies zu ergründen. -
@uwe12489 Hallo Uwe, vielen Dank! :)
Ein weiteres Beispiel, wie man das Auslösen von Nachrichten in anderen Skripten integrieren kann am Beispiel des "Script: An- und Abwesenheitserkennung über TR-064-Community-Adapter" (Quelle: https://github.com/Mic-M/iobroker.presence-script-for-tr-064-community-adapter)
Dort kann man die folgenden im Screenshot gelb markierten Codezeilen ergänzen, damit die Nachrichten ausgelöst werden:

Codezeilen:
// Send global Message of available Users! if(presentPersons.length > 0) { postMessage("PERSONS_AVAILABLE_INFO", presentPersons, counter); } else { removeMessage("PERSONS_AVAILABLE_INFO"); }An einem zusätzlichen "generischen" Skript zur Auslösung von Nachrichten bin ich dran. Die Idee ist dort, dass ich Datenpunkte für die Überwachung und Ausgabe der Nachrichtentexte definieren kann. Damit werden die Messages dann automatisiert angelegt. Damit kann man sich Eingriffe in andere Skripte ersparen, was die Wartbarkeit vereinfacht. D.h. wenn Mic sein Skript aktualisiert, muss ich nicht ständig die Codezeilen wieder ergänzen bei mir.
Einen Prototyp habe ich gestern begonnen, dass wird aber noch etwas dauern, bis ich da einen Stand habe der veröffentlicht werden kann.Bezüglich Blockly:
Das Blockly ist nur ein Beispiel von mir. Da der Datenpunkt für den Briefkastensensor bei dir nicht vorhanden sein wird, kann es nicht "out of the box" funktionieren. Es soll ja nur aufzeigen, wie man die Javascript-Funktion "postMessage" auch in Blockly verwenden kann.
Wenn Du Details zu den Fehlermeldungen postest kann ich dir gerne versuchen zu helfen beim Blockly. Vielleicht schreibst du mir eine private Nachricht, um dies zu ergründen. -
@Tirador
Das ist ja ein super Service. Danke.
Leider bringt dein Codeschnipsel im script presence-tr64 auch nur Fehler

wo klemmt da die säge? unterschiedliche bezeichnungen?@uwe12489 Der Fehler in deinem Log deutet daraufhin, dass du den Codeschnipsel an der falschen Stelle eingefügt hast.
Ich habe bisher Version 0.7 verwendet, jetzt aber das Script von Mic nochmal aktualisiert.
Die Codezeilen haben sich leicht verschoben in der Version 1.1 von mic:

Das vollständige Script mit den Codezeilen habe ich aber zusätzlich nochmal eingefügt:
-
@uwe12489 Der Fehler in deinem Log deutet daraufhin, dass du den Codeschnipsel an der falschen Stelle eingefügt hast.
Ich habe bisher Version 0.7 verwendet, jetzt aber das Script von Mic nochmal aktualisiert.
Die Codezeilen haben sich leicht verschoben in der Version 1.1 von mic:

Das vollständige Script mit den Codezeilen habe ich aber zusätzlich nochmal eingefügt:
-
@Tirador
Das geht ja wirklich super schnell. Danke.
Mit dem neuen Script kommt folgender Log:

Er findet wohl presentpersons nicht... -
Ich hatte die Tage etwas Zeit an der Lösung weiterzuarbeiten.
Ich habe nun noch ein weiteres Skript hinzugefügt "MessageStateCreator".
Damit kann man konfigurabel Datenpunkte überwachen und auch nur bei bestimmten Bedingungen Nachrichten erzeugen oder auch entfernen. Die Textausgabe der Nachrichten kann auch konfiguriert werden und dynamisch erzeugt werden.
Damit ist es nun nicht mehr notwendig in anderen Skripten hand anzulegen, sofern die notwendigen Datenpunkte bereits zur Verfügung stehen.Damit kann ich nun die folgenden Informationen automatisiert erzeugen:

Insgesamt bin ich schon sehr zufrieden damit. :)
Ich habe das initale Posting in diesem Thread um die neuen und aktualisierten Skripte ergänzt, sowie die Anleitung aktualisiert.
Details zur Konfiguration inkl. Beispiel ist im Skript MessageStateCreator vorhanden.
Ein Auszug aus meinen Beispielen (Spoiler):
-
Da ich durch umfangreiche Bearbeitung des initialen Postings das Layout so "zerstückelt" habe, ist leider dieser Thread unbrauchbar geworden. Das initiale Posting ist nicht mehr editierbar / nichtmal für die Admins.
Ich habe daher ein neues Posting angelegt und bitte alle dort weiterzumachen:
https://forum.iobroker.net/topic/32207/script-messagehandler-nachrichten-protokollieren-vis
@Foren-Admins:
Bitte diesen Thread schließen.
