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", "identifier": "sw_sim_abnormal_alert",
"name": "拔卡报警功能开关", "name": "SIM卡异常报警功能开关",
"accessMode": "rw", "accessMode": "rw",
"required": false, "required": false,
"dataType": { "dataType": {
@ -382,7 +382,9 @@
"20001": "net_error", "20001": "net_error",
"20002": "gps_error", "20002": "gps_error",
"20003": "temp_sensor_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", "identifier": "sw_sim_abnormal_alert",
"name": "拔卡报警功能开关", "name": "SIM卡异常报警功能开关",
"dataType": { "dataType": {
"type": "bool", "type": "bool",
"specs": { "specs": {
@ -769,7 +771,9 @@
"20001": "net_error", "20001": "net_error",
"20002": "gps_error", "20002": "gps_error",
"20003": "temp_sensor_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", "identifier": "fault_code",
"name": "故障代码", "name": "故障代码",
"dataType": { "dataType": {
"type": "enum", "type": "array",
"specs": { "specs": {
"20001": "net_error", "size": "10",
"20002": "gps_error", "item": {
"20003": "temp_sensor_error", "type": "int"
"20004": "light_sensor_error", }
"20005": "move_sensor_error",
"20006": "mike_error"
} }
} }
} }
@ -868,11 +870,11 @@
] ]
}, },
{ {
"identifier": "sim_out_alert", "identifier": "sim_abnormal_alert",
"name": "拔卡报警", "name": "SIM卡异常报警",
"type": "alert", "type": "alert",
"required": false, "required": false,
"method": "thing.event.sim_out_alert.post", "method": "thing.event.sim_abnormal_alert.post",
"outputData": [] "outputData": []
}, },
{ {
@ -1085,8 +1087,8 @@
} }
}, },
{ {
"identifier": "sw_sim_out_alert", "identifier": "sw_sim_abnormal_alert",
"name": "拔卡报警功能开关", "name": "SIM卡异常报警功能开关",
"dataType": { "dataType": {
"type": "bool", "type": "bool",
"specs": { "specs": {
@ -1181,7 +1183,7 @@
"sw_fault_alert", "sw_fault_alert",
"sw_low_power_alert", "sw_low_power_alert",
"sw_over_speed_alert", "sw_over_speed_alert",
"sw_sim_out_alert", "sw_sim_abnormal_alert",
"sw_disassemble_alert", "sw_disassemble_alert",
"sw_drive_behavior_alert", "sw_drive_behavior_alert",
"drive_behavior_code", "drive_behavior_code",
@ -1443,8 +1445,8 @@
} }
}, },
{ {
"identifier": "sw_sim_out_alert", "identifier": "sw_sim_abnormal_alert",
"name": "拔卡报警功能开关", "name": "SIM卡异常报警功能开关",
"dataType": { "dataType": {
"type": "bool", "type": "bool",
"specs": { "specs": {
@ -1522,7 +1524,9 @@
"20001": "net_error", "20001": "net_error",
"20002": "gps_error", "20002": "gps_error",
"20003": "temp_sensor_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', 'sos_alert',
'fault_alert', 'fault_alert',
'low_power_alert', 'low_power_alert',
'sim_out_alert', 'sim_abnormal_alert',
'disassemble_alert', 'disassemble_alert',
'drive_behavior_alert', 'drive_behavior_alert',
'over_speed_alert', 'over_speed_alert',
@ -58,7 +58,7 @@ object_model = {
'sw_fault_alert', 'sw_fault_alert',
'sw_low_power_alert', 'sw_low_power_alert',
'sw_over_speed_alert', 'sw_over_speed_alert',
'sw_sim_out_alert', 'sw_sim_abnormal_alert',
'sw_disassemble_alert', 'sw_disassemble_alert',
'sw_drive_behavior_alert', 'sw_drive_behavior_alert',
'drive_behavior_code', 'drive_behavior_code',

View File

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

View File

@ -24,7 +24,6 @@ from usr.common import Singleton
from usr.logging import getLogger from usr.logging import getLogger
from usr.settings import settings from usr.settings import settings
from usr.settings import LOWENERGYMAP from usr.settings import LOWENERGYMAP
from usr.settings import SettingsError
from usr.settings import default_values_app from usr.settings import default_values_app
try: try:
@ -80,50 +79,51 @@ class PowerManage(Singleton):
if self.low_energy_method == 'PM': if self.low_energy_method == 'PM':
self.low_energy_queue.put('wakelock_unlock') self.low_energy_queue.put('wakelock_unlock')
elif self.low_energy_method == 'PSM': elif self.low_energy_method == 'PSM':
pass self.low_energy_queue.put('psm')
elif self.low_energy_method == 'POWERDOWN': elif self.low_energy_method == 'POWERDOWN':
self.low_energy_queue.put('power_dwon') 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): def get_low_energy_method(self):
current_settings = settings.get() current_settings = settings.get()
device_model = modem.getDevModel() device_model = modem.getDevModel()
support_methds = LOWENERGYMAP.get(device_model) support_methds = LOWENERGYMAP.get(device_model, [])
if not support_methds: if 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:
if self.period >= current_settings['sys']['work_mode_timeline']: self.low_energy_method = "PSM"
if "PSM" in support_methds: elif "POWERDOWN" in support_methds:
self.low_energy_method = "PSM" self.low_energy_method = "POWERDOWN"
elif "POWERDOWN" in support_methds: elif "PM" in support_methds:
self.low_energy_method = "POWERDOWN" self.low_energy_method = "PM"
elif "PM" in support_methds: else:
self.low_energy_method = "PM" if "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"
return self.low_energy_method return self.low_energy_method
def low_energy_init(self): def low_energy_init(self):
if self.low_energy_method == 'POWERDOWN': if self.low_energy_method == 'PM':
pass _thread.start_new_thread(self.low_energy_work, (True,))
elif self.low_energy_method == 'PM': self.lpm_fd = pm.create_wakelock("lowenergy_lock", len("lowenergy_lock"))
_thread.start_new_thread(self.low_energy_work, ())
self.lpm_fd = pm.create_wakelock("tracker_lock", len("tracker_lock"))
pm.autosleep(1) pm.autosleep(1)
elif self.low_energy_method == 'PSM': elif self.low_energy_method == 'PSM':
# TODO: PSM LOW ENERGY
pass 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: while True:
data = self.low_energy_queue.get() data = self.low_energy_queue.get()
if data: if data:
if self.lpm_fd is None: if lowenergy_tag:
self.lpm_fd = pm.create_wakelock("tracker_lock", len("tracker_lock")) if self.lpm_fd is None:
pm.autosleep(1) self.lpm_fd = pm.create_wakelock("lowenergy_lock", len("lowenergy_lock"))
pm.wakelock_lock(self.lpm_fd) pm.autosleep(1)
pm.wakelock_lock(self.lpm_fd)
over_speed_check_res = self.tracker.get_over_speed_check() over_speed_check_res = self.tracker.get_over_speed_check()
self.tracker.device_data_report(event_data=over_speed_check_res, msg=data) 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')), (27, ('sw_fault_alert', 'rw')),
(28, ('sw_low_power_alert', 'rw')), (28, ('sw_low_power_alert', 'rw')),
(29, ('sw_over_speed_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')), (31, ('sw_disassemble_alert', 'rw')),
(32, ('sw_drive_behavior_alert', 'rw')), (32, ('sw_drive_behavior_alert', 'rw')),
(21, ('drive_behavior_code', 'r')), (21, ('drive_behavior_code', 'r')),
@ -56,7 +56,7 @@ object_model = [
(6, ('sos_alert', 'r')), (6, ('sos_alert', 'r')),
(14, ('fault_alert', 'r')), (14, ('fault_alert', 'r')),
(17, ('low_power_alert', 'r')), (17, ('low_power_alert', 'r')),
(18, ('sim_out_alert', 'r')), (18, ('sim_abnormal_alert', 'r')),
(20, ('disassemble_alert', 'r')), (20, ('disassemble_alert', 'r')),
(22, ('drive_behavior_alert', 'r')), (22, ('drive_behavior_alert', 'r')),
(35, ('over_speed_alert', 'r')), (35, ('over_speed_alert', 'r')),

View File

@ -249,7 +249,7 @@ class Remote(Singleton):
def read_history(self): def read_history(self):
''' '''
{ {
"non_loca": [ "hist_data": [
{ {
'switch': True, 'switch': True,
'energy': 100 'energy': 100
@ -257,18 +257,10 @@ class Remote(Singleton):
{ {
'switch': True, 'switch': True,
'energy': 100 '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): if ql_fs.path_exists(self._history):

View File

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

View File

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

View File

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

View File

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