def __init__(self, macs=[], bt_device=''): """ Start background process for get_datas and async task for notifying all subscribed observers Args: macs (list): MAC addresses bt_device (string): Bluetooth device id """ self._run_flag = RunFlag() self._subjects = [] m = Manager() q = m.Queue() # Use Manager dict to share data between processes self._shared_data = m.dict() self._shared_data['run_flag'] = True # Start data updater notify_thread = Thread(target=RuuviTagReactive._data_update, args=(self._subjects, q, self._run_flag)) notify_thread.start() # Start background process executor = ProcessPoolExecutor(1) executor.submit(_run_get_data_background, macs, q, self._shared_data, bt_device)
def _run_get_data_background(macs, queue, shared_data, bt_device): """ Background process function for RuuviTag Sensors """ run_flag = RunFlag() def add_data(data): if not shared_data['run_flag']: run_flag.running = False data[1]['time'] = str(datetime.now()) queue.put(data) RuuviTagSensor.get_datas(add_data, macs, run_flag, bt_device)
def start_reporting(**kwargs): flag = RunFlag() def handle_sigint(sig, frame): flag.running = False sensors = read_data() handler = RuuviDataHandler(sensors, **kwargs) signal(SIGINT, handle_sigint) while flag.running: try: RuuviTagSensor.get_datas(handler, None, flag) except KeyboardInterrupt: return except Exception: pass
def listener(data, tag, interval): try: # RunFlag for stopping execution at desired time run_flag = RunFlag() def handle_data(values): # Send data to main process data[tag["index"]] = values[1] run_flag.running = False # Stop process time.sleep(interval) # Wait interval run_flag.running = True # Continue process RuuviTagSensor.get_datas(handle_data, tag["address"], run_flag) except ValueError: data[tag["index"]] = "RuuviTag address is not correct." except Exception as e: data[tag["index"]] = "Error happened while trying to read RuuviTag values." print(e)
def __init__(self, macs=[]): """ Start background process for get_datas and async task for notifying all subscribed observers Args: macs (list): MAC addresses """ self.subjects = [] self.run_flag = RunFlag() m = Manager() q = m.Queue() # Start data updater notify_thread = Thread(target=RuuviTagReactive._data_update, args=(self.subjects, q, self.run_flag)) notify_thread.start() # Start background process executor = ProcessPoolExecutor(1) executor.submit(RuuviTagReactive._run_get_data_background, macs, q, self.run_flag)
#elif (mac == outsideTag): #print("outsideTag temp", temp) #else: #print("error - unknown tag ", mac) RuuviTagSensor.get_datas(handle_data, None, run_flag) print("RuuviTagSensor returned") # end of parallel threads # # main processing loop # run_flag = RunFlag() # create and reset the relays relay1 = PiRelay.Relay("RELAY1") relay2 = PiRelay.Relay("RELAY2") relay3 = PiRelay.Relay("RELAY3") relay4 = PiRelay.Relay("RELAY4") sensor = initSensor() # env sensor logger = logAction(loc) # local logger # note: slackHook imported from creds.py slack = Slack(url=slackHook) # Initialize library. if (noDisplay is False): disp.begin()
tag = RuuviTag(list(datas.keys())[0]) tag.update() print(tag.state) if not tag.state: raise Exception('FAILED') else: print('OK') # # RuuviTagSensor.get_datas # print_header('RuuviTagSensor.get_datas') flag = RunFlag() def handle_data(found_data): flag.running = False if not found_data: raise Exception('FAILED') else: print('OK') RuuviTagSensor.get_datas(handle_data, run_flag=flag) wait_for_finish(flag, 'RuuviTagSensor.get_datas') #
def __init__(self, macs): self.run_flag = RunFlag() self.macs = macs self.macsWithData = {} self.dataReceivedFromAllTheTags = False
import sys import time, datetime from ruuvitag_sensor.ruuvi import RuuviTagSensor, RunFlag from ruuvitag_sensor.decoder import UrlDecoder import threading import urllib2, json import settings run_flag_outside = RunFlag() run_flag_inside = RunFlag() send_buffer_loc_1 = [] send_buffer_loc_2 = [] def get_timestamp(): d = datetime.datetime.now() return time.mktime(d.timetuple()) def send_data(loc_id, found_data): url = settings.KERTTU_SERVER_URL + '/api/v1/weatherData' postdata = { 'deviceID': 1, 'locID': loc_id, 'temperature': found_data[1]['temperature'], 'pressure': found_data[1]['pressure'], 'humidity': found_data[1]['humidity'], 'battery': found_data[1]['battery'], 'timestamp': get_timestamp() }