天气如何?
Geek Ranch议程上的一个项目是气象站。 虽然我们还没有气象站,但我们已经了解了一些关于气象站和Linux的知识。
首先,为什么我们没有气象站? 嗯,首先Geek Ranch站点还没有通电。 但是,更重要的是,没有互联网连接。 因此,我们暂且称之为研究。
几个月前,我开始了对气象站的搜索。 标准很简单:
- 可靠
- 价格低廉
- 与 Linux 兼容
结果是我购买了两个不同的系统。 第一个是 La Crosse Technology,WS-2310TWC。 型号名称中的 TWC 表示它上面写着“The Weather Channel”(天气频道)。 我不打算将其与天气频道一起使用,但我少花了 10 美元就让盒子上印有该信息。
虽然它是我找到的带有计算机接口的最便宜的设备,但我没有给它颁发任何“与 Linux 兼容”测试的奖项,并且根据我对 La Crosse 不同型号的经验,我不确定其可靠性。 与 La Cross 技术支持人员交谈时,他们表示没有 Linux 软件,并且不会发布通信规范。
经过一番搜索,我找到了 Open2300,这是一款旨在与 23xx 系列气象站通信的软件。 显然,这有点像逆向工程,并且根据我阅读的内容,我理解他们为什么不想发布规范。 该单元似乎是一个 4 位处理器(现在还能买到这种处理器吗?),没有 API。 也就是说,您只能读取和写入内存。 真糟糕。
好消息是该软件包含一个 Weather Underground 接口例程。 它不起作用,我也不想弄清楚为什么,但它就在那里。
关于可靠性问题,我之前没有计算机接口的 La Crosse 设备最近自行损坏。 风速和风向单元在使用大约两年后几乎完全解体。 好消息是,新单元采用了完全不同的设计,看起来更坚固一些。
在深入研究如何让 2300 工作之前,让我谈谈我真正在 Geek Ranch 使用的东西。 它是 Oregon Scientific WMR968。 我碰巧拥有的那款是深绿色的,上面写着“John Deere”。 就像另一个单元的天气频道型号一样,因为这个广告我节省了大约 10 美元。 无所谓。
这两款设备都称为无线设备,并在 433MHz 频率上与基站通信。 不同之处在于,La Crosse 设备上的无线意味着有从风速和雨量传感器连接到室外温度传感器的电线,然后室外温度传感器以无线方式与基站单元通信。 对于 Oregon Scientific,所有传感器(包括室内温度单元)都是独立的。 除了室内温度单元外,所有单元都由太阳能供电。
在您说“我需要阳光照射太阳能电池,但我不希望室外温度传感器暴露在阳光下”之前,请不要惊慌。 传感器通过电缆连接到它们自己的太阳能电池板/发射器单元。 显然,这是一种易于使用的设计。 比较这两款设备,我很高兴我为了“真正的设备”而多花了钱。
好的,回到让 2310 投入运行。 它归结为以下几点:
- 下载软件
- 修改 make 文件。(没有配置脚本,但默认设置为 Linux。我不需要进行任何更改。)
- 执行make install.
- 将来自基站单元的电缆插入串行端口,并确保您对该端口具有读/写权限。
- 运行fetch2300您应该会看到从设备读取的信息。
如果一切顺利,您现在就可以启动并运行了。 就我而言,一切都运行良好,所以我决定将自己放在地图上。 也就是说,将 尼加拉瓜埃斯特利 发布到 Weather Underground 上。(请注意,您在那里看到的页面将此气象站与一些“机场”信息结合在一起。 实际上,机场与埃斯特利几乎没有什么共同之处,因为它距离埃斯特利超过 100 公里,并且海拔高度差异很大。 单击 历史数据 链接可获取真实信息。)
要上传数据,我所要做的就是登录 Weather Underground 并添加电台的详细信息。 这让我获得了电台 ID,即IESTELIE2.
然后可以将该电台 ID 和我的密码添加到 open2300.conf 中,然后运行wu2300将轮询气象站并将信息上传到 Weather Underground。 很简单。 不幸的是,它不起作用。 没有报错,但 WU 从未收到数据。
下一步是开启调试。 在 wu2300.c 中将DEBUG设置为非零值会导致程序将 http 请求回显到标准输出,而不是发送它。 它看起来很好。 我将其粘贴到浏览器中,得到了success返回,并且页面已更新。
在挠头思考了一会儿并意识到已经是凌晨 3 点之后,我做了任何真正的极客都会做的事情——用 shell 脚本将各个部分粘合在一起。 这是“快速 hack”版本。
data=D$$ ./wu2300 > $data wget -i $data rm $data updateweatherstation.php*
它只是获取 http 请求并使用 wget 发送它。 然后我添加了一个 crontab 条目来运行该脚本,一切都很好。 好的,一切正常,我会在某天清理这个烂摊子。 在此期间,您可以看到我这里的天气比您那里的天气好。 好的,也许有些人一年中的某些时候天气更好,但我猜大多数人会更喜欢我这里的天气而不是他们那里的大部分时间的天气。