:art: ignore_temperature

huangqimin001 3 ans auparavant
Parent
Commettre
820941f656

+ 23 - 0
account/migrations/0007_auto_20210821_2258.py

@@ -0,0 +1,23 @@
1
+# Generated by Django 3.2.6 on 2021-08-21 14:58
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('account', '0006_auto_20210818_1022'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='administratorinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='userinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+    ]

+ 10 - 3
api/eqpt_views.py

@@ -15,6 +15,7 @@ from TimeConvert import TimeConvert as tc
15 15
 from equipment.models import (IsolationPointInfo, IsolationPointUserInfo, ThermometerEquipmentInfo,
16 16
                               ThermometerMeasureLogInfo)
17 17
 from utils.error.errno_utils import IsolationPointStatusCode, ThermometerEquipmentStatusCode
18
+from utils.redis.rcharging import get_charging_delta_stamp, set_charging_stamp
18 19
 from utils.redis.rscreen import get_screen_info, set_screen_info
19 20
 
20 21
 
@@ -309,14 +310,19 @@ def mqtt_upload_temperature(payload):
309 310
     chg_sta = payload.get('chg_sta', False)
310 311
     # 电量剩余 65%,有效电量范围[0, 100]
311 312
     bat = int(payload.get('bat', 0))
313
+    # 体温贴 mac,固定 6 个字节,12 个字符
314
+    macid = payload.get('mac', '')
315
+    macid = f'{macid[:2]}:{macid[2:4]}:{macid[4:6]}:{macid[6:8]}:{macid[8:10]}:{macid[10:12]}'
312 316
     # 充电状态 or (电量剩余 100% + 温度超过 37 度),温度忽略
313 317
     ignore_temperature = False
314 318
     if chg_sta or (bat == 100 and temperature > 37):
315 319
         ignore_temperature = True
316 320
         chg_sta = True
321
+        set_charging_stamp(macid)
322
+    # 过去半小时内如果有充电记录的,当前温度大于37度的过滤掉
323
+    if temperature > 37 and get_charging_delta_stamp(macid) < 1800:
324
+        ignore_temperature = True
317 325
 
318
-    macid = payload.get('mac', '')
319
-    macid = f'{macid[:2]}:{macid[2:4]}:{macid[4:6]}:{macid[6:8]}:{macid[8:10]}:{macid[10:12]}'
320 326
     current_time = payload.get('current_time', '')
321 327
     start_stamp = end_stamp = tc.string_to_timestamp(current_time)
322 328
 
@@ -331,7 +337,7 @@ def mqtt_upload_temperature(payload):
331 337
     except IsolationPointInfo.DoesNotExist:
332 338
         return
333 339
 
334
-    ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MQTT, upload_temperature_info=payload, chg_sta=chg_sta)
340
+    ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MQTT, chg_sta=chg_sta, upload_temperature_info=payload)
335 341
 
336 342
     try:
337 343
         ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk)
@@ -343,6 +349,7 @@ def mqtt_upload_temperature(payload):
343 349
                 point_id=eqpt.point_id,
344 350
                 macid=macid,
345 351
                 chg_sta=False,
352
+                ignore_temperature=False,
346 353
                 created_at__gte=tc.utc_datetime(hours=-1),
347 354
             ).aggregate(Max('temperature')).get('temperature__max') or 0
348 355
             ipui.observed_ymds = list(set(ipui.observed_ymds + [tc.local_string(format='%Y-%m-%d')]))

+ 1 - 1
equipment/admin.py

@@ -25,7 +25,7 @@ class ThermometerEquipmentInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
25 25
 
26 26
 
27 27
 class ThermometerMeasureLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
28
-    list_display = ('point_id', 'macid', 'sn', 'chg_sta', 'start_stamp', 'end_stamp', 'temperature', 'temperature_src', 'status', 'updated_at', 'created_at')
28
+    list_display = ('point_id', 'macid', 'sn', 'start_stamp', 'end_stamp', 'temperature_src', 'temperature', 'chg_sta', 'ignore_temperature', 'status', 'updated_at', 'created_at')
29 29
     list_filter = ('point_id', 'temperature_src', 'status')
30 30
 
31 31
 

+ 43 - 0
equipment/migrations/0021_auto_20210821_2258.py

@@ -0,0 +1,43 @@
1
+# Generated by Django 3.2.6 on 2021-08-21 14:58
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('equipment', '0020_thermometerequipmentinfo_ipui_pks'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='thermometermeasureloginfo',
15
+            name='ignore_temperature',
16
+            field=models.BooleanField(default=False, help_text='是否忽略温度', verbose_name='ignore_temperature'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='isolationpointfieldpoolinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='isolationpointinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='isolationpointuserinfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='thermometerequipmentinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='thermometermeasureloginfo',
40
+            name='status',
41
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
42
+        ),
43
+    ]

+ 2 - 2
equipment/models.py

@@ -208,11 +208,11 @@ class ThermometerMeasureLogInfo(BaseModelMixin):
208 208
     start_stamp = models.BigIntegerField(_('start_stamp'), default=0, help_text='测温开始时间戳')
209 209
     end_stamp = models.BigIntegerField(_('end_stamp'), default=0, help_text='测温结束时间戳')
210 210
 
211
-    temperature = models.FloatField(_('temperature'), default=0, help_text='用户体温')
212
-
213 211
     temperature_src = models.IntegerField(_('temperature_src'), choices=TEMPERATURE_SRC_TUPLE, default=CALLBACK, help_text='用户体温来源')
212
+    temperature = models.FloatField(_('temperature'), default=0, help_text='用户体温')
214 213
 
215 214
     chg_sta = models.BooleanField(_(u'chg_sta'), default=False, help_text='充电状态,true 充电,false 未充电')
215
+    ignore_temperature = models.BooleanField(_(u'ignore_temperature'), default=False, help_text='是否忽略温度')
216 216
 
217 217
     upload_temperature_info = models.TextField(_('upload_temperature_info'), blank=True, null=True, help_text='测温结果上传信息')
218 218
 

+ 18 - 0
utils/redis/rcharging.py

@@ -0,0 +1,18 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from TimeConvert import TimeConvert as tc
4
+
5
+from utils.redis.connect import r
6
+from utils.redis.rkeys import TWJC_CHARGING_STAMP_HASH
7
+
8
+
9
+def set_charging_stamp(macid):
10
+    r.hset(TWJC_CHARGING_STAMP_HASH, macid, tc.utc_timestamp())
11
+
12
+
13
+def get_charging_stamp(macid):
14
+    return r.hgetint(TWJC_CHARGING_STAMP_HASH, macid)
15
+
16
+
17
+def get_charging_delta_stamp(macid):
18
+    return tc.utc_timestamp() - get_charging_stamp(macid)

+ 2 - 0
utils/redis/rkeys.py

@@ -4,3 +4,5 @@ TWJC_QRCODE_URL_HASH = 'twjc:qrcode:url:hash'  # HASH, scene:qrcode_url
4 4
 TWJC_OLD_TEMPERATURE_HASH = 'twjc:old:temperature:hash'  # HASH, point_id+macid:temperature
5 5
 TWJC_POINT_INFO = 'twjc:point:info:%s'  # uuid, point_id
6 6
 TWJC_SCREEN_INFO = 'twjc:screen:info:%s'  # point_id, screen_info
7
+
8
+TWJC_CHARGING_STAMP_HASH = 'twjc:charging:stamp:hash'  # HASH, macid:stamp