Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Periodischen Verbrauch ermitteln und darstellen.

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Periodischen Verbrauch ermitteln und darstellen.

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

      Hallo,

      ich möchte gern den monatlichen Stromverbrauch in der Form eines Balkendiagramms darstellen.
      Dazu habe ich 2 Datenpunkte angelegt:

      • Monatsstart, dort wird immer am 1. des Monats um 0.03 Uhr der aktuelle Zählerstand eingelesen
      • Monatsverbrauch, dort wird am 1. des Monats um 0.02 Uhr die Differenz aus aktuellem Zählerstand minus Monatsstart eingetragen. Der Datenpunkt wird geloggt (für History aktiviert).

      Den Monatsverbrauch könnte ich nun in VIS darstellen, weil jeder Monat eine Zeile bekommt.
      Aber 2 Probleme:
      Es sind ja eigentlich die Werte des Vormonats, die am Monatsersten eingetragen werden. Weil ich finde keinen Zeittrigger "Monatsletzter um 23.58 Uhr"
      Ich sehe das Ergebnis erst nach Abschluss des Monats. Ich möchte aber gern zwischendurch auch sehen, wie der Balken wächst. Würde ich das jeden Tag berechnen (dieses Zeitraster genügt), würde aber jeden Tag eine Zeile in der Tabelle sein und in Flot entsteht eine Art Sägezahn.

      Ich komme aus dem Dilemma nicht raus, ist mein ganzer Ansatz falsch?

      Homoran Asgothian 2 Replies Last reply Reply Quote -1
      • Homoran
        Homoran Global Moderator Administrators @docadams last edited by Homoran

        @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

        Weil ich finde keinen Zeittrigger "Monatsletzter um 23.58 Uhr"

        23:58 Triggern (da speichere ich sowieso die Tageswerte) und den folgenden Trick anwenden:
        Monatsletzter02.png

        Prüfen ob in xxx msec (die Anzahl sollten dann sicher der nächste Tag sein; um 23:58 dann eher 200000) der Tag im Datum auf 1 steht.

        paul53 1 Reply Last reply Reply Quote 1
        • paul53
          paul53 @Homoran last edited by

          @homoran sagte: 23:58 Triggern (da speichere ich sowieso die Tageswerte) und den folgenden Trick anwenden:

          Um 23:58 Uhr reichen aber 20 s nicht aus, um auf den nächsten Tag zu kommen.

          Homoran 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @paul53 last edited by Homoran

            @paul53 sagte in Periodischen Verbrauch ermitteln und darstellen.:

            Um 23:58 Uhr reichen aber 20 s nicht aus, um auf den nächsten Tag zu kommen.

            Das ist richtig, mein Skript triggert ja auch um 23:59:45 😉

            deswegen schrieb ich

            @homoran sagte in Periodischen Verbrauch ermitteln und darstellen.:

            um 23:58 dann eher 200000

            obwohl auch 120000 gereicht hätten

            1 Reply Last reply Reply Quote 0
            • docadams
              docadams last edited by

              Vielen Dank, das Problem mit dem Eintrag für den aktuellen Monat ist gelöst.

              Das zweite Problem ist, dass ich ja im Prinzip jeden Tag, wenn ich aktualisiere, ja auch ein neuer Eintrag entsteht, und nicht der eine Wert pro Monat überschrieben wird. Solange, bis ein neuer Monat wieder bei 0 beginnt.
              Mein Ziel ist, solche Balken zu bekommen, wie sie bei der Funksteckdose von AVM entstehen.

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @docadams last edited by Homoran

                @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                Das zweite Problem ist, dass ich ja im Prinzip jeden Tag, wenn ich aktualisiere, ja auch ein neuer Eintrag entsteht,

                ?????

                Wenn du das meinst, was ich denke, dass du meinen könntest....
                Stromdaten03.png

                Ich benutze je Zeiteinheit drei Datenpunkte.
                In einen wird bis zum nächsten Zeitabschnitt kontinuierlich kumuliert, am Abschnittsende dann in den DP für die Summenbalken übertragen

                docadams 1 Reply Last reply Reply Quote 1
                • docadams
                  docadams @Homoran last edited by

                  Ich habe das jetzt so gelöst (bild ich mir ein 😉 )
                  autostrom2.jpg
                  Also auch mit einem dritten Datenpunkt, der jeden Tag einen Wert erhält. Mal sehen, ob ich das ansprechend in ein Diagramm bekomme.

                  Homoran 1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @docadams last edited by

                    @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                    mit einem dritten Datenpunkt, der jeden Tag einen Wert erhält.

                    das meinte ich nicht wirklich. in meinem dritten Datenpunkt wird der Wert kontinuierlich hochgezählt.

                    Wenn ich das richtig sehe machst du das auch

                    docadams 1 Reply Last reply Reply Quote 0
                    • docadams
                      docadams @Homoran last edited by

                      @homoran
                      Hm, es geht bei mir um das Laden eines E-Autos über die Wallbox go E-charger.
                      Das Auto haben wir erst eine Woche und wir können es zZ. nicht groß ausfahren. Darum erst einmal etwas geladen, also noch keine vielen Werte.
                      Stellst du das grafisch dar? Oder zeigst du nur die aktuelle Lademenge seit Beginn der Periode?
                      Vielleicht reden wir vom Selben, ich habe aber die falschen Begriffe. Wenn du eine Grafik hast, wie sieht die aus?

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Asgothian
                        Asgothian Developer @docadams last edited by

                        @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                        Hallo,

                        ich möchte gern den monatlichen Stromverbrauch in der Form eines Balkendiagramms darstellen.
                        Dazu habe ich 2 Datenpunkte angelegt:

                        • Monatsstart, dort wird immer am 1. des Monats um 0.03 Uhr der aktuelle Zählerstand eingelesen
                        • Monatsverbrauch, dort wird am 1. des Monats um 0.02 Uhr die Differenz aus aktuellem Zählerstand minus Monatsstart eingetragen. Der Datenpunkt wird geloggt (für History aktiviert).

                        Den Monatsverbrauch könnte ich nun in VIS darstellen, weil jeder Monat eine Zeile bekommt.
                        Aber 2 Probleme:
                        Es sind ja eigentlich die Werte des Vormonats, die am Monatsersten eingetragen werden. Weil ich finde keinen Zeittrigger "Monatsletzter um 23.58 Uhr"
                        Ich sehe das Ergebnis erst nach Abschluss des Monats. Ich möchte aber gern zwischendurch auch sehen, wie der Balken wächst. Würde ich das jeden Tag berechnen (dieses Zeitraster genügt), würde aber jeden Tag eine Zeile in der Tabelle sein und in Flot entsteht eine Art Sägezahn.

                        Ich komme aus dem Dilemma nicht raus, ist mein ganzer Ansatz falsch?

                        Sorry wenn ich so spät noch auf den Zug aufspringe. Meiner Meinung nach ist dein Ansatz vollständig falsch. Aus meiner Sicht ist das ganze eine klare Aufgabe für eine Datenvisualisierung (grafana / flot / echart), bei der Du direkt auf die in der History eingetragenen Verbrauchswerte gehst und als "Akkumulation" auf "summe aller Werte pro Zeiteinheit" stellst und auf der anderen Seite die Zeiteinheit auf 1 Tag, 1 Woche oder 1 Monat einstellst.

                        Dieses jonglieren von einzelnen Datenpunkten zur Visualisierung ist zwar technisch machbar, aber in meinen Augen prinzipiell falsch.

                        A.

                        Homoran 1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @docadams last edited by

                          @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                          Hm, es geht bei mir um das Laden eines E-Autos über die Wallbox go E-charger.

                          bei mir geht es um den Gesamtverbrauch des Hauses, sowie in weiteren Datenpunkten, um den Bezug und die Einspeisung.

                          Aber das sollte ja keinen Unterschied machen.
                          Das Ganze sieht bei mir dann so aus:
                          05-Strom.png

                          Oben der aktuelle Wert als Gauges
                          darunter die diversen Zähler

                          Die Grafik darunter, dann als Verlauf über 24h

                          Rechts oben, die Balkengrafik über eine Woche

                          darunter die Einzelwerte, das Auto auch nur als Verlaufskurve und als hochgezählter Gesamtverbrauch
                          PHEV über Haushaltssteckdose 2kW

                          1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @Asgothian last edited by

                            @asgothian sagte in Periodischen Verbrauch ermitteln und darstellen.:

                            aber in meinen Augen prinzipiell falsch.

                            das kann man sagen, wenn man mit Grafana arbeitet.
                            Die ioBroker hauseigenen Methoden bieten IMHO so etwas nicht an.

                            (ganz abgesehen davon, dass ich in den Datenpunkten auch die Werte für das Melden von Zählerständen nutze 😉 )

                            docadams 1 Reply Last reply Reply Quote 0
                            • docadams
                              docadams @Homoran last edited by docadams

                              Ich hatte ganz am Anfang meiner ioBroker-Zeit lange zwischen Flot und grafana hin und herüberlegt, und mich dann für Flot entschieden.
                              Eddy hatte letztens auch Grafiken mit Material-Design vorgestellt, was auch interessant ist. Ich möchte aber echt bei einem System (Flot) bleiben, sonst wächst mir das über den Kopf. 😕
                              @Homoran : Das ist ja der Wahnsinn (also das war ein respektvolles Lob) So eine Anzeige wie bei "Tagesprofil Strom" schwebt mir vor. Das Zeigt aber immer die Werte bis gestern, oder? Bei Tageswerten ist das OK, aber ich möchte nicht erst bis nach Ende des Monats warten.
                              Was sind die Vollkreisanzeigen für Widgets (Metergauge?)?

                              Homoran 1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @docadams last edited by

                                @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                                as war ein respektvolles Lob

                                Hätte ich auch ohne Zusatz so verstanden 😂

                                @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                                Das Zeigt aber immer die Werte bis gestern, oder?

                                ist aber in flot unter 'Zeit' konfigurierbar

                                @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                                aber ich möchte nicht erst bis nach Ende des Monats warten.

                                worauf?
                                Der Graph erscheint "sekundenaktuell" und wächst dann bis an das Tagesende.

                                @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                                Was sind die Vollkreisanzeigen für Widgets

                                rgraph - Gauge-basic

                                docadams 1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators last edited by

                                  @docadams
                                  Sorry - war ein Missverständnis meinerseits.
                                  Du meintest ja die Balken!

                                  Habe hier mal alles gezoomt:
                                  Strom_zoom.png

                                  bei den Balken ist es natürlich etwas kniffelig eine vernünftige Darstellung hinzubekommen, wenn die Zeit länger wird.
                                  Da es bei dir aber nur ein Balken wird, dürfte ein Monat auf der Zeitachse auch kein Problem sein.
                                  Auch hier ist es dynamisch, so dass der letzte Eintrag immer rechts steht, die Balken links davon abhängig von der eingestellten Periode ist.

                                  Links neben dem Chart visualisiere ich den aktuellen kumulierenden Zeitabschnitt (bei mir der heutige Tag)
                                  Die Balken "wachsen" über den Tag und werden am Folgetag in dem Chart daneben übernommen

                                  1 Reply Last reply Reply Quote 0
                                  • K
                                    klassisch Most Active last edited by klassisch

                                    Für solche Themen habe ich ein Skript "TodayIsLastOf" geschrieben
                                    Das ermittelt morgens ob der aktuelle Tag der letzte der Woche, des Monats, des Jahres ist. Und speichert das in Datenpunkten.
                                    Die Statistikfunktionen der verschiedenen Verbrauchsmesser können dann kurz vor Mitternacht diese Datenpunkte abfragen und schauen, was es heute zu berechnen gilt.
                                    Das Skript ist sicher nicht optimal und eher unbeholfen programmiert, scheint aber so weit zu funktionieren. Vielleicht hilft es ja.

                                    /*
                                         TodayIsLastDayOf
                                         
                                         detecs if today is last day of week, month, year
                                    
                                    */
                                    
                                    /* Input datapath */
                                    const dataPathId = '0_userdata.0.Calendar.TodayIsLastDayOf';
                                    /* End Input datapath - data will be generated automatically */
                                    
                                    
                                    const weekName = 'Week';
                                    const monthName = 'Month';
                                    const yearName = 'Year';
                                    
                                    
                                    let Namehelper = null; 
                                    let presetValue = false;
                                    
                                    Namehelper = weekName;
                                    const weekId = dataPathId + '.' + Namehelper;
                                    createState(dataPathId + '.' + Namehelper, presetValue , false, {
                                      name: Namehelper,
                                      type: 'boolean',
                                      role: 'value'
                                    });
                                    
                                    Namehelper = monthName;
                                    const monthId = dataPathId + '.' + Namehelper;
                                    createState(dataPathId + '.' + Namehelper, presetValue , false, {
                                      name: Namehelper,
                                      type: 'boolean',
                                      role: 'value'
                                    });
                                    
                                    Namehelper = yearName;
                                    const yearId = dataPathId + '.' + Namehelper;
                                    createState(dataPathId + '.' + Namehelper, presetValue , false, {
                                      name: Namehelper,
                                      type: 'boolean',
                                      role: 'value'
                                    });
                                    
                                    
                                    function checkTodayIsLastDayOf(){
                                       //checke if end of week
                                       // first get currend date
                                       let currentDate = new Date();
                                       let weekResult = false;
                                       let monthResult= false;
                                       let yearResult = false;
                                       
                                       // then check if date # is 0 
                                       if(currentDate.getDay() == 0){
                                       	weekResult = true; 
                                       }; 
                                    
                                       // next, check if end of Month: => check day of date of tomorrow
                                       // create tomorrow
                                       let tomorrow = formatDate (currentDate.getTime() + 1 * 24 * 3600000, 'DD');
                                       
                                       if(tomorrow == '01'){ // today is last of month
                                            monthResult = true;     
                                       }
                                    
                                    
                                       // check if end of the year. That is easy: Day is 31 and (javascript-)month == 11 
                                       if (currentDate.getMonth() == 11){ // now it is December 
                                           if (currentDate.getDay() == 31){ // another year is over
                                       	yearResult = true;
                                           }
                                       } 
                                       	  
                                       setState(weekId,weekResult);
                                       setState(monthId, monthResult);
                                       setState(yearId, yearResult);
                                    } // end function TodayIsLastDayOf	
                                       	  
                                       	  
                                    checkTodayIsLastDayOf(); // Init values
                                    
                                    schedule({hour: 0, minute: 6}, function(){ // dayOfWeek: 0: sunday 
                                       checkTodayIsLastDayOf();
                                    }); // end  Schedule
                                    
                                    
                                       	  
                                    
                                    
                                    
                                    //end
                                    
                                    
                                    
                                    
                                    
                                    

                                    1 Reply Last reply Reply Quote 1
                                    • docadams
                                      docadams @Homoran last edited by docadams

                                      @homoran
                                      Naja, ich sitz gern mal in de Nesseln, und durch die Masken sogar im analogen Leben.
                                      Der Graph erscheint "sekundenaktuell" und wächst dann bis an das Tagesende.
                                      ...und das begreife ich nicht. Bei mir erschein mit jeder Messung ein neuer Punkt/Säule.
                                      Wie bringe ich es bei, in VIS die einzelnen "Tageswerte" in den Graphen Januar zu schreiben, der kontinuierlich steigt, und ab Februar in den Graphen Februar usw.? Und ab 1.2. geht es bei 0 Differenz zwischen aktuellem Zählerstand und Startwert zum Monatsbeginn wieder los.

                                      rgraph - Gauge-basic: steckt das in einem nachinstallierten Adapter?

                                      Sorry, ich hatte solange an meinem Text gefeilt, dass ich die neuen Beiträge gich bemerkt hatte. Melde mich gleich

                                      Homoran 1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators @docadams last edited by

                                        @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                                        ...und das begreife ich nicht.

                                        Sorry für die Verwirrung.
                                        Ich schrieb, dass ich das falsch verstanden hatte, ich bezog es auf die Kurve unten links.

                                        @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                                        Bei mir erschein mit jeder Messung ein neuer Punkt/Säule.

                                        Das ist beim Balken so, deswegen musst du einen Datenpunkt kumulieren.
                                        Den aknnst du nicht in einem Balkenchart darstellen, sondern z.b. nur in einem Slider vertical oder mehrere in einem rgraph-barchart

                                        1 Reply Last reply Reply Quote 0
                                        • docadams
                                          docadams last edited by

                                          @klassisch : Bitte entschuldige, aber da endet mein Verstehen 🙂

                                          Ich habe jetzt einige Diskussionen gelesen, wo viele schöne Balkendiagramme stehen. Mir fehlt aber der Schritt davor, Flot klar zu machen, dass ich ein Balkendiagramm mit 12 Balken (für jeden Monat einen) haben möchte.
                                          Ich habe es mal, mangels geeigneter Datenbasis, mit einer Temperarurreihe versucht und eine Aggregation mit 86400 Sekunden (1Tag) probiert. kein Ergebnis.
                                          Eigentlich soll ja der Balken immer die Differenz von Zwischen Jetzt und Start darstellen. Der Wert ist morgen nach der Ladung Größer, aber immer noch der selbe Balken.

                                          Homoran 1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators @docadams last edited by Homoran

                                            @docadams sagte in Periodischen Verbrauch ermitteln und darstellen.:

                                            Eigentlich soll ja der Balken immer die Differenz von Zwischen Jetzt und Start darstellen

                                            das kannst du nicht mit einem Flot Chart darstellen!
                                            Flot kann out of the Box in Balken nur statische Daten visualisieren!

                                            Die Basis für die Darstellung in Flot sind historisierte Daten eines Datenpunktes.
                                            in der Einen Achse die Zeitstempel, in der anderen deren Wert

                                            Wenn du im Monat pro Tag nur einen Balken haben willst, darf im Datenpunkt "Monat" auch pro Tag nur ein Wert drin stehen

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            872
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly
                                            5
                                            37
                                            5052
                                            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