update: optimization

This commit is contained in:
JackSun-qc 2022-03-25 11:56:14 +08:00
parent e39ff5814d
commit 27ba3a5b9e
10 changed files with 127 additions and 128 deletions

View File

@ -289,8 +289,8 @@
}
},
{
"identifier": "sw_sim_out_alert",
"name": "拔卡报警功能开关",
"identifier": "sw_sim_abnormal_alert",
"name": "SIM卡异常报警功能开关",
"accessMode": "rw",
"required": false,
"dataType": {
@ -382,7 +382,9 @@
"20001": "net_error",
"20002": "gps_error",
"20003": "temp_sensor_error",
"20004": "light_sensor_error"
"20004": "light_sensor_error",
"20005": "move_sensor_error",
"20006": "mike_error"
}
}
},
@ -690,8 +692,8 @@
}
},
{
"identifier": "sw_sim_out_alert",
"name": "拔卡报警功能开关",
"identifier": "sw_sim_abnormal_alert",
"name": "SIM卡异常报警功能开关",
"dataType": {
"type": "bool",
"specs": {
@ -769,7 +771,9 @@
"20001": "net_error",
"20002": "gps_error",
"20003": "temp_sensor_error",
"20004": "light_sensor_error"
"20004": "light_sensor_error",
"20005": "move_sensor_error",
"20006": "mike_error"
}
}
},
@ -831,14 +835,12 @@
"identifier": "fault_code",
"name": "故障代码",
"dataType": {
"type": "enum",
"type": "array",
"specs": {
"20001": "net_error",
"20002": "gps_error",
"20003": "temp_sensor_error",
"20004": "light_sensor_error",
"20005": "move_sensor_error",
"20006": "mike_error"
"size": "10",
"item": {
"type": "int"
}
}
}
}
@ -868,11 +870,11 @@
]
},
{
"identifier": "sim_out_alert",
"name": "拔卡报警",
"identifier": "sim_abnormal_alert",
"name": "SIM卡异常报警",
"type": "alert",
"required": false,
"method": "thing.event.sim_out_alert.post",
"method": "thing.event.sim_abnormal_alert.post",
"outputData": []
},
{
@ -1085,8 +1087,8 @@
}
},
{
"identifier": "sw_sim_out_alert",
"name": "拔卡报警功能开关",
"identifier": "sw_sim_abnormal_alert",
"name": "SIM卡异常报警功能开关",
"dataType": {
"type": "bool",
"specs": {
@ -1181,7 +1183,7 @@
"sw_fault_alert",
"sw_low_power_alert",
"sw_over_speed_alert",
"sw_sim_out_alert",
"sw_sim_abnormal_alert",
"sw_disassemble_alert",
"sw_drive_behavior_alert",
"drive_behavior_code",
@ -1443,8 +1445,8 @@
}
},
{
"identifier": "sw_sim_out_alert",
"name": "拔卡报警功能开关",
"identifier": "sw_sim_abnormal_alert",
"name": "SIM卡异常报警功能开关",
"dataType": {
"type": "bool",
"specs": {
@ -1522,7 +1524,9 @@
"20001": "net_error",
"20002": "gps_error",
"20003": "temp_sensor_error",
"20004": "light_sensor_error"
"20004": "light_sensor_error",
"20005": "move_sensor_error",
"20006": "mike_error"
}
}
},

View File

@ -36,7 +36,7 @@ object_model = {
'sos_alert',
'fault_alert',
'low_power_alert',
'sim_out_alert',
'sim_abnormal_alert',
'disassemble_alert',
'drive_behavior_alert',
'over_speed_alert',
@ -58,7 +58,7 @@ object_model = {
'sw_fault_alert',
'sw_low_power_alert',
'sw_over_speed_alert',
'sw_sim_out_alert',
'sw_sim_abnormal_alert',
'sw_disassemble_alert',
'sw_drive_behavior_alert',
'drive_behavior_code',

View File

@ -84,25 +84,27 @@ class GPS(Singleton):
def uart_read(self):
global gps_data_retrieve_queue
while self.break_flag == 0:
self.gps_timer.start(200, 1, self.gps_timer_callback)
self.gps_timer.start(50, 1, self.gps_timer_callback)
nread = gps_data_retrieve_queue.get()
data = self.uart_obj.read(nread).decode()
self.gps_timer.stop()
data = ''
rmc_data = ''
gga_data = ''
vtg_data = ''
while True:
nread = gps_data_retrieve_queue.get()
data = self.uart_obj.read(nread).decode()
rmc_data = self.read_location_GxRMC(data)
if not rmc_data:
continue
gga_data = self.read_location_GxGGA(data)
if not gga_data:
continue
vtg_data = self.read_location_GxVTG(data)
if not vtg_data:
continue
break
udata = self.uart_obj.read(nread).decode()
rmc_data = self.read_location_GxRMC(udata)
gga_data = self.read_location_GxGGA(udata)
vtg_data = self.read_location_GxVTG(udata)
if rmc_data or gga_data or vtg_data:
data += udata
if rmc_data and gga_data and vtg_data:
break
self.break_flag = 0
return data
@ -112,23 +114,24 @@ class GPS(Singleton):
quecgnss.gnssEnable(1)
while self.break_flag == 0:
self.gps_timer.start(200, 1, self.gps_timer_callback)
self.gps_timer.start(50, 1, self.gps_timer_callback)
data = quecgnss.read(4096)
self.gps_timer.stop()
data = ''
rmc_data = ''
gga_data = ''
vtg_data = ''
while True:
gnss_data = quecgnss.read(4096)
data = gnss_data[1].decode()
rmc_data = self.read_location_GxRMC(data)
if not rmc_data:
continue
gga_data = self.read_location_GxGGA(data)
if not gga_data:
continue
vtg_data = self.read_location_GxVTG(data)
if not vtg_data:
continue
break
udata = gnss_data[1].decode() if len(gnss_data) > 1 and gnss_data[1] else ''
rmc_data = self.read_location_GxRMC(udata)
gga_data = self.read_location_GxGGA(udata)
vtg_data = self.read_location_GxVTG(udata)
if rmc_data or gga_data or vtg_data:
data += udata
if rmc_data and gga_data and vtg_data:
break
self.break_flag = 0
return data

View File

@ -24,7 +24,6 @@ from usr.common import Singleton
from usr.logging import getLogger
from usr.settings import settings
from usr.settings import LOWENERGYMAP
from usr.settings import SettingsError
from usr.settings import default_values_app
try:
@ -80,50 +79,51 @@ class PowerManage(Singleton):
if self.low_energy_method == 'PM':
self.low_energy_queue.put('wakelock_unlock')
elif self.low_energy_method == 'PSM':
pass
self.low_energy_queue.put('psm')
elif self.low_energy_method == 'POWERDOWN':
self.low_energy_queue.put('power_dwon')
elif self.low_energy_method is None:
self.low_energy_queue.put('cycle_report')
def get_low_energy_method(self):
current_settings = settings.get()
device_model = modem.getDevModel()
support_methds = LOWENERGYMAP.get(device_model)
if not support_methds:
raise SettingsError('This Model %s Not Set LOWENERGYMAP.' % device_model)
if self.period >= current_settings['sys']['work_mode_timeline']:
if "PSM" in support_methds:
self.low_energy_method = "PSM"
elif "POWERDOWN" in support_methds:
self.low_energy_method = "POWERDOWN"
elif "PM" in support_methds:
self.low_energy_method = "PM"
self.low_energy_method = "PM"
else:
if "PM" in support_methds:
self.low_energy_method = "PM"
support_methds = LOWENERGYMAP.get(device_model, [])
if support_methds:
if self.period >= current_settings['sys']['work_mode_timeline']:
if "PSM" in support_methds:
self.low_energy_method = "PSM"
elif "POWERDOWN" in support_methds:
self.low_energy_method = "POWERDOWN"
elif "PM" in support_methds:
self.low_energy_method = "PM"
else:
if "PM" in support_methds:
self.low_energy_method = "PM"
return self.low_energy_method
def low_energy_init(self):
if self.low_energy_method == 'POWERDOWN':
pass
elif self.low_energy_method == 'PM':
_thread.start_new_thread(self.low_energy_work, ())
self.lpm_fd = pm.create_wakelock("tracker_lock", len("tracker_lock"))
if self.low_energy_method == 'PM':
_thread.start_new_thread(self.low_energy_work, (True,))
self.lpm_fd = pm.create_wakelock("lowenergy_lock", len("lowenergy_lock"))
pm.autosleep(1)
elif self.low_energy_method == 'PSM':
# TODO: PSM LOW ENERGY
pass
elif self.low_energy_method == 'POWERDOWN':
pass
elif self.low_energy_method is None:
_thread.start_new_thread(self.low_energy_work, (False,))
def low_energy_work(self):
def low_energy_work(self, lowenergy_tag):
while True:
data = self.low_energy_queue.get()
if data:
if self.lpm_fd is None:
self.lpm_fd = pm.create_wakelock("tracker_lock", len("tracker_lock"))
pm.autosleep(1)
pm.wakelock_lock(self.lpm_fd)
if lowenergy_tag:
if self.lpm_fd is None:
self.lpm_fd = pm.create_wakelock("lowenergy_lock", len("lowenergy_lock"))
pm.autosleep(1)
pm.wakelock_lock(self.lpm_fd)
over_speed_check_res = self.tracker.get_over_speed_check()
self.tracker.device_data_report(event_data=over_speed_check_res, msg=data)

View File

@ -41,7 +41,7 @@ object_model = [
(27, ('sw_fault_alert', 'rw')),
(28, ('sw_low_power_alert', 'rw')),
(29, ('sw_over_speed_alert', 'rw')),
(30, ('sw_sim_out_alert', 'rw')),
(30, ('sw_sim_abnormal_alert', 'rw')),
(31, ('sw_disassemble_alert', 'rw')),
(32, ('sw_drive_behavior_alert', 'rw')),
(21, ('drive_behavior_code', 'r')),
@ -56,7 +56,7 @@ object_model = [
(6, ('sos_alert', 'r')),
(14, ('fault_alert', 'r')),
(17, ('low_power_alert', 'r')),
(18, ('sim_out_alert', 'r')),
(18, ('sim_abnormal_alert', 'r')),
(20, ('disassemble_alert', 'r')),
(22, ('drive_behavior_alert', 'r')),
(35, ('over_speed_alert', 'r')),

View File

@ -249,7 +249,7 @@ class Remote(Singleton):
def read_history(self):
'''
{
"non_loca": [
"hist_data": [
{
'switch': True,
'energy': 100
@ -257,18 +257,10 @@ class Remote(Singleton):
{
'switch': True,
'energy': 100
}
},
'gps': ['$GPRMCx,x,x,x', '$GPGGAx,x,x,x'],
'non_gps': ['LBS'],
],
"loca_non_gps": [
(117.1138, 31.82279, 550),
(117.1138, 31.82279, 550)
],
"loca_gps": [
['$GPRMCx,x,x,x', '$GPGGAx,x,x,x'],
['$GPRMCx,x,x,x', '$GPGGAx,x,x,x']
]
}
'''
if ql_fs.path_exists(self._history):

View File

@ -33,7 +33,7 @@ ALERTCODE = {
20000: 'fault_alert',
30002: 'low_power_alert',
30003: 'over_speed_alert',
30004: 'sim_out_alert',
30004: 'sim_abnormal_alert',
30005: 'disassemble_alert',
40000: 'drive_behavior_alert',
50001: 'sos_alert',
@ -157,7 +157,7 @@ class default_values_app(object):
sw_over_speed_alert = True
sw_sim_out_alert = True
sw_sim_abnormal_alert = True
sw_disassemble_alert = True
@ -379,7 +379,7 @@ class Settings(Singleton):
elif opt in (
'sw_ota', 'sw_ota_auto_upgrade', 'sw_voice_listen', 'sw_voice_record',
'sw_fault_alert', 'sw_low_power_alert', 'sw_over_speed_alert',
'sw_sim_out_alert', 'sw_disassemble_alert', 'sw_drive_behavior_alert'):
'sw_sim_abnormal_alert', 'sw_disassemble_alert', 'sw_drive_behavior_alert'):
if not isinstance(val, bool):
return False
self.current_settings['app'][opt] = val

View File

@ -110,10 +110,12 @@ class Tracker(Singleton):
'ota_status': current_settings['sys']['ota_status'],
})
device_data.update(current_settings['app'])
return device_data
def get_device_check(self):
alert_data = []
alert_data = {}
fault_code = []
alert_code = 20000
net_check_res = self.check.net_check()
@ -127,21 +129,17 @@ class Tracker(Singleton):
self.running_led.period = 0.5
if net_check_res != (3, 1):
self.net_enable = False
fault_code = 20001
alert_info = {'fault_code': fault_code, 'local_time': utime.mktime(utime.localtime())}
alert_data_res = self.get_alert_data(alert_code, alert_info)
if alert_data_res:
alert_data.append(alert_data_res)
fault_code.append(20001)
if not gps_check_res:
fault_code = 20002
alert_info = {'fault_code': fault_code, 'local_time': utime.mktime(utime.localtime())}
alert_data_res = self.get_alert_data(alert_code, alert_info)
if alert_data_res:
alert_data.append(alert_data_res)
fault_code.append(20002)
if not sensor_check_res:
# TODO: Need To Check What Sensor Error To Report.
pass
if fault_code:
alert_info = {'fault_code': fault_code, 'local_time': utime.mktime(utime.localtime())}
alert_data = self.get_alert_data(alert_code, alert_info)
return alert_data
def get_over_speed_check(self):
@ -193,12 +191,15 @@ class Tracker(Singleton):
sys_bus.subscribe(topic, self.data_report_cb)
self.remote.post_data(topic, device_data)
# OTA Status RST
current_settings = settings.settings.get()
if current_settings['sys']['ota_status'] in (3, 4):
settings.settings.set('ota_status', 0)
settings.settings.save()
def device_check(self):
device_check_res = self.get_device_check()
if device_check_res:
[self.device_data_report(event_data=device_check) for device_check in device_check_res]
else:
self.device_data_report()
self.device_data_report(event_data=device_check_res)
def energy_led_show(self, energy):
current_settings = settings.settings.get()
@ -234,7 +235,7 @@ class Tracker(Singleton):
net_check_res = self.check.net_check()
if args[1] != 1:
self.net_enable = False
if net_check_res == (1, 0):
if net_check_res != (1, 1):
alert_code = 30004
alert_info = {'local_time': utime.mktime(utime.localtime())}
alert_data = self.get_alert_data(alert_code, alert_info)

View File

@ -51,9 +51,10 @@
- 上报设备定位信息,电量,开关机状态,定位方式,电话号码等信息;
- 默认上报设备信息的场景:
1. 报警发生时
2. 语音监听时
3. 录音时
1. 周期性定时
2. 报警发生时
3. 语音监听时
4. 录音时
- 根据不同的应用场景,上报工作模式分别有以下三种:
1. 周期性模式 -- 周期性上报设备信息,上报完成后进入低功耗模式
2. 智能模式 -- 开启GPS定位时运动上报上报完成后进入低功耗模式静止不上报直接进入低功耗模式
@ -71,7 +72,7 @@
- 功能开启的状态下可由云端或手机APP配置是否自动升级。默认开启自动升级。
#### 远程配置或控制
- 远程配置:电话号码、远程配置定位器工作模式、定位使用的技术手段、语音监听、自动录音上报、固件升级及自动升级、故障报警、低电报警、超速报警、拔卡报警、拆卸报警、振动报警和驾驶行为监测功能的开关。
- 远程配置:电话号码、远程配置定位器工作模式、定位使用的技术手段、语音监听、自动录音上报、固件升级及自动升级、故障报警、低电报警、超速报警、SIM卡异常报警、拆卸报警、振动报警和驾驶行为监测功能的开关。
- 远程控制:远程控制固件升级的流程。
### 设备报警功能
@ -95,7 +96,7 @@
- 功能的开启超速阈值可由云端或手机APP控制。默认关闭该功能。
- 报警代码30003
#### 拔卡报警
#### SIM卡异常报警
- SIM卡拔出时报警此时网络不通按照网络不通的逻辑处理。
- 功能的开启可由云端或手机APP控制。默认开启该功能。
@ -250,7 +251,7 @@ tracker.remote.post_data(topic, data)
|故障报警功能开关|`sw_fault_alert`|`bool`|`True`:开启,`False`:关闭||读写|
|低电报警功能开关|`sw_low_power_alert`|`bool`|`True`:开启,`False`:关闭||读写|
|超速报警功能开关|`sw_over_speed_alert`|`bool`|`True`:开启,`False`:关闭||读写|
|拔卡报警功能开关|`sw_sim_out_alert`|`bool`|`True`:开启,`False`:关闭||读写|
|SIM卡异常报警功能开关|`sw_sim_abnormal_alert`|`bool`|`True`:开启,`False`:关闭||读写|
|拆卸报警功能开关|`sw_disassemble_alert`|`bool`|`True`:开启,`False`:关闭||读写|
|驾驶行为报警功能开关|`sw_drive_behavior_alert`|`bool`|`True`:开启,`False`:关闭||读写|
|驾驶行为代码|`drive_behavior_code`|`int`|取值范围40001 ~ 40004|40001: quick_start;40002: quick_stop;40003: quick_turn_left;40004: quick_turn_right|只读|
@ -268,7 +269,7 @@ tracker.remote.post_data(topic, data)
|SOS报警|`sos_alert`|`{'local_time': xxx}`|
|故障报警|`fault_alert`|`{'local_time': xxx, 'fault_code': 20001}`|
|低电报警|`low_power_alert`|`{'local_time': xxx, 'energy': 20}`|
|拔卡报警|`sim_out_alert`|`{'local_time': xxx}`|
|SIM卡异常报警|`sim_abnormal_alert`|`{'local_time': xxx}`|
|驾驶行为报警|`drive_behavior_alert`|`{'local_time': xxx, 'drive_behavior_code': 40001}`|
|拆卸报警|`disassemble_alert`|`{'local_time': xxx}`|
|超速报警|`over_speed_alert`|`{'local_time': xxx}`|
@ -319,7 +320,7 @@ res = tracker.get_alert_data(alert_code, alert_info)
|-|20006|`mike_error`|麦克风异常|
|30002|-|`low_power_alert`|低电量报警|
|30003|-|`over_speed_alert`|超速报警|
|30004|-|`sim_out_alert`|拔卡报警|
|30004|-|`sim_abnormal_alert`|SIM卡异常报警|
|30005|-|`disassemble_alert`|拆卸报警|
|40000|-|`drive_behavior_alert`|驾驶行为监测报警|
|-|40001|`quick_start`|急起|
@ -460,7 +461,7 @@ current_settings = settings.get()
"sw_low_power_alert": true,
"sw_voice_record": false,
"sw_voice_listen": false,
"sw_sim_out_alert": true,
"sw_sim_abnormal_alert": true,
"gps_mode": 2,
"sw_drive_behavior_alert": true,
"sw_ota": true,

View File

@ -2,7 +2,7 @@
"profile":{
"tslVersion":"1.1.0",
"productKey":"p11275",
"version":"20220324132257527"
"version":"20220325114956585"
},
"properties":[
{
@ -319,9 +319,9 @@
"value":"false"
}
],
"code":"sw_sim_out_alert",
"code":"sw_sim_abnormal_alert",
"dataType":"BOOL",
"name":"拔卡报警功能开关",
"name":"SIM卡异常报警功能开关",
"subType":"RW",
"id":30,
"sort":16,
@ -428,13 +428,11 @@
},
{
"specs":{
"unit":"",
"min":"20001",
"max":"29999",
"step":"1"
"size":"10",
"dataType":"INT"
},
"code":"fault_code",
"dataType":"INT",
"dataType":"ARRAY",
"name":"故障代码",
"subType":"R",
"id":36,
@ -555,8 +553,8 @@
"$ref":"#/properties/id/19"
}
],
"code":"sim_out_alert",
"name":"拔卡报警",
"code":"sim_abnormal_alert",
"name":"SIM卡异常报警",
"subType":"WARN",
"id":18,
"sort":23,