Zwave - "Invalid Config"

Some questions while I get the big picture.
Just loaded hassbian.
If I run ozwcp, I can control my zwave device.
When I start HASS and connect to :8123 I get this zwave error …

This is a configuration.yaml file issue, correct?
If I remove my :zwave, I don’t see the error.
Here is the snippet …
Does it matter where I put the :zwave section?

homeassistant:
  # Name of the location where Home Assistant is running
  name: Home
  # Location required to calculate the time the sun rises and sets
  latitude: 37.751
  longitude: -97.822
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 435
  # metric for Metric, imperial for Imperial
  unit_system: imperial
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time$
  time_zone: UTC

zwave:
  usb_path: /dev/zwave


# Show links to resources in log and frontend
```

Is the ‘usb_path’ correct…? What kind of zwave device do you have?

Do you have /dev/zwave linked to the actual tty port of the Zwave Stick?

Also - check home-assistant.log for errors in case you’ve got a formatting error with your zwave YAML.

Make sure you are not running ozwcp at the same time as HASS

check the tty port as that does not look right

If you’re on an RPi, this will help you find the correct path to Zwave modem:

ls /dev/ttyACM*

Sorry, should have been more clear. Yes I have a udev rule and “/dev/zwave” is symlink to “/dev/ttyACM0”
I am pretty sure that all is correct because I can access the zwave via ozwcp.
Here is my udevadm query

pi@hassbian:/home/homeassistant/.homeassistant $ udevadm info -q path -n /dev/zwave
/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/tty/ttyACM0

I was pretty sure because I had to press ^C. But you did get me wondering, so I rebooted. Same thing.

Should have look there first, remember newbie. Also I was asking some YAML format questions.
I will need a little help in digesting the log. Of course, it starts with the zwave setup, but unless I am missing something, the setup in the YAML seems pretty simple at this point. So I thought it might be in the open zwave configurations, but I not sure how much HASS uses OZW configurations. And the other thing that confuses me is again the ozwcp works.
But here is the log

2017-05-25 11:42:00 ERROR (MainThread) [homeassistant.setup] Error during setup of component zwave
Traceback (most recent call last):
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/setup.py", line 188, in _async_setup_component
    None, component.setup, hass, processed_config)
  File "/usr/lib/python3.4/asyncio/futures.py", line 388, in __iter__
    yield self  # This tells Task to wait for completion.
  File "/usr/lib/python3.4/asyncio/tasks.py", line 286, in _wakeup
    value = future.result()
  File "/usr/lib/python3.4/asyncio/futures.py", line 277, in result
    raise self._exception
  File "/usr/lib/python3.4/concurrent/futures/thread.py", line 54, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/components/zwave/__init__.py", line 247, in setup
    config_path=config[DOMAIN].get(CONF_CONFIG_PATH))
  File "/srv/homeassistant/lib/python3.4/site-packages/pyozwweb-0.4.0.34-py3.4.egg/openzwave/option.py", line 82, in __init__
    libopenzwave.PyOptions.__init__(self, config_path=config_path, user_path=user_path, cmd_line=cmd_line)
  File "src-lib/libopenzwave/libopenzwave.pyx", line 669, in libopenzwave.PyOptions.__init__ (openzwave-embed/open-zwave-master/python-openzwave/src-lib/libopenzwave/libopenzwave.cpp:10816)
libopenzwave.LibZWaveException: "LibOpenZwave Generic Exception : Can't autoconfigure path to config"
2017-05-25 11:42:09 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/lib/python3.4/asyncio/tasks.py", line 233, in _step
    result = coro.throw(exc)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/components/discovery.py", line 119, in scan_devices
    None, _discover, netdisco)
  File "/usr/lib/python3.4/asyncio/futures.py", line 388, in __iter__
    yield self  # This tells Task to wait for completion.
  File "/usr/lib/python3.4/asyncio/tasks.py", line 286, in _wakeup
    value = future.result()
  File "/usr/lib/python3.4/asyncio/futures.py", line 277, in result
    raise self._exception
  File "/usr/lib/python3.4/concurrent/futures/thread.py", line 54, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/srv/homeassistant/lib/python3.4/site-packages/homeassistant/components/discovery.py", line 145, in _discover
    netdisco.scan()
  File "/home/homeassistant/.homeassistant/deps/netdisco/discovery.py", line 57, in scan
    self.ssdp.scan()
  File "/home/homeassistant/.homeassistant/deps/netdisco/ssdp.py", line 38, in scan
    self.update()
  File "/home/homeassistant/.homeassistant/deps/netdisco/ssdp.py", line 86, in update
    entry for entry in scan()
  File "/home/homeassistant/.homeassistant/deps/netdisco/ssdp.py", line 270, in scan
    return sorted(entries.values(), key=lambda entry: entry.location)
TypeError: unorderable types: NoneType() < str()
```

When I get this type of error, it’s usually a result of a messy shutdown of HA.

HA will use the zwcfg_XXX.xml file that OZW generates. (the XXX part depends on the ID of your Zwave modem.) My install uses the version in my .homeassistant folder (where my YAML is), but yours may vary. Some install methods symlink the copy from the OZW folder. I manually copy mine to be safe.

cp /srv/hass/src/open-zwave-control-panel/zwcfg_XXX.xml /home/hass/.homeassistant/zwcfg_XXX.xml

You got me in the right direction. I remember seeing a “config_path” under zwave but I did not know what it wanted so I left it blank. Seeing your post, I gave it a try and it fixed my issue.
So now I am curious, is the config_path just for the zwfg_XXX.xml file or will it be needed for something else in the future?

zwave:
  usb_path: /dev/zwave
  config_path: /srv/homeassistant/src/open-zwave-control-panel/config
```

If memory serves, there’s an options.xml in that folder that’s used as well. That file stores the security key for secure zwave nodes.

I bet your right, I got the path from your copy command.
Since copying the file worked for you, I bet HASS without “config_path” defaults to .homeassistant directory.

If assumptions are correct, either method will work for now, the question I have are:

  1. Is the zwcfg_XXX.xml file dynamic? In other words, as new devices are added, you will have to sync them or by pointing HASS to use the same, any change will work for ozwave and HASS.
  2. Are there other configs that HASS may need someday.

zwcfg is updated when you add devices. I use OZWCP when I add a device. I also use it to name the new devices to get more-descriptive names inside HA. Names get stored in the zwcfg, in addition to capabilities of the device.