Skip to content

Instantly share code, notes, and snippets.

@dnoegel
Created August 26, 2023 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dnoegel/51339bb9de2ced510f1420ee088a801d to your computer and use it in GitHub Desktop.
Save dnoegel/51339bb9de2ced510f1420ee088a801d to your computer and use it in GitHub Desktop.
Blockly
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="Kl3S0K7)wS:E#~kmp_`|">dec</variable>
<variable id="Wu=u[10[PLwu)p_g$2ZM">number</variable>
<variable id="u?6#BJh2Bp((1W3u)Vnf">bitPosition</variable>
<variable id="7vvn=,V[2B9HKo=2Z[%+">einspeisung</variable>
<variable type="timeout" id="timeout2">timeout2</variable>
<variable type="timeout" id="timeout">timeout</variable>
</variables>
<block type="comment" id="[}5gf6Mw2aLTH#L`}tJa" x="-888" y="-787">
<field name="COMMENT">MPPT Leistung ausmultiplizieren</field>
<next>
<block type="on_ext" id="mg~(P98c2ww8_7N|ZVzF">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="O#IIZHS:5H*LR44s?!ue">
<field name="oid">modbus.0.inputRegisters.5010_MPPT_1_Voltage</field>
</shadow>
</value>
<value name="OID1">
<shadow type="field_oid" id="e%uf)DAN#AD=U||`tbag">
<field name="oid">modbus.0.inputRegisters.5012_MPPT_2_Voltage</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="update" id="6cU9,FP)Q:CH/;Zto-nJ" inline="false">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">0_userdata.0.PV.MPPT1</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_round" id="s7Z4aK.FV8|vZjm!)c$3">
<field name="OP">ROUND</field>
<value name="NUM">
<shadow type="math_number" id="im$F+KBGG^UZRq%pXvo7">
<field name="NUM">3.1</field>
</shadow>
<block type="math_arithmetic" id="$sxO)h(^+L-U?W5vJh!M">
<field name="OP">MULTIPLY</field>
<value name="A">
<shadow type="math_number" id="Pj%06fiDunc:;}Gd~.LS">
<field name="NUM">1</field>
</shadow>
<block type="get_value" id="C%UwT(M*EoHX=#.00+CG" inline="false">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.5010_MPPT_1_Voltage</field>
</block>
</value>
<value name="B">
<shadow type="math_number" id="mm*4HeON#-IAM/[tXK}_">
<field name="NUM">1</field>
</shadow>
<block type="get_value" id="@/|u-(0)zS{{MdtxB|H|" inline="false">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.5011_MPPT_1_Current</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="update" id="R;IJi3D5^g;Q*=Dp}iLJ" inline="false">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">0_userdata.0.PV.MPPT2</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_round" id="H1$n0aUl@lmL`9ceJ%ny">
<field name="OP">ROUND</field>
<value name="NUM">
<shadow type="math_number" id="OIWSPHrl*=:##g=M)MvU">
<field name="NUM">3.1</field>
</shadow>
<block type="math_arithmetic" id="n;GJbv*nop*mppM.lsYG">
<field name="OP">MULTIPLY</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
<block type="get_value" id=");QE{7LN-J=3lqu7NsrA" inline="false">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.5012_MPPT_2_Voltage</field>
</block>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
<block type="get_value" id="6O3LrA-xlx4Osra*PZrP" inline="false">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.5013_MPPT_2_Current</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
<block type="procedures_defcustomnoreturn" id="lz{Fy{/wE{2-%uVacZd0" x="-1463" y="-388">
<mutation statements="false">
<arg name="dec" varid="Kl3S0K7)wS:E#~kmp_`|"></arg>
</mutation>
<field name="NAME">extractRunningStates</field>
<field name="SCRIPT">ZnVuY3Rpb24gZGVjVG9CaXQoZGVjLCBiaXRQb3NpdGlvbikgewogICAgcmV0dXJuIChkZWMgJiAoMSA8PCBiaXRQb3NpdGlvbikpID09PSAwID8gZmFsc2UgOiB0cnVlOwp9CgovLyBDcmVhdGVzIGEgc3RhdGUgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0CmZ1bmN0aW9uIGNyZWF0ZVN0YXRlSWZOb3RFeGlzdHMoc3RhdGUsIG5hbWUpCnsKICAgIC8vIGNyZWF0ZVN0YXRlKHN0YXRlLCAwLCB0cnVlLCB7bmFtZTogbmFtZSwgIHR5cGU6ICJudW1iZXIiLCByb2xlOiAndmFsdWUnfSwgZnVuY3Rpb24gKCkge30pOyAgICAKICAgIGlmICggIWV4aXN0c1N0YXRlKHN0YXRlICkpIHsKICAgICAgICBjcmVhdGVTdGF0ZShzdGF0ZSwgMCwgZmFsc2UsIHtuYW1lOiBuYW1lLCAgdHlwZTogIm51bWJlciIsIHJvbGU6ICd2YWx1ZSd9LCBmdW5jdGlvbiAoKSB7fSk7ICAgIAogICAgfSAKfQoKLy8gQ3JlYXRlIHN0YXRlcwpjcmVhdGVTdGF0ZUlmTm90RXhpc3RzKCIwX3VzZXJkYXRhLjAuUFYuUHZUb0xvYWQiLCAiUG93ZXIgZnJvbSBQViB0byBsb2FkIik7CmNyZWF0ZVN0YXRlSWZOb3RFeGlzdHMoIjBfdXNlcmRhdGEuMC5QVi5QdlRvQmF0IiwgIlBvd2VyIGZyb20gUFYgdG8gYmF0Iik7CmNyZWF0ZVN0YXRlSWZOb3RFeGlzdHMoIjBfdXNlcmRhdGEuMC5QVi5QdlRvR3JpZCIsICJQb3dlciBmcm9tIFBWIHRvIGdyaWQiKTsKCmNyZWF0ZVN0YXRlSWZOb3RFeGlzdHMoIjBfdXNlcmRhdGEuMC5QVi5CYXRUb0xvYWQiLCAiUG93ZXIgZnJvbSBCYXQgdG8gbG9hZCIpOwpjcmVhdGVTdGF0ZUlmTm90RXhpc3RzKCIwX3VzZXJkYXRhLjAuUFYuQmF0VG9HcmlkIiwgIlBvd2VyIGZyb20gQmF0IHRvIGdyaWQiKTsKCmNyZWF0ZVN0YXRlSWZOb3RFeGlzdHMoIjBfdXNlcmRhdGEuMC5QVi5HcmlkVG9Mb2FkIiwgIlBvd2VyIGZyb20gZ3JpZCB0byBsb2FkIik7CmNyZWF0ZVN0YXRlSWZOb3RFeGlzdHMoIjBfdXNlcmRhdGEuMC5QVi5HcmlkVG9CYXQiLCAiUG93ZXIgZnJvbSBHcmlkdG8gYmF0dGVyeSIpOwoKY3JlYXRlU3RhdGVJZk5vdEV4aXN0cygiMF91c2VyZGF0YS4wLlBWLlNpZ25lZEJhdCIsICJCYXR0ZXJ5IGJ1dCB3aXRoIG1pbnVzIHNpZ24gZm9yIGNoYXJnaW5nIik7CgoKLy8gRGVjb2RlIHJ1bm5pbmcgc3RhdGUgZmxhZ3MKJHBvd2VyR2VuZXJhdGVkRnJvbVBWID0gZGVjVG9CaXQoZGVjLCAwKTsKJGJhdHRlcnlDaGFyZ2luZyA9IGRlY1RvQml0KGRlYywgMSk7CiRiYXR0ZXJ5RGlzY2hhcmdpbmcgPSBkZWNUb0JpdChkZWMsIDIpOwokbG9hZEFjdGl2ZSA9IGRlY1RvQml0KGRlYywgMyk7CiRwb3dlckZlZWRJbnRvR3JpZCA9IGRlY1RvQml0KGRlYywgNCk7CiRwb3dlckltcG9ydEZyb21HcmlkID0gZGVjVG9CaXQoZGVjLCA1KTsKJHBvd2VyR2VuZXJhdGVkRnJvbUxvYWQgPSBkZWNUb0JpdChkZWMsIDcpOwoKLy8gU2F2ZSBydW5uaW5nIHN0YXRlIG1vcmUgc3BlYWtpbmcgZmllbGRzCnNldFN0YXRlKCIwX3VzZXJkYXRhLjAuUFYuUG93ZXJHZW5lcmF0ZWRGcm9tUFYiLCAkcG93ZXJHZW5lcmF0ZWRGcm9tUFYsIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlDaGFyZ2luZyIsICRiYXR0ZXJ5Q2hhcmdpbmcsIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlEaXNjaGFyZ2luZyIsICRiYXR0ZXJ5RGlzY2hhcmdpbmcsIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkxvYWRBY3RpdmUiLCAkbG9hZEFjdGl2ZSwgdHJ1ZSk7CnNldFN0YXRlKCIwX3VzZXJkYXRhLjAuUFYuUG93ZXJGZWVkSW50b0dyaWQiLCAkcG93ZXJGZWVkSW50b0dyaWQsIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLlBvd2VySW1wb3J0RnJvbUdyaWQiLCAkcG93ZXJJbXBvcnRGcm9tR3JpZCwgdHJ1ZSk7CnNldFN0YXRlKCIwX3VzZXJkYXRhLjAuUFYuUG93ZXJHZW5lcmF0ZWRGcm9tTG9hZCIsICRwb3dlckdlbmVyYXRlZEZyb21Mb2FkLCB0cnVlKTsKCi8vIFJlYWQgY3VycmVudCBwb3dlciBsZXZlbHMgb2YgYmF0LCBwdiwgbG9hZCBhbmQgZ3JpZAokbG9hZCA9IGdldFN0YXRlKCJtb2RidXMuMC5pbnB1dFJlZ2lzdGVycy4xMzAwN19Mb2FkX3Bvd2VyXyIpLnZhbDsKJGdyaWQgPSBnZXRTdGF0ZSgibW9kYnVzLjAuaW5wdXRSZWdpc3RlcnMuMTMwMDlfRXhwb3J0X3Bvd2VyIikudmFsOwokcHYgPSBnZXRTdGF0ZSgibW9kYnVzLjAuaW5wdXRSZWdpc3RlcnMuNTAxNl9Ub3RhbF9EQ19Qb3dlciIpLnZhbDsKLy8kcHYgPSBnZXRTdGF0ZSgibW9kYnVzLjAuaW5wdXRSZWdpc3RlcnMuMTMwMzNfVG90YWxfYWN0aXZlX3Bvd2VyIikudmFsOyAvLyBUaGlzIHJlZ2lzdGVyIGdpdmVzIG1vcmUgcGxhdXNpYmxlIHZhbHVlcyByZWdhcmRpbmcgcHZUb0dyaWQgYW5kIHRoZSBhY3R1YWwgZ3JpZCB2YWx1ZXMuIEJ1dCB3YXMgd3JvbmcgYnkgYSBmZXcgMTAwIHdhdHRzIGluIHRoZSBtb3JudW5nCiRiYXR0ZXJ5ID0gZ2V0U3RhdGUoIm1vZGJ1cy4wLmlucHV0UmVnaXN0ZXJzLjEzMDIxX0JhdHRlcnlfcG93ZXJfIikudmFsOwoKLy8gV3JpdGUgc2lnbmVkIGJhdAoKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5TaWduZWRCYXQiLCAkYmF0dGVyeUNoYXJnaW5nID8gJGJhdHRlcnkgKiAtMSA6ICRiYXR0ZXJ5LCB0cnVlKTsKCi8vIENhbGN1bGF0ZSBQVgokcHZUb0JhdCA9IDA7CiRwdlRvTG9hZCA9IDA7CiRwdlRvR3JpZCA9IDA7CiRsb2FkUmVtYWluaW5nID0gJGxvYWQ7CmlmICgkcG93ZXJHZW5lcmF0ZWRGcm9tUFYpIHsKICAgICRyZW1haW5pbmcgPSAkcHY7CiAgICBpZiAoJHJlbWFpbmluZyA+ICRsb2FkUmVtYWluaW5nKSB7CiAgICAgICAgJHB2VG9Mb2FkID0gJGxvYWRSZW1haW5pbmc7CiAgICAgICAgJHJlbWFpbmluZyAtPSAkbG9hZDsKICAgICAgICAkbG9hZFJlbWFpbmluZyA9IDA7CiAgICB9IGVsc2UgewogICAgICAgICRwdlRvTG9hZCA9ICRyZW1haW5pbmc7CiAgICAgICAgJGxvYWRSZW1haW5pbmcgPSAkbG9hZCAtICRyZW1haW5pbmc7CiAgICAgICAgJHJlbWFpbmluZyA9IDA7CiAgICAgICAgCiAgICB9CiAgICAKICAgIGlmICgkYmF0dGVyeUNoYXJnaW5nKSB7CiAgICAgICAgaWYgKCRyZW1haW5pbmcgPiAkYmF0dGVyeSkgeyAgICAgICAgICAgIAogICAgICAgICAgICAkcHZUb0JhdCA9ICRiYXR0ZXJ5OwogICAgICAgICAgICAkcmVtYWluaW5nIC09ICRiYXR0ZXJ5OwogICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICRwdlRvQmF0ID0gJHJlbWFpbmluZzsKICAgICAgICAgICAgJHJlbWFpbmluZyA9IDA7CiAgICAgICAgfQogICAgfQogICAgCiAgICBpZiAoJGdyaWQgPiAwKSB7CiAgICAgICAgJHB2VG9HcmlkID0gTWF0aC5taW4oJGdyaWQsICRyZW1haW5pbmcpOwogICAgfQp9CnNldFN0YXRlKCIwX3VzZXJkYXRhLjAuUFYuUHZUb0xvYWQiLCAkcHZUb0xvYWQpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLlB2VG9CYXQiLCAkcHZUb0JhdCk7CnNldFN0YXRlKCIwX3VzZXJkYXRhLjAuUFYuUHZUb0dyaWQiLCAkcHZUb0dyaWQpOwoKLy8gQ2FsY3VsYXRlIEJhdAokYmF0VG9Mb2FkID0gMDsKJGJhdFRvR3JpZCA9IDA7CmlmICgkYmF0dGVyeURpc2NoYXJnaW5nKSB7CiAgICAkcmVtYWluaW5nID0gJGJhdHRlcnk7CiAgICBpZiAoJHJlbWFpbmluZyA+ICRsb2FkUmVtYWluaW5nKSB7CiAgICAgICAgJGJhdFRvTG9hZCA9ICRsb2FkUmVtYWluaW5nOwogICAgICAgICRyZW1haW5pbmcgLT0gJGxvYWRSZW1haW5pbmc7CiAgICAgICAgJGxvYWRSZW1haW5pbmcgPSAwOwogICAgfSBlbHNlIHsKICAgICAgICAkYmF0VG9Mb2FkID0gJHJlbWFpbmluZzsKICAgICAgICAkbG9hZFJlbWFpbmluZyAtPSAkcmVtYWluaW5nOwogICAgICAgICRyZW1haW5pbmcgPSAwOyAgICAgICAgCiAgICB9CiAgICAKICAgIGlmICgkcG93ZXJGZWVkSW50b0dyaWQpIHsKICAgICAgICAkYmF0VG9HcmlkID0gTWF0aC5taW4oJGdyaWQsICRyZW1haW5pbmcpOwogICAgfQp9CgpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdFRvTG9hZCIsICRiYXRUb0xvYWQpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdFRvR3JpZCIsICRiYXRUb0dyaWQpOwoKLy8gQ2FsY3VsYXRlIGdyaWQKJGdyaWRUb0JhdCA9IDA7CiRncmlkVG9Mb2FkID0gMDsKaWYgKCRncmlkIDwgMCkgewogICAgJHJlbWFpbmluZyA9IE1hdGguYWJzKCRncmlkKTsKICAgIGlmICgkcmVtYWluaW5nID4gJGxvYWRSZW1haW5pbmcpIHsKICAgICAgICAkZ3JpZFRvTG9hZCA9ICRsb2FkUmVtYWluaW5nOwogICAgICAgICRyZW1haW5pbmcgLT0gJGxvYWRSZW1haW5pbmc7CiAgICAgICAgJGxvYWRSZW1haW5pbmcgPSAwOwogICAgfSBlbHNlIHsKICAgICAgICAkZ3JpZFRvTG9hZCA9ICRyZW1haW5pbmc7CiAgICAgICAgJGxvYWRSZW1haW5pbmcgLT0gJHJlbWFpbmluZzsKICAgICAgICAkcmVtYWluaW5nID0gMDsgICAgICAgIAogICAgfQogICAgCiAgICBpZiAoJGJhdHRlcnlDaGFyZ2luZykgewogICAgICAgICRncmlkVG9CYXQgPSBNYXRoLm1pbigkYmF0dGVyeSwgJHJlbWFpbmluZyk7OwogICAgfQp9CgpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkdyaWRUb0xvYWQiLCAkZ3JpZFRvTG9hZCk7CnNldFN0YXRlKCIwX3VzZXJkYXRhLjAuUFYuR3JpZFRvQmF0IiwgJGdyaWRUb0JhdCk7Cgo=</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="comment" id="@eWMPWI}Jgv=g!gqi9^l" x="-1437" y="-338">
<field name="COMMENT">Bei Änderung von Status oder Wirkleistung</field>
<next>
<block type="comment" id="Y9+|[eH6XJ^+Zi6BgxCr">
<field name="COMMENT">Running state + Leistungen extrahieren</field>
<next>
<block type="on_ext" id="oD@{|ayE_UpXMeFx-JMY">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="*g.-.]^8Mm,aY6r{bR_]">
<field name="oid">modbus.0.inputRegisters.13000_Running_State</field>
</shadow>
</value>
<value name="OID1">
<shadow type="field_oid" id="!#`V7QQEcDZ9TNGil_#0">
<field name="oid">modbus.0.inputRegisters.13007_Load_power_</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="timeouts_wait" id="xglFIvzQXQgKW*EoUK!$">
<field name="DELAY">50</field>
<field name="UNIT">ms</field>
<next>
<block type="procedures_callcustomnoreturn" id="|-^)+QIi0Ryjkn9vRV[u">
<mutation name="extractRunningStates">
<arg name="dec"></arg>
</mutation>
<value name="ARG0">
<block type="get_value" id="/5f;tp-/R|ieNpP`4xrL">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13000_Running_State</field>
</block>
</value>
<next>
<block type="update" id="y%UWuC0`E!0g|8P#vK1M" inline="false">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">0_userdata.0.PV.EnergyConsumptionToday</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_rndfixed" id="*@;EF1#t%G#`yU]Bx0L@" inline="false">
<field name="n">1</field>
<value name="x">
<shadow type="math_number" id="apH8)0nLbYCg^}qU}oI=">
<field name="NUM">3.1234</field>
</shadow>
<block type="math_on_list" id="B`diO,UpC8T732X41zE8">
<mutation op="SUM"></mutation>
<field name="OP">SUM</field>
<value name="LIST">
<block type="lists_create_with" id="O$Dwrp^[Wo^;fcCgzc|/">
<mutation items="3"></mutation>
<value name="ADD0">
<block type="get_value" id="=JvN!E^6E8U@IcT~hU^5">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13016_Daily_direct__Energy_Consumption</field>
</block>
</value>
<value name="ADD1">
<block type="get_value" id="6B?nSAZhUAt`W]=W,327">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13035_Daily_Import_Energy</field>
</block>
</value>
<value name="ADD2">
<block type="get_value" id="2_C8cO)^JzPdeJBsr/b,">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13025_Daily_battery_discharge_Energy</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
<block type="procedures_defcustomreturn" id=")7@7$^bI?;9JiXb,CqbC" x="-437" y="-88">
<mutation statements="false">
<arg name="number" varid="Wu=u[10[PLwu)p_g$2ZM"></arg>
<arg name="bitPosition" varid="u?6#BJh2Bp((1W3u)Vnf"></arg>
</mutation>
<field name="NAME">getBit</field>
<field name="SCRIPT">ICByZXR1cm4gKG51bWJlciAmICgxIDw8IGJpdFBvc2l0aW9uKSkgPT09IDAgPyAwIDogMTsK</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="comment" id="W8B0]%)$Pv/XyA=r~4Mu" x="-863" y="131">
<field name="COMMENT">Alle 10 Minuten: Running States ausgeben</field>
<next>
<block type="schedule" id="A7^UB.AnCV|,aU,!y0)$">
<field name="SCHEDULE">*/10 * * * *</field>
<next>
<block type="procedures_callnoreturn" id="ue$MDE`t@$}v8lDOf.}u">
<mutation name="debug output">
<arg name="dec"></arg>
</mutation>
<value name="ARG0">
<block type="get_value" id="ECcFehd5Ow/i/8k/0|cS">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13000_Running_State</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
<block type="procedures_defnoreturn" id="vv(U!g(@pnn)8_.{bCV|" x="-388" y="163">
<mutation>
<arg name="dec" varid="Kl3S0K7)wS:E#~kmp_`|"></arg>
</mutation>
<field name="NAME">debug output</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
<statement name="STACK">
<block type="comment" id="4Kc|yjIOj/d!+rX^eB8k">
<field name="COMMENT">create some debug messages so we can check state changes in the log after the fact</field>
<next>
<block type="debug" id="KOrPE~?_|7q-iX+hf9B7">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text" id="qi6ijIzs)8YkGt3mXbyd">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="sQoBJpPXUR}I,yDnYLzU">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text" id="@[Qr;#TN3?QNNtRdBFJb">
<field name="TEXT">Power generation</field>
</block>
</value>
<value name="ADD1">
<block type="procedures_callcustomreturn" id="[di$veE=W)etZ1N1csD!">
<mutation name="getBit">
<arg name="number"></arg>
<arg name="bitPosition"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="!.K$T:bqj+}ijHEBEu1O">
<field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
</block>
</value>
<value name="ARG1">
<block type="math_number" id="[?#(KLA~d_4od@i%HKRE">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="debug" id=".tDzA6hZ]hWm/Q1Ki+C}">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="9_`lIMrC@kQZHlIS.BX5">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text" id="+0Y)usl;k0!LReL=@1TA">
<field name="TEXT">Battery charging</field>
</block>
</value>
<value name="ADD1">
<block type="procedures_callcustomreturn" id="l-(`+Hf/C:1.Pr$1TME!">
<mutation name="getBit">
<arg name="number"></arg>
<arg name="bitPosition"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="]k8{NSg3:qwE6y~~PPUG">
<field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
</block>
</value>
<value name="ARG1">
<block type="math_number" id="f|p*H^X]~uRfJ4zwy{V]">
<field name="NUM">1</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="debug" id="#o:4EZCjL=5M?Gw+0O.i">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="OIyVbASBmVYSEM=oZSMm">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text" id="YkP-(f;KKjkroM[%{a;?">
<field name="TEXT">Battery discharging</field>
</block>
</value>
<value name="ADD1">
<block type="procedures_callcustomreturn" id="pGmRj}_+$eQxsP,i1O@L">
<mutation name="getBit">
<arg name="number"></arg>
<arg name="bitPosition"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="VZ2rjX0pe@PD-b0EK.@n">
<field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
</block>
</value>
<value name="ARG1">
<block type="math_number" id="^/WwB;Scl3(cF8[3jylF">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="debug" id="2=ESEy@`?o=2!#~*4.[p">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="SrIP5yY+X.D22D[VrlP$">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text" id="M5Sk=a6?/W8mc@|rtDHZ">
<field name="TEXT">Positive load</field>
</block>
</value>
<value name="ADD1">
<block type="procedures_callcustomreturn" id="UCHG|NH^a829VlS_FOc[">
<mutation name="getBit">
<arg name="number"></arg>
<arg name="bitPosition"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="Mrs-RQx3Z0}OX1FVc!+c">
<field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
</block>
</value>
<value name="ARG1">
<block type="math_number" id="3oaU:Voj|5J0Fn$KdP=^">
<field name="NUM">3</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="debug" id="8*~@Ywry?/piw*O}+,=]">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="*K,z(Z;tM4v-M`VT)=sh">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text" id="QsKlyP=k#wB.`!q2W+XJ">
<field name="TEXT">Power feed into the grid</field>
</block>
</value>
<value name="ADD1">
<block type="procedures_callcustomreturn" id="aknN*P^vup+EdTLM6/yn">
<mutation name="getBit">
<arg name="number"></arg>
<arg name="bitPosition"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="0QUz2T3lebdal%Stjha^">
<field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
</block>
</value>
<value name="ARG1">
<block type="math_number" id="d5~PH;7@M`7kTud**ES.">
<field name="NUM">4</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="debug" id="s[=~4,hPHDd0]0YAO8|u">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="X9{#rK3QZb$[550`!GD$">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text" id="Oe-,=fU/6IGKG3v,/t+0">
<field name="TEXT">Power from the grid</field>
</block>
</value>
<value name="ADD1">
<block type="procedures_callcustomreturn" id="EGn+kHA^EQ1XRJhx!Vhb">
<mutation name="getBit">
<arg name="number"></arg>
<arg name="bitPosition"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="}2agbC4wrjiK^REZrT={">
<field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
</block>
</value>
<value name="ARG1">
<block type="math_number" id=":fd,9cSXwq[{cx76A-+}">
<field name="NUM">5</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="debug" id="hOK+$jW(m-QrUr#W|/n@">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="QJDY}eje)+|3SUH(BZyM">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text" id="hj9k)mHycGoRx9vHO]Q{">
<field name="TEXT">Power from load</field>
</block>
</value>
<value name="ADD1">
<block type="procedures_callcustomreturn" id="Rk4r]0=rc#(qd]Nqjds$">
<mutation name="getBit">
<arg name="number"></arg>
<arg name="bitPosition"></arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="m,$d6J}Ic:=mV:|i0B58">
<field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
</block>
</value>
<value name="ARG1">
<block type="math_number" id=":^V4s@UVYMGm/ada=3N`">
<field name="NUM">7</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="math_on_list" id="sl_hV.M2*b=eFMg@dm{Q" disabled="true" x="-1838" y="287">
<mutation op="SUM"></mutation>
<field name="OP">SUM</field>
<value name="LIST">
<block type="lists_create_with" id="$vK([KFw(%Ewg-e_Ua2H">
<mutation items="3"></mutation>
<value name="ADD0">
<block type="get_value" id="X5d4D8-,*09FrP9sv%7b">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.5002_Daily__Output_Energy</field>
</block>
</value>
<value name="ADD1">
<block type="get_value" id="PWqL%[w:K;v_?%Obs~Kl">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13035_Daily_Import_Energy</field>
</block>
</value>
</block>
</value>
</block>
<block type="comment" id="tc5]-a5|f#d^#)-`TbLn" x="-1037" y="387">
<field name="COMMENT">Überschusskontrolle</field>
<next>
<block type="comment" id=":*ibg;.sf07Hot0_|*r?">
<field name="COMMENT">Wenn eingespeist wird…</field>
<next>
<block type="schedule" id="dy/{h[/S5~y)e#tM)zAW" disabled="true">
<field name="SCHEDULE">* * * * *</field>
<statement name="STATEMENT">
<block type="variables_set" id="I5.$e$hhYP_w`[cP|g(i">
<field name="VAR" id="7vvn=,V[2B9HKo=2Z[%+">einspeisung</field>
<value name="VALUE">
<block type="get_value" id="OH+*g_U@#+E%Y(tCTyTg" inline="false">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13009_Export_power</field>
</block>
</value>
<next>
<block type="comment" id="}:nsS*IVyJ[kuKCisNfW">
<field name="COMMENT">Delay: Kurzfristige Schwankungen glätten</field>
<next>
<block type="timeouts_settimeout" id="A^,Kz;N4G/4DL-h5{+R3">
<field name="NAME">timeout2</field>
<field name="DELAY">20</field>
<field name="UNIT">sec</field>
<statement name="STATEMENT">
<block type="comment" id="/!9c*r$EwoaP+^a!7Nsj">
<field name="COMMENT">Wert nochmal aktuell lesen</field>
<next>
<block type="variables_set" id="BrxR8Smf`0FD@{pF2)fE">
<field name="VAR" id="7vvn=,V[2B9HKo=2Z[%+">einspeisung</field>
<value name="VALUE">
<block type="get_value" id="qk[9h2E!8ayv^@w.yC(w" inline="false">
<field name="ATTR">val</field>
<field name="OID">modbus.0.inputRegisters.13009_Export_power</field>
</block>
</value>
<next>
<block type="comment" id="qs9?IcLq8zRL[1}bX)~Z">
<field name="COMMENT">&gt; 0 = Es wird eingespeist</field>
<next>
<block type="controls_if" id="Ks]6]xX~uzYm:oK1ELhd">
<value name="IF0">
<block type="logic_compare" id="n.}=ts;YDDkh!Xlg#lAJ">
<field name="OP">GT</field>
<value name="A">
<block type="variables_get" id="IY=,(@4cZi,}4m!:6!:S">
<field name="VAR" id="7vvn=,V[2B9HKo=2Z[%+">einspeisung</field>
</block>
</value>
<value name="B">
<block type="math_number" id="rtci8=|nXBfF[28@7=MM">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="timeouts_settimeout" id="kp@Ux=lw.ab@m-obEkoM">
<field name="NAME">timeout</field>
<field name="DELAY">1000</field>
<field name="UNIT">ms</field>
</block>
</statement>
<next>
<block type="comment" id="5U(?]}^Ji~1n*8*k_00T">
<field name="COMMENT">&lt; 0 = Strom wird gekauft</field>
<next>
<block type="controls_if" id="Oe?CqxP28|{O3LZi#;aI">
<value name="IF0">
<block type="logic_compare" id="2+!fjSPVO6W!}p/,?$CV">
<field name="OP">LT</field>
<value name="A">
<block type="variables_get" id="p[h@L5PfD01lfKg@Y5At">
<field name="VAR" id="7vvn=,V[2B9HKo=2Z[%+">einspeisung</field>
</block>
</value>
<value name="B">
<block type="math_number" id="87bH1+jCp-yz40w:N?*L">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</xml>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment