<?xml version="1.0" encoding="utf-8"?>
<Templates format="2" protocolVersion="61">
  <Template id="1556305f-7df4-4cb9-b32b-f3c84593a924" revision="1.2">
    <SuggestedCCUParameters>
      <UseAsciiCommunication>False</UseAsciiCommunication>
      <StopBits>One</StopBits>
      <DataBits>8</DataBits>
      <Parity>None</Parity>
      <Baudrate>9600</Baudrate>
      <DelayBetweenRequests>-1</DelayBetweenRequests>
      <ReadWriteTimeout>1000</ReadWriteTimeout>
    </SuggestedCCUParameters>
    <ImportParameters>
      <Parameter>
        <Id>SlaveId</Id>
        <Name>${device_SlaveId}</Name>
        <Value>255</Value>
      </Parameter>
      <Parameter>
        <Id>IpAddress</Id>
        <Name>${ipAddress}</Name>
        <Value>192.168.1.0</Value>
      </Parameter>
    </ImportParameters>
    <RevisionHistory>
      <Revision id="1.0">Initial version</Revision>
      <Revision id="1.1">Stretch dimmer range 0-100% without min/max level</Revision>
      <Revision id="1.2">New script syntax</Revision>
    </RevisionHistory>
    <Name>Resi DALI</Name>
    <CcuModel>ModbusRtuCCU</CcuModel>
    <Producer></Producer>
    <Model></Model>
    <Description></Description>
    <Category>9</Category>
    <Module>
      <Name>Resi Dali</Name>
      <Id>-1</Id>
      <Model>ModbusModule</Model>
      <DeviceProperties>
        <DeviceType>7001</DeviceType>
        <InternalPollInterval>30000</InternalPollInterval>
        <PrefetchModeId>2</PrefetchModeId>
        <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_slave_id}","Section":null},"ReadFormula":"modbusr(H,65221,uint16)"}]</ServiceAttributesFormulas>
        <SlaveId>$[SlaveId]</SlaveId>
        <MaxPrefetchGroupSize>10</MaxPrefetchGroupSize>
        <IpAddress>$[IpAddress]</IpAddress>
        <Variables>[]</Variables>
      </DeviceProperties>
      <Devices>
        <Device>
          <Name>Gear 0</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 1</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":1.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 2</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":2.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 3</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":3.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 4</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":4.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 5</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":5.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 6</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":6.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 7</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":7.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 8</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":8.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 9</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":9.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 10</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":10.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 11</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":11.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 12</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":12.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 13</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":13.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 14</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":14.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 15</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":15.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 16</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":16.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 17</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":17.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 18</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":18.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 19</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":19.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 20</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":20.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 21</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":21.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 22</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":22.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 23</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":23.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 24</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":24.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 25</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":25.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 26</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":26.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 27</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":27.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 28</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":28.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 29</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":29.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 30</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":30.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 31</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":31.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 32</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":32.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 33</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":33.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 34</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":34.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 35</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":35.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 36</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":36.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 37</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":37.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 38</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":38.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 39</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":39.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 40</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":40.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 41</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":41.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 42</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":42.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 43</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":43.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 44</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":44.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 45</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":45.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 46</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":46.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 47</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":47.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 48</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":48.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 49</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":49.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 50</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":50.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 51</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":51.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 52</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":52.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 53</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":53.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 54</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":54.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 55</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":55.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 56</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":56.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 57</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":57.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 58</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":58.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 59</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":59.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 60</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":60.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 61</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":61.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 62</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":62.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>﻿        <Device>
          <Name>Gear 63</Name>
          <Model>ModbusDimmer</Model>
          <Id>-2</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>1000</InternalPollInterval>
            <InitializeScript>var x := 0; var rx := 0;
modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
x := modbusr(SH, 511, uint16);
if x != 0x8000
    if x != 0xFF
    Status := RANDINT(1, 60);
    else
        Status := 0;
    end
else
    Status := RANDINT(1, 60);
end

if Status = 0
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);

    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, minLevel := x );
    
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, maxLevel := x );
end
</InitializeScript>
            <ReadScript>var x := 0; var rx := 0;
if Status &gt; 0
    Status := Status -1;
    adderror("Gear not responding!");
    return(0);
end

checkStatus := checkStatus -1;
if checkStatus &lt; 1
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if x != 0x8000
        if x != 0xFF
        Status := RANDINT(10, 60);
            adderror("Gear not present!");
        else
            Status := 0;
            checkStatus := 60;
        end
    else
        Status := RANDINT(10, 60);
        adderror("Gear not responding!");
    end
end
    
if suppLampFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Lamp failure!"), 0), 0);
end

if suppPowerFailure
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000, if (x != 0xFF, adderror("Power failure!"), 0), 0);       
end
</ReadScript>
            <PrefetchModeId>2</PrefetchModeId>
            <ServiceAttributesFormulas>[{"AttributeDefinition":{"Name":"${xml_short_address}","Section":null},"ReadFormula":"ShortAddress"},{"AttributeDefinition":{"Name":"${xml_device_type}","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x99);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(\"DT\" + x));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Physical Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9A);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Max Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA1);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Min Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Power Up Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA3);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"System Failure Level","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA4);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, return(round((x / 0xFE) * 100) + \" %\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"${xml_groups}","Section":null},"ReadFormula":"var x := 0; var rx := 0;\r\nif Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC0);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g1 := modbusr(SH, 511, uint16);\r\n    if (g1 = 0x8000, return(\"--\")); \r\n\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xC1);\r\n    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var g2 := modbusr(SH, 511, uint16);\r\n    if (g2 = 0x8000, return(\"--\")); \r\n\r\n    var ret := \"\";\r\n\r\n    if (getbit(g1, 0), ret := ret + \"0\");\r\n    if (getbit(g1, 1), if (ret = \"\", ret := \"1\", ret := ret + \",1\"));\r\n    if (getbit(g1, 2), if (ret = \"\", ret := \"2\", ret := ret + \",2\"));\r\n    if (getbit(g1, 3), if (ret = \"\", ret := \"3\", ret := ret + \",3\"));\r\n    if (getbit(g1, 4), if (ret = \"\", ret := \"4\", ret := ret + \",4\"));\r\n    if (getbit(g1, 5), if (ret = \"\", ret := \"5\", ret := ret + \",5\"));\r\n    if (getbit(g1, 6), if (ret = \"\", ret := \"6\", ret := ret + \",6\"));\r\n    if (getbit(g1, 7), if (ret = \"\", ret := \"7\", ret := ret + \",7\"));\r\n    if (getbit(g2, 0), if (ret = \"\", ret := \"8\", ret := ret + \",8\"));\r\n    if (getbit(g2, 1), if (ret = \"\", ret := \"9\", ret := ret + \",9\"));\r\n    if (getbit(g2, 2), if (ret = \"\", ret := \"10\", ret := ret + \",10\"));\r\n    if (getbit(g2, 3), if (ret = \"\", ret := \"11\", ret := ret + \",11\"));\r\n    if (getbit(g2, 4), if (ret = \"\", ret := \"12\", ret := ret + \",12\"));\r\n    if (getbit(g2, 5), if (ret = \"\", ret := \"13\", ret := ret + \",13\"));\r\n    if (getbit(g2, 6), if (ret = \"\", ret := \"14\", ret := ret + \",14\"));\r\n    if (getbit(g2, 7), if (ret = \"\", ret := \"15\", ret := ret + \",15\"));\r\n\r\n    if (ret = \"\", return(\"None\"), return(ret));\r\nelse\r\n    return(\"--\");\r\nend\r\n"},{"AttributeDefinition":{"Name":"Support Lamp Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x92);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppLampFailure := 1, suppLampFailure := 0);\r\n\r\n    if (suppLampFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"},{"AttributeDefinition":{"Name":"Support Power Failure","Section":null},"ReadFormula":"if Status = 0\r\n    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0x9B);\r\n    sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));\r\n    var x := modbusr(SH, 511, uint16);\r\n    if (x != 0x8000, suppPowerFailure := 1, suppPowerFailure := 0);\r\n\r\n    if (suppPowerFailure, return(\"Yes\"), return(\"No\"));\r\nend\r\n\r\nreturn(\"--\")"}]</ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x60 + grp);"},{"ActionDefinition":{"Name":"${xml_remove_from_group}","NumericParameters":[{"FriendlyName":"Group ID","Abbreviation":"grp","IsFloat":false,"MinValue":0.0,"MaxValue":15.0}],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x70 + grp);"},{"ActionDefinition":{"Name":"${xml_reset_to_default_settings}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x20);"},{"ActionDefinition":{"Name":"${xml_set_startup_levels}","NumericParameters":[],"BoolParameters":[],"EnumParameters":[]},"Script":"modbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x21);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2c);\r\nsleep(10);\r\nmodbusw(SH, 512, uint16, (ShortAddress &lt;&lt; 8) + 0x2d);"}]</ServiceActionsScripts>
            <CustomDeviceVariables>[{"Name":"ShortAddress","ValueTypeId":1,"NumericValue":63.0,"StringValue":null},{"Name":"Status","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppLampFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"suppPowerFailure","ValueTypeId":1,"NumericValue":0.0,"StringValue":null},{"Name":"checkStatus","ValueTypeId":1,"NumericValue":0},{"Name":"minLevel","ValueTypeId":1,"NumericValue":0},{"Name":"maxLevel","ValueTypeId":1,"NumericValue":254}]</CustomDeviceVariables>
            <ReadLevel>var x := 0; var rx := 0;
if Status = 0
    if minLevel = 0
        modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA2);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 511, uint16);
        if (x != 0x8000, minLevel := x );
    end
    modbusw(SH, 511, uint16, (ShortAddress &lt;&lt; 8) + 0xA0);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x != 0x8000 or rx, checkStatus := 60);
    if (x != 0x8000 and x != 0xff, return( if(x = 0, 0, linear(x , minLevel, 0.01, maxLevel, 1))  ), return (Le));
else
    return(NaN);
end</ReadLevel>
            <WriteLevel>var level := 0;
if(Le &gt; 0, level := round(linear(Le, 0.01, minLevel, 1, maxLevel)));
modbusw(SH, 510, uint16, (ShortAddress &lt;&lt; 8) + level );</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 0</Name>
          <Model>ModbusDimmer</Model>
          <Id>-4</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 0;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 0;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 0;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 1</Name>
          <Model>ModbusDimmer</Model>
          <Id>-5</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 1;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 1;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 1;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 2</Name>
          <Model>ModbusDimmer</Model>
          <Id>-6</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 2;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 2;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 2;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 3</Name>
          <Model>ModbusDimmer</Model>
          <Id>-7</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 3;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 3;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 3;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 4</Name>
          <Model>ModbusDimmer</Model>
          <Id>-8</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 4;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 4;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 4;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 5</Name>
          <Model>ModbusDimmer</Model>
          <Id>-9</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 5;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 5;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 5;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 6</Name>
          <Model>ModbusDimmer</Model>
          <Id>-10</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 6;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 6;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 6;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 7</Name>
          <Model>ModbusDimmer</Model>
          <Id>-11</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 7;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 7;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 7;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 8</Name>
          <Model>ModbusDimmer</Model>
          <Id>-12</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 8;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 8;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 8;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 9</Name>
          <Model>ModbusDimmer</Model>
          <Id>-13</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 9;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 9;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 9;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 10</Name>
          <Model>ModbusDimmer</Model>
          <Id>-14</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 10;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 10;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 10;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 11</Name>
          <Model>ModbusDimmer</Model>
          <Id>-15</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 11;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 11;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 11;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 12</Name>
          <Model>ModbusDimmer</Model>
          <Id>-16</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 12;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 12;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 12;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 13</Name>
          <Model>ModbusDimmer</Model>
          <Id>-17</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 13;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 13;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 13;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 14</Name>
          <Model>ModbusDimmer</Model>
          <Id>-18</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 14;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 14;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 14;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>${xml_group} 15</Name>
          <Model>ModbusDimmer</Model>
          <Id>-19</Id>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>2500</InternalPollInterval>
            <InitializeScript></InitializeScript>
            <ReadScript></ReadScript>
            <PrefetchModeId>0</PrefetchModeId>
            <ServiceAttributesFormulas></ServiceAttributesFormulas>
            <ServiceActionsScripts>[{"ActionDefinition":{"Name":"${xml_add_to_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 15;\r\nmodbusw(SH, 532, uint16, 0x60 + GroupAddress)"},{"ActionDefinition":{"Name":"${xml_remove_from_group_all_lamps}","NumericParameters":null,"BoolParameters":null,"EnumParameters":null},"Script":"var GroupAddress := 15;\r\nmodbusw(SH, 532, uint16, 0x70 + GroupAddress)"}]</ServiceActionsScripts>
            <CustomDeviceVariables />
            <ReadLevel></ReadLevel>
            <WriteLevel>var GroupAddress := 15;
modbusw(SH, 520, uint16, (GroupAddress &lt;&lt; 8) + (Le * 0xFE));</WriteLevel>
            <IconId>0</IconId>
          </DeviceProperties>
        </Device>
      </Devices>
    </Module>
  </Template>
</Templates>
