﻿<?xml version="1.0" encoding="utf-8"?>
<Templates format="2" protocolVersion="73">
  <Template revision="1.0" id = "7d8452ea-6a48-4238-9d52-bc9b79f187a1">
    <SuggestedCCUParameters />
    <RevisionHistory>
      <Revision id="1.0">Initial version</Revision>
    </RevisionHistory>
    <Name>Shelly GAS</Name>
    <CcuModel>PacketParserCCU</CcuModel>
    <Producer></Producer>
    <Model></Model>
    <Description></Description>
    <ImportParameters>
			<Parameter>
				<Name>${ipAddress}</Name>	
				<Value>192.168.0.1</Value>
				<Id>IpAddress</Id>
			</Parameter>
		</ImportParameters>
    <Module>
      <Name>Shelly GAS</Name>
      <Id>-1</Id>
      <Model>PacketParserModuleHttp</Model>
      <DeviceProperties>
        <ReadScriptPacketParser>VAR response := SENDHTTPREQUEST("/status");
IF response.IsSuccess
 status := response.Content;
END</ReadScriptPacketParser>
        <InternalPollInterval>5000</InternalPollInterval>
        <CustomVariables>[{"Name":"deviceID","ValueTypeId":2,"NumericValue":0,"StringValue":"10521CF2BA9B"},{"Name":"status","ValueTypeId":2,"NumericValue":0,"StringValue":"0"}]</CustomVariables>
        <ServiceAttributesScriptsPacketParser>[]</ServiceAttributesScriptsPacketParser>
        <ServiceActionsScriptsPacketParser>[{"ActionDefinition":{"Name":"Set Volume [1 to 11]","NumericParameters":[{"FriendlyName":"Volume [1 to 11]","Abbreviation":"Volume","IsFloat":false,"MinValue":1,"MaxValue":11}],"BoolParameters":[],"EnumParameters":[]},"Script":"sendhttprequest(\u0022/settings?set_volume=\u0022\u002BVolume);"},{"ActionDefinition":{"Name":"Self test","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"sendhttprequest(\u0022/self_test\u0022);"}]</ServiceActionsScriptsPacketParser>
        <IpAddress>$[IpAddress]</IpAddress>
        <Port>80</Port>
        <UseHttps>False</UseHttps>
      </DeviceProperties>
      <Devices>
        <Device>
          <Name>Gas Alarm</Name>
          <Model>PacketParserMultiValueSwitch</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>1000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <Value0Index>0</Value0Index>
            <Value1Index>1</Value1Index>
            <Value2Index>2</Value2Index>
            <Value3Index>3</Value3Index>
            <Value4Index>4</Value4Index>
            <Value5Index>69</Value5Index>
            <Value6Index>70</Value6Index>
            <Value7Index>71</Value7Index>
            <Value8Index>72</Value8Index>
            <Value9Index>73</Value9Index>
            <Value0Name>No alarm</Value0Name>
            <Value1Name>Mild gas leak</Value1Name>
            <Value2Name>Heavy gas leak</Value2Name>
            <Value3Name>Alarm state is unknown</Value3Name>
            <Value4Name>Self Test</Value4Name>
            <Value5Name>5</Value5Name>
            <Value6Name>6</Value6Name>
            <Value7Name>7</Value7Name>
            <Value8Name>8</Value8Name>
            <Value9Name>9</Value9Name>
            <Value0IconId>329</Value0IconId>
            <Value1IconId>328</Value1IconId>
            <Value2IconId>327</Value2IconId>
            <Value3IconId>326</Value3IconId>
            <Value4IconId>326</Value4IconId>
            <Value5IconId>10</Value5IconId>
            <Value6IconId>11</Value6IconId>
            <Value7IconId>12</Value7IconId>
            <Value8IconId>13</Value8IconId>
            <Value9IconId>14</Value9IconId>
            <OffStateValue>4</OffStateValue>
            <ReadSwitchStateScriptPacketParser>var state := parsejson(parsejson(status,"gas_sensor"),"alarm_state");
switch(state, "none", return(0),
"mild", return(1),
"heavy", return(2),
"test", return(4),
return(3));


</ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser>#return(2);

# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + Mu);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + Mu, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + Mu + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + Mu + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + Mu, "write"); # use "append" mode to append data to existing file</WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Gas concentration (parts per milion)</Name>
          <Model>PacketParserVariable</Model>
          <Id>-3</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions />
            <ReadScriptPacketParser>parsejson(status, "concentration")</ReadScriptPacketParser>
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>False</IsReadOnly>
            <ReadStateScriptPacketParser>var v := sendhttprequest("/status");
var content := v.Content;
return(todouble(parsejson(content,"concentration.ppm")));</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser># Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + Va);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + Va, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + Va + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + Va + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + Va, "write"); # use "append" mode to append data to existing file</WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Mute Active Alarm</Name>
          <Model>PacketParserPushButton</Model>
          <Id>-4</Id>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>10000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <WriteButtonPressedStateScriptPacketParser>sendhttprequest("/mute");</WriteButtonPressedStateScriptPacketParser>
            <IconId>206</IconId>
          </DeviceProperties>
        </Device>
      </Devices>
    </Module>
  </Template>
</Templates>