Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr

    This topic has been deleted. Only users with topic management privileges can see it.
    • SKB
      SKB Developer Most Active @homecineplexx last edited by

      @homecineplexx Jetzt bin ich interessiert, was ein "Schüttler" ist 😄

      I 1 Reply Last reply Reply Quote 0
      • I
        IOBaer @SKB last edited by

        @SpacerX kannst Du Dein Skript hier zur Verfügung stellen? Das wäre toll.

        Eigentlich ist es schon traurig, welcher Aufwand betrieben werden muss, um so eine einfache Sache wie Energiedatenprotokollierung in Verbindung mit einem Shelly zum Laufen zu bekommen 😉

        S 2 Replies Last reply Reply Quote 0
        • S
          SpacerX @IOBaer last edited by

          @iobaer sagte in Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr:

          kannst Du Dein Skript hier zur Verfügung stellen? Das wäre toll.

          Dazu muss ich erst mal an meinen Rechner kommen. Heute Abend dann.

          1 Reply Last reply Reply Quote 1
          • S
            SpacerX @IOBaer last edited by SpacerX

            @iobaer

            Das sind meine Änderungen am original Script

            * Skript Name:      Shelly-Verbrauch
             * Skript Version:   1.60
             * Erstell-Datum:    08. Oktober 2021 | Update: 20. Juli 2022 | Override Functions by SpacerX 26.09.2022 (Zeile 402)
            

            Ab Zeile 402 sieht mein Skript dann so aus.
            Die Funktionen die einer Änderung bedurften werden einfach überschrieben. So muss ich nicht Quer durch den Code Änderungen vornehmen und bei Updates kann ich schnell anpassen.
            Ich habe die Hinweise mal im Code belassen.

            Zu beachten ist, es so angepasst ist das die Tageswerte um 23:59 Uhr, Wochenwerte am Sonntag um 23:59 Uhr, Monatswerte am letzten Tag des Monats um 23:59 Uhr und Jahreswerte am 31 Dez. um 23:59.

            In Zeile 409 wird dann der Userdatenpunkt definiert.

            /*
             * Override Functions
             * @autor 2022 SpacerX <spacerx@rbe-base.de>
             * Überschreibt Funktionen um Datenpunkte unter 0_userdata.0 zu erstellen
             *
             *** START SpacerX ***/
            // Userdatenpunkt
            var userdir = "0_userdata.0."; // Abschließender Punkt !!! WICHTIG !!!
            /**
             * Letzten des Monats berechnen.
             * @param {Date} oHeute
             */
            function letzterDesMonats(oHeute) {
                return new Date(oHeute.getFullYear(), oHeute.getMonth() + 1, 0).getDate();
            }
            //Override at row 48
            // Shelly Verbrauch aktualisieren - nachts um 23:59 Uhr
            function shelly_vebrauch_tag() {
                // Nochmals das Tagesupdate durchlaufen, damit die restlichen Werte gelesen werden
                shelly_verbrauch_update();
                // Datumsvariable
                var heute = new Date();
                // Heute zu Gestern verschieben. Täglich um 23:59 Uhr
                verschiebe_verbrauch_objekt("heute", "gestern");
                log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
                // aktuelle Woche in letzte Woche verschieben. Am Sonntag um 23:59 Uhr
                if (heute.getDay() === 0) {   /*line changed by spacerx (Sonntag=0, Montag=1)*/
                    verschiebe_verbrauch_objekt("diese_woche", "letzte_woche");
                    log("Shelly Verbrauch: Werte für diese und letzte Woche aktualisiert!");
                }
                // aktueller Monat in letzten Monat verschieben. Am letzten des Monats um 23:59 Uhr
                if (heute.getDate() === letzterDesMonats(heute)) {   /*line changed by spacerx*/
                    verschiebe_verbrauch_objekt("dieser_monat", "letzter_monat");
                    log("Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!");
                }
                // aktuelles Jahr in letztes Jahr verschieben. Am letzten Tag des Jahres um 23:59 Uhr
                if (heute.getDate() === letzterDesMonats(heute) && heute.getMonth() === 11) { /*line changed by spacerx (Jan=0, Dez=11)*/
                    verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
                    log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
                }
            }
            //Override at row 254
            //Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
            function verschiebe_verbrauch_objekt(von, nach) {
                $('state[id=' + userdir + datenpunkt + '*.*.' + von + ']').each(function (id, i) {   /*line changed by spacerx*/
                    // Temporärer Gruppen-Datenpunkt
                    var tmp_dp = id.slice(0, -(von.length));
                    var verbrauch = getState(id).val;
                    if (verbrauch != null) {
                        setState(tmp_dp + nach, verbrauch, true);
                    }
                    // Setze "von" zurück
                    setState(id, 0, true);
                });
            }
            //Override at row 267
            // Funktion um die aktuellen Namen des Shelly abzuholen
            function aktualisiere_namen() {
                if (typeof extendObject === "function") {
                    shellyDpsName.each(function (id, i) {
                        if (existsState(id)) {
                            setState(shelly_DP_Name(id), String(getState(id).val), true);
                            extendObject(shelly_DP_Name_Main(id), {   /*line changed by spacerx*/
                                common: {
                                    name: String(getState(id).val),
                                    desc: String(getState(id).val)
                                },
                                type: "channel"
                            });
                        }
                    });
                }
            }
            //Override at row 377
            function shelly_DP(dp, extended = false) {
                dp = dp.split(".");
                dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                if (extended) {
                    dp = dp + "_Returned.";
                } else {
                    dp = dp + ".";
                }
                return dp;
            }
            //Override at row 387
            function shelly_DP_Name(dp) {
                dp = dp.split(".");
                dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                return dp;
            }
            //Override at row 392
            function shelly_DP_Name_Main(dp) {
                dp = dp.split(".");
                dp = userdir + datenpunkt + dp[2];   /*line changed by spacerx*/
                return dp;
            }
            /*** END SpacerX ***/
            // Erster Start und Initialisierung
            shelly_verbrauch_erster_start();
            // Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
            schedule('*/15 * * * *', shelly_verbrauch_update);
            /*** START Edit SpacerX ***/
            // Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
            //schedule('0 0 * * *', shelly_vebrauch_tag);
            // Nachts um 23:59 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
            schedule('59 23 * * *', shelly_vebrauch_tag);
            /*** END Edit SpacerX ***/
            

            Warum Aktualisierung um 23:59 Uhr und nicht 0:00 Uhr?
            Ganz einfach, in InfluxDB gehört 0:00 Uhr schon zum nächsten Tag.

            I SKB 3 Replies Last reply Reply Quote 2
            • I
              IOBaer @SpacerX last edited by IOBaer

              @spacerx Ganz lieben Dank - ich komme aber überhaupt nicht klar, wo ich nun was einfügen muss. Ich beziehe mich auf die aktuellste Version des ursprünglichen Skripts, abrufbar unter https://www.kreyenborg.koeln/shelly-verbrauchs-historie-fuer-tag-woche-monat-jahr/

              S 1 Reply Last reply Reply Quote 0
              • SKB
                SKB Developer Most Active @SpacerX last edited by

                @spacerx Hier hast Du, denke ich, einen Denkfehler, wenn Du um 23:59 alles "Tagesabschlüsse" fährst.

                Denn die Zeit zwischen 23:59 und 00:00 gehört eben noch zum gleichen Tag und wenn dann um 00:00 gespeichert wird, passt das. Dir würde der Verbrauch von 23:59 bis 00:00 zum nächsten Tag gebucht werden.

                S 1 Reply Last reply Reply Quote 0
                • S
                  SpacerX @IOBaer last edited by

                  @iobaer
                  im originalen Skript alles ab Zeile 402 mit dem Code der oben in CodeTags steht ersetzen.

                  Mit der Prämisse das die Aktualisierungen der Tages-, Wochen-, Monats-, Jahreswerte nach dem oben genannten Hinweis passiert.
                  Natürlich alles ohne Garantie. 😊
                  Alte Werte aus dem Javascript Zweig werden aber nicht übernommen. Fängt alles von vorne an.

                  1 Reply Last reply Reply Quote 0
                  • S
                    SpacerX @SKB last edited by

                    @skb damit hast du völlig recht. ist aber besser als wenn mir 15 Minuten fehlen weil ja alle 15min die Werte aktualisiert werden. Dann würde die Zeit von 23:45 bis 0:00 schon auf den nächsten Tag geschrieben werden. Jetzt mal nicht von deinem Skript sondern von InfluxDB weil ich nur Änderungen logge.

                    SKB 1 Reply Last reply Reply Quote 0
                    • SKB
                      SKB Developer Most Active @SpacerX last edited by SKB

                      @spacerx Also bei den 15 Minuten wird ja 00, 15, 30, 45 und wieder 00 ausgeführt. Somit ist beim 5. Lauf der Rest drin. Es fehlt somit nichts.

                      (Editiert)

                      S 1 Reply Last reply Reply Quote 0
                      • S
                        SpacerX @SKB last edited by

                        @skb es fehlt auch nicht!

                        Ich logge den Datenpunkt Gesamtverbrauch und das nur bei Änderung.
                        Wenn das Skript den Verbrauch der letzten 15 Minuten vor 0:00 Uhr um 0:00Uhr schreibt wird 0:00 in die Datenbank geschrieben. 0:00 Uhr gehört unter InfluxDB nun mal zum nächsten Tag. Das führt sich zwar jeden Tag fort und man merkt es gar nicht richtig weil der Verbrauch um die Uhrzeit nicht so hoch ist.
                        Doch stimmen dann die errechneten Werte vom Skript, die zweifelsohne stimmen, mit denen aus InfluxDB errechneten nicht überein.

                        SKB 1 Reply Last reply Reply Quote 0
                        • SKB
                          SKB Developer Most Active @SpacerX last edited by

                          @spacerx Hier wäre der Datenpunkt "heute" eigentlich passender - so logge ich es. Dann stimmt es meiner Meinung nach.

                          S 1 Reply Last reply Reply Quote 0
                          • S
                            SpacerX @SKB last edited by SpacerX

                            @skb wenn ich heute logge dann muss ich in InfluxDB bei Monatswerten jeden Tag mit add() zusammenzählen. Habe ich den Gesamtstand reicht egal ob Tag, Woche, Monat, oder was weiß ich ein einfaches difference().
                            Ich hab vorher auch immer den Tageswert geloggt. Ich bin da nicht so richtig zurechtgekommen, schon weil ich aus dem Bucket mit Retention 1 Monat in ein anderes Bucket die Daten Downsample.

                            Edit: Bei loggen von heute um 0:00 Uhr steht der Verbrauch dann einen Tag weiter im Bucket.

                            SKB 1 Reply Last reply Reply Quote 0
                            • SKB
                              SKB Developer Most Active @SpacerX last edited by

                              @spacerx Logg' doch, was Du willst 😄

                              S 1 Reply Last reply Reply Quote 1
                              • S
                                SpacerX @SKB last edited by

                                @skb genauso wie es jeder für richtig hält 😁

                                1 Reply Last reply Reply Quote 0
                                • I
                                  IOBaer @SpacerX last edited by IOBaer

                                  @spacerx sorry, alles rot bei mir, Skript läuft nicht.

                                  Wo soll ich was einfügen? Was bedeutet "ab" - soll die originale Zeile 402 stehenbleiben?

                                  b69b75ce-4d72-415c-acb2-851effd93c5a-grafik.png

                                  S 1 Reply Last reply Reply Quote 0
                                  • S
                                    SpacerX @IOBaer last edited by SpacerX

                                    @iobaer oh sorry in meinem Script gibts keine Leerzeilen.
                                    Ich kann gerade nicht an meinen Rechner, Arbeit halt. Kann dir aber anbieten später das ganze Script zu posten. Wenn es trotzdem versuchen möchtest alle Leerzeilen entfernen. Zeile 402 sollte dann am Ende einer Funktion sein. Nach einem }

                                    1 Reply Last reply Reply Quote 1
                                    • S
                                      SpacerX last edited by SpacerX

                                      @iobaer beim original Skript mit Leerzeilen sollte das die Zeile 460 sein.

                                      Vor:

                                      // Erster Start und Initialisierung
                                      shelly_verbrauch_erster_start();
                                      

                                      Also ab da, alles mit dem Code oben überschreiben.

                                      I 1 Reply Last reply Reply Quote 1
                                      • I
                                        IOBaer @SpacerX last edited by IOBaer

                                        @spacerx hat geklappt - besten Dank! Jetzt kann ich testen 😉

                                        Edit: Da passt noch immer was nicht. Vielleicht kannst Du bei Gelegenheit ja mal das vollständige Skript posten.

                                        S 1 Reply Last reply Reply Quote 0
                                        • S
                                          SpacerX @IOBaer last edited by SpacerX

                                          @iobaer zeig mal Fehlermeldung oder was will nicht?

                                          I 1 Reply Last reply Reply Quote 0
                                          • I
                                            IOBaer @SpacerX last edited by

                                            @spacerx said in Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr:

                                            wil

                                            Aktualisiert nichts, Name fehlt ebenso:

                                            39c084f6-96d8-495d-9d1b-cfc6975fca70-grafik.png

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            803
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            24
                                            134
                                            15821
                                            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