使用MQTT发送命令-是否存在模式?
我不熟悉MQTT:但我有一些基本的Python程序,可以将传感器读数发布到特定主题:然后其他客户端可以订阅以事件驱动的方式获取温度 但当涉及到发送命令时;我有点想做这件事 例如:取一个连接到mqtt的“倒计时计时器” 此计时器有两种状态“已停止”和“已启动”。 它将自身初始化为“停止”状态,并等待“启动”命令;然后倒计时;发布主题的当前倒计时。 当倒计时为零时;它将再次将其状态切换为“停止”,并等待另一个“启动”命令 如果接收到“停止”命令(通过mqtt);它还应进入“停止”状态 因此,也许我可以创建一些主题,比如:使用MQTT发送命令-是否存在模式?,mqtt,Mqtt,我不熟悉MQTT:但我有一些基本的Python程序,可以将传感器读数发布到特定主题:然后其他客户端可以订阅以事件驱动的方式获取温度 但当涉及到发送命令时;我有点想做这件事 例如:取一个连接到mqtt的“倒计时计时器” 此计时器有两种状态“已停止”和“已启动”。 它将自身初始化为“停止”状态,并等待“启动”命令;然后倒计时;发布主题的当前倒计时。 当倒计时为零时;它将再次将其状态切换为“停止”,并等待另一个“启动”命令 如果接收到“停止”命令(通过mqtt);它还应进入“停止”状态 因此,也许我可
countdown_timer/command
countdown_timer/state
countdown_timer/value
countdown_timer/send_command
countdown_timer/command_result
倒计时设备可以订阅“命令”,并通过发布到“状态”做出反应。(“停止”或“启动”?)
但是,一旦客户机处理了“命令”主题值,它是否应该以某种方式“消费”该主题值呢
还是最好有这样的东西:
countdown_timer/command
countdown_timer/state
countdown_timer/value
countdown_timer/send_command
countdown_timer/command_result
控制器发送命令时,订阅的设备将执行该命令,并在“命令结果”主题上输入“确定”或“错误”通常,您描述的两种方法都是有效的MQTT模式。您可以选择最适合您的应用程序的内容。以下是一些评论:
- 对于你的倒计时,我同意你的第一个建议。但对于其他应用程序,其他方法可能更有意义
- 如果写入
和倒计时/状态
,则可能需要保留这些发布消息。这将确保新订阅的客户端将立即收到最新的值倒计时/值
- 如果您的倒计时进程一直在运行,那么您不需要为
保留标志,但有时当服务器进程可能失败时,重新启动并重新连接以继续执行最后一个命令是有意义的countdown\u timer/command
- 当一个客户机与一个服务器对话并收到每个问题的一个答案时,MQTT通常使用
和send_命令
模式。这似乎不适合当前的示例:对于每个命令,您没有一个特定的响应command_结果
- 以下是客户端-服务器应用程序的另一种模式:服务器订阅一个通道
,每个客户端订阅一个单独的通道:server/command
、client/1
、client/2
等。当客户端向服务器发送命令时,它包括它的客户机id,服务器在相应的通道上响应client/3
- 此模式的修改是使用独立通道进行命令查询:
、service/1
等。第一个客户端发布到service/2
并订阅service/1
。第二个客户端发布到client/1
并订阅service/2
。服务器订阅client/2
,从接收到的消息的主题名称中提取客户端id,并响应相应的客户端通道服务/#
- 您可以看到:MQTT有许多有效的模式——一方面,这种灵活性是一个优势。另一方面,它让你有责任做出明智的选择