Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Smartmeter-Leistung mit S0 impulse per Skript auswerten

    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

    Smartmeter-Leistung mit S0 impulse per Skript auswerten

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

      Re: S0 Stromzähler umrechnen in aktuelle Verbrauch

      A 1 Reply Last reply Reply Quote 0
      • A
        Andy 1 @Andy 1 last edited by

        Ich habe oben verlinkten Post gefunden und es hat mir schon teilweise geholfen. Mein Anliegen ist Folgendes:

        Ich habe die aktuelle Version (5.3.8) auf einem Raspi 4 installiert und über GPIO (Pin4) ein Modul angeschlossen, was mir die Lichimpulse von meinem Stromzähler "ausliest". Er gibt mit "true" und "false" Werte zurück, mit denen ich nun (per Skript) die aktuelle Leistung ausrechnen möchte.
        Mein Zähler erzeugt 1000 Impulse für 1kWh.

        Ich habe das oben verlinkte Skript so angepasst, dass es 1000 Impulse verarbeitet, den richtigen Eingang nimmt und dann noch ein user-objekt erstellt, in die die Daten geschrieben werden:

        <block xmlns="https://developers.google.com/blockly/xml" type="control" id="Zh:,x@fPl?!iX),z3z_y" x="-391" y="-172">
          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
          <field name="OID">0_userdata.0.Stromzähler.Lesitung</field>
          <field name="WITH_DELAY">FALSE</field>
          <value name="VALUE">
            <block type="math_round" id="sjOp3d8^}jClP_0/9_]Y">
              <field name="OP">ROUND</field>
              <value name="NUM">
                <shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number">
                  <field name="NUM">3.1</field>
                </shadow>
                <block type="variables_get" id="1_c0K2p^[!Yr.axi5F-e">
                  <field name="VAR" id="AP1}0!{NwZLxuu@pAF`Z">Wert</field>
                </block>
              </value>
            </block>
          </value>
        </block>
        

        hier das Screenshot zum Skript:
        firefox_Ncl4CfDpKV.png

        Das ist mein User-Objekt (also in die die berehcneten Daten geschrieben werden sollen):
        firefox_Gj92pYwsJw.png

        und das die Konfig meines GPIO-Eingangs:
        firefox_n4YBfwAUeH.png

        Mein Problem ist nun, dass ich keine Daten ins Objekt geschrieben bekomme:
        firefox_rsr0IXbgVg.png

        Ich bin erst seit ein paar Wochen überhaupt mit iobroker unterwegs und habe von Skripten kau Ahnung, darum sorry, falls ich hier was total falsch gemacht habe und schon mal vielen vielen Dank für alle hilfreichen Tipps und Korrekturen!

        P.S.: Ja, ich weiß, es gibt dutzende Hardwarelösungen, die man alternativ nutzen kann. Da ich mir die Bauteile aber extra besorgt habe und (neben dem Raspi) damit weit unter 10 euro gekommen bin, möchte ich nicht wieder eine neue Lösung probieren, sondern mit dieser zum Ziel kommen. Ich denke, die Lösung dieses Problem könnte damit auch vielen anderen Bastlern helfen 🙂

        A paul53 2 Replies Last reply Reply Quote 0
        • A
          Andy 1 @Andy 1 last edited by

          Noch folgende Anmerkungen:

          • ich bekomme keine Fehler im Protokoll bzw. Skriptlog
            firefox_wF1wKDRmnQ.png

          ShareX_FvI1TnTX5s.png

          • Zur grafischen Auswertung nutze ich Grafana. Die Berechnung (wenn nicht per Skript möglich) könnte auch dort passieren

          • ich weiß, dass es das Volkszähler-Projekt gibt und habe dadurch auch schon S0-Impulse erfolgreich auslesen können, bevorzuge aber eine iobroker-Lösung, da iobroker auch schon für andere Sachen läuft und ich nicht noch zusätzlich eine Instanz dazwischen schalten möchte.

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

            @andy-1 Hab jetzt nicht alles durchgelesen, aber:

            • um Meldungen zu bekommen solltest du sinnvolle debug-Bausteine an den interessanten Stellen deines Skripts setzen um zu sehen wo es hängt.
            • bei eigenen Datenpunkten reicht ein aktualisiere, statt steuere
            • du kannst die Zeit zwischen den Änderungen zum berechnen nutzen.
              • Die dazu notwendigen Timestamps bekommst du aus dem selben Baustein unter Trigger, aus dem Wert stammt
              • Da ist doch dein Wert her, und keine eigene Variable? - wenn doch, so ist Wert eine reservierte Bezeichnung, dann musst du deine Variable umbenennen
            A 1 Reply Last reply Reply Quote 0
            • A
              Andy 1 @Homoran last edited by

              @homoran Danke Homoran für die Antwort,

              also diesen Schlater sozusagen von Wert auf Zeitstempel umsetzen?
              firefox_V4xR2ocz6W.png

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

                @andy-1
                "GPIO 4" ist der S0-Impuls?
                Werden alle Impulse übertragen?

                Damit nur auf eine Flanke des Impulses getriggert wird, ändere den Trigger auf "ist größer als letztes".

                Bild_2022-04-22_135119351.png

                letzte Änderung findet man unter "Trigger".

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

                  @paul53

                  Danke Paul53,

                  das habe ich gemacht und es kommen keine Werte an, er steht immer noch bei "0"
                  2f6096d5-57f0-4e9c-9fb0-b28b454ca20c-grafik.png

                  Ich hatte vorher auch schon mal diesen Schalter auf "ist wahr" gesetzt, da er bei einem (Licht)impuls den Zustand im Iobroker von "false" auf "true" ändert. Hat aber auch nichts gebracht
                  f4aa1e39-d704-4c32-b9ac-d70310e86a2b-grafik.png

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

                    @andy-1 sagte in Smartmeter-Leistung mit S0 impulse per Skript auswerten:

                    das habe ich gemacht und es kommen keine Werte an, er steht immer noch bei "0"

                    aber dein aktueller Screenshot sieht nicht aus wie der von @paul53

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

                      @andy-1 sagte: er steht immer noch bei "0"

                      Du verwendest auch die absolute Zeit seit 1.1.1970 und nicht die Zeitdifferenz zwischen zwei Impulsen. Mein Vorschlag oben zeigt, wie es geht.

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

                        @paul53

                        Ah sorry, ich habe nicht gesehen, dass es dein eigenes Setup ist. Ich dachte es wäre meins mit deinem Beschriebenen Vorschlag 🙂

                        Hast du das Ganze als Skript? Ich habe das noch nie gemacht und würde ewig brauchen das so hinzubekommen...ganz zu schweigen von der Fehleranfälligkeit 😕

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

                          @andy-1 sagte: Hast du das Ganze als Skript?

                          Die IDs müssen noch zugewiesen / korrigiert werden.

                          <xml xmlns="https://developers.google.com/blockly/xml">
                           <variables>
                             <variable id="7+]cFH7^*L%5[#m{O4o_">vorherigerPuls</variable>
                             <variable id="vsT?p{-~JH,*)%[(h7nW">leistung</variable>
                           </variables>
                           <block type="variables_set" id=")dln,TiE^U:Mv_m$=.)i" x="13" y="-38">
                             <field name="VAR" id="7+]cFH7^*L%5[#m{O4o_">vorherigerPuls</field>
                             <value name="VALUE">
                               <block type="get_value" id="{#^T6-0Ws0C9@$-w9S0z">
                                 <field name="ATTR">lc</field>
                                 <field name="OID">ID auswählen</field>
                               </block>
                             </value>
                             <next>
                               <block type="on_ext" id="Oro(%HB3p/}{[q=Eljwl">
                                 <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                                 <field name="CONDITION">gt</field>
                                 <field name="ACK_CONDITION"></field>
                                 <value name="OID0">
                                   <shadow type="field_oid" id="CTc7`cnO8v]t0NHxjCO)">
                                     <field name="oid">default</field>
                                   </shadow>
                                 </value>
                                 <statement name="STATEMENT">
                                   <block type="variables_set" id="e9.#iL0.ELCs[Wu_rPvG">
                                     <field name="VAR" id="vsT?p{-~JH,*)%[(h7nW">leistung</field>
                                     <value name="VALUE">
                                       <block type="math_arithmetic" id="EKRkNu-`e;?XZp~)RG}M">
                                         <field name="OP">DIVIDE</field>
                                         <value name="A">
                                           <shadow type="math_number" id="fuYcTR[bdzQfn,mXXO2E">
                                             <field name="NUM">3600000</field>
                                           </shadow>
                                         </value>
                                         <value name="B">
                                           <shadow type="math_number" id="{pt{u8eoUX[Y53$B]a=a">
                                             <field name="NUM">1</field>
                                           </shadow>
                                           <block type="math_arithmetic" id="+Vae]Y^md8ch)wqFoB45">
                                             <field name="OP">MINUS</field>
                                             <value name="A">
                                               <shadow type="math_number" id="Ijy@`#fw{tC;5Kg3S=rB">
                                                 <field name="NUM">1</field>
                                               </shadow>
                                               <block type="on_source" id="D|xBp^4L1+NB[)=QfuBp">
                                                 <field name="ATTR">state.lc</field>
                                               </block>
                                             </value>
                                             <value name="B">
                                               <shadow type="math_number" id="ubz;[q+fJ}9YI|xhd/b}">
                                                 <field name="NUM">1</field>
                                               </shadow>
                                               <block type="variables_get" id="0^M;*e9$;b4vphyRmt:h">
                                                 <field name="VAR" id="7+]cFH7^*L%5[#m{O4o_">vorherigerPuls</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                     <next>
                                       <block type="update" id="f?jF@,lHbz6o~AMw2s=x">
                                         <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                         <field name="OID">0_userdata.0.Blockly.powerW</field>
                                         <field name="WITH_DELAY">FALSE</field>
                                         <value name="VALUE">
                                           <block type="math_round" id="miRdpH,F)iJw.TyQ4@dE">
                                             <field name="OP">ROUND</field>
                                             <value name="NUM">
                                               <shadow type="math_number" id="dBmatg~(%-2,9t%[SzXv">
                                                 <field name="NUM">3.1</field>
                                               </shadow>
                                               <block type="variables_get" id="#8:k*ssP.vT:7s%#OGI=">
                                                 <field name="VAR" id="vsT?p{-~JH,*)%[(h7nW">leistung</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                         <next>
                                           <block type="variables_set" id="DG7|*l]|JXfX)5Z@9,*X">
                                             <field name="VAR" id="7+]cFH7^*L%5[#m{O4o_">vorherigerPuls</field>
                                             <value name="VALUE">
                                               <block type="on_source" id="A`mia%.{7Y*3k?AV,6fb">
                                                 <field name="ATTR">state.lc</field>
                                               </block>
                                             </value>
                                           </block>
                                         </next>
                                       </block>
                                     </next>
                                   </block>
                                 </statement>
                               </block>
                             </next>
                           </block>
                          </xml>
                          

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

                            @paul53

                            Danke!! muss bei jeder Objekt ID der GPIO eingesetzt werden?
                            c8f2584e-a433-4b2c-98d6-aa6b768f5b68-grafik.png

                            paul53 A 2 Replies Last reply Reply Quote 0
                            • paul53
                              paul53 @Andy 1 last edited by

                              @andy-1 sagte: muss bei jeder Objekt ID der GPIO eingesetzt werden?

                              Nein, bei "aktualisiere" muss der Datenpunkt mit dem Leistungswert zugewiesen werden.

                              1 Reply Last reply Reply Quote 1
                              • A
                                Andy 1 @Andy 1 last edited by

                                @andy-1

                                Sorry, hatte noch die Ausgabe vergessen. So sieht es jetzt aus:
                                b91d45dd-9f3f-4898-9c2a-a39a2b0eef23-grafik.png

                                Werte kommen rein:
                                fb05d297-517f-4954-9780-9e225773d261-grafik.png

                                A 1 Reply Last reply Reply Quote 0
                                • A
                                  Andy 1 @Andy 1 last edited by

                                  @andy-1

                                  ich prüfe gleich mal mit der Anzeige am SmartMeter ab..

                                  A 1 Reply Last reply Reply Quote 0
                                  • A
                                    Andy 1 @Andy 1 last edited by

                                    @andy-1

                                    SUPER!! Stimmt exact überein!!

                                    Vielen vielen Dank!!!

                                    Das hat mich viel Zeit, Geld und nerven gespaart 🙂

                                    A 1 Reply Last reply Reply Quote 0
                                    • A
                                      Andy 1 @Andy 1 last edited by

                                      Nohc eine Frage: Wo kann ich den Wert für 1000 Impulse pro kWh ändern?

                                      Ich möchte ihn auch an anderen SmartMetern einsetzen und da ist oft ein abweichendes Verhältnis von Impuls zu kWh

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

                                        @andy-1 sagte: Wo kann ich den Wert für 1000 Impulse pro kWh ändern?

                                        In dem Faktor (mWs / Impuls): 1000 Impulse / kWh = 1 Impuls / Wh = 1 Impuls / 3600000 mWs

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

                                          @paul53

                                          Ah okay, das macht sinn. Ich hab es mal als als Mathematisches Element "aufgesplittet". Ist das so korrekt?
                                          8a21dd77-73f3-4613-8d97-6147f3901acf-grafik.png

                                          Hier der vorher-nachher-Vergleich in XML-Form:
                                          3e2323bb-058c-4315-ae48-57512cdb6f4d-grafik.png

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

                                            @andy-1 sagte: Ist das so korrekt?

                                            Nein. Wenn man mit Impulsen / kWh rechnet, muss man durch diesen Wert dividieren. 1 kWh = 3600000000 mWs.

                                            Bild_2022-04-22_222349673.png

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            769
                                            Online

                                            31.8k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            23
                                            622
                                            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