mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
41 lines
No EOL
1.3 KiB
Python
41 lines
No EOL
1.3 KiB
Python
import command_beacon
|
|
import sched
|
|
import time
|
|
import threading
|
|
|
|
class Beacon:
|
|
def __init__(self, config, states, event_manager, logger, modem):
|
|
self.config = config
|
|
self.states = states
|
|
self.event_manager = event_manager
|
|
self.log = logger
|
|
self.modem = modem
|
|
|
|
self.scheduler = sched.scheduler(time.time, time.sleep)
|
|
self.beacon_interval = self.config['MODEM']['beacon_interval']
|
|
self.beacon_enabled = False
|
|
self.event = threading.Event()
|
|
|
|
def start(self):
|
|
self.beacon_enabled = True
|
|
self.schedule_beacon()
|
|
|
|
def stop(self):
|
|
self.beacon_enabled = False
|
|
|
|
def schedule_beacon(self):
|
|
if self.beacon_enabled:
|
|
self.scheduler.enter(self.beacon_interval, 1, self.run_beacon)
|
|
threading.Thread(target=self.scheduler.run, daemon=True).start()
|
|
|
|
def run_beacon(self):
|
|
if self.beacon_enabled:
|
|
# Your beacon logic here
|
|
cmd = command_beacon.BeaconCommand(self.config, self.states, self.event_manager)
|
|
cmd.run(self.event_manager, self.modem)
|
|
self.schedule_beacon() # Reschedule the next beacon
|
|
|
|
def refresh(self):
|
|
# Interrupt and reschedule the beacon
|
|
self.scheduler = sched.scheduler(time.time, time.sleep)
|
|
self.schedule_beacon() |