Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skripte für PV und Verbrauch

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Skripte für PV und Verbrauch

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

      @codierknecht Danke für den Hinweis, wusste ich nicht. Habe es rausgenommen, jetzt mal abwarten was passiert.

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @srkonus last edited by

        @srkonus
        Du könntest nach Ablauf des Timeout den aktuellen Zählerstand in einen Hilfsdatenpunkt schreiben.
        Sobald morgens die PV wieder produziert, ermittelst Du über den dann vorliegenden Zählerstand und den gemerkten Wert den Nachtverbrauch und schreibst den in einen weiteren DP.
        Diesen kannst Du über einen der History-Adapter loggen.

        S 1 Reply Last reply Reply Quote 0
        • S
          srkonus @Codierknecht last edited by srkonus

          @codierknecht Vom Sinn her klar, aber das bekomme ich nicht in Blockly realisiert - bekomme es im Kopf nicht hin das ich meinen ersten Zwischenwert nicht überschreibe.

          Codierknecht 1 Reply Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @srkonus last edited by Codierknecht

            @srkonus

            Hier ein Vorschlag. Ungetestet, weil ja auch mein BKW gerade nix produziert.
            Benötigt 3 Datenpunkte:

            0_userdata.0.test.zaehlerstand
            0_userdata.0.test.tagverbrauch
            0_userdata.0.test.nachtverbrauch
            

            495f8866-d017-4b8b-8872-23f6804640f7-grafik.png

            Edit:
            Das Ding fliegt aber mit ziemlicher Sicherheit recht bald aus der Kurve.
            Nämlich dann, wenn mal so richtiges Mistwetter ist und das BKW auch tagsüber auf 0 geht.
            Um wirklich Tag und Nacht zu berücksichtigen und nicht zufällige Wetterereignisse, könnte man auf javascript.0.variables.isDayTime triggern.

            S 1 Reply Last reply Reply Quote 0
            • S
              srkonus @Codierknecht last edited by

              @codierknecht Ach, das wäre mir sogar egal, es soll nur addiert werden, was "verbraucht" wird wenn keine PV Produktion vorhanden ist.
              Danke für deinen Vorschlag, aber diesen bekomme ich gerade im Kopf überhaupt nicht nachvollzogen

              Codierknecht 1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @srkonus last edited by Codierknecht

                @srkonus sagte in Skripte für PV und Verbrauch:

                aber diesen bekomme ich gerade im Kopf überhaupt nicht nachvollzogen

                Wo haperts denn?

                Ich habe das mal auf den tatsächlichen Tag-/Nachverbrauch umgebaut, um von Wetterereignissen unabhängig zu sein.

                Der Trigger ist isDayTime. Der ändert sich genau 2x am Tag, nämlich morgens auf true und abends auf false.
                3db06367-2a18-49d5-a466-5b4ebb553a89-grafik.png
                Ich merke mir den aktuelle Zählerstand des Stromzählers und berechne mit diesem und dem zuletzt gemerkten Stand den zwischenzeitlichen Verbrauch.
                198a11b5-4831-4b33-8359-e9bfeb87c1e0-grafik.png
                Wenn man tatsächlich nur Tag/Nacht unterscheiden will, ist das Ganze noch etwas einfacher.
                Wenn der Wert auf true wechselt, wurde es gerade Tag. Dann ist der ermittelte Verbrauch der Nachtverbrauch.
                Wechselt der Wert hingegen auf false, wird es Nacht und wir haben den Tagverbrauch.
                beac2ed4-497b-451d-b919-92ca8b332dfb-grafik.png
                Am Ende schreiben wir noch den jetzigen Zählerstand weg, damit wir den für den nächsten Wechsel zwischen Tag und Nacht zur Verfügung haben.
                2b142883-be50-4ad5-9217-f5e30880cbc7-grafik.png

                Den Timeout kann man sich dann auch schenken, da der Trigger ja nur genau 2x am Tag feuert.

                S 1 Reply Last reply Reply Quote 0
                • S
                  srkonus @Codierknecht last edited by

                  @codierknecht Vielen Dank für die Erläuterung. Habe jetzt folgendes Blockly:

                  279e84e6-33aa-413e-874c-ca3e48745f5d-image.png

                  Mal abwarten, ob es wie gewünscht arbeitet. Ich nutze den Timeout da ich erfahren möchte, wie viel Strom verbraucht (ja ja, er wird ja nicht verbraucht) wird wenn keine PV Anlage arbeitet.

                  VG
                  srkonus

                  Codierknecht 1 Reply Last reply Reply Quote 0
                  • Codierknecht
                    Codierknecht Developer Most Active @srkonus last edited by

                    @srkonus
                    Ich sehe dort mehrfach "Wert vom Objekt ID 'Zaehlerstand'".
                    Sind das unterschiedliche DP's?
                    Wenn nicht, erhältst Du als Ergebnis immer 0 (Zaehlerstand - Zaehlerstand).

                    Arbeite mit Variablen.
                    Hier mal ein Vorschlag mit 2 Optionen.
                    Entweder erhältst Du nur den Verbrauch im letzten Zeitraum ohne PV, oder Du addierst im DP "Nachtverbrauch" alles was ohne PV so verbraucht wird.
                    Du darfst dabei selbstverständlich nur eine der beiden Optionen verwenden.

                    Dazu benötigst Du auch noch einen der bekannten History-Adapter (SQL, Influx, History). Sonst musst Du das ja ständig im Blick haben

                    3226f9f6-5e63-4c56-b1bf-a47c8eef5e48-grafik.png

                    S 1 Reply Last reply Reply Quote 0
                    • S
                      srkonus @Codierknecht last edited by srkonus

                      @codierknecht Wo kommt die Variable "Wert" her und welchen Wert hat es? Sehe nicht, das die Variable vorher gesetzt wird.

                      Codierknecht 1 Reply Last reply Reply Quote 0
                      • Codierknecht
                        Codierknecht Developer Most Active @srkonus last edited by

                        @srkonus
                        Das ist keine Variable, sondern ein Baustein aus dem Bereich "Trigger".
                        Nach dem Hinzufügen kannst Du von "Objekt ID" auf "Wert" ändern.
                        Das kannst Du in jedem Objekt-Trigger so verwenden, da es unsinnig wäre hier nochmal mit "Wert von" zu arbeiten. Das kann nämlich nicht nur zu unerwünschten Ergebnissen führen (Asynchron), sondern ist auch nicht sonderlich performant. Der Trigger kennt ja bereits sein zugehöriges Objekt.

                        cfdbcab2-4bd4-4f06-bf8c-032c175c4409-grafik.png

                        S 1 Reply Last reply Reply Quote 0
                        • S
                          srkonus @Codierknecht last edited by

                          @codierknecht Bin ehrlich, hab ich nicht verstanden. Habe dein Script Beispiel jetzt mal nachgebaut, werde es morgen beobachten - jetzt ist es draußen zu dunkel 😄

                          Codierknecht 1 Reply Last reply Reply Quote 0
                          • Codierknecht
                            Codierknecht Developer Most Active @srkonus last edited by

                            @srkonus
                            Ich häng Dir hier mal das Script an.

                            <xml xmlns="https://developers.google.com/blockly/xml">
                             <variables>
                               <variable type="timeout" id="timeout">timeout</variable>
                               <variable id="W$IcW%-i75K]exS?F/*7">zaehlerstand</variable>
                               <variable id="VH#/(hm_L!hkq-%j-*{k">verbrauch</variable>
                             </variables>
                             <block type="on" id="eO!*FZ#KP/@uNd#5y`[F" x="-362" y="213">
                               <field name="OID">opendtu.0.114190525113.ac.phase_1.power</field>
                               <field name="CONDITION">ne</field>
                               <field name="ACK_CONDITION"></field>
                               <statement name="STATEMENT">
                                 <block type="timeouts_cleartimeout" id="zKk64!}O2zHxfR-mRJ2]">
                                   <field name="NAME">timeout</field>
                                   <next>
                                     <block type="timeouts_settimeout" id="]zNJC.zJ~yA7cr}tVOBA">
                                       <field name="NAME">timeout</field>
                                       <field name="DELAY">240</field>
                                       <field name="UNIT">sec</field>
                                       <statement name="STATEMENT">
                                         <block type="variables_set" id="@Z[E$P0an4Px+LO=cjTx">
                                           <field name="VAR" id="W$IcW%-i75K]exS?F/*7">zaehlerstand</field>
                                           <value name="VALUE">
                                             <block type="get_value" id="e_vlSHCM~8n;3DqCxvwk">
                                               <field name="ATTR">val</field>
                                               <field name="OID">sonoff.0.ESP8266_SML.eHZM_Tarif1_in</field>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="variables_set" id="OGZe,6C8:Dx~U9m7sEyN">
                                               <field name="VAR" id="VH#/(hm_L!hkq-%j-*{k">verbrauch</field>
                                               <value name="VALUE">
                                                 <block type="math_arithmetic" id="nfelQi3rXPo`D_m0HZ1^">
                                                   <field name="OP">MINUS</field>
                                                   <value name="A">
                                                     <shadow type="math_number" id="pq(QH_-Xm+buxEkjV?yf">
                                                       <field name="NUM">1</field>
                                                     </shadow>
                                                     <block type="variables_get" id="Qtg^gtF*^}A,UYEuy$}f">
                                                       <field name="VAR" id="W$IcW%-i75K]exS?F/*7">zaehlerstand</field>
                                                     </block>
                                                   </value>
                                                   <value name="B">
                                                     <shadow type="math_number" id="Z[+VQbUq:VD.duby-`Wa">
                                                       <field name="NUM">1</field>
                                                     </shadow>
                                                     <block type="get_value" id="j#/04pc,5~**qeZ,{4K0">
                                                       <field name="ATTR">val</field>
                                                       <field name="OID">0_userdata.0.Test.zaehlerstand</field>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </value>
                                               <next>
                                                 <block type="comment" id="@oVZQU_19WNlezKTwl]F">
                                                   <field name="COMMENT">wenn Produktion auf 0 geht</field>
                                                   <next>
                                                     <block type="controls_if" id="wW06~RY:yH@cMjEd|{D*">
                                                       <value name="IF0">
                                                         <block type="logic_negate" id="1CrFTuW_HQ15zYpF4}-e">
                                                           <value name="BOOL">
                                                             <block type="on_source" id="}Cs8U+q%8yLx(o/MY~?i">
                                                               <field name="ATTR">state.val</field>
                                                             </block>
                                                           </value>
                                                         </block>
                                                       </value>
                                                       <statement name="DO0">
                                                         <block type="update" id="A308QpgANqqK%T$BUekH">
                                                           <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                           <field name="OID">0_userdata.0.Test.zaehlerstand</field>
                                                           <field name="WITH_DELAY">FALSE</field>
                                                           <value name="VALUE">
                                                             <block type="variables_get" id="JX9?=wP^t+^qF)n*_`9a">
                                                               <field name="VAR" id="W$IcW%-i75K]exS?F/*7">zaehlerstand</field>
                                                             </block>
                                                           </value>
                                                           <next>
                                                             <block type="comment" id="9/yd!j/d]!n}_A:FBrGn">
                                                               <field name="COMMENT">entweder so</field>
                                                               <next>
                                                                 <block type="update" id="XfK1+v`i}eM.6LO6b6XM">
                                                                   <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                                   <field name="OID">0_userdata.0.Test.nachtverbrauch</field>
                                                                   <field name="WITH_DELAY">FALSE</field>
                                                                   <value name="VALUE">
                                                                     <block type="variables_get" id="c!%ADMbQwx}i%$b3sz:x">
                                                                       <field name="VAR" id="VH#/(hm_L!hkq-%j-*{k">verbrauch</field>
                                                                     </block>
                                                                   </value>
                                                                   <next>
                                                                     <block type="comment" id="dZ.OHe[PeJEako141`)0">
                                                                       <field name="COMMENT">oder so (saldierend)</field>
                                                                       <next>
                                                                         <block type="update" id="R[Mxgj2yeKO24%z]s2bp">
                                                                           <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                                           <field name="OID">0_userdata.0.Test.nachtverbrauch</field>
                                                                           <field name="WITH_DELAY">FALSE</field>
                                                                           <value name="VALUE">
                                                                             <block type="math_arithmetic" id="=UPMOUY/v@-7+`^TmjRZ">
                                                                               <field name="OP">ADD</field>
                                                                               <value name="A">
                                                                                 <shadow type="math_number" id="d?k/dK*P:SNt:nh2vK{L">
                                                                                   <field name="NUM">1</field>
                                                                                 </shadow>
                                                                                 <block type="get_value" id="?H|jTT2npG87/7m@%},C">
                                                                                   <field name="ATTR">val</field>
                                                                                   <field name="OID">0_userdata.0.Test.nachtverbrauch</field>
                                                                                 </block>
                                                                               </value>
                                                                               <value name="B">
                                                                                 <shadow type="math_number" id="us=:06)umI4bF#ix;PyU">
                                                                                   <field name="NUM">1</field>
                                                                                 </shadow>
                                                                                 <block type="variables_get" id="b=F}(;ZU3Bcm(+92yt..">
                                                                                   <field name="VAR" id="VH#/(hm_L!hkq-%j-*{k">verbrauch</field>
                                                                                 </block>
                                                                               </value>
                                                                             </block>
                                                                           </value>
                                                                         </block>
                                                                       </next>
                                                                     </block>
                                                                   </next>
                                                                 </block>
                                                               </next>
                                                             </block>
                                                           </next>
                                                         </block>
                                                       </statement>
                                                     </block>
                                                   </next>
                                                 </block>
                                               </next>
                                             </block>
                                           </next>
                                         </block>
                                       </statement>
                                     </block>
                                   </next>
                                 </block>
                               </statement>
                             </block>
                            </xml>
                            

                            Der gezeigte Block hängt nicht ohne Grund im Bereich "Trigger", da er direkt mit dem darüber liegenden Trigger-Block zu verwenden ist.
                            Wenn ein Trigger feuert, sind so ziemlich alle Eigenschaften des zugehörigen Objektes bekannt.
                            Es macht also nicht wirklich Sinn, z.B. die Objekt-ID, den Namen oder eben den Wert des feuernden Objektes nochmal über "Wert von" zu lesen.

                            2fa05d4e-9257-4404-9dbc-6027358611f8-image.png

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            492
                            Online

                            31.7k
                            Users

                            79.8k
                            Topics

                            1.3m
                            Posts

                            4
                            17
                            790
                            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