From LinuxMCE
Revision as of 02:16, 13 October 2008 by Aaron.b (Talk | contribs)

Jump to: navigation, search

Z-Wave™ is a wireless RF-based communications technology designed for residential and light commercial control and status reading applications such as meter reading, lighting and appliance control, HVAC, access control, intruder and fire detection.


The support from LinuxMCE system is represented by an executable ZWave (it's placed in /usr/pluto/bin) which is the device implementation and a DeviceTemplate (1754) which is used to create LinuxMCE Devices for ZWave.

The source code is available in LinuxMCE's SVN repository at src/ZWave.


Open version

The new open Z-Wave driver will be included in the upcoming 0810 release.

A 32bit binary of the new Z-Wave driver for 0710 can be found here: Just swap with the existing /usr/pluto/bin/ZWave and quick reload the router.

New Fiire driver

Fire also provides a new Z-Wave driver, it is binary only: Fiire_ZWave_Patch

Old version

The source code for the old version is not available as it depends on proprietary files from Zensys.

ZWave implementation is based on a ZWaveJob-s manager (PlutoZWSerialAPI, a singleton class) which supports asynchronous or synchronous tasks management. We are using the asynchronous model right now because we want to send commands to many ZWave dimmable lighting switches at one moment. We are sending the switch On/Off commands as soon as possible then we are waitting for confirmation. This should make the lights switching almost in the same time and the customer gets a nice feedback. In the synchronous mode, ZWave jobs manager can watch only one job at one moment, that means the lights are switched On/Off successively and it can take some time until all the lights are changed.

The Z-Wave implementation uses two main classes to operate.

ZWave.h/.cpp define the ZWave class, which handles interactions with the DCERouter. PlutoZWSerialAPI.h/.cpp define the low-level Z-Wave implementation. This class handles communication with the Z-Wave adapter. The Zwave class receives (for example) light status change commands from the DCERouter and creates he appropriate 'jobs.' To do this, the ZWave class creates an object of type ZwaveJob. Then it inserts the newly-created job class in the PlutoZWSerialAPI class command queue by passing a pointer to the job class to PlutoZWSerialAPI's insertJob() function. The Zwave class then calls PlutoZWSerialAPI's start() function to command the PlutoZWSerialAPI class to begin executing the commands in its command queue.

PlutoZWSerialAPI is threaded to allow it to execute multiple Z-Wave commands in the command queue without having to wait for each command to be acknowledged by the receiving device before continuing. The current implementation is asynchronous. PlutoZWSerialAPI spawns as a thread its DoAsynch() function, which call's PlutoZWSerialAPI's listenAsynchronous() function. This function processes received replies and matches them with executed commands in PlutoZWSerialAPI's command queue.


ACT Homepro ZCS000/010 & ZCU000/010 & ZCS101/201

Status: Supported (see below)

ACT Homepro ZCU101/201

Status: Support is being worked on




Intermatic HA22 / HA23C

Status: works with the spcp8x5 driver:

Driver is included in 0710 and recent upstream kernels.




Mi Casa Verde USB + Inclusion Controller in one

Status: Works with 0710

This is the only Z-Wave dongle with a built-in inclusion controller, so you do not need a separate master controller and to go through the replication process. Carry the dongle around as you active your Z-Wave modules and they're automatically included. It has the newest Z-Wave software (4.27, released October, 2008), so it supports the new command classes. US $65 (approx Euro 43).

Available for both U.S. and Europe

Seluxit viaSENS Homecontroller

Status: Working with some tweaks in 0704

Status: Confirmed plug and play operation with 0710b4 & 0710RC2

This is the recommended interface for Europe (and other 868MHz countries)


How to install and use ZWave

These instructions are for HomePro ZWave USB interface (ZCU000/ZCU010). The same method might work for other (future?) supported ZWave controllers.

These instructions have been tested working under VMWare 1.0.1-29996 using FC4 ( as host operating system.

Let's assume that you have LinuxMCE installed with IP: (these instructions are also done by assuming that you have "hybrid" LinuxMCE installation).

Once you have successfully installed the ZWave USB controller and it is seen on LinuxMCE (media:zwave_homepro_interface.png), you can proceed by populating the ZWave network information to LinuxMCE.

  1. Add your ZWave devices to your master ZWave master remote controller (like ZTH200)
    • Once the devices are added to remote and verified they are working (you can control them with your remote controller), you need to copy the ZWave network information to LinuxMCE.
  2. Go to LinuxMCE admin page (""), then choose "Wizard -> Devices -> Interfaces -> [your ZWave controller] -> Advanced".
    1. On the device page select "Send command to device".
    2. Select command "Download Configuration" and choose "Send Message".
      • Leave the data and file fields as blank
  3. Now LinuxMCE is waiting for the ZWave information and you should send a copy of the ZWave network with your master remote controller to LinuxMCE.
    • If you are using HomePro remote controller this is done by selecting: "Setup -> Copy Remote Ctrl. -> Send Information -> Identical Copy". Once you have done that, the remote will show "Sending information..." and after successful sending it will return to clock screen (this shouldn't take more than couple of minutes).
    • You can monitor the process by watching the Zwave log file on LinuxMCE (usually "/var/log/pluto/*ZWave.log"). Unfortunately the admin page doesn't give much information of what is being done and is everything going smoothly. If the process is successfully, you should see the LinuxMCE communicating with the USB controller
    • Make sure the sending remote controller is near enough the USB receiver, otherwise nothing will happen.
  4. Go to device tree (Show devices tree) and you should see (Media:zwave_devices_tree.png) the newly added ZWave modules/devices on the tree under "CORE -> ZWave".

You should do quick reload (Wizard -> Restart -> Quick Reload Router) in order to use the newly added devices with LinuxMCE. Once you have done that you should be able to control (like switching on/off) the devices under the Light (Media:zwave_lights.png).


HomePro USB ZWave controller

If the ZWave controller is not seen (or it's not working) by LinuxMCE, check that linux sees the USB device. The HomePro USB receiver uses USB serial device converter (it's not really a "true" USB device).

Once you plug in the device you should see the following kernel messages ("dmesg") when the correct modules are loaded:

usbcore: registered new driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
usbcore: registered new driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core
drivers/usb/serial/usb-serial.c: USB Serial support registered for FTDI USB Serial Device
ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
drivers/usb/serial/ftdi_sio.c: Detected FT232BM
usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
usbcore: registered new driver ftdi_sio
drivers/usb/serial/ftdi_sio.c: v1.4.3:USB FTDI Serial Converters Driver

Then you should have the following kernel modules loaded:

dcerouter_6722:/var/log/pluto# lsmod
Module                  Size  Used by
ftdi_sio               32584  1
usbserial              32488  3 ftdi_sio

On the admin page (Interfaces -> Advanced) the ZWave interface COM port should point to USB device:

Device data:
COM Port on PC      pci0000:00/0000:00:07.2+1
dcerouter_6722:/var/log/pluto# lspci |grep USB
0000:00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB

ZWave communication

If the controller is seen by LinuxMCE, try sending some commands ("Wizard -> Devices -> Interfaces -> [your ZWave controller] -> Advanced") and watching the log files ("tail -f /var/log/pluto/*ZWave.log") at the same time.

You can try command like "Report Child Devices" which in my case (since I have 5 ZWave appliances supported by LinuxMCE) gives the following results:

36      11/05/06 10:45:51.358           ZWave::ReportChildDevices got:
36      11/05/06 10:45:51.358           
1                       37
4                       37
5                       37
6                       37
7                       37

In order to get these results you should already have downloaded the ZWave network configuration to LinuxMCE from master (remote) controller.

PIR (Binary Sensor) support


Z-Wave API documentation