ZWave Debugging
Micasaverde (Talk | contribs) |
Micasaverde (Talk | contribs) |
||
Line 1: | Line 1: | ||
− | Here are some hints on debugging ZWave protocol issues. First, check the box "verbose logs" under Advanced, Logging, or, from a console | + | Here are some hints on debugging ZWave protocol issues. You can access Vera by telnet, or if you already set a password, by ssh. |
+ | |||
+ | First, be sure you check the box "verbose logs" under Advanced, Logging, or, from a console run /usr/bin/VerboseLogging.sh enable. | ||
+ | |||
+ | The logs are in the directory /var/log/cmh. The first 2 digits are the 'log level'. The file: DCERouter.log contains the logging information from the core message router. The file: x-ZWave.log (where x is usually 9) contains all the logs from the ZWave module. The log level for data that is sent to the ZWave dongle is 40 and for data received is 41. The log level for commands is 8 and for events is 7. Critical errors are 1, warnings are 5. Status messages are 10. So, if you want to watch the router's logs and see what commands are being sent to the various devices, do this: | ||
+ | |||
+ | cd /var/log/cmh<br> | ||
+ | tail -f DCERouter.log | grep '^08' | ||
+ | |||
+ | Now from Vera's dashboard, send commands to the devices and you'll see them in the log. The | grep '^08' means to filter only lines that start with 08, meaning log level 08, which is commands. tail -f means "follow the log". To stop the tail and get back to the console, if you used ssh to login, you just press Ctrl+c. Unfortunately, often times telnet doesn't forward Ctrl+C, so, when using telnet you need to press Ctrl+z and then type this to kill the tail command: killall tail; fg | ||
+ | |||
+ | To watch the traffic on the ZWave serial bus type: | ||
+ | |||
+ | cd /var/log/cmh<br> | ||
+ | tail -f 9-ZWave.log | grep '^40\|^41' | ||
+ | |||
+ | which means show log level 40 or 41. Normally Vera is polling all the nodes every few seconds, so the logs fill up quickly with ZWave traffic from the polling. If you want to turn off automatic polling, temporarily for this session so the logs aren't cluttered with polling traffic, do: /usr/bin/MessageSend localhost 0 9 1 966 5 0 (assuming the ZWave device is #9, as default). | ||
To force a poll of device 13, do: /usr/bin/MessageSend localhost 0 9 1 966 2 13 5 UPDATE | To force a poll of device 13, do: /usr/bin/MessageSend localhost 0 9 1 966 2 13 5 UPDATE | ||
Line 5: | Line 21: | ||
Next you can send "COMMAND: #191 - Send Code" to either a ZWave Node and the parameter 9 (Text) is a command, or send it to the zwave device and it is a frame. The contents of text are a string of hex or decimal numbers separated with spaces dashes or underscores, and hex values are preceded with 0x or x. So assuming a dimmable light is device 20 is node 15, either command below will dim it to 50%: | Next you can send "COMMAND: #191 - Send Code" to either a ZWave Node and the parameter 9 (Text) is a command, or send it to the zwave device and it is a frame. The contents of text are a string of hex or decimal numbers separated with spaces dashes or underscores, and hex values are preceded with 0x or x. So assuming a dimmable light is device 20 is node 15, either command below will dim it to 50%: | ||
− | /usr/bin/MessageSend localhost 0 9 1 191 9 "0 x13 15 0x3 0x26 0x1 50 4 1" #send data to node 15 command class 0x26 command 0x1 (set multi level) to 10% (size=3) with transmit options=4 and funcid=1 | + | /usr/bin/MessageSend localhost 0 9 1 191 9 "0 x13 15 0x3 0x26 0x1 50 4 1" #send data (func id x13) to node 15 command class 0x26 command 0x1 (set multi level) to 10% (size=3) with transmit options=4 and funcid=1 |
− | /usr/bin/MessageSend localhost 0 20 1 191 9 "x26 x1 50" | + | /usr/bin/MessageSend localhost 0 20 1 191 9 "x26 x1 50" #send the message directly to device 20 (the node, not 9 the ZWave dongle), so the node id and 'send data' frame are assumed |
ask node 4 (a thermostat) to report it's temperature: "0 0x13 0x4 0x2 0x40 0x2 5 1" | ask node 4 (a thermostat) to report it's temperature: "0 0x13 0x4 0x2 0x40 0x2 5 1" |
Revision as of 04:48, 27 January 2009
Here are some hints on debugging ZWave protocol issues. You can access Vera by telnet, or if you already set a password, by ssh.
First, be sure you check the box "verbose logs" under Advanced, Logging, or, from a console run /usr/bin/VerboseLogging.sh enable.
The logs are in the directory /var/log/cmh. The first 2 digits are the 'log level'. The file: DCERouter.log contains the logging information from the core message router. The file: x-ZWave.log (where x is usually 9) contains all the logs from the ZWave module. The log level for data that is sent to the ZWave dongle is 40 and for data received is 41. The log level for commands is 8 and for events is 7. Critical errors are 1, warnings are 5. Status messages are 10. So, if you want to watch the router's logs and see what commands are being sent to the various devices, do this:
cd /var/log/cmh
tail -f DCERouter.log | grep '^08'
Now from Vera's dashboard, send commands to the devices and you'll see them in the log. The | grep '^08' means to filter only lines that start with 08, meaning log level 08, which is commands. tail -f means "follow the log". To stop the tail and get back to the console, if you used ssh to login, you just press Ctrl+c. Unfortunately, often times telnet doesn't forward Ctrl+C, so, when using telnet you need to press Ctrl+z and then type this to kill the tail command: killall tail; fg
To watch the traffic on the ZWave serial bus type:
cd /var/log/cmh
tail -f 9-ZWave.log | grep '^40\|^41'
which means show log level 40 or 41. Normally Vera is polling all the nodes every few seconds, so the logs fill up quickly with ZWave traffic from the polling. If you want to turn off automatic polling, temporarily for this session so the logs aren't cluttered with polling traffic, do: /usr/bin/MessageSend localhost 0 9 1 966 5 0 (assuming the ZWave device is #9, as default).
To force a poll of device 13, do: /usr/bin/MessageSend localhost 0 9 1 966 2 13 5 UPDATE
Next you can send "COMMAND: #191 - Send Code" to either a ZWave Node and the parameter 9 (Text) is a command, or send it to the zwave device and it is a frame. The contents of text are a string of hex or decimal numbers separated with spaces dashes or underscores, and hex values are preceded with 0x or x. So assuming a dimmable light is device 20 is node 15, either command below will dim it to 50%:
/usr/bin/MessageSend localhost 0 9 1 191 9 "0 x13 15 0x3 0x26 0x1 50 4 1" #send data (func id x13) to node 15 command class 0x26 command 0x1 (set multi level) to 10% (size=3) with transmit options=4 and funcid=1
/usr/bin/MessageSend localhost 0 20 1 191 9 "x26 x1 50" #send the message directly to device 20 (the node, not 9 the ZWave dongle), so the node id and 'send data' frame are assumed
ask node 4 (a thermostat) to report it's temperature: "0 0x13 0x4 0x2 0x40 0x2 5 1"