Mosqkiller-API/apps/mosquito/models.py

222 lines
14 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pytz
from django.db import models
from django.utils import timezone
from smart.models import SmartModule, SmartPush
class MosqPost(models.Model):
device_id = models.CharField(db_index=True, max_length=100, verbose_name='设备ID')
count = models.PositiveIntegerField(blank=True, null=True, verbose_name="灭蚊数量")
signal = models.PositiveIntegerField(blank=True, null=True, verbose_name="信号")
energy = models.FloatField(blank=True, null=True, verbose_name='电量')
led_status = models.CharField(max_length=10, default='OFF', verbose_name='LED 状态')
load = models.CharField(max_length=100, blank=True, null=True, verbose_name='负载电压电流功率')
storage_battery = models.CharField(max_length=100, blank=True, null=True, verbose_name='电池电压电流功率')
solar_panels = models.CharField(max_length=100, blank=True, null=True, verbose_name='太阳能电压电流功率')
ac_power = models.CharField(max_length=100, blank=True, null=True, verbose_name='AC电压电流功率')
dc_power = models.CharField(max_length=100, blank=True, null=True, verbose_name='DC电压电流功率')
device_temp = models.FloatField(blank=True, null=True, verbose_name='设备温度')
create_time = models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name='更新时间')
class Meta:
unique_together = (
('device_id', 'create_time'),
)
verbose_name = '灭蚊灯数据'
verbose_name_plural = verbose_name
class MosqPostStatistic(models.Model):
total = models.PositiveIntegerField(verbose_name='总数')
increment = models.IntegerField(verbose_name='增量')
date = models.DateField(auto_now_add=False, verbose_name='日期', unique=True)
class Meta:
verbose_name = '统计报表'
verbose_name_plural = verbose_name
def __str__(self):
return '{0}: {1}'.format(self.date, self.increment)
class DevicePostStatistic(models.Model):
device_id = models.CharField(max_length=100, verbose_name='设备ID')
org = models.ForeignKey('Org', verbose_name='所在组织', on_delete='PROTECT')
total = models.PositiveIntegerField(verbose_name='总数')
increment = models.IntegerField(blank=True, null=True, verbose_name='增量')
date = models.DateField(auto_now_add=False, verbose_name='日期', unique=False)
create_time = models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name='更新时间')
class Meta:
unique_together = ('device_id', 'date')
verbose_name = '设备日志统计表'
verbose_name_plural = verbose_name
def __str__(self):
return '{0}: {1}'.format(self.device_id, self.total)
class Org(models.Model):
name = models.CharField(max_length=100, verbose_name='组织名称')
code = models.CharField(max_length=10, verbose_name='组织代码')
desc = models.CharField(max_length=100, blank='True', verbose_name='描述')
class Meta:
verbose_name = '客户组织'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
LED_CHOICE = (
('ON', 'ON'),
('OFF', 'OFF')
)
class DeviceInfo(models.Model):
device_id = models.CharField(max_length=100, unique=True, verbose_name='设备ID')
device_name = models.CharField(max_length=100, blank=True, null=True, verbose_name='设备名称')
chip_type = models.CharField(max_length=30, blank=True, null=True, verbose_name='芯片类型')
longitude = models.FloatField(blank=True, null=True, verbose_name='经度')
latitude = models.FloatField(blank=True, null=True, verbose_name='维度')
location = models.CharField(max_length=100, blank=True, null=True, verbose_name='地理位置')
location_group = models.CharField(max_length=100, blank=True, null=True, verbose_name='地域组')
led_lifetime = models.PositiveIntegerField(default=30000, verbose_name='LED 寿命')
launch_time = models.DateTimeField(default=timezone.datetime(2023, 1, 11, tzinfo=timezone.utc),
verbose_name='第一次启动时间')
last_connect = models.DateTimeField(blank=True, null=True, verbose_name='最近连接时间')
# mqtt 数据
count = models.PositiveIntegerField(blank=True, null=True, verbose_name='蚊子计数')
signal = models.PositiveIntegerField(blank=True, null=True, verbose_name="信号")
energy = models.FloatField(blank=True, null=True, verbose_name='电量')
led_status = models.CharField(max_length=10, choices=LED_CHOICE, default='OFF', verbose_name='LED 状态')
led_on_time = models.DateTimeField(null=True, blank=True, verbose_name='LED ON 时间')
load = models.CharField(max_length=100, blank=True, null=True, verbose_name='负载电压电流功率')
storage_battery = models.CharField(max_length=100, blank=True, null=True, verbose_name='电池电压电流功率')
solar_panels = models.CharField(max_length=100, blank=True, null=True, verbose_name='太阳能电压电流功率')
ac_power = models.CharField(max_length=100, blank=True, null=True, verbose_name='AC电压电流功率')
dc_power = models.CharField(max_length=100, blank=True, null=True, verbose_name='DC电压电流功率')
device_temp = models.FloatField(blank=True, null=True, verbose_name='设备温度')
ambient_temp = models.FloatField(blank=True, null=True, verbose_name='环境温度')
daily_charge_capacity = models.FloatField(blank=True, null=True, verbose_name='日充电量')
daily_discharge_capacity = models.FloatField(blank=True, null=True, verbose_name='日放电量')
org = models.ForeignKey(Org, verbose_name='所在组织', on_delete='PROTECT')
weather_device_id = models.CharField(max_length=100, blank=True, null=True, verbose_name='气象台ID')
weather_code = models.CharField(max_length=100, blank=True, null=True, verbose_name='气象台Code')
# 岭大专用字段
location_id = models.CharField(max_length=100, blank=True, null=True, verbose_name='地理位置IDLU')
point_x = models.FloatField(blank=True, null=True, verbose_name='POINT_XLU')
point_y = models.FloatField(blank=True, null=True, verbose_name='POINT_YLU')
create_time = models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name='更新时间')
class Meta:
verbose_name = '灭蚊灯设备'
verbose_name_plural = verbose_name
def __str__(self):
return self.device_id
class DeviceTempLog(models.Model):
device_id = models.CharField(max_length=100, verbose_name='设备ID')
temperature = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='温度')
humidity = models.DecimalField(max_digits=6, decimal_places=2, verbose_name='湿度')
last_time = models.DateTimeField(null=True, blank=True, db_index=True, verbose_name='日志时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = '设备温度湿度日志'
verbose_name_plural = verbose_name
def __str__(self):
return self.device_id
class WeatherStationInfo(models.Model):
device_id = models.CharField(unique=True, max_length=100, verbose_name='气象台ID')
device_name = models.CharField(max_length=100, blank=True, null=True, verbose_name='气象台名称')
longitude = models.FloatField(blank=True, null=True, verbose_name='经度')
latitude = models.FloatField(blank=True, null=True, verbose_name='维度')
org = models.ForeignKey(Org, verbose_name='所在组织', on_delete='PROTECT')
location_id = models.CharField(max_length=100, blank=True, null=True, verbose_name='地理位置IDLU')
point_x = models.FloatField(blank=True, null=True, verbose_name='POINT_XLU')
point_y = models.FloatField(blank=True, null=True, verbose_name='POINT_YLU')
class Meta:
verbose_name = '气象台设备'
verbose_name_plural = verbose_name
def __str__(self):
return self.device_id
class WeatherLog(models.Model):
data_time = models.DateTimeField(blank=True, null=True, verbose_name='时间')
device_id = models.CharField(max_length=100, verbose_name='台站编号')
device_name = models.CharField(max_length=255, blank=True, null=True, verbose_name='台站名称')
env_temp = models.CharField(max_length=255, blank=True, null=True, verbose_name='环温')
temperature1 = models.CharField(max_length=255, blank=True, null=True, verbose_name='温度1')
temperature2 = models.CharField(max_length=255, blank=True, null=True, verbose_name='温度2')
temperature3 = models.CharField(max_length=255, blank=True, null=True, verbose_name='温度3')
temperature4 = models.CharField(max_length=255, blank=True, null=True, verbose_name='温度4')
temperature5 = models.CharField(max_length=255, blank=True, null=True, verbose_name='温度5')
dew_point_temp = models.CharField(max_length=255, blank=True, null=True, verbose_name='露点温度')
env_humi = models.CharField(max_length=255, blank=True, null=True, verbose_name='环湿')
soil_humi1 = models.CharField(max_length=255, blank=True, null=True, verbose_name='土湿1')
soil_humi2 = models.CharField(max_length=255, blank=True, null=True, verbose_name='土湿2')
soil_humi3 = models.CharField(max_length=255, blank=True, null=True, verbose_name='土湿3')
co2 = models.CharField(max_length=255, blank=True, null=True, verbose_name='CO2')
evaporation = models.CharField(max_length=255, blank=True, null=True, verbose_name='蒸发')
air_pressure = models.CharField(max_length=255, blank=True, null=True, verbose_name='气压')
total_radiation_1_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='总辐射1瞬时')
scat_radiation_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='散辐射瞬时')
direct_radiation_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='直接辐射瞬时')
total_radiation_2_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='总辐射2瞬时')
net_radiation_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='净辐射瞬时')
pho_radiation_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='光合辐射瞬时')
uv_radiation_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='紫外辐射瞬时')
wind_direction = models.CharField(max_length=255, blank=True, null=True, verbose_name='风向')
wind_speed_ins = models.CharField(max_length=255, blank=True, null=True, verbose_name='瞬时风速')
wind_speed_2mins = models.CharField(max_length=255, blank=True, null=True, verbose_name='2分钟风速')
wind_speed_10mins = models.CharField(max_length=255, blank=True, null=True, verbose_name='10分钟风速')
rainfall_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='雨量间隔累计')
sunshine_time_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='日照时间隔累计')
total_radiation_1_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='总辐射1间隔累计')
scat_radiation_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='散辐射间隔累计')
direct_radiation_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='直接辐射间隔累计')
total_radiation_2_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='总辐射2间隔累计')
net_radiation_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='净辐射间隔累计')
pho_radiation_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='光合辐射间隔累计')
uv_radiation_interval_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='紫外辐射间隔累计')
rainfall_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='雨量日累计')
sunshine_time_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='日照时日累计')
total_radiation_1_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='总辐射1日累计')
scat_radiation_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='散辐射日累计')
direct_radiation_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='直接辐射日累计')
total_radiation_2_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='总辐射2日累计')
net_radiation_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='净辐射日累计')
pho_radiation_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='光合辐射日累计')
uv_radiation_daily_cum = models.CharField(max_length=255, blank=True, null=True, verbose_name='紫外辐射日累计')
light_intensity = models.CharField(max_length=255, blank=True, null=True, verbose_name='光照度')
power = models.CharField(max_length=255, blank=True, null=True, verbose_name='电量')
pm25 = models.CharField(max_length=255, blank=True, null=True, verbose_name='PM2.5')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
managed = False
db_table = 'weather_log'
verbose_name = '气象台数据日志'
verbose_name_plural = verbose_name
def __str__(self):
return self.device_id