NEWS
Anfänger Fragen - Log wird geflutet und Fehlererkennung
-
Hallo zusammen,
ich komme ursprünglich vom Arduino und arbeite mich jetzt in Javascript ein.
Vieles habe ich durch Try and Error herausgefunden.Aktuelles Problem ->
die Log Datei wird regelmäßig durch irgendwelche Einträge geflutet die aus einem Script kommen das zum einen gelöscht wurde oder bei dem der Eintrag console.log entfernt wurde (Script danach gespeichert und neu gestartet).
Woher kann dieser Fehler kommen oder wie verhindert man das?Zusätzlich habe ich aktuell das Problem, dass eine Variable rot unterstrichen ist, aber nur in einem Vergleich. Ich lese den Wert aus einem BME280 ein und schreibe diesen in die Variable - tut soweit.
In Zeile 16 ist "TemperaturSensor1neu" rot unterstrichen. Ich habe schon den Vergleich auf >= 0.0, >=0 gehabt - ändert sich nichts.
Was übersehe ich? Meine Suche bei Google war auch etwas erfolglos. Zwar zig Anleitungen wie man etwas deklariert, aber die Lösung habe ich nicht gefunden oder übersehen.var Intervall1, NullGrad, FeuchteSensor1, FeuchteSensor2, TemperaturSensor1alt, TemperaturSensor1neu, TemperaturSensor2talt, TemperaturSensor2neu; NullGrad = 0; TemperaturSensor1alt = 0; // neue Werte vorhanden? Intervall1 = setInterval(function () { TemperaturSensor1neu = getState("i2c.0.0x76.temperature").val; console.log(TemperaturSensor1neu); console.log(TemperaturSensor1alt); }, 60000); //falls neue Werte je nach Temperatur Wasergehalt berechnen if (TemperaturSensor1alt != TemperaturSensor1neu){ console.log("neue Werte"); TemperaturSensor1alt = TemperaturSensor1neu; if (TemperaturSensor1neu >= NullGrad){ FeuchteSensor1 = (13.233 * getState("i2c.0.0x76.humidity").val * (Math.pow(10, ((7.5 * getState("i2c.0.0x76.temperature").val) / (237 + getState("i2c.0.0x76.temperature").val))) / (273.16 + getState("i2c.0.0x76.temperature").val))).toFixed(2); //Berechnung Wassergehalt der Luft aussen setState('javascript.0.variables.feuchte'/*feuchte*/, parseFloat(FeuchteSensor1) , true); //console.log(FeuchteSensor1); }; if (TemperaturSensor1neu < NullGrad){ FeuchteSensor1 = (13.233 * getState("i2c.0.0x76.humidity").val * (Math.pow(10, ((9.5 * getState("i2c.0.0x76.temperature").val) / (237 + getState("i2c.0.0x76.temperature").val))) / (273.16 + getState("i2c.0.0x76.temperature").val))).toFixed(2); //Berechnung Wassergehalt der Luft aussen setState('javascript.0.variables.feuchte'/*feuchte*/, parseFloat(FeuchteSensor1) , true); //console.log(FeuchteSensor1); }; }; //Später für zweiten Sensor /* if (TemperaturSensor2alt != TemperaturSensor2neu){ TemperaturSensor2alt = TemperaturSensor2neu; if(TemperaturSensor2neu >= 0){ FeuchteSensor2 = (13.233 * getState("i2c.0.0x76.humidity").val * (Math.pow(10, ((7.5 * getState("i2c.0.0x76.temperature").val) / (237 + getState("i2c.0.0x76.temperature").val))) / (273.16 + getState("i2c.0.0x76.temperature").val))).toFixed(2); //Berechnung Wassergehalt der Luft aussen setState('javascript.0.variables.feuchte', parseFloat(FeuchteSensor2) , true); console.log(FeuchteSensor2); }; if(TemperaturSensor2neu < 0){ FeuchteSensor2 = (13.233 * getState("i2c.0.0x76.humidity").val * (Math.pow(10, ((9.5 * getState("i2c.0.0x76.temperature").val) / (237 + getState("i2c.0.0x76.temperature").val))) / (273.16 + getState("i2c.0.0x76.temperature").val))).toFixed(2); //Berechnung Wassergehalt der Luft aussen setState('javascript.0.variables.feuchte', parseFloat(FeuchteSensor2) , true); console.log(FeuchteSensor2); }; }; */
So zu guter Letzt (da habe ich mich ehrlich gesagt noch nicht schlau gemacht). Wo speicher ich am besten Werte die auch nach einem Neustart vorhanden sein sollen? Im Arduino sollte man nur bedingt den EEPROM nutzen, wenn man keine Speicherkarte nutzt, welche Möglichkeiten gibt es beim Pi?
Viele Grüße
Oliver -
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
durch irgendwelche Einträge
die müsste man schon kennen, um helfen zu können
wie ist der Wert von
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:i2c.0.0x76.temperature
-
@olis sagte: Wo speicher ich am besten Werte die auch nach einem Neustart vorhanden sein sollen?
In Datenpunkten. ioBroker sorgt dafür, dass Datenpunkte in einer Datei / Datenbank gesichert werden.
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
In Zeile 16 ist "TemperaturSensor1neu" rot unterstrichen.
Wenn getState("i2c.0.0x76.temperature").val eine Zahl liefert (keinen String), sollte man es ignorieren.
Anmerkung: Man fragt in ioBroker keine Werte per Intervall ab, sondern verwendet Datenpunkt-Trigger on(id, callback).
-
@homoran said in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
durch irgendwelche Einträge
die müsste man schon kennen, um helfen zu können
Im Prinzip sind es Einträge die ich mal mit console.log angelegt habe, aber wieder gelöscht habe. Also ich lege zum Debuggen zB console.log("Starte auslesen)"; an , wenn es funktioniert hat lösche ich das raus und im Log erscheint es trotzdem noch im ursprünglichen Zyklus.
wie ist der Wert von
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:i2c.0.0x76.temperature
Sollte ein Float sein und wird auch als z.B. 17.2 auf der Console angegeben.
-
@paul53 said in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
@olis sagte: Wo speicher ich am besten Werte die auch nach einem Neustart vorhanden sein sollen?
In Datenpunkten. ioBroker sorgt dafür, dass Datenpunkte in einer Datei / Datenbank gesichert werden.
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
In Zeile 16 ist "TemperaturSensor1neu" rot unterstrichen.
Wenn getState("i2c.0.0x76.temperature").val eine Zahl liefert (keinen String), sollte man es ignorieren.
Anmerkung: Man fragt in ioBroker keine Werte per Intervall ab, sondern verwendet Datenpunkt-Trigger on(id, callback).
Ok danke für die Info.
Der Sensor wird über einen Adapter ausgelesen und der liefert alle 60 Sekunden ein Ergebnis. Später will ich evtl. den Intervall ganz weglassen - nur zum ausprobieren ist mir der Ablauf dann zu schnell
Werde ich mir aber auch noch anschauen (wenn der Rest mal läuft). -
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
im Log erscheint es trotzdem noch im ursprünglichen Zyklus.
und was steht dann da genau?
-
@homoran said in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
im Log erscheint es trotzdem noch im ursprünglichen Zyklus.
und was steht dann da genau?
Aktuell zB:
11:42:12.599 info javascript.0 (14688) script.js.aFeuchteSensor1: 17.2die Ausgabe des Wertes ist aber gelöscht bzw. das ganze Script besteht aktuell nur aus der Variablendeklaration.
Nach einem Neustart des ioBroker ist das Problem weg. Was auch komisch ist: sind alle Scripte gestoppt kommt trotzdem noch ein Eintrag ins Log?
-
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
Aktuell zB:
11:42:12.599 info javascript.0 (14688) script.js.aFeuchteSensor1: 17.2das ist aber doch nicht alles?
oder war das der Wert des beobachteten States?@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
Nach einem Neustart des ioBroker ist das Problem weg.
Bleibt das jetzt so?
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
sind alle Scripte gestoppt kommt trotzdem noch ein Eintrag ins Log?
wenn das z.B. in einem nicht gestoppten intervall läuft
-
@homoran said in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
Aktuell zB:
11:42:12.599 info javascript.0 (14688) script.js.aFeuchteSensor1: 17.2das ist aber doch nicht alles?
oder war das der Wert des beobachteten States?@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
Nach einem Neustart des ioBroker ist das Problem weg.
Bleibt das jetzt so?
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
sind alle Scripte gestoppt kommt trotzdem noch ein Eintrag ins Log?
wenn das z.B. in einem nicht gestoppten intervall läuft
So aktueller Stand:
Ich hab den Intervall entfernt und mit ID Callback gearbeitet. Einziger "Nachteil", es wird auch ausgeführt, wenn alle 60 Sekunden der Adapter neue Werte einliest - ohne Änderung. Stört aber nicht und ich weiß man könnte es noch anpassen, aber das kommt dann beim aufhübschen.
Zum Log:
alle Scripte waren gestoppt und es kamen trotzdem neue Werte im Log. Auch wenn die Zeile vorher komplett gelöscht wurde inkl. speichern und Neustart.
ABER nicht reproduzierbar! Ich konnte also auch Werte ausgeben, die Zeile löschen und es war dann auch gelöscht.
Danke für eure Mühe und die hilfreichen Tipps!
Jetzt heißt es auf Hardware wartenViele Grüße
-
@olis sagte in Anfänger Fragen - Log wird geflutet und Fehlererkennung:
Ich konnte also auch Werte ausgeben, die Zeile löschen und es war dann auch gelöscht.
Dann lief da kein aktuelles Intervall, bei den andern ggf. ein mehrfach gestartetes Intervall, ohne dass es vor dem nächsten Aufruf gestoppt war
-
@olis sagte: Einziger "Nachteil", es wird auch ausgeführt, wenn alle 60 Sekunden der Adapter neue Werte einliest - ohne Änderung.
on("i2c.0.0x76.temperature", function(dp) {
triggert nur, wenn sich der Temperaturwert ändert.