Пример #1
0
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__))
Пример #2
0
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__))
Пример #3
0
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__))
Пример #4
0
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__))
Пример #5
0
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__))
Пример #6
0
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__))
Пример #7
0
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__))
Пример #8
0
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__))
Пример #9
0
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__))
Пример #10
0
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__))
Пример #11
0
        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,