diff --git a/apps/mosquito/mqtt_task.py b/apps/mosquito/mqtt_task.py index 9bf5227..3bef639 100644 --- a/apps/mosquito/mqtt_task.py +++ b/apps/mosquito/mqtt_task.py @@ -5,6 +5,7 @@ import django from typing import Dict from pathlib import Path from enum import Enum +from datetime import datetime import paho.mqtt.client as mqtt @@ -16,7 +17,7 @@ if project_path not in sys.path: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mosqkiller.settings") django.setup() -from mosquito.models import MosqPost, DeviceInfo +from mosquito.models import MosqPost, DeviceInfo, DevicePostStatistic, Org # MQTT 配置 MQTT_BROKER = "8.217.112.255" @@ -50,6 +51,7 @@ def on_message(client, userdata, message): try: update_device_info(device_id, post_data=post_data) create_mosq_post(device_id, post_data=post_data) + update_mosq_device_statistic(device_id, post_data=post_data) print(f"Device: {device_id} update & create post success") except KeyError as e: print(f"Device: {device_id} update & create post failed") @@ -120,6 +122,25 @@ def create_mosq_post(device_id: str, post_data: Dict): dc_power=dc_power) +def update_mosq_device_statistic(device_id: str, post_data: Dict): + datetime_format = "%Y-%m-%d %H:%M:%S" + cur_date = datetime.strptime(post_data['time'], datetime_format).date() + old_record = DevicePostStatistic.objects.filter(device_id=device_id, date=cur_date).first() + org = Org.objects.get(id=1) + incr = 0 + cur_total = post_data['count'] + if old_record: + device = DeviceInfo.objects.filter(device_id=device_id).first() + if device: + org = device.org + incr = cur_total - old_record.total + DevicePostStatistic.objects.create(device_id=device_id, + date=cur_date, + total=cur_total, + increment=incr, + org=org) + + def to_string(post_data: Dict, power_type: PowerType) -> str: _type = power_type.value load_v = post_data[_type]['voltage']