NEWS
[Gelöst] Blockly - Berechnung von Werten mit Objekten klappt nicht
-
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.
Hier das Ergebnis, auch wenn die Werte nicht realistisch (sehr klein) sind (kann nicht jedes Mal die WM waschen lassen)
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="P
z#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+MLu9aGSY]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)v
r.|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]fxZf5pe;~gq"><field name="OP">DIVIDE</field>
! <value name="A"><shadow type="math_number" id="GvXc^Mmr%eK-XCW3[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="xDW
PktTbY{,#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^9
bI[?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="|u
PgJPN8Wx8hHxU0gPE"><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)SLVrL1eAH"><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> -
Füge doch mal ein Paar Blöcke mit Debug ein zur logausgabe damit du siehst wo und wie es abgearbeitet wird.
-
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.
-
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.
-
Die DPs sind als Zahl ohne min/max Wert angelegt.
Bisher nicht ausprobiert - klappt ja bei zwei Werten.
Werde ich mal versuchen…
-
Ein erstellter DP für eine Zahl aus einer Berechnung sieht bei mir so aus:
-
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
-
Bluefox hat doch jetzt einen „Statistic“ Adapter geschrieben der das erledigen soll. Wenn du so nicht weiter kommst, eventuell mit dem
-
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.
-
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:
-
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..
-
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
-
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!
-
Danke für eure Hilfe - ich belasse erst einmal bei den TimeOuts, damit wird gerechnet.