# -*- coding: utf-8 -*- # !/usr/bin/env python import sys import uuid import os PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..') sys.path.insert(0, PROJECT_ROOT) import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.{env}'.format(env = 'production')) from django.conf import settings from script.base import init_env import simplejson as json init_env(interactive = False) from apps.web.core.networking import MessageSender from apps.web.device.models import Device, DeviceDict from apps.web.constant import Const, DeviceOnlineStatus from apps.web.core.mqtt_client import MqttClient driver_code = '100230' driver_ver = '1.0.5' driver_path = 'http://121.43.232.118/uploaded/version/drivers/task/100230_uart_huandian_anqi/default.driver' max_count = -1 mqttc1883 = None mqttc1884 = None try: def on_connect(client, userdata, flags, rc): pass def on_message(mqttc, obj, msg): # type: (MqttClient, obj, json)->None msgDict = json.loads(bytes.decode(msg.payload)) imei = msgDict['IMEI'] print 'msg dict is: {}'.format(msgDict) def on_disconnect(client, userdata, self): print('exit. client = %s' % str(client)) mqttc1883 = MqttClient(client_id = 'webapp_' + str(uuid.uuid1())) try: mqttc1883.on_message = on_message mqttc1883.on_connect = on_connect mqttc1883.on_disconnect = on_disconnect mqttc1883.username_pw_set(settings.MQTT_USER, settings.MQTT_PSWD) mqttc1883.connect(settings.MQTT_HOSTNAME, 1883, 60) mqttc1883.loop_start() except Exception as e: print(e) mqttc1884 = MqttClient(client_id = 'webapp_' + str(uuid.uuid1())) try: mqttc1884.on_message = on_message mqttc1884.on_connect = on_connect mqttc1884.on_disconnect = on_disconnect mqttc1884.username_pw_set(settings.MQTT_USER, settings.MQTT_PSWD) mqttc1884.connect(settings.MQTT_HOSTNAME, 1884, 60) mqttc1884.loop_start() except Exception as e: print(e) count = 0 objs = Device.get_collection().find({'driverCode':driver_code}) for obj in objs: try: if max_count != -1 and count >= 1: print 'max count reach.' break devNo = obj['devNo'] dev = Device.get_dev(devNo) # type: DeviceDict print(dev) if dev.online != DeviceOnlineStatus.DEV_STATUS_ONLINE: print '{} is offline.'.format(devNo) continue if dev['driverVersion'] == 'v{}'.format(driver_ver): continue cmdPara = {'IMEI': devNo, "driver_set": { "driver_url": driver_path}} print cmdPara result = MessageSender.send(device = dev, cmd = Const.CMD_CODE_SET_DEVINFO, payload = cmdPara, timeout = 15) if result['rst'] != 0: print 'IMEI({}) failure.'.format(devNo) continue else: count = count + 1 except Exception, e: print 'some exception =%s' % e finally: if mqttc1883: mqttc1883.loop_stop() mqttc1883.disconnect() mqttc1883.close() if mqttc1884: mqttc1884.loop_stop() mqttc1884.disconnect() mqttc1884.close() print('finished')