NEWS
anonymous warning – finde das Problem nicht
-
Hello,
ich bekomme bei meinem Script die Warnung:
16:03:19.589 info javascript.0 (8354) script.js.Production.Dachfenster: Rolladen javascript.0.Velux.og_bad. Klick auf STOP 16:03:19.602 warn javascript.0 (8354) at moveVelux (script.js.Production.Dachfenster:288:9) 16:03:19.602 warn javascript.0 (8354) at Object.<anonymous> (script.js.Production.Dachfenster:390:9)
an der Stelle steht
if(action == "stop"){ setState(idTarget+"lastaction_time", time); console.log("Rolladen "+idTarget+" Klick auf STOP"); setState(getState(idTarget+"stop").val, "true"); // Zeile 288 }
Logisch, hab ich bestimmt einen Fehler beim Anlegen des State gemacht...
createState("javascript.0.Velux."+name+".stop", "", { "name": "stop", "role": "", "type": "string", "desc": "Speichert den Pfad zum Objekt für die Aktion: stop.", "def": "", "read": true, "write": true }); // Inhalt: sonoff.0.DVES_F4D7C4.POWER17
Aber der type ist korrekt als string angelegt...
Folgend auch nochmal mein komplettes JavaScript:
const og_empore = "javascript.0.Velux.og_empore."; const og_balkon = "javascript.0.Velux.og_balkon."; const dg_duschefenster = "javascript.0.Velux.dg_duschefenster."; const og_bad = "javascript.0.Velux.og_bad."; const dg_treppe = "javascript.0.Velux.dg_treppe."; const dg_bett = "javascript.0.Velux.dg_bett."; const dg_bad = "javascript.0.Velux.dg_bad."; const dg_dusche = "javascript.0.Velux.dg_dusche."; const dr_o = "/vis.0/main/dg_rolladen_open.svg"; const dr_m = "/vis.0/main/dg_rolladen_middle.svg"; const dr_c = "/vis.0/main/dg_rolladen_close.svg"; const wr_o = "/vis.0/main/fenster_rolladen_open.svg"; const wr_m = "/vis.0/main/fenster_rolladen_middle.svg"; const wr_c = "/vis.0/main/fenster_rolladen_close.svg"; const w_o = "/vis.0/main/dg_window_open.svg"; const w_m = "/vis.0/main/dg_window_middle.svg"; const w_c = "/vis.0/main/dg_window_close.svg"; function createRolladen_DISABLED(name){ createState("javascript.0.Velux."+name+".position", "", { "name": "position", "role": "", "type": "number", "desc": "Position des Rolladen in % (0% ist offen).", "unit": "%", "min": 0, "max": 100, "def": 0, "read": true, "write": true }); console.log("Objekt close für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".target_position", "", { "name": "target_position", "role": "", "type": "number", "desc": "Wunsch-Position des Rolladen in % (0% ist offen).", "unit": "%", "min": 0, "max": 100, "def": 0, "read": true, "write": true }); console.log("Objekt target_position für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".runtime", 0, { "name": "runtime", "role": "", "type": "number", "desc": "Gibt in Sekunden an wie lange der Rolladen für einen kompletten Lauf benötigt ", "unit": "s", "min": 0, "max": 1000, "def": 15, "read": true, "write": true }); console.log("Objekt runtime für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".icon", "", { "name": "icon", "role": "", "type": "string", "desc": "Speichert den Icon-Namen zur Position.", "def": "open", "read": true, "write": true }); console.log("Objekt icon für Rolladen "+name+" erstellt."); // Hier muss noch geprüft werden. createState("javascript.0.Velux."+name+".deviceType", "", { "name": "deviceType", "role": "", "type": "state", "desc": "Speichert den Icon-Namen zur Position.", "def": "0", "read": true, "write": true, "states": { "0": "DachRolladen", "1": "FensterRolladen", "2": "Fenster" } }); console.log("Objekt deviceType für Device "+name+" erstellt."); createState("javascript.0.Velux."+name+".open", "", { "name": "open", "role": "", "type": "string", "desc": "Speichert den Pfad zum Objekt für die Aktion: open.", "def": "", "read": true, "write": true }); console.log("Objekt open für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".stop", "", { "name": "stop", "role": "", "type": "string", "desc": "Speichert den Pfad zum Objekt für die Aktion: stop.", "def": "", "read": true, "write": true }); console.log("Objekt stop für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".close", "", { "name": "close", "role": "", "type": "string", "desc": "Speichert den Pfad zum Objekt für die Aktion: close.", "def": "", "read": true, "write": true }); console.log("Objekt close für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".action", "", { "name": "action", "role": "", "type": "string", "desc": "Befehl an den Rolladen.", "def": false, "read": true, "write": true }); console.log("Objekt action für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".lastaction", "", { "name": "lastaction", "role": "", "type": "string", "desc": "Letzter Befehl an den Rolladen.", "def": "", "read": true, "write": true }); console.log("Objekt lastaction für Rolladen "+name+" erstellt."); createState("javascript.0.Velux."+name+".lastaction_time", "", { "name": "lastaction_time", "role": "", "type": "string", "desc": "Zeitpunkt der letzten Änderung.", "def": "", "read": true, "write": true }); console.log("Objekt lastaction_time für Rolladen "+name+" erstellt."); } //createRolladen("og_empore"); //createRolladen("og_balkon"); //createRolladen("dg_duschefenster"); //createRolladen("og_bad"); //createRolladen("dg_treppe"); //createRolladen("dg_bett"); //createRolladen("dg_bad"); //createRolladen("dg_dusche"); /* og_empore open: sonoff.0.DVES_F4D7C4.POWER1 stop: sonoff.0.DVES_F4D7C4.POWER2 close: sonoff.0.DVES_F4D7C4.POWER3 og_balkon open: sonoff.0.DVES_F4D7C4.POWER4 stop: sonoff.0.DVES_F4D7C4.POWER5 close: sonoff.0.DVES_F4D7C4.POWER6 dg_duschefenster open: sonoff.0.DVES_F4D7C4.POWER7 stop: sonoff.0.DVES_F4D7C4.POWER8 close: sonoff.0.DVES_F4D7C4.POWER9 og_bad open: sonoff.0.DVES_F4D7C4.POWER10 stop: sonoff.0.DVES_F4D7C4.POWER11 close: sonoff.0.DVES_F4D7C4.POWER12 og_treppe open: sonoff.0.DVES_F4D7C4.POWER13 stop: sonoff.0.DVES_F4D7C4.POWER14 close: sonoff.0.DVES_F4D7C4.POWER15 dg_bett open: sonoff.0.DVES_F4D7C4.POWER16 stop: sonoff.0.DVES_F4D7C4.POWER17 close: sonoff.0.DVES_F4D7C4.POWER18 dg_bad open: sonoff.0.DVES_F4D7C4.POWER19 stop: sonoff.0.DVES_F4D7C4.POWER20 close: sonoff.0.DVES_F4D7C4.POWER21 dg_dusche open: sonoff.0.DVES_F4D7C4.POWER22 stop: sonoff.0.DVES_F4D7C4.POWER23 close: sonoff.0.DVES_F4D7C4.POWER24 */ function moveVelux(idTarget, action, target_position){ var deviceType = getState(idTarget+"deviceType").val; if(deviceType == 0){ // DachRolladen var device_open = dr_o; var device_middle = dr_m; var device_close = dr_c; } if(deviceType == 1){ // FensterRolladen var device_open = wr_o; var device_middle = wr_m; var device_close = wr_c; } if(deviceType == 2){ // Fenster var device_open = w_o; var device_middle = w_m; var device_close = w_c; } var oldPosition = getState(idTarget+"position").val; // Percent per Second berechnen var pps = 100 / getState(idTarget+"runtime").val; var seconds; // display the current time var dateTime = new Date(); var time = dateTime.toLocaleTimeString(); //console.log(time); if(target_position == ""){ // Es wurde keine Ziel-Position geliefert wir gehen einfach in den modus open/stop/close setState(idTarget+"lastaction", action); // console.log(action + " für das Target "+idTarget+action); //console.log("Aktuelle Pos.: "+getState(idTarget+"position").val); if(action == "open"){ // Berechne die Laufzeit bis zum Ziel von 0% seconds = oldPosition / pps; console.log("Das Ding braucht "+seconds+" Sekunden von der aktuellen Pos. bis 0%."); } if(action == "close"){ // Berechne die Laufzeit bis zum Ziel von 100% seconds = (100 - oldPosition) / pps; console.log("Das Ding braucht "+seconds+" Sekunden von der aktuellen Pos. bis 100%."); } if(action == "stop"){ seconds = 0; } }else{ // Es wurde eine Ziel-Position übergeben wir ignorieren alles andere. console.log("Ziel-Position erkannt: "+target_position); if(oldPosition >= target_position){ // Rolladen muss Richtung 0% fahren seconds = (oldPosition - target_position) / pps; var action = "open"; }else{ // Rolladen muss Richtung 100% fahren seconds = (target_position - oldPosition) / pps; var action = "close"; } } if(action == "open"){ setState(idTarget+"lastaction_time", time); console.log("Rolladen "+idTarget+" Klick auf OPEN"); setState(getState(idTarget+"open").val, "true"); } if(action == "close"){ setState(idTarget+"lastaction_time", time); console.log("Rolladen "+idTarget+" Klick auf CLOSE"); setState(getState(idTarget+"close").val, true); } if(action == "stop"){ setState(idTarget+"lastaction_time", time); console.log("Rolladen "+idTarget+" Klick auf STOP"); setState(getState(idTarget+"stop").val, "true"); } seconds = Math.round(seconds); var i = 0; var newPosition = oldPosition; if(action == "open" || action == "close"){ console.log("Wir starten von Pos. " + newPosition + " und gehen in den Interval."); let interval = setInterval(function(){ console.log("Noch "+i+"/"+seconds+" Sekunden. newPosition: "+newPosition); i++; if(action == "open"){ newPosition = newPosition - pps; } if(action == "close"){ newPosition = newPosition + pps; } if(i >= seconds || getState(idTarget+"lastaction").val == "stop"){ console.log("####### ENDE #######"); console.log("newPosition für "+idTarget+"position = "+Math.round(newPosition)); if(target_position != ""){ console.log("Rolladen "+idTarget+" Klick auf STOP"); setState(getState(idTarget+"stop").val, "true"); console.log("Bewegung wegen erreichter target_position gestoppt."); } clearInterval(interval); } if(newPosition >100 || newPosition < 0){ // Irgendwas ist schief gegangen, daher Intervall stoppen. clearInterval(interval); } setState(idTarget+"position", Math.round(newPosition)); if(newPosition <= 10){ setState(idTarget+"icon",device_open); } if(newPosition > 10 && newPosition < 90 ){ setState(idTarget+"icon",device_middle); } if(newPosition >= 90){ setState(idTarget+"icon",device_close); } }, 1000); } } // Beobachte alle Velux Geräte auf Wunsch-Ziel-Position-Änderungen on(og_bad+"target_position", function(obj) { var target_position = getState(og_bad+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(og_bad, "", target_position); }); on(og_empore+"target_position", function(obj) { var target_position = getState(og_empore+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(og_empore, "", target_position); }); on(og_balkon+"target_position", function(obj) { var target_position = getState(og_balkon+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(og_balkon, "", target_position); }); on(dg_treppe+"target_position", function(obj) { var target_position = getState(dg_treppe+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(dg_treppe, "", target_position); }); on(dg_bett+"target_position", function(obj) { var target_position = getState(dg_bett+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(dg_bett, "", target_position); }); on(dg_bad+"target_position", function(obj) { var target_position = getState(dg_bad+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(dg_bad, "", target_position); }); on(dg_dusche+"target_position", function(obj) { var target_position = getState(dg_dusche+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(dg_dusche, "", target_position); }); on(dg_duschefenster+"target_position", function(obj) { var target_position = getState(dg_duschefenster+"target_position").val; wait(500); console.log("Wir gehen in den TargetModus mit: "+target_position); moveVelux(dg_duschefenster, "", target_position); }); // Beobachte alle Velux Geräte auf Wunsch-Action-Änderungen on(og_bad+"action", function(obj) { var action = getState(og_bad+"action").val; setState(og_bad+"action", ""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(og_bad, action,""); } }); on(og_empore+"action", function(obj) { var action = getState(og_empore+"action").val; setState(og_empore+"action", ""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(og_empore, action,""); } }); on(og_balkon+"action", function(obj) { var action = getState(og_balkon+"action").val; setState(og_balkon+"action", ""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(og_balkon, action,""); } }); on(dg_treppe+"action", function(obj) { var action = getState(dg_treppe+"action").val; setState(dg_treppe+"action", ""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(dg_treppe, action, ""); } }); on(dg_bett+"action", function(obj) { var action = getState(dg_bett+"action").val; setState(dg_bett+"action", ""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(dg_bett, action,""); } }); on(dg_bad+"action", function(obj) { var action = getState(dg_bad+"action").val; setState(dg_bad+"action", ""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(dg_bad, action,""); } }); on(dg_dusche+"action", function(obj) { var action = getState(dg_dusche+"action").val; setState(dg_dusche+"action",""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(dg_dusche, action,""); } }); on(dg_duschefenster+"action", function(obj) { var action = getState(dg_duschefenster+"action").val; setState(dg_duschefenster+"action", ""); wait(500); if( action == "open" || action == "close" || action == "stop" ){ console.log("moveVelux mit der action: "+action); moveVelux(dg_duschefenster, action,""); } });
Würde mich freuen, wenn jemand einen Tipp für mich hat.
VG!
-
@tristan sagte in anonymous warning – finde das Problem nicht:
ich bekomme bei meinem Script die Warnung:
bitte alles zeigen!
da fehlt die Zeile mit dem Error.
Die muss davor gewesen sein -
@tristan sagte: setState(getState(idTarget+"stop").val, "true");
Man muss die ID übergeben, nicht den eingelesenen Wert:
setState(idTarget+"stop", "true");
oder ist der Inhalt des Datenpunktes die ID?
-
Also die "ganze" Zeile der Warnung lautet:
16:03:19.589 info javascript.0 (8354) script.js.Production.Dachfenster: Rolladen javascript.0.Velux.og_bad. Klick auf STOP 16:03:19.602 warn javascript.0 (8354) at moveVelux (script.js.Production.Dachfenster:288:9) 16:03:19.602 warn javascript.0 (8354) at Object.<anonymous> (script.js.Production.Dachfenster:390:9)
Im on() habe ich den Aufruf der function
moveVelux(og_bad, action,"");
Ich übergebe die const der Ziel-ID (og_bad) mit dem String "javascript.0.Velux.og_bad." und die var "action" in der der String "stop" steht. Das dritte Argument ist hier leer.
In meiner function
function moveVelux(idTarget, action, target_position){ //... // andere Sachen //... if(action == "stop"){ setState(idTarget+"lastaction_time", time); console.log("Rolladen "+idTarget+" Klick auf STOP"); setState(getState(idTarget+"stop").val, "true"); }
Ausformuliert wird daraus getState("javascript.0.Velux.og_bad.stop").val was mir sonoff.0.DVES_F4D7C4.POWER11 liefert, das auf true gesetzt wird – was auch funktioniert. Aber irgendwo scheint ihm ein Format nicht zu passen, oder so.
Am Ende macht die Zeile folgendes:
setState("sonoff.0.DVES_F4D7C4.POWER11", true);
VG!
-
@tristan sagte: Ausformuliert wird daraus getState("javascript.0.Velux.og_bad.stop").val
at Object.<anonymous>
deutet darauf hin, dass der Datenpunkt "javascript.0.Velux.og_bad.stop" keinen Zustand hat.
-
@paul53 sagte in anonymous warning – finde das Problem nicht:
deutet darauf hin, dass der Datenpunkt "javascript.0.Velux.og_bad.stop" keinen Zustand hat oder nicht existiert.
@tristan
Deswegen wollte ich ja den vorausgehenden ERROR sehen , und nicht nur die WARN -
Ah! Habs gefunden! Einen vorangegangenen ERROR gab es ja nicht. Das Problem war auch nicht der Datenpunkt javascript.0.Velux.og_bad.stop – dort habe ich auch dauernd gesucht.
Mein "Problem" war der Datenpunkt des sonoff, der in og_bad.stop abgelegt war. Der war auf Logikwert gestellt und dann sollte ich natürlich auch ein true oder false senden und nicht ein "true" oder "false".
setState("sonoff.0.DVES_F4D7C4.POWER11", true); // LÄUFT ohne WARN
setState("sonoff.0.DVES_F4D7C4.POWER11", "true"); // LÄUFT mit WARN
Der Wald und die Bäume...
VG!