mirror of
https://gitee.com/qpy-solutions/tracker-v2.git
synced 2025-05-18 18:48:25 +08:00
update: 1. QuecThing timeout; 2. api doc; delete: alert.py
This commit is contained in:
parent
7ec375141e
commit
9f9fdb9f28
@ -1,30 +0,0 @@
|
||||
|
||||
from usr import settings
|
||||
from usr.logging import getLogger
|
||||
from usr.common import Singleton
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class AlertMonitor(Singleton):
|
||||
'''
|
||||
Recv alert signals and process them
|
||||
'''
|
||||
def __init__(self, alert_read_cb=None):
|
||||
self.alert_read_cb = alert_read_cb
|
||||
|
||||
def post_alert(self, alert_code, alert_info):
|
||||
if settings.ALERTCODE.get(alert_code):
|
||||
current_settings = settings.settings.get()
|
||||
alert_status = current_settings.get('app', {}).get('sw_' + settings.ALERTCODE.get(alert_code))
|
||||
if alert_status:
|
||||
if self.alert_read_cb:
|
||||
return self.alert_read_cb(settings.ALERTCODE.get(alert_code), alert_info)
|
||||
else:
|
||||
log.warn('Alert callback is not defined.')
|
||||
else:
|
||||
log.warn('%s status is %s' % (settings.ALERTCODE.get(alert_code), alert_status))
|
||||
else:
|
||||
log.error('altercode (%s) is not exists. alert info: %s' % (alert_code, alert_info))
|
||||
|
||||
return False
|
@ -1,7 +1,10 @@
|
||||
import utime
|
||||
import osTimer
|
||||
import quecIot
|
||||
# from queue import Queue
|
||||
from misc import Power
|
||||
from queue import Queue
|
||||
from usr.logging import getLogger
|
||||
from usr.settings import settings
|
||||
|
||||
DATA_NON_LOCA = 0x0
|
||||
DATA_LOCA_NON_GPS = 0x1
|
||||
@ -51,8 +54,8 @@ object_model_code = {i[1][0]: i[0] for i in object_model}
|
||||
class QuecThing(object):
|
||||
def __init__(self, pk, ps, dk, ds, downlink_queue):
|
||||
self.downlink_queue = downlink_queue
|
||||
# self.post_result_wait_queue = Queue(maxsize=16)
|
||||
self.post_result = []
|
||||
self.post_result_wait_queue = Queue(maxsize=16)
|
||||
self.quec_timer = osTimer()
|
||||
|
||||
quecIot.init()
|
||||
quecIot.setEventCB(self.eventCB)
|
||||
@ -61,27 +64,21 @@ class QuecThing(object):
|
||||
quecIot.setServer(1, "iot-south.quectel.com:2883")
|
||||
quecIot.setConnmode(1)
|
||||
|
||||
def quec_start_timer(self):
|
||||
current_settings = settings.get()
|
||||
self.quec_timer.start(current_settings['sys']['quecIot_timeout'] * 1000, 2, self.quec_timer_callback)
|
||||
|
||||
def quec_timer_callback(self):
|
||||
current_settings = settings.get()
|
||||
utime.sleep(current_settings['sys']['quecIot_timeout'])
|
||||
Power.powerRestart()
|
||||
|
||||
@staticmethod
|
||||
def rm_empty_data(data):
|
||||
for k, v in data.items():
|
||||
if not v:
|
||||
del data[k]
|
||||
|
||||
def get_post_result(self):
|
||||
res = True
|
||||
count = 0
|
||||
while count < 10:
|
||||
if self.post_result:
|
||||
res = self.post_result.pop()
|
||||
break
|
||||
count += 1
|
||||
utime.sleep(1)
|
||||
|
||||
return res
|
||||
|
||||
def put_post_result(self, res):
|
||||
self.post_result.append(res)
|
||||
|
||||
def post_data(self, data_type, data):
|
||||
if data_type == DATA_NON_LOCA:
|
||||
for k, v in data.items():
|
||||
@ -91,8 +88,9 @@ class QuecThing(object):
|
||||
v = {object_model_code.get(ik) if object_model_code.get(ik) else ik: iv for ik, iv in v.items()}
|
||||
phymodelReport_res = quecIot.phymodelReport(1, {object_model_code.get(k): v})
|
||||
if phymodelReport_res:
|
||||
# res = self.post_result_wait_queue.get()
|
||||
res = self.get_post_result()
|
||||
self.quec_start_timer()
|
||||
res = self.post_result_wait_queue.get()
|
||||
self.quec_timer.stop()
|
||||
if res:
|
||||
v = {}
|
||||
continue
|
||||
@ -107,15 +105,17 @@ class QuecThing(object):
|
||||
elif data_type == DATA_LOCA_GPS:
|
||||
locReportOutside_res = quecIot.locReportOutside(data)
|
||||
if locReportOutside_res:
|
||||
# return self.post_result_wait_queue.get()
|
||||
return self.get_post_result()
|
||||
self.quec_start_timer()
|
||||
return self.post_result_wait_queue.get()
|
||||
self.quec_timer.stop()
|
||||
else:
|
||||
return False
|
||||
elif data_type == DATA_LOCA_NON_GPS:
|
||||
locReportInside_res = quecIot.locReportInside(data)
|
||||
if locReportInside_res:
|
||||
# return self.post_result_wait_queue.get()
|
||||
return self.get_post_result()
|
||||
self.quec_start_timer()
|
||||
return self.post_result_wait_queue.get()
|
||||
self.quec_timer.stop()
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
@ -145,28 +145,22 @@ class QuecThing(object):
|
||||
elif event == 4:
|
||||
if errcode == 10200:
|
||||
log.info('Data sending succeeded.')
|
||||
# self.post_result_wait_queue.put(True)
|
||||
self.put_post_result(True)
|
||||
self.post_result_wait_queue.put(True)
|
||||
elif errcode == 10210:
|
||||
log.info('Object model data sending succeeded.')
|
||||
# self.post_result_wait_queue.put(True)
|
||||
self.put_post_result(True)
|
||||
self.post_result_wait_queue.put(True)
|
||||
elif errcode == 10220:
|
||||
log.info('Location data sending succeeded.')
|
||||
# self.post_result_wait_queue.put(True)
|
||||
self.put_post_result(True)
|
||||
self.post_result_wait_queue.put(True)
|
||||
elif errcode == 10300:
|
||||
log.info('Data sending failed.')
|
||||
# self.post_result_wait_queue.put(False)
|
||||
self.put_post_result(False)
|
||||
self.post_result_wait_queue.put(False)
|
||||
elif errcode == 10310:
|
||||
log.error('Object model data sending failed.')
|
||||
# self.post_result_wait_queue.put(False)
|
||||
self.put_post_result(False)
|
||||
self.post_result_wait_queue.put(False)
|
||||
elif errcode == 10320:
|
||||
log.error('Location data sending failed.')
|
||||
# self.post_result_wait_queue.put(False)
|
||||
self.put_post_result(False)
|
||||
self.post_result_wait_queue.put(False)
|
||||
elif event == 5:
|
||||
if errcode == 10200:
|
||||
log.info('Recving raw data.')
|
||||
|
@ -243,7 +243,6 @@ class Remote(Singleton):
|
||||
self.remote_read_cb = remote_read_cb
|
||||
self.downlink_queue = Queue(maxsize=64)
|
||||
self.uplink_queue = Queue(maxsize=64)
|
||||
self.block_io = True
|
||||
current_settings = settings.settings.get()
|
||||
cloud_init_params = current_settings['sys']['cloud_init_params']
|
||||
if current_settings['sys']['cloud'] == settings.default_values_sys._cloud.quecIot:
|
||||
@ -329,15 +328,15 @@ class Remote(Singleton):
|
||||
def clean_history(self):
|
||||
uos.remove(self._history)
|
||||
|
||||
def _post_data(self, data):
|
||||
if data[0] == self.DATA_NON_LOCA or data[0] == self.DATA_LOCA_NON_GPS or data[0] == self.DATA_LOCA_GPS:
|
||||
if not self.cloud.post_data(data[0], data[1]):
|
||||
self.add_history(data[0], data[1])
|
||||
def _post_data(self, data_type, data):
|
||||
if data_type == self.DATA_NON_LOCA or data_type == self.DATA_LOCA_NON_GPS or data_type == self.DATA_LOCA_GPS:
|
||||
if not self.cloud.post_data(data_type, data):
|
||||
self.add_history(data_type, data)
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
else:
|
||||
raise RemoteError('Post data format is wrong. data: %s' % data)
|
||||
raise RemoteError('data_type %s is wrong.' % data_type)
|
||||
|
||||
'''
|
||||
Data format to post:
|
||||
@ -355,19 +354,12 @@ class Remote(Singleton):
|
||||
['$GPRMCx,x,x,x', '$GPGGAx,x,x,x']
|
||||
|
||||
'''
|
||||
def post_data(self, data_type, data):
|
||||
if self.block_io is True:
|
||||
return self._post_data((data_type, data))
|
||||
else:
|
||||
def post_data(self, data_type, data, bio=False):
|
||||
if bio is False:
|
||||
self.uplink_queue.put((data_type, data))
|
||||
return True
|
||||
|
||||
def set_block_io(self, val):
|
||||
try:
|
||||
self.block_io = val
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
else:
|
||||
return self._post_data(data_type, data)
|
||||
|
||||
def check_ota(self):
|
||||
current_settings = settings.settings.get()
|
||||
|
@ -105,7 +105,7 @@ class default_values_app(object):
|
||||
|
||||
loc_mode = _loc_mode.cycle
|
||||
|
||||
loc_cycle_period = 5
|
||||
loc_cycle_period = 1
|
||||
|
||||
low_power_alert_threshold = 20
|
||||
|
||||
@ -175,6 +175,8 @@ class default_values_sys(object):
|
||||
|
||||
cloud_init_params = {}
|
||||
|
||||
quecIot_timeout = 180
|
||||
|
||||
_quecIot = {
|
||||
'PK': 'p11275',
|
||||
'PS': 'Q0ZQQndaN3pCUFd6',
|
||||
|
@ -70,7 +70,7 @@ class TrackerTimer(Singleton):
|
||||
self.tracker.alert_report(30002, {'local_time': utime.mktime(utime.localtime())})
|
||||
self.tracker.machine_info_report()
|
||||
if energy <= current_settings['app']['low_power_shutdown_threshold']:
|
||||
self.tracker.machine_info_report(power_switch=False, block_io=True)
|
||||
self.tracker.machine_info_report(power_switch=False)
|
||||
self.tracker.energy_led.period = None
|
||||
self.tracker.energy_led.switch(0)
|
||||
self.tracker.running_led.period = None
|
||||
|
@ -47,15 +47,7 @@ class Tracker(Singleton):
|
||||
|
||||
def loc_report(self):
|
||||
post_data_res = False
|
||||
data = None
|
||||
retry = 0
|
||||
while retry < 3:
|
||||
data = self.locator.read()
|
||||
if data:
|
||||
break
|
||||
else:
|
||||
retry += 1
|
||||
utime.sleep(1)
|
||||
data = self.locator.read()
|
||||
|
||||
if data:
|
||||
loc_method = data[0]
|
||||
@ -65,13 +57,6 @@ class Tracker(Singleton):
|
||||
else:
|
||||
data_type = self.remote.DATA_LOCA_NON_GPS
|
||||
|
||||
current_settings = settings.settings.get()
|
||||
if current_settings['sys']['cloud'] == settings.default_values_sys._cloud.quecIot:
|
||||
if loc_method == settings.default_values_app._loc_method.cell:
|
||||
loc_data = ['LBS']
|
||||
elif loc_method == settings.default_values_app._loc_method.wifi:
|
||||
loc_data = []
|
||||
|
||||
post_data_res = self.remote.post_data(data_type, loc_data)
|
||||
else:
|
||||
log.warn('Location data is not ready.')
|
||||
@ -87,7 +72,7 @@ class Tracker(Singleton):
|
||||
alert_data = {settings.ALERTCODE.get(alert_code): alert_info}
|
||||
return self.remote.post_data(data_type, alert_data)
|
||||
else:
|
||||
log.warn('%s status is %s' % (settings.ALERTCODE.get(alert_code), alert_status))
|
||||
log.warn('%s switch is %s' % (settings.ALERTCODE.get(alert_code), alert_status))
|
||||
else:
|
||||
log.error('altercode (%s) is not exists. alert info: %s' % (alert_code, alert_info))
|
||||
|
||||
|
@ -82,12 +82,14 @@ location_info = tracker.locator.read()
|
||||
|
||||
```python
|
||||
import utime
|
||||
data_type = tracker.remote.DATA_NON_LOCA
|
||||
data = {
|
||||
'power_switch': True,
|
||||
'energy': tracker.battery.energy(),
|
||||
'local_time': utime.mktime(utime.localtime())
|
||||
}
|
||||
tracker.remote.post_data(tracker.remote.DATA_NON_LOCA, data)
|
||||
bio = False
|
||||
tracker.remote.post_data(data_type, data, bio=bio)
|
||||
```
|
||||
|
||||
- 参数:
|
||||
@ -96,6 +98,7 @@ tracker.remote.post_data(tracker.remote.DATA_NON_LOCA, data)
|
||||
|:---|---|---|
|
||||
|data_type|int|数据类型|
|
||||
|data|dict|数据信息|
|
||||
|bio|boll|是否阻塞发送(True阻塞;False非阻塞),默认False|
|
||||
|
||||
- data_type 枚举值
|
||||
|
||||
@ -152,26 +155,6 @@ tracker.remote.post_data(tracker.remote.DATA_NON_LOCA, data)
|
||||
|
||||
返回`bool`类型数据, `True`成功, `False`失败。
|
||||
|
||||
#### `set_block_io` 设置消息发送为阻塞或非阻塞方式。
|
||||
|
||||
>`tracker.remote.set_block_io`
|
||||
|
||||
- 例:
|
||||
|
||||
```python
|
||||
res = tracker.remote.set_block_io(False)
|
||||
```
|
||||
|
||||
- 参数:
|
||||
|
||||
|参数|参数类型|参数说明|
|
||||
|:---|---|---|
|
||||
|val|bool|是否阻塞发送消息(True:阻塞;False:非阻塞), 默认True。|
|
||||
|
||||
- 返回值:
|
||||
|
||||
返回`bool`类型数据, `True`成功, `False`失败。
|
||||
|
||||
### alert_report 告警功能
|
||||
|
||||
该功能提供`alert_report`方法, 将定义好的报警编码与报警信息上报到云端。
|
||||
|
Loading…
x
Reference in New Issue
Block a user