ioBroker eigene Protokoll Funktion (Logging) erstellen

Über ein kleines Javascript lässt sich eine Protokoll Funktion in ioBroker erstellen. Diese ordnet die Ereignisse chronologisch, färbt sie entsprechend ihrer Bedeutung (Info, Warnung, Fehler) ein und weist ihnen ein kleines Symbol zu.

Javascript erstellen

Zuerst erstellst Du ein neues Javascript im Bereich global.

 // Hauptdatenpunkt unterhalb javascript
  var datenpunkt = "Ereignisprotokoll.";
  
  // Mögliche Protokoll-Texte
  const texte = ["Info","Warnung","Fehler"];
  
  // Farben zu den Texten (schwarz, gelb, rot)
  const farbe = ["#000000","#F0DB4F","#EF5350"];
  
  // Symbole zu den Texten
  const symbol = ["ⓘ","⚠","☠"];
   
  function Protokoll(typ, Text) {
      // Protokoll abholen
      var Protokoll_Liste = getState(datenpunkt+"Ereignisse").val;
      var datum = formatDate(new Date(), "TT.MM.JJ hh:mm:ss");
  
      // Neues Protokoll generieren
      let tmp_Protokoll = datum + "<span style=\"display:inline-block;width:90px;margin-left:10px;color:" + farbe[typ] + "\">"
      + symbol[typ] + " " + texte[typ] + "</span>" + Text + "<br>";
  
      // Neues Protokoll an den Anfang setzen
      Protokoll_Liste = tmp_Protokoll + Protokoll_Liste;
  
      // Neues Protokoll in Datenpunkt speichern
      setState(datenpunkt + "Ereignisse", Protokoll_Liste);
  }
  
  // Zugehörige Datenpunkte erstellen
  function erstelleDatenpunkte() {
      // Datenpunkt Protokoll
      createState(datenpunkt+"Ereignisse", "", false, {
          name: "Ereignisprotokolle",
          desc: "Protokoll Funktion über JavaScript",
          type: "string",
          role: "text",
          unit: ""
      });    
  }
  
  // einmaliger Aufruf zum Erstellen der DP's
  erstelleDatenpunkte();
 

Skript verwenden

Da das Skript im globalen Bereich von Javascript liegt, kann jedes Skript nun auf diese Funktion zugreifen. Der Aufruf erfolgt nach folgendem Schema.

Beispiel 1:

 Protokoll(0, "Ich bin eine Information!");
 

Beispiel 2:

 Protokoll(1, "Ich bin eine Warnung!");
 

Beispiel 3:

 Protokoll(2, "Ich bin ein Fehler!");
 

Tür- bzw. Fensterkontakt protokollieren

In diesem Skript wird das Öffnen und schließen eines Fensters protokolliert.

 // Protokoll - 0 - Information
  on({id: "hm-rpc.0.LEQ01737XX.1.STATE", change: "ne"}, function (obj) {
      if (obj.state.val === true) {
          Protokoll(0, "Wohnzimmer Fenster wurde geöffnet!");
      } else {
          Protokoll(0, "Wohnzimmer Fenster wurde geschlossen!");
      }
  });
 

Die erste Zahl ist jeweils einem Index zugewiesen. Hier 0 = Information, 1 = Warnung und 2 = Fehler. Der Text danach kann frei im Funktionsaufruf belegt werden.

Protokoll in VIS einbinden

Damit Du nun nicht nur eine Ereignisdatenbank in ioBroker hast, sondern sie auch darstellen lassen kannst, benötigst du nur ein HTML Widget, welches Du auf einer View platzierst.

HTML Widget auf der View platzieren
HTML Widget auf der View platzieren

Dem Widget weisen wir nun den Datenpunkt aus dem Skript hinzu.

 {javascript.0.Ereignisprotokoll.Ereignisse}
 
HTML Widget mit zugewiesenem Datenpunkt
HTML Widget mit zugewiesenem Datenpunkt

Die Schriftfarbe lässt sich über über die Eigenschaften des Widgets anpassen.

Farbanpassung des HTML Widget
Farbanpassung des HTML Widget

Widget in View anzeigen

Nun kannst Du deine View öffnen und die Ereignisse anzeigen lassen.

Ereignisse in VIS anzeigen
Ereignisse in VIS anzeigen

Scrollbare Ereignisanzeige

Die Ereignisanzeige wird bei jedem Aufruf natürlich um ein Element verlängert. Damit Du in der Liste noch die Möglichkeit hast, ältere Elemente abzurufen, kannst Du das Scrollen der Liste aktivieren. Dies geschieht über:

Scrollen der Ereignisse ermöglichen
Scrollen der Ereignisse ermöglichen

overflow-y ist in dem Falle der senkrechte Scrollbalken; overflow-x der Vertikale.

So sieht es aus:

Ereignisse mit Scrollbalken anzeigen
Ereignisse mit Scrollbalken anzeigen

Ereignisanzeige für geöffnete/geschlossene Fenster

Die Protokollfunktion aus dem Beispiel oberhalb sieht in VIS so aus:

Ereignisanzeige für geöffnete/geschlossene Fenster
Ereignisanzeige für geöffnete/geschlossene Fenster

2 Gedanken zu „ioBroker eigene Protokoll Funktion (Logging) erstellen

  1. Wolfgang

    Das Script funktioniert so wie es soll. Erst einmal vielen Dank.
    Wenn man aber so viele Ereignisse loggen möchte, wird der Datenpunkt schnell sehr voll. Ich habe jetzt versucht, über bestimmte Ereignisse den Datenpunkt wieder zu leeren. Leider ohne Erfolg.
    Hier meine Ergänzung;
    —– snip-snap —— (bestehender Inhalt)
    // Neues Protokoll in Datenpunkt speichern
    setState(datenpunkt + “Ereignisse”, Protokoll_Liste);
    —– snip-snap —— (meine Ergänzung)
    if (typ == 9) {
    // Protokoll loeschen
    setState(datenpunkt + “Ereignisse”, “GELOESCHT”);
    Protokoll_Liste = “GELOESCHT”;
    console.error(([‘LOESCHEN 2’,].join(”)));
    }
    —– snip-snap —— (ENDE)
    Leider wird der Datenpunkt nicht gelöscht, obwohl im ioBroker-Logging der Text “LOESCHEN2” ausgegeben wird.
    Wo mache ich denn da einen Denkfehler?
    Liebe Grüße

    Antworten
    1. Stephan Beitragsautor

      Hallo Wolfgang,
      Wenn du den Datenpunkt löschen möchtest, dann kannst Du dies wie folgt erledigen:
      setState(datenpunkt + “Ereignisse”, “”);

      Somit wird der Datenpunkt “Ereignisprotokoll.Ereignisse” geleert.

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.