fix: 区分一二代,signal/energy/status

This commit is contained in:
fxxian 2024-03-26 21:04:21 +08:00
parent 6f4bff7e7e
commit befe00d0cf
1 changed files with 24 additions and 5 deletions

View File

@ -194,6 +194,9 @@ class DeviceCountWithInfoSerializer(DeviceCountSerializer):
return online return online
device_status_map = {'ON': 1, 'OFF': 0}
class DeviceInfoSerializer(serializers.ModelSerializer): class DeviceInfoSerializer(serializers.ModelSerializer):
device_name = serializers.SerializerMethodField() device_name = serializers.SerializerMethodField()
status = serializers.SerializerMethodField() status = serializers.SerializerMethodField()
@ -221,6 +224,7 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.latest = None self.latest = None
self.cur_device = None self.cur_device = None
self.mosq_device_info = None
def get_device_name(self, obj): def get_device_name(self, obj):
qs = MosquitoDeviceInfo.objects.filter(device_id=obj.device_id) qs = MosquitoDeviceInfo.objects.filter(device_id=obj.device_id)
@ -230,8 +234,14 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
return device.device_name return device.device_name
return None return None
@staticmethod def get_status(self, obj):
def get_status(obj): # 区分一代和二代设备
if obj.chip_type == 'AIR-V2':
mosq_device_info = MosquitoDeviceInfo.objects.filter(device_id=obj.device_id).first()
if mosq_device_info and mosq_device_info.led_status:
self.mosq_device_info = mosq_device_info
return device_status_map[mosq_device_info.led_status]
return obj.online return obj.online
def get_count(self, obj) -> str: def get_count(self, obj) -> str:
@ -239,20 +249,29 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
# 区分一代和二代设备 # 区分一代和二代设备
if obj.chip_type == 'AIR-V2': if obj.chip_type == 'AIR-V2':
mosq_device_info = MosquitoDeviceInfo.objects.filter(device_id=obj.device_id).first() if self.mosq_device_info and self.mosq_device_info.count:
if mosq_device_info and mosq_device_info.count: return self.mosq_device_info.count
return mosq_device_info.count
if self.latest: if self.latest:
return self.latest['count'] return self.latest['count']
return '0' return '0'
def get_signal(self, obj) -> str: def get_signal(self, obj) -> str:
# 区分一代和二代设备
if obj.chip_type == 'AIR-V2':
if self.mosq_device_info and self.mosq_device_info.signal:
return self.mosq_device_info.signal
if self.latest: if self.latest:
return self.latest['csq'] return self.latest['csq']
return '0' return '0'
def get_energy(self, obj) -> str: def get_energy(self, obj) -> str:
# 区分一代和二代设备
if obj.chip_type == 'AIR-V2':
if self.mosq_device_info and self.mosq_device_info.energy:
return self.mosq_device_info.energy
if self.latest: if self.latest:
if float(self.latest['vol']) <= 100: if float(self.latest['vol']) <= 100:
return '{}{}'.format(round(float(self.latest['vol']), 1), '%') return '{}{}'.format(round(float(self.latest['vol']), 1), '%')