222 lines
14 KiB
Python
222 lines
14 KiB
Python
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='地理位置ID(LU)')
|
||
|
||
point_x = models.FloatField(blank=True, null=True, verbose_name='POINT_X(LU)')
|
||
point_y = models.FloatField(blank=True, null=True, verbose_name='POINT_Y(LU)')
|
||
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='地理位置ID(LU)')
|
||
point_x = models.FloatField(blank=True, null=True, verbose_name='POINT_X(LU)')
|
||
point_y = models.FloatField(blank=True, null=True, verbose_name='POINT_Y(LU)')
|
||
|
||
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
|