主要做了一下工作:

  1. 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))

  1. ```json
  2. {
  3. 'sensor/data': [<JsonMqttUplinkConverter.JsonMqttUplinkConverter object at 0x0000024D73697A48>]
  4. }
  1. mqtt.json里connectRequests配置项映射到__connect_requests_sub_topics字典,键名是主题(topicFilter),键值是mqtt.json里的connectRequests配置项,并且订阅相关主题(设备连接)

    1. self.__subscribe(request["topicFilter"], request.get("subscriptionQos", 1))
    2. topic_filter = TBUtility.topic_to_regex(request.get("topicFilter"))
    3. self.__connect_requests_sub_topics[topic_filter] = request
    1. {
    2. 'sensor/connect':
    3. {'topicFilter': 'sensor/connect', 'deviceNameJsonExpression': '${serialNumber}'}
    4. }
  2. mqtt.json里disconnectRequests配置项映射到__disconnect_requests_sub_topics字典,键名是主题(topicFilter),键值是mqtt.json里的disconnectRequests配置项,并且订阅相关主题(设备断开连接)

    1. {
    2. 'sensor/disconnect': {'topicFilter': 'sensor/disconnect', 'deviceNameJsonExpression': '${serialNumber}'}
    3. }
  3. mqtt.json里attributeRequests配置项映射到__attribute_requests_sub_topics字典,键名是主题(topicFilter),键值是mqtt.json里的attributeRequests配置项,并且订阅相关主题(设备属性相关)

    1. {
    2. 'v1/devices/me/attributes/request': {
    3. 'retain': false,
    4. 'topicFilter': 'v1/devices/me/attributes/request',
    5. 'deviceNameTopicExpression": "${SerialNumber}',
    6. 'attributeNameJsonExpression": "${sensorModel}'
    7. }
    8. }