﻿<?xml version="1.0" encoding="utf-8"?>
<Templates format="2" protocolVersion="72">
  <Template id="71326e8c-8445-4b69-9236-6880b4f73e68" revision="1.0">
    <SuggestedCCUParameters />
    <RevisionHistory>
      <Revision id="1.0">Initial version</Revision>
      <Revision id="2.0">Conversion from onecall API</Revision>
    </RevisionHistory>
		<ImportParameters>
			<Parameter>
				<Name>${latitude}</Name>
				<Value>48.1778</Value>
				<Id>latitude</Id>
			</Parameter>
			<Parameter>
				<Name>${longitude}</Name>
				<Value>17.1426</Value>
				<Id>longitude</Id>
			</Parameter>
			<Parameter>
				<Name>OpenWeather application id</Name>
				<Value>appid</Value>
				<Id>appid</Id>
			</Parameter>
		</ImportParameters>    
    <Name>OpenWeather</Name>
    <CcuModel>PacketParserCCU</CcuModel>
    <Producer></Producer>
    <Model></Model>
    <Description></Description>
    <Module>
      <Name>OpenWeather</Name>
      <Id>-1</Id>
      <Model>PacketParserModuleHttp</Model>
      <DeviceProperties>
        <ReadScriptPacketParser>responseJson := "error";
Daily := "error";

VAR path := "data/2.5/weather?units=metric&amp;lat=" + latitude + "&amp;lon=" + longitude + "&amp;appid=" + AppId;
VAR response := SENDHTTPREQUEST(path);

IF response.IsSuccess
    responseJson := response.Content;
ELSE
    VAR contentJson := response.Content;
    VAR errCode := response.StatusCode;
    VAR message := PARSEJSON(contentJson, "message");
    #ADDERROR("Failed to read data - (" + errCode + ") " + message);
END

path := "data/2.5/forecast?units=metric&amp;lat=" + latitude + "&amp;lon=" + longitude + "&amp;appid=" + AppId + "&amp;cnt=9";
response := SENDHTTPREQUEST(path);

IF response.IsSuccess
    Daily := response.Content;
ELSE
    contentJson := response.Content;
    errCode := response.StatusCode;
    message := PARSEJSON(contentJson, "message");
    #ADDERROR("Failed to read data - (" + errCode + ") " + message);
END</ReadScriptPacketParser>
        <InternalPollInterval>300000</InternalPollInterval>
        <CustomVariables>[{"Name":"longitude","ValueTypeId":2,"NumericValue":0,"StringValue":"$[longitude]"},{"Name":"latitude","ValueTypeId":2,"NumericValue":0,"StringValue":"$[latitude]"},{"Name":"AppId","ValueTypeId":2,"NumericValue":0,"StringValue":"$[appid]"},{"Name":"responseJson","ValueTypeId":2,"NumericValue":0,"StringValue":""},{"Name":"Daily","ValueTypeId":2,"NumericValue":0,"StringValue":""}]</CustomVariables>
        <IpAddress>api.openweathermap.org</IpAddress>
        <Port>443</Port>
        <UseHttps>True</UseHttps>
      </DeviceProperties>
      <Devices>
        <Device>
          <Name>Current Air Pressure [hPa]</Name>
          <Model>PacketParserVariable</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions />
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>True</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.pressure"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Current Air Temperature</Name>
          <Model>PacketParserTemperatureSensor</Model>
          <Id>-3</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperatureScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.temp"))</ReadTemperatureScriptPacketParser>
            <ReadHumidityScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.humidity") / 100)</ReadHumidityScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Current Feels like Temperature</Name>
          <Model>PacketParserTemperatureSensor</Model>
          <Id>-4</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperatureScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.feels_like"))</ReadTemperatureScriptPacketParser>
            <ReadHumidityScriptPacketParser>NaN</ReadHumidityScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Current Visibility [m]</Name>
          <Model>PacketParserVariable</Model>
          <Id>-5</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions />
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>True</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"visibility"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Current Weather</Name>
          <Model>PacketParserMultiValueSwitch</Model>
          <Id>-6</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</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>5</Value5Index>
            <Value6Index>6</Value6Index>
            <Value7Index>71</Value7Index>
            <Value8Index>72</Value8Index>
            <Value9Index>73</Value9Index>
            <Value0Name>Clear</Value0Name>
            <Value1Name>Clouds</Value1Name>
            <Value2Name>Rain</Value2Name>
            <Value3Name> Drizzle</Value3Name>
            <Value4Name>Thunderstorm</Value4Name>
            <Value5Name> Snow</Value5Name>
            <Value6Name>Atmosphere</Value6Name>
            <Value7Name>7</Value7Name>
            <Value8Name>8</Value8Name>
            <Value9Name>9</Value9Name>
            <Value0IconId>234</Value0IconId>
            <Value1IconId>235</Value1IconId>
            <Value2IconId>238</Value2IconId>
            <Value3IconId>236</Value3IconId>
            <Value4IconId>239</Value4IconId>
            <Value5IconId>237</Value5IconId>
            <Value6IconId>240</Value6IconId>
            <Value7IconId>12</Value7IconId>
            <Value8IconId>13</Value8IconId>
            <Value9IconId>14</Value9IconId>
            <OffStateValue>0</OffStateValue>
            <ReadSwitchStateScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error")
    return(NaN);
END

VAR weather := PARSEJSON(responseJson, "weather[0].main");
SWITCH(weather, "Clear", 0, "Clouds", 1, "Rain", 2, "Drizzle", 3, "Thunderstorm", 4, "Snow", 5, "Mist", 6, "Smoke", 6, "Haze", 6, "Dust", 6, "Fog", 6, "Sand", 6, "Ash", 6, "Squall", 6, "Tornado", 6, 0);</ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser></WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Current Wind Speed</Name>
          <Model>PacketParserVariable</Model>
          <Id>-7</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions>{"14":"{\u0022ValueLogTypeConversionTypeId\u0022:3,\u0022SerializedValueLogTypeConversion\u0022:\u0022{\\u0022Value1OnInput\\u0022:0,\\u0022Value1OnOutput\\u0022:0,\\u0022Value2OnInput\\u0022:1,\\u0022Value2OnOutput\\u0022:1,\\u0022SourceValueLogTypes\\u0022:[62],\\u0022TargetValueLogType\\u0022:14}\u0022}"}</SerializedValueLogTypeConversions>
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>False</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"wind.speed"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+3h) Air Pressure [hPa]</Name>
          <Model>PacketParserVariable</Model>
          <Id>-8</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions />
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>False</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.pressure"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+3h) Air Temperature</Name>
          <Model>PacketParserTemperatureSensor</Model>
          <Id>-9</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser>[{"AttributeDefinition":{"Name":"Forecast Date"},"ReadFormula":"IF(ISNULL(Daily) | Daily = \u0022error\u0022, NaN, PARSEJSON(Daily,\u0022$.list[0].dt_txt\u0022))"}]</ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperatureScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.temp"))</ReadTemperatureScriptPacketParser>
            <ReadHumidityScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.humidity") / 100)</ReadHumidityScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+3h) Feels like Temperature</Name>
          <Model>PacketParserTemperatureSensor</Model>
          <Id>-10</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperatureScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.feels_like"))</ReadTemperatureScriptPacketParser>
            <ReadHumidityScriptPacketParser>NaN</ReadHumidityScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+3h) Visibility [m]</Name>
          <Model>PacketParserVariable</Model>
          <Id>-11</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions />
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>False</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].visibility"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+3h) Weather</Name>
          <Model>PacketParserMultiValueSwitch</Model>
          <Id>-12</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</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>5</Value5Index>
            <Value6Index>6</Value6Index>
            <Value7Index>71</Value7Index>
            <Value8Index>72</Value8Index>
            <Value9Index>73</Value9Index>
            <Value0Name>Clear</Value0Name>
            <Value1Name>Clouds</Value1Name>
            <Value2Name>Rain</Value2Name>
            <Value3Name> Drizzle</Value3Name>
            <Value4Name>Thunderstorm</Value4Name>
            <Value5Name> Snow</Value5Name>
            <Value6Name>Atmosphere</Value6Name>
            <Value7Name>7</Value7Name>
            <Value8Name>8</Value8Name>
            <Value9Name>9</Value9Name>
            <Value0IconId>234</Value0IconId>
            <Value1IconId>235</Value1IconId>
            <Value2IconId>238</Value2IconId>
            <Value3IconId>236</Value3IconId>
            <Value4IconId>239</Value4IconId>
            <Value5IconId>237</Value5IconId>
            <Value6IconId>240</Value6IconId>
            <Value7IconId>12</Value7IconId>
            <Value8IconId>13</Value8IconId>
            <Value9IconId>14</Value9IconId>
            <OffStateValue>0</OffStateValue>
            <ReadSwitchStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error")
    return(NaN);
END

VAR weather := PARSEJSON(Daily, "$.list[0].weather[0].main");
SWITCH(weather, "Clear", 0, "Clouds", 1, "Rain", 2, "Drizzle", 3, "Thunderstorm", 4, "Snow", 5, "Mist", 6, "Smoke", 6, "Haze", 6, "Dust", 6, "Fog", 6, "Sand", 6, "Ash", 6, "Squall", 6, "Tornado", 6, 0);</ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser></WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+3h) Wind speed</Name>
          <Model>PacketParserVariable</Model>
          <Id>-13</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions>{"14":"{\u0022ValueLogTypeConversionTypeId\u0022:3,\u0022SerializedValueLogTypeConversion\u0022:\u0022{\\u0022Value1OnInput\\u0022:0,\\u0022Value1OnOutput\\u0022:0,\\u0022Value2OnInput\\u0022:1,\\u0022Value2OnOutput\\u0022:1,\\u0022SourceValueLogTypes\\u0022:[62],\\u0022TargetValueLogType\\u0022:14}\u0022}"}</SerializedValueLogTypeConversions>
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>False</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].wind.speed"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+24h) Air Pressure [hPa]</Name>
          <Model>PacketParserVariable</Model>
          <Id>-14</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions />
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>False</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.pressure"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+24h) Air Temperature</Name>
          <Model>PacketParserTemperatureSensor</Model>
          <Id>-15</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser>[{"AttributeDefinition":{"Name":"Forecast Date"},"ReadFormula":"IF(ISNULL(Daily) | Daily = \u0022error\u0022, NaN, PARSEJSON(Daily,\u0022$.list[8].dt_txt\u0022))"}]</ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperatureScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.temp"))</ReadTemperatureScriptPacketParser>
            <ReadHumidityScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.humidity") / 100)</ReadHumidityScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+24h) Feels like Temperature</Name>
          <Model>PacketParserTemperatureSensor</Model>
          <Id>-16</Id>
          <DeviceProperties>
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperatureScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.feels_like"))</ReadTemperatureScriptPacketParser>
            <ReadHumidityScriptPacketParser>NaN</ReadHumidityScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+24h) Visibility [m]</Name>
          <Model>PacketParserVariable</Model>
          <Id>-17</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions />
            <ReadScriptPacketParser>IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));</ReadScriptPacketParser>
            <InternalPollInterval>15000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>False</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].visibility"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+24h) Wind speed</Name>
          <Model>PacketParserVariable</Model>
          <Id>-18</Id>
          <DeviceProperties>
            <SerializedValueLogTypeConversions>{"14":"{\u0022ValueLogTypeConversionTypeId\u0022:3,\u0022SerializedValueLogTypeConversion\u0022:\u0022{\\u0022Value1OnInput\\u0022:0,\\u0022Value1OnOutput\\u0022:0,\\u0022Value2OnInput\\u0022:1,\\u0022Value2OnOutput\\u0022:1,\\u0022SourceValueLogTypes\\u0022:[62],\\u0022TargetValueLogType\\u0022:14}\u0022}"}</SerializedValueLogTypeConversions>
            <ReadScriptPacketParser></ReadScriptPacketParser>
            <InternalPollInterval>300000</InternalPollInterval>
            <CustomVariables />
            <ServiceAttributesScriptsPacketParser></ServiceAttributesScriptsPacketParser>
            <ServiceActionsScriptsPacketParser></ServiceActionsScriptsPacketParser>
            <ShouldDoPeriodicWrite>False</ShouldDoPeriodicWrite>
            <IsReadOnly>True</IsReadOnly>
            <ReadStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].wind.speed"))</ReadStateScriptPacketParser>
            <WriteStateScriptPacketParser></WriteStateScriptPacketParser>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Forecast (+24h)Weather</Name>
          <Model>PacketParserMultiValueSwitch</Model>
          <Id>-19</Id>
          <DeviceProperties>
            <ReadScriptPacketParser />
            <InternalPollInterval>300000</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>5</Value5Index>
            <Value6Index>6</Value6Index>
            <Value7Index>71</Value7Index>
            <Value8Index>72</Value8Index>
            <Value9Index>73</Value9Index>
            <Value0Name>Clear</Value0Name>
            <Value1Name>Clouds</Value1Name>
            <Value2Name>Rain</Value2Name>
            <Value3Name> Drizzle</Value3Name>
            <Value4Name>Thunderstorm</Value4Name>
            <Value5Name> Snow</Value5Name>
            <Value6Name>Atmosphere</Value6Name>
            <Value7Name>7</Value7Name>
            <Value8Name>8</Value8Name>
            <Value9Name>9</Value9Name>
            <Value0IconId>234</Value0IconId>
            <Value1IconId>235</Value1IconId>
            <Value2IconId>238</Value2IconId>
            <Value3IconId>236</Value3IconId>
            <Value4IconId>239</Value4IconId>
            <Value5IconId>237</Value5IconId>
            <Value6IconId>240</Value6IconId>
            <Value7IconId>12</Value7IconId>
            <Value8IconId>13</Value8IconId>
            <Value9IconId>14</Value9IconId>
            <OffStateValue>0</OffStateValue>
            <ReadSwitchStateScriptPacketParser>IF(ISNULL(Daily) | Daily = "error")
    return(NaN);
END

VAR weather := PARSEJSON(Daily, "$.list[8].weather[0].main");
SWITCH(weather, "Clear", 0, "Clouds", 1, "Rain", 2, "Drizzle", 3, "Thunderstorm", 4, "Snow", 5, "Mist", 6, "Smoke", 6, "Haze", 6, "Dust", 6, "Fog", 6, "Sand", 6, "Ash", 6, "Squall", 6, "Tornado", 6, 0);</ReadSwitchStateScriptPacketParser>
            <WriteSwitchStateScriptPacketParser></WriteSwitchStateScriptPacketParser>
          </DeviceProperties>
        </Device>
      </Devices>
    </Module>
  </Template>
</Templates>