NEWS
[gelöst]Fehler in Skripten nach Javaskript Adapter Update auf 2.1.2
-
Seit dem Update des Javascript Adapter heute von 2.0.6 auf 2.1.2 habe ich sehr viele Fehler "error: uncaught exception: Cannot read property 'val' of undefined" und zB "warn: javascript.1 Wrong type of javascript.1.Wunderground.XXXXX.Aktualisierung: undefined Please fix, while deprecated and will not work in next versions." oder "warn: javascript.0 Wrong type of javascript.0.Strom.Dampfgarer.Verbrauch.Tag: string Please fix, while deprecated and will not work in next versions." im Log. Der Adapter startet die betroffenen Instanzen ständig neu.
Da scheint einiges im Adapter geändert worden zu sein. Was ist zu tun?
Gruß
Pix
Edit:
Logfile wächste und wächst
! ````
2016-05-24 02:06:28.897 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Verbrauch.Woche: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:06:28.897 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Kosten.Woche: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:06:28.898 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Verbrauch.Monat: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:06:28.898 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Kosten.Monat: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:06:28.898 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Verbrauch.Quartal: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:06:28.899 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Kosten.Quartal: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:06:28.899 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Verbrauch.Jahr: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:06:28.900 - warn: javascript.0 Wrong type of javascript.0.Strom.Kühlschrank.Kosten.Jahr: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.012 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Verbrauch.Tag: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.013 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Kosten.Tag: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.013 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Verbrauch.Woche: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.013 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Kosten.Woche: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.014 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Verbrauch.Monat: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.014 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Kosten.Monat: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.014 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Verbrauch.Quartal: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.015 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Kosten.Quartal: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.015 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Verbrauch.Jahr: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:07:49.015 - warn: javascript.0 Wrong type of javascript.0.Strom.Waschmaschine.Kosten.Jahr: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.774 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Verbrauch.Tag: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.774 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Kosten.Tag: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.775 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Verbrauch.Woche: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.775 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Kosten.Woche: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.775 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Verbrauch.Monat: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.777 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Kosten.Monat: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.777 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Verbrauch.Quartal: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.777 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Kosten.Quartal: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.778 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Verbrauch.Jahr: string Please fix, while deprecated and will not work in next versions.
2016-05-24 02:08:29.778 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Kosten.Jahr: string Please fix, while deprecated and will not work in next versions.Dabei sind die angesprochenen States gar nicht vom Typ string, sondern number! :cry:
-
Guten Morgen Pix,
siehe http://forum.iobroker.net/viewtopic.php … 203#p26184
Offiziell gibt es noch nichts, aber eine Lösung von paul53.
Gruß
Michael
-
@pix:2016-05-24 02:08:29.778 - warn: javascript.0 Wrong type of javascript.0.Strom.Venta.Kosten.Jahr: string Please fix, while deprecated and will not work in next versions.
Dabei sind die angesprochenen States gar nicht vom Typ string, sondern number!
`
Wie sieht dein Kode an dieser Stelle aus?Wenn typeof "string" sagt, dann ist es ein String
-
Mit setState(id, val) werden String-Werte an Datenpunkte vom Typ 'number' (Zahl) übergeben. Das soll zukünftig vermieden werden.
Wenn die Originale als String vorliegen, sollte
Wert = parseFloat(Wert); // oder Wert = parseInt(Wert);
darauf angewendet werden. Macht man das nicht, hat man ein Problem, wenn man mit den zurück gelesenen Werten rechnen will.
-
Aus Deinem Verbrauchs-Skript:
setState(instanz + pfad + geraet + '.Verbrauch.Tag', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3)); // Verbrauch an diesem Tag in kWh
toFixed(3) erzeugt einen String !
Mit createState wurde aber ein Datenpunkt mit type 'number' angelegt !
Sollte also korrigiert werden:
setState(instanz + pfad + geraet + '.Verbrauch.Tag', parseFloat((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3))); // Verbrauch an diesem Tag in kWh
-
Danke für die Erläuterungen…
habe bei meinen Skripten nun auch einiges zu tun :shock:
-
Jetzt habe ich das verstanden. Das heißt im Klartext, dass man in Zukunft sehr genau evtl. Fehler abfangen muss. Gerade beim Parsen passiert da schnell ein Fehler. Ich habe es gerade mal geschafft 4 Skripte zu überarbeiten. 70! kommen noch. Da hab ih erstmal zu tun.
Für einige Skripte, die hier veröffentlicht worden sind trifft das zu. Gerade habe ich am Skript für Spritpreise gearbeitet. Es folgen weitere.
Gruß
Pix
-
Aus Deinem Verbrauchs-Skript:
setState(instanz + pfad + geraet + '.Verbrauch.Tag', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3)); // Verbrauch an diesem Tag in kWh
toFixed(3) erzeugt einen String !
Mit createState wurde aber ein Datenpunkt mit type 'number' angelegt !
Sollte also korrigiert werden:
setState(instanz + pfad + geraet + '.Verbrauch.Tag', parseFloat((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3))); // Verbrauch an diesem Tag in kWh ```` `
Danke, das war aufschlussreich. Habs angepasst
! ````
function berechneVerbrauchKosten(geraet, zaehler, preis) { // bei jedem eingehenden Wert pro Gerät
// Tag [Verbrauchskosten = (Zähler_ist - Zähler_Tagesbeginn) * Preis ] --- zaehler muss immer größer sein als Tages, Wochen, etc.-Wert
setState(instanz + pfad + geraet + '.Verbrauch.Tag', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3) )); // Verbrauch an diesem Tag in kWh
setState(instanz + pfad + geraet + '.Kosten.Tag', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3) )); // Kosten an diesem Tag in €
// Woche
setState(instanz + pfad + geraet + '.Verbrauch.Woche', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3) ));
setState(instanz + pfad + geraet + '.Kosten.Woche', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3) ));
// Monat
setState(instanz + pfad + geraet + '.Verbrauch.Monat', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3) ));
setState(instanz + pfad + geraet + '.Kosten.Monat', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3) ));
// Quartal
setState(instanz + pfad + geraet + '.Verbrauch.Quartal', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3) ));
setState(instanz + pfad + geraet + '.Kosten.Quartal', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3) ));
// Jahr
setState(instanz + pfad + geraet + '.Verbrauch.Jahr', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3) ));
setState(instanz + pfad + geraet + '.Kosten.Jahr', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3) ));
if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert', 'info');
}Lasse das jetzt erstmal ein paar Tage laufen, bevor ich hier im Forum die neue Version poste. Gruß Pix
-
@pix:Das heißt im Klartext, dass man in Zukunft sehr genau evtl. Fehler abfangen muss. `
Wenn man sauber programmieren will, sollte man an den Datenpunkt-Typ denken.Als quick and dirty Programmierer kann man auch Datenpunkte vom Typ 'mixed' mittels der Kurzform von createState(name, init) erzeugen, was ich allerdings nicht empfehle.
-
Ich habe schon immer versucht, in meinen Scripts die Parameter zu setzen.
createState(pfad + geraet + '.Zaehlerstand.Jahr', 0, {name: 'Zählerstand Jahresbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
Allerdings lasse ich read und write meistens weg (stehen immer auf true). Ebenso fehlt manchmal description.
Wenn jetzt also eine Zeichenkette in einen Number-Datenpunkt geschrieben werden soll, gibt es einen Fehler. Richtig? Gilt das auch für Adapter?
Gruß
Pix
-
@pix:Wenn jetzt also eine Zeichenkette in einen Number-Datenpunkt geschrieben werden soll, gibt es einen Fehler. Richtig? `
Ja.
@pix:Gilt das auch für Adapter? `
Bisher ist die Typprüfung nur im JS-Adapter implementiert.Meiner Meinung nach sollte sie künftig für alle Adapter erfolgen. Ist aber vielleicht nicht die Meinung von Bluefox :?:
Oder schwierig zu realisieren ?