NEWS

[Script] MessageHandler: Nachrichten protokollieren +Widget

  • Starter

    Ich habe ein Skript "MessageHandler" , "MessageGlobal" und "MessageStateCreator" erstellt zur Protokollierung von Nachrichten/Ereignissen.

    Beispiel:

    2020-04-06 18_02_59-vis.png
    2020-04-06 17_31_14-vis.png

    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

    1. Das Javascript "MessageGlobal" als globales Script installieren und starten.

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

    3. Das Javascript "MessageStateCreator" installieren und starten (optional)

    4. 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:

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

    2. Ü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

    1. "MessageGlobal" als globales Skript installieren und starten
      MessageGlobal.js

    2. "MessageHandler" als normales JS installieren und starten.
      MessageHandler.js

    3. "MessageStateCreator" als normales JS installieren und starten
      MessageStateCreator.js

    Views
    MDCSS v2 ListView
    cardMessages.view

    HTML-Tabelle
    cardMessages_html.view

  • Forum Testing Most Active

    @Tirador

    Das Skript ist sehr klein? Ist das Alles?

  • Starter

    @sigi234 Hallo Sigi 234, hast du dir nur das message.js angesehen? Die Hauptlogik ist in der Datei MessageHandler.js

  • Forum Testing Most Active

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

  • Starter

    @sigi234 ja genau.

  • Forum Testing Most Active

    @Tirador

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

    Wo muss ich jetzt was ändern?

  • Starter

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

  • Starter

    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.

    2020-04-07 19_40_43-javascript - ioBroker.png

    Blockly-Skript

  • Starter

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

  • Starter

    @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:
    2020-04-09 09_11_50-javascript - ioBroker.png

    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.

  • Starter

    @Tirador
    Das ist ja ein super Service. Danke.
    Leider bringt dein Codeschnipsel im script presence-tr64 auch nur Fehler
    Bildschirmfoto 2020-04-09 um 10.37.02.png
    wo klemmt da die säge? unterschiedliche bezeichnungen?

  • Starter

    @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:

    2020-04-09 12_37_18-javascript - ioBroker.png

    Das vollständige Script mit den Codezeilen habe ich aber zusätzlich nochmal eingefügt:

  • Starter

    @Tirador
    Das geht ja wirklich super schnell. Danke.
    Mit dem neuen Script kommt folgender Log:
    Bildschirmfoto 2020-04-09 um 15.55.40.png
    Er findet wohl presentpersons nicht...

  • Starter

    @uwe12489
    Ah, eine ähnliche Meldung kommt auch bei removeMessage
    Bildschirmfoto 2020-04-09 um 17.30.58.png

  • Starter

    @uwe12489 dann hast du das message.js Script nicht unter global installiert.

  • Starter

    @Tirador
    Blöder Fehler von mir 😉 Danke

  • Starter

    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:
    2020-04-12 12_27_30-vis.png

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

  • Starter

    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.

Suggested Topics

2.3k
Online

35.1k
Users

41.0k
Topics

563.9k
Posts