Java 中的 "org.eclipse.paho.client.mqttv3-1.2.0" 库是否可以一次获取多个 MQTT 消息?
Is it possible with "org.eclipse.paho.client.mqttv3-1.2.0" Library in Java to get more than one MQTT message at a time?
我是 Whosebug 的新手,有一个问题。
我想用 ESP8266 创建一个物联网气象站,它有两个传感器(湿度、温度),并将数据发送到 Pi 上的代理 (Mosquitto) 运行。除了使用 nodered 获取和可视化数据的简单方法外,我还想在 Java.
中编写桌面应用程序
我使用 "org.eclipse.paho.client.mqttv3-1.2.0" 包来创建客户端并获取消息。对于一个主题(例如“/test/temperature”),很容易接收到温度值。但是,如果我添加第二个湿度客户端,则不可能同时接收到这两个客户端。当实现两个客户端时,只有后来调用的客户端获得它的值。
我通过从 ESP8266 发送带有一点时移的值解决了这个问题。但是有没有办法同时获取消息?我考虑过线程,但它不起作用。
有没有人遇到同样的问题或有想法?
在此先致谢,请随时提出更多问题。
干杯。
罗宾
不,消息不是从代理获取的,它们是由代理推送的。代理将在消息到达时推送消息,并且它们将始终是一条消息,这就是 MQTT 的工作方式。
这样做的方法是维护一个状态机,该状态机保存每个传感器的最后一个值,并在任何一个值发生变化时使用这些值更新输出。
首先,您需要重新考虑您的主题结构。不要那么拘束。分发主题,例如房屋在万圣节分发糖果。 :)
即
robin/weather/ESP8266/temperature
robin/weather/ESP8266/humidity
状态机几乎可以是任何东西。即 Hashtable、数据库等。如果你想保留历史数据,那么我会选择数据库。即 SQLite, Derby, H2, etc. I use the “sqlite-jdbc” driver from Taro L. Saito。 JDBC 驱动程序工作得非常好,他使代码与 SQLite 代码库保持同步。
一个基本数据库将有 2 个 tables:温度和湿度。让客户订阅这两个主题,当消息到达时,使用传入值和当前日期和时间更新适当的 table。
如果需要,您可以创建第 3 个 table(即 'Recent'),它只会有 2 行(一行用于当前温度,一行用于当前湿度) table 不断更换。
我是 Whosebug 的新手,有一个问题。
我想用 ESP8266 创建一个物联网气象站,它有两个传感器(湿度、温度),并将数据发送到 Pi 上的代理 (Mosquitto) 运行。除了使用 nodered 获取和可视化数据的简单方法外,我还想在 Java.
中编写桌面应用程序我使用 "org.eclipse.paho.client.mqttv3-1.2.0" 包来创建客户端并获取消息。对于一个主题(例如“/test/temperature”),很容易接收到温度值。但是,如果我添加第二个湿度客户端,则不可能同时接收到这两个客户端。当实现两个客户端时,只有后来调用的客户端获得它的值。
我通过从 ESP8266 发送带有一点时移的值解决了这个问题。但是有没有办法同时获取消息?我考虑过线程,但它不起作用。
有没有人遇到同样的问题或有想法?
在此先致谢,请随时提出更多问题。
干杯。
罗宾
不,消息不是从代理获取的,它们是由代理推送的。代理将在消息到达时推送消息,并且它们将始终是一条消息,这就是 MQTT 的工作方式。
这样做的方法是维护一个状态机,该状态机保存每个传感器的最后一个值,并在任何一个值发生变化时使用这些值更新输出。
首先,您需要重新考虑您的主题结构。不要那么拘束。分发主题,例如房屋在万圣节分发糖果。 :)
即
robin/weather/ESP8266/temperature
robin/weather/ESP8266/humidity
状态机几乎可以是任何东西。即 Hashtable、数据库等。如果你想保留历史数据,那么我会选择数据库。即 SQLite, Derby, H2, etc. I use the “sqlite-jdbc” driver from Taro L. Saito。 JDBC 驱动程序工作得非常好,他使代码与 SQLite 代码库保持同步。
一个基本数据库将有 2 个 tables:温度和湿度。让客户订阅这两个主题,当消息到达时,使用传入值和当前日期和时间更新适当的 table。
如果需要,您可以创建第 3 个 table(即 'Recent'),它只会有 2 行(一行用于当前温度,一行用于当前湿度) table 不断更换。