Z-Wave Controller Info
In a state of permanent flux, but last updated on December 20, 2005
Until fairly recently, the only commonly available computer interface for the Z-Wave home automation protocol was made by the company ACT. The first design used a USB interface to the host computer, a standard serial design was made available at a later date. This page concentrates on the ACT controllers, and gives info on some modifications you may wish to make to your unit.
If you take a quick perusal through any of the various home automation forums it should be obvious that many people have issues with the USB version of ACT's Z-Wave interface. It should be noted that to many people, the unit works just fine. After all, many people only post when they have problems, not when something works. Even so, the number of people who are having issues is too many to be mere coincidence. The goal of this page is to show what the USB controller is, what it isn't, and hopefully show you how to get more out of your system while possibly dispelling some of the myths that have sprung up along the way.
Problems with the unit manifest itself in different ways. Some people have problems in simply trying to get the host system to recognize the device. Others have issues when they try to copy the configuration from their master remote. Most of the problems, however, seem to come in the form of "communication difficulties". This is a broad heading that includes things like failures when polling a device, failures to control a device, or even long delays when trying to control a device. There's plenty of "strange and unusual" when working with this device.
Suggested remedies to these issues are just as varied, if not more so. What works for one person may or may not work for someone else. There have been so many things tried, that it's almost impossible to keep track of them all. By far though, the most successful has been to simply replace the USB version with the standard serial one - usually at one's own expense.
But if you're here, you know all of that - right? So how about something useful. Let's start by taking a look under the hood, shall we?
![]()
Here is what you have. There are two circuit boards: a small green one that is plugged into a larger one. The smaller board is a standard Zensys Z-Wave module, the ZM1220. It incorporates a microcontroller and all of the rf circuitry required to communicate with other Z-Wave devices. The larger board contains the circuitry required to connect this module to the host computer. Look simple enough? Actually, it's too simple. Let's take a look at the bottom of the board:
![]()
Ah, now it makes better sense. The IC on the bottom of the host board is made by FTDI, and is a FT232BM. This is a standard, off the shelf, USB-to-serial converter. Say What!? Yup, the Z-Wave module is using plain old serial communications to talk to the host. If you trace out the circuitry you will see that the TX and RX pins of the FT232BM connect directly to the TX and RX pins on the ZM1220. So what's with the rest of the board? There are two other ICs located on the board's top. The 8-pin chip (with it's part number crudely obscured) is nothing more than a serial eeprom - probably a 93C46. The other actually looks like a transistor - it's a Holtek HT-???? 3.3V Low-Dropout regulator. The ZM1220 runs on 3.3V, so this is needed to convert the 5V supply from the USB host into something suitable. There are 5 pins on the ZM1220 that are connected to 3.3V through small pullup resistors. The rest of the circuitry is practically verbatim out of FTDI's documentation for the FT232BM.
You can locate the datasheets for the devices mentioned at their respective manufacturer's web sites: Zensys, FTDI. Also note: while it is quite easy to completely draw out a schematic of the host board, due to certain abuses of the DMCA I will not be posting that on this site.
At this point you're probably asking yourself "If this thing is just a serial device with a USB-to-serial converter in front of it, then why does the serial one work better?" For a very long time, I thought that the answer to this question was buried in the firmware of the ZM1220 module. ACT has never (to my knowledge) made available any updates to the device - indeed there is no way to determine the firmware version. At the same time, the Zensys documentation makes it clear that the OEM has the ability to write their own firmware. It seemed unlikely that the USB and serial versions shared the same version. There is also the question of host drivers. The drivers provided for the USB controller were the standard FTDI ones; the only modification appeared to be for the new USB pid that identified the device as a Z-Wave controller instead of the standard USB-to-serial converter. The only problem here was that the drivers were a bit old. Looking at FTDI's changelog, it seemed that some of the things they fixed might explain some of the USB unit's wierdness. It turned out to be trivial to update the driver to the current version, which several people plus myself tried out. Unfortunately, it didn't seem to make much difference.
And so things stayed for a while. The popularity of the serial device surged - mostly due to people desparate to have a properly working system - and eventually the inevitable happened. The demand outstripped supply and the device went out of stock. This situation lasted for several months. When at last they were shipping again, one technically minded person did what any red-blooded geek would do to his new unit - he took it apart.
What he found was intriguing, to say the least. What he found was the standard USB unit as pictured above, with one small circuit board added. This board contained the power connector, the serial cable, and a standard RS232 level converter IC (Maxim MAX232). The original USB host card had it's USB cable removed, one trace cut, and 4 wires soldered to it that connected to the new serial card. Surely that couldn't be all there was to it, could it? Thinking that the firmware had to be different, he swapped out the ZM1220 module with the one from his old USB unit.
And the device worked perfectly.
So much for the firmware angle. Ok, if that's all that ACT did to make serial versions, then it should be reproducible, right? Whith this in mind, I set out to duplicate it. I got out the solderless breadboard, whipped up a MAX232 serial level converter (complete with blinky lites), and proceded to hack up my USB controller:
![]()
Whaddya know? The darn thing worked!
Ok, time to make it a wee bit better. I liberated a solder-style breadboard from another project and built the same design, this time adding in the needed power supply components and such to make the device truely standalone. As should be no surprise by now, it worked just fine. Here's what this version looks like:
![]()
I just made one "minor" miscalculation - I didn't take into account the limited headroom within the case, so the darned thing won't fit! Since my bench stays in a perpetual state of disaster anyway, this is no big deal. I just transplanted the thing into a different case, where it's been running for a while.
Still with me? Must be a slow day. That, or you want to try this mod out for yourself. Here's how - but first, I need to throw in some obligitory legalese:
These procedures should only be undertaken by someone with prior experience in electronics. Performing this on your controller WILL VOID YOUR WARRANTY. Attempting this without an understanding of basic electronics will almost certainly result in a nonfunctioning unit. GeekHollow cannot be held responsible if you damage your controller in the process.
Gah. I hate that stuff. Anyway, doing this requires two things: a willingness to hack up your USB unit, plus a serial level converter/power supply pcb. You can use darned near anything for a circuit design but I'll throw in a few notes:
- Unless you are willing to hack out most of the circuitry on the USB host board, you must use +5V for power. If you wanna go wild, you can get away with +3.3V. I use +5...
- Using +5V for the RS232 receiver means that you should use a voltage divider to reduce the signal level of receive data down to 3.3V. Even though ACT's serial modification does not do this, there is no mention in the Zensys docs about the inputs on the ZM1220 being 5V tolerant.
- Beware of using simple two-transister RS232 level converters. While they may work fine for you, they won't in all circumstances. A MAX232-style circuit is more reliable, even if it is slightly more expensive.
- While you can use most any walwart to supply power, I would recommend using a 9V model. Going above a 12V may increase the power dissipation across the 78L05 to unacceptable levels.
Here is the schematic for the converter I am using. Note the LEDs and their associated circuitry are entirely optional - I've found that the activity level is low enough that the LEDs are pretty much a novelty item. That said, I'm keeping mine. You can also get the schematic in Eagle format here: zwave_ser1.sch. This could make it easier for you to roll your own pcb.

How you layout, build, and mount the circuit is entirely up to you. The layout is not terribly critical - the circuit should be pretty forgiving. Once it's built, you should run some basic tests like hooking it up to your host computer, firing up hyperterminal (or other terminal program of your choice) and start typing away. If you include the blinkies, the green one should be firing. If you connect the ZW_RX and ZW_TX pins together and type, you should see what you type on the screen. Congratulations! You've just made on overly complicated typewriter.
Now it's time to connect this mess to the USB host pcb. Start by removing the ZM1220 module and put it in an anti-stat bag for safe keeping. Unsolder and remove the USB cable. Referring to the picture below, cut the one trace - this is transmit data from the USB chip to the ZM1220. Now it's simply solder the 4 wires from your RS232 board to the USB host board. Using my colors, refer to the pictures and this table to make the connections:
| RS232 Name | Wire Color | USB Host Location |
|---|---|---|
| +5V | Red | USB Connector Pin 1 |
| GND | Black | USB Connector Pin 4 |
| ZW_RX | Green | ZM1220 Pin 18 |
| ZW_TX | Red | ZM1220 Pin 16 |
![]()
Believe it or not, that's all there is to it! You just need to tell your favorite home automation package to use a serial Z-Wave controller instead of a USB one. As of December 20, 2005, mine has been operating in this fashion for three weeks with absolutely no problems whatsoever.
So, back to the original question: Why does the serial version work better than the USB one? The following is my own personal opinion, backed by years of hardware design (albeit purely as a hobbyist).
Basically, the layout of the USB host board sucks.
As you start tracing out the connections to create your own schematic you start noticing little things. Parts placement in some areas are odd, to say the least. Perhaps the best example is in the placement of the bypass capacitors for the FT232BM. It is a standard practice to place a small value capacitor (usually .1uF) at each set of power pins going to an IC. In the case of the FT232BM, there are two pairs of power pins, therefore you would have two capacitors. FTDI provides sample schematics in it's datasheet - for both bus-powered and self-powered designs, theys show two .1uF and a single 10uF capacitor across power. As is typical in schematics, they are drawn side-by-side, separated from the rest of the circuitry. So what did ACT do when laying out the circuit board. All three of these capacitors exist, all are located side-by-side, and all are close to where the usb cable comes in. Of course they aren't close to where they need to be - right beside the FTDI ic! The placement of the 3.3V regulator for the Z-Wave module is almost as bad. The reg is on the opposite end of the board from the module. A single bypass capacitor is located roughly in the middle. In all honesty, it looks like somebody drew the schematic by cut-n-paste from the FTDI docs. This in and of itself is not necessarily a bad thing. But then they apparently handed layout to a newbie. Since he apparently didn't know any better, he just put the parts wherever he wanted. Note: additional pictures coming.
I am convinced that this unit would be far more reliable with a decent layout. One simple rule of design: you can never have too many bypass capacitors. A reworked layout, better bypassing, and a decent ground plane would do wonders.
One of the things I'm working on in my Copious Free Time is to make a new layout, with both USB and serial connectivity in place. Partly just to prove I can. Partly just to improve my layout and soldering skills - I am not an expert by any means, I just sometimes act like it.

