123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import threading
- import time
- import uuid
- import thread
- from django.conf import settings
- from base import init_env
- import simplejson as json
- init_env(interactive = True)
- from apps.web.device.models import Device, DeviceDict
- from apps.web.core.networking import MessageSender
- from apps.web.constant import Const, DeviceCmdCode, DeviceOnlineStatus
- from apps.web.core.mqtt_client import MqttClient
- doing_dict = {}
- print 'nowtime = %s start update device now.....' % datetime.datetime.now()
- def on_connect(client, userdata, flags, rc):
- client.subscribe('+/+/209', qos = Const.MQTT_QOS)
- print('subscribe topic(%s) success' % '+/+/209')
- def on_message(mqttc, obj, msg):
- msgDict = json.loads(bytes.decode(msg.payload))
- imei = msgDict['IMEI']
- print('209 has received. msg = %s' % str(msgDict))
- doing_dict.pop(imei, None)
- 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)
- objs = Device.get_collection().find(
- {'$and': [{'softVer': {'$lt': 'v3.0.999'}}, {'softVer': {'$gte': 'v3.0.0'}}]})
- count = 0
- devNoList = [str(obj['devNo']) for obj in objs]
- for devNo in devNoList:
- try:
- if count >= 1:
- break
- dev = Device.get_dev(devNo) # type:DeviceDict
- if dev.online != DeviceOnlineStatus.DEV_STATUS_ONLINE:
- print 'offline. devNo = %s' % devNo
- continue
- result = MessageSender.send(device = dev, cmd = DeviceCmdCode.GET_DEVINFO, payload = {
- 'IMEI': devNo, 'fields': ['driverCode', 'core_ver']
- })
- if result['rst'] != 0:
- print 'send 201 cmd error,imei=%s' % devNo
- continue
- cmdPara = {"IMEI": devNo, "ota_set": {
- "fw_url": "http://develop.5tao5ai.com/uploaded/SMART_BOX_4.0.111_Luat_V0020_8955_SSL.bin"}}
- result = MessageSender.send(device = dev, cmd = DeviceCmdCode.SET_DEVINFO, payload = cmdPara)
- if result['rst'] != 0:
- print 'send updating cmd error,imei=%s' % devNo
- else:
- print 'success for imei=%s,send the message' % devNo
- count = count + 1
- doing_dict[devNo] = int(time.time())
- while True:
- if len(doing_dict) > 5:
- print('queue is full.')
- for imei in list(doing_dict.keys()):
- start_time = doing_dict[imei]
- if (int(time.time()) - start_time) > 5 * 60:
- doing_dict.pop(imei, None)
- time.sleep(5)
- else:
- print('queue is not full')
- break
- except Exception, e:
- print 'some exception =%s' % e
- print('finished')
- mqttc1883.loop_stop()
- mqttc1883.disconnect()
- mqttc1883.close()
- mqttc1884.loop_stop()
- mqttc1884.disconnect()
- mqttc1884.close()
|