主要做了一下工作:
- mqtt.json里mapping配置项映射到__mapping_sub_topics字典,键名是主题(topicFilter),键值是消息转换器对象集合(converter),并且订阅相关主题(设备数据上传)
```python
构建转换器对象
default_converter_class_name = “JsonMqttUplinkConverter” converter_class_name = mapping[“converter”].get(“extension”, default_converter_class_name) module = TBModuleLoader.import_module(self._connector_type, converter_class_name) converter = module(mapping)
regex_topic = TBUtility.topic_to_regex(mapping[“topicFilter”]) if not self.mapping_sub_topics.get(regex_topic): self.mapping_sub_topics[regex_topic] = []
建立映射
self.__mapping_sub_topics[regex_topic].append(converter)
订阅消息
self.__subscribe(mapping[“topicFilter”], mapping.get(“subscriptionQos”, 1))
```json
{
'sensor/data': [<JsonMqttUplinkConverter.JsonMqttUplinkConverter object at 0x0000024D73697A48>]
}
mqtt.json里connectRequests配置项映射到__connect_requests_sub_topics字典,键名是主题(topicFilter),键值是mqtt.json里的connectRequests配置项,并且订阅相关主题(设备连接)
self.__subscribe(request["topicFilter"], request.get("subscriptionQos", 1))
topic_filter = TBUtility.topic_to_regex(request.get("topicFilter"))
self.__connect_requests_sub_topics[topic_filter] = request
{
'sensor/connect':
{'topicFilter': 'sensor/connect', 'deviceNameJsonExpression': '${serialNumber}'}
}
mqtt.json里disconnectRequests配置项映射到__disconnect_requests_sub_topics字典,键名是主题(topicFilter),键值是mqtt.json里的disconnectRequests配置项,并且订阅相关主题(设备断开连接)
{
'sensor/disconnect': {'topicFilter': 'sensor/disconnect', 'deviceNameJsonExpression': '${serialNumber}'}
}
mqtt.json里attributeRequests配置项映射到__attribute_requests_sub_topics字典,键名是主题(topicFilter),键值是mqtt.json里的attributeRequests配置项,并且订阅相关主题(设备属性相关)
{
'v1/devices/me/attributes/request': {
'retain': false,
'topicFilter': 'v1/devices/me/attributes/request',
'deviceNameTopicExpression": "${SerialNumber}',
'attributeNameJsonExpression": "${sensorModel}'
}
}