117 lines
4.0 KiB
Python
Raw Permalink Normal View History

import utime
import osTimer
from misc import Power
import usr.settings as settings
from usr.common import Singleton
from usr.logging import getLogger
try:
from misc import USB
except ImportError:
USB = None
log = getLogger(__name__)
class TrackerTimer(Singleton):
def __init__(self, tracker):
self.tracker = tracker
self.tracker_timer = osTimer()
self.tracker_timer.start(1000, 1, self.timer_callback)
self.loc_count = 0
2022-03-11 17:50:36 +08:00
self.battery_count = 0
self.gnss_count = 0
2022-03-16 11:38:50 +08:00
self.quec_ota = 0
def timer_callback(self, args):
current_settings = settings.settings.get()
self.loc_count += 1
2022-03-11 17:50:36 +08:00
self.battery_count += 1
self.gnss_count += 1
2022-03-16 11:38:50 +08:00
self.quec_ota += 1
if (current_settings['app']['loc_mode'] & settings.default_values_app._loc_mode.cycle) \
and current_settings['app']['loc_cycle_period'] \
and self.loc_count >= current_settings['app']['loc_cycle_period']:
self.loc_count = 0
self.loc_timer()
if self.battery_count >= 60:
2022-03-11 17:50:36 +08:00
self.battery_count = 0
self.battery_timer()
if current_settings['app']['loc_method'] & settings.default_values_app._loc_method.gps and \
current_settings['sys']['gps_mode'] & settings.default_values_sys._gps_mode.internal:
self.gnss_count = 0
self.gnss_timer()
2022-03-16 11:38:50 +08:00
if current_settings['app']['sw_ota'] is False:
self.quec_ota = 0
if current_settings['sys']['cloud'] == settings.default_values_sys._cloud.quecIot and \
self.quec_ota >= 3600:
self.quec_ota = 0
self.quecthing_ota_timer()
def loc_timer(self):
self.tracker.loc_report()
2022-03-11 17:50:36 +08:00
def battery_timer(self):
current_settings = settings.settings.get()
energy = self.tracker.battery.energy()
is_charge = USB().getStatus() if USB is not None else 1
if is_charge == 0:
self.tracker.energy_led_show(energy)
if current_settings['app']['sw_low_power_alert']:
if energy <= current_settings['app']['low_power_alert_threshold']:
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)
self.tracker.energy_led.period = None
self.tracker.energy_led.switch(0)
self.tracker.running_led.period = None
self.tracker.running_led.switch(0)
Power.powerDown()
elif is_charge == 1:
self.tracker.energy_led_show(energy)
def gnss_timer(self):
self.tracker.locator.gps.quecgnss_read()
2022-03-16 11:38:50 +08:00
def quecthing_ota_timer(self):
self.tracker.remote.check_ota()
class LEDTimer(Singleton):
def __init__(self, tracker):
self.period = 500
self.tracker = tracker
self.energy_led_count = 0
self.running_led_count = 0
self.led_timer = osTimer()
self.led_timer.start(self.period, 1, self.led_callback)
def led_callback(self, args):
self.energy_led_count += 1
self.running_led_count += 1
if self.tracker.energy_led.period is not None:
if self.tracker.energy_led.period == 0 or \
(self.tracker.energy_led.period > 0 and int(self.tracker.energy_led.period / self.period) <= self.energy_led_count):
self.led_switch(self.tracker.energy_led)
if self.tracker.running_led.period is not None:
if self.tracker.running_led.period == 0 or \
(self.tracker.running_led.period > 0 and int(self.tracker.running_led.period / self.period) <= self.running_led_count):
self.led_switch(self.tracker.running_led)
def led_switch(self, led):
if led.period == 0:
led.switch(1)
else:
led.switch()