smarthome-tricks.de

Eigenes Logging in ioBroker – Teil 4

In diesem Artikel zeige ich Dir, wie Du Dein eigenes Logging in ioBroker implementieren kannst.

In unserem Smart-Home hatte ich die Idee, bestimmte Ereignisse in Form eines eigenen Protokolls zu speichern. Derzeit dokumentiere ich mir z.B. die Türstatus oder Status zur automatischen Beleuchtung. Im Artikel werde ich ich ein neues, angepasstes Script mit den Funktionsupdates zeigen:

Hier zunächst meine Basis-Anforderungen an das Protokoll:

Im 1. Teil der Artikelreihe habe wir bereits ein Script dazu implementiert. Im Laufe der Zeit kamen nun aber weitere Anforderungen dazu, welche im neuen Script berücksichtigt wurden:

Für die Installation des Scripts muss einfach das bestehende Script mit dem folgenden Script-Code ersetzt werden. Bitte beachte dabei, dass bei einer Änderung des globalen Code-Bereichs alle Scripte automatisch einmalig ausgeführt werden. Hier nun der neue Script-Code für die Logging-Funktionalität:

const EventListDestination = "javascript.0.SystemEventList.";
const maxEventCount = 500;
 
function createEventlog(EventType, EventText) {
  let EventList = getState(EventListDestination + "EventList").val;
  
  // Nur die letzten x Einträge im Script belassen
  let eventList = EventList.split('<br>');
  let eventCount = eventList.length;
  let newEventList = "";

  for (var i = 0; i < eventCount; i++) {
    if ( i < (maxEventCount-1) ) {
      newEventList = newEventList + "<br>" + eventList[i];
    } else {
      break;
    }
  }
  
  EventList = newEventList;
 
  // Neue Event-Id und Zeitpunkt ermitteln
  let EventId = getState(EventListDestination + "NextEventId").val;
  let EventDateTime = formatDate(getDateObject((new Date().getTime())), "TT.MM.JJ hh:mm:ss");
 
  EventId = EventId + 1;
  setState(EventListDestination + "NextEventId", EventId);
   
  let FormatedEventId = ("00000" + EventId).slice(-5);
  let EventLog = FormatedEventId + " - " + EventDateTime + " - " + EventType + " - " + EventText;
  EventList = EventLog + EventList;
   
  setState(EventListDestination + "EventList", EventList);
}

Beispiel-Code für das mehrmalige Aufrufen der createEventLog() Funktion:

function sleep(milliseconds) {
 return new Promise(resolve => setTimeout(resolve, milliseconds));
}

async function createMultipleLogs() {
  createEventlog("Info", "Test Nachricht 1");
  await sleep(100);
  createEventlog("Info", "Test Nachricht 2");
  await sleep(100);
  createEventlog("Info", "Test Nachricht 3");
  await sleep(100);    
}

createMultipleLogs();

Vielen Dank für euer Feedback. Bei weiteren Fragen oder Anregungen gerne melden 🙂

Die mobile Version verlassen