@@ -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 |
+ ] |
@@ -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')])) |
@@ -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 |
|
@@ -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 |
+ ] |
@@ -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 |
|
@@ -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) |
@@ -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 |