NEWS
Präsenzmelder nach Tageszeit mit bestimmter Helligkeit
-
@hinsen2k
Noch etwas optimiert: -
und übernommen. Danke
Ich bekomme ich log vom Blockly nun noch folgende Meldungen
Kannst Du dir das erklären?
Wenn ich mir den Timer in der VIS anschaue, läuft der recht unregelmäßig. Mein Bauchgefühl sagt mir, dass da ggf. die Zeiten nicht einer echt Sekunde entsprechen. Kann man das ggf. auch über die Datum und Zeit Objekte lösen? Ist das dann genauer?
-
@hinsen2k sagte in Präsenzmelder nach Tageszeit mit bestimmter Helligkeit:
Kannst Du dir das erklären?
was steht denn in der Zeile 46 an Position 7 (js-Ansicht)
-
-
@hinsen2k keine Screenshots, da kann man nicht kopieren.
Aber da werden leere "" gesendet -
@hinsen2k sagte: Wenn ich mir den Timer in der VIS anschaue, läuft der recht unregelmäßig.
Gibt es vielleicht zwei Variablen Intervall (oberste Zeile im Javascript-Code)?
@hinsen2k sagte in Präsenzmelder nach Tageszeit mit bestimmter Helligkeit:
folgende Meldungen
Gibt es im Tab "Log" weitere Informationen?
-
var s, zaehler, iDbri, HUE_command, Praesenzmelder_PRESNECE_DETECTION_STATE, idLicht_Einschaltdauer, idLicht_letzte_Einschaltdauer, HUE_command_Wert, Intervall; // Beschreibe diese Funktion … async function sec2string(s) { return formatDate(1000 * s, 'h:mm:ss'); } setState("0_userdata.0.Timer.Timer"/*Timer*/, 0, true); zaehler = 0; iDbri = 'hue.1.Raum_Badezimmer.bri'; HUE_command = 'hue.1.Raum_Badezimmer.command'; Praesenzmelder_PRESNECE_DETECTION_STATE = 'hm-rpc.0.000C1BE9A24E5C.1.PRESENCE_DETECTION_STATE'; idLicht_Einschaltdauer = '0_userdata.0.Timer.Einschaltdauer'; idLicht_letzte_Einschaltdauer = '0_userdata.0.Timer.letzte_Einschaltdauer'; on({id: Praesenzmelder_PRESNECE_DETECTION_STATE, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "")) { if (compareTime(getAstroDate("sunriseEnd", undefined, 0), getAstroDate("sunsetStart", undefined, 0), "between", null)) { HUE_command_Wert = '{"on":true,"bri":254,"transitiontime":100}'; } else if (compareTime(getAstroDate("dawn", undefined, 0), getAstroDate("nauticalDusk", undefined, 0), "between", null)) { HUE_command_Wert = '{"on":true,"bri":120,"transitiontime":100}'; } else { HUE_command_Wert = '{"on":true,"bri":10,"transitiontime":50}'; } } else { HUE_command_Wert = '{"on":false,"bri":0,"transitiontime":100}'; } if (HUE_command_Wert != getState(HUE_command).val) { setStateDelayed(HUE_command, HUE_command_Wert, false, parseInt(((0) || "").toString(), 10), false); } }); on({id: iDbri, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") == 0) { (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})(); setStateDelayed(idLicht_letzte_Einschaltdauer, (await sec2string(zaehler)), true, parseInt(((0) || "").toString(), 10), false); setStateDelayed(idLicht_Einschaltdauer, '0:00:00', true, parseInt(((0) || "").toString(), 10), false); zaehler = 0; } else if (!Intervall) { Intervall = setInterval(async function () { zaehler = (typeof zaehler == 'number' ? zaehler : 0) + 1; setStateDelayed(idLicht_Einschaltdauer, (await sec2string(zaehler)), true, parseInt(((0) || "").toString(), 10), false); setStateDelayed('0_userdata.0.Timer.Timer', (await sec2string(zaehler)), true, parseInt(((0) || "").toString(), 10), false); }, 1000); } });
@paul53
ich sehe eigentlich nicht mehrere intervalle?!Hier das andere Log:
javascript.0 2021-09-19 18:55:18.997 info State value to set for "0_userdata.0.Timer.Timer" has to be type "number" but received type "string" javascript.0 2021-09-19 18:55:18.996 info State value to set for "0_userdata.0.Timer.Einschaltdauer" has to be type "number" but received type "string" javascript.0 2021-09-19 18:55:18.992 warn at Object.<anonymous> (script.js.Badezimmer.Beleuchtungs-Automatik_V2:46:7) javascript.0 2021-09-19 18:55:18.992 warn at setStateDelayed (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1483:25) javascript.0 2021-09-19 18:55:18.992 warn at Object.setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1439:20) javascript.0 2021-09-19 18:55:18.991 warn You are assigning a string to the state "0_userdata.0.Timer.Timer" which expects a number. Please fix your code to use a number or change the state type to string. This warning might become an error in future versions. javascript.0 2021-09-19 18:55:18.991 warn at Object.<anonymous> (script.js.Badezimmer.Beleuchtungs-Automatik_V2:45:7) javascript.0 2021-09-19 18:55:18.991 warn at setStateDelayed (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1483:25) javascript.0 2021-09-19 18:55:18.991 warn at Object.setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1439:20) javascript.0 2021-09-19 18:55:18.990 warn You are assigning a string to the state "0_userdata.0.Timer.Einschaltdauer" which expects a number. Please fix your code to use a number or change the state type to string. This warning might become an error in future versions.
-
@hinsen2k
Hier nochmal komplett (läuft bei mir ohne Fehler)Das hier muß angepasst werden so wie Du es haben willst.
-
@hinsen2k sagte: Hier das andere Log:
Ändere den Datenpunkt-Typ von "0_userdata.0.Timer.Timer" und "0_userdata.0.Timer.Einschaltdauer" von "number" in "string".
Im Skript kann ich keinen Fehler finden.
-
-