Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MQTT发送命令-是否存在模式?_Mqtt - Fatal编程技术网

使用MQTT发送命令-是否存在模式?

使用MQTT发送命令-是否存在模式?,mqtt,Mqtt,我不熟悉MQTT:但我有一些基本的Python程序,可以将传感器读数发布到特定主题:然后其他客户端可以订阅以事件驱动的方式获取温度 但当涉及到发送命令时;我有点想做这件事 例如:取一个连接到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
    client/3
    等。当客户端向服务器发送命令时,它包括它的客户机id,服务器在相应的通道上响应
  • 此模式的修改是使用独立通道进行命令查询:
    service/1
    service/2
    等。第一个客户端发布到
    service/1
    并订阅
    client/1
    。第二个客户端发布到
    service/2
    并订阅
    client/2
    。服务器订阅
    服务/#
    ,从接收到的消息的主题名称中提取客户端id,并响应相应的客户端通道
  • 您可以看到:MQTT有许多有效的模式——一方面,这种灵活性是一个优势。另一方面,它让你有责任做出明智的选择