def read_config_file(self): self.config = BlueTrackerConfig() self.config.load(self.config_file_name) self.config.load_node_from_master(self.logger) self.config.load_devices_from_master(self.logger)
class BlueTrackerDaemon(): def __init__(self, config_file_name): self.config_file_name = config_file_name self.init_paths() self.init_logger() self.read_config_file() self.dump_config() self.pidfile_timeout = 5 def init_paths(self): self.pidfile_path = os.getcwd()+"/bluetracker.pid" self.logfile_path = os.getcwd()+"/bluetracker.log" self.stdin_path = '/dev/null' self.stdout_path = '/dev/null' self.stderr_path = '/dev/null' def init_logger(self): self.logger = logging.getLogger("DaemonLog") self.logger.setLevel(logging.INFO) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") self.handler = logging.FileHandler(self.logfile_path) self.handler.setFormatter(formatter) self.logger.addHandler(self.handler) def read_config_file(self): self.config = BlueTrackerConfig() self.config.load(self.config_file_name) self.config.load_node_from_master(self.logger) self.config.load_devices_from_master(self.logger) def dump_config(self): self.config.dump_config(self.logger) def handle_device_update(self,device): action = "=> No change" self.logger.error(self.config.station_id+"-[DEVP] Name: ["+device.name+"] Device Update: ["+device.address+"] Present: ["+str(device.get_is_present())+"] RSSI: ["+str(device.rssi)+"] "+action) self.send_reading_to_master(device.address, device.rssi) def handle_device_property_changed(self,device): self.logger.error(self.config.station_id+"-[PROP] Name: ["+device.name+"] Device Update: ["+device.address+"] Present: ["+str(device.get_is_present())+"] RSSI: ["+str(device.rssi)+"]") self.send_reading_to_master(device.address, device.rssi) def run_daemon(self): daemon_runner = runner.DaemonRunner(self) daemon_runner.daemon_context.files_preserve=[self.handler.stream] daemon_runner.do_action() def send_heartbeat(self): self.logger.error("### Heartbeat sent") self.send_heartbeat_to_master() return True def send_reading_to_master(self, address, signal_strength): request_headers = {'content-length' : '0', 'x-troublex3-bluetracker-auth' : self.config.master_password} request_params = { 'readingValue' : str(signal_strength), 'node': self.config.station_id } address = urllib.quote(address) request_uri = self.config.master_server + '/_ah/api/tracker/v1/device/' + address + '/reading' try: requests.post(request_uri, params = request_params, headers = request_headers) except: self.logger.error("Failed loading specified URI for update") self.logger.error(self.config.master_server + '/_ah/api/tracker/v1/node/' + address + '/reading' ) self.logger.error(request_params) def send_heartbeat_to_master(self): request_headers = {'content-length': '0', 'x-troublex3-bluetracker-auth' : self.config.master_password} try: requests.put(self.config.master_server + '/_ah/api/tracker/v1/node/' + self.config.station_id, headers = request_headers) except: self.logger.error("Failed loading specified URI for heartbeat") self.logger.error(self.config.master_server + '/_ah/api/tracker/v1/node/' + self.config.station_id ) def start_ping_tracker(self): if hasattr(self.config,"ping_sleep_period"): self.logger.error("Starting ping tracker...") self.ping_tracker = PingTrackerManager(self.config.ping_sleep_period, self.config.ping_timeout,self.config.ping_retries,self.config.ping_retry_pause, self.logger, self.send_reading_to_master, self.config.ping_map) def start_temp_reader(self): if hasattr(self.config,'rht_base_address'): self.logger.error("Starting RHT reader...") self.rht_reader = RHTDataCollector(self.config.rht_base_address,self.logger, self.send_reading_to_master, self.config.rht_sleep) self.rht_reader.start() def run(self): DBusGMainLoop(set_as_default=True) if hasattr(self.config, "garage_pin_number"): from GarageDoorDBusService import GarageDoorDBusService self.garage_service = GarageDoorDBusService(self.config.garage_pin_number) factory = BluetoothFactory() self.logger.error("Bluetooth factory created - device:"+self.config.device_id+" factory "+str(factory)) adapter = factory.get_adapter(self.config.device_id) if adapter is None: raise Exception("Unable to find specified adapter. Fatal error. Adapter- "+self.config.device_id) self.logger.error("Got adapter "+self.config.device_id) adapter.power_on() self.logger.error("Powered on") adapter.set_device_callbacks(self.handle_device_update,self.handle_device_property_changed) self.start_ping_tracker() self.start_temp_reader() self.logger.error("Set device callbacks") adapter.start_discovery() self.logger.error("discovery started") self.send_heartbeat() self.logger.error("initial heartbeat sent") event_id = GObject.timeout_add(240000,self.send_heartbeat) mainloop = GObject.MainLoop() mainloop.run() GObject.source_remove(event_id) adapter.stop_discovery() def dump_status(self): print("Status of BlueTracker on ISY:")