处理器加载就是加载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 = False
for key in mandatory_keys:
if key not in handler:
discard = True
else:
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}\"}"
}]