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