NEWS
Namen eines Datenpunktes als Variabel
-
Ich möchte einen Datenpunkt auswerten der variabel ist.
Sein Name ändert sich aber jeden Tag, da er dessen Nummer im Namen enthält:fronius-solarweb.0.6731b5c1-b08c-4c01-8091-8f7820166668.day.EnergyProductionTotal.values.19
Wenn ich jetzt die Variable vom Vortag auswerten will, wie muss ich das im Skript schreiben?
So ähnlich stelle ich mir das vor:
javascript.0.scriptEnabled.common.SmartHome.froniusPvErzeugungGestern= "fronius-solarweb.0.6731b5c1-b08c-4c01-8091-8f7820166668.day.EnergyProductionTotal.values."+tag((heute)-1) -
@tom41solar sagte: Vortag auswerten will, wie muss ich das im Skript schreiben?
const path = 'fronius-solarweb.0.6731b5c1-b08c-4c01-8091-8f7820166668.day.EnergyProductionTotal.values.'; const idGestern = path + new Date(Date.now() - 86400000).getDate();
-
@tom41solar Macht der einen "Monats-Rundlauf"?
Es werden also jetzt im November Datenpunkte von 1 .... 30 angelegt, und im Dezember werden sukzessive in 1...30 neue Werte geschrieben, und dann am 31. auch der Datenpunkt für Monate mit 31 Tagen angelegt?Wenn man es hemdsärmelig machen würde, könnte man ggfs. einfach von 1....31 durchscannen, bis man einen Datenpunkt findet, der aktualisiert wurde ...
Oder 31 Callbacks anlegen mit "Wurde geändert" als Trigger ....
-
@paul53 besten Dank.
Es klappt schon fast.Der Name ist super:
fronius-solarweb.0.6731b5c1-b08c-4c01-8091-8f7820166668.day.EnergyProductionTotal.values.19Das Skript schreibt er mir aber den Namen der Variabel in den Datenpunkt und nicht den Wert:
Dies ist mein Skript:
const path = 'fronius-solarweb.0.6731b5c1-b08c-4c01-8091-8f7820166668.day.EnergyProductionTotal.values.';
const idGestern = path + new Date(Date.now() - 86400000).getDate()
setState("javascript.0.scriptEnabled.common.SmartHome.froniusPvErzeugungGestern"/froniusPvErzeugungGestern/, idGestern); -
@tom41solar sagte: javascript.0.scriptEnabled.common
Dorthin schreibt man keine eigenen Daten!!
const path = 'fronius-solarweb.0.6731b5c1-b08c-4c01-8091-8f7820166668.day.EnergyProductionTotal.values.'; const idGestern = path + new Date(Date.now() - 86400000).getDate(); const idTag = '0_userdata.0.PV.Erzeugung.gestern'; if(existsState(idTag)) setState(idTag, getState(idGestern).val, true); // Skriptstart else createState(idTag, getState(idGestern).val, {type: 'number', unit: 'Wh', name: 'PV-Erzeugung gestern', role: 'value.energy'}); schedule('3 3 * * *', function() { // täglich um 3:03 Uhr setState(idTag, getState(idGestern).val, true); });
-
@paul53 absolut perfekt !
Besten Dank.Ich habe lange gebraucht bis ich das mit den 86400000 ms = 1 Tag verstanden habe und dann das Programm entsprechend für andere Tage anpassen konnte. Deshalb der späte Dank.