[SOLVED] Honeywell Zwave Thermostat in OpenHab2

  • Platform information:
    • Hardware: _CPUArchitecture/RAM/storage_Intel i3/8GB/256GBnvme (HP trashcan machine)
    • OS: _what OS is used and which version_WinX latest
    • Java Runtime Environment: _which java platform is used and what version_jre8 (Oracle, latest)
    • openHAB version: 2
  • Issue of the topic: please be detailed explaining your issue: I apologize in advance if this is a stupid question (or covered by a post I haven’t found). I recently found openHAB and was drawn in by the possibility of Google Home support. I am a longtime Vera user, but was interested enough that I am moving everything from the Vera to give it a shot. I have a Honeywell Z-Wave thermostat and am trying to get it configured with openHAB. I have it set now with a generic config which is definitely lacking some of the things it needs to work properly. I found an xml file which appears to have everything I need but the format is different from what my system has. I am thinking maybe this has to do with the move from OH1 to OH2? If there’s a way to merge the specific info to the generic config file that’s be ideal.
    I am using the Aeotec Z-stick gen5 as a z wave gateway.
    I am doing most of the things in Paper UI.
  • Please post configurations (if applicable):
    This is what OH2 came up with:


    ROUTING_SLAVE
    THERMOSTAT
    THERMOSTAT_GENERAL_V2

    0xdc3e1495
    25
    4
    0039
    0x1
    0x11
    true
    false
    true
    false
    true
    40000

    ASSOCIATION
    THERMOSTAT_SETPOINT
    THERMOSTAT_MODE
    BASIC
    THERMOSTAT_FAN_STATE
    THERMOSTAT_OPERATING_STATE
    THERMOSTAT_FAN_MODE
    SWITCH_ALL
    SENSOR_MULTILEVEL
    MANUFACTURER_SPECIFIC
    VERSION



    THERMOSTAT_SETPOINT

    1
    1
    2


    DRY_AIR

    DRY_AIR
    true
    0




    FURNACE

    FURNACE
    true
    0




    COOLING

    COOLING
    true
    0




    HEATING

    HEATING
    true
    0




    true



    THERMOSTAT_MODE

    1
    1
    2

    COOL
    OFF
    HEAT_ECON
    COOL_ECON
    HEAT
    AUX_HEAT
    RESUME

    true



    SENSOR_MULTILEVEL

    3
    1
    3


    TEMPERATURE

    TEMPERATURE
    true



    true



    NO_OPERATION

    1
    1
    1



    THERMOSTAT_FAN_MODE

    1
    1
    3

    ON_LOW
    AUTO_LOW
    CIRCULATE

    true



    THERMOSTAT_OPERATING_STATE

    1
    1
    1
    true



    MANUFACTURER_SPECIFIC

    1
    1
    1
    false
    57
    17
    1



    BASIC

    1
    1
    1
    true



    SWITCH_ALL

    1
    1
    1
    true
    SWITCH_ALL_EXCLUDED



    VERSION

    1
    1
    1
    LIB_SLAVE
    3.42
    2.0



    THERMOSTAT_FAN_STATE

    1
    1
    1

    RUNNING

    true



    ASSOCIATION

    2
    1
    2
    1






    1

    1


    1
    0






    1
    3
    4
    6
    9
    10
    11
    12
    13
    15
    16
    17
    18
    19
    20
    21
    22
    23

    2018-07-18 03:37:34.732 UTC
    2018-07-18 03:37:34.786 UTC
    • Items configuration related to the issue
      The config file I found for my particular thermostat but that’s formatted a bit differently:
<?xml version="1.0" encoding="UTF-8"?>

<thing:thing-descriptions bindingId=“zwave”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
xmlns:thing=“http://eclipse.org/smarthome/schemas/thing-description/v1.0.0
xsi:schemaLocation=“http://eclipse.org/smarthome/schemas/thing-description/v1.0.0
http://eclipse.org/smarthome/schemas/thing-description/v1.0.0”>

TH8320ZW VisionPRO Z-Wave Touchscreen Programmable Thermostat VisionPRO Z-Wave Touchscreen Programmable Thermostat
<!-- CHANNEL DEFINITIONS -->
<channels>
  <channel id="sensor_temperature" typeId="sensor_temperature">
    <label>Sensor (temperature)</label>
    <properties>
      <property name="binding:*:DecimalType">SENSOR_MULTILEVEL;type=TEMPERATURE</property>
    </properties>
  </channel>
  <channel id="thermostat_mode" typeId="honeywell_th8320zw_00_000_thermostat_mode">
    <label>Thermostat mode</label>
    <properties>
      <property name="binding:*:DecimalType">THERMOSTAT_MODE</property>
    </properties>
  </channel>
  <channel id="thermostat_state" typeId="thermostat_state">
    <label>Thermostat Operating State</label>
    <properties>
      <property name="binding:*:DecimalType">THERMOSTAT_OPERATING_STATE</property>
    </properties>
  </channel>
  <channel id="thermostat_setpoint_heating" typeId="thermostat_setpoint">
    <label>Setpoint (heating)</label>
    <properties>
      <property name="binding:*:DecimalType">THERMOSTAT_SETPOINT;type=HEATING</property>
    </properties>
  </channel>
  <channel id="thermostat_setpoint_cooling" typeId="thermostat_setpoint">
    <label>Setpoint (cooling)</label>
    <properties>
      <property name="binding:*:DecimalType">THERMOSTAT_SETPOINT;type=COOLING</property>
    </properties>
  </channel>
  <channel id="thermostat_fanmode" typeId="honeywell_th8320zw_00_000_thermostat_fanmode">
    <label>Thermostat fan mode</label>
    <properties>
      <property name="binding:*:DecimalType">THERMOSTAT_FAN_MODE</property>
    </properties>
  </channel>
  <channel id="thermostat_fanstate" typeId="honeywell_th8320zw_00_000_thermostat_fanstate">
    <label>Thermostat fan state</label>
    <properties>
      <property name="binding:*:DecimalType">THERMOSTAT_FAN_STATE</property>
    </properties>
  </channel>
</channels>

<!-- DEVICE PROPERTY DEFINITIONS -->
<properties>
  <property name="vendor">Honeywell</property>
  <property name="modelId">TH8320ZW</property>
  <property name="manufacturerId">0039</property>
  <property name="manufacturerRef">0011:0001,0011:0003</property>
  <property name="dbReference">182</property>
  <property name="defaultAssociations">1</property>
</properties>

<!-- CONFIGURATION DESCRIPTIONS -->
<config-description>

  <!-- ASSOCIATION DEFINITIONS -->
  <parameter-group name="association">
    <context>link</context>
    <label>Association Groups</label>
  </parameter-group>

  <parameter name="group_1" type="text" groupName="association" multiple="true">
    <label>1: Relationship of devices in the network</label>
    <multipleLimit>5</multipleLimit>
  </parameter>

</config-description>
Number Thermostat Mode Sets the thermostat mode Temperature Auto Off Economy Heat Cool Economy Cool Heat Resume Number Thermostat Fan Mode Sets the thermostat fan mode Temperature Auto (Low) On (Low) Circulate Number Thermostat Fan State Sets the thermostat fan state Temperature Idle

</thing:thing-descriptions>

  • Sitemap configuration related to the issue
  • Rules code related to the issue
  • Services configuration related to the issue
  • If logs where generated please post these here using code fences:

The device is in the openHAB zwave database, so all you need to do is include it to your zwave controller, add the Thing from your inbox, link available channels to your items and start using it.

https://www.cd-jackson.com/index.php/zwave/zwave-device-database/zwave-device-list/devicesummary/182

Makes sense. Maybe I am missing something else. I can see a reported temperature. I can set a temperature, although it errors out when I send it. What I thought I could accomplish with this other config data was to take things that it reports now, eg fan status, and make them into text instead of numbers. Right now it might say something like: Fan off: 0 Fan on:1 Fan auto 2. What I’d like it to do is display “on” “off” or “auto”

Do I need to go and download the thing from that zwave database?

Please tell us more about that error message, you should enable debug logging for the zwave binding.

Take a look at map transformation for individual labels:

Nope. You already got your “Thing” :grinning:

Transformation Services looks great!

I’ll see about turning on the debug logging.

Thanks

Transformation is what I’d like to do but I can’t seem to find where to put the transformation. The examples I’ve found are done in rules- I’m just trying to display the status of the thing. Right now I have all the states coming in as numbers. if I change them to strings then they display nothing at all. It seems like it should be something really simple but the lightbulb isn’t on just yet.

The map files go to your /transform folder.
If you need to manipulate the state, put your map call in your channel definition, if you need to manipulate the display name, put the map call in your label definition and change the format to string. Example:

Contact Garage_CL "Garage [MAP(garage.map):%s]" <contact> (gRestore) { channel ...

garage.map:

1=is closed
2=is open
3=is moving

But first make sure your thermostat setpoint item (if you are using this) is working, because with transformations things can get tricky. There should be no need to use transforming to make your thermostat working …

Seems like I a have a java problem with that setpoint. I had reinitialized the unit and after that attempted to make a change from 75 to 70 (degrees F in cooling) and captured the zwave log:

12:36:42.909 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 17: Updating channel state zwave:device:3e121ab5:node17:switch_binary to ON [OnOffType]
12:36:42.909 [DEBUG] [l.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Sent Message: class=SendData[0x13], type=Request[0x00], priority=Get, dest=17, callback=21, payload=11 02 25 02
12:36:42.914 [DEBUG] [l.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Recv Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 11 03 25 03 FF
12:36:42.914 [DEBUG] [l.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: class=ApplicationCommandHandler, callback id=21, expected=ApplicationCommandHandler, cancelled=false        transaction complete!
12:36:42.915 [DEBUG] [ave.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveTransactionCompletedEvent
12:36:42.915 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 17: Got an event from Z-Wave network: ZWaveTransactionCompletedEvent
12:36:42.916 [DEBUG] [tocol.ZWaveController$ZWaveSendThread] - NODE 17: Response processed after 69ms/4990ms.
12:37:10.784 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'ZWaveNode25TH8320ZWVisionPROZWaveTouchscreenProgrammableThermostat_SetpointCooling' received command 70 ?
12:37:10.787 [INFO ] [enhab.binding.upb.internal.UPBBinding] - UPB binding starting up...
12:37:10.785 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 25: Command received zwave:device:3e121ab5:node25:thermostat_setpoint_cooling --> 70 ?
12:37:10.793 [INFO ] [smarthome.event.ItemStateChangedEvent] - ZWaveNode25TH8320ZWVisionPROZWaveTouchscreenProgrammableThermostat_SetpointCooling changed from 75.0 ? to 70 ?
12:37:10.798 [ERROR] [nding.zwave.handler.ZWaveThingHandler] - NODE 25: Command received with no implementation (QuantityType).
12:37:10.893 [ERROR] [org.openhab.binding.upb              ] - [org.openhab.binding.upb.binding(211)] The activate method has thrown an exception
java.lang.RuntimeException: Failed to open serial port.
        at org.openhab.binding.upb.internal.UPBBinding.activate(UPBBinding.java:81) [483:org.openhab.binding.upb:1.12.0]
        at sun.reflect.GeneratedMethodAccessor68.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.apache.felix.scr.impl.inject.BaseMethod.invokeMethod(BaseMethod.java:229) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.BaseMethod.access$500(BaseMethod.java:39) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.BaseMethod$Resolved.invoke(BaseMethod.java:650) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.BaseMethod.invoke(BaseMethod.java:506) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:307) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:299) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:298) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:109) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:906) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:879) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823) [39:org.apache.felix.scr:2.0.12]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) [?:?]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) [?:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624) [?:?]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.obtain(EventHandlerProxy.java:286) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:407) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.lang.RuntimeException: Port does not exist
        at org.openhab.binding.upb.internal.UPBBinding.openSerialPort(UPBBinding.java:234) ~[?:?]
        at org.openhab.binding.upb.internal.UPBBinding.activate(UPBBinding.java:77) ~[?:?]
        ... 32 more
Caused by: gnu.io.NoSuchPortException
        at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:273) ~[?:?]
        at org.openhab.binding.upb.internal.UPBBinding.openSerialPort(UPBBinding.java:232) ~[?:?]
        at org.openhab.binding.upb.internal.UPBBinding.activate(UPBBinding.java:77) ~[?:?]
        ... 32 more
12:37:10.904 [WARN ] [org.openhab.binding.upb              ] - FrameworkEvent WARNING - org.openhab.binding.upb
org.osgi.framework.ServiceException: org.apache.felix.scr.impl.manager.SingleComponentManager.getService() returned a null service object
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:232) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) [?:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624) [?:?]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.obtain(EventHandlerProxy.java:286) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:407) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
12:37:57.725 [DEBUG] [ZWaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 0C 00 04 00 19 06 31 05 01 2A 02 EE 1B
12:37:57.729 [DEBUG] [ave.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
12:37:57.731 [DEBUG] [zwave.internal.protocol.SerialMessage] - Assembled message buffer = 01 0C 00 04 00 19 06 31 05 01 2A 02 EE 1B
12:37:57.731 [DEBUG] [ave.internal.protocol.ZWaveController] - Process Message = 01 0C 00 04 00 19 06 31 05 01 2A 02 EE 1B
12:37:57.732 [DEBUG] [ave.internal.protocol.ZWaveController] - Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 19 06 31 05 01 2A 02 EE
12:37:57.732 [DEBUG] [essage.ApplicationCommandMessageClass] - NODE 25: Application Command Request (ALIVE:DONE)
12:37:57.733 [DEBUG] [ialization.ZWaveNodeInitStageAdvancer] - NODE 25: Starting initialisation from DONE
12:37:57.733 [DEBUG] [essage.ApplicationCommandMessageClass] - NODE 25: Incoming command class SENSOR_MULTILEVEL
12:37:57.734 [DEBUG] [ass.ZWaveMultiLevelSensorCommandClass] - NODE 25: Received COMMAND_CLASS_SENSOR_MULTILEVEL command V3
12:37:57.734 [DEBUG] [ass.ZWaveMultiLevelSensorCommandClass] - NODE 25: Sensor Multi Level REPORT received
12:37:57.735 [DEBUG] [ass.ZWaveMultiLevelSensorCommandClass] - NODE 25: Sensor Type = Temperature(1), Scale = 1
12:37:57.735 [DEBUG] [ass.ZWaveMultiLevelSensorCommandClass] - NODE 25: Sensor Value = 75
12:37:57.736 [DEBUG] [ave.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveMultiLevelSensorValueEvent
12:37:57.736 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 25: Got an event from Z-Wave network: ZWaveMultiLevelSensorValueEvent
12:37:57.737 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 25: Got a value event from Z-Wave network, endpoint = 0, command class = SENSOR_MULTILEVEL, value = 75
12:37:57.737 [DEBUG] [verter.ZWaveMultiLevelSensorConverter] - NODE 25: Sensor is reporting scale 1, requiring conversion to 1. Value is now 75.
12:37:57.737 [DEBUG] [.converter.ZWaveCommandClassConverter] - Converted temperature from 75F to 75F
12:37:57.740 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 25: Updating channel state zwave:device:3e121ab5:node25:sensor_temperature to 75 [DecimalType]
12:37:57.747 [DEBUG] [essage.ApplicationCommandMessageClass] - NODE 17: Transaction not completed: node address inconsistent.  lastSent=17, incoming=255
12:37:57.747 [INFO ] [smarthome.event.ItemStateChangedEvent] - ZWaveNode25TH8320ZWVisionPROZWaveTouchscreenProgrammableThermostat_SensorTemperature changed from 73.0 ? to 75.0 ?
12:38:50.053 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 24: Polling...
12:38:50.059 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 24: Polling deferred until initialisation complete
12:38:50.064 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 14: Polling...
12:38:50.064 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 14: Polling deferred until initialisation complete
12:38:50.085 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 7: Polling...
12:38:50.086 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 7: Polling deferred until initialisation complete

But wait, there’s more!

19:46:35.503 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'ZWaveNode25TH8320ZWVisionPROZWaveTouchscreenProgrammableThermostat_SetpointCooling' received command 70 ?
19:46:35.505 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 25: Command received zwave:device:3e121ab5:node25:thermostat_setpoint_cooling --> 70 ?
19:46:35.504 [INFO ] [enhab.binding.upb.internal.UPBBinding] - UPB binding starting up...
19:46:35.509 [INFO ] [smarthome.event.ItemStateChangedEvent] - ZWaveNode25TH8320ZWVisionPROZWaveTouchscreenProgrammableThermostat_SetpointCooling changed from 76.0 ? to 70 ?
19:46:35.508 [ERROR] [nding.zwave.handler.ZWaveThingHandler] - NODE 25: Command received with no implementation (QuantityType).
19:46:35.597 [ERROR] [org.openhab.binding.upb              ] - [org.openhab.binding.upb.binding(211)] The activate method has thrown an exception
java.lang.RuntimeException: Failed to open serial port.
        at org.openhab.binding.upb.internal.UPBBinding.activate(UPBBinding.java:81) [483:org.openhab.binding.upb:1.12.0]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.apache.felix.scr.impl.inject.BaseMethod.invokeMethod(BaseMethod.java:229) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.BaseMethod.access$500(BaseMethod.java:39) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.BaseMethod$Resolved.invoke(BaseMethod.java:650) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.BaseMethod.invoke(BaseMethod.java:506) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:307) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.inject.ActivateMethod.invoke(ActivateMethod.java:299) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:298) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:109) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:906) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:879) [39:org.apache.felix.scr:2.0.12]
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823) [39:org.apache.felix.scr:2.0.12]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) [?:?]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) [?:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624) [?:?]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.obtain(EventHandlerProxy.java:286) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:407) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.lang.RuntimeException: Port does not exist
        at org.openhab.binding.upb.internal.UPBBinding.openSerialPort(UPBBinding.java:234) ~[?:?]
        at org.openhab.binding.upb.internal.UPBBinding.activate(UPBBinding.java:77) ~[?:?]
        ... 33 more
Caused by: gnu.io.NoSuchPortException
        at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:273) ~[?:?]
        at org.openhab.binding.upb.internal.UPBBinding.openSerialPort(UPBBinding.java:232) ~[?:?]
        at org.openhab.binding.upb.internal.UPBBinding.activate(UPBBinding.java:77) ~[?:?]
        ... 33 more
19:46:35.612 [WARN ] [org.openhab.binding.upb              ] - FrameworkEvent WARNING - org.openhab.binding.upb
org.osgi.framework.ServiceException: org.apache.felix.scr.impl.manager.SingleComponentManager.getService() returned a null service object
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:232) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508) [?:?]
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) [?:?]
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624) [?:?]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.obtain(EventHandlerProxy.java:286) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.handler.EventHandlerProxy.sendEvent(EventHandlerProxy.java:407) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.HandlerTask.runWithoutBlacklistTiming(HandlerTask.java:82) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.SyncDeliverTasks.execute(SyncDeliverTasks.java:104) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks$TaskExecuter.run(AsyncDeliverTasks.java:166) [3:org.apache.karaf.services.eventadmin:4.1.5]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]

I’m reading that UPB is possibly not supported in Windows. Seems like the thermostat shouldn’t need it though because it’s zwave.

Now that is all said and done and I have moved the zwave dongle from a USB3 port to a USB 2 port and learned something about the HABpanel, I think I’m in business.

Do you have this thermostat working properly now? What did you do? I’m having a problem setting the setpoints. Honeywell TH8320ZW thermostat setpoint not working

@chris this seems to be the same issue I am having over at eurotronic-spirit-z-wave-errors Ill move my conversation here since this is dedicated to the thermostat and it seems others are having the same issue.

All it seems to me everything is working except for the setpoints on my setup.

Here is my sitemap with mapping if you want to take it and tweak… Note that two of the items here are read only but I thought it looked nicer as a Selection (Fan State, and Operating State)

Text item=HoneywellThermostat_SensorTemperature label="Home Temperature [%.1f °F]" icon="temperature" {
			Frame label="Honeywell Thermostat"{
				Text item=HoneywellThermostat_SensorTemperature label="Thermostat Temperature"
				Selection item=HoneywellThermostat_ThermostatOperatingState mappings=[0="Idle",1="Heating",2="Cooling",3="Fan Only",4="Pending Heat",5="Pending Cool",6="Vent Economizer"]
				Setpoint item=HoneywellThermostat_SetpointCooling icon="heating" minValue=50 maxValue=90 step=1
				Setpoint item=HoneywellThermostat_SetpointHeating icon="heating" minValue=40 maxValue=80 step=1
				Switch item=HoneywellThermostat_ThermostatMode label="Thermostat Mode" mappings=[0="Off",1="Heat",2="Cool",3="Auto"]
				Switch item=HoneywellThermostat_ThermostatFanMode label="Thermostat Fan Mode" mappings=[0="Auto",1="On",6="Circulate"]
				Selection item=HoneywellThermostat_ThermostatFanState mappings=[0="Idle",1="Running",2="Running High"]
				Switch item=AC_Cool_It label="Cool It"
			}


		}

FYI I am not using any sitemaps at this point. I’m only using HabPanel or the control section of Paper UI. But based on the above, it seems the problem happens regardless.

Also FYI, the thermostat-to-openhab setpoint updates work properly. When the thermostat reports its setpoint to openhab, it is properly received and displayed in the UI. It’s the openhab-to-thermostat change of setpoints that is making it angy. For example, you try to send it a setpoint of 70, which presumably is sent as 70.0. The thermostat changes to 99, and reports that 99 back to OpenHab, which correctly displays the newly reported setpoint of 99.

Ok so a big part of my problem was I am new to this system. I will explain a little bit here in case it will help someone else.

  1. I had manually bound the zwave things and was using PaperUI as my control method.
    Now I understand that PaperUI is better used for administration and troubleshooting.

  2. I had no .items file and no .sitemap file.
    These really are critical to getting anything done.

Thermostat specific:
In my .sitemap file I had no troubles mapping the Mode and Fan Mode, as they are selection items and support it. The Operate States on the other hand do not support mapping like the selection items. I had to use transformation for those.

Here’s my Thermostat in the sitemap: It’s now working.

Text label="Thermostat" icon="temperature" {
        Default item=LivingRoom_Temperature label="LivingRoom [%.1f °F]" icon="temperature"
        Selection item=Thermostat_Mode label="Mode" mappings=[0="Off", 1="Heat", 2="Cool", 3="Auto", 5="Resume"]
        Default item=Thermostat_Operating_State label="Operate State [MAP(thermostat_state.map):%s]"
        Selection item=Thermostat_Fan_Mode label="Fan Mode" mappings=[0="Auto", 1="On", 6="Circulate"]
        Default item=Thermostat_Fan_State label="Fan State [MAP(FanMode.map):%s]"
	    Setpoint item=Cooling_Setpoint label="Cooling"
	    Setpoint item=Heating_Setpoint label="Heating"

And also the .items:


Number    Cooling_Setpoint            "Air Conditioner"   <snow>             (LivingRoom, Thermostat)     ["Switchable"]      {channel="zwave:device:3e121ab5:node26:thermostat_setpoint_cooling"}
Number    Heating_Setpoint            "Heating"           <heating>          (LivingRoom, Thermostat)                         {channel="zwave:device:3e121ab5:node26:thermostat_setpoint_heating"}
Number    LivingRoom_Temperature      "Temperature"       <temperature>      (LivingRoom, Temperature, Thermostat)            {channel="zwave:device:3e121ab5:node26:sensor_temperature"}
Number    Thermostat_Mode             "Temperature"       <temperature>      (LivingRoom, Thermostat)                         {channel="zwave:device:3e121ab5:node26:thermostat_mode"}
Number    Thermostat_Operating_State  "Temperature"       <temperature>      (LivingRoom, Thermostat)                         {channel="zwave:device:3e121ab5:node26:thermostat_state"}
Number    Thermostat_Fan_Mode         "Temperature"       <fan_ceiling>      (LivingRoom, Thermostat)                         {channel="zwave:device:3e121ab5:node26:thermostat_fanmode"}
Number    Thermostat_Fan_State        "Temperature"       <fan_ceiling>      (LivingRoom, Thermostat)                         {channel="zwave:device:3e121ab5:node26:thermostat_fanstate"}

Have you tried it without min/max and increment part?

The min/max is only a function in the OpenHab UI. Changing the setpoint manually in Paper UI has no min/max/increment. Neither work.

Your setpoints are working properly now the way you have it?

Yes mine are working

OK. I think later this evening I will try a sitemap similar to yours and see that makes it happy. May also delete and exclude and start over too.

Problem solved. When I looked at the channel properties in HabMin, it had a selection for Fahrenheit vs celsius. It was set to celcius by default. So telling it to go to 70 degrees was being interpreted as 70C which it just can’t do. Once i changed it to F, it stated working fine.