NEWS
[gelöst] Fehlermeldung JS: Ref...or: typ is not defined
-
Hallo,
ich steuere ein paar Lampen über JavaScript.
Dazu habe ich mir ein Array angelegt, wo ich die entsprechenden Daten zur Prüfung, ob sie aktiv geschaltet werden, ob eine Mail geschickt werden soll usw. hinterlegt.Das funktioniert für ein paar Lampen.
Jetzt habe ich das Array um ein Objekt erweitert:schalter[++i] = new Object(); schalter[i]["Pruefpunkt"] = "alias.0.OG.Essszimmer.LichtFenster.Schalter.Switch"; schalter[i]["Aktivpunkt"] = "0_userdata.0.Automatisierungsschalter.Aktiv.Esszimmer_Fenster"; schalter[i]["Signalisierung"] = "0_userdata.0.Automatisierungsschalter.EMail.Esszimmer_Fenster"; schalter[i]["Typ"] = "boolean"; schalter[i]["Ein"] = true; schalter[i]["Aus"] = false;
... und bekomme bei der Ausführung 3 Fehlermeldungen:
11:40:00.005 error javascript.0 (1478) at Object.<anonymous> (script.js.Steuerung.Licht:123:23) 11:41:00.049 error javascript.0 (1478) script.js.Steuerung.Licht: ReferenceError: typ is not defined 11:41:00.050 error javascript.0 (1478) at Object.<anonymous> (script.js.Steuerung.Licht:123:23)
Die Stelle in Zeile 123 nutzt den Pruefpunkt, aber diesen habe ich aus der Liste hinzugefügt (Die 3 s in Essszimmer sind ein Tippfehler im Alias, den ich noch nicht korrigiert habe!), der ist also vorhanden, vom Typ Boolean (Ist ein Shelly Plug S) und lässt sich so über einen Button auch schalten.
Da so auch andere Shellys, jedoch noch kein Plug, geschaltet werden und ich den Code-Block kopiert und angepasst habe, bin ich davon ausgeggangen, dass es funktionieren sollte.Lange Rede, ....: Die Meldung "ReferenceError: typ ist not defined" bringt mich aktuell nicht auf die richtige Idee, wo ich suchen soll.
Kann mich jemanda auf die richtige Spur bringen?Danke!
-
@andreas-5 sagte: typ ist not defined
Vermutlich fehlt ein "e": "type"?
-
@paul53 sagte in Fehlermeldung JavaScript: ReferenceError: typ is not defined:
@andreas-5 sagte: typ ist not defined
Vermutlich fehlt ein "e": "type"?
Das kann ich mir nicht vorstellen. Das Wort "Typ" kommt nur an einer Stelle in dem Objekt vor, ist vorne groß geschrieben und da definiere ich das selber. Auch bei den anderen 8 Objekten, die auf die gleiche Weise behandelt werden, ist das "Typ" geschrieben.
Hier das Object direkt davor, das funktioniert:
schalter[++i] = new Object(); schalter[i]["Pruefpunkt"] = "shelly.0.SHSW-25#10521CF12090#1.Relay1.Switch"; schalter[i]["Aktivpunkt"] = "0_userdata.0.Automatisierungsschalter.Aktiv.Licht_Balkon_Strahler"; schalter[i]["Signalisierung"] = "0_userdata.0.Automatisierungsschalter.EMail.Licht_Balkon_Strahler"; schalter[i]["Typ"] = "boolean"; schalter[i]["Ein"] = true; schalter[i]["Aus"] = false;
Ich kann da den entscheidenden Unterschied nicht feststellen, zudem ich genau dieses Objekt kopiert hatte und dann lediglich die 3 Datenpunkte ersetzt. Damit habe ich auch Tippfehler weitestgehend ausgeschlossen.
Den einzigen Unterschied, den ich aktuell bei diesen beiden sehe, ist, dass der eine Datenpunkt direkt der vom Shelly ist und der andere ein Alias.
Aber Aliase habe ich im gleichen Script weiter vorne auch verwendet!Mmmmhh [Am Kinn kratz].
Hat vielleicht noch jemand eine Idee, wo ich noch suchen kann?Edit: Da ich es gerade geschrieben hatte, habe ich dann doch einmal den Alias gegen den Direkten DP vom Shelly-Adapter ausgetauscht.
Ergebnis:
19:53:00.005 error javascript.0 (1478) script.js.Steuerung.Licht: ReferenceError: typ is not defined 19:53:00.006 error javascript.0 (1478) at Object.<anonymous> (script.js.Steuerung.Licht:127:23) 19:54:00.048 error javascript.0 (1478) script.js.Steuerung.Licht: ReferenceError: typ is not defined 19:54:00.049 error javascript.0 (1478) at Object.<anonymous> (script.js.Steuerung.Licht:127:23)
Die andere Zeilennummer kommt daher, das ich die Auskommentierung des Block nicht gelöscht habe, sondern nur den Kommentar vorher geschlossen und hinterher wieder geöffnet habe.
-
@andreas-5 sagte: Die andere Zeilennummer
Was steht in Zeile 127?
-
@paul53 sagte in Fehlermeldung JavaScript: ReferenceError: typ is not defined:
@andreas-5 sagte: Die andere Zeilennummer
Was steht in Zeile 127?
Danke, das war der richtige Hinweis!!!
Ich weiß nicht warum, vorher war es ja Zeile 123 und da hatte ich nachgesehen, da standcreateState(merkerpfad + schalter[i]["Pruefpunkt"], "", ueberschreiben, {
Da habe ich hingeguckt und nicht weiter.
Das mit der Auskommentierung sollte zwar eigentlich eine Verschiebung mit sich bringen, kann aber sein, dass ich auch irgendwo Leerzeilen gelöscht habe.Auf jeden Fall ist es jetzt so, dass in Zeile 127 tatsächlich typ zu finden ist!
Hintergrund:
Bis vor Kurzem hatte ich das noch nicht in Objekten organisiert, sondern, da das Skript ja mit der Zeit gewachsen ist, zuerst in einem Array, dann waren es mehrere und da u.a. auch das Array typ.Dann habe ich das auf das mehrdimensionale Array umgestellt und alles lief wunderbar.
Nachdem ich dann das zusätzliche Object in das Array eingefügt hatte, kam der Fehler und da kam meine Verwirrung, weil ich die Zeile betrachtet und für gut befunden habe und nicht mehr den Rest angeschaut habe.
Der ganze Block sieht so aus:for (var i = 0; i < schalter.length; i++) { if (!existsState(merkerpfad + schalter[i]["Pruefpunkt"])) { createState(merkerpfad + schalter[i]["Pruefpunkt"], "", ueberschreiben, { name: schalter[i]["Pruefpunkt"], desc: "Letzter Zustand", type: typ[i], role: "value", unit: "" });
Da hätte ich auch drauf kommen können, dass da der neue Merker-DP angelegt werden soll und es gar nicht um die Zeile 123 (hier 5) ging. Der Fehler war da auch schon in Zeile 127 (hier 8)!
Deshalb funktionierten die anderen Schalter, da die Merker-DP schon von vorher existierten und damit der Teil nicht genutzt wurde.Kurz geändert:
for (var i = 0; i < schalter.length; i++) { if (!existsState(merkerpfad + schalter[i]["Pruefpunkt"])) { createState(merkerpfad + schalter[i]["Pruefpunkt"], "", ueberschreiben, { name: schalter[i]["Pruefpunkt"], desc: "Letzter Zustand", type: schalter[i]["Typ"], role: "value", unit: "" });
und schon fuktioniert es!
Peinlich, peinlich!!
Danke!!!