Man. I spent the last three days learning how to use Flash so I could create this simple tutorial. You'd think that it would be easy to create a simple interactive thing like this, but it was actually extremely painful. You can't just draw the symbols and move things around. You actually need to program in a language that Adobe (MacroMedia) made called ActionScript. The programming part is no problem, but searching the massive documentation to find the right method to do what I wanted caused me to pound a large hole in the wall with my head. I still don't know why it requires a zillion languages just to do some stuff on the web.

Anyways, this is something that I've been wanting to do for a long time. Trying to explain Zigbee mesh routing using just words is very difficult, and has the tendency to cause people's eyes to glaze over. With an interactive simulation, you can do a play-by-play analysis of what's going on which hopefully will make it easier to see the flow of events that makes up the AODV routing algorithm. I originally had the idea when I was studying the routing algorithm myself. It's almost impossible to understand what's going on by reading the Zigbee spec. That's like trying to understand how to use Linux by reading the source code. You need to be a real masochist. 

There weren't many good tutorials on the web for AODV mesh routing, either. So to save the people the same pain I had to go through in studying it, I created this little applet. To move forward one frame, just click anywhere on the graphic. To move back, press the space bar. Flash doesn't have a handler for the right-click button, because Apple users usually only have one mouse button. You can't tell who will be using the Flash file since it's accessed inside a web browser. You'll need to have Adobe Flash v9 installed (or higher depending on when you're reading this) in order to use it. Otherwise, it will probably just give you a bad graphic, no graphic, or it will cause your computer to explode.

I'm also planning to try and make other tutorials similar to this for tree routing, source routing, and possibly some other aspects of Zigbee. I think its much easier to learn visually than reading that monster document. Without further ado, here's the tutorial. Hope you like it. If there are any problems, leave a comment for me...especially if you find bugs. 

I've been working on the NWK layer broadcasts all week. When I first started it, I thought it wouldn't be too difficult. I mean broadcasts are just frames that you send out with a broadcast address, right?

Unfortunately, that didn't turn out to be the case. There's this nasty little problem with broadcasts on wireless networks, where if you mishandle it, you end up with an infinite broadcast loop. I had nightmares of generating broadcast storms that would spread from node to node and never end. The problem is that broadcasts are quite sensitive to the stop conditions.

When you receive a broadcast from a neighbor node, you can't just forward it. You need to know more info about it such as:
1) is it a new broadcast?
2) is it broadcast that you previously transmitted and that neighbor node is forwarding it back to you?
3) is it a new broadcast, but has the same identifier as the previous one?

Passive ACK
These are just some of the questions that come up when you handle these things, and the wrong response could make you end up in an infinite broadcast loop. Zigbee takes care of these situations by requiring the use of a broadcast transaction table (BTT). Each entry in the BTT consists of at least the address of the node that forwarded the broadcast and the broadcast identifier. Once you implement the BTT, you then need to create an entry for each broadcast that you receive and keep a record of which device sent it. That way, you can filter new broadcasts from ones that you have already forwarded. They call this a "passive ack" system, since you're not allowed to use the 802.15.4 ACK on broadcast frames.

I got a question on how you could use the Z-Wave routing method on a Zigbee router, but still stay compliant to the Zigbee spec. The reason I got this question was probably because of the article I posted on Zigbee vs. Z-Wave . The Z-Wave protocol implements a light version of mesh routing by using only source routing and the Z-Wave controller is the only device capable of originating a source routing frame. For those that don't know, source routing is a method of mesh routing, where you embed the complete path to the destination within the frame. Why would you want to use the Z-Wave style of routing with a Zigbee device? To make a cheap-ass router, dummy.

Seriously, the Zigbee spec, although supporting many features, is too heavy for a lot of consumer applications. For home automation especially, cheap devices need to be created that can use the benefits that Zigbee has to offer like mesh routing and interoperability, but they can't be too expensive. One way to decrease the RAM and flash requirements is to get rid of AODV mesh routing and just use source routing, a la Z-Wave.

The Zigbee 2006 spec also supports source routing, however this does not seem to be a widely known fact. Most Zigbee articles focus only on the AODV mesh routing which uses the routing tables. Or even worse, that only Zigbee Pro supports source routing. The reason that source routing probably does not get a lot of airplay is that the spec implements it in a rather awkward way. If you do it according to the spec, the method of route discovery requires that you already have the route located in your AODV routing tables. This is useless because if you already have the route, then you don't need to do source routing. Maybe its difficult to explain so I'll try and give a rough example. Say you want to source route a frame from point A to point D. If you are starting fresh with no routes in your routing table or source routing table, this is what you would have to do.

April Fools Day is coming so I thought I would compile a list of pranks that the Zigbee Alliance can play on us.  

Top 10 April Fool Jokes that the Zigbee Alliance can play on us:

  • Hide yo momma jokes randomly in the spec and see if anyone finds them.
  • Zigbee 2006 will be obsoleted and only Zigbee Pro will be supported.
  • Announce a policy of annual Zigbee spec revisions with no backwards compatibility.
  • Microsoft will be joining the Zigbee specification committee.
  • Note: They authored the 8000 page OOXML spec, and are believed to be corrupting the vote currently going on to adopt it.
  • They announce a new layer with an additional multi-hundred page spec on top of the 500 page Zigbee spec and 300 page 802.15.4 spec.
  • They spent too much money at the last few open houses so the next one will be at the Motel 6 in Oakland.
  • motel 6
  • Announce an investigation into creating a new adult toy profile.
  • They make 802.15.4 beacon mode and guaranteed time slots a requirement for Zigbee compliance testing.
  • I become the official spokesperson for Zigbee.
Yes I realize there are only nine. My special number font only went up to nine.
It's been a pretty busy week for me. Been writing code all week, but still struggling to balance coding, blogging, and the j-o-b.

I got the mesh routing functions running and wrote some basic tests for it. The tests took longer than expected to write because the mesh routing consists of multiple steps. For example, to test route forwarding on an incoming packet, I had to generate an incoming frame, wait for the route request to come out of the stack, process the request in the test, generate a route reply, and then wait for the final forwarded frame to come out. What a pain in the ass. But without that test, it would have been hell debugging the code in a live system.

Since I had to parse so many headers, my eyeballs got tired and I decided to implement an automatic header checking system. I wrote a simple checking engine that you load with the expected values and when the frame comes in, it'll parse it and make sure that the header values are what I expected. I also implemented it so that it would check the headers in the MAC, NWK, and APS layers separately.

There's been more and more attention being focused on wireless home automation recently and the two biggest candidates for it is Zigbee and Z-Wave.

Readers of this blog probably don't need much of an introduction to Zigbee because this blog is basically about it, or at least my adventures diving into Zigbee as I write my software. You're also probably aware that there has been a lot of mudslinging (ie: shit talking) between both camps, Zigbee and Z-Wave, as well as an ongoing flame war. So in an interest to educate myself on the real issues behind the talk, I decided to do some research and comparison between Z-Wave and Zigbee. I should note that a lot of the information was just pieced together via the internet since the Z-Wave specification is not public. A lot of the material in this post borrowed heavily from the information found in this article. Since there is not a lot of technical data publicly available for Z-Wave, I recommend perusing this article in Dr. Dobbs Journal since it's an excellent introduction.

Z-Wave and the Z-Wave Alliance is a group that was established around the proprietary wireless networking protocol developed by a Danish company called Zensys. The Z-Wave protocol was designed to be a lightweight protocol for home automation that would be low cost yet still could support mesh networking.

Lets begin with a look at the device types specified by Z-Wave...

Well, it was home to me for over two decades of my life, but I can't say I miss it much. My old hometown was in Irvine, CA in the US and I was suprised to see it make the news . Nothing too exciting usually goes on there...just your average suburbia life. Well, except for the one time they found out that the Florida Cocaine Queen lived there. However I did start noticing the last few times I went back that kids ten years younger than me were driving around BMWs and frantically talking on their fat phones (crackberries). And the guys I knew that used to sell drugs were now selling mortgages. But I guess I never put two and two together to see that it was so addicted to <gasp> subprime </gasp>. Well, at least when I go back to visit my parents, I won't feel like such a poor slob driving around my $9/day rental (Priceline).

Irvine Spectrum