def bluetooth_server(inputs, out_q, nskip): logger = Logger(out_q) try: logger.log(__name__ + ' started') data_types = [ 'pressure', 'altitude', 'vspeed', 'temperature', 'battery' ] data_converters = {'vspeed': 100} unavailable_data = { 'pressure': '999999', 'altitude': '99999', 'vspeed': '9999', 'temperature': '99', 'battery': '999' } server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM) server_socket.bind(('', bluetooth.PORT_ANY)) server_socket.listen(1) while True: logger.log(__name__ + ' started') print('waiting bluetooth connection...') client_socket, client_address = server_socket.accept() print('connected') for i in inputs: while not inputs[i].empty(): inputs[i].get_nowait() logger.log(__name__ + ' entering main loop') while True: try: message = 'LK8EX1' for t in data_types: message += ',' if t in inputs: value = inputs[t].get().data value = value * data_converters.get(t, 1) message += '{0:.2f}'.format(value) else: message += unavailable_data[t] message = '$' + message + ',*' + checksum(message) client_socket.sendall(message) for n in range(nskip): for i in inputs: inputs[i].get() except bluetooth.BluetoothError: break except: logger.log(format_current_exception(__name__))
def linreg_calculator(in_q, out_q, out_topic, buffer_size): logger = Logger(out_q) try: logger.log(__name__ + ' started') X = np.zeros(shape=(buffer_size, 1), dtype=np.double) y = np.zeros(shape=(buffer_size, 1), dtype=np.double) linregr = LinearRegression() for i in range(buffer_size): in_msg = in_q.get() X[i, 0] = in_msg.timestamp y[i, 0] = in_msg.data logger.log(__name__ + ' entering main loop') while True: X = np.roll(X, -1) y = np.roll(y, -1) in_msg = in_q.get() X[buffer_size - 1, 0] = in_msg.timestamp y[buffer_size - 1, 0] = in_msg.data linregr.fit(X, y) out_msg = Message(out_topic, round(linregr.coef_[0, 0], 2)) out_q.put(out_msg) except: logger.log(format_current_exception(__name__))
def derivative_calculator(in_q, out_q, out_topic, nskip): logger = Logger(out_q) try: logger.log(__name__ + ' started') result = 0.0 in_msg = in_q.get() last_value, last_t = in_msg.data, time() logger.log(__name__ + ' entering main loop') while True: in_msg = in_q.get() new_value, new_t = in_msg.data, time() result = (new_value - last_value) / (new_t - last_t) last_value, last_t = new_value, new_t out_msg = Message(out_topic, round(result, 2)) out_q.put(out_msg) for n in range(nskip): in_q.get() out_q.put(out_msg) except: logger.log(format_current_exception(__name__))
def HD44780_writer(inputs, out_q, nskip, debug): logger = Logger(out_q) try: logger.log(__name__ + ' started') display = HD44780() logger.log(__name__ + ' entering main loop') while True: for i in inputs: in_msg = i['queue'].get() if debug: s = '{0} {1}'.format(in_msg.tag, in_msg.data) else: s = '{0}: {1:7.1f} {2}'.format(i['label'], in_msg.data, i['unit']) display.print(s, i['line'], AlignMode.LEFT) for n in range(nskip): for i in inputs: i['queue'].get() except: logger.log(format_current_exception(__name__))
def console_writer(inputs, out_q): logger = Logger(out_q) try: logger.log(__name__ + ' started') logger.log(__name__ + ' entering main loop') while True: for q in inputs: print(q.get()) except: logger.log(format_current_exception(__name__))
def file_reader(out_q, out_topic, filename, sep, field, interval): logger = Logger(out_q) try: logger.log(__name__ + ' started') with open(filename, 'r') as f: logger.log(__name__ + ' entering main loop') while True: for line in f: tokens = line.split(sep) out_msg = Message(out_topic, float(tokens[field])) out_q.put(out_msg) sleep(interval) except: logger.log(format_current_exception(__name__))
def MPL3115A2_reader(initial_altitude, out_q, out_topic, interval): logger = Logger(out_q) try: logger.log(__name__ + ' started') sensor = MPL3115A2() sensor.set_altitude(initial_altitude) logger.log(__name__ + ' entering main loop') while True: altitude = sensor.read_altitude() msg = Message(out_topic, altitude) out_q.put(msg) sleep(interval) except: logger.log(format_current_exception(__name__))
def data_log_writer(inputs, out_q): logger = Logger(out_q) try: logger.log(__name__ + ' started') for i in inputs: with open(i['file'], 'w'): pass logger.log(__name__ + ' entering main loop') while True: for i in inputs: in_msg = i['queue'].get() with open(i['file'], 'a') as f: f.write('{0},{1},{2}\n'.format(in_msg.timestamp, in_msg.data, in_msg.tag)) except: logger.log(format_current_exception(__name__))
def pubsub_manager(in_q, topics, out_q): logger = Logger(out_q) try: logger.log(__name__ + ' started') indexes = {} for t in topics: indexes[t] = 0 logger.log(__name__ + ' entering main loop') while True: in_msg = in_q.get() t, data, timestamp = in_msg.topic, in_msg.data, in_msg.timestamp if t in topics: tag = '{0}.{1}'.format(topics[t].tag, indexes[t]) out_msg = Message(t, data, tag, timestamp) indexes[t] += 1 for q in topics[t].subscriptions: q.put(out_msg) except: logger.log(format_current_exception(__name__))
def network_writer(address, inputs, out_q): logger = Logger(out_q) try: logger.log(__name__ + ' started') with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(address) logger.log(__name__ + ' entering main loop') while True: for label, queue in inputs: in_msg = queue.get() out_msg = { 'label': label, 'value': in_msg.data, 'tag': in_msg.tag } json_msg = json.dumps(out_msg) s.send(json_msg.encode()) ack = s.recv(SOCKET_BUFFER_SIZE) except: logger.log(format_current_exception(__name__))
p.join() print('Exiting') sys.exit(0) if __name__ == '__main__': try: mp.set_start_method('spawn') signal.signal(signal.SIGINT, signal.SIG_IGN) pubsub_queue = mp.Queue() topics = {} logger = Logger(pubsub_queue) logger.log("---> RASPBERRY_FLY STARTING...") logs_queue = pubsub_queue logs_topics = LOGS_TOPIC rwalt_topic = Topic(tag='RA') fltalt_topic = Topic(tag='FA') rwvs_topic = Topic(tag='RV') fltvs_topic = Topic(tag='FV') logs_topic = Topic(tag='LOGS') if SIMULATION: rwalt_reader = mp.Process(target=file_reader, args=(pubsub_queue, RWALT_TOPIC, RWALT_SIMULATION_FILE, RWALT_SIMULATION_SEPARATOR,