NEWS
Eigenes Logging in Datenpunkt wird manchmal überschreiben
-
Hallo, ich hab da ein Problem, das ich nicht verstehe. Ich habe mir ein eigenes Logging in einem Datenpunkt aufgebaut (die Idee und das Skript kommt von hier https://www.kreyenborg.koeln/iobroker-eigene-protokoll-funktion-logging-erstellen). Mir ist nun aufgefallen, wenn mehrere Einträge ins Log geschrieben werden und dies zu schnell hintereinander geschied, einfach der vorhergehende Eintrag überschrieben wird. Ich habe dies überprüft, in dem ich eine Abfrage aller HM Geräte per JS gemacht habe und jedes Gerät in das Log geschrieben habe. Mit VIS hab ich mir den Datenpunkt in einer Web Seite angezeigt und dabei gesehen, dass der aktuelle Eintrag immer überschrieben wird. Dann geht z.B. eine Tür auf und es entsteht eine neue Zeile im Log.
Hier das Skript mit dem Ich die HM Geräte auslese und in das Protokoll schreibe:createState('Datenpunkte.CCU.anzahlLOWBAT', 0); createState('Datenpunkte.CCU.textLOWBAT', " "); var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); function countLowbat(obj) { var anzahlLOWBAT = 0; var textLOWBAT = []; cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) if (status === false) { var name = getObject(id).common.name; // neu eingefügt var devicename = name.substring(0, name.indexOf(":0.LOWBAT")); // neu eingefügt, LOWBAT aus Bezeichnung entfernen var Geraet = (getObject(id).common.name + ": " + status) Protokoll(1, "CCU LowBat", Geraet); // Protokoll schreiben textLOWBAT.push(devicename); // Zu Array hinzufügen; aktualisiert, vormals obj.common.name ++anzahlLOWBAT; } }); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState("Datenpunkte.CCU.textLOWBAT", textLOWBAT.join(',')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung setState("Datenpunkte.CCU.anzahlLOWBAT", textLOWBAT.length); // Schreibt die aktuelle Anzahl der Geräte im System }
Hier ein Auszug aus dem Log:
Die in Gelb markierte Zeile wurden über 20 mal überschrieben und der letzte Eintrag ist nun zu sehen.
Das geschied immer dann, wenn das Logging zu schnell hintereinater kommt. Kurze Pause zwischen den Einträgen und es ist ok. Hat dies was mit dem Datenpunkt zu tun? Ist die Reaktionzeit hier das Problem? Wie kann ich das Überschreiben des letzten Eintrags verhintern.LG Manfred
-
@manfred-outlaw
Hallo Manfred,
ich habe genau das gleiche Problem.
Wenn Trigger in unterschiedlichen Skripten den gleichen Auslöser haben, so wird immer nur eine Meldung im Log erzeugt.
Da alle meine Skripte in Blockly sind, suche ich auch eine Lösung die ich in Blockly implementieren kann.
Hast du für dich eine Lösung gefunden?Grüße
Sascha