Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Blockly - Berechnung von Werten mit Objekten klappt nicht

    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

    [Gelöst] Blockly - Berechnung von Werten mit Objekten klappt nicht

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

      Hallo zusammen,

      ich komme einfach nicht weiter mit der Berechnung von Werten in meinen Datenpunkten.

      Das gezeigte Skript soll die Wattstunden berechnen und daraus Kilowattstunden und den kWh-Preis/Kosten errechnen.

      Die Logik passt soweit - Verbrauch vor dem Start und nach dem Ende werden zur richtigen Zeit korrekt gesetzt.

      Die weiteren Berechnungen bleiben allerdings null, wie im Screenshot zu sehen ist.

      Die Daten kommen von einer HomeMatic Steckdose (Zwischenstecker) mit Messung.

      Für Hilfe wäre ich sehr dankbar.

      9401_blockly_wm_01.png
      9401_blockly_wm_02.png

      Hier das Ergebnis, auch wenn die Werte nicht realistisch (sehr klein) sind (kann nicht jedes Mal die WM waschen lassen) 😄
      9401_blockly_wm_dp.png

      Für euch bestimmt nur ne Kleinigkeit, doch ich fummel mir hier einen zurecht.

      JavaScript-Adapter: Version 4.0.7

      Hier noch der Export vom Script:

      ! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
      ! <block type="on_ext" id="Gm/)l!,?ha%:[Uif*k6" x="-38" y="13"><mutation items="1"></mutation> ! <field name="CONDITION">ne</field> ! <value name="OID0"><shadow type="field_oid" id="cKUV}cb:twMmvh~2g5=8"><field name="oid">hm-rpc.1.KEQ0970715.4.DECISION_VALUE</field></shadow></value> ! <statement name="STATEMENT"><block type="controls_if" id="QUl0r}1IoB#jydl6Fg7k"><mutation elseif="1"></mutation> ! <value name="IF0"><block type="logic_compare" id="QH%MCrjg9Xffl9KQ-c7="><field name="OP">GTE</field> ! <value name="A"><block type="get_value" id="+N02_Uaxhwj!zLdDl)#u"><field name="ATTR">val</field> ! <field name="OID">hm-rpc.1.KEQ0970715.4.DECISION_VALUE</field></block></value> ! <value name="B"><block type="text" id="IBz!^;:Ll9KzYS_V,6mD"><field name="TEXT">1</field></block></value></block></value> ! <statement name="DO0"><block type="update" id="T|6nN63vtr*@P_RG-W-2"><mutation delay_input="false"></mutation> ! <field name="OID">javascript.0.Waschmaschine.läuft</field> ! <field name="WITH_DELAY">FALSE</field> ! <value name="VALUE"><block type="logic_boolean" id="*ZRZ]wjT%1kxo[F.Tqss"><field name="BOOL">TRUE</field></block></value> ! <next><block type="update" id="Pz#RgKHWtN6!w%8Q(aO"><mutation delay_input="false"></mutation>
      ! <field name="OID">javascript.0.Waschmaschine.Pause</field>
      ! <field name="WITH_DELAY">FALSE</field>
      ! <value name="VALUE"><block type="logic_boolean" id=".7,=AyHW1}jYCp2o_Kl"><field name="BOOL">FALSE</field></block></value>
      ! <next><block type="variables_set" id="#}%|gwQTpn}p#oKF?Hm["><field name="VAR">VerbrauchStart</field>
      ! <value name="VALUE"><block type="math_rndfixed" id="sSsebOU}Q5!cg:ZEXa9"><field name="n">2</field> ! <value name="x"><shadow type="math_number" id=",DJhZ)]+%PDUX@^5L##_"><field name="NUM">3.1234</field></shadow> ! <block type="get_value" id="hE3JJCgxVU+tAl@@ni*h"><field name="ATTR">val</field> ! <field name="OID">hm-rpc.1.KEQ0970715.2.ENERGY_COUNTER</field></block></value></block></value> ! <next><block type="update" id="%MP4hj@kRv[KKBd1R@]2"><mutation delay_input="false"></mutation> ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Start</field> ! <field name="WITH_DELAY">FALSE</field> ! <value name="VALUE"><block type="variables_get" id="Y^+77RbeurCzy{9F(~/"><field name="VAR">VerbrauchStart</field></block></value></block></next></block></next></block></next></block></statement>
      ! <value name="IF1"><block type="logic_compare" id="5S6duG%A(@%K:yQp(/V+"><field name="OP">LTE</field>
      ! <value name="A"><block type="get_value" id="Xv[.s+M
      Lu9aGSY]1e"><field name="ATTR">val</field>
      ! <field name="OID">hm-rpc.1.KEQ0970715.4.DECISION_VALUE</field></block></value>
      ! <value name="B"><block type="text" id="15gvtA#m1(0JAA8{n5MH"><field name="TEXT">0</field></block></value></block></value>
      ! <statement name="DO1"><block type="update" id="DWC}s{Uki+L_IZA+IJMi"><mutation delay_input="false"></mutation>
      ! <field name="OID">javascript.0.Waschmaschine.Pause</field>
      ! <field name="WITH_DELAY">FALSE</field>
      ! <value name="VALUE"><block type="logic_boolean" id="Ng,8l*(i,p5sQ)heg{1G"><field name="BOOL">TRUE</field></block></value>
      ! <next><block type="timeouts_settimeout" id="42@Df/A1.eVQK@9t*xo"><field name="NAME">timeout</field> ! <field name="DELAY">5</field> ! <field name="UNIT">sec</field> ! <statement name="STATEMENT"><block type="controls_if" id="ck^NW61VZp;vn+F[4z"><value name="IF0"><block type="logic_compare" id="k/u^QvfR8VydE|xv8Pum"><field name="OP">EQ</field> ! <value name="A"><block type="get_value" id="+D%Wu%W5AXAL+G*z-^v="><field name="ATTR">val</field> ! <field name="OID">javascript.0.Waschmaschine.Pause</field></block></value> ! <value name="B"><block type="logic_boolean" id="B4Q^ph]+Nit].pD5y|GC"><field name="BOOL">TRUE</field></block></value></block></value> ! <statement name="DO0"><block type="update" id="lk7Vbg]olI)vr.|3quC"><mutation delay_input="true"></mutation>
      ! <field name="OID">javascript.0.Waschmaschine.läuft</field>
      ! <field name="WITH_DELAY">TRUE</field>
      ! <field name="DELAY_MS">1</field>
      ! <field name="UNIT">min</field>
      ! <field name="CLEAR_RUNNING">FALSE</field>
      ! <value name="VALUE"><block type="logic_boolean" id="9=jp7XRV,qf|]ZtP.,zz"><field name="BOOL">FALSE</field></block></value>
      ! <next><block type="timeouts_settimeout" id="jui_xi,s|o^Ra3Ef?N3"><field name="NAME">timeout2</field> ! <field name="DELAY">75</field> ! <field name="UNIT">sec</field> ! <statement name="STATEMENT"><block type="controls_if" id="j5^+]CFdi/``hc*A,[J]"><value name="IF0"><block type="logic_compare" id="4fxjL9g-wvaJXW%gOGq2"><field name="OP">EQ</field> ! <value name="A"><block type="get_value" id="-|jeMEwk|f!qHE~K%A}E"><field name="ATTR">val</field> ! <field name="OID">javascript.0.Waschmaschine.läuft</field></block></value> ! <value name="B"><block type="logic_boolean" id="bheiJ0y2Vjd4Vlx=eUIT"><field name="BOOL">FALSE</field></block></value></block></value> ! <statement name="DO0"><block type="variables_set" id="klhn}B|(Riz7LE9u2A]"><field name="VAR">VerbrauchEnde</field>
      ! <value name="VALUE"><block type="math_rndfixed" id="XOLg=lBWssg[j.Mb~}:-"><field name="n">2</field>
      ! <value name="x"><shadow type="math_number" id=",DJhZ)]+%PDUX@^5L##"><field name="NUM">3.1234</field></shadow>
      ! <block type="get_value" id="%R+HpZYJ,%zY,EPd|jM3"><field name="ATTR">val</field>
      ! <field name="OID">hm-rpc.1.KEQ0970715.2.ENERGY_COUNTER</field></block></value></block></value>
      ! <next><block type="update" id="u9Uq{S6ypn}6.Y6=nW"><mutation delay_input="false"></mutation>
      ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Ende</field>
      ! <field name="WITH_DELAY">FALSE</field>
      ! <value name="VALUE"><block type="variables_get" id="W/Q+idurR;7*c,2(0}K
      "><field name="VAR">VerbrauchEnde</field></block></value>
      ! <next><block type="variables_set" id="{4eIG~iCT#4c.TcODlg"><field name="VAR">Verbrauchwh</field> ! <value name="VALUE"><block type="math_arithmetic" id=".Pf[t_.F;KP1bFrk4/*["><field name="OP">MINUS</field> ! <value name="A"><shadow type="math_number" id="Sy=M2-^K@qm,m^~(:qw"><field name="NUM">1</field></shadow>
      ! <block type="variables_get" id="8YxF5BmtSNv2x6xaMrTC"><field name="VAR">VerbrauchEnde</field></block></value>
      ! <value name="B"><shadow type="math_number" id="{vVsjkButj1?]favCw-p"><field name="NUM">1</field></shadow>
      ! <block type="variables_get" id="G,XF%EBT+bQ3P6L{IHq"><field name="VAR">VerbrauchStart</field></block></value></block></value>
      ! <next><block type="update" id="?6+V!7yLIFWMruIW5Dw,"><mutation delay_input="true"></mutation>
      ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Durchgang_Wh</field>
      ! <field name="WITH_DELAY">TRUE</field>
      ! <field name="DELAY_MS">1000</field>
      ! <field name="UNIT">ms</field>
      ! <field name="CLEAR_RUNNING">FALSE</field>
      ! <value name="VALUE"><block type="variables_get" id="JTNGDPHnZ8Kas3Ebu=d!"><field name="VAR">Verbrauchwh</field></block></value>
      ! <next><block type="update" id="TRj6I;A?]Pg4ubRq1^IC"><mutation delay_input="true"></mutation>
      ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Durchgang</field>
      ! <field name="WITH_DELAY">TRUE</field>
      ! <field name="DELAY_MS">2000</field>
      ! <field name="UNIT">ms</field>
      ! <field name="CLEAR_RUNNING">FALSE</field>
      ! <value name="VALUE"><block type="math_arithmetic" id="#=9vb2]f
      xZf5pe;~gq"><field name="OP">DIVIDE</field>
      ! <value name="A"><shadow type="math_number" id="GvXc^Mmr%eK-XC
      W3[qU"><field name="NUM">1</field></shadow>
      ! <block type="variables_get" id="?KWVia.d2WJ#u~?eY{Ih"><field name="VAR">Verbrauchwh</field></block></value>
      ! <value name="B"><shadow type="math_number" id="Q,:ZA0~+M3|6kl9QlHJ;"><field name="NUM">1000</field></shadow></value></block></value>
      ! <next><block type="variables_set" id="U%%Cnf1M@7UB5HE+GG@"><field name="VAR">VerbrauchKWH</field> ! <value name="VALUE"><block type="get_value" id="ZvS5DC/8Mr517f)t(q+_"><field name="ATTR">val</field> ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Durchgang</field></block></value> ! <next><block type="variables_set" id="1.Q_|jzDF^L7LEivN%R"><field name="VAR">VerbrauchEuro</field>
      ! <value name="VALUE"><block type="math_arithmetic" id="ao=K;rMed3Fm^YW^T7n"><field name="OP">MULTIPLY</field> ! <comment pinned="false" h="80" w="160">30 Cent je kWh im Durchschnitt</comment> ! <value name="A"><shadow type="math_number" id="GvXc^Mmr%eK-XC*W3[qU"><field name="NUM">1</field></shadow> ! <block type="variables_get" id="ArgY0*gV~[~,A3=:vR_r"><field name="VAR">VerbrauchKWH</field></block></value> ! <value name="B"><shadow type="math_number" id="xDWPktTbY{,#li-MgBR"><field name="NUM">0.3</field></shadow></value></block></value>
      ! <next><block type="update" id="6lqp-:BjBLdt78Hz6I0M"><mutation delay_input="false"></mutation>
      ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Euro</field>
      ! <field name="WITH_DELAY">FALSE</field>
      ! <value name="VALUE"><block type="variables_get" id="6]mR~QXV+!-1nABliqx"><field name="VAR">VerbrauchEuro</field></block></value> ! <next><block type="control" id="w?!iHMv4[@[?Io[#o|4[" collapsed="true" disabled="true"><mutation delay_input="true"></mutation> ! <field name="OID">alexa2.0.Echo-Devices.G2A0P30883770D74.Commands.speak</field> ! <field name="WITH_DELAY">TRUE</field> ! <field name="DELAY_MS">5</field> ! <field name="UNIT">sec</field> ! <field name="CLEAR_RUNNING">FALSE</field> ! <value name="VALUE"><block type="text" id="e;=Gu_6SI!Z=[s_sZGU5"><field name="TEXT">Die Waschmaschine ist fertig</field></block></value> ! <next><block type="control" id="}uSa0mvb+qttbS{u]k;A" collapsed="true" disabled="true"><mutation delay_input="true"></mutation> ! <field name="OID">alexa2.0.Echo-Devices.G2A0P30883770D74.Commands.speak</field> ! <field name="WITH_DELAY">TRUE</field> ! <field name="DELAY_MS">10</field> ! <field name="UNIT">sec</field> ! <field name="CLEAR_RUNNING">FALSE</field> ! <value name="VALUE"><block type="text_join" id="-yyBVQoCuIy8kEfVUkt1"><mutation items="3"></mutation> ! <value name="ADD0"><block type="text" id="S6F+4Z,]l|n,0@v9^@]"><field name="TEXT">Die Kosten betragen</field></block></value>
      ! <value name="ADD1"><block type="get_value" id="QS^_!~MGBhSrPo5}KmMK"><field name="ATTR">val</field>
      ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Euro</field></block></value>
      ! <value name="ADD2"><block type="text" id="VsL3q5qeSY[e}]3f@8Wn"><field name="TEXT">Euro</field></block></value></block></value>
      ! <next><block type="control" id="@oH@,9p!l~Sbq,CYI+3n" collapsed="true" disabled="true"><mutation delay_input="true"></mutation>
      ! <field name="OID">alexa2.0.Echo-Devices.G2A0P30883770D74.Commands.speak</field>
      ! <field name="WITH_DELAY">TRUE</field>
      ! <field name="DELAY_MS">15</field>
      ! <field name="UNIT">sec</field>
      ! <field name="CLEAR_RUNNING">FALSE</field>
      ! <value name="VALUE"><block type="text_join" id="_16oda87i;A=fFKyxfIf"><mutation items="3"></mutation>
      ! <value name="ADD0"><block type="text" id="n#S4Ve^|z)~Km,T:]iW"><field name="TEXT">Es wurden</field></block></value> ! <value name="ADD1"><block type="get_value" id="dd4z*01[D6v59O=[:;Sh"><field name="ATTR">val</field> ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Durchgang</field></block></value> ! <value name="ADD2"><block type="text" id="Qq^9bI[?e!3ca]Wx6.R"><field name="TEXT">Kilowattstunden verbraucht</field></block></value></block></value>
      ! <next><block type="pushover" id="ck#N|y2Ag3QN4;#4koX." collapsed="true" disabled="true"><field name="INSTANCE">.1</field>
      ! <field name="PRIORITY">0</field>
      ! <value name="MESSAGE"><shadow type="text" id="m8xnWR](Ol1U:dTkU~4"><field name="TEXT">Die Waschmaschine ist fertig</field></shadow>
      ! <block type="text_join" id="6-D,x5LHVQWNWN8UG~85"><mutation items="6"></mutation>
      ! <value name="ADD0"><block type="text" id="z-iMocNA5WQ#;6icpFU"><field name="TEXT">Es wurden</field></block></value> ! <value name="ADD1"><block type="get_value" id="|uPgJPN8Wx8hHxU0gPE"><field name="ATTR">val</field>
      ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Durchgang</field></block></value>
      ! <value name="ADD2"><block type="text" id="Ug^Q@Q6aFc71%AWN#[iE"><field name="TEXT">Kilowattstunden verbraucht.</field></block></value>
      ! <value name="ADD3"><block type="text" id="U7%PW3,%w)SLVrL1eA
      H"><field name="TEXT">Die Kosten betragen</field></block></value>
      ! <value name="ADD4"><block type="get_value" id="?/KC4-b1xe~FiA0;UX.R"><field name="ATTR">val</field>
      ! <field name="OID">javascript.0.Waschmaschine.Verbrauch_Euro</field></block></value>
      ! <value name="ADD5"><block type="text" id="h:_rW6L:+f:NfiWl,j7"><field name="TEXT">Euro</field></block></value></block></value>
      ! <value name="TITLE"><block type="text" id="Hy
      -aOv~h6Pi]e4@3zcZ"><field name="TEXT">Die Waschmaschine ist fertig</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></statement></block></next></block></statement></block></statement></block></next></block></statement></block></statement></block></xml>

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

        Füge doch mal ein Paar Blöcke mit Debug ein zur logausgabe damit du siehst wo und wie es abgearbeitet wird.

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

          Habe ich - jeder Befehl/jede Anweisung wird abgearbeitet. Lediglich die Berechnungen stimmen nicht bzw. es kommt wie in den Datenpunkten zu sehen Null oder 0 heraus.

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

            Wie sind die DP's denn angelegt? Als Zahl oder als etwas anderes?

            Hast du mal statt dem Aktualisiere Block den Steuere oder Schreibe Block versucht?

            Bin leider auch kein Script Profi.

            Bei mir funktioniert es mit Aktualisieren allerdings.

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

              Die DPs sind als Zahl ohne min/max Wert angelegt.

              Bisher nicht ausprobiert - klappt ja bei zwei Werten.

              Werde ich mal versuchen…

              9401_dp_infos.png

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

                Ein erstellter DP für eine Zahl aus einer Berechnung sieht bei mir so aus:

                999_datenpunkt.jpg

                1 Reply Last reply Reply Quote 0
                • R
                  RappiRN Most Active last edited by

                  Kann es sein, dass du den falschen Datenpunkt abfragst? Und warum hast du dafür einen Textblock verwendet, das sind doch Zahlen!

                  Ich verwende "Power" zur Anzeige, da wird die Leistung ausgegeben! Bei meinem HM-Gerät unter Punkt 2

                  Enrico

                  1 Reply Last reply Reply Quote 0
                  • S
                    Stormbringer last edited by

                    Bluefox hat doch jetzt einen „Statistic“ Adapter geschrieben der das erledigen soll. Wenn du so nicht weiter kommst, eventuell mit dem 😉

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

                      @RappiRN:

                      Kann es sein, dass du den falschen Datenpunkt abfragst? Und warum hast du dafür einen Textblock verwendet, das sind doch Zahlen!

                      Ich verwende "Power" zur Anzeige, da wird die Leistung ausgegeben! Bei meinem HM-Gerät unter Punkt 2

                      Enrico `

                      Ich denke nicht dass der falsche DP abgefragt wird. Mit dem Textblock auf abfrage 1 oder 0 funktioniert die Logik. Mittlerweile alles mehrfach geprüft.

                      Im Kanal zwei frage ich den Punkt: HM-ES-PMSw1:2.ENERGY_COUNTER ab. Dort werden mir die Wattstunden ausgegeben.

                      Ziel ist es die Differenz der Wattstunden zu Beginn und beim Ende des Waschvorgangs zu erhalten. Das bekomme ich auch wunderbar.

                      Danach - also das Subtrahieren von Ende - Start. Da erhalte ich dann die Nullwerte und alle weiteren Berechnungen wie kWh und € sind damit auch null…

                      Danke für die Hinweise.

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

                        @Stormbringer:

                        Bluefox hat doch jetzt einen „Statistic“ Adapter geschrieben der das erledigen soll. Wenn du so nicht weiter kommst, eventuell mit dem 😉 `

                        Dann ist ja auch irgendwo der Reiz weg :lol:

                        Will das schon hinbekommen und verstehen :shock:

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

                          Ich habe fast die Vermutung, dass es was mit dem Timing zu tun hat…

                          Wie verhält sich ein Skript-Befehl/Anweisung, wenn man Verzögerung einschaltet?

                          -> werden dann die weiteren (darunterliegenden Befehle) erst danach abgearbeitet?

                          Ist es notwendig alles in Variablen zu schreiben oder kann man mit Datenpunkten direkt rechnen?

                          Danke vorab für kurze Info hierzu.

                          PS: Versuche mal einen weiteren Timeout einzubauen..

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

                            aktualisiere DPkWh mit Verbrauchwh/1000
                            setze VerbrauchkWh auf Wert von DPkWh
                            

                            funktioniert nicht, da die Akrualisierung eines Datenpunktes nicht sofort erfolgt und man so einen alten Wert aus dem Datenpunkt erhält. Was funktionieren sollte:

                            setze VerbrauchkWh auf Verbrauchwh/1000
                            aktualisiere DPkWh mit VerbrauchkWh
                            
                            1 Reply Last reply Reply Quote 0
                            • nukleuz
                              nukleuz last edited by

                              Hallo Paul53,

                              mit Sicherheit nicht alles sauber im Skript - danke für den Hinweis.

                              Doch irgendwie hat es was mit dem Timing zu tun gehabt. Habe jetzt genau an der Stelle die du beschrieben hattest einen TimeOut (3000ms) eingebaut und alle Datenpunkte erhalten die korrekten Werte ergo es wird nun endlich gerechnet.

                              Werde auch versuchen deinen Hinweis noch einzubauen, denn das macht Sinn!

                              9401_blockly_wm_03.png

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

                                Danke für eure Hilfe - ich belasse erst einmal bei den TimeOuts, damit wird gerechnet.

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                806
                                Online

                                31.8k
                                Users

                                79.9k
                                Topics

                                1.3m
                                Posts

                                5
                                14
                                2596
                                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