Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Wenn Wochentag X dann Wert von Objekt Y

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Wenn Wochentag X dann Wert von Objekt Y

    This topic has been deleted. Only users with topic management privileges can see it.
    • miwi
      miwi last edited by

      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

      G paul53 2 Replies Last reply Reply Quote 0
      • G
        GombersIOB @miwi last edited by GombersIOB

        @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:
        cb8f948a-2e81-4425-89ba-81e79ca8442b-image.png

        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"

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @miwi last edited by paul53

          @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);
          
          1 Reply Last reply Reply Quote 0
          • miwi
            miwi last edited by

            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

            paul53 B 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @miwi last edited by paul53

              @miwi
              Mach es besser in umgekehrter Reihenfolge: Ältesten Wert zuerst.

              miwi 1 Reply Last reply Reply Quote 0
              • miwi
                miwi @paul53 last edited by

                @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).

                1 Reply Last reply Reply Quote 0
                • B
                  Baerny @miwi last edited by

                  @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.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  883
                  Online

                  31.7k
                  Users

                  79.8k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  462
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo