Textual Z-Wave Configs in openHAB2

I have seen a bunch of activity on the list about text configs for z-Wave in openHAB2. Has there been progress on this? Does it work today?

Yes, there has been progress on this, if you use the dev binding from @chris, then you can use text configs. The only problem I ran into is you can’t configure channel settings like if you want F or C units on your thermostats @kai is aware and I am hopeful that I will be able to move to openHAB 2 soon using text config files.

Special thanks to @chris and @kai for all the hard work they put into this project.

2 Likes

Don’t you configure the scale that is used in the .items file?

That is how it was done in openHAB1, but in openHAB2 your thermostat definitions look like this:

Group     Tstat10                                                                                                     (Thermostats)                           ["Thermostat"]
Group     Tstat10_Chart                                                                                               (Tstat10)
Number    Basement_Tstat_HeatSetPoint         "Basement Heat Setpoint [%.1f °F]"                      <temperature>   (Tstat10)                               ["TargetTemperature"]     {channel="zwave:rtc_ct100_00_000:controller:node4:thermostat_setpoint_heating"}
Number    Basement_Tstat_CoolSetPoint         "Basement Cool Setpoint [%.1f °F]"                      <temperature>   (Tstat10)                               ["TargetTemperature"]     {channel="zwave:rtc_ct100_00_000:controller:node4:thermostat_setpoint_cooling"}
Number    Basement_Tstat_Temperature          "Basement Temperature [%.1f °F]"                        <temperature>   (Tstat10_Chart, Room_Temperature)       ["CurrentTemperature"]    {channel="zwave:rtc_ct100_00_000:controller:node4:sensor_temperature"}
Number    Basement_Tstat_Humidity             "Basement Humidity [%.1f %%]"                           <humidity>      (Tstat10_Chart, Humidity)               ["CurrentHumidity"]       {channel="zwave:rtc_ct100_00_000:controller:node4:sensor_relhumidity2"}
Number    Basement_Tstat_OpMode               "Basement Mode"                                         <settings>      (Tstat10)                                                         {channel="zwave:rtc_ct100_00_000:controller:node4:thermostat_mode"}
Number    Basement_Tstat_ModeState            "Basement State [MAP(ct100.map):%s]"                    <settings>      (Tstat10)                                                         {channel="zwave:rtc_ct100_00_000:controller:node4:thermostat_state"}
Number    Basement_Tstat_Battery              "Basement Thermostat Battery [%d %%]"                   <battery>       (Tstat10, Battery)                                                {channel="zwave:rtc_ct100_00_000:controller:node4:battery-level"}
DateTime  Basement_Tstat_Clock                                                                                        (Tstat10, Clock)                                                  {channel="zwave:rtc_ct100_00_000:controller:node4:time_offset"}

You no longer use setpoint_scale=1 in the .items, if you do it throws errors.

1 Like

What does your .things file look like?

Mine looks like:

Bridge zwave:serial_zstick:controller "ZWave Controller" [ port="/dev/ttyACM0", controller_softreset="false", controller_master="true", controller_inclusiontimeout=60, heal_enable="true", heal_time=20, security_networkkey="AF 2D 9E 35 21 A1 ED 2B 45 B1 F4 DA 39 A8 B5 F2" ]

Thing zwave:rtc_ct100_00_000:controller:node2 "Node 2: CT100 - Office" (zwave:serial_zstick:controller) [ node_id=2, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node3 "Node 3: CT100 - Electric Room" (zwave:serial_zstick:controller) [ node_id=3, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node4 "Node 4: CT100 - Basement" (zwave:serial_zstick:controller) [ node_id=4, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node2 "Node 5: CT100 - Basement Storage" (zwave:serial_zstick:controller) [ node_id=5, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node6 "Node 6: CT100 - Shop" (zwave:serial_zstick:controller) [ node_id=6, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node7 "Node 7: CT100 - Water Room" (zwave:serial_zstick:controller) [ node_id=7, refresh_interval=300, config_scale=1 ]
Thing zwave:enerwave_zw20r_00_000:controller:node11 "Node 11: ZW20R - House Outside Outlet A" (zwave:serial_zstick:controller) [ node_id=11, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node12 "Node 12: ZW20R - House Outside Outlet B" (zwave:serial_zstick:controller) [ node_id=12, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node13 "Node 13: ZW20R - House Outside Outlet C" (zwave:serial_zstick:controller) [ node_id=13, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node14 "Node 14: ZW20R - House Outside Outlet D" (zwave:serial_zstick:controller) [ node_id=14, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node15 "Node 15: ZW20R - House Outside Outlet E" (zwave:serial_zstick:controller) [ node_id=15, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node18 "Node 18: ZW20R - House Outside Outlet F" (zwave:serial_zstick:controller) [ node_id=18, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node19 "Node 19: ZW20R - House Outside Outlet G" (zwave:serial_zstick:controller) [ node_id=19, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node20 "Node 20: ZW20R - House Outside Outlet H" (zwave:serial_zstick:controller) [ node_id=20, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node22 "Node 22: ZW20R - House Outside Outlet I" (zwave:serial_zstick:controller) [ node_id=22, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node23 "Node 23: ZW20R - House Outside Outlet J" (zwave:serial_zstick:controller) [ node_id=23, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node32 "Node 32: ZW20R - House Outside Outlet K" (zwave:serial_zstick:controller) [ node_id=32, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node33 "Node 33: ZW20R - House Outside Outlet L" (zwave:serial_zstick:controller) [ node_id=33, refresh_interval=300 ]
Thing zwave:enerwave_zw20r_00_000:controller:node34 "Node 34: ZW20R - House Outside Outlet M" (zwave:serial_zstick:controller) [ node_id=34, refresh_interval=300 ]
Thing zwave:rtc_ct100_00_000:controller:node52 "Node 52: CT100 - First Floor" (zwave:serial_zstick:controller) [ node_id=52, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node53 "Node 53: CT100 - Living Room" (zwave:serial_zstick:controller) [ node_id=53, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node55 "Node 55: CT100 - Guest Bedroom" (zwave:serial_zstick:controller) [ node_id=55, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node56 "Node 56: CT100 - Master Bedroom" (zwave:serial_zstick:controller) [ node_id=56, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node57 "Node 57: CT100 - Second Floor" (zwave:serial_zstick:controller) [ node_id=57, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node58 "Node 58: CT100 - Great Room" (zwave:serial_zstick:controller) [ node_id=58, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node59 "Node 59: CT100 - Emma's Bedroom" (zwave:serial_zstick:controller) [ node_id=59, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node60 "Node 60: CT100 - Joshua's Bedroom" (zwave:serial_zstick:controller) [ node_id=60, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node62 "Node 62: CT100 - Apartment" (zwave:serial_zstick:controller) [ node_id=62, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node63 "Node 63: CT100 - Mom's Bedroom" (zwave:serial_zstick:controller) [ node_id=63, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node64 "Node 64: CT100 - Dad's Bedroom" (zwave:serial_zstick:controller) [ node_id=64, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node65 "Node 65: CT100 - Kitchen" (zwave:serial_zstick:controller) [ node_id=65, refresh_interval=300, config_scale=1 ]
Thing zwave:enerwave_zw20r_00_000:controller:node71 "Node 71: ZW20R - House Outside Outlet N" (zwave:serial_zstick:controller) [ node_id=71, refresh_interval=300 ]
Thing zwave:rtc_ct100_00_000:controller:node76 "Node 76: CT100 - Breezeway" (zwave:serial_zstick:controller) [ node_id=76, refresh_interval=300, config_scale=1 ]
Thing zwave:rtc_ct100_00_000:controller:node79 "Node 79: CT100 - Garage" (zwave:serial_zstick:controller) [ node_id=79, refresh_interval=300, config_scale=1 ]
Thing zwave:homeseer_hswd100_00_000:controller:node82 "Node 82: HSWD100 - Outside Garage Lights" (zwave:serial_zstick:controller) [ node_id=82, refresh_interval=300 ]
Thing zwave:homeseer_hswd100_00_000:controller:node83 "Node 83: HSWD100 - Outside Family Entry Light" (zwave:serial_zstick:controller) [ node_id=83, refresh_interval=300 ]
Thing zwave:homeseer_hswd100_00_000:controller:node85 "Node 85: HSWD100 - Outside Family Entry Recessed Lights" (zwave:serial_zstick:controller) [ node_id=85, refresh_interval=300 ]
Thing zwave:ge_zw4002_00_000:controller:node86 "Node 86: ZW4002 - Great Room Fan" (zwave:serial_zstick:controller) [ node_id=86, refresh_interval=300 ]
Thing zwave:ge_zw4002_00_000:controller:node87 "Node 87: ZW4002 - Back Deck Fans - Slave" (zwave:serial_zstick:controller) [ node_id=87, refresh_interval=300 ]
Thing zwave:ge_zw4002_00_000:controller:node88 "Node 88: ZW4002 - Back Deck Fans - Master" (zwave:serial_zstick:controller) [ node_id=88, refresh_interval=300 ]
Thing zwave:ge_zw4002_00_000:controller:node89 "Node 89: ZW4002 - Master Bedroom Fan" (zwave:serial_zstick:controller) [ node_id=89, refresh_interval=300 ]
Thing zwave:ge_zw4002_00_000:controller:node90 "Node 90: ZW4002 - Apartment Fan" (zwave:serial_zstick:controller) [ node_id=90, refresh_interval=300 ]
Thing zwave:homeseer_hswd100_00_000:controller:node91 "Node 91: HSWD100 - Outside Front Door Lights" (zwave:serial_zstick:controller) [ node_id=91, refresh_interval=300 ]
Thing zwave:homeseer_hswd100_00_000:controller:node92 "Node 92: HSWD100 - Outside Front Deck Lights" (zwave:serial_zstick:controller) [ node_id=92, refresh_interval=300 ]
Thing zwave:homeseer_hswd100_00_000:controller:node93 "Node 93: HSWD100 - Outside Back Deck Lights Slave" (zwave:serial_zstick:controller) [ node_id=93, refresh_interval=300 ]
Thing zwave:homeseer_hswd100_00_000:controller:node94 "Node 94: HSWD100 - Outside Back Deck Lights Master" (zwave:serial_zstick:controller) [ node_id=94, refresh_interval=300 ]
Thing zwave:homeseer_hswd100_00_000:controller:node95 "Node 95: HSWD100 - Outside Basement Light" (zwave:serial_zstick:controller) [ node_id=95, refresh_interval=300 ]

I am not sure on the refresh_interval, I see some examples saying its in seconds like with openHAB1 and others saying it is now in milliseconds. @chris can you clarify?

It’s in seconds.

I guess you missed this post -:

YES! Thanks, I also have 2 ct100 stats like @sipvoip, I am in the US so we like to stick to odd units like Fahrenheit, any idea when we will be able to make that work?

I’m not sure - the ability to configure channels via text files is a feature of the framework. I’ve asked this exact question in a couple of places (here and the ESH forum) but as yet no answer…

https://www.eclipse.org/forums/index.php/t/1072971/

The ESH documentation gives an example of a channel with configuration. Isn’t this what you are asking for? If not, what else is needed?

Yep - that looks like the one - thanks Kai.

This is the json:

  "zwave:device:92684637:node2": {
    "class": "org.eclipse.smarthome.core.thing.internal.ThingImpl",
    "value": {
      "label": "Z-Wave Node 2: CT100 Z-Wave Thermostat",
      "bridgeUID": {
        "segments": [
          "zwave",
          "serial_zstick",
          "92684637"
        ]
      },
      "channels": [
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "sensor_temperature"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "sensor_temperature"
            ]
          },
          "label": "Sensor (temperature)",
          "configuration": {
            "properties": {
              "config_scale": "1"
            }
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_SENSOR_MULTILEVEL;type\u003dTEMPERATURE"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "thermostat_mode"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "rtc_ct100_00_000_thermostat_mode"
            ]
          },
          "label": "Thermostat mode",
          "configuration": {
            "properties": {}
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_THERMOSTAT_MODE"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "thermostat_state"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "thermostat_state"
            ]
          },
          "label": "Thermostat Operating State",
          "configuration": {
            "properties": {}
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_THERMOSTAT_OPERATING_STATE"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "thermostat_setpoint_heating"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "thermostat_setpoint"
            ]
          },
          "label": "Setpoint (heating)",
          "configuration": {
            "properties": {
              "config_scale": "1"
            }
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_THERMOSTAT_SETPOINT;type\u003dHEATING"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "thermostat_setpoint_cooling"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "thermostat_setpoint"
            ]
          },
          "label": "Setpoint (cooling)",
          "configuration": {
            "properties": {
              "config_scale": "1"
            }
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_THERMOSTAT_SETPOINT;type\u003dCOOLING"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "thermostat_fanmode"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "rtc_ct100_00_000_thermostat_fanmode"
            ]
          },
          "label": "Thermostat fan mode",
          "configuration": {
            "properties": {}
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_THERMOSTAT_FAN_MODE"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "thermostat_fanstate"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "rtc_ct100_00_000_thermostat_fanstate"
            ]
          },
          "label": "Thermostat fan state",
          "configuration": {
            "properties": {}
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_THERMOSTAT_FAN_STATE"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "battery-level"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "system",
              "battery-level"
            ]
          },
          "configuration": {
            "properties": {}
          },
          "properties": {
            "binding:*:PercentType": "COMMAND_CLASS_BATTERY"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "time_offset"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "time_offset"
            ]
          },
          "label": "Time Offset",
          "configuration": {
            "properties": {
              "config_offset": 60.0
            }
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_CLOCK"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "sensor_temperature1"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "sensor_temperature"
            ]
          },
          "label": "Sensor (temperature) 1",
          "configuration": {
            "properties": {
              "config_scale": "0"
            }
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_SENSOR_MULTILEVEL:1,COMMAND_CLASS_BASIC:1;type\u003dTEMPERATURE"
          },
          "defaultTags": []
        },
        {
          "acceptedItemType": "Number",
          "kind": "STATE",
          "uid": {
            "segments": [
              "zwave",
              "device",
              "92684637",
              "node2",
              "sensor_relhumidity2"
            ]
          },
          "channelTypeUID": {
            "segments": [
              "zwave",
              "sensor_relhumidity"
            ]
          },
          "label": "Relative Humidity",
          "configuration": {
            "properties": {}
          },
          "properties": {
            "binding:*:DecimalType": "COMMAND_CLASS_SENSOR_MULTILEVEL:2,COMMAND_CLASS_BASIC:2;type\u003dRELATIVE_HUMIDITY"
          },
          "defaultTags": []
        }
      ],
      "configuration": {
        "properties": {
          "group_1": [
            "node_1_0"
          ],
          "node_id": 2
        }
      },
      "properties": {
        "zwave_class_basic": "BASIC_TYPE_ROUTING_SLAVE",
        "zwave_class_generic": "GENERIC_TYPE_THERMOSTAT",
        "zwave_frequent": "false",
        "zwave_neighbours": "3,6,7,16,57,87,88,90,94",
        "zwave_version": "9.1",
        "zwave_listening": "true",
        "zwave_deviceid": "263",
        "zwave_nodeid": "2",
        "zwave_routing": "true",
        "zwave_beaming": "true",
        "zwave_secure": "false",
        "zwave_class_specific": "SPECIFIC_TYPE_THERMOSTAT_GENERAL_V2",
        "zwave_manufacturer": "152",
        "zwave_devicetype": "25601"
      },
      "uid": {
        "segments": [
          "zwave",
          "device",
          "92684637",
          "node2"
        ]
      },
      "thingTypeUID": {
        "segments": [
          "zwave",
          "rtc_ct100_00_000"
        ]
      }
    }
  }
}

Does this look right for the zwave.things?

Bridge zwave:serial_zstick:controller "ZWave Controller" [ port="/dev/ttyACM0", controller_softreset="false", controller_master="true", controller_inclusiontimeout=60, heal_enable="true", heal_time=20, security_networkkey="AF 2D 9E 35 21 A1 ED 2B 45 B1 F4 DA 39 A8 B5 F2" ]

Thing zwave:rtc_ct100_00_000:controller:node2 "Node 2: CT100 - Office" (zwave:serial_zstick:controller) [ node_id=2, refresh_interval=300, config_scale=1 ] {
  Channels:
    Type sensor_temperature : sensor_temperature [
      configParameter="config_scale=1"
    ]
    Type thermostat_setpoint | thermostat_setpoint_cooling [
      configParameter="config_scale=1"
    ]
    Type thermostat_setpoint | thermostat_setpoint_heating [
      configParameter="config_scale=1"
    ]
}

This is the correct config, tested and it works!!! Thanks @chris and @kai!

Thing zwave:rtc_ct100_00_000:controller:node2 "Node 2: CT100 - Office" (zwave:serial_zstick:controller) [ node_id=2, refresh_interval=300 ] {
  Channels:
    Type sensor_temperature : sensor_temperature [ config_scale=1 ]
    Type thermostat_setpoint : thermostat_setpoint_cooling [ config_scale=1 ]
    Type thermostat_setpoint : thermostat_setpoint_heating [ config_scale=1 ]
}
1 Like

Hello @sipvoip , I’m trying to setup my zwave devices totally by textual configuration.
(My system: Raspberry Pi 3 / openHABian / openHAB 2.4.0-1 (Release Build))

What don’t work is configuring the channels.
Two days ago, Chris wrote that it is not possible. (Or did I misunderstood something?)

But because of your post, I’ll try it anyway.

But I don’t know where to find the json files.

Can you tell me please where to look?

That’s correct - it is not possible to change parameters in the device if you are using textual configurations. It is actively blocked by ESH as the statement was made that the configuration system is only for configuring the software, and not for configuring devices. ESH expects other software to be used for this :frowning:

Thank you, but what about @sipvoip . Sounds like he made it!?

I’m a little bit confused.

This configuration is configuration of the handler - not of the device.

Yep, I have all my devices in .things, but I can’t configure device settings because of th ESH issue. I am hoping now that core will be part of openHAB that soon I will be able to configure everything in text files. Not trying to slam the GUI, but configuration of 21 thermostats I think is easier to do in text files.

Ok. To both of you, thank you very much for clarifyng.