处理器加载就是加载mqtt.json配置项到不同的字典中去。
处理加载函数:load_handlers
def load_handlers(self, handler_flavor, mandatory_keys, accepted_handlers_list):if handler_flavor not in self.config:else:for handler in self.config.get(handler_flavor):discard = Falsefor key in mandatory_keys:if key not in handler:discard = Trueelse:if discard:else:accepted_handlers_list.append(handler)
去掉日志打印,发现最后只有一行代码处理实际的业务逻辑:accepted_handlers_list.append(handler),就是向函数入参accepted_handlers_list添加handler,handler是mqtt.json配置文件里的配置项,有以下几种handler
__mapping,包括topicFilter和converter
[{'topicFilter': 'sensor/data', 'converter': {'type': 'json', 'deviceNameJsonExpression': '${serialNumber}', 'deviceTypeJsonExpression': '${sensorType}', 'timeout': 60000, 'attributes': [{'type': 'string', 'key': 'model', 'value': '${sensorModel}'}, {'type': 'string', 'key': '${sensorModel}', 'value': 'on'}], 'timeseries': [{'type': 'double', 'key': 'temperature', 'value': '${temp}'}, {'type': 'double', 'key': 'humidity', 'value': '${hum}'}, {'type': 'boolean', 'key': 'occupancy', 'value': '${occ}'}, {'type': 'int', 'key': 'state', 'value': '${state}'}]}}]
__server_side_rpc
[{"deviceNameFilter": ".*","methodFilter": "getState","requestTopicExpression": "sensor/${deviceName}/request/${methodName}","responseTopicExpression": "sensor/${deviceName}/response/${methodName}","responseTimeout": 10000,"valueExpression": "${params}"},{"deviceNameFilter": ".*","methodFilter": "setState","requestTopicExpression": "sensor/${deviceName}/request/${methodName}","valueExpression": "${params}"}]
__connect_requests
[{"topicFilter": "sensor/connect","deviceNameJsonExpression": "${serialNumber}"}]
__disconnect_requests
[{"topicFilter": "sensor/disconnect","deviceNameJsonExpression": "${serialNumber}"}]
__attribute_requests
__attribute_updates
[{"deviceNameFilter": ".*","attributeFilter": "uploadFrequency","topicExpression": "sensor/${serialNumber}/${attributeKey}","valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"}]
