NEWS
[Frage] geparster Gesamt-Laufzeitwert umwandeln in täglichen Laufzeitwert für Flot
-
Hi paul,
heute morgen steht folgendes in den DPs:
Es wird also bei allen DPs derselbe Wert wie die Gesamtlaufzeit angezeigt.
Stimmt bei der Berechnung etwas nicht, oder muss ich noch einen Tag warten, weil es ja den Wert für gestern heute noch nicht gibt sondern erst morgen…? (hab ich das jetzt richtig gesagt ? :mrgreen:)
und wieso sind die beiden Werte rot ? Was hat das zu bedeuten ?
edit: was ich ebenfalls gerade noch gemerkt habe:
scheinbar funktioniert der parser adapter nicht mehr seit ich die beiden DPs angelegt habe:
es kommt folgende FM im Log:
host.SERVER 2017-05-23 07:38:25.987 info instance system.adapter.parser.0 started with pid 18472 host.SERVER 2017-05-23 07:37:55.956 info Restart adapter system.adapter.parser.0 because enabled host.SERVER 2017-05-23 07:37:55.956 error instance system.adapter.parser.0 terminated with code 6 (uncaught exception) parser.0 2017-05-23 07:37:54.987 error TypeError: Cannot read property 'match' of undefined at readLink (C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:224:13) at poll (C:\Program Files\ioBroker\node_modules\iobroke parser.0 2017-05-23 07:37:54.987 error uncaught exception: Cannot read property 'match' of undefined parser.0 2017-05-23 07:37:53.706 info starting. Version 0.2.1 in C:/Program Files/ioBroker/node_modules/iobroker.parser, node: v4.5.0 host.SERVER 2017-05-23 07:37:50.566 info instance system.adapter.parser.0 started with pid 9840 host.SERVER 2017-05-23 07:37:19.925 info Restart adapter system.adapter.parser.0 because enabled host.SERVER 2017-05-23 07:37:19.925 error instance system.adapter.parser.0 terminated with code 6 (uncaught exception) parser.0 2017-05-23 07:37:18.878 error at Manager.ondecoded (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\manager.js:332:8) parser.0 2017-05-23 07:37:18.878 error at Manager.Emitter.emit (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\node_modules\component-emitter\index.js:133:20) parser.0 2017-05-23 07:37:18.878 error at Manager. (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\node_modules\component-bind\index.js:21:15) parser.0 2017-05-23 07:37:18.878 error at Socket.onpacket (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\socket.js:236:12) parser.0 2017-05-23 07:37:18.878 error at Socket.onack (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\node_modules\socket.io-client\lib\socket.js:312:9) parser.0 2017-05-23 07:37:18.878 error at Socket. (C:\Program Files\ioBroker\node_modules\iobroker.js-controller\lib\states\statesInMemClient.js:150:27) parser.0 2017-05-23 07:37:18.878 error at C:\Program Files\ioBroker\node_modules\iobroker.js-controller\lib\adapter.js:3864:61 parser.0 2017-05-23 07:37:18.878 error at C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:300:21 parser.0 2017-05-23 07:37:18.878 error at poll (C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:270:13) parser.0 2017-05-23 07:37:18.878 error at readLink (C:\Program Files\ioBroker\node_modules\iobroker.parser\main.js:224:13) parser.0 2017-05-23 07:37:18.878 error TypeError: Cannot read property 'match' of undefined parser.0 2017-05-23 07:37:18.878 error uncaught exception: Cannot read property 'match' of undefined parser.0 2017-05-23 07:37:18.191 info starting. Version 0.2.1 in C:/Program Files/ioBroker/node_modules/iobroker.parser, node: v4.5.0 host.SERVER 2017-05-23 07:37:16.941 info instance system.adapter.parser.0 started with pid 8744 host.SERVER 2017-05-23 07:36:46.925 info Restart adapter system.adapter.parser.0 because enabled
wenn ich die beiden DPs lösche, läuft der Parser Adapter wieder …
jemand eine idee ?
-
oder muss ich noch einen Tag warten, weil es ja den Wert für gestern heute noch nicht gibt sondern erst morgen…? `
Ja. Oder Du startest die Funktion mal zwischendurch am Tag, indem Du die Funktion am Ende des Skripts aufrufst... schedule('0 0 * * *', calcTag); // täglich um Mitternacht if(!getState(idGestern).val) calcTag(); // bei Script start, wenn noch kein Wert im Datenpunkt
und wieso sind die beiden Werte rot ? Was hat das zu bedeuten ? `
Das ist nur die Darstellung im Reiter "Objekte", dass state.ack = false (nicht bestätigt). Wenn es stört, müssen die setState() ergänzt werden:setState(idTag, gesamt - gestern, true); setState(idGestern, gesamt, true);
…wenn ich die beiden DPs lösche, läuft der Parser Adapter wieder ... `
Vielleicht will der Parser-Adapter Datenpunkte löschen, die nicht in seiner Konfiguration angegeben sind ? Da die Datenpunkte quasi unter einem Datenpunkt erzeugt wurden, kann es Probleme geben, die zur Fehlfunktion führen. Das sollte man auf jeden Fall vermeiden. Erzeuge die beiden zusätzlichen Datenpunkte vom Typ 'Zahl' unter javascript.0; dann gibt es keine Probleme. Namen: 'Laufzeit_Heizen.Gestern' und 'Laufzeit_Heizen.Tag'.var idLaufzeit = 'parser.0.Laufzeit_Heizen'; // Datenpunkt-ID vorhanden var idGestern = 'javascript.0.Laufzeit_Heizen.Gestern'; // Datenpunkt-ID für neuen DP mit Gesamtlaufzeit um Mitternacht var idTag = 'javascript.0.Laufzeit_Heizen.Tag'; // Datenpunkt-ID für neuen DP mit täglicher Laufzeit
-
Hi Paul,
vielen Dank für deine Hilfe.
Ich hab die Änderungen soweit durchgeführt.
Der Parser Adapter hängt sich jetzt nicht mehr auf
Es erscheint allerdings beim Aufruf des Scripts folgende Warning im Log:
javascript.0 2017-05-23 21:26:00.515 warn Wrong type of javascript.0.Laufzeit_Heizen.Gestern: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-23 21:25:14.501 info script.js.Umrechnung_Laufzeit_WW: registered 0 subscriptions and 1 schedule javascript.0 2017-05-23 21:25:14.501 info Start javascript script.js.Umrechnung_Laufzeit_WW javascript.0 2017-05-23 21:25:14.485 info Stop script script.js.Umrechnung_Laufzeit_WW javascript.0 2017-05-23 21:23:00.580 warn Wrong type of javascript.0.Laufzeit_Heizen.Gestern: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-23 21:22:43.580 info script.js.Umrechnung_Laufzeit_WW: registered 0 subscriptions and 1 schedule javascript.0 2017-05-23 21:22:43.580 warn Wrong type of javascript.0.Laufzeit_Heizen.Gestern: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-23 21:22:43.533 info Start javascript script.js.Umrechnung_Laufzeit_WW javascript.0 2017-05-23 21:22:41.815 info Stop script script.js.Umrechnung_Laufzeit_WW
Die DPs Gestern und Tag bleiben bei 0h…
-
Der Wert im Datenpunkt "parser.0.Laufzeit_Heizen" ist offenbar ein String. Dann ergänze das Einlesen des Wertes um parseFloat().
var gesamt = parseFloat(getState(idLaufzeit).val);
Tausche bitte den Wert null bei max gegen eine vernüftige Zahl aus (1000000)
-
Hi Paul,
ich hab alles soweit angepasst.
Er zeigt mir jetzt beim Gestern DP denselben Wert wie beim Laufzeit_Heizen DP.
Beim Tag DP zeigt er mir 0h.
Ich nehme mal an das liegt noch daran weil der Gestern Wert noch nicht vorhanden ist…
Ich warte mal auf morgen, ob sichs dann einpendelt ...(wenn ich den schedule Wert auf die aktuelle Uhrzeit ändere, erscheinen ebenfalls keine anderen Werte, auch im Log erscheint kein Scriptaufruf...)
Vielen Dank jedenfalls nochmal für deine tolle Hilfe!
Beste Grüße
-
Er zeigt mir jetzt beim Gestern DP denselben Wert wie beim Laufzeit_Heizen DP.
Beim Tag DP zeigt er mir 0h. `
Das ist immer so, wenn die Heizung den ganzen Tag nicht gelaufen ist. -
Stimmt, das macht Sinn :mrgreen:
Ich hätte das Ganze jetzt auf für WW gemacht:
var idLaufzeit = 'parser.0.Laufzeit_WW'; // Datenpunkt-ID vorhanden var idGestern = 'javascript.0.Laufzeit_WW.Gestern'; // Datenpunkt-ID für neuen DP mit Gesamtlaufzeit um Mitternacht var idTag = 'javascript.0.Laufzeit_WW.Tag'; // Datenpunkt-ID für neuen DP mit täglicher Laufzeit function calcTag() { var gesamt = parseFloat(getState(idLaufzeit).val); var gestern = getState(idGestern).val; setState(idTag, gesamt - gestern,true); setState(idGestern, gesamt,true); } schedule('0 0 * * *', calcTag); // täglich um Mitternacht '55 22 * * *''0 0 * * *' if(!getState(idGestern).val) calcTag(); // bei Script start, wenn noch kein Wert im Datenpunkt
Hier bleiben beide Werte bei 0h und einer davon ist wieder rot:
Muss ich hier noch was ändern ?
-
Muss ich hier noch was ändern ? `
Sieht gut aus, wenn die ID des Datenpunktes "parser.0.Laufzeit_WW" stimmt.Allerdings müsste der Wert für Gestern anders aussehen. Gibt es eine Fehlermeldung im Log ?
-
Hi Paul,
ich hab den kompletten iobroker host neugestartet. Danach war der Gestern Wert da und es wird auch nichts mehr rot dargestellt.
Es wird trotzdem nicht der richtige Gestern Wert angezeigt, sondern immer nur der Gesamt Wert.
In Folge dessen bleibt auch der Tag Wert immer bei 0h.
Hier läuft noch was nicht richtig rund …
-
Update: anscheinend hat das Script noch einen Tag gebraucht… jetzt passt alles und die Werte werden alle korrekt angezeigt
Vielen Dank nochmal für deine Hilfe Paul.
Eine Frage noch: Gibt es sowas ähnliches wie einen Statistik Adapter ?
Ich möchte gerne die einzelnen Laufzeit Werte, Stromverbrauchs Werte usw. aufsummiert vom Jahr 2017 oder vom Winter 2016(gewisse Zeitspanne) o.ä. anzeigen/abrufen können ?
Wie könnte ich das noch umsetzen ?