def ibeacon_set_scanner_settings(**kwargs): kwargs = lowercase_dict_keys(kwargs) current_settings = read_local_cache_file(filepath=FILEPATH_SCANNER_SETTINGS) if 'uuid_filter' in kwargs and isinstance(kwargs['uuid_filter'], str): current_settings["uuid_filter"] = kwargs["uuid_filter"] debug(f"IBeaconScanner 'uuid_filter' update to: {current_settings['uuid_filter']}") if 'scan_tick' in kwargs and isinstance(kwargs['scan_tick'], int): if kwargs["scan_tick"] < MIN_SCAN_TICK: current_settings["scan_tick"] = MIN_SCAN_TICK elif kwargs["scan_tick"] > MAX_SCAN_TICK: current_settings["scan_tick"] = MAX_SCAN_TICK else: current_settings["scan_tick"] = kwargs["scan_tick"] debug(f"IBeaconScanner 'scan_tick' update to: {current_settings['scan_tick']}") if 'fake_scan' in kwargs and isinstance(kwargs['fake_scan'], bool): current_settings["fake_scan"] = kwargs['fake_scan'] debug(f"IBeaconScanner 'fake_scan' update to: {current_settings['fake_scan']}") if 'run_flag' in kwargs and isinstance(kwargs['run_flag'], bool): current_settings["run_flag"] = kwargs['run_flag'] debug(f"IBeaconScanner 'run_flag' update to: {current_settings['run_flag']}") if current_settings != read_local_cache_file(filepath=FILEPATH_SCANNER_SETTINGS): config_write(**current_settings) write_local_cache_file(filepath=FILEPATH_SCANNER_SETTINGS, data_dict=current_settings) info("Updated new scanner settings")
def _run_scanner_loop(): while 1: scanner_settings = read_local_cache_file(filepath=FILEPATH_SCANNER_SETTINGS) if scanner_settings['run_flag']: # performs ibeacon scanning if scanner_settings['fake_scan']: current_beacons_list = _scan_beacons_fake(**scanner_settings) else: current_beacons_list = _scan_beacons(**scanner_settings) # accomodate data for this new cycle current_beacons_list = sorted(current_beacons_list) last_beacons_list = sorted(_get_last_beacon_list()) beacons_data_dict = _render_beacons_data(current_beacons_list) # compare new beacons list against last list and performs actions if _is_nearest_beacon_changes(last_beacons_list, current_beacons_list): debug("Nearest beacon has changed") nearest_beacon_data = beacons_data_dict["nearest_beacon"] publish_event(IBeaconChange(nearest_beacon_data)) # updates global system beacon data if current_beacons_list and current_beacons_list != last_beacons_list: publish_event(IBeaconRead(beacons_data_dict)) write_local_cache_file(filepath=FILEPATH_BEACONS_DATA, data_dict=beacons_data_dict)
def _get_last_beacon_list(): """ Obtains the last list reading it from cache file or any other method. """ last_beacons_data = read_local_cache_file(filepath=FILEPATH_BEACONS_DATA) last_beacons_list = last_beacons_data["beacons_list"] return [IBeacon(**beacon_data) for beacon_data in last_beacons_list] \ if last_beacons_list else []
def ibeacon_get_scanner_settings(): return read_local_cache_file(filepath=FILEPATH_SCANNER_SETTINGS)
def ibeacon_get_beacons_data(): return read_local_cache_file(filepath=FILEPATH_BEACONS_DATA)