使用MQTTLibrary for Robot Framework,是否可以确定收到消息的确切主题?

时间:2017-06-21 16:29:56

标签: robotframework mqtt

我是一名新的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的完整主题路径。

1 个答案:

答案 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条消息。

请注意,此更改会破坏现有脚本,因此更完整的解决方案可能需要添加新关键字(例如订阅和获取主题),还需要执行其他工作以确保订阅仅返回有效内容。