所以,在里面最后一批在Messaging协议MQTT上的这个系列中,我们安装了MoSquitto MQTT代理。现在我们将测试它在Mosquitto正在运行的同一台机器上进行测试。首先,您将需要安装Mosquitto客户端工具:
sudo-apt-get-install-mosquito客户端
现在,让我们从命令行运行mosquitto:
root @ deb-01:/ home / mgibbs#mosquitto 1485602498:Mosquitto版本1.3.4(建立日期2014-08-17 03:38:31 + 0000)起始1485602498:使用默认配置。1485602498:在端口1883上打开IPv4侦听插座.1485602498:在端口1883上打开IPv6侦听插座。
Mosquitto Broker现在正在聆听IPv4和IPv6 MQTT请求的标准MQTT端口1883。接下来,打开一个新终端窗口并输入:
mgibbs @ deb-01:〜$ mosquitto_sub -v -t'censors'
的MOSQUITO用户现在正在等待主题的邮件传感器
.没有-五
选项,订阅者只会在其上打印有效载荷,订阅者打印主题和有效载荷(如果订阅,则真的更有用#
我们讨论的所有话题都是什么本系列的第一部分)。而且,也许显然,-t
选项后跟字符串确定主题。现在,在另一个终端窗口中,输入:
mgibbs@deb-01:~$ mosquitto_pub -t ' sensors ' -m ' helloWorld ' mgibbs@deb-01:~$
第二个终端窗口现在是这样的:
mgibbs@deb-01:~$ mosquitto_sub -v -t ' sensors '传感器helloWorld
塔达!我们刚刚使用Mosqitto MQTT代理发送和接收了第一条消息。现在,设置一个消息生成器怎么样?最简单的方法是使用一点Python编码。假设您已经安装了Python,那么您需要安装开源Eclipse Paho MQTT客户端图书馆Python(图书馆也适用于其他语言):
Redqueen:MQTTGEN MGIBBS $ PIP安装PAHO-MQTT收集PAHO-MQTT下载PAHO-MQTT-1.2.TAR.GZ(49KB)100%|████████████████████████████████|51KB 316KB / S用于收集包装的建筑轮子:PAHO-MQTT运行SETUP.PY BDIST_WHEEL for PAHO-MQTT ......存储在目录中:/用户/ MGIBBS / LIBRARY / CACHER / CHE / FA / DB / FB / B495E37057B3C00AB26A58FC80FB8D17223DF0F07成功构建Paho-MQTT安装收集的包裹:Paho-MQTT成功安装Paho-MQTT-1.2 Redqueen:MQTTGEN MGIBBS $
请注意,mosquito to客户端和Eclipse Paho MQTT客户端库也可以在Raspbian上运行,所以你可以在Raspberry Pi上移动你的mosquito到客户端进行测试和开发,正如我们稍后将讨论的,你甚至可以在Raspberry Pi上运行mosquito to broker。
我们将使用的MQTT生成器被调用mqttgen.py.由Mariano Guerra..这是代码:
#!/usr/bin/env python3”“”一个简单的传感器数据生成器,发送给代理通过MQTT泛美卫生组织”“导入系统导入json导入时间导入随机导入paho.mqtt.client MQTT def生成(主机、端口、用户名、密码、主题、传感器、interval_ms,冗长的):““生成数据并将其发送到MQTT代理”“mqttc = mqtt.Client()如果用户名:mqttc。username_pw_set mqttc(用户名、密码)。connect(host, port) keys = list(sensors.keys()) interval_secs = interval_ms / 1000.0 while True: sensor_id = random.choice(keys) sensor = sensors[sensor_id] min_val, max_val = sensor. value ();Get (" range ", [0,100]) val = random. Get (" range ", [0,100])randint(min_val, max_val) data = {" id ": sensor_id, " value ": val} for key in [" lat ", " lng ", " unit ", " type ", " description "]: value = sensor.get(key) if value is not None: data[key] = value payload = json.dump (data) if verbose: print(" %s: %s " % (topic, payload))发布(主题,有效载荷)time . sleep (interval_secs) def主要(config_path):“”的主要入口点,负载和验证配置和调用生成“”“试题:张开(config_path)处理:配置= json.load mqtt_config =配置(处理)。Get (" mqtt ", {})Get (" misc ", {}) sensors = config.get(" sensors ") interval_ms = misc_config. Get (" misc ", {})Get (" interval_ms ", 500) verbose = misc_config. Get (" interval_ms ", 500)get(" verbose ", False)如果不是传感器:print(" no sensors specified in config, nothing to do ")返回host = mqtt_config。Get (" host ", " localhost ") port = mqtt_config。Get (" port ", 1883) username = mqtt_config. Get (" username ") password = mqtt_config. Get (" password ") topic = mqtt_config. Get (" password ") topic = mqtt_config. Get (" password ")get(“主题”、“传感器”)生成(主机、端口、用户名、密码、主题、传感器、interval_ms,冗长的)除了IOError错误:那么打印(“错误打开配置文件“% s”% config_path,错误)if __name__ = =“__main__”:如果len (sys.argv) = = 2:主要(sys.argv[1])其他:打印(“% s配置使用。json " % sys.argv [0])
如果您在与Mosquitto Broker上的同一台计算机上运行此生成器,则无需配置文件,否则,您需要将一个设置为最多可指定目标服务器。这是我正在用的人:
{“mqtt”:{“用户名”:“”,“密码”:“”,“主机”:“192.168.0.50”,“端口”:1883,“主题”:“主题”:“主题”:“传感器”},“MISC”:{“interval_ms”:1000,“冗长”:false},“传感器”:{“传感器129”:{“范围”:[0,100]},“传感器229”:{“范围”:[0,100]“传感器329”:{“范围”:[0,100]},“传感器429”:{“范围”:[0,100]},“传感器529”:{“范围”:[0,100]}}}
如您所见,配置文件是一个简单的JSON规范。您可以通过更改的值来设置生成消息的速率interval_ms.
并且根据你的需要在传感器部分添加尽可能多的项目。的范围
价值,这是[0,100]
将导致为消息分配一个介于0和100之间的随机值,并且您可以根据自己的要求调整范围。要启动发电机,输入:
Redqueen:mqttgen mgibbs $ python mqttgen.py config50.json
除非你设定…的价值verb
在配置文件中真的
,终端窗口不会有任何输出。另一方面,您将在Mosquitto订阅者终端窗口中看到的内容:
mgibbs@deb-01:~$ mosquitto_sub -v -t ' sensors ' sensors helloWorld sensors {" id ": "传感器529 "," value ": 91} sensors {" id ": "传感器429 "," value ": 47} sensors {" id ": "传感器429 "," value ": 72} sensors {" id ": "传感器129 "," value ": 20} sensors {" id ": "传感器329 "," value ": 97} sensors {" id ": "传感器429 "," value ": 43} sensors {" id ":"传感器529 "," value ": 46}传感器{" id ": "传感器529 "," value ": 4}传感器{" id ": "传感器529 "," value ": 50}传感器{" id ": "传感器229 "," value ": 11}传感器{" id ": "传感器529 "," value ": 49}传感器{" id ": "传感器329 "," value ": 57}传感器{" id ": "传感器429 "," value ": 31}传感器{" id ": "传感器429 "," value ": 26}传感器{" id ":"传感器229 "," value ": 89}传感器{" id ": "传感器329 "," value ": 78}
......
这是一个开始探索和测试MQTT和MOSQUITO的好地方,但如果您想在监控MQTT流量方面变得更加成熟,则需要安装mqtt-spy..
mqtt-spy.是一个基于GUI的“JavaFX应用程序,所以理论上应该在任何具有适当版本的Java 8版本的操作系统上工作.”您还可以安装间谍恶魔它省去了GUI,因此您可以完全从命令行驱动应用程序。mqtt spy是一个很棒的工具,它不仅允许您执行简单的订阅和发布操作;它还可以使用JavaScript脚本生成消息并与之交互。在许多其他功能中,mqtt spy还记录消息流量、解码和重新格式化内容、重播记录的消息、绘制流量图,并支持多个代理连接。对于严肃的MQTT工程来说,这是一个很好的工具包。
早些时候我提到Instaling在覆盆子pi上的mosquitto broker,我建议随地在覆盆子pi上安装mosquitto,一篇博文但请注意,使用树莓派作为中间人只有在消息量较低的情况下才有用。
Tobias Abarbanell的一篇文章讨论他如何使用另一个MQTT经纪人,rabbitmq.(比Mosquitto更复杂,并且有一个伟大的GUI前端),在覆盆子PI上并注意到:
如果您让发布商用简单的“Hello World”消息在循环中运行1000次并同时启动此队列的订阅者,您将在大约13秒内看到通过您的小兔PI飞行的1000条消息,更多每秒50条消息!
您还会注意到发布者和订阅者之间几乎没有并发性,因此只有在发布者空闲时才会使用消息。这与我在桌面linux系统中看到的情况相反,在桌面linux系统中,订阅者总是“获胜”,并保持队列为空,发布者的速度会慢到订阅者的速度。
另一方面,尽管存在性能限制,但在现场通信有限且消息量不太大的情况下,使用RPi作为小型物联网设备子组(属于较大系统的一部分)的本地集线器可能是一种良好的体系结构选择。
顺便说一下,男性也负责创作智能手机应用程序OwnTracks是一个非常有趣的工具:
可以让你跟踪自己的位置。你可以建立你的私人位置日记或与你的家人和朋友分享它。OwnTracks是开源的,使用开放的通信协议,这样你就可以确保你的数据是安全的和私有的。
OwnTracks消息处理和路由是MQTT代理(如Mosquitto)的一个很好的用例,我计划在以后的文章中介绍OwnTracks。
如果您正在使用Mosquitto,无论是用于IoT目的还是在另一个背景中,或者您对IoT Messaging有任何疑问或想法,请告诉我。