yf_yzl преди 2 години
родител
ревизия
5f21028a2a
променени са 1 файла, в които са добавени 10 реда и са изтрити 4 реда
  1. 10 4
      smartfarming/views/device.py

+ 10 - 4
smartfarming/views/device.py

@@ -47,12 +47,12 @@ class CbdScdXyDeviceSaveAPIView(APIView):
         try:
             request_data = request.body 
             data = json.loads(request_data)
-            logger.warning(f"测报灯 杀虫灯 性诱 设备及数据入库原数据: {data}")
             topic = data.get("topic")
             payload = data.get("payload")
             cmd = payload.get("cmd")
             topic_msg = topic.split("/")
             now = int(time.time())
+            logger.warning(topic_msg)
             if topic_msg and len(topic_msg) == 5 and cmd:
                 device_id = topic_msg[-1]
                 try:
@@ -60,10 +60,13 @@ class CbdScdXyDeviceSaveAPIView(APIView):
                     device_type_id = device_type_en.get(device_type)
                     if device_type_id == 2:
                         model = MongoSCDData
+                        logger.warning(f"杀虫灯数据入库原数据: {data}")
                     elif device_type_id == 3:
                         model = MongoCBDData
+                        logger.warning(f"测报灯数据入库原数据: {data}")
                     elif device_type_id == 4:
                         model = MongoXYCBData
+                        logger.warning(f"性诱数据入库原数据: {data}")
                     # 在设备信息表中查找是否有数据,如果没有数据则增加
                     device_name = device_type_zh.get(str(device_type_id))
                     device, is_created = MongoDevice.objects.get_or_create(
@@ -83,6 +86,7 @@ class CbdScdXyDeviceSaveAPIView(APIView):
                         ext = payload.get("ext")
                         if ext:
                             # 获取设备上报的时间,同步设备
+                            uptime = 0
                             try:
                                 stamp = ext.get("stamp")
                                 uptime = int((datetime.datetime.strptime(stamp, "%Y%m%d%H%M%S")).timestamp())
@@ -92,13 +96,13 @@ class CbdScdXyDeviceSaveAPIView(APIView):
                             model.objects.create(
                                 device_id = device.id,
                                 device_data = str(ext),
-                                addtime = now
+                                addtime = uptime if uptime else now
                             )
                             lng = ext.get("lng")
                             lat = ext.get("lat")
                             dver_num = ext.get("dver")
                             device.device_status = 1
-                            device.uptime = uptime
+                            device.uptime = uptime if uptime else now
                             if dver_num:
                                 device.dver_num = dver_num
                             if lng and lat and dver_num and device.gps != 0:
@@ -113,7 +117,7 @@ class CbdScdXyDeviceSaveAPIView(APIView):
                                     device.district = district
                                 device.save()
                     elif cmd == "offline":
-                        ext = data.get("ext")
+                        ext = payload.get("ext")
                         if ext:
                             # 增加设备数据
                             model.objects.create(
@@ -124,7 +128,9 @@ class CbdScdXyDeviceSaveAPIView(APIView):
                             # 更新设备状态
                             device = MongoDevice.objects.filter(device_id=device_id).first()
                             device.device_status = 0
+                            device.uptime = now
                             device.save()
+                            return Response({"code": 0, "msg": "设备离线"})
                     return Response({"code": 0, "msg": "success"})
                 except Exception as e:
                     logger.error(f"测报灯设备 {device_id} 处理上报数据或增加设备失败,错误原因:{e.args}")