Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Stromverbrauch messen und dann optimieren

    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

    Stromverbrauch messen und dann optimieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sonnenheim @BananaJoe last edited by

      @bananajoe Vielen Dank für deine Kompetenten Hinweise! Der Hinweis auf den Adapter hat mir schon mal geholfen die notwendigen Datenpunkte zu erzeugen. Die Anpassungen das JavaScripts übersteigen allerdings meine Fähigkeiten. Ich werde mir also eine andere Möglichkeit suchen müssen meine Datenpunkte tabellarisch (ohne Sortierung der Werte) darzustellen. Es gibt noch so wahnsinnig viel zu lernen...

      BananaJoe 1 Reply Last reply Reply Quote 0
      • BananaJoe
        BananaJoe Most Active @Sonnenheim last edited by BananaJoe

        @sonnenheim also eigentlich muss du es nur schaffen in Zeile 17 einen eigenen Zieldatenpunkt auszuwählen,
        und in den Zeilen 22 bis 60 die Datenpunkte durch deine eigenen Quelldatenpunkte zu ersetzen. Hast du weniger fallen halt Zeilen weg, hast du mehr muss du Zeilen hinzufügen.

        Meine Sonderlocken basieren auf dem Gerätename (2ter Wert), wenn die Wörter nicht gefunden werden passiert auch nichts.

        L1 .. ja ich wollte da mal eine Aufteilung nach 3 Phasen machen ... habe ich aber nicht 😞 Weshalb überall L1 drin steht un im fertigen JSON blende ich es in VIS aus.

        ich hab da auch mal wie der Ochs vorm Berg gestanden 🙂

        S 1 Reply Last reply Reply Quote 1
        • S
          Sonnenheim @BananaJoe last edited by

          @bananajoe Perfekt! Das wird meine Aufgabe fürs Wochenende. Nochmals vielen Dank.

          1 Reply Last reply Reply Quote 0
          • RalfTh
            RalfTh @BananaJoe last edited by RalfTh

            @bananajoe Super, das gefällt mir sehr gut. Bin gerade auf der "Jagd" nach nächtlichen Stromfressern, die meinen Batteriespeicher leeren. Habe meine Kühl-Gefrierkombi über Nacht ausgeschaltet. Natürlich sollte man da vorher einen Versuch machen und mit Thermometern prüfen, ob die Temperatur nicht zu stark ansteigt. Bei mir war das OK und hat so eben nebenbei den Verbrauch des Kühlschrank um ca. 30% gesenkt ohne die Kühlleistung nennenswert zu beeinträchtigen. Aktuell habe ich im Haus noch eine Grundlast von 60W in der Nacht. Nun geht es als nächstes an das Nebenhaus und den Anbau, die jeweils eine eigene Unterverteilung haben. Mein LG Home ESS 8 zeigt mir immer noch zwischen 250 und 300 Watt Grundlast an. Dies saugt meinen 7kW-Speicher über Nacht leer. Natürlich schlägt da auch der Spiele-PC meines Sohnes zu Buche. Dieser "frisst" 400-600 Watt im Spielemodus.

            Mein Ziel ist es die Akkuleistung so weit auszudehnen, dass ich im Winter möglichst wenig Strombezug habe. Letztendlich soll eine Steuerung her, die Lasten abschalten kann, um die Akku-Laufzeit zu verlängern. Dazu muss man allerdings erst mal genau wissen, was die einzelnen Lasten brauchen.

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

              Hi,

              da ihr alle so fleißig optimiert. Gibt es eine Empfehlung für einen halbwegs vernünftigen Energiemesser mit dem ich mal durchs Hause rennen kann?

              Jey Cee 1 Reply Last reply Reply Quote 0
              • Jey Cee
                Jey Cee Developer @wendy2702 last edited by

                @wendy2702 ich hab die Zwischenstecker von Homematic, also die alten.
                Die sind ganz gut geeignet.

                Aber für fest angeschlossene verbraucher sind die ungeeignet.
                Ich hab vor Jahren den Stromverbrauch Analysiert in dem ich die ungefähre Betriebszeit von Geräten genommen habe und sie mit der Angegeben. leistung Multipliziert hab.
                Da ich einen Teil des Verbrauchs durch die Zwischenstecker kannte, war es mir möglich recht genau zu erkennen wo wieviel verbraucht wird.

                Leider sind die Dicksten Brocken kaum los zu werden. Herd, Spülmaschine, Waschmaschine, Kühlschrank und Heizung.
                Die werden immer viel Verbrauchen, da hilft nur sie weniger zu verwenden.
                Übrigens ist der Herd bei uns der größte einzel Verbraucher (E-Auto mal außer acht gelassen), pro Jahr sind das ~500kWh.

                wendy2702 1 Reply Last reply Reply Quote 0
                • wendy2702
                  wendy2702 @Jey Cee last edited by

                  @jey-cee Hi und Danke für deinen Input.

                  Einige der HM Zwischenstecker habe ich auch, suche aber aktuell ein Gerät mit Display bei dem ich mal schnell direkt ablesen kann.

                  Heizung haben wir dieses Jahr optimiert indem wir unsere 17 Jahre alte WP gegen eine neue ersetzt haben. (Förderung noch genutzt)

                  Wir sind halt ein 4 Personen Haushalt mit 2 (zumindest vom Alter her) erwachsenen Kindern 😁

                  Da hat jeder seinen eigenen TV, PC, Tablet usw. Mein Plan war/ist es einfach mal in jedem Zimmer mit Messsteckdose zu schauen was aktuell welches Gerät so verbraucht um dann eventuell handeln zu können.

                  Kühlschrank, Gefrierschrank usw. könnte man dann wenn zu hoher Verbrauch eventuell mal austauschen wobei ich mich immer Schwer tue funktionierende Sachen weg zu packen bloß um bisschen Strom zu sparen.

                  Muss allerdings dazu sagen das ich mit einer 21,6KwP Solaranlage zumindest aktuell Tagsüber eh nicht sparen muss 🙂

                  Jey Cee 1 Reply Last reply Reply Quote 0
                  • Jey Cee
                    Jey Cee Developer @wendy2702 last edited by

                    @wendy2702 sagte in Stromverbrauch messen und dann optimieren:

                    suche aber aktuell ein Gerät mit Display bei dem ich mal schnell direkt ablesen kann.

                    Dann schau dir mal das Video an: https://youtu.be/Vdi_sG2rHp0

                    @wendy2702 sagte in Stromverbrauch messen und dann optimieren:

                    Kühlschrank, Gefrierschrank usw. könnte man dann wenn zu hoher Verbrauch eventuell mal austauschen wobei ich mich immer Schwer tue funktionierende Sachen weg zu packen bloß um bisschen Strom zu sparen.

                    Hm bei Geräten die Heizen gibt es eigentlich kaum Sparpotential, da ein Heizstab vor 30 Jahren genau so funktioniert hat wie heute.
                    Da bringt ein verändertes Nutzungsverhalten einfach mehr.

                    wendy2702 1 Reply Last reply Reply Quote 0
                    • wendy2702
                      wendy2702 @Jey Cee last edited by

                      @jey-cee Video schaue ich mir an.

                      Das ein Heizstab genauso funktioniert ist wohl war, allerdings können die Geräte teilweise heute anders damit umgehen bzw. bieten mehr Möglichkeiten was zum Beispiel die Temperaturauswahl betrifft.

                      So hatte z.B. unser erster Geschirrspüler quasi nur Programme wie z.B. Lang/Mittel/Kurz

                      Heute kann ich dem Teil sagen es reicht mit 30 Grad wasser zu Spülen weil unter anderem auch die Reinigungsmittel Kaltaktiv geworden sind.

                      1 Reply Last reply Reply Quote 0
                      • Pedder007
                        Pedder007 @BananaJoe last edited by Pedder007

                        @bananajoe ich habe gestern diesen älteren Post von Dir gefunden und der hat mir erst einmal sehr gut weiter geholfen!
                        Davor hatte ich mal so überhaupt keinen Schimmer, wie ich es überhaupt anstelle einen JSON DP auf Basis vorhandener SourceAnalytix Datenpunkte zu befüllen.
                        Ich benötige den/das (?) JSON um damit ein MaterialDesign Bar Chart zu befüllen.
                        Ich habe mir dazu nun Dein Script so umgebaut, dass der/die/das (? 😆 ) JSON schonmal befüllt wird und ich immerhin im Debug Mod auch keine Fehlermeldungen mehr erhalte.
                        Der kopierte Inhalt sieht dann so aus:
                        [{"Monday":-32.041,"Tuesday":-20.686,"Wednesday":0}]
                        Die Werte entsprechen auch tatsächlich denen meiner SourceAnalytix DPs.
                        Allerdings zeigt mir das Widget nichts an, also einfach nur ein leeres Diagramm.
                        Konfiguriert ist das einfach so, ganz minimal:
                        49b16379-9d98-4730-8564-b0665d434e3d-image.png
                        Sonst habe ich an dem Widget nichts geändert, also blank aus der Toolbox.
                        Kannst Du mir einen Tipp geben woran das liegen könnte?

                        Anbei noch das modizifierte Script:

                        // Changelog:
                        // ----------
                        // 08.07.2002   Erste Version
                         
                         
                        // Beschreibung:
                        // -------------
                        // Dem Skript wir wird ein Array übergeben mit Datenpunkten von Geräten die den Stromverbrauch messen
                        // Daraus wird eine JSON Tabelle aufbereitet mit Werten direkt von den Geräten + den Daten vom Source-Analytics Adapter
                        // Die JSON-Tabelle kann dann per Widget in VIS dargestellt werden, ist scroll- und sortierbar, die Reihenfolge der Spalten lässt sich ändern oder ausblenden
                         
                        // Setup:
                        // ------
                         
                         
                        // Zieldatenpunkt
                        const s_TargetDatapoint = "0_userdata.0.var_PV.Energie01JSON";
                         
                        // [ Anzeigename, Datenpunkt, "sourceanalytix Datenpunkt" ],
                         
                        let a_SourceDatapoints = [
                            ["Montag", "01_Montag", "sourceanalytix.0.alias__0__PV__Wechselrichter__PiHaus" ]
                        //    [ "Stromzähler 3EM", "3EM", "L1", "sourceanalytix.0.0_userdata__0__shellies__3EM-Stromzaehler__Total-kWh" ]  
                        ];
                        // ####################################################################################################################################################
                        // http://www.network-science.de/ascii/ Font: big
                        // __      __        _       _     _            
                        // \ \    / /       (_)     | |   | |           
                        //  \ \  / /_ _ _ __ _  __ _| |__ | | ___ _ __  
                        //   \ \/ / _` | '__| |/ _` | '_ \| |/ _ \ '_ \ 
                        //    \  / (_| | |  | | (_| | |_) | |  __/ | | |
                        //     \/ \__,_|_|  |_|\__,_|_.__/|_|\___|_| |_|
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                        // Logging aktivieren für das Debuggen in die JavaScript-Console und in das ioBroker Log (true oder false):
                        const b_logging = false;
                        // und der erste Log-Eintrag
                        DebugWarning("Startup: Setze Variablen ...");
                        {1}
                        // Stromkosten pro kWh für Tageskosten
                        const i_costs = 0.32;
                        {1}
                        var s_JSON = "[";
                        {1}
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                        //  ______           _    _   _                        
                        // |  ____|         | |  | | (_)                       
                        // | |__ _   _ _ __ | | _| |_ _  ___  _ __   ___ _ __  
                        // |  __| | | | '_ \| |/ / __| |/ _ \| '_ \ / _ \ '_ \ 
                        // | |  | |_| | | | |   <| |_| | (_) | | | |  __/ | | |
                        // |_|   \__,_|_| |_|_|\_\\__|_|\___/|_| |_|\___|_| |_|
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                        // DebugWarning gibt in der Console eine Warnmeldung aus wenn b_logging auf true steht
                        /* accepts parameters
                         * s_debugmessage = Print this text to console via warn
                         */
                        function DebugWarning(s_debugmessage) {
                            if (b_logging == true) {
                                console.warn(s_debugmessage);
                            }
                        }
                        {1}
                        // ####################################################################################################################################################
                        // Ersetzt alle Vorkommen eines Zeichens, nicht nur das erste
                        function ReplaceAll(string, search, replace) {
                          return string.split(search).join(replace);
                        }
                         
                        // ####################################################################################################################################################
                        // Rundet die übergebende Zahl auf 2 Nachkommastellen
                        // Quelle: https://www.delftstack.com/de/howto/javascript/javascript-round-to-2-decimal-places/
                        function RoundToTwo(i_number) {
                            return + ( Math.round(i_number + "e+2")  + "e-2" );
                        }
                        {1}
                        {1}
                        // ####################################################################################################################################################
                        function CreateJSON() {
                            s_JSON = "["
                            for (var i = 0; i < a_SourceDatapoints.length; i++) {
                                let s_currentName = a_SourceDatapoints[i][0];
                                let s_currentDevice = a_SourceDatapoints[i][1];
                                let s_currentPhase = a_SourceDatapoints[i][2];
                                let s_currentSourceAnalytix = "";
                        
                                DebugWarning("s_currentName .........: " + s_currentName);
                                DebugWarning("s_currentDevice .......: " + s_currentDevice);
                                DebugWarning("s_currentPhase: .......: " + s_currentPhase);
                                DebugWarning("s_currentSourceAnalytix: " + s_currentSourceAnalytix);
                            s_JSON = s_JSON + "{";
                        
                                s_JSON = s_JSON + '"Monday":' + getState( "sourceanalytix.0.alias__0__PV__Wechselrichter__PiHaus.currentYear.consumed.currentWeek.01_Monday" ).val + ','
                                s_JSON = s_JSON + '"Tuesday":' + getState( "sourceanalytix.0.alias__0__PV__Wechselrichter__PiHaus.currentYear.consumed.currentWeek.02_Tuesday" ).val + ','
                                s_JSON = s_JSON + '"Wednesday":' + getState( "sourceanalytix.0.alias__0__PV__Wechselrichter__PiHaus.currentYear.consumed.currentWeek.03_Wednesday" ).val + ','
                         
                                s_JSON = s_JSON.replace(/,\s*$/, ""); // letztes Komma entfernen falls vorhanden
                                s_JSON = s_JSON + "},";
                            }
                            // letztes Komma entfernen https://stackoverflow.com/questions/17720264/remove-last-comma-from-a-string
                            s_JSON = s_JSON.replace(/,\s*$/, "");
                            s_JSON = s_JSON + "]";
                            DebugWarning(s_JSON);
                            setState(s_TargetDatapoint , s_JSON, true);
                        }
                         
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                        //   _____ _             _               
                        //  / ____| |           | |              
                        // | (___ | |_ __ _ _ __| |_ _   _ _ __  
                        //  \___ \| __/ _` | '__| __| | | | '_ \ 
                        //  ____) | || (_| | |  | |_| |_| | |_) |
                        // |_____/ \__\__,_|_|   \__|\__,_| .__/ 
                        //                                | |    
                        //                                |_|    
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                         
                        DebugWarning("Anzahl Datenpunkte: " + a_SourceDatapoints.length);
                        // Beim Start einmal alle Daten erstellen
                         
                        CreateJSON();
                         
                         
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                        //   _____       _                   _       _   _                 
                        //  / ____|     | |                 (_)     | | (_)                
                        // | (___  _   _| |__  ___  ___ _ __ _ _ __ | |_ _  ___  _ __  ___ 
                        //  \___ \| | | | '_ \/ __|/ __| '__| | '_ \| __| |/ _ \| '_ \/ __|
                        //  ____) | |_| | |_) \__ \ (__| |  | | |_) | |_| | (_) | | | \__ \
                        // |_____/ \__,_|_.__/|___/\___|_|  |_| .__/ \__|_|\___/|_| |_|___/
                        //                                    | |                          
                        //                                    |_|                          
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                         
                         
                         
                         
                        // ####################################################################################################################################################
                        // ####################################################################################################################################################
                        //   _____      _              _       _      
                        //  / ____|    | |            | |     | |     
                        // | (___   ___| |__   ___  __| |_   _| | ___ 
                        //  \___ \ / __| '_ \ / _ \/ _` | | | | |/ _ \
                        //  ____) | (__| | | |  __/ (_| | |_| | |  __/
                        // |_____/ \___|_| |_|\___|\__,_|\__,_|_|\___|
                        // ####################################################################################################################################################
                        {1}
                        // alle 15 Sekunden
                        schedule("*/60 * * * * *", async function () {
                            CreateJSON();
                        });
                        {1}
                        {1}
                        

                        Achso: Ich denke man kann das Script, für meine Zwecke. wahrscheinlich noch weiter 'entschlacken', da ich ja die vollen DP Namens-Strings verwende um das JSON zu befühlen.
                        Leider haben allerdings meine Versuche dies zu tun, immer zu verschiedensten Fehlermeldungen geführt.

                        BananaJoe 1 Reply Last reply Reply Quote 0
                        • BananaJoe
                          BananaJoe Most Active @Pedder007 last edited by

                          @pedder007 sagte in Stromverbrauch messen und dann optimieren:

                          MaterialDesign Bar Chart

                          habe ich nicht installiert. Aber du müsstest wahrscheinlich Diagramm Layout einmal öffnen und ihm zumindest sagen wieviele Spalten zu hast (2). Das könnte sich auch hinter Layout für Datensätze befinden.

                          ABER

                          ich vermute dein JSON ist auch falsch, alle Werte stehen in einer Gruppe (ich hoffe das ist der richtige Begriff).
                          Wenn man es in den JSON Path Finder kopiert sieht es so aus:
                          e2aa43bc-24e1-4da1-a068-90e0048437b9-image.png

                          [{"Monday":-32.041},{"Tuesday":-20.686},{"Wednesday":0}]
                          

                          sieht dann so aus:
                          260a03d8-4d31-44fc-af07-653cf7c843d5-image.png
                          Du hast da jetzt nur den Tag und den Wert drin, innerhalb der Gruppe können da, Kommagetrennt, noch mehr Werte stehen

                          Pedder007 2 Replies Last reply Reply Quote 0
                          • Pedder007
                            Pedder007 @BananaJoe last edited by

                            Hallo @bananajoe, vielen Dank für Deine Rückmeldung!
                            Ich habe das JSON nun gerade einmal manuell nachbearbeitet und die fehlenden Klammern eingefügt.
                            Leider ändert sich nichts am Diagramminhalt (=leer).

                            Zusätzlich habe ich dann auch noch das MaterialDesign - JSON Chart getestet, allerdings kommen auch da keine Daten ins Diagramm.

                            Nach einem Parameter für Spalten habe ich auch gesucht, aber bei beiden Widgets nichts in der Richtung gefunden.

                            1 Reply Last reply Reply Quote 0
                            • Pedder007
                              Pedder007 @BananaJoe last edited by

                              @bananajoe mir ist dann bzgl. der Formatierung doch noch ein Verdacht gekommen.
                              Man muss bei den Widgets anscheinend auch die ganze Formatierung mit in das JSON einbauen.
                              Ich habe eben einfach mal 1-2 Beispiele aus der zugehörigen Github Docu in so ein JSON DP kopiert und siehe da, es wird etwas angezeigt.
                              Folglich muss ich es also nun nur schaffen, diese Teile mit in Dein Script einzubauen.
                              Also danke für den richtigen Fingerzeig hier von Dir und der heutige Abend ist gerettet 😂

                              BananaJoe 1 Reply Last reply Reply Quote 0
                              • BananaJoe
                                BananaJoe Most Active @Pedder007 last edited by BananaJoe

                                @pedder007 Der Test-JSON von dir ist eventuell zu minimalistisch mit nur einem Wert.
                                Das hier hat mit der Default-JSON Tabelle basic - Table funktioniert:

                                [
                                  {
                                    "Monday": -32.041
                                  },
                                  {
                                    "Tuesday": -20.686
                                  },
                                  {
                                    "Wednesday": 0
                                  }
                                ]
                                

                                3c5c4c18-6f8f-4f84-995f-b0dc5baef9da-image.png

                                Ich nutze die JSON Tabelle von Inventwo (was nicht heißt das du diese dann extra installieren sollst, ich nutze halt das statt des MaterialDesign Adapters)

                                Das wird das sein was du vermutlich auch schon selbst herausbekommen hast

                                Pedder007 1 Reply Last reply Reply Quote 0
                                • Pedder007
                                  Pedder007 @BananaJoe last edited by Pedder007

                                  @bananajoe ja, genau auf der Fährte bin ich jetzt und es sieht gut aus.
                                  Ich konnte mir nun mit Deinem Script (nun noch weiter herunter-gestrippt) einen JSON-Generator bauen, der mir per MaterialDesign Widget immerhin schon einmal einen Datenpunkt als Bar-Chart darstellt.
                                  Darüber hinaus gibt es auf Github eine Vorlage für ein mehrfach Barchart (auch gestapelt), was zu meinen Zwecken passt. Das Ganze wird dann nun, ohne JavaScript Kenntnisse - aber hier lernt man's dann ja 😆 - , eine ziemliche Fleißarbeit für 56 DPs.
                                  Es soll eine 2-Wochen-Darstellung von SolarPower, GridPower, AkkuPower und VerbrauchsPower werden, welche es bei mir grundsätzlich alle schon im Sourceanalytix-Adapter gibt - evtl. mache ich aber zunächstmal nur eine Woche, also 28 DPs 😉
                                  Danach das Gleiche auch als Wochen/Monats-Sicht. Evtl. mache ich die auch zuerst, da ich mir daraus am Ende des Winters Aufschluss erhoffe, ob es sich lohnt den Akku nochmal aufzurüsten.
                                  Guter Hinweis grundsätzlich von Dir noch auf Inventwo Widgets. Die kannte ich noch gar nicht, obwohl ich die zugehörigen Icons schon fleißig nutze 🙂

                                  Als kleiner Einblick wie's bei mir aktuell aussieht ;-):
                                  76a68c3f-05b7-4afe-b4a9-2d5f5d5ab5a6-image.png
                                  Es fehlt mir aktuell noch den Fronius per ModBus Adapter anzubinden, um die Batterienutzung automatisiert zu steuern.
                                  Die Wärmepumpe habe ich per BBQKees und EMS-ESP schon gut im Griff 😉

                                  Danke Dir nochmals für Deine Hinweise 👍

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  834
                                  Online

                                  31.9k
                                  Users

                                  80.1k
                                  Topics

                                  1.3m
                                  Posts

                                  14
                                  48
                                  6330
                                  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