def exec(**kwargs): """ kwargs topic -- data data topic payload payload api dn json data """ logger.info('MQTT 接收解析器 测试参数获取{}'.format(kwargs)) topic = kwargs.get('topic', bind_topic) msg = kwargs.get('data', dict()) payload = msg.get('payload') payload_data = payload.get('data') if payload_data: opkg_url = payload_data.get('opkg_url') if opkg_url: opkg = requests.get(opkg_url) md5hash = hashlib.md5(opkg.content) md5 = md5hash.hexdigest() print(f'字节流{md5}') qos = payload.get('qos', dict()) dn = payload.get('dn') redis_server.hmset(name='AntoUpdate:Subscribe:{}'.format(dn), mapping=dict(subscribe='1', payload=json.dumps(kwargs))) logger.debug("Topic - [{}] - Msg - [{}] - Qos - [{}].".format( topic, msg, qos)) redis_server.lpush(mqtt_topic_options.get('update_list.to_list'), json.dumps(kwargs)) logger.debug( "-------------------------- receive end ---------------------------------" )
def mqtt_on_connect(self, client, user_data, flags, rc): """MQTT 链接事件""" topic_qos_list = [ tuple(topic_qos.values()) for topic_qos in list( mqtt_topic_options.get('subscribe_topic').values()) ] mqtt_server.subscribe(topic_qos_list) self.public_app.app.is_run = True
def update_dev(api, timestamp, cmd, ver, id, dn, data_file, data_path): """ Upgrade the command line interface -- 更新交互 """ click.secho('API %s!' % api, bg='green', fg='red') click.secho('Timestamp %s!' % timestamp, bg='green', fg='red') with open(data_path, mode='r') as f: conext = f.read() name = mqtt_topic_options.get('update_list.from_list') redis_server.lpush(name, conext) click.secho(conext, fg='green')
def __init__(self): self.parser = self.get_parser() self.app = RedisQueueListenParsePipeline() self.app.redis_server = redis_server self.app.redis_queue_key = mqtt_topic_options.get( 'update_list.from_list') self.app.parse_callback = self.callback self.app.data_to_json = True self.app.parse_sleep = 0.3 self.app.is_run = True while self.is_listen: self.app.listen() time.sleep(5)
def exec(self, payload): logger.debug("推送测试测试数据 - {}".format(payload)) data = payload.get('data') if data: opkg_url = data.get('opkg_url') if opkg_url: opkg = requests.get(opkg_url) md5hash = hashlib.md5(opkg.content) md5 = md5hash.hexdigest() print(f'字节流{md5}*********************************') dn = payload.get('dn') redis_server.hmset(name='AntoUpdate:Publish:{}'.format(dn), mapping=dict( publish_state='1', payload=json.dumps(data), )) return dict(topic=mqtt_topic_options.get('update_topic.public_topic'), payload=payload)
# -*- coding: utf-8 -*- # Author: WangChao # Versions: 设备更新 import json import logging import os import requests import hashlib from app.pipeline_listen import RedisQueueListenParsePipeline from env.server import redis_server from env.topic_config import mqtt_topic_options logger = logging.getLogger('__name__') bind_topic = mqtt_topic_options.get('alert_topic.public_topic') mod_active = True class Callback: def options(self): self.app = RedisQueueListenParsePipeline() self.app.redis_queue_key = 'Queue:list:second' self.app.is_parser_listen = True self.app.parse_callback = self.handle self.app.data_to_json = True self.app.parse_sleep = 0.3 def handle(self, data): print(data, '*&*' * 20)
def callback(self, data): topic = data.get('topic', mqtt_topic_options.get('alert_topic.public_topic')) payload = data qos = data.get('qos', 1) mqtt_uuid = self.make_uuid() if topic is None: raise ExceptionError('topic not exist') else: logger.debug('topic: %s' % topic) if payload is None: raise ExceptionError('payload not exist') else: logger.debug('payload: %s' % payload) publish_list = list() # root_parser = self.parser.get('root').get('app.parser.public.' + topic) # sub_parser = self.parser.get('app.parser.public.' + topic) root_parser = self.parser.get('root').get('app.parser.public.' + 'update_public') sub_parser = self.parser.get('app.parser.public.' + 'update_public') if root_parser is None: publish_list.append( dict(topic=topic, payload=payload, qos=qos, mqtt_uuid=mqtt_uuid)) elif not sub_parser: logger.debug('-' * 50) logger.debug('exec parser: %s' % 'app.parser.public.' + topic) publish_list.append( self.get_publish(root_parser, payload, qos, mqtt_uuid)) else: payload = payload if not hasattr(root_parser, 'exec') else getattr( root_parser, 'exec')(payload) for name, mod in self.parser.get('root').items(): if name == 'app.parser.public.' + 'update_public': # if name == 'app.parser.public.' + topic: # todo 后期修改 logger.debug('-' * 50) logger.debug('exec parser: %s' % name) publish_list.append( self.get_publish(mod, payload, qos, mqtt_uuid)) for publish in publish_list: if publish is None: continue topic = publish.get('topic') payload = publish.get('payload') qos = publish.get('qos', qos) mqtt_uuid = publish.get('mqtt_uuid') if topic is None or payload is None: continue logger.debug('-' * 50) logger.debug('publish topic: %s' % topic) logger.debug('publish payload: %s' % payload) logger.debug('publish qos: %s' % qos) payload = payload if isinstance(payload, str) else json.dumps(payload) mqtt_server.publish(topic, payload, qos) logger.debug( "MQTT Public - Topic - [{}] - Mqtt_uid- [{}]- Payload - [{}] - Qos - [{}]." .format(topic, mqtt_uuid, payload, qos)) logger.debug( "-------------------------- public end -------------------------------" )