The Future of Z-Wave in HA - QT-OpenZWave

I don’t like this at all. I had several occasions this screwed up my config especially using multiple zwave devices of the same brand/type. To me the possibility of renaming through ozw-admin is a must-have to have clear and obvious names in HA. If it’s not in v1.7 then it should be, or at least in the ozw-daemon just like it is now.

I strongly agree! Even in the ‘old’ days, I used to shut down HA and start up the OZW Control Panel whenever I acquired a new Z-Wave device. I would set up the parameters there and, more importantly, rename the device before bringing it into HA.

About a week ago, I migrated from using the old Z-Wave integration to the new beta one. I’m running the OZW daemon (with OZW admin) in a docker container. Renaming the devices via OZW admin makes it so I can recognize the devices in HA, no matter what. And on top of that, I can rename individual entities of those devices in HA to suit my own logic and naming scheme. That’s a win-win situation for me.

1 Like

In HA 0.111, lock support was added, but unfortunately, it was very basic support–only lock, unlock, and battery.

A big missing piece of lock support is the “lock_status” attribute that existed in the old zwave integration. This attribute would have text like

Unlocked with Keypad by user 1
Manually Locked by Key Cylinder or Inside thumb turn

Looking at the code for the old zwave integration, it appears as though there was a lot of logic baked into the integration to determine that status. Is that something that is in the plans to port to the new ozw integration?

I know that user codes and admin is also missing, but that has a workaround via MQTT if necessary.

2 Likes

I would not advise using ozw-admin to rename devices, at least currently. If you lose your cache file (ozwcache*.xml) file for whatever reason (corruption, deleted, etc), you will also lose all of the names in HA. If you rename devices and entities within HA they are persistently stored in the entity registry. If you name them outside they will not persist.

Thats sounds clear. Is it on the roadmap to do it from within ozw? Can’t it be done “on the stick”?

From what I have seen is that the entity ID in hass hower is not renamed but taken over from ozw. Only the friendly name is “renamed”. Correct?

Can’t it be done “on the stick”?

The node naming exists, I believe, because some devices do actually store storing both a name and location (COMMAND_CLASS_NODE_NAMING). However in reality almost no devices implement this, none of mine do. The cache file is the alternative then.

From what I have seen is that the entity ID in hass hower is not renamed but taken over from ozw. Only the friendly name is “renamed”. Correct?

Right, so for me that’s not helpful. The entity ID names are more useful to me than the friendly names.

Yes, I agree now. Though it is very handy havind them from ozw…

One other thing… my battery sensors have 3in1, motion, temp and lux. After a day 1 of both (exactly equal) and sometimes one, sometimes the other, hass displays 0 for temp and 0.0 for lux. They do report motion correctly and upon waking an lux chage thes also gets updated including temp… what is this odd behaviour?

Ok just had restarted my complete hass instance (core). Now my openzwave won’t start anymore…

Can’t find why…?

[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "downloadlatestmfsrevision"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/downloadlatestmfsrevision/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "enablepoll"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/enablepoll/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "getpollinterval"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/getpollinterval/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "hardresetcontroller"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/hardresetcontroller/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "hasnodefailed"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/hasnodefailed/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "healnetwork"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/healnetwork/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "healnetworknode"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/healnetworknode/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "isnodefailed"
[20200613 18:43:34.121 CEST] [ozw.library] [info]: Info - Node: 0 Lookup for mfs.db.openzwave.com returned 96
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/isnodefailed/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "open"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/open/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "ping"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/ping/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "refreshnodeinfo"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/refreshnodeinfo/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "refreshvalue"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/refreshvalue/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "removeassociation"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/removeassociation/")
[20200613 18:43:34.121 CEST] [ozw.library] [info]: Info - Node: 0 Serial port /dev/serial/by-id/usb-0658_0200-if00 opened (attempt 1)
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "removefailednode"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/removefailednode/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "removenode"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/removenode/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "replacefailednode"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/replacefailednode/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "requestallconfigparam"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/requestallconfigparam/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "requestconfigparam"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/requestconfigparam/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "requestnetworkupdate"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/requestnetworkupdate/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "requestnodedynamic"
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/requestnodedynamic/")
[20200613 18:43:34.121 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "requestnodeneighborupdate"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/requestnodeneighborupdate/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "requestnodestate"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/requestnodestate/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "sendnodeinformation"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/sendnodeinformation/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "setpollinterval"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/setpollinterval/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "setvalue"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/setvalue/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "softresetcontroller"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/softresetcontroller/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "syncronisenodeneighbors"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/syncronisenodeneighbors/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "testnetwork"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/testnetwork/")
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Creating Subscription for  "testnetworknode"
[20200613 18:43:34.122 CEST] [ozw.mqtt.commands] [debug]: Subscription Setup for  QMqttTopicFilter("OpenZWave/1/command/testnetworknode/")
[20200613 18:43:34.122 CEST] [ozw.library] [debug]: Detail - Node: 255 Queuing (Command) FUNC_ID_ZW_GET_VERSION: 0x01, 0x03, 0x00, 0x15, 0xe9
[20200613 18:43:34.122 CEST] [ozw.mqtt.publisher] [debug]: Topics:  "OpenZWave/1/status/"
[20200613 18:43:34.122 CEST] [ozw.mqtt.publisher] [warning]: Another ozwdaemon is running for Instance  1
[20200613 18:43:34.122 CEST] [ozw.mqtt.publisher] [warning]: If not, please clean up the MQTT Topic:  "OpenZWave/1/status/"
[20200613 18:43:34.122 CEST] [ozw.mqtt.publisher] [warning]: "{\n    \"OpenZWave_Version\": \"1.6.1137\",\n    \"OZWDaemon_Version\": \"0.1.0\",\n    \"QTOpenZWave_Version\": \"1.2.0\",\n    \"QT_Version\": \"5.12.5\",\n    \"Status\": \"starting\",\n    \"TimeStamp\": 1592066404,\n    \"ManufacturerSpecificDBReady\": true\n}"
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Detail - Node: 0 Notification: DriverRemoved
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 ***************************************************************************
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 *********************  Cumulative Network Statistics  *********************
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 *** General
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Driver run time: . .  . 0 days, 0 hours, 0 minutes
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Frames processed: . . . . . . . . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Total messages successfully received: . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Total Messages successfully sent: . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 ACKs received from controller:  . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 *** Errors
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Unsolicited messages received while waiting for ACK:  . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Reads aborted due to timeouts:  . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Bad checksum errors:  . . . . . . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 CANs received from controller:  . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 NAKs received from controller:  . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Out of frame data flow errors:  . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Messages retransmitted: . . . . . . . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 Messages dropped and not delivered: . . . . . . . . . . . 0
[20200613 18:43:34.123 CEST] [ozw.library] [debug]: Always - Node: 0 ***************************************************************************
[20200613 18:43:34.123 CEST] [ozw.library] [warning]: Warning - Node: 0 WARNING: Tried to write driver config with no home ID set
[20200613 18:43:34.123 CEST] [ozw.library] [info]: Info - Node: 0 Stopping DNSThread
[20200613 18:43:34.129 CEST] [ozw.daemon] [warning]: =============================
[20200613 18:43:34.129 CEST] [ozw.daemon] [warning]: CRASH!!! - Dumping Backtrace:
[20200613 18:43:34.129 CEST] [ozw.daemon] [warning]: =============================
[20200613 18:43:34.129 CEST] [ozw.daemon] [warning]: #1  0x00007f0ecba7427d sp=0x00007f0ec89e8380 sigwaitinfo + 0x8
[20200613 18:43:34.129 CEST] [default] [warning]: Exiting....
Debug - Node: 0 Downloads Remaining: 0
Info - Node: 0 ManufacturerSpecificDB Initialized
1592066614: Socket error on client qt-openzwave-1, disconnecting.
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
1592066614: mosquitto version 1.6.8 terminating
1592066614: Saving in-memory database to /data/mosquitto.db.
[s6-finish] sending all processes the TERM signal.

Restart, restart, restart container (addon) and now it is starting… what is wrong here? Is it just me or?

When ozwdaemon starts up, it checks the status topic to make sure there isn’t another ozwdaemon running with the same instance number. For whatever reason, you either have two different ones running, or there was some failure to cleanup the topic, so the status is still indicating online. If you really have nothing else running, you can try using something like MQTT Explorer to delete the OpenZWave topics, then restart ozwdaemon.

I have only 1 openzwave "thing and that is this addon. nothing else, nothing more…

Very strange behavior since it eventually started after 3-5 minutes and retrying (!)…

EDIT: there is definitely something ‘unreliable’ here, at least in my setup. After it start thus as above I had 1 out of 2 motion sensor reporting everything but motion… (to hass). restarting the openzwave addon resolved that…

I have a GE/Jasco Dimmer that allowed me to rename it, it is forever “Master_Bedroom_L” until it dies lol

Looks like you had a unclean shutdown of sorts either on the broker or ozwdaemon. You need to clear that status topic.

Hi @Fishwaldo. it recovered itself. I had done nothing special. I just “rebooted” the host here (reboot):

Now every morning I am missing “readings” from sensors. They are alive, are working (motion is still detected) but sometimes lux and some times temperature is 0:

image

They are next to each other on my desk and its around 20 25 degrees here :slight_smile:

EDIT: manually waking the sensor quickly gives temp and lux “0” and then fills them with the correct value:
image

Where to start troubleshooting? Is this some sort of “homeassistant” thing forgetting the temperature is there is no updated value?

It seems to once in a day (in the morning after some period of sleep?):

HA is not renaming entity ID from existing devices. But if you name your devices thorugh ozw-admin before you add the integration to HA you will get “friendly entity names” aswell. I advice you remove the integration from HA, make sure you have named your devices in ozw-admin and after that re-add the integration!

In the ozw add on, where is the options.xml file if I want to set some things in there like log level… and also, where is the log file stored? I found an options.xml in the /data dir, but does that get re-written on updated?

Logging is now handled differently in the images.
You can set a environment variable before starting your image as such:
QT_LOGGING_RULES="*.debug=false;ozw.mqtt.publisher.debug=true"

For the following example log lines:

[20200615 4:09:28.218 UTC] [ozw.library] [debug]: Detail - Node: 11 Notification: ValueChanged CC: COMMAND_CLASS_METER Instance: 2 Index: 256
[20200615 4:09:28.219 UTC] [ozw.mqtt.publisher] [debug]: Publishing Event valueChanged: 1125900096405538

The first line would not be logged, but the second one would.

@Michael_Griffin thanks very much for this note about lock support - I never would have known the limitations just from reading the release notes, and it saved me the pain of trying to migrate followed by making this discovery then migrating back.

Although, I suppose, most of that information can probably be derived from alarm_type and alarm_level.

I have three Kwikset Z-wave locks, one of them with a keypad, and I think I will wait until there is more complete lock support. In the meantime, unfortunately, my locks are not especially reliable using the built-in Z-Wave support.

That is how the lock_status attribute is compiled, it accounts the type and level and displays it in a readable form. You can do this from the exposed sensors, and using a lock manager package from the Share your projects section.

Wouldn’t happen to know how to do that in the add-on? and then where the log and options.xml are stored?