使用 python 的传感器数据和命令传输的客户端-服务器协议
client-server protocol for sensor data and command transmission using python
不幸的是,我对这类主题的经验很少,所以我停滞了一段时间(在四处搜索和阅读可能的解决方案时)。
我的问题很简单,我有一个这样工作的系统:
一个客户端设备(目前是raspberry pi;将来考虑多个设备),既读取传感器数据又控制一些执行器。
一台服务器(现在是我的电脑)想要详细说明这些数据并向远程执行器发送命令(显然取决于它所做的详细说明)。
因此,基本上,我需要的是 用于 'n' 客户端连接到特定服务器地址并提供传感器每 'x' 分钟发送一次数据。然后,我希望服务器在需要时向特定客户端的执行器发送特定命令(客户端需要侦听命令或定期从服务器拉取命令)。
我对可用的各种协议和模块以及从这里开始的最佳方式感到有点困惑。特别是我正在寻找一些非常轻量级的东西,它可以很好地扩展(如果很多客户端将连接)并且不需要低级实现(我试图避免自己处理套接字并定义我自己的协议)。
额外信息:
只是为了给你一些背景,我主要考虑了:
- MQTT,但在我看来,我必须在我所说的 "server" 上放置一个代理,然后将服务器用作连接到本地主机代理以进行订阅的客户端……这似乎错误的。我的意思是,现在是经纪人的问题,我该如何解决?
- 像 Flask 这样的 webframework 带有某种 REST get/post 请求将数据发送到服务器...似乎是一个有点繁重的解决方案,服务器没有办法将命令推送到客户端.. .客户必须定期检查。
MQTT
MQTT 是一种轻量级 subscriber/publisher 物联网协议(不仅如此),在该领域得到了大力发展。
如果您的客户端设备是 Raspberry Pi 的(或 运行 Linux OS 的任何其他设备),那么 MQTT 可能是可行的方法。您的发行版很可能提供 MQTT 代理(称为 mosquitto
),安装后将 运行 开箱即用。您可以轻松地测试它安装 mosquitto-clients
,它将为您提供 mosquitto_sub
和 mosquitto_pub
命令行 api.
这将使您轻松进行双向通信。 MQTT 为各种平台(包括裸机)上的大多数语言(包括 Python、C、C++、Perl、Java,它甚至支持 Web 套接字)提供各种客户端库,因此它可以与任何系统集成不错
如果您未来的客户端设备是简单的 uC,那么您应该查看是否支持 MQTT(最有可能的是,有一大堆教程)。
您可以轻松管理 MQTT 代理,根据需要使用网桥将它们放入云中,或者通过 IP 主机名单独管理。它非常容易学习,使用起来非常有趣。
不幸的是,我对这类主题的经验很少,所以我停滞了一段时间(在四处搜索和阅读可能的解决方案时)。
我的问题很简单,我有一个这样工作的系统:
一个客户端设备(目前是raspberry pi;将来考虑多个设备),既读取传感器数据又控制一些执行器。
一台服务器(现在是我的电脑)想要详细说明这些数据并向远程执行器发送命令(显然取决于它所做的详细说明)。
因此,基本上,我需要的是 用于 'n' 客户端连接到特定服务器地址并提供传感器每 'x' 分钟发送一次数据。然后,我希望服务器在需要时向特定客户端的执行器发送特定命令(客户端需要侦听命令或定期从服务器拉取命令)。
我对可用的各种协议和模块以及从这里开始的最佳方式感到有点困惑。特别是我正在寻找一些非常轻量级的东西,它可以很好地扩展(如果很多客户端将连接)并且不需要低级实现(我试图避免自己处理套接字并定义我自己的协议)。
额外信息: 只是为了给你一些背景,我主要考虑了:
- MQTT,但在我看来,我必须在我所说的 "server" 上放置一个代理,然后将服务器用作连接到本地主机代理以进行订阅的客户端……这似乎错误的。我的意思是,现在是经纪人的问题,我该如何解决?
- 像 Flask 这样的 webframework 带有某种 REST get/post 请求将数据发送到服务器...似乎是一个有点繁重的解决方案,服务器没有办法将命令推送到客户端.. .客户必须定期检查。
MQTT
MQTT 是一种轻量级 subscriber/publisher 物联网协议(不仅如此),在该领域得到了大力发展。
如果您的客户端设备是 Raspberry Pi 的(或 运行 Linux OS 的任何其他设备),那么 MQTT 可能是可行的方法。您的发行版很可能提供 MQTT 代理(称为 mosquitto
),安装后将 运行 开箱即用。您可以轻松地测试它安装 mosquitto-clients
,它将为您提供 mosquitto_sub
和 mosquitto_pub
命令行 api.
这将使您轻松进行双向通信。 MQTT 为各种平台(包括裸机)上的大多数语言(包括 Python、C、C++、Perl、Java,它甚至支持 Web 套接字)提供各种客户端库,因此它可以与任何系统集成不错
如果您未来的客户端设备是简单的 uC,那么您应该查看是否支持 MQTT(最有可能的是,有一大堆教程)。
您可以轻松管理 MQTT 代理,根据需要使用网桥将它们放入云中,或者通过 IP 主机名单独管理。它非常容易学习,使用起来非常有趣。