Weather station – my new toy

For some reason I can’t explain, I’ve wanted a weather station for years. A piece in Wired last month pushed me over the edge and I picked up the Honeywell TE923W. It’s relatively cheap, and while not as good as a Davis, accurate enough for me.

The problem with this station, though, is that it’s a USB station, and Linux is not supported by the software that ships with it. But I figured I could find a way around that, and indeed I could, but it wasn’t so straightforward. Along the way I learned some arcane details about USB on Debian Linux. This series of posts is something of a blow-by-blow of the process.

The hardest part was already done for me by Sebastian John who created an application that reads the current raw data from the station. The source is available at http://te923.fukz.org/index. Building the source requires libusb, and the site links to it, but I was able to build with the vanilla libusb-dev installed by apt-get:

apt-get install libusb-dev

The build creates the executable te923con, which I then installed in /usr/local/bin.

The first time I tried to run it, I got the following error message:

[mcp:…/te923/te923] te923con -D
Error while setting configuration (-1).

This indicates insufficient privileges to access the USB device, so to get things going I ran the te923con application as root. That got me to the next error:

[mcp:.../te923/te923] sudo ./te923con -D
Error while setting configuration (-16).

The dmesg shows the following error (all on one line):

[24464516.452385] usb 2-1: usbfs: interface 0 claimed
                    by usbhid while 'te923con' sets config #1

It seems that the TE923 registers itself as a human interface device (HID) for some reason, so the OS tries to treat it a such. The author of a package of code that creates a web view for the TE923 has the solution on his blog, though without explanation of the problem or why: http://firewall.haringstad.com/TE923-Frontend/blog/TE923-Frontend-Info/TE923-Frontend%20Blog/B9EF42CC-F942-41DE-ABDF-461549FEFB46.html

He removes the usbhid kernel module:

sudo rmmod usbhid

And success:

[mcp:.../te923/te923] sudo ./te923con -D
[DEBUG] got |07|00|0a|0a|00|0a|0a|00|
[DEBUG] got |07|0a|0a|00|0a|30|00|af|
[DEBUG] got |07|3d|03|57|c0|28|00|35|
[DEBUG] got |05|00|0a|b2|00|66|00|35|
[DEBUG] got |01|5a|0a|b2|00|66|00|35|
[DEBUG] got |02|28|82|b2|00|66|00|35|
[DEBUG] got |07|37|64|c0|96|0a|00|0a|
[DEBUG] got |07|0a|00|0a|0a|00|0a|0a|
[DEBUG] got |07|00|0a|30|00|af|3d|03|
[DEBUG] got |07|57|c0|28|00|35|00|0a|
[DEBUG] got |03|b2|00|66|00|35|00|0a|
[DEBUG] TMP 0 BUF[00]=28 BUF[01]=82 BUF[02]=37
[DEBUG] TMP 1 BUF[03]=64 BUF[04]=c0 BUF[05]=96
[DEBUG] TMP 2 BUF[06]=0a BUF[07]=00 BUF[08]=0a
[DEBUG] TMP 3 BUF[09]=0a BUF[10]=00 BUF[11]=0a
[DEBUG] TMP 4 BUF[12]=0a BUF[13]=00 BUF[14]=0a
[DEBUG] TMP 5 BUF[15]=0a BUF[16]=00 BUF[17]=0a
[DEBUG] UVX   BUF[18]=30 BUF[19]=00
[DEBUG] PRESS BUF[20]=af BUF[21]=3d
[DEBUG] STAT  BUF[22]=03
[DEBUG] WCHIL BUF[23]=57 BUF[24]=c0
[DEBUG] WGUST BUF[25]=28 BUF[26]=00
[DEBUG] WSPEE BUF[27]=35 BUF[28]=00
[DEBUG] WDIR  BUF[29]=0a
[DEBUG] RAINC BUF[29]=00 BUF[30]=b2 BUF[31]=00
1272059734:22.80:37:6.40:96:::::::::986.9:3.0:3:0:10:1.6:1.3:5.7:178

Hooray! There are still a few problems to work out with the device interface, and there is a bug in the te923con application to fix, but now I have a working interface to my weather station. Next up, getting the weather data onto Weather Underground

Tags: ,

One Response to “Weather station – my new toy”

  1. Saulius says:

    Hi, if you are interested, we have up and running this weather station on embedded linux board: http://www.8devices.com/wiki_carambola/doku.php/carambola_pachube_nexus

Leave a Reply