我是一名新的Robot Framework用户,我已经添加了MQTTLibrary。
我可以根据文档设置订阅,并成功接收消息。它也可以订阅通配符,例如
${message}= Subscribe topic=test/mqtt_test/+ qos=1 timeout=2
以上将成功获取发布到test / mqtt_test / apples,test / mqtt_test / oranges,test / mqtt_test / pears等的消息。
但是,$ {message}似乎只包含邮件有效内容的内容,如果可以确定收到邮件的确切主题,我就无法解决问题。
可以用MQTTLibrary完成吗?
=============
其他详细信息(提供ILostMySpoons评论的答案):
当然 - 它基本上只是消息内容。所以,如果我使用......
mosquitto_pub -h 127.0.0.1 -t test/mqtt_test/apples -m "Hello to you"
...我的机器人框架脚本确实......
Log to console ${message}
......我明白了......
['Hello to you']
mosquitto代理(mosquitto -v)的调试输出并不显示消息有效负载,但它确实显示了test / mqtt_test / apples的完整主题路径。
答案 0 :(得分:0)
我已经深入研究了MQTTLibrary,并提出了一个解决方案。我既是机器人框架又是Python noob,所以这可能不是最好/最合适的实现,但似乎有效。
在我的安装中,MQTTLibrary源包含在C:\ Python27 \ Lib \ site-packages \ MQTTLibrary中。所有感兴趣的内容都在MQTTKeywords.py文件中。
在_on_message_list()函数中,更改...
self._messages.append(message.payload)
...到...
self._messages.append([message.topic, message.payload])
像以前一样在Robot Framework脚本中使用Subscribe关键字,但现在您将拥有一个列表列表;具体而言,列表中的每个条目都是[topic,payload]的列表。 E.g。
${messages}= Subscribe topic=test/mqtt_test/+ qos=1 timeout=20 limit=0
${third_message}= Get From List ${messages} 2
${topic}= Get From List ${third_message} 0
${payload}= Get From List ${third_message} 1
Log to console \nTopic:\n${topic}
Log to console \nPayload:\n${payload}
上面的示例假定在20秒超时窗口期间至少收到3条消息。
请注意,此更改会破坏现有脚本,因此更完整的解决方案可能需要添加新关键字(例如订阅和获取主题),还需要执行其他工作以确保订阅仅返回有效内容。