Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. kunigunde

    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

    K
    • Profile
    • Following 0
    • Followers 1
    • Topics 1
    • Posts 17
    • Best 2
    • Groups 1

    kunigunde

    @kunigunde

    2
    Reputation
    21
    Profile views
    17
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    kunigunde Follow
    Starter

    Best posts made by kunigunde

    • RE: [Neuer Adapter] Reolink Kamera

      Aktuelle API Beschreibung von REOLINK:
      https://community.reolink.com/topic/4196/reolink-camera-api-user-guide_v8-updated-in-april-2023

      posted in Entwicklung
      K
      kunigunde
    • RE: Betriebsstundenzähler / Laufzeit / Start

      @pupsi

      Hallo, ich habe dein Blockly genutzt und etwas angepasst.
      Danke für dein Script.
      Jetzt sind nur noch 2 Datenpunkte anzupassen (im Script wird dann nur noch "Trigger_State" genutzt, und außerdem stehen h,m,s zur Verfügung.
      Desweiteren ist jetzt auch ein Durchschnitt integriert.
      (P.S. unnütze Variablen habe ich auch entfernt.)
      0bc9d4fe-286b-495f-99e4-f44b16c48c88-image.png
      Screenshot Blockly:
      2d0cc7aa-bf70-49b6-ae05-f00a61e90253-image.png
      Screenshot Node-red Dashboard:
      72136952-7d73-45e1-b577-a1f914cabf75-image.png
      Stelle wo der Datenpunkt welcher "triggert" geändert wird:
      1643b098-39ac-4a45-a505-6b9edf17d72e-image.png

      <xml xmlns="http://www.w3.org/1999/xhtml">
        <variables>
          <variable type="" id="`._J%HrwB/s_.vuyh?N6">sek</variable>
          <variable type="undefined" id="Laufzeit_Aktuell_s">Laufzeit_Aktuell_s</variable>
          <variable type="" id="WTs)G/fB4r9Mv:`m+3OP">gesamt_sek</variable>
          <variable type="" id="5]288,z*1HXMf%~PfJp4">gesamt_schnitt_sek</variable>
        </variables>
        <block type="procedures_defcustomnoreturn" id="W-nXq2.wZ=32mxVz/7er" x="-812" y="-862">
          <mutation statements="false"></mutation>
          <field name="NAME">Objekte_anlegen</field>
          <field name="SCRIPT">Y3JlYXRlU3RhdGUoJ1B1bXBlLldlcnRlLkFrdHVlbGxfcycsIDAsIHsgbmFtZTogJ0FrdHVlbGxfcycsIGRlc2M6ICdBa3R1ZWxsX3MnLCB0eXBlOiAnbWl4ZWQnLCB1bml0OiAncycsIG1pbjogJzAnLCBtYXg6ICc2MCcscmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUgfSk7IA0KY3JlYXRlU3RhdGUoJ1B1bXBlLldlcnRlLkFrdHVlbGxfbScsIDAsIHsgbmFtZTogJ0FrdHVlbGxfbScsIGRlc2M6ICdBa3R1ZWxsX20nLCB0eXBlOiAnbWl4ZWQnLCB1bml0OiAnbScsIG1pbjogJzAnLCBtYXg6ICc2MCcscmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUgfSk7IA0KY3JlYXRlU3RhdGUoJ1B1bXBlLldlcnRlLkFrdHVlbGxfaCcsIDAsIHsgbmFtZTogJ0FrdHVlbGxfaCcsIGRlc2M6ICdBa3R1ZWxsX2gnLCB0eXBlOiAnbWl4ZWQnLCB1bml0OiAnaCcsIG1pbjogJzAnLCBtYXg6ICcxMDAwMDAwJyxyZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSB9KTsgDQoNCmNyZWF0ZVN0YXRlKCdQdW1wZS5XZXJ0ZS5MZXR6dGVfTGF1ZnplaXRfcycsIDAsIHsgbmFtZTogJ0xldHp0ZV9MYXVmemVpdF9zJywgZGVzYzogJ0xldHp0ZV9MYXVmemVpdF9zJywgdHlwZTogJ21peGVkJywgdW5pdDogJ3MnLCBtaW46ICcwJywgbWF4OiAnNjAnLHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlIH0pOyANCmNyZWF0ZVN0YXRlKCdQdW1wZS5XZXJ0ZS5MZXR6dGVfTGF1ZnplaXRfbScsIDAsIHsgbmFtZTogJ0xldHp0ZV9MYXVmemVpdF9tJywgZGVzYzogJ0xldHp0ZV9MYXVmemVpdF9tJywgdHlwZTogJ21peGVkJywgdW5pdDogJ20nLCBtaW46ICcwJywgbWF4OiAnNjAnLHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlIH0pOyANCmNyZWF0ZVN0YXRlKCdQdW1wZS5XZXJ0ZS5MZXR6dGVfTGF1ZnplaXRfaCcsIDAsIHsgbmFtZTogJ0xldHp0ZV9MYXVmemVpdF9oJywgZGVzYzogJ0xldHp0ZV9MYXVmemVpdF9oJywgdHlwZTogJ21peGVkJywgdW5pdDogJ2gnLCBtaW46ICcwJywgbWF4OiAnMTAwMDAwMCcscmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUgfSk7IA0KDQpjcmVhdGVTdGF0ZSgnUHVtcGUuV2VydGUuTGF1ZnplaXRfU3VtbWVfcycsIDAsIHsgbmFtZTogJ0xhdWZ6ZWl0X1N1bW1lX3MnLCBkZXNjOiAnU3VtbWVfcycsIHR5cGU6ICdtaXhlZCcsIHVuaXQ6ICdzJywgbWluOiAnMCcsIG1heDogJzYwJyxyZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSB9KTsgDQpjcmVhdGVTdGF0ZSgnUHVtcGUuV2VydGUuTGF1ZnplaXRfU3VtbWVfbScsIDAsIHsgbmFtZTogJ0xhdWZ6ZWl0X1N1bW1lX20nLCBkZXNjOiAnU3VtbWVfbScsIHR5cGU6ICdtaXhlZCcsIHVuaXQ6ICdtJywgbWluOiAnMCcsIG1heDogJzYwJyxyZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSB9KTsgDQpjcmVhdGVTdGF0ZSgnUHVtcGUuV2VydGUuTGF1ZnplaXRfU3VtbWVfaCcsIDAsIHsgbmFtZTogJ0xhdWZ6ZWl0X1N1bW1lX2gnLCBkZXNjOiAnU3VtbWVfaCcsIHR5cGU6ICdtaXhlZCcsIHVuaXQ6ICdoJywgbWluOiAnMCcsIG1heDogJzEwMDAwMDAnLHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlIH0pOyANCg0KY3JlYXRlU3RhdGUoJ1B1bXBlLldlcnRlLkR1cmNoc2Nobml0dF9zJywgMCwgeyBuYW1lOiAnRHVyY2hzY2huaXR0X3MnLCBkZXNjOiAnU2Nobml0dF9zJywgdHlwZTogJ21peGVkJywgdW5pdDogJ3MnLCBtaW46ICcwJywgbWF4OiAnNjAnLHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlIH0pOyANCmNyZWF0ZVN0YXRlKCdQdW1wZS5XZXJ0ZS5EdXJjaHNjaG5pdHRfbScsIDAsIHsgbmFtZTogJ0R1cmNoc2Nobml0dF9tJywgZGVzYzogJ1NjaG5pdHRfbScsIHR5cGU6ICdtaXhlZCcsIHVuaXQ6ICdtJywgbWluOiAnMCcsIG1heDogJzYwJyxyZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSB9KTsgDQpjcmVhdGVTdGF0ZSgnUHVtcGUuV2VydGUuRHVyY2hzY2huaXR0X2gnLCAwLCB7IG5hbWU6ICdEdXJjaHNjaG5pdHRfaCcsIGRlc2M6ICdTY2huaXR0X2gnLCB0eXBlOiAnbWl4ZWQnLCB1bml0OiAnaCcsIG1pbjogJzAnLCBtYXg6ICcxMDAwMDAwJyxyZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSB9KTsgDQoNCmNyZWF0ZVN0YXRlKCdQdW1wZS5XZXJ0ZS5BbnphaGxfU3RhcnRzJywgMCwgeyBuYW1lOiAnQW56YWhsX1N0YXJ0cycsIGRlc2M6ICdBbnphaGxfU3RhcnRzJywgdHlwZTogJ21peGVkJywgbWluOiAnMCcsIG1heDogJzEwMDAwMDAnLHJlYWQ6IHRydWUsIHdyaXRlOiB0cnVlIH0pOw0KDQoNCmNyZWF0ZVN0YXRlKCdQdW1wZS5SZXNldCcsIDAsIHsgbmFtZTogJ1Jlc2V0JywgZGVzYzogJ1Jlc2V0JywgdHlwZTogJ2Jvb2xlYW4nLCBkZWY6IGZhbHNlLCByZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZSB9KTsgDQpjcmVhdGVTdGF0ZSgnUHVtcGUuVHJpZ2dlcl9TdGF0ZScsIDAsIHsgbmFtZTogJ1RyaWdnZXJfU3RhdGUnLCBkZXNjOiAnU3RhdGUnLCB0eXBlOiAnYm9vbGVhbicscmVhZDogdHJ1ZSwgd3JpdGU6IHRydWUgfSk7IA0K</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
        </block>
        <block type="on" id="mrzT0$K(*i}mn@!iz~-:" x="-412" y="-862">
          <field name="OID">hm-rpc.0.QEQ1896053.1.STATE</field>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <statement name="STATEMENT">
            <block type="update" id="j${Go*V+/]9nQEQb)Tan">
              <mutation delay_input="false"></mutation>
              <field name="OID">javascript.0.Pumpe.Trigger_State</field>
              <field name="WITH_DELAY">FALSE</field>
              <value name="VALUE">
                <block type="get_value" id=")I},{3{:g9~Tuy-=g(sE">
                  <field name="ATTR">val</field>
                  <field name="OID">hm-rpc.0.QEQ1896053.1.STATE</field>
                </block>
              </value>
              <next>
                <block type="controls_if" id="A*{|)KbnzDg,]Rn*q?S[">
                  <value name="IF0">
                    <block type="logic_compare" id="cxP7E:xk!O3/:)]{-_CA">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="get_value" id="?$}?^kRoZ7MLw{3Ved-F">
                          <field name="ATTR">val</field>
                          <field name="OID">javascript.0.Pumpe.Trigger_State</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id="_`mcB7p*P/[V//1~~HUw">
                          <field name="BOOL">FALSE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="update" id="^zfNT4I`+c;l.4SPrc)U">
                      <mutation delay_input="false"></mutation>
                      <field name="OID">javascript.0.Pumpe.Werte.Anzahl_Starts</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="math_arithmetic" id="a2CCbCXYG]s~,J9qN]ib">
                          <field name="OP">ADD</field>
                          <value name="A">
                            <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                              <field name="NUM">1</field>
                            </shadow>
                            <block type="get_value" id="[0ut#Lx,?9IHBa~QKXlm">
                              <field name="ATTR">val</field>
                              <field name="OID">javascript.0.Pumpe.Werte.Anzahl_Starts</field>
                            </block>
                          </value>
                          <value name="B">
                            <shadow type="math_number" id="}?P0!jT=]9hNU{-xT{q/">
                              <field name="NUM">1</field>
                            </shadow>
                          </value>
                        </block>
                      </value>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </statement>
        </block>
        <block type="procedures_callcustomnoreturn" id="HF#.W1f%#+x02SpI-*hb" x="-812" y="-812">
          <mutation name="Objekte_anlegen"></mutation>
        </block>
        <block type="comment" id="%^j5-uBopS=8V9a*eIQ3" x="-262" y="-837">
          <field name="COMMENT">Hier anpassen</field>
        </block>
        <block type="comment" id="VkGr5cUgwT?}d(txPKkf" x="-12" y="-787">
          <field name="COMMENT">Hier anpassen</field>
        </block>
        <block type="comment" id="rtC,x~r%k~3IwH9+?anM" x="-837" y="-687">
          <field name="COMMENT">Logik</field>
          <next>
            <block type="on_ext" id="%mv~N?|o[O{KJGWFDSIB">
              <mutation items="1"></mutation>
              <field name="CONDITION">ne</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="RtrfDb=-#wtZrjE$FCHX">
                  <field name="oid">javascript.0.Pumpe.Trigger_State</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="controls_if" id="jb^yk|8anDUd]jV8f-k!">
                  <mutation else="1"></mutation>
                  <value name="IF0">
                    <block type="logic_compare" id="`iovX:O-vmVZr+dwf#W+">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="get_value" id="POi}N*Uw?T(}9gD-@ou$">
                          <field name="ATTR">val</field>
                          <field name="OID">javascript.0.Pumpe.Trigger_State</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id="R7Z~zD).!PPUx8xdhP^?">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="procedures_callnoreturn" id="6Y?^z|vm[[MOPNwV17__">
                      <mutation name="Func_Timer"></mutation>
                      <next>
                        <block type="debug" id="^3#h4tF;yAPRR{^.f.0S">
                          <field name="Severity">log</field>
                          <value name="TEXT">
                            <shadow type="text" id=")K~XOh^S/bgd2p,o?!v%">
                              <field name="TEXT">Timer gestartet</field>
                            </shadow>
                          </value>
                        </block>
                      </next>
                    </block>
                  </statement>
                  <statement name="ELSE">
                    <block type="timeouts_clearinterval" id="XhGFs7DmyY!NcyN0E~kt">
                      <field name="NAME">Laufzeit_Aktuell_s</field>
                      <next>
                        <block type="update" id="KY90+B/-c6=BaiMcgkZn">
                          <mutation delay_input="false"></mutation>
                          <field name="OID">javascript.0.Pumpe.Werte.Letzte_Laufzeit_s</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="get_value" id="k]g$b6bfo7S]l@h:6Cz=">
                              <field name="ATTR">val</field>
                              <field name="OID">javascript.0.Pumpe.Werte.Aktuell_s</field>
                            </block>
                          </value>
                          <next>
                            <block type="update" id="k5s1*6UKz@8qY2dF;d${">
                              <mutation delay_input="false"></mutation>
                              <field name="OID">javascript.0.Pumpe.Werte.Letzte_Laufzeit_m</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="get_value" id="B8*b__x^sFOFl-ysZr1D">
                                  <field name="ATTR">val</field>
                                  <field name="OID">javascript.0.Pumpe.Werte.Aktuell_m</field>
                                </block>
                              </value>
                              <next>
                                <block type="update" id="zH|J)@7DOsaX5u`sX|`#">
                                  <mutation delay_input="false"></mutation>
                                  <field name="OID">javascript.0.Pumpe.Werte.Letzte_Laufzeit_h</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="get_value" id="*hy5.yWr2^G]qiT^dIqS">
                                      <field name="ATTR">val</field>
                                      <field name="OID">javascript.0.Pumpe.Werte.Aktuell_h</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="update" id="H_g)|16phhN71`H(FfVS">
                                      <mutation delay_input="false"></mutation>
                                      <field name="OID">javascript.0.Pumpe.Werte.Aktuell_s</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="math_number" id="*mIO#E*!}!|Su1FI1)#9">
                                          <field name="NUM">0</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="update" id="c}e~mH.Hgml{M{jolpBG">
                                          <mutation delay_input="false"></mutation>
                                          <field name="OID">javascript.0.Pumpe.Werte.Aktuell_m</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE">
                                            <block type="math_number" id="Dbr|d{r%BtSpX%NWY|93">
                                              <field name="NUM">0</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="update" id="k2iQG|%IjQ`bI#b6v^sI">
                                              <mutation delay_input="false"></mutation>
                                              <field name="OID">javascript.0.Pumpe.Werte.Aktuell_h</field>
                                              <field name="WITH_DELAY">FALSE</field>
                                              <value name="VALUE">
                                                <block type="math_number" id="=9V9p*56%30IE.6#V9HO">
                                                  <field name="NUM">0</field>
                                                </block>
                                              </value>
                                              <next>
                                                <block type="debug" id="/+{*[kR*O^f9gT572CCp">
                                                  <field name="Severity">log</field>
                                                  <value name="TEXT">
                                                    <shadow type="text" id="iTT]MSB?LDC[RG5qZpw0">
                                                      <field name="TEXT">Timer gestoppt</field>
                                                    </shadow>
                                                  </value>
                                                </block>
                                              </next>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </next>
        </block>
        <block type="procedures_defnoreturn" id="Q9YfA6]Ded/p{|_o(0Kp" x="-37" y="-612">
          <field name="NAME">Func_Timer</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
          <statement name="STACK">
            <block type="timeouts_setinterval" id="~WVUtN`I{IbtuL}^58k4">
              <field name="NAME">Laufzeit_Aktuell_s</field>
              <field name="INTERVAL">1</field>
              <field name="UNIT">sec</field>
              <statement name="STATEMENT">
                <block type="comment" id="8_duLr-.(aEikHKSr?gh">
                  <field name="COMMENT">Aktueller Zähler</field>
                  <next>
                    <block type="update" id=")v)?5CGQV#`0I)$W-}N+">
                      <mutation delay_input="false"></mutation>
                      <field name="OID">javascript.0.Pumpe.Werte.Aktuell_s</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="math_arithmetic" id="v+Dqx;*+TdX4oUsrUFxd">
                          <field name="OP">ADD</field>
                          <value name="A">
                            <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                              <field name="NUM">1</field>
                            </shadow>
                            <block type="get_value" id="lNkb)jISQP2_fqNyO9jH">
                              <field name="ATTR">val</field>
                              <field name="OID">javascript.0.Pumpe.Werte.Aktuell_s</field>
                            </block>
                          </value>
                          <value name="B">
                            <shadow type="math_number" id="/6-TEs0ne!3+)JjBV])?">
                              <field name="NUM">1</field>
                            </shadow>
                          </value>
                        </block>
                      </value>
                      <next>
                        <block type="controls_if" id="v:RR]X_q[9RRNNL+qMca">
                          <value name="IF0">
                            <block type="logic_compare" id="r=^bXvfkpa9J@O.:S}NJ">
                              <field name="OP">GTE</field>
                              <value name="A">
                                <block type="get_value" id="#70R^Hmq3k3LM1mp9Ns8">
                                  <field name="ATTR">val</field>
                                  <field name="OID">javascript.0.Pumpe.Werte.Aktuell_s</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="math_number" id="N}y6/3hw_RLPB$f+{,:/">
                                  <field name="NUM">59</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <statement name="DO0">
                            <block type="update" id="/sag{UZ8!-M(pq)J5ZYD">
                              <mutation delay_input="false"></mutation>
                              <field name="OID">javascript.0.Pumpe.Werte.Aktuell_m</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="math_arithmetic" id="R3g=Ny@xe+)D#4/#62Q(">
                                  <field name="OP">ADD</field>
                                  <value name="A">
                                    <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="get_value" id="^Ed;2/-$Wy,,E+vqO~z=">
                                      <field name="ATTR">val</field>
                                      <field name="OID">javascript.0.Pumpe.Werte.Aktuell_m</field>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <shadow type="math_number" id="1)O_%:_pImADbf#*k;yu">
                                      <field name="NUM">1</field>
                                    </shadow>
                                  </value>
                                </block>
                              </value>
                              <next>
                                <block type="update" id="*((KC:`hMf@,ebW|EyD*">
                                  <mutation delay_input="false"></mutation>
                                  <field name="OID">javascript.0.Pumpe.Werte.Aktuell_s</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="math_number" id="VU7,9uHv!/,9?mFd?/D+">
                                      <field name="NUM">0</field>
                                    </block>
                                  </value>
                                </block>
                              </next>
                            </block>
                          </statement>
                          <next>
                            <block type="controls_if" id="/c:FLWUC~sI|[Ptz255Z">
                              <value name="IF0">
                                <block type="logic_compare" id="bpAx84n/S8yFXl8o=oTG">
                                  <field name="OP">GTE</field>
                                  <value name="A">
                                    <block type="get_value" id="GLvLShC=oSo$%%dYg,v9">
                                      <field name="ATTR">val</field>
                                      <field name="OID">javascript.0.Pumpe.Werte.Aktuell_m</field>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <block type="math_number" id="uw9-!FTZ#V4$mGl`zeT^">
                                      <field name="NUM">59</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <statement name="DO0">
                                <block type="update" id="8Ax*H!e^{G,HwZm{`?L]">
                                  <mutation delay_input="false"></mutation>
                                  <field name="OID">javascript.0.Pumpe.Werte.Aktuell_h</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="math_arithmetic" id="T!fB-3?DB%1isY++:##~">
                                      <field name="OP">ADD</field>
                                      <value name="A">
                                        <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="get_value" id="b/JqwbGnQ*4:u}5X3^iV">
                                          <field name="ATTR">val</field>
                                          <field name="OID">javascript.0.Pumpe.Werte.Aktuell_h</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="C.{d~;2ejK.c/t1+]*b?">
                                          <field name="NUM">1</field>
                                        </shadow>
                                      </value>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="update" id="~@M$2,:@kDlUguZ9w^Kl">
                                      <mutation delay_input="false"></mutation>
                                      <field name="OID">javascript.0.Pumpe.Werte.Aktuell_m</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="math_number" id="wpg7/%C1sy);Cko,J9fy">
                                          <field name="NUM">0</field>
                                        </block>
                                      </value>
                                    </block>
                                  </next>
                                </block>
                              </statement>
                              <next>
                                <block type="comment" id="k(fxQUp?GN%1S9v9%Qa:">
                                  <field name="COMMENT">Summe Zähler</field>
                                  <next>
                                    <block type="update" id="^n~j*wboqPv})(U1:w}h">
                                      <mutation delay_input="false"></mutation>
                                      <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_s</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="math_arithmetic" id="e0=QK]-v/.3XE7BniXNO">
                                          <field name="OP">ADD</field>
                                          <value name="A">
                                            <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                              <field name="NUM">1</field>
                                            </shadow>
                                            <block type="get_value" id="L2J`q[?$7eJ,}@%~5%%*">
                                              <field name="ATTR">val</field>
                                              <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_s</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <shadow type="math_number" id="9(dr=|bcAX_*I$Ndv}!3">
                                              <field name="NUM">1</field>
                                            </shadow>
                                          </value>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="controls_if" id="Ct2:lOu!pdOuE?xX-f$*">
                                          <value name="IF0">
                                            <block type="logic_compare" id="q`B!!Tjb8FO2_(eO|4s$">
                                              <field name="OP">GTE</field>
                                              <value name="A">
                                                <block type="get_value" id="8_,iZ:)tA^9Pz6d-Vrii">
                                                  <field name="ATTR">val</field>
                                                  <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_s</field>
                                                </block>
                                              </value>
                                              <value name="B">
                                                <block type="math_number" id="W.d/mA~aNq;F)gNW_Z4C">
                                                  <field name="NUM">59</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <statement name="DO0">
                                            <block type="update" id="?m_[5Ne{;/!E-U%eLzRJ">
                                              <mutation delay_input="false"></mutation>
                                              <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_m</field>
                                              <field name="WITH_DELAY">FALSE</field>
                                              <value name="VALUE">
                                                <block type="math_arithmetic" id="m/F1W9d]iZ|)~])]G:/-">
                                                  <field name="OP">ADD</field>
                                                  <value name="A">
                                                    <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                                      <field name="NUM">1</field>
                                                    </shadow>
                                                    <block type="get_value" id=":y5YhPvv}?-fXPwc318o">
                                                      <field name="ATTR">val</field>
                                                      <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_m</field>
                                                    </block>
                                                  </value>
                                                  <value name="B">
                                                    <shadow type="math_number" id="#aRbaqLZ}m|zzB(!SK+w">
                                                      <field name="NUM">1</field>
                                                    </shadow>
                                                  </value>
                                                </block>
                                              </value>
                                              <next>
                                                <block type="update" id="{z_7=mnFsj|@hm+7g,JG">
                                                  <mutation delay_input="false"></mutation>
                                                  <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_s</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="math_number" id="Fub,U5u2[l6r-(Pp^J!f">
                                                      <field name="NUM">0</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </next>
                                            </block>
                                          </statement>
                                          <next>
                                            <block type="controls_if" id="v-HDIq0.Kesq,nZd%UsG">
                                              <value name="IF0">
                                                <block type="logic_compare" id="(9PrCfgmC3M*i0+xvqE`">
                                                  <field name="OP">GTE</field>
                                                  <value name="A">
                                                    <block type="get_value" id="y6z1|;VC;MHeyx{XOXqk">
                                                      <field name="ATTR">val</field>
                                                      <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_m</field>
                                                    </block>
                                                  </value>
                                                  <value name="B">
                                                    <block type="math_number" id="UP^){TE?}qK_}cLQio%4">
                                                      <field name="NUM">59</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <statement name="DO0">
                                                <block type="update" id="z(?YCS1v6MdLoa]Hb/AT">
                                                  <mutation delay_input="false"></mutation>
                                                  <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_h</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="math_arithmetic" id="k$`!I2_Eqiruy!muTLVs">
                                                      <field name="OP">ADD</field>
                                                      <value name="A">
                                                        <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                                          <field name="NUM">1</field>
                                                        </shadow>
                                                        <block type="get_value" id="r:mU8()v|ar|MP.(;F!y">
                                                          <field name="ATTR">val</field>
                                                          <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_h</field>
                                                        </block>
                                                      </value>
                                                      <value name="B">
                                                        <shadow type="math_number" id="Mp#F0kxnMFo4H}*k4Sv4">
                                                          <field name="NUM">1</field>
                                                        </shadow>
                                                      </value>
                                                    </block>
                                                  </value>
                                                  <next>
                                                    <block type="update" id="=whO,B%EN(*bkp)u`Woq">
                                                      <mutation delay_input="false"></mutation>
                                                      <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_m</field>
                                                      <field name="WITH_DELAY">FALSE</field>
                                                      <value name="VALUE">
                                                        <block type="math_number" id=":y?:9I5=%X!))6-8zhQ)">
                                                          <field name="NUM">0</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </next>
                                                </block>
                                              </statement>
                                              <next>
                                                <block type="comment" id="~Ju$q7Xgb?^Rw5E;U:ei">
                                                  <field name="COMMENT">Durchschnitt errechnen</field>
                                                  <next>
                                                    <block type="variables_set" id="~M}PIB`#cgtic|D]17WS">
                                                      <field name="VAR" id="WTs)G/fB4r9Mv:`m+3OP" variabletype="">gesamt_sek</field>
                                                      <value name="VALUE">
                                                        <block type="math_number" id="iNANOi=9?%l5Zz)hjT9r">
                                                          <field name="NUM">0</field>
                                                        </block>
                                                      </value>
                                                      <next>
                                                        <block type="variables_set" id="BO{)IrDB]FZ[/A0WK0Vk">
                                                          <field name="VAR" id="WTs)G/fB4r9Mv:`m+3OP" variabletype="">gesamt_sek</field>
                                                          <value name="VALUE">
                                                            <block type="math_arithmetic" id="D|/FCqyVulKHknu6M_*X">
                                                              <field name="OP">MULTIPLY</field>
                                                              <value name="A">
                                                                <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                                                  <field name="NUM">1</field>
                                                                </shadow>
                                                                <block type="get_value" id="[]Wj9b*//!k[a8{*%R`z">
                                                                  <field name="ATTR">val</field>
                                                                  <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_h</field>
                                                                </block>
                                                              </value>
                                                              <value name="B">
                                                                <shadow type="math_number" id="s2lFJ)I;J6a0qe@z3hCa">
                                                                  <field name="NUM">3600</field>
                                                                </shadow>
                                                              </value>
                                                            </block>
                                                          </value>
                                                          <next>
                                                            <block type="math_change" id="ez#9WulX3)-{k)kzjf%k">
                                                              <field name="VAR" id="WTs)G/fB4r9Mv:`m+3OP" variabletype="">gesamt_sek</field>
                                                              <value name="DELTA">
                                                                <shadow type="math_number" id="5D`89jsax92)ItK@rtme">
                                                                  <field name="NUM">1</field>
                                                                </shadow>
                                                                <block type="math_arithmetic" id="ZU*zoE1`!cu-$2x#eAT_">
                                                                  <field name="OP">MULTIPLY</field>
                                                                  <value name="A">
                                                                    <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                                                      <field name="NUM">1</field>
                                                                    </shadow>
                                                                    <block type="get_value" id="}sxFF,tS0uF-]5lJ3u06">
                                                                      <field name="ATTR">val</field>
                                                                      <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_m</field>
                                                                    </block>
                                                                  </value>
                                                                  <value name="B">
                                                                    <shadow type="math_number" id="H/OoK4#NW%:ZESsd%DW@">
                                                                      <field name="NUM">60</field>
                                                                    </shadow>
                                                                  </value>
                                                                </block>
                                                              </value>
                                                              <next>
                                                                <block type="math_change" id="o-jh3@J,N`yyx`fK:nMb">
                                                                  <field name="VAR" id="WTs)G/fB4r9Mv:`m+3OP" variabletype="">gesamt_sek</field>
                                                                  <value name="DELTA">
                                                                    <shadow type="math_number" id="5D`89jsax92)ItK@rtme">
                                                                      <field name="NUM">1</field>
                                                                    </shadow>
                                                                    <block type="get_value" id="=zaw%Tj,QjQ!m4FgCr{1">
                                                                      <field name="ATTR">val</field>
                                                                      <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_s</field>
                                                                    </block>
                                                                  </value>
                                                                  <next>
                                                                    <block type="variables_set" id="#/g*k_Sa!|::27K}Oswv">
                                                                      <field name="VAR" id="5]288,z*1HXMf%~PfJp4" variabletype="">gesamt_schnitt_sek</field>
                                                                      <value name="VALUE">
                                                                        <block type="math_arithmetic" id="Y.5yH8_lxVe:-2=6~a7D">
                                                                          <field name="OP">DIVIDE</field>
                                                                          <value name="A">
                                                                            <shadow type="math_number" id="2.4zwts3h%uDHtL{]8H*">
                                                                              <field name="NUM">1</field>
                                                                            </shadow>
                                                                            <block type="variables_get" id="r;#)Owv7{/1ggZDuJ4R4">
                                                                              <field name="VAR" id="WTs)G/fB4r9Mv:`m+3OP" variabletype="">gesamt_sek</field>
                                                                            </block>
                                                                          </value>
                                                                          <value name="B">
                                                                            <shadow type="math_number" id="{rQU6,sO@l4T;^}|LEEK">
                                                                              <field name="NUM">3600</field>
                                                                            </shadow>
                                                                            <block type="get_value" id="k?1(FmPCLlG)m*h)f0j/">
                                                                              <field name="ATTR">val</field>
                                                                              <field name="OID">javascript.0.Pumpe.Werte.Anzahl_Starts</field>
                                                                            </block>
                                                                          </value>
                                                                        </block>
                                                                      </value>
                                                                      <next>
                                                                        <block type="update" id="enjTc`WJpoQ0)gk]lx5H">
                                                                          <mutation delay_input="false"></mutation>
                                                                          <field name="OID">javascript.0.Pumpe.Werte.Durchschnitt_s</field>
                                                                          <field name="WITH_DELAY">FALSE</field>
                                                                          <value name="VALUE">
                                                                            <block type="procedures_callcustomreturn" id="62Klb,:y])1pJ(Lj%~dY">
                                                                              <mutation name="func_gesamt_s_zu_s">
                                                                                <arg name="sek"></arg>
                                                                              </mutation>
                                                                              <value name="ARG0">
                                                                                <block type="variables_get" id="-u$|K(36k0R`#;ZNo5#C">
                                                                                  <field name="VAR" id="5]288,z*1HXMf%~PfJp4" variabletype="">gesamt_schnitt_sek</field>
                                                                                </block>
                                                                              </value>
                                                                            </block>
                                                                          </value>
                                                                          <next>
                                                                            <block type="update" id="-ts%*aptg?8vXy.]DnwK">
                                                                              <mutation delay_input="false"></mutation>
                                                                              <field name="OID">javascript.0.Pumpe.Werte.Durchschnitt_m</field>
                                                                              <field name="WITH_DELAY">FALSE</field>
                                                                              <value name="VALUE">
                                                                                <block type="procedures_callcustomreturn" id="3,3H4{85j1PBC*Ji+u3x">
                                                                                  <mutation name="func_gesamt_s_zu_m">
                                                                                    <arg name="sek"></arg>
                                                                                  </mutation>
                                                                                  <value name="ARG0">
                                                                                    <block type="variables_get" id="N0N9iw84C+dcGi`ojosy">
                                                                                      <field name="VAR" id="5]288,z*1HXMf%~PfJp4" variabletype="">gesamt_schnitt_sek</field>
                                                                                    </block>
                                                                                  </value>
                                                                                </block>
                                                                              </value>
                                                                              <next>
                                                                                <block type="update" id="Y|ODWg/F:arz@Mr_DDS$">
                                                                                  <mutation delay_input="false"></mutation>
                                                                                  <field name="OID">javascript.0.Pumpe.Werte.Durchschnitt_h</field>
                                                                                  <field name="WITH_DELAY">FALSE</field>
                                                                                  <value name="VALUE">
                                                                                    <block type="procedures_callcustomreturn" id="V*XnYQEoHSHmJ8x4t654">
                                                                                      <mutation name="func_gesamt_s_zu_h">
                                                                                        <arg name="sek"></arg>
                                                                                      </mutation>
                                                                                      <value name="ARG0">
                                                                                        <block type="variables_get" id=":BP=O}wCLTc[{52sd9mK">
                                                                                          <field name="VAR" id="5]288,z*1HXMf%~PfJp4" variabletype="">gesamt_schnitt_sek</field>
                                                                                        </block>
                                                                                      </value>
                                                                                    </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>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
          </statement>
        </block>
        <block type="comment" id="ZqDn};jgez6!$_F1Vqos" x="-837" y="-37">
          <field name="COMMENT">RESET Alle Zähler</field>
          <next>
            <block type="on_ext" id="]/@.4.5e,@L#kM:3{;vc">
              <mutation items="1"></mutation>
              <field name="CONDITION">any</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="p9-N0w{fIg:J/q?nKaqi">
                  <field name="oid">javascript.0.Pumpe.Reset</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="controls_if" id="id]|AgZU|3Uku_V]y4(V">
                  <value name="IF0">
                    <block type="logic_compare" id=",2t8e=0=|@lCUvcs[4?X">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="get_value" id="bs%~ugm/x!|)$a9HLJ]7">
                          <field name="ATTR">val</field>
                          <field name="OID">javascript.0.Pumpe.Reset</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id="H0ByN9LiE[YR:=m:0!V-">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="update" id="/Di4!_.kVbFe5f(kg@/l">
                      <mutation delay_input="false"></mutation>
                      <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_h</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="math_number" id="PUglxf#a=bB{/MsIcvuL">
                          <field name="NUM">0</field>
                        </block>
                      </value>
                      <next>
                        <block type="update" id=")apYIhp4wszeo{D}],gz">
                          <mutation delay_input="false"></mutation>
                          <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_m</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="math_number" id="iH(pTpz[RB2=QJUu;Y6D">
                              <field name="NUM">0</field>
                            </block>
                          </value>
                          <next>
                            <block type="update" id="(?S^;ByA!L7`kcV{N+#1">
                              <mutation delay_input="false"></mutation>
                              <field name="OID">javascript.0.Pumpe.Werte.Laufzeit_Summe_s</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="math_number" id="6./-!y81Yw)WC1811vJ*">
                                  <field name="NUM">0</field>
                                </block>
                              </value>
                              <next>
                                <block type="update" id="p~|@bQ)5yOkfN3VmA^Di">
                                  <mutation delay_input="false"></mutation>
                                  <field name="OID">javascript.0.Pumpe.Werte.Anzahl_Starts</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="math_number" id="+iP*rHBo^6T;NWOnk[+!">
                                      <field name="NUM">0</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="update" id=",0jT2$ko*M6QxwEKZ~q%">
                                      <mutation delay_input="false"></mutation>
                                      <field name="OID">javascript.0.Pumpe.Werte.Aktuell_h</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="math_number" id="GeSr$Vkc~+k_S[058(D2">
                                          <field name="NUM">0</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="update" id="XAY!~pzLR~?YbY8q*Nv*">
                                          <mutation delay_input="false"></mutation>
                                          <field name="OID">javascript.0.Pumpe.Werte.Aktuell_m</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE">
                                            <block type="math_number" id="nr-mod+*oEr-rz%A/+|,">
                                              <field name="NUM">0</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="update" id="eBz5ZPFuwLONPf4zHZrH">
                                              <mutation delay_input="false"></mutation>
                                              <field name="OID">javascript.0.Pumpe.Werte.Aktuell_s</field>
                                              <field name="WITH_DELAY">FALSE</field>
                                              <value name="VALUE">
                                                <block type="math_number" id="/eR#Se@[A-TxxoLIDD+Y">
                                                  <field name="NUM">0</field>
                                                </block>
                                              </value>
                                              <next>
                                                <block type="update" id="%H0GPQWSO@6E,vjxL#4Y">
                                                  <mutation delay_input="false"></mutation>
                                                  <field name="OID">javascript.0.Pumpe.Werte.Letzte_Laufzeit_h</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="math_number" id="~,qydQiq!k%6Y_z;X=vR">
                                                      <field name="NUM">0</field>
                                                    </block>
                                                  </value>
                                                  <next>
                                                    <block type="update" id="ejX~b]u@j0s_PA~Bg_6t">
                                                      <mutation delay_input="false"></mutation>
                                                      <field name="OID">javascript.0.Pumpe.Werte.Letzte_Laufzeit_m</field>
                                                      <field name="WITH_DELAY">FALSE</field>
                                                      <value name="VALUE">
                                                        <block type="math_number" id="i,;Z)-;0qDIAo{`b[8;A">
                                                          <field name="NUM">0</field>
                                                        </block>
                                                      </value>
                                                      <next>
                                                        <block type="update" id="[3x8:ZF8sHjR~,6#)}j5">
                                                          <mutation delay_input="false"></mutation>
                                                          <field name="OID">javascript.0.Pumpe.Werte.Letzte_Laufzeit_s</field>
                                                          <field name="WITH_DELAY">FALSE</field>
                                                          <value name="VALUE">
                                                            <block type="math_number" id="7Kq/t~Lzt%3d5F!8]Bje">
                                                              <field name="NUM">0</field>
                                                            </block>
                                                          </value>
                                                          <next>
                                                            <block type="update" id="02_sMkA]1gg@dYnj8FU@">
                                                              <mutation delay_input="false"></mutation>
                                                              <field name="OID">javascript.0.Pumpe.Werte.Durchschnitt_h</field>
                                                              <field name="WITH_DELAY">FALSE</field>
                                                              <value name="VALUE">
                                                                <block type="math_number" id="sG!06O/[J[a@eNe}a][W">
                                                                  <field name="NUM">0</field>
                                                                </block>
                                                              </value>
                                                              <next>
                                                                <block type="update" id="H;41#!}l8F*8$g4/^eDT">
                                                                  <mutation delay_input="false"></mutation>
                                                                  <field name="OID">javascript.0.Pumpe.Werte.Durchschnitt_m</field>
                                                                  <field name="WITH_DELAY">FALSE</field>
                                                                  <value name="VALUE">
                                                                    <block type="math_number" id="6cFF_!rVe{)I*?{^@yVS">
                                                                      <field name="NUM">0</field>
                                                                    </block>
                                                                  </value>
                                                                  <next>
                                                                    <block type="update" id="/+e=bc|[2RrUrEyJzB~T">
                                                                      <mutation delay_input="false"></mutation>
                                                                      <field name="OID">javascript.0.Pumpe.Werte.Durchschnitt_s</field>
                                                                      <field name="WITH_DELAY">FALSE</field>
                                                                      <value name="VALUE">
                                                                        <block type="math_number" id="?Fb8z{o6$}r$ucsng8-o">
                                                                          <field name="NUM">0</field>
                                                                        </block>
                                                                      </value>
                                                                      <next>
                                                                        <block type="update" id="dfT;s/,.F-qjntgC+gW$">
                                                                          <mutation delay_input="false"></mutation>
                                                                          <field name="OID">javascript.0.Pumpe.Reset</field>
                                                                          <field name="WITH_DELAY">FALSE</field>
                                                                          <value name="VALUE">
                                                                            <block type="logic_boolean" id="w1gy;Sx+`?BE-GKaFEKB">
                                                                              <field name="BOOL">FALSE</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>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </next>
        </block>
        <block type="procedures_defcustomreturn" id="hk|~[`+!@2a1hH/A2i`." x="-87" y="563">
          <mutation statements="false">
            <arg name="sek" varid="`._J%HrwB/s_.vuyh?N6"></arg>
          </mutation>
          <field name="NAME">func_gesamt_s_zu_h</field>
          <field name="SCRIPT">ICAgIHZhciBzZWt1bmRlbiA9IHNlayU2MDsNCiAgICB2YXIgcmVzdF9taW4gPSBzZWslMzYwMCAtc2VrdW5kZW47DQogICAgdmFyIG1pbnV0ZW4gPSByZXN0X21pbi82MDsNCiAgICB2YXIgc3R1bmRlbiA9IChzZWsgLSByZXN0X21pbiAtIHNla3VuZGVuKS8zNjAwOw0KDQpyZXR1cm4gc3R1bmRlbjs=</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
        </block>
        <block type="procedures_defcustomreturn" id="QsH$QMFAkJxdsWpk^h;f" x="-87" y="588">
          <mutation statements="false">
            <arg name="sek" varid="`._J%HrwB/s_.vuyh?N6"></arg>
          </mutation>
          <field name="NAME">func_gesamt_s_zu_m</field>
          <field name="SCRIPT">ICAgIHZhciBzZWt1bmRlbiA9IHNlayU2MDsNCiAgICB2YXIgcmVzdF9taW4gPSBzZWslMzYwMCAtc2VrdW5kZW47DQogICAgdmFyIG1pbnV0ZW4gPSByZXN0X21pbi82MDsNCg0KcmV0dXJuIG1pbnV0ZW47</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
        </block>
        <block type="procedures_defcustomreturn" id="hnh!@5*[7@Pl/?YI^20l" x="-87" y="613">
          <mutation statements="false">
            <arg name="sek" varid="`._J%HrwB/s_.vuyh?N6"></arg>
          </mutation>
          <field name="NAME">func_gesamt_s_zu_s</field>
          <field name="SCRIPT">ICAgIHZhciBzZWt1bmRlbiA9IHNlayU2MDsNCnJldHVybiBzZWt1bmRlbi50b0ZpeGVkKDApOw==</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
        </block>
      </xml>
      
      posted in Blockly
      K
      kunigunde

    Latest posts made by kunigunde

    • RE: Neuer Adapter EMS-ESP für Bosch Heizungen

      @tp1de
      ich habe den emsesp Adapter mit aktiviertem km Gateway am laufen, und dieser schreibt dann die werte zur Heizung.
      Dies funktioniert bei mir auch, bis auf das ab und an die Kommunikation zu klemmen scheint.
      Ich bräuchte Ideen, wie ich sicherstellen kann, das es wirklich bei der Heizung angekommen ist nachdem ich mit Node-Red das command gesendet habe.
      Adapter Config: e72384cb-8370-404c-afd4-63020b4d0844-image.png982230ed-93b0-4ad8-a56e-155a0b4e9db6-image.png
      EMSESP: 34f0cae7-2b56-4d87-83c9-e24902a59cf6-image.png

      posted in Tester
      K
      kunigunde
    • RE: Neuer Adapter EMS-ESP für Bosch Heizungen

      Hallo,
      ich suche Tester für das Zusammenspiel Buderus->kmxx->emsesp->NodeRed.

      Ich habe leider bisher noch nichts bestehendes gefunden, was es ermöglicht den Zeitplan komfortabel zu ändern.
      Dies geht entweder über das Bedienpult, oder über die APP.
      Ich wollte es aber über das Node-Red Dashboard anzeigen und ändern können.

      Dies ist nun mein 1. Versuch, und es scheint bei mir zu funktionieren.
      Ok, manchmal kann der EmsEsp nicht schreiben.....
      Aber dazu suche ich ja Tester, welche vielleicht Ideen haben, wie man dies prozesssicherer gestalten kann.

      Als extra node-module wird "node-red-contrib-ui-time-scheduler" benutzt.
      Screenshot.png
      Als Datei zum importieren: flows.json
      als code zum kopieren:


      [
      {
      "id": "b647dcc6973cef0a",
      "type": "subflow",
      "name": "ui->km",
      "category": "",
      "in": [
      {
      "x": 80,
      "y": 240,
      "wires": [
      {
      "id": "a45c49648996ca8c"
      }
      ]
      }
      ],
      "out": [
      {
      "x": 400,
      "y": 300,
      "wires": [
      {
      "id": "a45c49648996ca8c",
      "port": 3
      }
      ]
      }
      ],
      "env": [],
      "meta": {},
      "color": "#DDAA99"
      },
      {
      "id": "a45c49648996ca8c",
      "type": "function",
      "z": "b647dcc6973cef0a",
      "name": "ui->km",
      "func": "// Erzeuge ein Date-Objekt für den aktuellen Tag um 00:00 Uhr\nvar baseDate = new Date();\nbaseDate.setHours(0, 0, 0, 0);\nvar base = baseDate.getTime(); // Basis-Zeitstempel in Millisekunden\n\n// Hilfsfunktion: Wandelt einen absoluten Timestamp (Millisekunden) in Minuten seit Mitternacht um\nfunction fromTimestamp(timestamp) {\n return Math.round((timestamp - base) / 60000);\n}\n\n// Mapping der Tage: Für die Erzeugung der Strings nutzen wir die Reihenfolge, wie sie in den Eingabedaten vorkommen\n// Hier entspricht Index 0 "Su", 1 "Mo", 2 "Tu", usw.\nvar dayMapping = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];\n\n// Ergebnis-Arrays für die beiden Bereiche\nvar outputA = [];\nvar outputB = [];\n\n// Wir erwarten, dass msg.payload.timers ein Array von Timer-Objekten enthält, z. B.:\n// {\n// starttime: <absolute Zeit in ms>,\n// endtime: <absolute Zeit in ms>,\n// days: [0,1,0,0,0,0,0],\n// output: "0" oder "1"\n// }\nmsg.payload.timers.forEach(function (timer) {\n // Wandle absolute Zeiten in Minuten um\n var startMinutes = fromTimestamp(timer.starttime);\n var endMinutes = fromTimestamp(timer.endtime);\n\n // Für jeden Tag prüfen, ob dieser Timer aktiv ist (Wert 1 im days-Array)\n timer.days.forEach(function (active, index) {\n if (active === 1) {\n var day = dayMapping[index];\n // Wähle anhand von timer.output das Ziel-Array\n var targetArray = (timer.output === "0") ? outputA : outputB;\n\n // Erzeuge zwei Objekte: einen für den Start (setpoint "comfort2") und einen für das Ende (setpoint "eco")\n targetArray.push({ dayOfWeek: day, setpoint: "comfort2", time: startMinutes });\n targetArray.push({ dayOfWeek: day, setpoint: "eco", time: endMinutes });\n }\n });\n});\n\n// Sortierfunktion für die Ergebnisse (nach Wochentag und Uhrzeit)\n// Die Sortierreihenfolge wird so festgelegt, dass Montag als erstes kommt.\nvar dayOrder = { "Mo": 0, "Tu": 1, "We": 2, "Th": 3, "Fr": 4, "Sa": 5, "Su": 6 };\n\nfunction sortTimers(arr) {\n arr.sort(function (a, b) {\n // Vergleiche zunächst anhand der Wochentagsreihenfolge\n var dayA = dayOrder[a.dayOfWeek];\n var dayB = dayOrder[b.dayOfWeek];\n if (dayA !== dayB) return dayA - dayB;\n // Danach nach der Uhrzeit\n if (a.time !== b.time) return a.time - b.time;\n // Optional: Falls beides gleich ist, nach setpoint (alphabetisch)\n return a.setpoint.localeCompare(b.setpoint);\n });\n}\n\n// Sortiere beide Bereiche\nsortTimers(outputA);\nsortTimers(outputB);\n\n// Prüfe, ob outputA oder outputB leer sind, und setze sie gegebenenfalls auf einen Default-Array\nvar defaultArray = [\n {"dayOfWeek": "Mo", "setpoint": "eco", "time": 1380},\n {"dayOfWeek": "Tu", "setpoint": "eco", "time": 1380},\n {"dayOfWeek": "We", "setpoint": "eco", "time": 1380},\n {"dayOfWeek": "Th", "setpoint": "eco", "time": 1380},\n {"dayOfWeek": "Fr", "setpoint": "eco", "time": 1380},\n {"dayOfWeek": "Sa", "setpoint": "eco", "time": 1380},\n {"dayOfWeek": "Su", "setpoint": "eco", "time": 1380}\n];\n\nif (outputA.length === 0) {\n outputA = defaultArray;\n}\nif (outputB.length === 0) {\n outputB = defaultArray;\n}\n\n//##########################################\n// Hole das Array disabledDevices\nvar disabledDevices = msg.payload.settings.disabledDevices;\nvar activeSwitchProgram = 0;// Pauschal erstmal Programm A aktivieren\n\n// Überprüfe, ob disabledDevices existiert, ein Array ist und mindestens einen Eintrag enthält\nif (Array.isArray(disabledDevices) && disabledDevices.length > 0) {\n // Wenn disabledDevices[0] den Wert 1 hat, setze activeSwitchProgram auf 0 = Program A\n if (disabledDevices[0] === "1") {\n activeSwitchProgram = 0;\n }\n // Wenn disabledDevices[0] den Wert 0 hat, setze activeSwitchProgram auf 1 = Program B\n else if (disabledDevices[0] === "0") {\n activeSwitchProgram = 1;\n }\n else {\n // Optional: Für den Fall, dass ein anderer Wert vorliegt\n node.warn("Unerwarteter Wert in disabledDevices[0]: " + disabledDevices[0]);\n }\n} else {\n // Optional: Fehlermeldung, wenn disabledDevices nicht existiert oder leer ist\n node.error("disabledDevices existiert nicht oder ist leer.", msg);\n}\n//##########################################\n\n\n// Setze das Ergebnis in msg.payload mit getrennten Bereichen\nvar all_together = {\n timers_A: outputA,\n timers_B: outputB,\n activeSwitchProgram: activeSwitchProgram\n};\n\n//return msg;\n\n// Setze die sortierten Arrays als separate Outputs\nreturn [{ payload: outputA, topic:msg.topic_A }, { payload: outputB, topic: msg.topic_B }, { payload: activeSwitchProgram, topic: msg.activeSwitchProgram }, {payload:all_together}];",
      "outputs": 4,
      "timeout": 0,
      "noerr": 0,
      "initialize": "",
      "finalize": "",
      "libs": [],
      "x": 270,
      "y": 240,
      "wires": [
      [
      "3d5f9cdb5af9c500"
      ],
      [
      "ed0b32094cd93163"
      ],
      [
      "baf0eb9c1997313c"
      ],
      []
      ],
      "info": "# Beschreibung der Funktion\r\nDiese Funktion verarbeitet Timer-Daten und bereitet sie in einem spezifischen Format für die weitere Verarbeitung vor. \r\nDabei werden folgende Schritte durchgeführt:\r\n\r\n## 1. Zeit-Basis und Umrechnung:\r\nEs wird ein Basis-Zeitstempel für den aktuellen Tag um 00:00 Uhr erzeugt. Anhand dieses Basiswerts werden absolute Zeitstempel (in Millisekunden) in Minuten seit Mitternacht umgerechnet.\r\n\r\n## 2. Aufbereitung der Timer-Daten:\r\n- Aus der Eingangsstruktur msg.payload.timers werden einzelne Timer-Objekte verarbeitet. \r\n- Für jeden Timer werden die Start- und Endzeiten in Minuten berechnet.\r\n- Über das days-Array des Timers wird ermittelt, an welchen Wochentagen der Timer aktiv ist.\r\n- Für jeden aktiven Tag wird basierend auf dem Timer-Feld output (mit Wert "0" oder "1") ein Eintrag erzeugt:\r\n- - Ein Objekt mit setpoint: "comfort2" und der berechneten Startzeit.\r\n- - Ein Objekt mit setpoint: "eco" und der berechneten Endzeit.\r\n- Diese Objekte werden in zwei separate Arrays einsortiert:\r\n- - outputA für Timer mit output === "0".\r\n- - outputB für Timer mit output === "1".\r\n\r\n## 3. Sortierung:\r\nBeide Arrays werden nach Wochentagen und Uhrzeit sortiert – die Sortierreihenfolge ist so festgelegt, dass Montag als erster Tag erscheint.\r\n\r\n## 4. Fallback bei fehlenden Timer-Daten:\r\nFalls eines der Arrays (outputA oder outputB) nach der Verarbeitung leer sein sollte, \r\nwird es durch einen Default-Array ersetzt. \r\nDieser Default-Array enthält für alle Wochentage (Montag bis Sonntag) Timer-Einträge mit setpoint: "eco" und time: 1380 (entspricht 23:00 Uhr).\r\n\r\n## 5. Bestimmung des aktiven Programms:\r\nEs wird das Array disabledDevices aus msg.payload.settings ausgelesen.\r\nAnhand des Werts in disabledDevices[0] wird der Schalter activeSwitchProgram gesetzt:\r\n- Wenn disabledDevices[0] den String "1" enthält, wird Programm A (Wert 0) aktiv.\r\n- Wenn disabledDevices[0] den String "0" enthält, wird Programm B (Wert 1) aktiv.\r\n\r\n## 6. Ausgabe:\r\nDie Funktion gibt vier Outputs zurück:\r\n\r\n- Output 1: Das Array outputA (Timer für output "0").\r\n- Output 2: Das Array outputB (Timer für output "1").\r\n- Output 3: Der Wert activeSwitchProgram (der aktive Programmschalter).\r\n- Output 4: Ein kombiniertes Objekt (all_together), das beide Timer-Arrays und den aktiven Schalter enthält.\r\n\r\nDiese Funktion sorgt dafür, dass die Timer-Daten aus der Eingangsdatenstruktur in ein konsistentes, \r\nsortiertes Format überführt werden und dass bei fehlenden Timer-Daten ein Standard-Set an Timer-Einträgen bereitgestellt wird. \r\nGleichzeitig wird anhand der Einstellungen in disabledDevices der aktive Programmschalter dynamisch festgelegt."
      },
      {
      "id": "2dfa8c4c402abc2c",
      "type": "ioBroker out",
      "z": "b647dcc6973cef0a",
      "name": "",
      "topic": "",
      "ack": "false",
      "autoCreate": "false",
      "stateName": "",
      "role": "",
      "payloadType": "",
      "readonly": "",
      "stateUnit": "",
      "stateMin": "",
      "stateMax": "",
      "x": 540,
      "y": 180,
      "wires": []
      },
      {
      "id": "f4e8827f63c274f2",
      "type": "ioBroker out",
      "z": "b647dcc6973cef0a",
      "name": "",
      "topic": "",
      "ack": "false",
      "autoCreate": "false",
      "stateName": "",
      "role": "",
      "payloadType": "",
      "readonly": "",
      "stateUnit": "",
      "stateMin": "",
      "stateMax": "",
      "x": 540,
      "y": 220,
      "wires": []
      },
      {
      "id": "baf0eb9c1997313c",
      "type": "ioBroker out",
      "z": "b647dcc6973cef0a",
      "name": "",
      "topic": "",
      "ack": "false",
      "autoCreate": "false",
      "stateName": "",
      "role": "",
      "payloadType": "",
      "readonly": "",
      "stateUnit": "",
      "stateMin": "",
      "stateMax": "",
      "x": 540,
      "y": 260,
      "wires": []
      },
      {
      "id": "3d5f9cdb5af9c500",
      "type": "json",
      "z": "b647dcc6973cef0a",
      "name": "",
      "property": "payload",
      "action": "str",
      "pretty": false,
      "x": 390,
      "y": 180,
      "wires": [
      [
      "2dfa8c4c402abc2c"
      ]
      ]
      },
      {
      "id": "ed0b32094cd93163",
      "type": "json",
      "z": "b647dcc6973cef0a",
      "name": "",
      "property": "payload",
      "action": "str",
      "pretty": false,
      "x": 390,
      "y": 220,
      "wires": [
      [
      "f4e8827f63c274f2"
      ]
      ]
      },
      {
      "id": "110aeb09527e60b1",
      "type": "subflow",
      "name": "Fehlerauswertung",
      "info": "",
      "category": "",
      "in": [
      {
      "x": 60,
      "y": 160,
      "wires": [
      {
      "id": "14d67afb1eb1f40c"
      }
      ]
      }
      ],
      "out": [
      {
      "x": 300,
      "y": 120,
      "wires": [
      {
      "id": "14d67afb1eb1f40c",
      "port": 0
      }
      ]
      },
      {
      "x": 300,
      "y": 200,
      "wires": [
      {
      "id": "14d67afb1eb1f40c",
      "port": 1
      }
      ]
      }
      ],
      "env": [],
      "meta": {},
      "color": "#DDAA99"
      },
      {
      "id": "14d67afb1eb1f40c",
      "type": "function",
      "z": "110aeb09527e60b1",
      "name": "Fehler prüfen",
      "func": "// Variable zur Fehlernachricht initialisieren\nvar errorMessage = null;\n\n// DisabledDevices prüfen (niemals beide Programme oder keines)\n//#############################################################\n// Hole das Array\nvar disabledDevices = msg.payload.settings.disabledDevices;\n\n// Prüfe, ob disabledDevices existiert, ein Array ist und nicht leer ist \n// (Es muss ein Programm abgewählt sein.)\nif (!Array.isArray(disabledDevices) || disabledDevices.length === 0) {\n errorMessage = "Achtung, kein Programm abgewählt (Program A oder B).";\n}\n\n// Prüfe, ob das Array mehr als 1 Element enthält\nif (errorMessage === null && disabledDevices.length > 1) {\n errorMessage = "Achtung, mehr als 1 Programm abgewählt (Program A und B).";\n}\n//#############################################################\n\n// Wenn ein Fehler vorhanden ist, Fehlernachricht an Ausgang 1 senden,\n// ansonsten die Nachricht an Ausgang 2 senden.\nif (errorMessage !== null) {\n msg.highlight = "red";\n msg.topic = "Fehler";\n msg.payload = errorMessage;\n return [msg, null]; // msg an Ausgang 1, Ausgang 2 bleibt leer\n} else {\n msg.hide_save_button = false;// Button einblenden\n return [null, msg]; // msg an Ausgang 2, Ausgang 1 bleibt leer\n}",
      "outputs": 2,
      "timeout": 0,
      "noerr": 0,
      "initialize": "",
      "finalize": "",
      "libs": [],
      "x": 170,
      "y": 160,
      "wires": [
      [],
      []
      ]
      },
      {
      "id": "fd7f31397b058e66",
      "type": "subflow",
      "name": "km->ui",
      "info": "",
      "category": "",
      "in": [
      {
      "x": 60,
      "y": 220,
      "wires": [
      {
      "id": "8a64d2a144809a71"
      }
      ]
      }
      ],
      "out": [
      {
      "x": 1420,
      "y": 220,
      "wires": [
      {
      "id": "12c457a5ee91046c",
      "port": 0
      }
      ]
      }
      ],
      "env": [
      {
      "name": "PROGRAMS_A",
      "type": "str",
      "value": "ems-esp.0.heatingCircuits.hc1.switchPrograms.A"
      },
      {
      "name": "PROGRAMS_B",
      "type": "str",
      "value": "ems-esp.0.heatingCircuits.hc1.switchPrograms.B"
      },
      {
      "name": "ACTIVE",
      "type": "str",
      "value": "ems-esp.0.heatingCircuits.hc1.activeSwitchProgram"
      }
      ],
      "meta": {},
      "color": "#DDAA99"
      },
      {
      "id": "34e0423f1724b8f1",
      "type": "function",
      "z": "fd7f31397b058e66",
      "name": "timers_A",
      "func": "// Erzeugt einen Date-Objekt für den aktuellen Tag um 00:00 Uhr\nvar baseDate = new Date();\nbaseDate.setHours(0, 0, 0, 0);\nvar base = baseDate.getTime(); // Basis-Zeitstempel in Millisekunden\n\n// Hilfsfunktion: Wandelt Minuten in einen absoluten Timestamp (Millisekunden) um\nfunction toTimestamp(minutes) {\n return base + minutes * 60000;\n}\n\n/\n Schritt 1: Für jeden Wochentag Start- und Endzeit ermitteln\n Dabei gilt:\n - setpoint "comfort2" → Startzeit\n - setpoint "eco" → Endzeit\n \n Wir erwarten, dass msg.hc1_a ein Array mit Objekten ist, z. B.:\n [\n {"dayOfWeek":"Mo","setpoint":"comfort2","time":270},\n {"dayOfWeek":"Mo","setpoint":"eco","time":420},\n {"dayOfWeek":"Mo","setpoint":"comfort2","time":840},\n {"dayOfWeek":"Mo","setpoint":"eco","time":1200},\n {"dayOfWeek":"Tu","setpoint":"comfort2","time":270},\n {"dayOfWeek":"Tu","setpoint":"eco","time":420},\n ...\n ]\n \n Es können auch mehrere Intervalle pro Tag vorhanden sein. In diesem Beispiel gruppieren\n wir jeweils je 2 Einträge (ein Start- und ein Endwert) – vorausgesetzt, die Daten liegen\n sortiert nach Zeit vor.\n/\nvar dayIntervals = {}; // Beispiel: { "Mo": [ {start:270, end:420}, {start:840, end:1200} ], ... }\n\nmsg.payload.forEach(function(item) {\n var day = item.dayOfWeek;\n // Initialisiere den Tag, falls noch nicht vorhanden\n if (!dayIntervals[day]) {\n dayIntervals[day] = [];\n }\n \n // Wir speichern die Werte vorerst als temporäres Objekt pro Tag\n // Es wird angenommen, dass immer zwei Einträge hintereinander zum gleichen Intervall gehören.\n // Daher speichern wir einfach in der Reihenfolge der Verarbeitung:\n if (item.setpoint === "comfort2") {\n // Neuer Intervall: speichern den Startwert\n dayIntervals[day].push({ start: item.time });\n } else if (item.setpoint === "eco") {\n // Es wird erwartet, dass ein entsprechender Startwert bereits existiert.\n // Daher ergänzen wir den zuletzt eingefügten Intervall.\n if (dayIntervals[day].length > 0 && typeof dayIntervals[day][dayIntervals[day].length - 1].end === "undefined") {\n dayIntervals[day][dayIntervals[day].length - 1].end = item.time;\n } else {\n // Falls nicht vorhanden, kann man hier optional einen neuen Eintrag anlegen oder loggen\n dayIntervals[day].push({ end: item.time });\n }\n }\n});\n\n/\n Schritt 2: Gruppieren über alle Tage – es werden Gruppen gebildet, die dieselbe\n Kombination aus Start‑ und Endzeit besitzen.\n \n Dabei gehen wir wie folgt vor:\n - Für jeden Tag und jedes Intervall wird ein Schlüssel "start_end" erzeugt.\n - Wenn diese Gruppe bereits existiert, wird der Tag hinzugefügt.\n - Existiert sie nicht, wird eine neue Gruppe angelegt.\n \n Wir erstellen ein Objekt "groups" mit folgendem Aufbau:\n \n {\n "270_420": {\n start: 270,\n end: 420,\n days: [0, 0, 0, 0, 0, 0, 0] // 7 Stellen für Su, Mo, Di, Mi, Do, Fr, Sa\n },\n "840_1200": {\n start: 840,\n end: 1200,\n days: [0, 0, 0, 0, 0, 0, 0]\n }\n }\n \n Dabei wird für jeden Tag in der entsprechenden Gruppe der Index im days-Array auf 1 gesetzt.\n/\n\n// Mapping der Wochentage auf Index im days-Array:\n// Index 0 = Sonntag, 1 = Montag, 2 = Dienstag, 3 = Mittwoch, 4 = Donnerstag, 5 = Freitag, 6 = Samstag\nvar weekDayIndex = {\n "Su": 0,\n "Mo": 1,\n "Tu": 2,\n "We": 3,\n "Th": 4,\n "Fr": 5,\n "Sa": 6\n};\n\nvar groups = {};\n\n// Gehe alle Tage durch und alle Intervalle des jeweiligen Tages\nfor (var day in dayIntervals) {\n var intervals = dayIntervals[day];\n intervals.forEach(function(interval) {\n // Nur weiter verarbeiten, wenn sowohl start als auch end vorhanden sind\n if (typeof interval.start !== "undefined" && typeof interval.end !== "undefined") {\n var key = interval.start + "" + interval.end;\n // Falls Gruppe noch nicht existiert, anlegen\n if (!groups[key]) {\n groups[key] = {\n start: interval.start,\n end: interval.end,\n days: [0, 0, 0, 0, 0, 0, 0]\n };\n }\n // Bestimme den Index des aktuellen Tages (ggf. alternative Schreibweisen beachten)\n var idx = weekDayIndex[day];\n if (typeof idx !== "undefined") {\n groups[key].days[idx] = 1;\n }\n }\n });\n}\n\n/\n Schritt 3: Aufbau des finalen Timers-Arrays.\n Für jede Gruppe wird ein Objekt erstellt, das folgende Struktur hat:\n \n {\n "starttime": <absolute Startzeit>,\n "days": [Array mit 7 Werten],\n "output": "0", // oder ein anderer fest definierter Wert\n "endtime": <absolute Endzeit>\n }\n \n Dabei werden die Zeiten über die Funktion toTimestamp() umgerechnet.\n/\n// Zuerst bestimmen wir den Wert von output abhängig vom msg.program\nvar outputValue = "0"; // Standardwert\nif (msg.program === "B") {\n outputValue = "1";\n} else if (msg.program === "A") {\n outputValue = "0";\n}\n\nvar timers = [];\nfor (var key in groups) {\n var grp = groups[key];\n timers.push({\n starttime: toTimestamp(grp.start),\n endtime: toTimestamp(grp.end),\n days: grp.days,\n output: outputValue\n });\n}\n\n/\n Schritt 4: Aufbau des finalen Ausgabeobjekts.\n/\nmsg.payload = timers;\n\nreturn msg;",
      "outputs": 1,
      "timeout": 0,
      "noerr": 0,
      "initialize": "",
      "finalize": "",
      "libs": [],
      "x": 760,
      "y": 120,
      "wires": [
      [
      "73d6757f1e5fdf61"
      ]
      ]
      },
      {
      "id": "46437c651a59543a",
      "type": "ioBroker get",
      "z": "fd7f31397b058e66",
      "name": "switchPrograms.A",
      "topic": "",
      "attrname": "payload",
      "payloadType": "value",
      "x": 470,
      "y": 120,
      "wires": [
      [
      "32302fdcb491d2a5"
      ]
      ]
      },
      {
      "id": "32302fdcb491d2a5",
      "type": "json",
      "z": "fd7f31397b058e66",
      "name": "",
      "property": "payload",
      "action": "obj",
      "pretty": false,
      "x": 630,
      "y": 120,
      "wires": [
      [
      "34e0423f1724b8f1"
      ]
      ]
      },
      {
      "id": "8a64d2a144809a71",
      "type": "change",
      "z": "fd7f31397b058e66",
      "name": "SETTINGS",
      "rules": [
      {
      "t": "set",
      "p": "topic_A",
      "pt": "msg",
      "to": "${PROGRAMS_A}",
      "tot": "str"
      },
      {
      "t": "set",
      "p": "topic_B",
      "pt": "msg",
      "to": "${PROGRAMS_B}",
      "tot": "str"
      },
      {
      "t": "set",
      "p": "activeSwitchProgram",
      "pt": "msg",
      "to": "${ACTIVE}",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 210,
      "y": 220,
      "wires": [
      [
      "ceba323fdfd481ed",
      "9a3dc889e642ccd9",
      "3e17abbc9832a241"
      ]
      ]
      },
      {
      "id": "ceba323fdfd481ed",
      "type": "change",
      "z": "fd7f31397b058e66",
      "name": "topic_A->topic",
      "rules": [
      {
      "t": "move",
      "p": "topic_A",
      "pt": "msg",
      "to": "topic",
      "tot": "msg"
      },
      {
      "t": "set",
      "p": "program",
      "pt": "msg",
      "to": "A",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 480,
      "y": 80,
      "wires": [
      [
      "46437c651a59543a"
      ]
      ]
      },
      {
      "id": "dd20b12c905c22fc",
      "type": "function",
      "z": "fd7f31397b058e66",
      "name": "timers_B",
      "func": "// Erzeugt einen Date-Objekt für den aktuellen Tag um 00:00 Uhr\nvar baseDate = new Date();\nbaseDate.setHours(0, 0, 0, 0);\nvar base = baseDate.getTime(); // Basis-Zeitstempel in Millisekunden\n\n// Hilfsfunktion: Wandelt Minuten in einen absoluten Timestamp (Millisekunden) um\nfunction toTimestamp(minutes) {\n return base + minutes * 60000;\n}\n\n/\n Schritt 1: Für jeden Wochentag Start- und Endzeit ermitteln\n Dabei gilt:\n - setpoint "comfort2" → Startzeit\n - setpoint "eco" → Endzeit\n \n Wir erwarten, dass msg.hc1_a ein Array mit Objekten ist, z. B.:\n [\n {"dayOfWeek":"Mo","setpoint":"comfort2","time":270},\n {"dayOfWeek":"Mo","setpoint":"eco","time":420},\n {"dayOfWeek":"Mo","setpoint":"comfort2","time":840},\n {"dayOfWeek":"Mo","setpoint":"eco","time":1200},\n {"dayOfWeek":"Tu","setpoint":"comfort2","time":270},\n {"dayOfWeek":"Tu","setpoint":"eco","time":420},\n ...\n ]\n \n Es können auch mehrere Intervalle pro Tag vorhanden sein. In diesem Beispiel gruppieren\n wir jeweils je 2 Einträge (ein Start- und ein Endwert) – vorausgesetzt, die Daten liegen\n sortiert nach Zeit vor.\n/\nvar dayIntervals = {}; // Beispiel: { "Mo": [ {start:270, end:420}, {start:840, end:1200} ], ... }\n\nmsg.payload.forEach(function(item) {\n var day = item.dayOfWeek;\n // Initialisiere den Tag, falls noch nicht vorhanden\n if (!dayIntervals[day]) {\n dayIntervals[day] = [];\n }\n \n // Wir speichern die Werte vorerst als temporäres Objekt pro Tag\n // Es wird angenommen, dass immer zwei Einträge hintereinander zum gleichen Intervall gehören.\n // Daher speichern wir einfach in der Reihenfolge der Verarbeitung:\n if (item.setpoint === "comfort2") {\n // Neuer Intervall: speichern den Startwert\n dayIntervals[day].push({ start: item.time });\n } else if (item.setpoint === "eco") {\n // Es wird erwartet, dass ein entsprechender Startwert bereits existiert.\n // Daher ergänzen wir den zuletzt eingefügten Intervall.\n if (dayIntervals[day].length > 0 && typeof dayIntervals[day][dayIntervals[day].length - 1].end === "undefined") {\n dayIntervals[day][dayIntervals[day].length - 1].end = item.time;\n } else {\n // Falls nicht vorhanden, kann man hier optional einen neuen Eintrag anlegen oder loggen\n dayIntervals[day].push({ end: item.time });\n }\n }\n});\n\n/\n Schritt 2: Gruppieren über alle Tage – es werden Gruppen gebildet, die dieselbe\n Kombination aus Start‑ und Endzeit besitzen.\n \n Dabei gehen wir wie folgt vor:\n - Für jeden Tag und jedes Intervall wird ein Schlüssel "start_end" erzeugt.\n - Wenn diese Gruppe bereits existiert, wird der Tag hinzugefügt.\n - Existiert sie nicht, wird eine neue Gruppe angelegt.\n \n Wir erstellen ein Objekt "groups" mit folgendem Aufbau:\n \n {\n "270_420": {\n start: 270,\n end: 420,\n days: [0, 0, 0, 0, 0, 0, 0] // 7 Stellen für Su, Mo, Di, Mi, Do, Fr, Sa\n },\n "840_1200": {\n start: 840,\n end: 1200,\n days: [0, 0, 0, 0, 0, 0, 0]\n }\n }\n \n Dabei wird für jeden Tag in der entsprechenden Gruppe der Index im days-Array auf 1 gesetzt.\n/\n\n// Mapping der Wochentage auf Index im days-Array:\n// Index 0 = Sonntag, 1 = Montag, 2 = Dienstag, 3 = Mittwoch, 4 = Donnerstag, 5 = Freitag, 6 = Samstag\nvar weekDayIndex = {\n "Su": 0,\n "Mo": 1,\n "Tu": 2,\n "We": 3,\n "Th": 4,\n "Fr": 5,\n "Sa": 6\n};\n\nvar groups = {};\n\n// Gehe alle Tage durch und alle Intervalle des jeweiligen Tages\nfor (var day in dayIntervals) {\n var intervals = dayIntervals[day];\n intervals.forEach(function(interval) {\n // Nur weiter verarbeiten, wenn sowohl start als auch end vorhanden sind\n if (typeof interval.start !== "undefined" && typeof interval.end !== "undefined") {\n var key = interval.start + "
      " + interval.end;\n // Falls Gruppe noch nicht existiert, anlegen\n if (!groups[key]) {\n groups[key] = {\n start: interval.start,\n end: interval.end,\n days: [0, 0, 0, 0, 0, 0, 0]\n };\n }\n // Bestimme den Index des aktuellen Tages (ggf. alternative Schreibweisen beachten)\n var idx = weekDayIndex[day];\n if (typeof idx !== "undefined") {\n groups[key].days[idx] = 1;\n }\n }\n });\n}\n\n/\n Schritt 3: Aufbau des finalen Timers-Arrays.\n Für jede Gruppe wird ein Objekt erstellt, das folgende Struktur hat:\n \n {\n "starttime": <absolute Startzeit>,\n "days": [Array mit 7 Werten],\n "output": "0", // oder ein anderer fest definierter Wert\n "endtime": <absolute Endzeit>\n }\n \n Dabei werden die Zeiten über die Funktion toTimestamp() umgerechnet.\n/\n// Zuerst bestimmen wir den Wert von output abhängig vom msg.program\nvar outputValue = "0"; // Standardwert\nif (msg.program === "B") {\n outputValue = "1";\n} else if (msg.program === "A") {\n outputValue = "0";\n}\n\nvar timers = [];\nfor (var key in groups) {\n var grp = groups[key];\n timers.push({\n starttime: toTimestamp(grp.start),\n endtime: toTimestamp(grp.end),\n days: grp.days,\n output: outputValue\n });\n}\n\n/\n Schritt 4: Aufbau des finalen Ausgabeobjekts.\n Hier wird zusätzlich ein fester "settings"-Block angehängt.\n\nmsg.payload = {\n timers: timers,\n settings: {\n disabledDevices: ["1"],\n overviewFilter: "all"\n }\n};\n/\nmsg.payload = timers;\n\nreturn msg;",
      "outputs": 1,
      "timeout": 0,
      "noerr": 0,
      "initialize": "",
      "finalize": "",
      "libs": [],
      "x": 760,
      "y": 220,
      "wires": [
      [
      "a787ad3e7e0c0361"
      ]
      ]
      },
      {
      "id": "823d912cec3f4a16",
      "type": "ioBroker get",
      "z": "fd7f31397b058e66",
      "name": "switchPrograms.B",
      "topic": "",
      "attrname": "payload",
      "payloadType": "value",
      "x": 470,
      "y": 220,
      "wires": [
      [
      "80c474d6b95f4577"
      ]
      ]
      },
      {
      "id": "80c474d6b95f4577",
      "type": "json",
      "z": "fd7f31397b058e66",
      "name": "",
      "property": "payload",
      "action": "obj",
      "pretty": false,
      "x": 630,
      "y": 220,
      "wires": [
      [
      "dd20b12c905c22fc"
      ]
      ]
      },
      {
      "id": "9a3dc889e642ccd9",
      "type": "change",
      "z": "fd7f31397b058e66",
      "name": "topic_B->topic",
      "rules": [
      {
      "t": "move",
      "p": "topic_B",
      "pt": "msg",
      "to": "topic",
      "tot": "msg"
      },
      {
      "t": "set",
      "p": "program",
      "pt": "msg",
      "to": "B",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 480,
      "y": 180,
      "wires": [
      [
      "823d912cec3f4a16"
      ]
      ]
      },
      {
      "id": "0fae35c54a79d5af",
      "type": "ioBroker get",
      "z": "fd7f31397b058e66",
      "name": "activeSwitchProgram",
      "topic": "",
      "attrname": "payload",
      "payloadType": "value",
      "x": 480,
      "y": 320,
      "wires": [
      [
      "d175fb6bdb10e573"
      ]
      ]
      },
      {
      "id": "3e17abbc9832a241",
      "type": "change",
      "z": "fd7f31397b058e66",
      "name": "activeSwitchProgram->topic",
      "rules": [
      {
      "t": "move",
      "p": "activeSwitchProgram",
      "pt": "msg",
      "to": "topic",
      "tot": "msg"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 500,
      "y": 280,
      "wires": [
      [
      "0fae35c54a79d5af"
      ]
      ]
      },
      {
      "id": "d175fb6bdb10e573",
      "type": "change",
      "z": "fd7f31397b058e66",
      "name": "topic activeSwitchProgram",
      "rules": [
      {
      "t": "set",
      "p": "topic",
      "pt": "msg",
      "to": "activeSwitchProgram",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 900,
      "y": 320,
      "wires": [
      [
      "0b028760a51cdc98"
      ]
      ]
      },
      {
      "id": "73d6757f1e5fdf61",
      "type": "change",
      "z": "fd7f31397b058e66",
      "name": "topic timers_A",
      "rules": [
      {
      "t": "set",
      "p": "topic",
      "pt": "msg",
      "to": "timers_A",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 940,
      "y": 140,
      "wires": [
      [
      "0b028760a51cdc98"
      ]
      ]
      },
      {
      "id": "a787ad3e7e0c0361",
      "type": "change",
      "z": "fd7f31397b058e66",
      "name": "topic timers_B",
      "rules": [
      {
      "t": "set",
      "p": "topic",
      "pt": "msg",
      "to": "timers_B",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 940,
      "y": 220,
      "wires": [
      [
      "0b028760a51cdc98"
      ]
      ]
      },
      {
      "id": "0b028760a51cdc98",
      "type": "join",
      "z": "fd7f31397b058e66",
      "name": "",
      "mode": "custom",
      "build": "object",
      "property": "payload",
      "propertyType": "msg",
      "key": "topic",
      "joiner": "\n",
      "joinerType": "str",
      "accumulate": false,
      "timeout": "",
      "count": "3",
      "reduceRight": false,
      "reduceExp": "",
      "reduceInit": "",
      "reduceInitType": "",
      "reduceFixup": "",
      "x": 1170,
      "y": 220,
      "wires": [
      [
      "12c457a5ee91046c"
      ]
      ]
      },
      {
      "id": "12c457a5ee91046c",
      "type": "function",
      "z": "fd7f31397b058e66",
      "name": "timers",
      "func": "//node.warn(JSON.stringify(msg));\n\nvar timers_A = msg.payload.timers_A || [];\nvar timers_B = msg.payload.timers_B || [];\n\nvar timers = timers_A.concat(timers_B);\n\n// Prüfe den Wert von activeSwitchProgram\nvar disabledDevices = (msg.payload.activeSwitchProgram === 0) ? ["1"] : ["0"];\n\nmsg.payload = {\n timers: timers,\n settings: {\n disabledDevices: disabledDevices,\n overviewFilter: "all"\n }\n};\n\nreturn msg;",
      "outputs": 1,
      "timeout": 0,
      "noerr": 0,
      "initialize": "",
      "finalize": "",
      "libs": [],
      "x": 1290,
      "y": 220,
      "wires": [
      []
      ]
      },
      {
      "id": "1dc1799ec4ec93f2",
      "type": "tab",
      "label": "Heizung Zeitprogramm",
      "disabled": false,
      "info": "",
      "env": []
      },
      {
      "id": "34521d86747bd8bd",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "9749f3015788db19",
      "8408c6fde425aef6",
      "b9e930348330f1a7",
      "c419a0b8794650c8",
      "87fcae0db87d8ec7",
      "b71674975643d4c6",
      "64c274d3e12760cd",
      "d86ee423ac01ac1d"
      ],
      "x": 34,
      "y": 13,
      "w": 998,
      "h": 314
      },
      {
      "id": "c6885eaad8ba447a",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "e87bd978436f175d",
      "7a6e354a4dc03390",
      "4497347fc72f4c67"
      ],
      "x": 1054,
      "y": 19,
      "w": 292,
      "h": 122
      },
      {
      "id": "5607675eb8b28b91",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "f22a7d5a405263b9",
      "86b5b09cb63644c1",
      "ce8ae0fc54a4d15a"
      ],
      "x": 34,
      "y": 339,
      "w": 438,
      "h": 475.5
      },
      {
      "id": "87aa28c70609a83b",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "3ee41d6b6e418725",
      "4c8b49a972950636",
      "73cfa9d90e59c8f2"
      ],
      "x": 488,
      "y": 339,
      "w": 344,
      "h": 468
      },
      {
      "id": "bc982b55b594a1be",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "804b40577d582f81",
      "2d7a89955c419a2e",
      "3bd48465ca73fb26"
      ],
      "x": 848,
      "y": 339,
      "w": 644,
      "h": 468
      },
      {
      "id": "64c274d3e12760cd",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "adcb82cb3b2ca1c0",
      "e991c15e29c9e763",
      "48ce6a5974ab43e7",
      "ae32871f3dfe3184",
      "57973e094f933eaf"
      ],
      "x": 634,
      "y": 179,
      "w": 372,
      "h": 122
      },
      {
      "id": "d86ee423ac01ac1d",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "72b13674ea7cb2c6",
      "5ae27aa26c57fb34",
      "8a494a52f8a84a72",
      "4730defac1edfe3a",
      "b181124ed41c964c"
      ],
      "x": 634,
      "y": 39,
      "w": 372,
      "h": 122
      },
      {
      "id": "86b5b09cb63644c1",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "5607675eb8b28b91",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "80cbeafa06501ebd",
      "aadc625bce68705a",
      "f27da676130dbb50",
      "a8a5c24a6c414379"
      ],
      "x": 64,
      "y": 659,
      "w": 382,
      "h": 129.5
      },
      {
      "id": "ce8ae0fc54a4d15a",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "5607675eb8b28b91",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "b4059551aadd1ba8",
      "b58755c1aff6132f",
      "494583202e3e8494",
      "10b6a4012722e8ad"
      ],
      "x": 64,
      "y": 399,
      "w": 382,
      "h": 129.5
      },
      {
      "id": "4c8b49a972950636",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "87aa28c70609a83b",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "69b371c33441d3dc",
      "8b1a501f36b9733a",
      "3b325db587bbcdb6"
      ],
      "x": 514,
      "y": 659,
      "w": 292,
      "h": 122
      },
      {
      "id": "73cfa9d90e59c8f2",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "87aa28c70609a83b",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "51e634864245163f",
      "fb67c94b04023f8d",
      "4fce0eb37daebf39"
      ],
      "x": 514,
      "y": 399,
      "w": 292,
      "h": 122
      },
      {
      "id": "2d7a89955c419a2e",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "bc982b55b594a1be",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "e67070774e76ceed",
      "73623095fc2284e5",
      "282f35b8fde4649d",
      "439e908c416c021c",
      "a56607f2cbb3e1d5",
      "bc3a160867da8da4",
      "d0ce33fc89b9d55c"
      ],
      "x": 874,
      "y": 599,
      "w": 592,
      "h": 182
      },
      {
      "id": "3bd48465ca73fb26",
      "type": "group",
      "z": "1dc1799ec4ec93f2",
      "g": "bc982b55b594a1be",
      "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
      },
      "nodes": [
      "1fbebe44e887c212",
      "4c97aeaa84cf0530",
      "49b29ab6eae048ec",
      "e15fe52156f0da29",
      "62f8829176a49bbb",
      "b6ac03883a2c5fae",
      "0162469a4966cc8d"
      ],
      "x": 874,
      "y": 399,
      "w": 592,
      "h": 182
      },
      {
      "id": "9749f3015788db19",
      "type": "inject",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "name": "Trigger",
      "props": [
      {
      "p": "payload"
      },
      {
      "p": "topic",
      "vt": "str"
      }
      ],
      "repeat": "1",
      "crontab": "",
      "once": true,
      "onceDelay": 0.1,
      "topic": "",
      "payload": "",
      "payloadType": "date",
      "x": 140,
      "y": 180,
      "wires": [
      [
      "b9e930348330f1a7"
      ]
      ]
      },
      {
      "id": "72b13674ea7cb2c6",
      "type": "subflow:fd7f31397b058e66",
      "z": "1dc1799ec4ec93f2",
      "g": "d86ee423ac01ac1d",
      "name": "",
      "x": 730,
      "y": 120,
      "wires": [
      [
      "5ae27aa26c57fb34"
      ]
      ],
      "icon": "node-red/batch.svg"
      },
      {
      "id": "adcb82cb3b2ca1c0",
      "type": "subflow:fd7f31397b058e66",
      "z": "1dc1799ec4ec93f2",
      "g": "64c274d3e12760cd",
      "name": "",
      "env": [
      {
      "name": "PROGRAMS_A",
      "value": "ems-esp.0.heatingCircuits.hc2.switchPrograms.A",
      "type": "str"
      },
      {
      "name": "PROGRAMS_B",
      "value": "ems-esp.0.heatingCircuits.hc2.switchPrograms.B",
      "type": "str"
      },
      {
      "name": "ACTIVE",
      "value": "ems-esp.0.heatingCircuits.hc2.activeSwitchProgram",
      "type": "str"
      }
      ],
      "x": 730,
      "y": 220,
      "wires": [
      [
      "e991c15e29c9e763"
      ]
      ],
      "icon": "node-red/batch.svg"
      },
      {
      "id": "8408c6fde425aef6",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "name": "### hole Daten von Heizung ###",
      "info": "",
      "x": 190,
      "y": 60,
      "wires": []
      },
      {
      "id": "b4059551aadd1ba8",
      "type": "ui_time_scheduler",
      "z": "1dc1799ec4ec93f2",
      "g": "ce8ae0fc54a4d15a",
      "group": "bfe48a3e.1b0f4",
      "name": "ui scheduler hc1",
      "startDay": "1",
      "refresh": "10",
      "devices": [
      "switchPrograms.A",
      "switchPrograms.B"
      ],
      "singleOff": false,
      "onlySendChange": false,
      "customPayload": false,
      "eventMode": false,
      "eventOptions": [],
      "sendTopic": false,
      "lat": "",
      "lon": "",
      "customContextStore": "",
      "outputs": 3,
      "order": 2,
      "width": 7,
      "height": 7,
      "x": 220,
      "y": 480,
      "wires": [
      [
      "494583202e3e8494"
      ],
      [],
      []
      ]
      },
      {
      "id": "80cbeafa06501ebd",
      "type": "ui_time_scheduler",
      "z": "1dc1799ec4ec93f2",
      "g": "86b5b09cb63644c1",
      "group": "fc9e25e07ff9439d",
      "name": "ui scheduler hc2",
      "startDay": "1",
      "refresh": "10",
      "devices": [
      "switchPrograms.A",
      "switchPrograms.B"
      ],
      "singleOff": false,
      "onlySendChange": false,
      "customPayload": false,
      "eventMode": false,
      "eventOptions": [],
      "sendTopic": false,
      "lat": "",
      "lon": "",
      "customContextStore": "",
      "outputs": 3,
      "order": 2,
      "width": 7,
      "height": 7,
      "x": 220,
      "y": 740,
      "wires": [
      [
      "f27da676130dbb50"
      ],
      [],
      []
      ]
      },
      {
      "id": "5ae27aa26c57fb34",
      "type": "json",
      "z": "1dc1799ec4ec93f2",
      "g": "d86ee423ac01ac1d",
      "name": "",
      "property": "payload",
      "action": "str",
      "pretty": false,
      "x": 850,
      "y": 120,
      "wires": [
      [
      "8a494a52f8a84a72"
      ]
      ]
      },
      {
      "id": "e991c15e29c9e763",
      "type": "json",
      "z": "1dc1799ec4ec93f2",
      "g": "64c274d3e12760cd",
      "name": "",
      "property": "payload",
      "action": "str",
      "pretty": false,
      "x": 850,
      "y": 220,
      "wires": [
      [
      "48ce6a5974ab43e7"
      ]
      ]
      },
      {
      "id": "b9e930348330f1a7",
      "type": "ui_ui_control",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "name": "Tab Activity Control",
      "events": "change",
      "x": 310,
      "y": 180,
      "wires": [
      [
      "c419a0b8794650c8",
      "87fcae0db87d8ec7"
      ]
      ]
      },
      {
      "id": "c419a0b8794650c8",
      "type": "switch",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "name": "Check if Tab is Active",
      "property": "name",
      "propertyType": "msg",
      "rules": [
      {
      "t": "eq",
      "v": "Heizung Dashboard",
      "vt": "str"
      }
      ],
      "checkall": "true",
      "repair": false,
      "outputs": 1,
      "x": 520,
      "y": 180,
      "wires": [
      [
      "72b13674ea7cb2c6",
      "adcb82cb3b2ca1c0"
      ]
      ]
      },
      {
      "id": "87fcae0db87d8ec7",
      "type": "debug",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "name": "Ausgabe Tab Name",
      "active": false,
      "tosidebar": true,
      "console": false,
      "tostatus": false,
      "complete": "name",
      "targetType": "msg",
      "statusVal": "",
      "statusType": "auto",
      "x": 510,
      "y": 220,
      "wires": []
      },
      {
      "id": "b71674975643d4c6",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "34521d86747bd8bd",
      "name": "Tab Name anpassen",
      "info": "",
      "x": 510,
      "y": 140,
      "wires": [],
      "icon": "node-red/alert.svg"
      },
      {
      "id": "8a494a52f8a84a72",
      "type": "link out",
      "z": "1dc1799ec4ec93f2",
      "g": "d86ee423ac01ac1d",
      "name": "Data HC1",
      "mode": "link",
      "links": [
      "b58755c1aff6132f"
      ],
      "x": 945,
      "y": 120,
      "wires": []
      },
      {
      "id": "b58755c1aff6132f",
      "type": "link in",
      "z": "1dc1799ec4ec93f2",
      "g": "ce8ae0fc54a4d15a",
      "name": "Data HC1",
      "links": [
      "8a494a52f8a84a72"
      ],
      "x": 105,
      "y": 480,
      "wires": [
      [
      "b4059551aadd1ba8"
      ]
      ]
      },
      {
      "id": "48ce6a5974ab43e7",
      "type": "link out",
      "z": "1dc1799ec4ec93f2",
      "g": "64c274d3e12760cd",
      "name": "Data HC2",
      "mode": "link",
      "links": [
      "aadc625bce68705a"
      ],
      "x": 945,
      "y": 220,
      "wires": []
      },
      {
      "id": "aadc625bce68705a",
      "type": "link in",
      "z": "1dc1799ec4ec93f2",
      "g": "86b5b09cb63644c1",
      "name": "Data HC2",
      "links": [
      "48ce6a5974ab43e7"
      ],
      "x": 105,
      "y": 740,
      "wires": [
      [
      "80cbeafa06501ebd"
      ]
      ]
      },
      {
      "id": "4730defac1edfe3a",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "d86ee423ac01ac1d",
      "name": "Path zu objecten anpassen",
      "info": "",
      "x": 770,
      "y": 80,
      "wires": [],
      "icon": "node-red/alert.svg"
      },
      {
      "id": "e87bd978436f175d",
      "type": "ui_toast",
      "z": "1dc1799ec4ec93f2",
      "g": "c6885eaad8ba447a",
      "position": "top right",
      "displayTime": "5",
      "highlight": "",
      "sendall": true,
      "outputs": 0,
      "ok": "OK",
      "cancel": "",
      "raw": false,
      "className": "",
      "topic": "",
      "name": "alert Messages",
      "x": 1240,
      "y": 100,
      "wires": []
      },
      {
      "id": "494583202e3e8494",
      "type": "json",
      "z": "1dc1799ec4ec93f2",
      "g": "ce8ae0fc54a4d15a",
      "name": "",
      "property": "payload",
      "action": "",
      "pretty": false,
      "x": 370,
      "y": 480,
      "wires": [
      [
      "fb67c94b04023f8d"
      ]
      ]
      },
      {
      "id": "f27da676130dbb50",
      "type": "json",
      "z": "1dc1799ec4ec93f2",
      "g": "86b5b09cb63644c1",
      "name": "",
      "property": "payload",
      "action": "",
      "pretty": false,
      "x": 370,
      "y": 740,
      "wires": [
      [
      "69b371c33441d3dc"
      ]
      ]
      },
      {
      "id": "1fbebe44e887c212",
      "type": "ui_template",
      "z": "1dc1799ec4ec93f2",
      "g": "3bd48465ca73fb26",
      "group": "bfe48a3e.1b0f4",
      "name": "Button speichern",
      "order": 1,
      "width": 0,
      "height": 0,
      "format": "<style>\n /* Eigene CSS-Klasse für den deaktivierten Zustand /\n .my-disabled-btn {\n display: none !important;\n }\n</style>\n\n<div layout="column" style="text-align: center;">\n <md-button class="md-raised" ng-disabled="msg.hide_save_button" ng-click="send(msg)"\n ng-class="{'my-disabled-btn': msg.hide_save_button, 'md-primary': !msg.hide_save_button}">\n <md-icon>save</md-icon>\n jetzt speichern\n </md-button>\n</div>\n \n<script>\n (function(scope) {\n // Falls noch kein msg vorhanden ist, initialisieren wir es.\n if (!scope.msg) {\n scope.msg = {};\n }\n // Wenn msg.hide_save_button nicht definiert ist, setzen wir es auf true (Button deaktiviert)\n if (typeof scope.msg.hide_save_button === 'undefined') {\n scope.msg.hide_save_button = true;\n }\n })(scope);\n</script>",
      "storeOutMessages": true,
      "fwdInMessages": false,
      "resendOnRefresh": true,
      "templateScope": "local",
      "className": "",
      "x": 1070,
      "y": 540,
      "wires": [
      [
      "62f8829176a49bbb"
      ]
      ]
      },
      {
      "id": "4c97aeaa84cf0530",
      "type": "inject",
      "z": "1dc1799ec4ec93f2",
      "g": "3bd48465ca73fb26",
      "name": "Init Button",
      "props": [
      {
      "p": "hide_save_button",
      "v": "true",
      "vt": "bool"
      }
      ],
      "repeat": "",
      "crontab": "",
      "once": true,
      "onceDelay": "0.1",
      "topic": "",
      "x": 990,
      "y": 480,
      "wires": [
      [
      "1fbebe44e887c212"
      ]
      ]
      },
      {
      "id": "49b29ab6eae048ec",
      "type": "change",
      "z": "1dc1799ec4ec93f2",
      "g": "3bd48465ca73fb26",
      "name": "done hide Button",
      "rules": [
      {
      "t": "set",
      "p": "hide_save_button",
      "pt": "msg",
      "to": "true",
      "tot": "bool"
      },
      {
      "t": "set",
      "p": "highlight",
      "pt": "msg",
      "to": "green",
      "tot": "str"
      },
      {
      "t": "set",
      "p": "topic",
      "pt": "msg",
      "to": "Info",
      "tot": "str"
      },
      {
      "t": "set",
      "p": "payload",
      "pt": "msg",
      "to": "Erfolgreich gespeichert",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 1230,
      "y": 480,
      "wires": [
      [
      "1fbebe44e887c212",
      "e15fe52156f0da29"
      ]
      ]
      },
      {
      "id": "51e634864245163f",
      "type": "link out",
      "z": "1dc1799ec4ec93f2",
      "g": "73cfa9d90e59c8f2",
      "name": "To_Messages",
      "mode": "link",
      "links": [
      "7a6e354a4dc03390"
      ],
      "x": 765,
      "y": 460,
      "wires": []
      },
      {
      "id": "7a6e354a4dc03390",
      "type": "link in",
      "z": "1dc1799ec4ec93f2",
      "g": "c6885eaad8ba447a",
      "name": "Messages_IN",
      "links": [
      "51e634864245163f",
      "e15fe52156f0da29",
      "8b1a501f36b9733a",
      "8b92bee47f47148b",
      "439e908c416c021c"
      ],
      "x": 1105,
      "y": 100,
      "wires": [
      [
      "e87bd978436f175d"
      ]
      ]
      },
      {
      "id": "e15fe52156f0da29",
      "type": "link out",
      "z": "1dc1799ec4ec93f2",
      "g": "3bd48465ca73fb26",
      "name": "To_Messages",
      "mode": "link",
      "links": [
      "7a6e354a4dc03390"
      ],
      "x": 1385,
      "y": 480,
      "wires": []
      },
      {
      "id": "4497347fc72f4c67",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "c6885eaad8ba447a",
      "name": "### Benachrichtigungen ###",
      "info": "",
      "x": 1200,
      "y": 60,
      "wires": []
      },
      {
      "id": "fb67c94b04023f8d",
      "type": "subflow:110aeb09527e60b1",
      "z": "1dc1799ec4ec93f2",
      "g": "73cfa9d90e59c8f2",
      "name": "",
      "x": 630,
      "y": 480,
      "wires": [
      [
      "51e634864245163f"
      ],
      [
      "1fbebe44e887c212"
      ]
      ]
      },
      {
      "id": "69b371c33441d3dc",
      "type": "subflow:110aeb09527e60b1",
      "z": "1dc1799ec4ec93f2",
      "g": "4c8b49a972950636",
      "name": "",
      "x": 630,
      "y": 740,
      "wires": [
      [
      "8b1a501f36b9733a"
      ],
      [
      "e67070774e76ceed"
      ]
      ]
      },
      {
      "id": "8b1a501f36b9733a",
      "type": "link out",
      "z": "1dc1799ec4ec93f2",
      "g": "4c8b49a972950636",
      "name": "To_Messages",
      "mode": "link",
      "links": [
      "7a6e354a4dc03390"
      ],
      "x": 765,
      "y": 720,
      "wires": []
      },
      {
      "id": "62f8829176a49bbb",
      "type": "subflow:b647dcc6973cef0a",
      "z": "1dc1799ec4ec93f2",
      "g": "3bd48465ca73fb26",
      "name": "",
      "x": 1230,
      "y": 540,
      "wires": [
      [
      "49b29ab6eae048ec",
      "b6ac03883a2c5fae"
      ]
      ]
      },
      {
      "id": "e67070774e76ceed",
      "type": "ui_template",
      "z": "1dc1799ec4ec93f2",
      "g": "2d7a89955c419a2e",
      "group": "fc9e25e07ff9439d",
      "name": "Button speichern",
      "order": 1,
      "width": 0,
      "height": 0,
      "format": "<style>\n /
      Eigene CSS-Klasse für den deaktivierten Zustand */\n .my-disabled-btn {\n display: none !important;\n }\n</style>\n\n<div layout="column" style="text-align: center;">\n <md-button class="md-raised" ng-disabled="msg.hide_save_button" ng-click="send(msg)"\n ng-class="{'my-disabled-btn': msg.hide_save_button, 'md-primary': !msg.hide_save_button}">\n <md-icon>save</md-icon>\n jetzt speichern\n </md-button>\n</div>\n \n<script>\n (function(scope) {\n // Falls noch kein msg vorhanden ist, initialisieren wir es.\n if (!scope.msg) {\n scope.msg = {};\n }\n // Wenn msg.hide_save_button nicht definiert ist, setzen wir es auf true (Button deaktiviert)\n if (typeof scope.msg.hide_save_button === 'undefined') {\n scope.msg.hide_save_button = true;\n }\n })(scope);\n</script>",
      "storeOutMessages": true,
      "fwdInMessages": false,
      "resendOnRefresh": true,
      "templateScope": "local",
      "className": "",
      "x": 1070,
      "y": 740,
      "wires": [
      [
      "a56607f2cbb3e1d5"
      ]
      ]
      },
      {
      "id": "73623095fc2284e5",
      "type": "inject",
      "z": "1dc1799ec4ec93f2",
      "g": "2d7a89955c419a2e",
      "name": "Init Button",
      "props": [
      {
      "p": "hide_save_button",
      "v": "true",
      "vt": "bool"
      }
      ],
      "repeat": "",
      "crontab": "",
      "once": true,
      "onceDelay": "0.1",
      "topic": "",
      "x": 990,
      "y": 680,
      "wires": [
      [
      "e67070774e76ceed"
      ]
      ]
      },
      {
      "id": "282f35b8fde4649d",
      "type": "change",
      "z": "1dc1799ec4ec93f2",
      "g": "2d7a89955c419a2e",
      "name": "done hide Button",
      "rules": [
      {
      "t": "set",
      "p": "hide_save_button",
      "pt": "msg",
      "to": "true",
      "tot": "bool"
      },
      {
      "t": "set",
      "p": "highlight",
      "pt": "msg",
      "to": "green",
      "tot": "str"
      },
      {
      "t": "set",
      "p": "topic",
      "pt": "msg",
      "to": "Info",
      "tot": "str"
      },
      {
      "t": "set",
      "p": "payload",
      "pt": "msg",
      "to": "Erfolgreich gespeichert",
      "tot": "str"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 1230,
      "y": 680,
      "wires": [
      [
      "e67070774e76ceed",
      "439e908c416c021c"
      ]
      ]
      },
      {
      "id": "439e908c416c021c",
      "type": "link out",
      "z": "1dc1799ec4ec93f2",
      "g": "2d7a89955c419a2e",
      "name": "To_Messages",
      "mode": "link",
      "links": [
      "7a6e354a4dc03390"
      ],
      "x": 1385,
      "y": 680,
      "wires": []
      },
      {
      "id": "a56607f2cbb3e1d5",
      "type": "subflow:b647dcc6973cef0a",
      "z": "1dc1799ec4ec93f2",
      "g": "2d7a89955c419a2e",
      "name": "",
      "x": 1230,
      "y": 740,
      "wires": [
      [
      "282f35b8fde4649d",
      "bc3a160867da8da4"
      ]
      ]
      },
      {
      "id": "bc3a160867da8da4",
      "type": "debug",
      "z": "1dc1799ec4ec93f2",
      "g": "2d7a89955c419a2e",
      "name": "debug",
      "active": true,
      "tosidebar": true,
      "console": false,
      "tostatus": false,
      "complete": "payload",
      "targetType": "msg",
      "statusVal": "",
      "statusType": "auto",
      "x": 1370,
      "y": 740,
      "wires": []
      },
      {
      "id": "b6ac03883a2c5fae",
      "type": "debug",
      "z": "1dc1799ec4ec93f2",
      "g": "3bd48465ca73fb26",
      "name": "debug",
      "active": true,
      "tosidebar": true,
      "console": false,
      "tostatus": false,
      "complete": "payload",
      "targetType": "msg",
      "statusVal": "",
      "statusType": "auto",
      "x": 1370,
      "y": 540,
      "wires": []
      },
      {
      "id": "ae32871f3dfe3184",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "64c274d3e12760cd",
      "name": "Path zu objecten anpassen",
      "info": "",
      "x": 770,
      "y": 260,
      "wires": [],
      "icon": "node-red/alert.svg"
      },
      {
      "id": "3ee41d6b6e418725",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "87aa28c70609a83b",
      "name": "### Fehlerauswertung ###",
      "info": "",
      "x": 630,
      "y": 380,
      "wires": []
      },
      {
      "id": "804b40577d582f81",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "bc982b55b594a1be",
      "name": "### sende Daten zu Heizung ###",
      "info": "",
      "x": 1010,
      "y": 380,
      "wires": []
      },
      {
      "id": "f22a7d5a405263b9",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "5607675eb8b28b91",
      "name": "### Scheduler ###",
      "info": "",
      "x": 150,
      "y": 380,
      "wires": []
      },
      {
      "id": "b181124ed41c964c",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "d86ee423ac01ac1d",
      "name": "## HC1",
      "info": "",
      "x": 930,
      "y": 80,
      "wires": []
      },
      {
      "id": "57973e094f933eaf",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "64c274d3e12760cd",
      "name": "## HC2",
      "info": "",
      "x": 930,
      "y": 260,
      "wires": []
      },
      {
      "id": "10b6a4012722e8ad",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "ce8ae0fc54a4d15a",
      "name": "## HC1",
      "info": "",
      "x": 190,
      "y": 440,
      "wires": []
      },
      {
      "id": "a8a5c24a6c414379",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "86b5b09cb63644c1",
      "name": "## HC2",
      "info": "",
      "x": 190,
      "y": 700,
      "wires": []
      },
      {
      "id": "3b325db587bbcdb6",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "4c8b49a972950636",
      "name": "## HC2",
      "info": "",
      "x": 590,
      "y": 700,
      "wires": []
      },
      {
      "id": "d0ce33fc89b9d55c",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "2d7a89955c419a2e",
      "name": "## HC2",
      "info": "",
      "x": 950,
      "y": 640,
      "wires": []
      },
      {
      "id": "4fce0eb37daebf39",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "73cfa9d90e59c8f2",
      "name": "## HC1",
      "info": "",
      "x": 590,
      "y": 440,
      "wires": []
      },
      {
      "id": "0162469a4966cc8d",
      "type": "comment",
      "z": "1dc1799ec4ec93f2",
      "g": "3bd48465ca73fb26",
      "name": "## HC1",
      "info": "",
      "x": 950,
      "y": 440,
      "wires": []
      },
      {
      "id": "bfe48a3e.1b0f4",
      "type": "ui_group",
      "name": "HC1",
      "tab": "2936b813.6cde68",
      "order": 1,
      "disp": true,
      "width": "7",
      "collapse": false,
      "className": ""
      },
      {
      "id": "fc9e25e07ff9439d",
      "type": "ui_group",
      "name": "HC2",
      "tab": "2936b813.6cde68",
      "order": 2,
      "disp": true,
      "width": "7",
      "collapse": false,
      "className": ""
      },
      {
      "id": "2936b813.6cde68",
      "type": "ui_tab",
      "name": "Heizung Dashboard",
      "icon": "fa-fire",
      "order": 1,
      "disabled": false,
      "hidden": false
      }
      ]

      posted in Tester
      K
      kunigunde
    • RE: Test Adapter ryd (Tanktaler) v0.3.x

      Ryd Tanktaler wurde eingestellt ABER:

      Man kann den Ryd Stecker jetzt auch weiter nutzen, wenn man einen Traccar Server am laufen hast.
      In IOBroker dann dazu den Traccar Adapter hinzufügen, dann hat man auch wieder die Daten.
      Anleitung auf Github

      posted in Tester
      K
      kunigunde
    • RE: [Neuer Adapter] Reolink Kamera

      Aktuelle API Beschreibung von REOLINK:
      https://community.reolink.com/topic/4196/reolink-camera-api-user-guide_v8-updated-in-april-2023

      posted in Entwicklung
      K
      kunigunde
    • RE: LoRaWAN GPS-Tracker 2 Traccar

      @j_paul
      hast du einen export deines Blockly scriptes?

      posted in Praktische Anwendungen (Showcase)
      K
      kunigunde
    • ems-esp (km200) Schaltprogramm darstellen/später auch ändern

      Hallo,

      ich suche jemanden, welcher eine Buderus bzw km200 benutzt und auch node-red als HMI/VISU.
      Gibt es bereits Lösungen die km200 Zeiteinstellung extern anzupassen ohne App bzw Wandregler?
      Gibt es bereits Lösungen um das Zeitprogramm auf Node-Red anzuzeigen?

      was ich bereits erstellt habe:

      1. Die Daten von der Heizung splitten in einzelne Tage und lesbare Zeit integrieren:
        27ca36d6-e21c-4cdb-adf0-cf3beac98db8-image.png
      2. eine Tabelle erstellt, mit "checkboxen" welche zurück an Node-red gesendet werden können:
        dec893f6-9f08-49a3-801a-d11df8e39cda-image.png

      Jetzt würde ich gern als erstes die Checkboxen bereits als "checked" setzen, was im Moment von km200 aktiv ist.
      Ich bekomme jedoch die Daten nicht in die Tabelle integriert.

      Falls jemand die Sache mal selbst testen möchte hier mein Flow:
      (Aufruf der Seite: http://IP_NODE_RED:1880/site_km200_switchProgramm)
      d50ed32b-1442-48df-b123-35a6273d717c-image.png

      [{"id":"d838b487d73a043b","type":"tab","label":"Flow 3","disabled":false,"info":"","env":[]},{"id":"61626a1ae3ab6608","type":"http in","z":"d838b487d73a043b","name":"","url":"/site_km200_switchProgramm","method":"get","upload":false,"swaggerDoc":"","x":160,"y":280,"wires":[["35ea212cb42c1ea5"]]},{"id":"d6a2d51ef6a46008","type":"http in","z":"d838b487d73a043b","name":"","url":"/sitepost","method":"post","upload":false,"swaggerDoc":"","x":110,"y":520,"wires":[["af641c1594ded66c","e65a9a92699f98d9"]]},{"id":"35ea212cb42c1ea5","type":"function","z":"d838b487d73a043b","name":"msg.url = \"sitepost\";","func":"msg.url = \"sitepost\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":280,"wires":[["b0f75ca5e0cc5b79"]]},{"id":"af641c1594ded66c","type":"debug","z":"d838b487d73a043b","name":"mysitepost","active":true,"tosidebar":true,"console":false,"complete":"payload","statusVal":"","statusType":"auto","x":760,"y":520,"wires":[]},{"id":"0bb50d25790c1461","type":"http response","z":"d838b487d73a043b","name":"","x":780,"y":480,"wires":[]},{"id":"b0f75ca5e0cc5b79","type":"template","z":"d838b487d73a043b","name":"msg.payload.script (JavaScript)","field":"payload.script","fieldType":"msg","format":"javascript","syntax":"plain","template":"$(document).ready(function(e) {\n    \n    $(\"form[ajax=true]\").submit(function(e) {\n        \n        e.preventDefault();\n        \n        var form_data = $(this).serialize();\n        var form_url = $(this).attr(\"action\");\n        var form_method = $(this).attr(\"method\").toUpperCase();\n        \n        $(\"#loadingimg\").show();\n        \n        $.ajax({\n            url: form_url, \n            type: form_method,      \n            data: form_data,     \n            cache: false,\n            success: function(returnhtml){                          \n                $(\"#result\").html(returnhtml); \n                $(\"#loadingimg\").hide();                    \n            }           \n        });    \n    }); \n});","x":450,"y":320,"wires":[["86bbb475651a31b5"]]},{"id":"a565b23f2eacf77c","type":"http response","z":"d838b487d73a043b","name":"","x":1110,"y":360,"wires":[]},{"id":"97dc905525f2ab56","type":"template","z":"d838b487d73a043b","name":"msg.payload (HTML)","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n  <head>\n    <meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\">\n    <meta charset=\"utf-8\">\n    <script src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js\"></script>\n    <style>{{{payload.style}}}</style>\n  </head>\n\n<div>\n  <form method=\"post\" action=\"/{{url}}\" ajax=\"true\">\n\n<table cellpadding=\"0\" cellspacing=\"0\" id=\"our_table\" border=\"1\">\n  <thead>\n    <tr>\n      <th></th>\n      <th bgcolor=\"grey\">0</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">1</th>\n        <th></th>\n        <th></th>\n        <th></th>      \n      <th bgcolor=\"grey\">2</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">3</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">4</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">5</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">6</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">7</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">8</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">9</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">10</th>\n        <th></th>\n        <th></th>\n        <th></th>        \n      <th bgcolor=\"grey\">11</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">12</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">13</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">14</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">15</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">16</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">17</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">18</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">19</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">20</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">21</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">22</th>\n        <th></th>\n        <th></th>\n        <th></th>\n      <th bgcolor=\"grey\">23</th>\n        <th></th>\n        <th></th>\n        <th></th>                                                                                               \n    </tr>\n  </thead>\n  <tbody>\n    {{{payload.TableLines}}}\n  </tbody>\n</table>\n    <input type=\"submit\" value=\"Submit\">\n  </form>\n</div>\n<div>\n    <span id=\"result\"></span>\n</div>\n\n</body>\n</html>\n<script>{{{payload.script}}}</script>","x":940,"y":360,"wires":[["a565b23f2eacf77c"]]},{"id":"28a8821ccf9c863f","type":"function","z":"d838b487d73a043b","name":"return msg.payload to client","func":"msg.payload = 'msg.payload: '+msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":480,"wires":[["0bb50d25790c1461"]]},{"id":"367f7d041d7b4d09","type":"comment","z":"d838b487d73a043b","name":"Inject msg object properties","info":"","x":440,"y":240,"wires":[]},{"id":"e65a9a92699f98d9","type":"json","z":"d838b487d73a043b","name":"","x":320,"y":480,"wires":[["28a8821ccf9c863f"]]},{"id":"42cb554109f99a60","type":"comment","z":"d838b487d73a043b","name":"Website (http://IP_NODE_RED:1880/site_km200_switchProgramm)","info":"","x":260,"y":200,"wires":[]},{"id":"7120e9d144e8d9d7","type":"comment","z":"d838b487d73a043b","name":"Form Submission","info":"","x":120,"y":460,"wires":[]},{"id":"86bbb475651a31b5","type":"template","z":"d838b487d73a043b","name":"msg.payload.style (CSS)","field":"payload.style","fieldType":"msg","format":"html","syntax":"mustache","template":"input[type=submit] {\n    //width: 100%;\n    background-color: #4CAF50;\n    color: white;\n    padding: 14px 20px;\n    margin: 8px 0;\n    border: none;\n    border-radius: 4px;\n    cursor: pointer;\n}\n\ninput[type=submit]:hover {\n    background-color: #45a049;\n}\n//##############\n.checkbox_color {\ndisplay: inline-flex;\ncursor: pointer;\nposition: relative;\n}\n\n.checkbox_color > input {\nheight: 12px;\nwidth: 10px;\n-webkit-appearance: none;\n-moz-appearance: none;\n-o-appearance: none;\nappearance: none;\noutline: none;\ntransition-duration: 0.3s;\nbackground-color: blue;\ncursor: pointer;\n}\n\n.checkbox_color > input:checked {\nheight: 25px;\nwidth: 10px;\nbackground-color: red;\n}","x":430,"y":360,"wires":[["68cc99075a593cf0"]]},{"id":"1e9bdf58af557a76","type":"ioBroker get","z":"d838b487d73a043b","name":"ems-esp.0.heatingCircuits.hc1.switchPrograms.A","topic":"ems-esp.0.heatingCircuits.hc1.switchPrograms.A","attrname":"Data","payloadType":"value","x":370,"y":120,"wires":[["aea39cfd99b6bb61"]]},{"id":"aea39cfd99b6bb61","type":"json","z":"d838b487d73a043b","name":"","property":"Data","action":"obj","pretty":false,"x":630,"y":120,"wires":[["da1467957105598f","95f290e946f0b169"]]},{"id":"da1467957105598f","type":"function","z":"d838b487d73a043b","name":"function trenne Tage + hh:mm aus time","func":"var array = msg.Data;\nvar Mo = []\nvar Tu = []\nvar We = []\nvar Th = []\nvar Fr = []\nvar Sa = []\nvar Su = []   \nvar Week = []\n\narray.forEach(function(n) {\n    var timeHH = n.time / 60;\n    timeHH = timeHH | 0;\n    timeHH = (\"00\" + timeHH).slice(-2);\n\n    var timeMM = (n.time - (timeHH * 60));\n    timeMM = (\"00\" + timeMM).slice(-2);\n\n    var inhalt = {\n        \"dayOfWeek\": n.dayOfWeek,\n        \"setpoint\": n.setpoint,\n        \"time\": n.time,   \n        \"zeit\": timeHH + \":\" + timeMM\n    }\n\n    if (n.dayOfWeek == \"Mo\")\n        Mo.push(inhalt)      \n    if (n.dayOfWeek == \"Tu\")\n        Tu.push(inhalt)\n    if (n.dayOfWeek == \"We\")        \n        We.push(inhalt)\n    if (n.dayOfWeek == \"Th\")\n        Th.push(inhalt)\n    if (n.dayOfWeek == \"Fr\")\n        Fr.push(inhalt)\n    if (n.dayOfWeek == \"Sa\")\n        Sa.push(inhalt)\n    if (n.dayOfWeek == \"Su\")\n        Su.push(inhalt)\n})\n\nWeek.push({\n    \"Mo\": Mo,\n    \"Tu\": Tu,\n    \"We\": We,\n    \"Th\": Th,            \n    \"Fr\": Fr,\n    \"Sa\": Sa,\n    \"Su\": Su,            \n})\n\nreturn [    \n    { Data: Mo },\n    { Data: Tu }, \n    { Data: We }, \n    { Data: Th }, \n    { Data: Fr }, \n    { Data: Sa }, \n    { Data: Su }, \n    { Data: Week }\n    ];","outputs":8,"noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":120,"wires":[["eb5b352c30153c20"],[],[],[],[],[],["c8f6a82418e33793"],["dd2c80f8a061a6f7"]]},{"id":"432ddfb11f3bab4a","type":"comment","z":"d838b487d73a043b","name":"Ausgabe der Programme nach Tagen","info":"","x":850,"y":40,"wires":[]},{"id":"467b268b95fa4e9c","type":"inject","z":"d838b487d73a043b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":120,"wires":[["1e9bdf58af557a76"]]},{"id":"8132fdf457b8716c","type":"comment","z":"d838b487d73a043b","name":"IoBroker Datenpunkt switchPrograms.?","info":"","x":330,"y":80,"wires":[]},{"id":"dd2c80f8a061a6f7","type":"debug","z":"d838b487d73a043b","name":"msg.Data (Woche)","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"Data","targetType":"msg","statusVal":"","statusType":"auto","x":1130,"y":180,"wires":[]},{"id":"68cc99075a593cf0","type":"function","z":"d838b487d73a043b","name":"msg.payload.TableLines","func":"var days = ['Mo','Tu','We','Th','Fr','Sa','Su'];\nvar possible_times = [0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345, 360, 375, 390, 405, 420, 435, 450, 465, 480, 495, 510, 525, 540, 555, 570, 585, 600, 615, 630, 645, 660, 675, 690, 705, 720, 735, 750, 765, 780, 795, 810, 825, 840, 855, 870, 885, 900, 915, 930, 945, 960, 975, 990, 1005, 1020, 1035, 1050, 1065, 1080, 1095, 1110, 1125, 1140, 1155, 1170, 1185, 1200, 1215, 1230, 1245, 1260, 1275, 1290, 1305, 1320, 1335, 1350, 1365, 1380, 1395, 1410,1425]\nvar woche_zeilen = '';\n\ndays.forEach(function (actual_day) {\n \n    var tag_spalten = '';\n    var bgcolor = '';\n    var i = 0;\n    possible_times.forEach(function (minuten) {\n        if(i > 3)i = 0\n        if(i == 0)bgcolor = 'bgcolor=\"grey\"'\n\n        tag_spalten += '<td class=\"checkbox_color\" valign=\"bottom\" ' + bgcolor + '><input type=\"checkbox\" name=\"' + actual_day + '[]\" value=\"' + minuten + '\"></td>';\n        bgcolor = ''\n        i++\n    \n    });\n    var tag_zeile = '<tr><th align=\"left\">' + actual_day + '</th>' + tag_spalten + '</tr>';\n    woche_zeilen += tag_zeile;\n});\n\nmsg.payload.TableLines = woche_zeilen;\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":360,"wires":[["97dc905525f2ab56"]]},{"id":"95f290e946f0b169","type":"debug","z":"d838b487d73a043b","name":"msg.Data (Woche) ORIGINAL","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"Data","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":200,"wires":[]},{"id":"c8f6a82418e33793","type":"debug","z":"d838b487d73a043b","name":"msg.Data (Sonntag)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"Data","targetType":"msg","statusVal":"","statusType":"auto","x":1140,"y":140,"wires":[]},{"id":"eb5b352c30153c20","type":"debug","z":"d838b487d73a043b","name":"msg.Data (Montag)","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"Data","targetType":"msg","statusVal":"","statusType":"auto","x":1130,"y":80,"wires":[]}]
      
      posted in Node-Red
      K
      kunigunde
    • RE: Adapter für Buderus KM200 (und eventuell auch anderen KMxxx)

      @zgadgeter
      versuche es mal mit den ems-esp Adapter.

      Dort nur den "mittleren" Teil nutzen (KM200 aktiv)
      Ich habe beide Adapter momentan noch am laufen, jedoch ist der km200'er nicht wirklich mit dem js-controller 4 kompatibel.
      Ich werden wohl den km200 demnächst entfernen und auf ems-esp umsteigen.

      Dann kann ich auch endlich den js-controller updaten.

      posted in ioBroker Allgemein
      K
      kunigunde
    • RE: Solax Photovoltaik Portal in ioBroker

      Hier hat jemand die Firmware von dem Solax WIFI abgeändert.
      Mit dieser verbindet er sich mit dem lokalen Netz und es sind keine Umwege mehr nötig:

      https://blog.chrisoft.io/2021/02/14/firmwares-modificados-para-solax-pocket-wifi-v2/

      posted in ioBroker Allgemein
      K
      kunigunde
    • RE: Solax Photovoltaik Portal in ioBroker

      @laola

      Hallo, vielleicht hilft dir das weiter.

      Ich habe einen X1-Boost/Air/Mini.
      Da die Cloud Verbindung bei mir demnächst gekappt wird, musste ich auch einen Weg finden die Daten lokal zu bekommen.
      Solax hat an dem Pocket-Wifi einen offenen Wlan-Zugang, welcher jedoch 1. nur einen Teilnehmer zulässt und nicht in meinem lokalen Netz ist.

      Ich habe jetzt einen einfachen kleinen ESP-01 genommen, der verbindet sich mit dem Solax Wlan, holt Daten ab, verbindet sich danach mit meinem lokalen Wlan und sendet die Daten an meinen MQTT Broker.

      und wieder von vorn.....

      hier ist der Arduino Code (P.S. im Online Editor kann ich nicht übersetzen, kommen Fehler, Lokal geht es):
      https://create.arduino.cc/editor/kunigunde/19dce021-7701-4557-96cc-153a5e1f9bee/preview?F=ESP_SOLAX_MQTT.ino

      posted in ioBroker Allgemein
      K
      kunigunde
    • RE: Laufzeit Gerät berechnen

      @balzmatthias

      vielleicht hilft dir ja ein vorbereitetes Blockly?
      https://forum.iobroker.net/post/437865

      posted in Blockly
      K
      kunigunde
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo