NEWS
[Gelöst] Max-Werte speichern
-
Frage an die JS-Schreiber…..
Ich möchte gern von einen HmIP-Produkt (Wetterstation) die Max Windgescheindigkeit für die letzten 7Tage im VIS darstellen.
Kann da jemand nen kleines Script schreiben? Danke.
Grüsse André
Gesendet vom Mobiltelefon .... Rechtschreibfehler ggf. durch 'T9'
-
Kann da jemand nen kleines Script schreiben? `
const idWind = '...'; // Datenpunkt-ID Windgeschwindigkeit const idMax = 'Wind.Max_Geschwindigkeit'; const idMaxWoche = 'Wind.Wochenmaximum'; var max = getState(idWind).val; if(getObject('javascript.' + instance + '.' + idMax)) max = getState(idMax).val; createState(idMax, max, { type: 'number', unit: 'km/h', min: 0 }); createState(idMaxWoche, max, { type: 'number', unit: 'km/h', min: 0 }); on(idWind, function(dp) { if(dp.state.val > max) { max = dp.state.val; setState(idMax, max, true); } }); schedule('0 0 * * 0', function() { // Sonntags um Mitternacht setState(idMaxWoche, max, true); max = getState(idWind).val; setState(idMax, max, true); });
-
Danke - ich teste das, wenn unser Zwerg im Bett ist.
[emoji106]
Gesendet vom Mobiltelefon …. Rechtschreibfehler ggf. durch 'T9'
-
Feedback - hat funktioniert…
Hab’s mir noch um die Tagestemperatur erweitert.
Gesendet vom Mobiltelefon .... Rechtschreibfehler ggf. durch 'T9'
-
Kann da jemand nen kleines Script schreiben? `
const idWind = '...'; // Datenpunkt-ID Windgeschwindigkeit const idMax = 'Wind.Max_Geschwindigkeit'; const idMaxWoche = 'Wind.Wochenmaximum'; var max = getState(idWind).val; if(getObject('javascript.' + instance + '.' + idMax)) max = getState(idMax).val; createState(idMax, max, { type: 'number', unit: 'km/h', min: 0 }); createState(idMaxWoche, max, { type: 'number', unit: 'km/h', min: 0 }); on(idWind, function(dp) { if(dp.state.val > max) { max = dp.state.val; setState(idMax, max, true); } }); schedule('0 0 * * 0', function() { // Sonntags um Mitternacht setState(idMaxWoche, max, true); max = getState(idWind).val; setState(idMax, max, true); }); ```` `
Hallo Paul53,
Habe das Script und ein paar Tage am laufen - wie mir nun auffiel, werden die Max-Werte das aktuellen Tages nicht gespeichert. Die vom Vortag dafür schon.
Könntest du dir das ggf nochmal ansehen?
Danke & Grüsse
Andre
Gesendet vom Mobiltelefon …. Rechtschreibfehler ggf. durch 'T9'
-
werden die Max-Werte das aktuellen Tages nicht gespeichert. Die vom Vortag dafür schon. `
Das Skript ermittelt das Maximum über eine Woche.
@al-79:Ich möchte gern von einen HmIP-Produkt (Wetterstation) die Max Windgescheindigkeit für die letzten 7Tage im VIS darstellen. `
Wenn Du 7 Tageswerte möchtest, sind auch 7 Datenpunkte erforderlich und es muss täglich in einem anderen Datenpunkt gespeichert werden. -
Oh kannst mal sehen…. hab ich voll überlesen. Kannst mir nur nen Tipp geben, wie ich mehrere Datenpunkte via JS Script anlegen/Fülle
Danke
Gesendet vom Mobiltelefon .... Rechtschreibfehler ggf. durch 'T9'
-
wie ich mehrere Datenpunkte via JS Script anlegen/Fülle `
Etwa so:`const idWind = '...'; // Datenpunkt-ID Windgeschwindigkeit const idMax = 'Wind.Max_Geschwindigkeit'; const days = ['So','Mo','Di','Mi','Do','Fr','Sa']; const maxDay = 'Wind.Tagesmaximum_'; var max = getState(idWind).val; if(getObject('javascript.' + instance + '.' + idMax)) max = getState(idMax).val; createState(idMax, max, { type: 'number', unit: 'km/h', min: 0 }); for(var i = 0; i < 7; i++) { var idMaxDay = maxDay + days[i]; createState(idMaxDay, max, { type: 'number', unit: 'km/h', min: 0 }); } on(idWind, function(dp) { if(dp.state.val > max) { max = dp.state.val; setState(idMax, max, true); } }); schedule('59 23 * * *', function() { // täglich 1 Minute vor Mitternacht var wd = new Date().getDay(); var idMaxDay = maxDay + days[wd]; setState(idMaxDay, max, true); max = getState(idWind).val; setState(idMax, max, true); });`[/i]
-
Danke - ich teste das wenn der Zwerg im Bett ist. Schönen Rest-Sonntag!
Grüsse André
Gesendet vom Mobiltelefon …. Rechtschreibfehler ggf. durch 'T9'
-
Hallo Paul!
Ich habe das Script in leicht abgeänderter Funktion ( Stromverbrauch) heute versucht.
Aber in Zeile 27 bekomm ich einen Fehler.
19:14:50.049 warn javascript.0 (594) at Object.<anonymous> (script.js.Steckdosen.Strom_Max:27:7)
Kannst du mal drüberschaun?
const idWind = 'sourceanalytix.0.javascript__0__Volkszaehler__AKTUELLER_VERBRAUCH.consumption.01_current_day'; // Datenpunkt-ID Windgeschwindigkeit https://forum.iobroker.net/viewtopic.php?t=13149 const idMax = 'Strom.Max'; const days = ['So','Mo','Di','Mi','Do','Fr','Sa']; const maxDay = 'Strom.Tagesmaximum_'; var max = getState(idWind).val; if(getObject('javascript.' + instance + '.' + idMax)) max = getState(idMax).val; createState(idMax, max, { type: 'number', unit: 'Watt', min: 0 }); for(var i = 0; i < 7; i++) { var idMaxDay = maxDay + days[i]; createState(idMaxDay, max, { type: 'number', unit: 'Watt', min: 0 }); } on(idWind, function(dp) { if(dp.state.val > max) { max = dp.state.val; setState(idMax, max, true); } }); schedule('59 23 * * *', function() { // täglich 1 Minute vor Mitternacht var wd = new Date().getDay(); var idMaxDay = maxDay + days[wd]; setState(idMaxDay, max, true); max = getState(idWind).val; setState(idMax, max, true); });
-
@Negalein sagte:
at Object.<anonymous>
Wurde der Datenpunkt "javascript.0.Strom.Max" nicht erstellt ?
-
@paul53 sagte in [Gelöst] Max-Werte speichern:
Wurde der Datenpunkt "javascript.0.Strom.Max" nicht erstellt ?
Doch, die wurden alle automatisch angelegt.
-
-
@paul53 sagte in [Gelöst] Max-Werte speichern:
Dann dürfte die Warnung nicht erscheinen.
hab nochmal alle DP gelöscht, Script neu erstellt, gestartet.
Keine Warn zu sehen.
In die Objekte gewechselt um zu kontrollieren.
DP wurden erstellt und auch aktualisiert.Wieder zurück zum Script.
Warn erscheint wieder im Sekundentakt. -
@Negalein sagte:
Warn erscheint wieder im Sekundentakt.
Welche Version des JS-Adapters ?
Ich kann es bei mir (JS 4.6.22) nicht nachvollziehen:Es wird jede Sekunde der Wert im Datenpunkt ohne Warnung hochgezählt.
-
@paul53 sagte in [Gelöst] Max-Werte speichern:
Welche Version des JS-Adapters ?
JS-Adapter: 4.6.22
JS-Controller: 3.1.6
Node.js: 10.17.0Es wird jede Sekunde der Wert im Datenpunkt ohne Warnung hochgezählt.
hochzählen funktioniert komischerweise. Nur eben mit der laufenden Warnung.
Edit: hab das Script gerade ohne irgendwelche Änderung wieder gestartet. Schaut derzeit gut aus. Werde es beobachten.
-
hab heute wieder nachgeschaut.
Es ist komisch.
sourceanalytix.0.javascript__0__Volkszaehler__AKTUELLER_VERBRAUCH.consumption.01_current_day
wird laufend aktualisiert, aberjavascript.0.Strom.Max
steht seit heute 8:56 Uhr.
Der Wert ist komisch. Ist genau bei 9999 stehen geblieben.Hab jetzt wieder das Script pausiert, die DP
javascript.0.Strom
gelöscht, Script gestartet.DP wurden wieder automatisch angelegt.
Dann wieder das Problem.
11:34:12.078 warn javascript.0 (597) at Object.<anonymous> (script.js.Steckdosen.Strom:27:7) 11:34:14.046 warn javascript.0 (597) at Object.<anonymous> (script.js.Steckdosen.Strom:27:7) 11:34:16.579 warn javascript.0 (597) at Object.<anonymous> (script.js.Steckdosen.Strom:27:7) 11:34:18.112 warn javascript.0 (597) at Object.<anonymous> (script.js.Steckdosen.Strom:27:7)
Der DP
javascript.0.Strom.Max
wird 1-2x vom Script vonsourceanalytix.0.javascript__0__Volkszaehler__AKTUELLER_VERBRAUCH.consumption.01_current_day
aktualisiert und steht dann.Script wieder gestoppt, neu gestartet.
DP wird wieder aktualisiert.
Warnungen bleiben. -
@Negalein sagte:
DP wird wieder aktualisiert.
Warnungen bleiben.Das liegt sicher nicht am Script. Da ist etwas anderes faul ?
-
@paul53 sagte in [Gelöst] Max-Werte speichern:
Das liegt sicher nicht am Script. Da ist etwas anderes faul ?
hab gerade noch das im Log entdeckt.
javascript.0 2020-08-17 12:05:02.073 warn (597) at process.topLevelDomainCallback (domain.js:126:23) javascript.0 2020-08-17 12:05:02.072 warn (597) at processImmediate (timers.js:658:5) javascript.0 2020-08-17 12:05:02.072 warn (597) at tryOnImmediate (timers.js:676:5) javascript.0 2020-08-17 12:05:02.072 warn (597) at runCallback (timers.js:705:18) javascript.0 2020-08-17 12:05:02.072 warn (597) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37) javascript.0 2020-08-17 12:05:02.072 warn (597) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:457:25) javascript.0 2020-08-17 12:05:02.072 warn (597) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1042:38) javascript.0 2020-08-17 12:05:02.072 warn (597) at Object.<anonymous> (script.js.Steckdosen.Strom:27:7) javascript.0 2020-08-17 12:05:02.071 warn (597) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1345:20) javascript.0 2020-08-17 12:05:02.070 warn (597) You are assigning a string to the state "javascript.0.Strom.Max" which expects a number. Please fix your code to use a number or change the state type to string. This warning might become an err javascript.0 2020-08-17 12:05:00.717 warn (597) at process.topLevelDomainCallback (domain.js:126:23) javascript.0 2020-08-17 12:05:00.713 warn (597) at processImmediate (timers.js:658:5) javascript.0 2020-08-17 12:05:00.713 warn (597) at tryOnImmediate (timers.js:676:5) javascript.0 2020-08-17 12:05:00.713 warn (597) at runCallback (timers.js:705:18) javascript.0 2020-08-17 12:05:00.712 warn (597) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37) javascript.0 2020-08-17 12:05:00.712 warn (597) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:457:25) javascript.0 2020-08-17 12:05:00.712 warn (597) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1042:38) javascript.0 2020-08-17 12:05:00.712 warn (597) at Object.<anonymous> (script.js.Steckdosen.Strom:27:7) javascript.0 2020-08-17 12:05:00.712 warn (597) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1345:20) javascript.0 2020-08-17 12:05:00.707 warn (597) You are assigning a string to the state "javascript.0.Strom.Max" which expects a number. Please fix your code to use a number or change the state type to string. This warning might become an err
Vielleicht hilft das?
Soll ich
javascript.0.Strom.Max
auf String ändern? -
@Negalein sagte:
Soll ich javascript.0.Strom.Maxauf String ändern?
Nein, dann funktioniert die Max-Ermittlung nicht. Liefert der Datenpunkt 'sourceanalytix.0.javascript__0__Volkszaehler__AKTUELLER_VERBRAUCH.consumption.01_current_day' keine Zahl ? Dann muss der Wert aus dem Datenpunkt jedesmal mit parseFloat() in eine Zahl gewandelt werden.
var max = parseFloat(getState(idWind).val); if(existsState('javascript.' + instance + '.' + idMax)) max = getState(idMax).val; else createState(idMax, max, {
und
on(idWind, function(dp) { if(parseFloat(dp.state.val) > max) { max = parseFloat(dp.state.val); setState(idMax, max, true); } });