使用适用于 Arduino 的 Arduino / XMPP 客户端进行家庭自动化
Posted
技术标签:
【中文标题】使用适用于 Arduino 的 Arduino / XMPP 客户端进行家庭自动化【英文标题】:Home automation using Arduino / XMPP client for Arduino 【发布时间】:2009-12-03 12:40:33 【问题描述】:我正在尝试设置一个系统来自动执行我家中的某些任务。
我正在考虑一种解决方案,其中服务器端应用程序将能够通过网络向Arduino(附加Arduino Ethernet Shield)发送/接收命令/数据。
在这里,Arduino 既可以充当服务器应用程序的传感器接口,也可以充当服务器应用程序的命令执行器接口。
例如(用户故事):
我家的顶置水箱有一个与 Arduino 相连的水位传感器(与 Arduino Ethernet Shield 相连)。
另一个 Arduino(与 Arduino Ethernet Shield 相连)与继电器/锁存器相连。然后将此继电器/锁存器连接到水泵。
现在网络上的服务器端应用程序能够从水箱上的 Arduino 获取/接收水位信息。
根据收到的水位信息,Web 应用程序应在水泵上向 Arduino 发送合适的信号/命令,以打开或关闭水泵。
现在,为了让这样的系统能够在网络上运行,我正在考虑按照我的优先级顺序使用其中一种解决方案:
使用XMPP 在服务器应用程序和Arduino 之间进行通信。
使用 HTTP 轮询。
使用 HTTP 挂起 GET。
对于 1 号解决方案,我需要实现一个驻留在 Arduino 上的 XMPP 客户端。
是否可以编写一个小到足以驻留在 Arduino 上的 XMPP 客户端?
如果是,我需要为 Arduino 编写的最低限度的 XMPP 客户端功能是什么,以便它能够联系 XMPP 服务器解决方案,如 GTalk 等?
对于解决方案 2 和 3,我需要实施指导。
还有哪种解决方案具有成本效益且易于扩展?
【问题讨论】:
另见:***.com/questions/25108933/… 【参考方案1】:你可以看看 MQTT,它有一个 arduino 库,它是一个简单的发布者-订阅者消息代理。
【讨论】:
【参考方案2】:我认为我不会为您正在尝试做的事情寻找其中任何一个。
只需在给定的时间间隔内将传感器数据从 Arduino 中输入,然后让另一方进行智能操作。
另外,对于这些类型的项目,我一直在寻求避免使用以太网屏蔽并使用XBee 或RFM12B。这些将引导您朝着这个方向前进,但更重要的是,让更多设备同时进行遥测和控制变得更加容易。
如果在 Arduino 上运行类似 XMPP 的东西,那将是一个通过更智能的服务器端进程代理的真正精简的存在协议。也就是说,这将是相似的工作量。尽管有可能,但 1 KB RAM 中的 XMPP 与您的应用程序代码一起听起来真的很痛苦。
【讨论】:
Dustin,我查看了您的建议并同意在 1k RAM 上使用 xmpp 会很痛苦,但使用 xbee 或 rfm12b 也会限制我的解决方案的可用性。实际上,我在这里寻找一种类似于架构的 Web 服务(服务器端)来与我的 arduino 通信,以便稍后我可以使用部署在各种平台的远程服务器上的 REST api 与 arduino 集成和通信。 根据我的经验,Arduino 或 PIC 上的 TCP/IP 是可能的,但仅是玩具示例。更好的方法是在服务器(或 WRT54g 型路由器)上运行另一种类型的接口(以太网+UDP、串行、USB、单线),将其转换为更重的 HTTP/XMPP。另外,为失败做好准备!如果您的服务器停机,您的水箱就会溢出。如果一个 Arduino 可以自主监控水箱和控制泵,并将状态发送到服务器,那么您就有了一个更强大的解决方案。 好主意Wim,由于我现在已经在研究解决方案了,因此我一定会尝试整合并解决您提出的问题。【参考方案3】:我们正在开发一种开源中继基础架构,以使 Arduinos(以及任何其他支持 TCP/IP 套接字的设备)可以通过 Web 访问。然后,您的应用程序可以通过简单的 REST API 调用 Arduinos。请参阅http://www.yaler.org/ 了解更多信息和现场演示。
问候, 坦伯格
【讨论】:
什么时候可以使用,我可以贡献吗?【参考方案4】:有一个正在开发的项目,具有策略和数据记录器功能。 (xmpp 上的传感器/any_data_source) http://middlewaresensing.wordpress.com/
【讨论】:
【参考方案5】:为什么不使用旧的 RS485 连接传感器执行器? 只需发明一些简单的协议(地址、命令、数据)。如果您需要更复杂的东西,请使用另一个人作为 RS485/以太网桥。
【讨论】:
【参考方案6】:开源项目
管理传感器和网络 |记录传感器数据 |图表 |政策 |历史/日期/传感器规则 |短信/电子邮件/url/twitter/xmpp 通知 |事件记录 |谷歌地图 |还有更多
http://dev.hci.uma.pt/sawa 上的演示
wiki 在 dev.hci.uma.pt/mediawiki/index.php
middlewaresensing.wordpress.com 上的博客
您可以使用 HTTP Post 向服务器发送数据,然后通过 XMPP 发布传感器数据。 HTTP Post(用于资源有限的设备,例如 arduino) 和 sox_tools 一个 xmpp 客户端,用于在此系统上通过 xmpp 发布
【讨论】:
【参考方案7】:有一个新的库,用于在名为 RESTduino 的 Arduino(带以太网)上发出类似 REST 的 HTTP 请求并接收 JSON 响应。对于您的 Arduino 项目,它可能是有用的插入式 HTTP 接口。
http://jasongullickson.posterous.com/restduino-arduino-hacking-for-the-rest-of-us
【讨论】:
【参考方案8】:在查看了所有可用选项后,我对任何一个都不满意。
目前我正在努力为我上面定义的问题提出自己的解决方案。
解决方案就在我在上面回复“达斯汀”的评论中。
我将在此处提出我的解决方案的第一个版本后立即发布项目 URL。
【讨论】:
以上是关于使用适用于 Arduino 的 Arduino / XMPP 客户端进行家庭自动化的主要内容,如果未能解决你的问题,请参考以下文章