<?xml version="1.0" encoding="utf-8"?>
<Templates format="2" protocolVersion="83">
  <Template id="a4f2e8c1-3b07-4d9e-8f6a-2c5d1e0b7a93" revision="1.0">
    <SuggestedCCUParameters>
      <Baudrate>9600</Baudrate>
      <Parity>None</Parity>
      <StopBits>Two</StopBits>
      <DataBits>8</DataBits>
      <UseAsciiCommunication>False</UseAsciiCommunication>
      <DelayBetweenRequests>-1</DelayBetweenRequests>
      <ReadWriteTimeout>3000</ReadWriteTimeout>
    </SuggestedCCUParameters>
    <RevisionHistory>
      <Revision id="1.0">Initial version</Revision>
    </RevisionHistory>
    <Name>Airzone Aidoo Pro Modbus Aquarea M</Name>
    <CcuModel>ModbusRtuCCU</CcuModel>
    <Producer>Airzone</Producer>
    <Model>Aidoo Pro Modbus Aquarea M (PAW-AZAW-MBS-M)</Model>
    <Description>Modbus RTU gateway for Panasonic Aquarea H/J/K/L/M series heat pumps. Communicates via RS-485 at 9600 bps.</Description>
    <Category>1</Category>
    <ImportParameters>
      <Parameter>
        <Id>SlaveId</Id>
        <Name>Modbus Slave ID</Name>
        <Value>1</Value>
      </Parameter>
    </ImportParameters>
    <Module>
      <Name>Aidoo Pro Modbus Aquarea M</Name>
      <Id>-1</Id>
      <Model>ModbusModule</Model>
      <DeviceProperties>
        <SlaveId>$[SlaveId]</SlaveId>
        <Baudrate>9600</Baudrate>
        <Parity>None</Parity>
        <StopBits>2</StopBits>
        <DataBits>8</DataBits>
        <MaxPrefetchGroupSize>16</MaxPrefetchGroupSize>
        <PrefetchModeId>0</PrefetchModeId>
      </DeviceProperties>
      <Devices>
        <Device>
          <Name>Heat Pump On/Off</Name>
          <Id>-2</Id>
          <Model>ModbusSwitch</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>10000</InternalPollInterval>
            <OnStateIconId>1004</OnStateIconId>
            <OffStateIconId>123</OffStateIconId>
            <OnStateName>${general_on}</OnStateName>
            <OffStateName>${general_off}</OffStateName>
            <ReadSwitchState>MODBUSR(H, 0, Bool)</ReadSwitchState>
            <WriteSwitchState>MODBUSW(H, 0, Bool, St)</WriteSwitchState>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Operating Mode</Name>
          <Id>-3</Id>
          <Model>ModbusMultiValueSwitch</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>10000</InternalPollInterval>
            <ReadSwitchState>MODBUSR(H, 4, Int16)</ReadSwitchState>
            <WriteSwitchState>MODBUSW(H, 4, Int16, Mu)</WriteSwitchState>
            <Value0>1</Value0>
            <Value0Name>Heat</Value0Name>
            <Value0IconId>1</Value0IconId>
            <Value1>2</Value1>
            <Value1Name>Heat + Tank</Value1Name>
            <Value1IconId>1</Value1IconId>
            <Value2>3</Value2>
            <Value2Name>Tank Only</Value2Name>
            <Value2IconId>4</Value2IconId>
            <Value3>4</Value3>
            <Value3Name>Cool + Tank</Value3Name>
            <Value3IconId>2</Value3IconId>
            <Value4>5</Value4>
            <Value4Name>Cool</Value4Name>
            <Value4IconId>2</Value4IconId>
            <Value5>6</Value5>
            <Value5Name>Auto</Value5Name>
            <Value5IconId>3</Value5IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Zone Activation</Name>
          <Id>-4</Id>
          <Model>ModbusMultiValueSwitch</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>10000</InternalPollInterval>
            <ReadSwitchState>MODBUSR(H, 9, Int16)</ReadSwitchState>
            <WriteSwitchState>MODBUSW(H, 9, Int16, Mu)</WriteSwitchState>
            <Value0>1</Value0>
            <Value0Name>Zone 1 On / Zone 2 Off</Value0Name>
            <Value0IconId>5</Value0IconId>
            <Value1>2</Value1>
            <Value1Name>Zone 1 Off / Zone 2 On</Value1Name>
            <Value1IconId>6</Value1IconId>
            <Value2>3</Value2>
            <Value2Name>Both Zones On</Value2Name>
            <Value2IconId>7</Value2IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Zone 1 Thermostat</Name>
          <Id>-5</Id>
          <Model>ModbusThermostat</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadCurrentTemperature>MODBUSR(H, 14, Int16)</ReadCurrentTemperature>
            <ReadDesiredTemperature>MODBUSR(H, 12, Int16)</ReadDesiredTemperature>
            <WriteDesiredTemperature>MODBUSWNE(H, 12, Int16, Se)</WriteDesiredTemperature>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Zone 2 Thermostat</Name>
          <Id>-6</Id>
          <Model>ModbusThermostat</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadCurrentTemperature>MODBUSR(H, 15, Int16)</ReadCurrentTemperature>
            <ReadDesiredTemperature>MODBUSR(H, 13, Int16)</ReadDesiredTemperature>
            <WriteDesiredTemperature>MODBUSWNE(H, 13, Int16, Se)</WriteDesiredTemperature>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Outdoor Temperature</Name>
          <Id>-7</Id>
          <Model>ModbusTemperatureSensor</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>30000</InternalPollInterval>
            <ReadTemperature>MODBUSR(H, 1, Int16)</ReadTemperature>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Outlet Water Temperature</Name>
          <Id>-8</Id>
          <Model>ModbusTemperatureSensor</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadTemperature>MODBUSR(H, 2, Int16)</ReadTemperature>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Inlet Water Temperature</Name>
          <Id>-9</Id>
          <Model>ModbusTemperatureSensor</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadTemperature>MODBUSR(H, 3, Int16)</ReadTemperature>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>DHW Tank On/Off</Name>
          <Id>-10</Id>
          <Model>ModbusSwitch</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>10000</InternalPollInterval>
            <OnStateIconId>60</OnStateIconId>
            <OffStateIconId>61</OffStateIconId>
            <OnStateName>${general_on}</OnStateName>
            <OffStateName>${general_off}</OffStateName>
            <ReadSwitchState>MODBUSR(H, 30, Bool)</ReadSwitchState>
            <WriteSwitchState>MODBUSW(H, 30, Bool, St)</WriteSwitchState>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>DHW Tank Thermostat</Name>
          <Id>-11</Id>
          <Model>ModbusThermostat</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadCurrentTemperature>MODBUSR(H, 32, Int16)</ReadCurrentTemperature>
            <ReadDesiredTemperature>MODBUSR(H, 33, Int16)</ReadDesiredTemperature>
            <WriteDesiredTemperature>MODBUSWNE(H, 33, Int16, Se)</WriteDesiredTemperature>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"DHW Max Set Temp [°C]"},"ReadFormula":"MODBUSR(H, 36, Int16)"}]</ServiceAttributesFormulas>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Heat Mode Power</Name>
          <Id>-12</Id>
          <Model>ModbusElectricityMeter</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadDemand>MODBUSR(H, 46, Int16)</ReadDemand>
            <ReadTotalConsumption>MODBUSR(H, 120, UInt16) * 65536 + MODBUSR(H, 121, UInt16)</ReadTotalConsumption>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>DHW Mode Power</Name>
          <Id>-13</Id>
          <Model>ModbusElectricityMeter</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadDemand>MODBUSR(H, 45, Int16)</ReadDemand>
            <ReadTotalConsumption>MODBUSR(H, 128, UInt16) * 65536 + MODBUSR(H, 129, UInt16)</ReadTotalConsumption>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Cool/Recovery Mode Power</Name>
          <Id>-14</Id>
          <Model>ModbusElectricityMeter</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadDemand>MODBUSR(H, 47, Int16)</ReadDemand>
            <ReadTotalConsumption>MODBUSR(H, 124, UInt16) * 65536 + MODBUSR(H, 125, UInt16)</ReadTotalConsumption>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Heat Energy Generated Total</Name>
          <Id>-15</Id>
          <Model>ModbusVariable</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>60000</InternalPollInterval>
            <IsReadOnly>True</IsReadOnly>
            <ReadState>MODBUSR(H, 122, UInt16) * 65536 + MODBUSR(H, 123, UInt16)</ReadState>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"Reset Energy Counters","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"MODBUSW(H, 378, Int16, 1337)"}]</ServiceActionsScripts>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Powerful Mode</Name>
          <Id>-16</Id>
          <Model>ModbusMultiValueSwitch</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadSwitchState>MODBUSR(H, 197, Int16)</ReadSwitchState>
            <WriteSwitchState>MODBUSW(H, 197, Int16, Mu)</WriteSwitchState>
            <Value0>1</Value0>
            <Value0Name>Off</Value0Name>
            <Value0IconId>4</Value0IconId>
            <Value1>2</Value1>
            <Value1Name>30 min</Value1Name>
            <Value1IconId>29</Value1IconId>
            <Value2>3</Value2>
            <Value2Name>60 min</Value2Name>
            <Value2IconId>30</Value2IconId>
            <Value3>4</Value3>
            <Value3Name>90 min</Value3Name>
            <Value3IconId>31</Value3IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Quiet Mode</Name>
          <Id>-17</Id>
          <Model>ModbusMultiValueSwitch</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadSwitchState>MODBUSR(H, 198, Int16)</ReadSwitchState>
            <WriteSwitchState>MODBUSW(H, 198, Int16, Mu)</WriteSwitchState>
            <Value0>1</Value0>
            <Value0Name>Off</Value0Name>
            <Value0IconId>4</Value0IconId>
            <Value1>2</Value1>
            <Value1Name>Level 1</Value1Name>
            <Value1IconId>25</Value1IconId>
            <Value2>3</Value2>
            <Value2Name>Level 2</Value2Name>
            <Value2IconId>26</Value2IconId>
            <Value3>4</Value3>
            <Value3Name>Level 3</Value3Name>
            <Value3IconId>27</Value3IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Diagnostics</Name>
          <Id>-18</Id>
          <Model>ModbusVariable</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>30000</InternalPollInterval>
            <IsReadOnly>True</IsReadOnly>
            <ReadState>MODBUSR(H, 70, Int16)</ReadState>
            <ReadErrorsScript>VAR errCode := MODBUSR(H, 52, Int16);
IF(errCode != 0) ADDERROR(0, "Error code: " + TOSTRING(errCode)); END
IF(MODBUSR(H, 64, Bool)) ADDINFO(0, "Deice (defrost) cycle active"); END
IF(MODBUSR(H, 70, Bool)) ADDWARNING(0, "Current error status active"); END</ReadErrorsScript>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"Gateway Firmware Version"},"ReadFormula":"TOSTRING(MODBUSR(H, 50, UInt16))"},{"AttributeDefinition":{"Name":"Capacity Rank [kW]"},"ReadFormula":"MODBUSR(H, 351, Int16)"},{"AttributeDefinition":{"Name":"Connected Aquarea Series"},"ReadFormula":"SWITCH(MODBUSR(H, 117, Int16), 1, \"H-Series\", 2, \"J-Series\", 3, \"K-Series\", 4, \"L-Series\", 5, \"M-Series\", \"Unknown\")"}]</ServiceAttributesFormulas>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Zone 1 Heat/Cool Setpoints [J/K/L/M series]</Name>
          <Id>-19</Id>
          <Model>ModbusThermostat</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadCurrentTemperature>MODBUSR(H, 14, Int16)</ReadCurrentTemperature>
            <ReadDesiredTemperature>MODBUSR(H, 226, Int16)</ReadDesiredTemperature>
            <WriteDesiredTemperature>MODBUSWNE(H, 226, Int16, Se)</WriteDesiredTemperature>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"Zone 1 Cool Mode Set Temp [°C]"},"ReadFormula":"MODBUSR(H, 227, Int16)"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"Set Zone 1 Cool Setpoint","NumericParameters":[{"FriendlyName":"Temperature","Abbreviation":"T","IsFloat":false,"MinValue":-5,"MaxValue":35}],"BoolParameters":[],"EnumParameters":[]},"Script":"MODBUSWNE(H, 227, Int16, T)"}]</ServiceActionsScripts>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Zone 2 Heat/Cool Setpoints [J/K/L/M series]</Name>
          <Id>-20</Id>
          <Model>ModbusThermostat</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <ReadCurrentTemperature>MODBUSR(H, 15, Int16)</ReadCurrentTemperature>
            <ReadDesiredTemperature>MODBUSR(H, 228, Int16)</ReadDesiredTemperature>
            <WriteDesiredTemperature>MODBUSWNE(H, 228, Int16, Se)</WriteDesiredTemperature>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"Zone 2 Cool Mode Set Temp [°C]"},"ReadFormula":"MODBUSR(H, 229, Int16)"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"Set Zone 2 Cool Setpoint","NumericParameters":[{"FriendlyName":"Temperature","Abbreviation":"T","IsFloat":false,"MinValue":-5,"MaxValue":35}],"BoolParameters":[],"EnumParameters":[]},"Script":"MODBUSWNE(H, 229, Int16, T)"}]</ServiceActionsScripts>
          </DeviceProperties>
        </Device>
      </Devices>
    </Module>
  </Template>
</Templates>
