[SOLVED] CT100 Thermostats with Mios Binding

It looks like the CT100 thermostats are a bit unique in that they don’t have heat / cool setpoints. My guess is I am missing a transform or something.

http://10.71.129.3:3480/data_request?id=user_data&output_format=xml

<device id="22" device_type="urn:schemas-upnp-org:device:HVAC_ZoneThermostat:1" room="0" id_parent="1" embedded="0" disabled="0" device_file="D_HVAC_ZoneThermostat1.xml" impl_file="" altid="13" ip="" mac="" time_created="1440284089" category_num="5" subcategory_num="1" pnp="2126" manufacturer="RT" model="CT100" name="Basement Main" device_json="D_HVAC_ZoneThermostat1.json" local_udn="uuid:4d494342-5342-5645-0016-000002169ca2">
<states>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="Capabilities" value="210,156,0,4,8,6,L,R,B,RS,|32,49:2,64:2,66,67,68,69,96:3,112,114,128,129,133,134,135," id="0"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="ManufacturerInfo" value="152,25601,263" id="1"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="VersionInfo" value="3,3,28,9,1" id="2"/>
<state service="urn:upnp-org:serviceId:TemperatureSetpoint1" variable="ReportMode" value="S" pnp="*1.7.649*" id="3"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="Configured" value="1" id="4"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="NodeInfo" value="20,31,40,42,43,44,45,60,70,72,80,81,85,86,87," id="5"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="SetPointInfo" value="H1,C1," id="6"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="MultiChEndpoint" value="2,0,1" id="7"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="MultiChCapabilities" value="1,8,6,49,133,2,8,6,49,133," id="8"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="ConfiguredAssoc" value="" id="9"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="ModeSetting" value="1:;2:;3:;4:" id="10"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="LastUpdate" value="1440284104" id="11"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="FirstConfigured" value="1440284104" id="12"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="Neighbors" id="13" value="1,2,3,4,6,7,9,10,11,12,14,15,16,17,18,19,"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="LastReset" value="1440284103" id="14"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="AssociationNum" value="1" id="15"/>
<state service="urn:upnp-org:serviceId:TemperatureSensor1" variable="CurrentTemperature" id="16" value="73.0"/>
<state service="urn:upnp-org:serviceId:HVAC_UserOperatingMode1" variable="ModeStatus" id="17" value="AutoChangeOver"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="TemperatureScale" value="0,1,1" id="18"/>
<state service="urn:upnp-org:serviceId:TemperatureSetpoint1" variable="CurrentSetpoint" id="19" value="72"/>
<state service="urn:upnp-org:serviceId:TemperatureSetpoint1" variable="AllSetpoints" id="20" value="72.000000,72.000000,72.000000"/>
<state service="urn:upnp-org:serviceId:SwitchPower1" variable="Status" id="21" value="1"/>
<state service="urn:upnp-org:serviceId:HVAC_FanOperatingMode1" variable="Mode" value="Auto" id="22"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="BatteryDate" id="23" value="1440435018"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="BatteryLevel" value="100" id="24"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="PollOk" id="25" value="391"/>
<state service="urn:micasaverde-com:serviceId:ZWaveNetwork1" variable="ConsecutivePollFails" id="26" value="0"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="ChildrenSameRoom" value="1" id="27"/>
<state service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="LastRouteUpdate" id="28" value="1440426059"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="LastTimeCheck" id="29" value="1440373794"/>
<state service="urn:micasaverde-com:serviceId:HaDevice1" variable="LastTimeOffset" value="-4" id="30"/>
<state service="urn:micasaverde-com:serviceId:HVAC_OperatingState1" variable="ModeState" id="31" value="Idle"/>
<state service="urn:micasaverde-com:serviceId:HVAC_OperatingState1" variable="ModeStateForEnergy" value="1" id="32"/>
<state id="230" service="urn:upnp-org:serviceId:TemperatureSetpoint1" variable="SetpointTarget" value="72"/>
<state id="68" service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="LastNnu" value="1440396000,4"/>
<state id="70" service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="LastArr" value="1440396000,4"/>
<state id="4" service="urn:upnp-org:serviceId:SwitchPower1" variable="Target" value="1"/>
<state id="45" service="urn:upnp-org:serviceId:HVAC_UserOperatingMode1" variable="ModeTarget" value="AutoChangeOver"/>
<state id="50" service="urn:upnp-org:serviceId:TemperatureSetpoint1_Heat" variable="CurrentSetpoint" value="72"/>
<state id="63" service="urn:upnp-org:serviceId:TemperatureSetpoint1_Cool" variable="CurrentSetpoint" value="72"/>
<state id="137" service="urn:micasaverde-com:serviceId:ZWaveDevice1" variable="PollNoReply" value="1"/>
<state id="234" service="urn:micasaverde-com:serviceId:HaDevice1" variable="CommFailure" value="0"/>
<state id="235" service="urn:micasaverde-com:serviceId:HaDevice1" variable="CommFailureTime" value="0"/>
</states>
<ControlURLs>
<service_58 service="urn:upnp-org:serviceId:HVAC_FanOperatingMode1" ControlURL="/upnp/control/dev_58" EventURL="/upnp/event/dev_58" serviceType="urn:schemas-upnp-org:service:HVAC_FanOperatingMode:1"/>
<service_59 service="urn:micasaverde-com:serviceId:HVAC_OperatingState1" ControlURL="/upnp/control/dev_59" EventURL="/upnp/event/dev_59" serviceType="urn:micasaverde-com:serviceId:HVAC_OperatingState:1"/>
<service_60 service="urn:upnp-org:serviceId:HVAC_UserOperatingMode1" ControlURL="/upnp/control/dev_60" EventURL="/upnp/event/dev_60" serviceType="urn:schemas-upnp-org:service:HVAC_UserOperatingMode:1"/>
<service_61 service="urn:upnp-org:serviceId:FanSpeed1" ControlURL="/upnp/control/dev_61" EventURL="/upnp/event/dev_61" serviceType="urn:schemas-upnp-org:service:FanSpeed:1"/>
<service_62 service="urn:upnp-org:serviceId:TemperatureSensor1" ControlURL="/upnp/control/dev_62" EventURL="/upnp/event/dev_62" serviceType="urn:schemas-upnp-org:service:TemperatureSensor:1"/>
<service_63 service="urn:upnp-org:serviceId:TemperatureSetpoint1" ControlURL="/upnp/control/dev_63" EventURL="/upnp/event/dev_63" serviceType="urn:schemas-upnp-org:service:TemperatureSetpoint:1"/>
<service_64 service="urn:upnp-org:serviceId:TemperatureSetpoint1_Heat" ControlURL="/upnp/control/dev_64" EventURL="/upnp/event/dev_64" serviceType="urn:schemas-upnp-org:service:TemperatureSetpoint:1"/>
<service_65 service="urn:upnp-org:serviceId:TemperatureSetpoint1_Cool" ControlURL="/upnp/control/dev_65" EventURL="/upnp/event/dev_65" serviceType="urn:schemas-upnp-org:service:TemperatureSetpoint:1"/>
<service_66 service="urn:upnp-org:serviceId:SwitchPower1" ControlURL="/upnp/control/dev_66" EventURL="/upnp/event/dev_66" serviceType="urn:schemas-upnp-org:service:SwitchPower:1"/>
<service_67 service="urn:micasaverde-com:serviceId:EnergyMetering1" ControlURL="/upnp/control/dev_67" EventURL="/upnp/event/dev_67" serviceType="urn:schemas-micasaverde-com:service:EnergyMetering:1"/>
<service_68 service="urn:micasaverde-com:serviceId:HaDevice1" ControlURL="/upnp/control/dev_68" EventURL="/upnp/event/dev_68" serviceType="urn:schemas-micasaverde-com:service:HaDevice:1"/>
</ControlURLs>
</device>

Right now when I try to change temp I get:

2015-08-24 13:58:51 DEBUG o.o.b.m.i.MiosUnitConnector[:185]- callDevice: Need to remote-invoke Device 'unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/SetpointTarget' action '72' and current state '72')
2015-08-24 13:58:51 WARN  o.o.b.m.i.MiosUnitConnector[:190]- callDevice: Command '72' not supported, or missing command: mapping, for Item 'Basement_Tstat_SetPoint'
2015-08-24 13:58:52 DEBUG o.o.b.m.i.MiosUnitConnector[:699]- processResponse: success! loadTime=1439903586, dataVersion=903590446 devices(0) scenes(0) rooms(0) sections(0)

My item looks like:

Group   Tstat10                                                                                         (Thermostats)
Group   Tstat10_Chart                                                                                   (Tstat10)
Number  Basement_Tstat_Temperature              "Basement Temperature [%.1f °F]"        <temperature>   (Tstat10_Chart, Temperature)    {mios="unit:house,device:22/service/TemperatureSensor1/CurrentTemperature"}
String  Basement_Tstat_OpMode                   "Basement Operating Mode"               <settings>      (Tstat10)                       {mios="unit:house,device:22/service/HVAC_UserOperatingMode1/ModeStatus"}
Number  Basement_Tstat_BatteryLevel             "Basement Battery Level [%d]"           <heating>       (Tstat_Battery)                 {mios="unit:house,device:22/service/HaDevice1/BatteryLevel"}
String  Basement_Tstat_ModeState                "Basement Mode State [%s]"              <settings>      (Tstat10, HVAC_Mode)            {mios="unit:house,device:22/service/HVAC_OperatingState1/ModeState"}
//String Basement_Tstat_SetPoint                "Basement Setpoint [%s]"                <temperature>   (Tstat10)                       {mios="unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/CurrentSetpoint"}
String  Basement_Tstat_SetPoint                 "Basement Setpoint [%s]"                <temperature>   (Tstat10)                       {mios="unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/SetpointTarget"}
Number  Basement_Tstat_Humidity                 "Basement Humidity [%d %%]"             <humidity>      (Tstat10_Chart, Humidity)       {mios="unit:house,device:24/service/HumiditySensor1/CurrentLevel"}
Number  Basement_Chart_Period                   "Chart Period"

My sitemap:

                        Text item=Basement_Tstat_Temperature valuecolor=[>80="red",>72="orange",>69="green",<69="blue",<60="purple"] {
                                Text item=Basement_Tstat_Temperature valuecolor=[Basement_Tstat_Temperature>80="red",>72="orange",>69="green",<69="blue",<60="purple"] {
                                        Frame {
                                                Switch item=Basement_Chart_Period label="Chart Period" mappings=[0="Day", 1="Week", 2="Month", 3="Year"]
                                                Chart item=Tstat10_Chart period=D refresh=10000 visibility=[Basement_Chart_Period==0, Basement_Chart_Period=="Uninitialized"]
                                                Chart item=Tstat10_Chart period=W refresh=10000 visibility=[Basement_Chart_Period==1]
                                                Chart item=Tstat10_Chart period=M refresh=10000 visibility=[Basement_Chart_Period==2]
                                                Chart item=Tstat10_Chart period=Y refresh=10000 visibility=[Basement_Chart_Period==3]
                                        }
                                }
                                Text            item=Basement_Tstat_Humidity
                                Setpoint        item=Basement_Tstat_SetPoint minValue=40 maxValue=80 step=1
                                Switch          item=Basement_Tstat_OpMode mappings=[HeatOn="Heat", CoolOn="Cool", AutoChangeOver="Auto", Off="Off"]
                                Text            item=Basement_Tstat_ModeState
                        }

In UI5, thermostats had urn:upnp-org:serviceId:TemperatureSetpoint1_Heat and urn:upnp-org:serviceId:TemperatureSetpoint1_Cool. In UI7, thermostats have a single setpoint, urn:upnp-org:serviceId:TemperatureSetpoint1. MiOS still has not documented how thermostat plugins that worked properly in UI5 can also work correctly in UI7, so my Nest and Ecobee plugins under UI7 work but with setpoint issues.

Long story, but try the urn:upnp-org:serviceId:TemperatureSetpoint1_Cool service ID instead and see if the plugin for the CT100 reacts properly.

So that sorta works. If I press up arrow it will set without error that temp, but the number is not incremented for some reason. Also, any changes on the physical thermostat do not update openhab. However if I use:

mios="unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/CurrentSetpoint"

Then changes on the stat work, I can change from curl with:

curl "http://10.71.129.3:3480/data_request?id=lu_action&output_format=json&serviceId=urn:upnp-org:serviceId:TemperatureSetpoint1&DeviceNum=22&action=SetCurrentSetpoint&NewCurrentSetpoint=66"

Just not sure how to get the mios binding to do that.

Got it to work, what I did was add:

service/urn\:upnp-org\:serviceId\:TemperatureSetpoint1/CurrentSetpoint=command:MAP(miosTStatSetpointCommand.map)

To org/openhab/binding/mios/internal/config/DeviceDefaults.properties and make miosTStatSetpointCommand.map:

_defaultCommand=urn:upnp-org:serviceId:TemperatureSetpoint1/SetCurrentSetpoint(NewCurrentSetpoint=??)

Below is the log of it working! Any way to get my changes info the binding?

2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:252]- internalReceiveCommand: itemName 'Basement_Tstat_SetPoint', command '70'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:185]- callDevice: Need to remote-invoke Device 'unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/CurrentSetpoint' action '70' and current state '70')
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:210]- callDevice: decoded as serviceName 'urn:upnp-org:serviceId:TemperatureSetpoint1' serviceAction 'SetCurrentSetpoint' serviceParam 'NewCurrentSetpoint' serviceValue '??'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:258]- callMios: Would like to fire off the URL 'http://10.71.129.3:3480/data_request?id=action&DeviceNum=22&serviceId=urn%3Aupnp-org%3AserviceId%3ATemperatureSetpoint1&action=SetCurrentSetpoint&NewCurrentSetpoint=70'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:699]- processResponse: success! loadTime=1440434768, dataVersion=434773076 devices(1) scenes(0) rooms(0) sections(0)
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainSetpointTarget {mios="unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/SetpointTarget"}' to '70'
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainId {mios="unit:house,device:22/id"}' to '22'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:765]- run: URI Built was 'http://10.71.129.3:3480/data_request?id=status2&LoadTime=1440434768&DataVersion=434773076&Timeout=40&MinimumDelay=0' loop '132'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:699]- processResponse: success! loadTime=1440434768, dataVersion=434773080 devices(1) scenes(0) rooms(0) sections(0)
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainDeviceStatus {mios="unit:house,device:22/status"}' to 'PENDING'
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainAllSetpoints {mios="unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/AllSetpoints"}' to '70,68,70'
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainId {mios="unit:house,device:22/id"}' to '22'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:765]- run: URI Built was 'http://10.71.129.3:3480/data_request?id=status2&LoadTime=1440434768&DataVersion=434773080&Timeout=40&MinimumDelay=0' loop '133'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:699]- processResponse: success! loadTime=1440434768, dataVersion=434773082 devices(1) scenes(0) rooms(0) sections(0)
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:765]- run: URI Built was 'http://10.71.129.3:3480/data_request?id=status2&LoadTime=1440434768&DataVersion=434773082&Timeout=40&MinimumDelay=0' loop '134'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:699]- processResponse: success! loadTime=1440434768, dataVersion=434773084 devices(1) scenes(0) rooms(0) sections(0)
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainCurrentSetpoint {mios="unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/CurrentSetpoint"}' to '70'
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'Basement_Tstat_SetPoint {mios="unit:house,device:22/service/urn:upnp-org:serviceId:TemperatureSetpoint1/CurrentSetpoint"}' to '70'
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainId {mios="unit:house,device:22/id"}' to '22'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:765]- run: URI Built was 'http://10.71.129.3:3480/data_request?id=status2&LoadTime=1440434768&DataVersion=434773084&Timeout=40&MinimumDelay=0' loop '135'
2015-08-24 16:43:01 DEBUG o.o.b.m.i.MiosUnitConnector[:699]- processResponse: success! loadTime=1440434768, dataVersion=434773085 devices(1) scenes(0) rooms(0) sections(0)
2015-08-24 16:43:01 DEBUG o.o.b.m.internal.MiosBinding[:471]- internalPropertyUpdate: BOUND (Incr) Updating 'BasementMainDeviceStatus {mios="unit:house,device:22/status"}' to 'SUCCESS'

Any idea how to change the setpoint by 1/2 a degree? I tried

Setpoint item=Basement_Tstat_SetPoint minValue=40 maxValue=80 step=".5"

But it still changes by a full degree.

Needs a leading 0:

Setpoint item=Basement_Tstat_SetPoint minValue=40 maxValue=80 step=0.5

Yup. If you file a gitHub issue against me I’ll add some new defaults to deal with the way MiOS UI-Se7en handles T-Stats :wink: