<?xml version="1.0" encoding="utf-8"?>
<Templates format="2" protocolVersion="83">
  <Template id="a3f82c1e-7b4d-4e9a-b6f1-2d8e9c3a5071" revision="1.0">
    <RevisionHistory>
      <Revision id="1.0">Prvá verzia šablóny</Revision>
    </RevisionHistory>
    <Name>MiniHPC</Name>
    <CcuModel>PacketParserCCU</CcuModel>
    <Producer>MiniHPC</Producer>
    <Model>MiniHPC</Model>
    <Description>DIY regulátor tepelného čerpadla pre kúrenie, chladenie a TÚV cez MQTT.</Description>
    <Category>1</Category>
    <ImportParameters>
      <Parameter>
        <Id>IpAddress</Id>
        <Name>IP adresa MQTT brokera</Name>
        <Value>192.168.0.1</Value>
      </Parameter>
      <Parameter>
        <Id>Port</Id>
        <Name>Port MQTT brokera</Name>
        <Value>1883</Value>
      </Parameter>
    </ImportParameters>
    <Module>
      <Name>MiniHPC MQTT modul</Name>
      <Id>-1</Id>
      <Model>PacketParserModuleMqtt</Model>
      <DeviceProperties>
        <IpAddress>$[IpAddress]</IpAddress>
        <Port>$[Port]</Port>
        <RootTopic>miniHPC/#</RootTopic>
        <InternalPollInterval>0</InternalPollInterval>
      </DeviceProperties>
      <Devices>
        <Device>
          <Name>Prevádzkový stav</Name>
          <Id>-2</Id>
          <Model>PacketParserMultiValueSwitch</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <ListenerScriptPacketParser>IF(INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/&quot;) != 0)
    RETURN(0);
END
IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/config/mode&quot;)
    Mu := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadSwitchStateScriptPacketParser>RETURN(Mu);</ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>MQTTPUBLISH(&quot;miniHPC/set/mode&quot;, TOSTRING(Mu));</WriteSwitchStateScriptPacketParser>
            <OffStateValue>0</OffStateValue>
            <Value0>0</Value0>
            <Value0Index>0</Value0Index>
            <Value0Name>Vypnuté</Value0Name>
            <Value0IconId>4</Value0IconId>
            <Value1>1</Value1>
            <Value1Index>1</Value1Index>
            <Value1Name>Kúrenie</Value1Name>
            <Value1IconId>1</Value1IconId>
            <Value2>2</Value2>
            <Value2Index>2</Value2Index>
            <Value2Name>Chladenie</Value2Name>
            <Value2IconId>2</Value2IconId>
            <Value3Index>67</Value3Index>
            <Value4Index>68</Value4Index>
            <Value5Index>69</Value5Index>
            <Value6Index>70</Value6Index>
            <Value7Index>71</Value7Index>
            <Value8Index>72</Value8Index>
            <Value9Index>73</Value9Index>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Vykurovacia teplota vody</Name>
          <Id>-3</Id>
          <Model>PacketParserVariable</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <IsReadOnly>False</IsReadOnly>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/config/temperature_T3&quot;)
    Va := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadStateScriptPacketParser>RETURN(Va);</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser>MQTTPUBLISH(&quot;miniHPC/set/temperature_T3&quot;, TOSTRING(Va));</WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Chladiaca teplota vody</Name>
          <Id>-4</Id>
          <Model>PacketParserVariable</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <IsReadOnly>False</IsReadOnly>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/config/temperature_T3_cool&quot;)
    Va := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadStateScriptPacketParser>RETURN(Va);</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser>MQTTPUBLISH(&quot;miniHPC/set/temperature_T3_cool&quot;, TOSTRING(Va));</WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Izbová teplota</Name>
          <Id>-5</Id>
          <Model>PacketParserTemperatureSensor</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/t1&quot;)
    Te := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadTemperatureScriptPacketParser>RETURN(Te);</ReadTemperatureScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>TÚV – zapnutie</Name>
          <Id>-6</Id>
          <Model>PacketParserSwitch</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <OnStateIconId>60</OnStateIconId>
            <OffStateIconId>61</OffStateIconId>
            <OnStateName>Zapnuté</OnStateName>
            <OffStateName>Vypnuté</OffStateName>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/config/dhw_onoff&quot;)
    St := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadSwitchStateScriptPacketParser>RETURN(St);</ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>MQTTPUBLISH(&quot;miniHPC/set/dhw_onoff&quot;, IF(St = 1, &quot;1&quot;, &quot;0&quot;));</WriteSwitchStateScriptPacketParser>
            <ServiceActionsScriptsPacketParser>[{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Spustiť TÚV ohrev&quot;},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/cmd/dhw\&quot;, \&quot;on\&quot;);&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Zastaviť TÚV ohrev&quot;},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/cmd/dhw\&quot;, \&quot;off\&quot;);&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Protilégionelový ohrev&quot;},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/cmd/dhw\&quot;, \&quot;al\&quot;);&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Turbo TÚV ohrev&quot;},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/cmd/dhw\&quot;, \&quot;turbo\&quot;);&quot;}]</ServiceActionsScriptsPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>TÚV – cieľová teplota</Name>
          <Id>-7</Id>
          <Model>PacketParserVariable</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <IsReadOnly>False</IsReadOnly>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/config/dhw_temp_target&quot;)
    Va := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadStateScriptPacketParser>RETURN(Va);</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser>MQTTPUBLISH(&quot;miniHPC/set/dhw_temp_target&quot;, TOSTRING(Va));</WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Vonkajšia jednotka</Name>
          <Id>-8</Id>
          <Model>PacketParserVariable</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <IsReadOnly>True</IsReadOnly>
            <CustomVariables>[{&quot;Name&quot;:&quot;ouPwr&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouFreq&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouFan&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouEEV&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouDCbus&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouDCcurr&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouDefrost&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouMode&quot;,&quot;ValueTypeId&quot;:2,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouState&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;ouPwrOut&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;}]</CustomVariables>
            <ListenerScriptPacketParser>IF(INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/out&quot;) != 0 AND INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/pwrOutHP&quot;) != 0)
    RETURN(0);
END
IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outPower&quot;)
    ouPwr := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    Va := ouPwr;
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outFrequency&quot;)
    ouFreq := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outFan&quot;)
    ouFan := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outEEV&quot;)
    ouEEV := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outDCbus&quot;)
    ouDCbus := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outDCcurrent&quot;)
    ouDCcurr := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outDefrost&quot;)
    ouDefrost := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outMode&quot;)
    ouMode := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/outState&quot;)
    ouState := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/pwrOutHP&quot;)
    ouPwrOut := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadStateScriptPacketParser>RETURN(Va);</ReadStateScriptPacketParser>
            <ServiceAttributesScriptsPacketParser>[{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Stav kompresora&quot;},&quot;ReadFormula&quot;:&quot;IF(ouState = 1, \&quot;Zapnutý\&quot;, \&quot;Vypnutý\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Režim vonkajšej jednotky&quot;},&quot;ReadFormula&quot;:&quot;IF(LENGTH(ouMode) = 0, \&quot;Neznámy\&quot;, ouMode);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Frekvencia kompresora&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(ouFreq, \&quot;F0\&quot;) + \&quot; Hz\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Otáčky ventilátora&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(ouFan, \&quot;F0\&quot;) + \&quot; RPM\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Poloha expanzného ventilu (EEV)&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(ouEEV, \&quot;F0\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Napätie DC zbernice&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(ouDCbus, \&quot;F1\&quot;) + \&quot; V\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Prúd kompresora&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(ouDCcurr, \&quot;F1\&quot;) + \&quot; A\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Odmrazovanie aktívne&quot;},&quot;ReadFormula&quot;:&quot;IF(ouDefrost = 1, \&quot;Áno\&quot;, \&quot;Nie\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Výstupný výkon TČ&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(ouPwrOut, \&quot;F0\&quot;) + \&quot; W\&quot;;&quot;}]</ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser>[{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Manuálne odmrazovanie&quot;},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/cmd/odu\&quot;, \&quot;defrost\&quot;);&quot;}]</ServiceActionsScriptsPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Energia – kúrenie</Name>
          <Id>-9</Id>
          <Model>PacketParserElectricityMeter</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <CustomVariables>[{&quot;Name&quot;:&quot;hPwrIn&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;hPwrOut&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;}]</CustomVariables>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/heatPwrIn&quot;)
    hPwrIn := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000000.0;
    To := hPwrIn;
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/heatPwrOutHP&quot;)
    hPwrOut := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000000.0;
END</ListenerScriptPacketParser>
            <ReadTotalConsumptionScriptPacketParser>RETURN(To);</ReadTotalConsumptionScriptPacketParser>
            <ReadDemandScriptPacketParser>RETURN(NaN);</ReadDemandScriptPacketParser>
            <ServiceAttributesScriptsPacketParser>[{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Vyprodukovaná tepelná energia – kúrenie&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(hPwrOut, \&quot;F3\&quot;) + \&quot; kWh\&quot;;&quot;}]</ServiceAttributesScriptsPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Energia – chladenie</Name>
          <Id>-10</Id>
          <Model>PacketParserVariable</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <IsReadOnly>True</IsReadOnly>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/coolPwrIn&quot;)
    Va := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000000.0;
END</ListenerScriptPacketParser>
            <ReadStateScriptPacketParser>RETURN(Va);</ReadStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Energia – TÚV</Name>
          <Id>-11</Id>
          <Model>PacketParserElectricityMeter</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <CustomVariables>[{&quot;Name&quot;:&quot;dhwPwrIn&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;dhwPwrOut&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;comprT&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;comprC&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;}]</CustomVariables>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/dhwPwrIn&quot;)
    dhwPwrIn := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000000.0;
    To := dhwPwrIn;
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/dhwPwrOut&quot;)
    dhwPwrOut := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000000.0;
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/comprTime&quot;)
    comprT := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/comprCount&quot;)
    comprC := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadTotalConsumptionScriptPacketParser>RETURN(To);</ReadTotalConsumptionScriptPacketParser>
            <ReadDemandScriptPacketParser>RETURN(NaN);</ReadDemandScriptPacketParser>
            <ServiceAttributesScriptsPacketParser>[{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Vyprodukovaná tepelná energia – TÚV&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(dhwPwrOut, \&quot;F3\&quot;) + \&quot; kWh\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Celkový čas behu kompresora&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(ROUND(comprT / 3600.0), \&quot;F0\&quot;) + \&quot; h\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Celkový počet spustení kompresora&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(comprC, \&quot;F0\&quot;) + \&quot; x\&quot;;&quot;}]</ServiceAttributesScriptsPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Teploty systému</Name>
          <Id>-12</Id>
          <Model>PacketParserTemperatureSensor</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <CustomVariables>[{&quot;Name&quot;:&quot;sT2&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sT3&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sT4&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sT5&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sT6&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sTsuc&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sTex&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sTout&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sTset&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;sFlow&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;}]</CustomVariables>
            <ListenerScriptPacketParser>IF(INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/t&quot;) != 0 AND INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/tout&quot;) != 0 AND INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/tsuc&quot;) != 0 AND INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/texh&quot;) != 0 AND INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/tset&quot;) != 0 AND INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/flow&quot;) != 0)
    RETURN(0);
END
IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/tout&quot;)
    sTout := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    Te := sTout;
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/t2&quot;)
    sT2 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/t3&quot;)
    sT3 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/t4&quot;)
    sT4 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/t5&quot;)
    sT5 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/t6&quot;)
    sT6 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/tsuc&quot;)
    sTsuc := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/texh&quot;)
    sTex := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/tset&quot;)
    sTset := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/flow&quot;)
    sFlow := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadTemperatureScriptPacketParser>RETURN(Te);</ReadTemperatureScriptPacketParser>
            <ServiceAttributesScriptsPacketParser>[{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Teplota T2&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sT2, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Teplota T3 (výstup vody)&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sT3, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Teplota T4&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sT4, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Teplota T5 (TÚV)&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sT5, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Teplota T6&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sT6, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Teplota výparníka (Tsuc)&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sTsuc, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Teplota výfuku kompresora (Texh)&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sTex, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Nastavená teplota regulátora&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sTset, \&quot;F1\&quot;) + \&quot; °C\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Prietok vody&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(sFlow, \&quot;F1\&quot;) + \&quot; l/min\&quot;;&quot;}]</ServiceAttributesScriptsPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Diagnostika – relé a vstupy</Name>
          <Id>-13</Id>
          <Model>PacketParserReedContact</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <OnStateIconId>87</OnStateIconId>
            <OffStateIconId>88</OffStateIconId>
            <OnStateName>Aktívne</OnStateName>
            <OffStateName>Neaktívne</OffStateName>
            <CustomVariables>[{&quot;Name&quot;:&quot;dR1&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;dR2&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;dR3&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;dR4&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;dR5&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;dS1&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;dS2&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;}]</CustomVariables>
            <ListenerScriptPacketParser>IF(INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/R&quot;) != 0 AND INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/S&quot;) != 0)
    RETURN(0);
END
IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/R1&quot;)
    dR1 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    St := dR1;
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/R2&quot;)
    dR2 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/R3&quot;)
    dR3 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/R4&quot;)
    dR4 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/R5&quot;)
    dR5 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/S1&quot;)
    dS1 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/S2&quot;)
    dS2 := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadStateScriptPacketParser>RETURN(St);</ReadStateScriptPacketParser>
            <ServiceAttributesScriptsPacketParser>[{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Relé R2&quot;},&quot;ReadFormula&quot;:&quot;IF(dR2 = 1, \&quot;Aktívne\&quot;, \&quot;Neaktívne\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Relé R3&quot;},&quot;ReadFormula&quot;:&quot;IF(dR3 = 1, \&quot;Aktívne\&quot;, \&quot;Neaktívne\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Relé R4&quot;},&quot;ReadFormula&quot;:&quot;IF(dR4 = 1, \&quot;Aktívne\&quot;, \&quot;Neaktívne\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Relé R5&quot;},&quot;ReadFormula&quot;:&quot;IF(dR5 = 1, \&quot;Aktívne\&quot;, \&quot;Neaktívne\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Vstup S1&quot;},&quot;ReadFormula&quot;:&quot;IF(dS1 = 1, \&quot;Aktívne\&quot;, \&quot;Neaktívne\&quot;);&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;Vstup S2&quot;},&quot;ReadFormula&quot;:&quot;IF(dS2 = 1, \&quot;Aktívne\&quot;, \&quot;Neaktívne\&quot;);&quot;}]</ServiceAttributesScriptsPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Bluetooth senzor</Name>
          <Id>-14</Id>
          <Model>PacketParserTemperatureSensor</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <CustomVariables>[{&quot;Name&quot;:&quot;btHum&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;btBat&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;},{&quot;Name&quot;:&quot;btRssi&quot;,&quot;ValueTypeId&quot;:1,&quot;NumericValue&quot;:0,&quot;StringValue&quot;:&quot;&quot;}]</CustomVariables>
            <ListenerScriptPacketParser>IF(INDEXOF(RECEIVEDMSG.TOPIC, &quot;miniHPC/data/BT&quot;) != 0)
    RETURN(0);
END
IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/BTtemp&quot;)
    Te := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/BThum&quot;)
    btHum := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/BTbat_lev&quot;)
    btBat := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF(RECEIVEDMSG.TOPIC = &quot;miniHPC/data/BTrssi&quot;)
    btRssi := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadTemperatureScriptPacketParser>RETURN(Te);</ReadTemperatureScriptPacketParser>
            <ReadHumidityScriptPacketParser>RETURN(btHum);</ReadHumidityScriptPacketParser>
            <ServiceAttributesScriptsPacketParser>[{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;BT senzor – úroveň batérie&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(btBat, \&quot;F0\&quot;) + \&quot; %\&quot;;&quot;},{&quot;AttributeDefinition&quot;:{&quot;Name&quot;:&quot;BT senzor – sila signálu (RSSI)&quot;},&quot;ReadFormula&quot;:&quot;TOSTRING(btRssi, \&quot;F0\&quot;) + \&quot; dBm\&quot;;&quot;}]</ServiceAttributesScriptsPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Nastavenia systému</Name>
          <Id>-15</Id>
          <Model>PacketParserMultiValueSwitch</Model>
          <DeviceProperties>
            <InternalPollInterval>0</InternalPollInterval>
            <ListenerScriptPacketParser>IF(RECEIVEDMSG.TOPIC = &quot;miniHPC/config/odu_power_limit&quot;)
    Mu := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
END</ListenerScriptPacketParser>
            <ReadSwitchStateScriptPacketParser>RETURN(Mu);</ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>MQTTPUBLISH(&quot;miniHPC/set/odu_power_limit&quot;, TOSTRING(Mu));</WriteSwitchStateScriptPacketParser>
            <OffStateValue>0</OffStateValue>
            <ServiceActionsScriptsPacketParser>[{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Nočný režim&quot;,&quot;EnumParameters&quot;:[{&quot;FriendlyName&quot;:&quot;Režim&quot;,&quot;Abbreviation&quot;:&quot;nm&quot;,&quot;Values&quot;:[{&quot;Item1&quot;:0,&quot;Item2&quot;:&quot;Vypnutý&quot;},{&quot;Item1&quot;:1,&quot;Item2&quot;:&quot;Stále zapnutý&quot;},{&quot;Item1&quot;:2,&quot;Item2&quot;:&quot;Časovo aktívny&quot;}]}]},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/set/odu_night_mode\&quot;, TOSTRING(nm));&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Limit výkonu systému&quot;,&quot;NumericParameters&quot;:[{&quot;FriendlyName&quot;:&quot;Výkon (W)&quot;,&quot;Abbreviation&quot;:&quot;pw&quot;,&quot;IsFloat&quot;:false,&quot;MinValue&quot;:0,&quot;MaxValue&quot;:5000}]},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/set/power_limit\&quot;, TOSTRING(pw));&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Režim elektrického vykurovania R2&quot;,&quot;EnumParameters&quot;:[{&quot;FriendlyName&quot;:&quot;Režim&quot;,&quot;Abbreviation&quot;:&quot;em&quot;,&quot;Values&quot;:[{&quot;Item1&quot;:0,&quot;Item2&quot;:&quot;Iba TČ&quot;},{&quot;Item1&quot;:1,&quot;Item2&quot;:&quot;TČ + el. záložný&quot;},{&quot;Item1&quot;:2,&quot;Item2&quot;:&quot;TČ alebo el. záložný&quot;},{&quot;Item1&quot;:3,&quot;Item2&quot;:&quot;Iba el. záložný&quot;}]}]},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/set/heating_elh_mode\&quot;, TOSTRING(em));&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Injekcia senzora T1&quot;,&quot;NumericParameters&quot;:[{&quot;FriendlyName&quot;:&quot;Teplota T1 (°C)&quot;,&quot;Abbreviation&quot;:&quot;t1v&quot;,&quot;IsFloat&quot;:true,&quot;MinValue&quot;:-30,&quot;MaxValue&quot;:60}]},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/setsensor/T1\&quot;, TOSTRING(t1v));&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Injekcia senzora Tout&quot;,&quot;NumericParameters&quot;:[{&quot;FriendlyName&quot;:&quot;Vonkajšia teplota (°C)&quot;,&quot;Abbreviation&quot;:&quot;tov&quot;,&quot;IsFloat&quot;:true,&quot;MinValue&quot;:-40,&quot;MaxValue&quot;:60}]},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/setsensor/Tout\&quot;, TOSTRING(tov));&quot;},{&quot;ActionDefinition&quot;:{&quot;Name&quot;:&quot;Injekcia senzora RH&quot;,&quot;NumericParameters&quot;:[{&quot;FriendlyName&quot;:&quot;Relatívna vlhkosť (%)&quot;,&quot;Abbreviation&quot;:&quot;rhv&quot;,&quot;IsFloat&quot;:false,&quot;MinValue&quot;:0,&quot;MaxValue&quot;:100}]},&quot;Script&quot;:&quot;MQTTPUBLISH(\&quot;miniHPC/setsensor/RH\&quot;, TOSTRING(rhv));&quot;}]</ServiceActionsScriptsPacketParser>
            <Value0>0</Value0>
            <Value0Index>0</Value0Index>
            <Value0Name>Bez obmedzenia</Value0Name>
            <Value0IconId>5</Value0IconId>
            <Value1>1</Value1>
            <Value1Index>1</Value1Index>
            <Value1Name>Obmedzenie na 70 %</Value1Name>
            <Value1IconId>6</Value1IconId>
            <Value2>2</Value2>
            <Value2Index>2</Value2Index>
            <Value2Name>Obmedzenie na 50 %</Value2Name>
            <Value2IconId>7</Value2IconId>
            <Value3Index>67</Value3Index>
            <Value4Index>68</Value4Index>
            <Value5Index>69</Value5Index>
            <Value6Index>70</Value6Index>
            <Value7Index>71</Value7Index>
            <Value8Index>72</Value8Index>
            <Value9Index>73</Value9Index>
          </DeviceProperties>
        </Device>
      </Devices>
    </Module>
  </Template>
</Templates>
