Example #1
0
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")
Example #2
0
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)
Example #3
0
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 []
Example #4
0
def ibeacon_get_scanner_settings():
    return read_local_cache_file(filepath=FILEPATH_SCANNER_SETTINGS)
Example #5
0
def ibeacon_get_beacons_data():
    return read_local_cache_file(filepath=FILEPATH_BEACONS_DATA)