| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- # coding:utf-8
- import os
- import sys
- import time
- local_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
- if local_path not in sys.path:
- sys.path.append(local_path)
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "kedong.settings")
- from django.conf import settings
- from kedong.tools import RedisPool
- from scripts.tools.utils import dashuju_pub_mqtt
- cbd_redis_pool = RedisPool().get_redis_pool(settings.redis_db["cbd"])
- def re_cbd_publish(payload):
- if settings.DEBUG:
- return None
- imei_id = payload['imei_id']
- at, ah = payload['at'], payload['ah']
- try:
- at = str(round(float(at)))
- except ValueError as e:
- at = "25"
- try:
- ah = str(round(float(ah)))
- except ValueError as e:
- print('at_error', e, payload)
- ah = "30"
- publics = "/yfkj/cbd/sub/#"
- TASK_TOPIC = publics.replace("#", imei_id)
- payload_1 = {"cmd": "sensor", "ext": {"new_hum": ah, "new_tem": at}}
- dashuju_pub_mqtt(TASK_TOPIC, payload_1)
- def re_pub_cbd_publish(data):
- if settings.DEBUG:
- return None
- imei_id = data['imei_id']
- payload = data['payload']
- TASK_TOPIC = ""
- if TASK_TOPIC:
- dashuju_pub_mqtt(TASK_TOPIC, payload)
- class CbdDeviceController(DeviceController):
- def cbd_device(self, data):
- table_name = "sa_device_cbd_data"
- DEVICE_NAME = "测报灯"
- DTYPE = 3
- serverconf = ''
- payload = data['payload']
- imei_id = data['imei_id']
- re_cbd_publish(data)
- re_pub_cbd_publish(data)
- ext = payload["ext"]
- dver_num = ext.get("dver", "")
- # 0-手动,1-GPS,2-基站
- gps = ext["gps"]
- lng, lat = data['lng'], data['lat']
- device_code = 0
- try:
- device_code = int(ext.get("vtype", 0))
- except Exception as e:
- pass
- now_time = int(time.time())
- device_config = {
- "cmd": "paramconf",
- "ext": {
- "hst": ext.get("hst", "0"),
- "collt": ext.get("collt", ""),
- "et": ext.get("et", ""),
- "datt": ext.get("dat_f", 30),
- "shake_sec": ext.get("shake_sec", 1),
- "tpl": ext.get("tpl", 5),
- "shake": ext.get("shake", 0),
- "tph": ext.get("tph", 0),
- "ts": ext.get("ts", 0),
- "st": ext.get("st", 0),
- "htim": ext.get("htim", 0),
- "tt": ext.get("tt", 0),
- "ds": ext.get("ds", 0),
- "ws": ext.get("ws", 0),
- }
- }
- temp_dict = {
- 'device_id': imei_id,
- 'device_type_id': DTYPE,
- 'dver_num': dver_num,
- 'addtime': now_time,
- 'uptime': now_time,
- 'device_name': DEVICE_NAME,
- 'lng': lng,
- 'lat': lat,
- 'gps': gps,
- 'serverconf': serverconf,
- 'device_status': 1,
- 'device_code': device_code
- }
- return temp_dict, device_config, table_name
- def xct_device(self, data):
- """吸虫塔设备"""
- table_name = "sa_device_xct_data"
- DEVICE_NAME = "吸虫塔"
- # 设备类型id
- DTYPE = 12
- serverconf = ''
- payload = data['payload']
- imei_id = data['imei_id']
- re_cbd_publish(data)
- ext = payload["ext"]
- dver_num = ext["dver"]
- # 0-手动,1-GPS,2-基站
- gps = ext["gps"]
- lng, lat = data["lng"], data["lat"]
- now_time = int(time.time())
- device_config = {
- "cmd": "paramconf",
- "ext": {
- "dat_f": ext.get("dat_f", 30), # 数据上传时间
- "shake_sec": ext["shake_sec"], # 震动时间
- "shake": ext["shake"], # 震动开关, 1开启 0关闭
- "ds": ext["ds"], # 设备开关机,1开机,0关机
- "dver": ext["dver"], # 版本号
- "st": ext["st"],
- "et": ext["et"],
- }
- }
- temp_dict = {
- 'device_id': imei_id, 'device_type_id': DTYPE, 'dver_num': dver_num,
- 'addtime': now_time, 'uptime': now_time, 'device_name': DEVICE_NAME,
- 'lng': lng, 'lat': lat, 'gps': gps, 'serverconf': serverconf, 'device_status': 1,
- 'device_code': DTYPE
- }
- return temp_dict, device_config, table_name
- def make_device_config(self, data):
- payload = data['payload']
- ext = payload["ext"]
- try:
- vtype = int(ext["vtype"])
- if vtype == 6:
- return self.xct_device(data)
- except Exception as e:
- pass
- return self.cbd_device(data)
- if __name__ == "__main__":
- # 正常消息订阅
- PUBLICS = "/yfkj/cbd/pub/#"
- # 离线消息订阅
- OFFLINE = "/yfkj/cbd/offline/#"
- cbd = CbdDeviceController()
- key = "/yfkj/cbd"
- while True:
- try:
- data = cbd_redis_pool.bpop(key)
- now_time = int(time.time())
- create_time = data['create_time']
- if now_time - create_time > 3600:
- continue
- cbd.device_controller(data)
- except Exception as e:
- print(e)
|