Beispiel #1
0
    def test_mqtt(self):
        loop = asyncio.get_event_loop()
        s = Scheduler(loop)
        sensor = make_test_output_thing_from_vallist(1, sensor_data)
        mqtt_writer = MQTTWriter('localhost', topics=[
            ('bogus/bogus', 0),
        ])
        sensor.to_json().connect(mqtt_writer)
        s.schedule_periodic(sensor, 0.5)

        mqtt_reader = MQTTReader("localhost", topics=[
            ('bogus/bogus', 0),
        ])
        vs = ValidationInputThing(sensor_data, self)
        mqtt_reader.take(5).select(mqtt_msg_to_unicode).from_json(constructor=SensorEvent) \
                       .output().connect(vs)
        c = s.schedule_on_private_event_loop(mqtt_reader)
        stop = StopLoopAfter(5, c)
        mqtt_reader.connect(stop)
        mqtt_reader.print_downstream()
        sensor.print_downstream()
        s.run_forever()
        loop.stop()
        self.assertTrue(vs.completed)
        print("that's it")
Beispiel #2
0
 def test_case(self):
     """Just run the reader in its own event loop. We stop everything after 4
     events.
     """
     s = Scheduler(asyncio.get_event_loop())
     m = MQTTReader("localhost",
                    topics=[
                        ('bogus/bogus', 0),
                    ],
                    mock_class=MockMQTTClient)
     m.output()
     c = s.schedule_on_private_event_loop(m)
     m.connect(StopLoopAfter(4, c))
     m.print_downstream()
     s.run_forever()
     print("that's it")
Beispiel #3
0
def main():
    parser = argparse.ArgumentParser(
        description=
        "Subscribe to the specified topic and write the resulting messages to Influxdb"
    )
    parser.add_argument(
        '--mqtt-host',
        type=str,
        default='localhost',
        help="Hostname or IP address of MQTT broker (defaults to localhost)")
    parser.add_argument(
        '--topic-name',
        type=str,
        default='sensor-data',
        help="Topic for subscription (defaults to sensor-data)")
    parser.add_argument('--influx-host',
                        type=str,
                        default='localhost',
                        help="Influx db host (defaults to localhost)")
    parser.add_argument('--influx-username',
                        type=str,
                        default='root',
                        help="Influx db username (defaults to root)")
    parser.add_argument('--influx-password',
                        type=str,
                        default=None,
                        help="Influx db password (defaults to None)")
    parser.add_argument('--influx-database',
                        type=str,
                        default='sensor-data',
                        help="Influx db database (defaults to sensor-data)")
    parser.add_argument('--influx-measurement',
                        type=str,
                        default='lux',
                        help="Influx db measurement (defaults to lux)")
    args = parser.parse_args()
    mqtt = setup_flow(args)
    scheduler = Scheduler(asyncio.get_event_loop())
    stop = scheduler.schedule_on_private_event_loop(mqtt)
    print("Running main loop")
    try:
        scheduler.run_forever()
    except KeyboardInterrupt:
        print("Stopping...")
        stop()
    return 0
def main():
    parser = argparse.ArgumentParser(
        description=
        "Subscribe to the specified port and write the resulting messages")
    parser.add_argument('topic_name',
                        metavar='TOPIC_NAME',
                        type=str,
                        help="Topic for subscription")
    parser.add_argument('csv_filename',
                        metavar="CSV_FILENAME",
                        type=str,
                        help="Name of CSV file to write with sensor data")
    args = parser.parse_args()
    mqtt = setup_flow(args.topic_name, args.csv_filename)
    scheduler = Scheduler(asyncio.get_event_loop())
    stop = scheduler.schedule_on_private_event_loop(mqtt)
    print("Running main loop")
    try:
        scheduler.run_forever()
    except KeyboardInterrupt:
        print("Stopping...")
        stop()
    return 0
scheduler = Scheduler(asyncio.get_event_loop())

if HAS_LOCAL_SENSOR:
    sensor = SensorAsOutputThing(LuxSensor(sensor_id=LOCAL_SENSOR_ID))
    sensor.rolling_csv_writer(DIRECTORY, LOCAL_SENSOR_ID)
    sensor.output()
    scheduler.schedule_periodic_on_separate_thread(sensor, 60)

mqtt_reader = MQTTReader('localhost',
                         client_id='rpi',
                         topics=[
                             ('remote-sensors', 0),
                         ])
# we convert the tuple received into a SensorEvent, overwriting the timestamp.
dispatcher = mqtt_reader.map(lambda m:(m.payload).decode("utf-8"))\
                        .from_json()\
                        .map(lambda tpl: SensorEvent(sensor_id=tpl[0], ts=time.time(), val=tpl[2]))\
                        .dispatch(dispatch_rules)
# For each remote sensor, we create a separate csv writer
for remote in REMOTE_SENSORS:
    dispatcher.rolling_csv_writer(DIRECTORY, remote, sub_port=remote).output()
dispatcher.connect(lambda x: print("Unexpected sensor %s, full event was %s" %
                                   (x.sensor_id, x)))
#mqtt_reader.output()
mqtt_reader.print_downstream()

scheduler.schedule_on_private_event_loop(mqtt_reader)
print("Starting run...")
scheduler.run_forever()
Beispiel #6
0
    python server_cpx.py
'''

import asyncio
import thingflow.filters.map   # adds map() method
import thingflow.filters.json  # adds json() method
from thingflow.base import Scheduler, SensorEvent
from thingflow.adapters.mqtt import MQTTReader
from cpx_transducer import RingInputThing, init_cpx

def setup_flow(topic):
    mqtt = MQTTReader('localhost', topics=[(topic, 0),])
    ring = RingInputThing()
    decoded = (mqtt
        .map(lambda m:(m.payload).decode('utf-8'))
        .from_json(constructor=SensorEvent)
        .map(lambda evt: SensorEvent(sensor_id=evt.sensor_id,
            ts=evt.ts, val=int(evt.val * 255))))
    decoded.output()
    decoded.connect(ring)
    return mqtt


init_cpx()
mqtt = setup_flow('sensor-data')

scheduler = Scheduler(asyncio.get_event_loop())
scheduler.schedule_on_private_event_loop(mqtt)
scheduler.run_forever()