@@ -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 |