NEWS
Wenn Wochentag X dann Wert von Objekt Y
-
Hallo zusammen,
ich nutze den SourceAnalytics Adapter zur Aufzeichnung meiner Stromverbräuche.
Der Adapter erstellt Tageswerte im Format: Montag / Dienstag / Mittwoch usw..
Vorher hatte ich das Stromzähler Script benutzt und meinen VIS View mit dessen Logik genutzt.
Dort werden die Werte relativ gespeichert als: Gestern / Vorgestern / Vor 3 Tagen usw...Ich würde jetzt gerne ein Script erstellen, welches in Abhängigkeit des heutigen Tages, den Wert vom jeweiligen Objekt abholt.
Also WENN heute Sonntag DANN lese Wert von Objekt 06_Samstag und schreibe diesen in die Variable Gestern
WENN heute Sonntag DANN lese Wert von Objekt 05_Freitag und schreibe diesen in die Variable Vorgestern
usw.Wie setze ich dies am besten um?
Gruß
miwi -
@miwi said in Wenn Wochentag X dann Wert von Objekt Y:
Wie setze ich dies am besten um?
Vielleicht gibt das Beispiel (TypeScript) eine Idee:
let theDay = new Date("March 14, 2023 01:15:00"); getYesterdaysWeekday(theDay); theDay = new Date("March 18, 2023 01:15:00"); getYesterdaysWeekday(theDay); let toDay = new Date(); getYesterdaysWeekday(theDay); function getYesterdaysWeekday(todaysDate: Date) : number { let todaysWeekday:number = todaysDate.getDay(); let yesterdaysWeekday:number = todaysWeekday-1; if (todaysWeekday === 0) { yesterdaysWeekday = 6; } console.log("yesterday=" + yesterdaysWeekday); return yesterdaysWeekday; }
Oder als Blockly:
Mit diesem Script:
let todaysWeekday = new Date().getDay(); let yesterdaysWeekday = todaysWeekday-1; if (todaysWeekday === 0) { yesterdaysWeekday = 6; } return yesterdaysWeekday;
Beachte: Sonntag hat die Nummer "0" und zählt bis Samstag, zur Nummer "6"
-
@miwi sagte: WENN heute Sonntag DANN lese Wert von Objekt 06_Samstag und schreibe diesen in die Variable Gestern
Vorschlag:
setState(idVor7, getState(idVor6).val, true); // usw. setState(idVor2, getState(idGestern).val, true); let jetzt = new Date(); let gestern = jetzt.setDate(jetzt.getDate() - 1); let wd = new Date(gestern).getDay(); if(wd == 0) wd = 7; let idSrc = 'xyz.0' + wd + '_' + formatDate(gestern, "WW", "de"); setState(idGestern, getState(idSrc).val, true);
-
Danke für die Hilfe.
Habe das jetzt wie paul53 vorgeschlagen hat umgesetzt.
Ist zwar kein wenn dann, aber übergibt mir jeden Abend um 23:58 den Wert des Vortags in die nächst ältere Variable.schedule('{"time":{"exactTime":true,"start":"23:59"},"period":{"days":1}}', async function () { setState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_2_Tagen"/*Vor 2 Tagen*/, getState("sourceanalytix.0.0_userdata__0__Energie__Stromverbrauch_Gesamt.currentYear.consumed.01_previousDay").val, true); setState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_3_Tagen"/*Vor 3 Tagen*/, getState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_2_Tagen").val, true); setState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_4_Tagen"/*Vor 4 Tagen*/, getState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_3_Tagen").val, true); setState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_5_Tagen"/*Vor 5 Tagen*/, getState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_4_Tagen").val, true); setState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_6_Tagen"/*Vor 6 Tagen*/, getState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_5_Tagen").val, true); setState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_7_Tagen"/*Vor 7 Tagen*/, getState("0_userdata.0.Energie.Stromverbrauch__Gesamt.Vor_6_Tagen").val, true); });
Gleiches mache ich jetzt noch für Wochen, Monate und Quartale und danach das ganze 7 mal für die Verschiedenen Verbräuche und Einspeisungen.
Danke für die Hilfe,
miwi
-
@miwi
Mach es besser in umgekehrter Reihenfolge: Ältesten Wert zuerst. -
@paul53 said in Wenn Wochentag X dann Wert von Objekt Y:
@miwi
Mach es besser in umgekehrter Reihenfolge: Ältesten Wert zuerst.Stimmt sonst wird bei Abarbeitung immer der erste Wert übernommen (Dominoeffekt).
-
@miwi Hallo miwi,
klappt das Script bei dir einwandfrei bzw. zeigt die richtigen Werte an ? Bei mir kommt es immer mal wieder vor, dass er einen Tag verschluckt und nicht den Wert von z. B. vorgestern übernimmt.