Z-Wave – A system architects view

I’ve been looking into smart home systems lately. Z-Wave seemed like a popular choice and I liked the possible scenarios you could achieve with it. So I have played around with it for a few days now, and my final verdict on it, looking through my system architect eyes is that the entire thing must been developed by hackers, at least the software stack. Let me tell you why…

To communicate between devices the protocol has something called association groups, basically a collection of commands to send. As an example a Fibaro Switch can send group 3 (dimmer commands to channel S1) to the same group on a Fibaro Dimmer and you can control the Dimmer remotely from a switch elsewhere. Because of the poor abstraction you need to use Fibaro switches and Fibaro Dimmers if you want to be sure that at the end of the day your devices can talk to each other.

Talking about abstraction, there is NONE! As a seasoned architect this comes as a chock. I mean this is a school example of how not to solve it. Why should the Switch have knowledge about how a dimmer works? A switch is just a binary state producer. Nothing more, nothing less. But here the Fibaro Switch has implemented all of the logic of a dimmer and sends dimmer commands to the dimmer instead of sending binary commands to the dimmer and let the dimmer decide what todo with the data. Anyone that have read any basic architect books knows this is bad design. What they should have done instead is to have some basic command types, like BinaryCommand, NormalizedCommand (value going from 0-1), etc. And let the dimmer decide on how to act on these.

What makes things worse is there is no solid way of Sending commands from Button 1 (Lets call it channel 0) to Channel 0 or Channel 1 on the dimmer. Group 3 is dimmer commands on Channel 0 (Or what Fibaro refers to as S1) and Group 5 is dimmer commands on Channel 1 (S2). So lets say you want to send binary commands from Channel 1 but control a Switch relay on channel 0 on the receiving end there is no solid way of doing this. You could solve it by passing the group to the controller and output it on the correct group on the receiving end, but the delay in doing this would make it really hard to dim the light.

I would have designed it like this instead, each device give the controller a settings collection telling what it can handle during the setup phase. Example for a switch with only outputs and no inputs.

   out: [
         channel: 0,
         commands: [BinaryCommand]
         channel: 1,
         commands: [BinaryCommand]
   in: []

So basically we tell the controller we can produce Binary commands on two channels. The controller can then let you connect the binary command on one channel to another devices in channels, like a dimmer.

Another funny thing is, there is no Switch without relays. So if I just want a switch that send commands to other devices that is not possible, I need to buy the bulkier and more expensive version with relays. Again, someone did not think this through enough.



  1. Lot of false assumptions and information here and it is plain obvious that you just scratched the surface of the topic, going into premature conclusion based on the implementation from one manufacturer only.

    First: it is common knowledge that Fibaro uses their own variation of Z-wave protocol, which work for their devices, but not necessarily is compatible with others. Using Fibaro as a sample is not very wise idea. Probably this is why you get to the other false opinion, wchich is:
    Second: no, it is not true that you have to use the same manufacturer of the devices to make them work together, regardless if through direct associations or via central controller In the second case you may look through the list of supported devices for any controller on the market to see that such assumption is false. For the first case I don’t think that it is true even for Fibaro. As I have couple of dimmers direct associated with Z-wave switches. Which guides us to the…
    Third, it is not true, that you don’t have switches without relays. You have variety of products, from Keyfobs (Fibaro, Aeon, NodOn, NeoCoolcam, POPP, etc.) through 2-4 button wall switches (Aeon, POPP, NodOn, etc.) to custom designed solutions where you may define virtually any device which has defined states as a switch – Door/Window sensors, Fibaro Universal Binary Sensor (probably one of the the smallest options), you name it.
    Fourth, it is not true that you can’t send commands to specific channels. If your device is so called multiple endpoints device, you can define which endpoint or endpoints will be controlled via specific association.

    1. Well, subpar workaround for shortcomings in the protocol/contracts doesn’t change my facts in the article. Plus any senior developer or system architect would agree with me on the abstraction part.

      This article is mainly written around the architect view on the protocol.

      Edit: I mean a switch that you can hide behind your actual switch like a Fibaro Double Switch 2, a binary sensor needs 9 to 30 volts and is not ideal.

      1. Sorry, but argumentation “through authority” (“any senior developer would agree…”) doesn’t work in my case. Any senior developer would see that Fibaro is not a good benchmark for analyzing Z-wave protocol. And any developer (even not senior one) would know, that judging based only on one sample from one manufacturer is not the best idea at the first place.

        What you are saying are not facts, but assumptions based on your experience with two devices coming from the same manufacturer.
        I have over 80 devices in total (2 installations) from 13 different suppliers: Aeotec, POPP, D-Link, Devolo, Fibaro, Qubino, NodOn, TKB, Everspring, Eurotronic, Heiman, Philio, Zipato and they work together, both via controller and direct associations (including Fibaro ones). So the conclusion that “you need to use Fibaro switches and Fibaro Dimmers f you want to be sure that at the end of the day your devices can talk to each other” is not a fact, but just your (false)assumption.

        As for the switches, I don’t see the point of installing a switch without relays behind a physical switch. As the physical switch closes the circuit, replacing it with Z-wave controlled one is a logical solution. Attaching “virtual” (without relays) switch instead of a physical one would need major changes in the current installation, like separating the circuit going to the switched device and the switch + “virtual” relay (as they need to be powered somehow). It is possible in some installations, but for many of them it would need putting additional cables in the wall. Remember that Z-wave is mainly designed for adopting already existing installations not for the building up new ones from scratch (in that case wired system is better in terms of reliability).
        But as I wrote above, if you need a switch without relays, you have variety of products available. Depending on the manufacturer, they can be adopted to match commonly used covering (for example POPP allows you to use some covers/frames from Breker or Legrand, and probably another producers. Nice thing is that you can attached these switches at any place, using just double-sided bonding tape: walls, furniture, virtually anywhere. Even at the place of your former physical switch (in such case you close the circuit behind the switch and put the relay switch at other place of the installation).
        Therefore what you are saying is partially not true (there are switches without relays, although they are designed different way than you would like) and partially doesn’t make much sense from the implementation point of view (who design a device which need major adaptation of the power installation, if a device which doesn’t need such modifications will be just couple of mm bigger and probably cost the same price? (you don’t think that the cost of relay would be higher than 1-2 bucks, do you?)

        The comment about sending commands to specific channel is also not referring to facts. As I wrote, you can define to which channel the command is send (in Vera you do it by adding the number ot the channel in the field on the right after the name of the device which you chosen to be associated. These data are then transferred tot the device, end of story.

        Maybe some of your comments are valid, but it is hard to believe in your opinion seeing that you’re not familiar with the basics.

  2. EDIT: One more thing about “a switch without relays behind physical switch”. Such solution would be in fact more expensive, as you need two separate devices (one without and one with relays) to do the job. Which would create costs of buying switch with relays AND the one without.
    So if you have room behind the switch, putting a device with relays would be more effective even if it is a bit bulkier.
    If you doesn’t, then you use a switch which you can put virtally on any (more or less) flat surface, additionally or as a replacement of your current switch, up to you.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s