Menu

Home

Kevin Cernekee
vrctl - Z-Wave VRC0P utility for Linux
--------------------------------------

vrctl is a command line utility that operates the Leviton VRC0P-1LW (+3)
Z-wave serial interface unit.  It provides the following capabilities:

 - Turning Z-Wave devices on or off
 - Setting dimmer levels
 - Listing all devices present on the network
 - Upgrading the VRC0P's firmware

The vrctl interface was designed to be at least somewhat familiar to
users of the X10 Bottlerocket (br) utility.

Getting started:

1) The VRC0P unit must be paired to an existing Z-wave network using the
primary controller.  This does not require any interaction with the
attached PC.  Typically it is done by holding down the green LED button on
the front of the VRC0P until it blinks amber, then telling your primary
controller to include (add) a secondary controller to the network.

2) Next, the VRC0P should be attached to the PC via RS232.  These
instructions will assume it is connected to /dev/ttyS0 .

3) Now build vrctl:

$ tar -jxf vrctl*.tar.bz2
$ cd vrctl
$ make

4) At this point you should be able to list all devices on the Z-wave
network:

$ vrctl -x /dev/ttyS0 --list
002 (unnamed): switch/appliance (generic class 16, instance 1)
003 (unnamed): switch/appliance (generic class 16, instance 2)
004 (unnamed): switch/appliance (generic class 16, instance 3)

5) You can change the device power states by doing something like:

$ vrctl -x /dev/ttyS0 003 on
$ vrctl -x /dev/ttyS0 002 toggle 004 off
$ vrctl -x /dev/ttyS0 005 level 50

6) Optionally, you may create $HOME/.vrctlrc and add settings that will
be read by vrctl each time it starts.  Example:

port /dev/ttyS0

alias kitchen 2
alias bedroom 3
alias bedroom2 4
alias fan 6

Aliases may reference prior aliases:

alias study bedroom2

Node IDs (002, 003, ...) are persistent until the module is unpaired.  If a
module is paired and then unpaired, it is likely to be assigned a new node
ID by the primary controller.  It is usually not possible to control the
node ID assigned to a module (unlike X10), so it is generally a good idea
to use vrctl aliases instead of trying to memorize node IDs.

Firmware upgrade (experimental):

Firmware packages available from Leviton generally contain two files, e.g.

"ST V0_30_U02.hex" - Main firmware for the ST Micro SoC that runs the
VRC0P.  This resides on the ST chip's internal flash.

"Zensys V0_30_U01.HEX" - Firmware for the low-level Zensys Z-wave
transceiver chip.  This resides on a serial EEPROM.

vrctl can upgrade either firmware image over the serial port, avoiding the
need for Leviton's Windows-based installer.

Upgrading the firmware may brick your device, so use this feature at your
own risk.

Usage:

$ vrctl -x /dev/ttyS0 -u zensys.hex

$ vrctl -x /dev/ttyS0 -u st.hex

The ST bootloader has an automatic "recovery mode" built in, which allows
reflashing the image through an alternative protocol if the last attempt
was not successful.  vrctl will attempt to use the recovery mode if the
VRC0P is not responsive to normal commands.  You may need to toggle power
to the unit prior to attempting a recovery flash.

Other random tips:

Some of the cheaper Z-Wave controllers have interoperability problems with
certain modules.  This can manifest itself in a failure to pair, or strange
behavior with respect to "ALL ON" / "ALL OFF" commands.

Some of the older VRC0P firmware images had problems with node enumeration.
It doesn't work "great" on current images (some devices don't show up, and
it sure is slow), but it mostly does what you expect.

The Leviton CTZUS-1US ControlThink ThinkStick makes a decent primary
controller.  But you will need to use the Leviton RF Installer tool
(Windows) to set up the network.  Be sure to upgrade the ThinkStick to the
latest firmware image as well.

Usage page:

$ vrctl -h
vrctl v0.1 - Z-Wave VRC0P utility
Copyright 2012 Kevin Cernekee.  License: GPLv2+
This is free software with ABSOLUTELY NO WARRANTY.

Usage:
  vrctl [<options>] <nodeid> <command> [ <nodeid> <command> ... ]
  vrctl [<options>] all { on | off }
  vrctl [<options>] --list

Options:
  -v, --verbose       add v's to increase verbosity
  -q, --quiet         only display errors
  -x, --port=PORT     set port to use (default: /dev/vrc0p)
  -l, --list          list all devices in the network
  -u, --upgrade=FILE  upgrade firmware from FILE
  -h, --help          this help

<nodeid> is one of the following:
  a decimal node number: 3 (use vrctl -l to list them)
  an alias from $HOME/.vrctlrc

<command> is one of the following (case-insensitive):
  on                  turn the device on
  off                 turn the device off
  bounce              turn the device off, then on again
  toggle              invert the device's on/off state
  level <n>           set brightness level
  status              display the current on/off/dimmer status
  lock                lock (door locks only)
  unlock              unlock (door locks only)
  scene <n>           Activate a previously stored scene

Contact:

Kevin Cernekee <cernekee@gmail.com>

License:

GPLv2+