﻿<?xml version="1.0" encoding="utf-8"?>
<Templates format="2" protocolVersion="83">
  <Template id="17e43bfb-2be2-4fee-9669-1bc492182a09" revision="1.1">
    <SuggestedCCUParameters />
    <RevisionHistory>
      <Revision id="1.0">Initial version</Revision>
      <Revision id="1.1">Changed to use RECEIVEDMSG</Revision>
    </RevisionHistory>
    <Name>Shelly 1PM MQTT</Name>
    <CcuModel>PacketParserCCU</CcuModel>
    <Producer></Producer>
    <Model></Model>
    <Description></Description>
	<ImportParameters>
		<Parameter>
			<Name>Mqtt Broker ${ipAddress}</Name>	
			<Value>192.168.0.1</Value>
			<Id>IpAddress</Id>
		</Parameter>
		<Parameter>
			<Name>Mqtt Broker port</Name>	
			<Value>1883</Value>
			<Id>Port</Id>
		</Parameter>
	</ImportParameters>
    <Module>
      <Name>Shelly 1PM MQTT Module</Name>
      <Model>PacketParserModuleMqtt</Model>
      <DeviceProperties>
        <InternalPollInterval>15000</InternalPollInterval>
        <CustomVariables>[{"Name":"pulg1topic","ValueTypeId":2,"NumericValue":0.0,"StringValue":"shelly1pm-deviceid1"},{"Name":"pulg2topic","ValueTypeId":2,"NumericValue":0.0,"StringValue":"shelly1pm-deviceid2"},{"Name":"pulg3topic","ValueTypeId":2,"NumericValue":0.0,"StringValue":"shelly1pm-deviceid3"},{"Name":"pulg4topic","ValueTypeId":2,"NumericValue":0.0,"StringValue":"shelly1pm-deviceid4"},{"Name":"pulg5topic","ValueTypeId":2,"NumericValue":0.0,"StringValue":"shelly1pm-deviceid5"}]</CustomVariables>
        <IpAddress>$[IpAddress]</IpAddress>
		<RootTopic>shellies/#</RootTopic>
        <Port>$[Port]</Port>
      </DeviceProperties>
      <Devices>
        <Device>
          <Name>Shelly 1PM MQTT Power 1</Name>
          <Model>PacketParserElectricityMeter</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg1topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg1topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg1topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END</ListenerScriptPacketParser>
            <ReadTotalConsumptionScriptPacketParser></ReadTotalConsumptionScriptPacketParser>
            <ReadDemandScriptPacketParser></ReadDemandScriptPacketParser>
            <Calibration>0</Calibration>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Shelly 1PM MQTT Switch 1</Name>
          <Model>PacketParserSwitch</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables>[{"Name":"internalTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"tempStatus","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overPower","ValueTypeId":2,"NumericValue":0.0,"StringValue":""}]</CustomVariables>
            <ServiceAttributesScriptsPacketParser>[{"AttributeDefinition":{"Name":"Internal temperature","Section":null},"ReadFormula":"IF(LENGTH(internalTemp) = 0, \"Unknown\", internalTemp + \"°C\");"},{"AttributeDefinition":{"Name":"Overheated","Section":null},"ReadFormula":"IF(LENGTH(overTemp) = 0, \"Unknown\", IF(overtemp = 0, \"No\", \"Yes\"));"},{"AttributeDefinition":{"Name":"Temperature status","Section":null},"ReadFormula":"IF(LENGTH(tempStatus) = 0, \"Unknown\", tempStatus);"},{"AttributeDefinition":{"Name":"Overpower","Section":null},"ReadFormula":"IF(LENGTH(overPower) = 0, \"0W\", overPower + \"W\");"}]</ServiceAttributesScriptsPacketParser>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg1topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg1topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg1topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
</ListenerScriptPacketParser>
            <NegateState>False</NegateState>
            <OnStateIconId>60</OnStateIconId>
            <OffStateIconId>61</OffStateIconId>
            <OnStateName>${general_on}</OnStateName>
            <OffStateName>${general_off}</OffStateName>
            <ReadSwitchStateScriptPacketParser></ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg1topic + "/relay/0/command", value);</WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
		<Device>
          <Name>Shelly 1PM MQTT Power 2</Name>
          <Model>PacketParserElectricityMeter</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg2topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg2topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg2topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END</ListenerScriptPacketParser>
            <ReadTotalConsumptionScriptPacketParser></ReadTotalConsumptionScriptPacketParser>
            <ReadDemandScriptPacketParser></ReadDemandScriptPacketParser>
            <Calibration>0</Calibration>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Shelly 1PM MQTT Switch 2</Name>
          <Model>PacketParserSwitch</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables>[{"Name":"internalTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"tempStatus","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overPower","ValueTypeId":2,"NumericValue":0.0,"StringValue":""}]</CustomVariables>
            <ServiceAttributesScriptsPacketParser>[{"AttributeDefinition":{"Name":"Internal temperature","Section":null},"ReadFormula":"IF(LENGTH(internalTemp) = 0, \"Unknown\", internalTemp + \"°C\");"},{"AttributeDefinition":{"Name":"Overheated","Section":null},"ReadFormula":"IF(LENGTH(overTemp) = 0, \"Unknown\", IF(overtemp = 0, \"No\", \"Yes\"));"},{"AttributeDefinition":{"Name":"Temperature status","Section":null},"ReadFormula":"IF(LENGTH(tempStatus) = 0, \"Unknown\", tempStatus);"},{"AttributeDefinition":{"Name":"Overpower","Section":null},"ReadFormula":"IF(LENGTH(overPower) = 0, \"0W\", overPower + \"W\");"}]</ServiceAttributesScriptsPacketParser>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg2topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg2topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg2topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
</ListenerScriptPacketParser>
            <NegateState>False</NegateState>
            <OnStateIconId>60</OnStateIconId>
            <OffStateIconId>61</OffStateIconId>
            <OnStateName>${general_on}</OnStateName>
            <OffStateName>${general_off}</OffStateName>
            <ReadSwitchStateScriptPacketParser></ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg2topic + "/relay/0/command", value);</WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
		<Device>
          <Name>Shelly 1PM MQTT Power 3</Name>
          <Model>PacketParserElectricityMeter</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg3topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg3topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg3topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END</ListenerScriptPacketParser>
            <ReadTotalConsumptionScriptPacketParser></ReadTotalConsumptionScriptPacketParser>
            <ReadDemandScriptPacketParser></ReadDemandScriptPacketParser>
            <Calibration>0</Calibration>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Shelly 1PM MQTT Switch 3</Name>
          <Model>PacketParserSwitch</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables>[{"Name":"internalTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"tempStatus","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overPower","ValueTypeId":2,"NumericValue":0.0,"StringValue":""}]</CustomVariables>
            <ServiceAttributesScriptsPacketParser>[{"AttributeDefinition":{"Name":"Internal temperature","Section":null},"ReadFormula":"IF(LENGTH(internalTemp) = 0, \"Unknown\", internalTemp + \"°C\");"},{"AttributeDefinition":{"Name":"Overheated","Section":null},"ReadFormula":"IF(LENGTH(overTemp) = 0, \"Unknown\", IF(overtemp = 0, \"No\", \"Yes\"));"},{"AttributeDefinition":{"Name":"Temperature status","Section":null},"ReadFormula":"IF(LENGTH(tempStatus) = 0, \"Unknown\", tempStatus);"},{"AttributeDefinition":{"Name":"Overpower","Section":null},"ReadFormula":"IF(LENGTH(overPower) = 0, \"0W\", overPower + \"W\");"}]</ServiceAttributesScriptsPacketParser>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg3topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg3topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg3topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
</ListenerScriptPacketParser>
            <NegateState>False</NegateState>
            <OnStateIconId>60</OnStateIconId>
            <OffStateIconId>61</OffStateIconId>
            <OnStateName>${general_on}</OnStateName>
            <OffStateName>${general_off}</OffStateName>
            <ReadSwitchStateScriptPacketParser></ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg3topic + "/relay/0/command", value);</WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
		<Device>
          <Name>Shelly 1PM MQTT Power 4</Name>
          <Model>PacketParserElectricityMeter</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg4topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg4topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg4topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END</ListenerScriptPacketParser>
            <ReadTotalConsumptionScriptPacketParser></ReadTotalConsumptionScriptPacketParser>
            <ReadDemandScriptPacketParser></ReadDemandScriptPacketParser>
            <Calibration>0</Calibration>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Shelly 1PM MQTT Switch 4</Name>
          <Model>PacketParserSwitch</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables>[{"Name":"internalTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"tempStatus","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overPower","ValueTypeId":2,"NumericValue":0.0,"StringValue":""}]</CustomVariables>
            <ServiceAttributesScriptsPacketParser>[{"AttributeDefinition":{"Name":"Internal temperature","Section":null},"ReadFormula":"IF(LENGTH(internalTemp) = 0, \"Unknown\", internalTemp + \"°C\");"},{"AttributeDefinition":{"Name":"Overheated","Section":null},"ReadFormula":"IF(LENGTH(overTemp) = 0, \"Unknown\", IF(overtemp = 0, \"No\", \"Yes\"));"},{"AttributeDefinition":{"Name":"Temperature status","Section":null},"ReadFormula":"IF(LENGTH(tempStatus) = 0, \"Unknown\", tempStatus);"},{"AttributeDefinition":{"Name":"Overpower","Section":null},"ReadFormula":"IF(LENGTH(overPower) = 0, \"0W\", overPower + \"W\");"}]</ServiceAttributesScriptsPacketParser>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg4topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg4topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg4topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
</ListenerScriptPacketParser>
            <NegateState>False</NegateState>
            <OnStateIconId>60</OnStateIconId>
            <OffStateIconId>61</OffStateIconId>
            <OnStateName>${general_on}</OnStateName>
            <OffStateName>${general_off}</OffStateName>
            <ReadSwitchStateScriptPacketParser></ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg4topic + "/relay/0/command", value);</WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
		<Device>
          <Name>Shelly 1PM MQTT Power 5</Name>
          <Model>PacketParserElectricityMeter</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg5topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg5topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg5topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END</ListenerScriptPacketParser>
            <ReadTotalConsumptionScriptPacketParser></ReadTotalConsumptionScriptPacketParser>
            <ReadDemandScriptPacketParser></ReadDemandScriptPacketParser>
            <Calibration>0</Calibration>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Shelly 1PM MQTT Switch 5</Name>
          <Model>PacketParserSwitch</Model>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables>[{"Name":"internalTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overTemp","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"tempStatus","ValueTypeId":2,"NumericValue":0.0,"StringValue":""},{"Name":"overPower","ValueTypeId":2,"NumericValue":0.0,"StringValue":""}]</CustomVariables>
            <ServiceAttributesScriptsPacketParser>[{"AttributeDefinition":{"Name":"Internal temperature","Section":null},"ReadFormula":"IF(LENGTH(internalTemp) = 0, \"Unknown\", internalTemp + \"°C\");"},{"AttributeDefinition":{"Name":"Overheated","Section":null},"ReadFormula":"IF(LENGTH(overTemp) = 0, \"Unknown\", IF(overtemp = 0, \"No\", \"Yes\"));"},{"AttributeDefinition":{"Name":"Temperature status","Section":null},"ReadFormula":"IF(LENGTH(tempStatus) = 0, \"Unknown\", tempStatus);"},{"AttributeDefinition":{"Name":"Overpower","Section":null},"ReadFormula":"IF(LENGTH(overPower) = 0, \"0W\", overPower + \"W\");"}]</ServiceAttributesScriptsPacketParser>
            <ListenerScriptPacketParser>IF(INDEXOF(pulg5topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg5topic' value in module variables. Topic format is 'shelly1pm-&lt;deviceid&gt;'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -&gt; Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg5topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
</ListenerScriptPacketParser>
            <NegateState>False</NegateState>
            <OnStateIconId>60</OnStateIconId>
            <OffStateIconId>61</OffStateIconId>
            <OnStateName>${general_on}</OnStateName>
            <OffStateName>${general_off}</OffStateName>
            <ReadSwitchStateScriptPacketParser></ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg5topic + "/relay/0/command", value);</WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
      </Devices>
    </Module>
  </Template>
</Templates>