def test_app_info(self, fix_registered):
     "Test getting info for the app."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     app = c.get_app()
     assert hasattr(app, 'id')
Example #2
0
 def test_user_name(self, fix_registered):
     "Test get name attribute of User object for connected user."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.name == fix_registered.testset1['userName']
Example #3
0
 def test_app_info(self, fix_registered):
     "Test getting info for the app."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     app = c.get_app()
     assert hasattr(app, 'id')
    def test_list_all_publishers(self):
        from relayr import Client

        c = Client()
        expected_attrs = set(["id", "name", "owner"])
        for p in c.get_public_publishers():
            assert expected_attrs.issubset(set(dir(p))) == True
 def test_user_name(self, fix_registered):
     "Test get name attribute of User object for connected user."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.name == fix_registered.testset1['userName']
Example #6
0
 def test_get_user_bookmarked_devices(self, fix_registered):
     "Test get user's bookmarked devices."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     user = c.get_user()
     b_devs = user.get_bookmarked_devices()
     assert type(list(b_devs)) == list
 def test_get_appdev_token(self, fix_registered):
     "Test get appdev token."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     app = c.get_app()
     res = c.api.get_oauth2_appdev_token(app.id)
     assert res['token'] == token
Example #8
0
 def test_get_appdev_token(self, fix_registered):
     "Test get appdev token."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     app = c.get_app()
     res = c.api.get_oauth2_appdev_token(app.id)
     assert res['token'] == token
 def test_get_user_bookmarked_devices(self, fix_registered):
     "Test get user's bookmarked devices."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     user = c.get_user()
     b_devs = user.get_bookmarked_devices()
     assert type(list(b_devs)) == list
 def test_get_wunderbar_devices(self, fix_registered):
     "Test get user's registered wunderbar devices and master."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     items = list(usr.register_wunderbar())
     assert len(items) == 7
Example #11
0
 def test_get_wunderbar_devices(self, fix_registered):
     "Test get user's registered wunderbar devices and master."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     items = list(usr.register_wunderbar())
     assert len(items) == 7
 def test_public_resources(self, fix_registered):
     "Get public resources."
     from relayr import Client
     from relayr.resources import App, Publisher, Device, DeviceModel
     token = fix_registered.testset1['token']
     c = Client(token=token)
     assert next(c.get_public_apps()).__class__ == App
     assert next(c.get_public_devices()).__class__ == Device
     assert next(c.get_public_device_models()).__class__ == DeviceModel
     assert next(c.get_public_publishers()).__class__ == Publisher
Example #13
0
    def relayr_configure(self):
        from relayr import Client
        from relayr.dataconnection import MqttStream
        self.client = Client(token=self.relayr_config["token"])
        self.devices = {
            self.client.get_device(id=device['id']): device['name']
            for device in self.relayr_config["devices"]
        }

        self.mqtt_stream = MqttStream(self.mqtt_callback, self.devices.keys())
 def _x_user_parser(user, data):
     client = Client(token=user.credentials.token)
     usr = client.get_user()
     user.name = usr.name
     user.id = usr.id
     user.email = usr.email
     user.transmitters = list(usr.get_transmitters())        
     user.transmitters_devices = {}
     for t in user.transmitters:
         user.transmitters_devices[t.name] = client.api.get_transmitter_devices(t.id)
     return user
 def test_find_wunderbar_devices(self, fix_registered):
     "Test get all devices on a Wunderbar."
     from relayr import Client
     from relayr.resources import Device, Transmitter
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.name == fix_registered.testset1['userName']
     devs = usr.register_wunderbar()
     for d in devs:
         assert d.__class__ in (Device, Transmitter)
         assert hasattr(d, 'id')
Example #16
0
 def test_users_resources(self, fix_registered):
     "Test get user's resources."
     from relayr import Client
     from relayr.resources import User, Publisher, App, Device
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.__class__ == User
     assert c.get_app().__class__ == App
     assert next(usr.get_apps()).__class__ == App
     assert next(usr.get_devices()).__class__ == Device
     assert next(usr.get_publishers()).__class__ == Publisher
 def test_users_resources(self, fix_registered):
     "Test get user's resources."
     from relayr import Client
     from relayr.resources import User, Publisher, App, Device
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.__class__ == User
     assert c.get_app().__class__ == App
     assert next(usr.get_apps()).__class__ == App
     assert next(usr.get_devices()).__class__ == Device
     assert next(usr.get_publishers()).__class__ == Publisher
Example #18
0
 def test_find_wunderbar_devices(self, fix_registered):
     "Test get all devices on a Wunderbar."
     from relayr import Client
     from relayr.resources import Device, Transmitter
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.name == fix_registered.testset1['userName']
     devs = usr.register_wunderbar()
     for d in devs:
         assert d.__class__ in (Device, Transmitter)
         assert hasattr(d, 'id')
Example #19
0
 def _x_user_parser(user, data):
     client = Client(token=user.credentials.token)
     usr = client.get_user()
     user.name = usr.name
     user.id = usr.id
     user.email = usr.email
     user.transmitters = list(usr.get_transmitters())
     user.transmitters_devices = {}
     for t in user.transmitters:
         user.transmitters_devices[
             t.name] = client.api.get_transmitter_devices(t.id)
     return user
def main():
    "Get some current sensor values from a prototype."

    # Use token from your relayr API keys page.
    # *** REPLACE WITH YOUR OWN! ***
    c = Client(token='kKSWtiYvfFoTHD1RY-d7Lif4tPRhUKgU')
    dev = c.get_device(id=creds['user'])
    def mqtt_callback(topic, payload):
        print json.loads(payload)['readings']
    stream = MqttStream(mqtt_callback, [dev])
    stream.start()
    time.sleep(10)
    stream.stop()
 def test_app_update(self, fix_registered):
     "Test update info for some app."
     # This is actually done twice for making this an idempotent operation.
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     app = c.get_app()
     initial_app_name = app.name
     # update name to something silly
     silly_name = 'HolyWhat?'
     app.update(name=silly_name)
     assert app.name == silly_name
     # update name to previous name
     app.update(name=initial_app_name)        
     assert app.name == initial_app_name
Example #22
0
 def test_app_update(self, fix_registered):
     "Test update info for some app."
     # This is actually done twice for making this an idempotent operation.
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     app = c.get_app()
     initial_app_name = app.name
     # update name to something silly
     silly_name = 'HolyWhat?'
     app.update(name=silly_name)
     assert app.name == silly_name
     # update name to previous name
     app.update(name=initial_app_name)
     assert app.name == initial_app_name
Example #23
0
    def test_read_mqtt_single_device(self, fix_registered):
        "Test connect to a single device via MQTT and read data."
        import time
        from relayr import Client
        from relayr.resources import Device
        import paho.mqtt.client as mqtt

        token = fix_registered.testset1['token']
        c = Client(token=token)
        deviceId = fix_registered.testset1['deviceID']
        d = Device(id=deviceId, client=c)

        creds = c.api.post_channel(d.id, 'mqtt')
        print('full channel creds:', creds)
        creds = creds['credentials']

        self.topics = [creds['topic'].encode('utf-8')]

        client = mqtt.Client(client_id=creds['clientId'])
        client.on_connect = self.on_connect
        client.on_message = self.on_message
        client.on_subscribe = self.on_subscribe
        client.username_pw_set(creds['user'], creds['password'])

        null_file = '/dev/null' if platform.system() != 'Windows' else 'nul'
        client.tls_set(ca_certs=null_file, cert_reqs=ssl.CERT_NONE)
        client.tls_insecure_set(True)

        client.connect('mqtt.relayr.io', port=8883, keepalive=60)
        try:
            client.loop_forever()
        except KeyboardInterrupt:
            print('')
Example #24
0
    def test_create_list_delete(self, fix_registered):
        "Test create, list and delete channel credentials."
        from relayr import Client
        from relayr.exceptions import RelayrApiException
        token = fix_registered.testset1['token']
        c = Client(token=token)
        deviceID = fix_registered.testset1['deviceID']

        # create channel creds
        creds = c.api.post_channel(deviceID, 'mqtt')
        assert type(creds) == dict
        assert set(['channelId', 'credentials']).issubset(set(creds.keys()))
        channelId = creds['channelId']

        # list channels for device
        info = c.api.get_device_channels(deviceID)
        assert info['deviceId'] == deviceID
        assert channelId in [ch['channelId'] for ch in info['channels']]

        # delete channel creds
        res = c.api.delete_channel_id(channelId)
        assert res == None

        # try delete again
        with pytest.raises(RelayrApiException) as excinfo:
            res = c.api.delete_channel_id(channelId)
        msg = 'Channel with id %s not found' % channelId
        assert msg in str(excinfo.value)
Example #25
0
    def test_read_mqtt_multi_device_abstract(self, fix_registered):
        "Test add/remove devices dynamically and read their data."
        import time
        from relayr import Client
        from relayr.resources import Device
        from relayr.dataconnection import MqttStream

        fixture = fix_registered.testset1

        c = Client(token=fixture['token'])

        # create channel with one device (microphone)
        mic = Device(id=fixture['deviceID'], client=c)
        stream = MqttStream(self.receive, [mic])
        stream.start()
        time.sleep(5)

        # add one device (temperature/humidity)
        temphum = Device(id=fixture['deviceID2'], client=c)
        stream.add_device(temphum)
        time.sleep(5)

        # remove one device (microphone)
        stream.remove_device(mic)
        time.sleep(5)

        stream.stop()
Example #26
0
class RelayrSensorApp(App):
    def __init__(self, **kwargs):
        super(RelayrSensorApp, self).__init__(**kwargs)
        from kivy.storage.jsonstore import JsonStore
        self.relayr_config = JsonStore('relayr_credentials.json')

        self.relayr_configure()

    def mqtt_callback(self, topic, payload):
        self.root.update(topic, payload)

    def relayr_configure(self):
        from relayr import Client
        from relayr.dataconnection import MqttStream
        self.client = Client(token=self.relayr_config["token"])
        self.devices = {self.client.get_device(id=device['id']): device['name'] for device in
                        self.relayr_config["devices"]}

        self.mqtt_stream = MqttStream(self.mqtt_callback, self.devices.keys())

    def on_start(self):
        self.mqtt_stream.start()

    def on_pause(self):
        self.mqtt_stream.stop()

    def on_resume(self):
        self.mqtt_stream.start()

    def on_stop(self):
        self.mqtt_stream.stop()

    def build(self):
        from widgets import MainWidget
        return MainWidget(self.devices)
Example #27
0
 def test_client_log(self, fix_registered):
     "Test logging some messages."
     token = fix_registered.testset1['token']
     import datetime
     from relayr import Client
     c = Client(token=token)
     now = datetime.datetime.now()
     before = now - datetime.timedelta(minutes=25)
     messages = [
         {
             "timestamp": before.isoformat(),
             "message": "heavy rain shower",
             "connection": {
                 "internet": True
             }
         },
         {
             "timestamp": now.isoformat(),
             "message": "sunshine with rainbow",
             "connection": {
                 "internet": True
             }
         },
     ]
     res = c.api.post_client_log(messages)
     assert res == None
Example #28
0
 def test_access_device(self, fix_registered):
     "Test access a public device."
     from relayr import Client
     from relayr.resources import Device
     token = fix_registered.testset1['token']
     deviceID = fix_registered.testset1['deviceID']
     c = Client(token=token)
     dev = Device(id=deviceID)
Example #29
0
 def _test_update_user(self, fix_registered):
     "Test update user attribute, here: name."
     from relayr import Client
     ## TODO: check if a regular user can change his own attributes...
     token = fix_registered.testset1['token']
     c = Client(token=token)
     info = c.api.get_oauth2_user_info()
     c.api.patch_user(info['id'], name='dcg')
Example #30
0
 def test_exception_missing_creds(self):
     "Test raising exception for missing credentials."
     from relayr import Client
     from relayr.exceptions import RelayrApiException
     with pytest.raises(RelayrApiException) as excinfo:
         info = Client().api.get_oauth2_user_info()
     prefix = 'The supplied authentication is not authorized to access this resource.'
     assert str(excinfo.value).startswith(prefix)
Example #31
0
    def relayr_configure(self):
        from relayr import Client
        from relayr.dataconnection import MqttStream
        self.client = Client(token=self.relayr_config["token"])
        self.devices = {self.client.get_device(id=device['id']): device['name'] for device in
                        self.relayr_config["devices"]}

        self.mqtt_stream = MqttStream(self.mqtt_callback, self.devices.keys())
Example #32
0
 def test_connected_user(self, fix_registered):
     "Test get info about the currently connected user."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     info = c.api.get_oauth2_user_info()
     for key in 'name email id'.split():
         assert key in info
Example #33
0
 def test_find_wunderbar_devices(self, fix_registered):
     "Test get all devices on a Wunderbar."
     from relayr import Client
     from relayr.resources import Device, Transmitter
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.name == fix_registered.testset1['userName']
     devs = list(usr.register_wunderbar())
     for d in devs:
         assert d.__class__ in (Device, Transmitter)
         assert hasattr(d, 'id')
     # now clean-up
     for dev in [d for d in devs if d.__class__ == Device]:
         dev.delete()
     for t in [d for d in devs if d.__class__ == Transmitter]:
         t.delete()
Example #34
0
 def test_connected_app(self, fix_registered):
     "Test get info about the currently connected app."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     info = c.api.get_oauth2_app_info()
     for key in 'name description id'.split():
         assert key in info
 def test_find_wunderbar_devices(self, fix_registered):
     "Test get all devices on a Wunderbar."
     from relayr import Client
     from relayr.resources import Device, Transmitter
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
     assert usr.name == fix_registered.testset1['userName']
     devs = list(usr.register_wunderbar())
     for d in devs:
         assert d.__class__ in (Device, Transmitter)
         assert hasattr(d, 'id')
     # now clean-up
     for dev in [d for d in devs if d.__class__ == Device]:
         dev.delete()
     for t in [d for d in devs if d.__class__ == Transmitter]:
         t.delete()
Example #36
0
 def test_apps_of_connected_user(self, fix_registered):
     "Get apps of connected user."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     apps = c.api.get_user_apps(c.api.get_oauth2_user_info()['id'])
     assert len(apps) > 0
     assert type(apps[0]) == dict
Example #37
0
 def test_read_pubnub_device_10s(self, fix_registered):
     "Test connect to a device via PubNub and read data for some time."
     import time
     from relayr import Client
     from relayr.resources import Device
     token = fix_registered.testset1['token']
     deviceID = fix_registered.testset1['deviceID']
     self.received_data = []
     c = Client(token=token)
     dev = Device(id=deviceID, client=c).get_info()
     usr = c.get_user()
     app = c.get_app()
     conn = usr.connect_device(app, dev, self.receive)
     conn.start()
     time.sleep(10)
     conn.stop()
     assert len(self.received_data) > 0
     for item in self.received_data:
         assert 'ts' in item
Example #38
0
 def test1_get_token(self, fix_registered):
     "Test get current token and compare with the one given to connect."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     app_id = c.api.get_oauth2_app_info()['id']
     info = c.api.get_oauth2_appdev_token(app_id)
     for key in 'token expiryDate'.split():
         assert key in info
     assert token == info['token']
Example #39
0
 def test_get_transmitters(self, fix_registered):
     "Test get user's transmitters."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     user_info = c.api.get_oauth2_user_info()
     trans_info = c.api.get_user_transmitters(user_info['id'])
     for trans in trans_info:
         for key in 'owner name id'.split():  # plus others...
             assert key in trans
Example #40
0
 def test_send_command_device(self, fix_registered):
     "Test send a command to a device."
     from relayr import Client
     from relayr.resources import Device
     token = fix_registered.testset1['token']
     c = Client(token=token)
     deviceID = fix_registered.testset1['deviceID']
     dev = Device(id=deviceID, client=c)
     dev.get_info()
     dev.switch_led_on(True)
Example #41
0
 def test_pub_get_apps(self, fix_registered):
     "Test getting apps for some publisher."
     from relayr import Client
     from relayr.resources import Publisher
     publisherID = fix_registered.testset1['publisherID']
     pub = Publisher(id=publisherID, client=Client())
     apps = pub.get_apps()
     app_list = list(apps)
     assert len(app_list) >= 1
     assert hasattr(app_list[0], 'id')
Example #42
0
 def test_pub_get_apps_extended(self, fix_registered):
     "Test getting extended apps for some publisher."
     from relayr import Client
     from relayr.resources import Publisher
     token = fix_registered.testset1['token']
     c = Client(token=token)
     publisherID = fix_registered.testset1['publisherID']
     pub = Publisher(id=publisherID, client=c)
     apps = pub.get_apps(extended=True)
     app_list = list(apps)
     assert len(app_list) >= 1
     assert hasattr(app_list[0], 'clientId')
Example #43
0
 def test_get_transmitter_devices(self, fix_registered):
     "Test getting devices of a known transmitter."
     from relayr import Client
     from relayr.resources import Transmitter
     token = fix_registered.testset1['token']
     transmitterID = fix_registered.testset1['transmitterID']
     c = Client(token=token)
     t = Transmitter(id=transmitterID, client=c)
     t.get_info()
     assert t.name == fix_registered.testset1['transmitterName']
     devs = t.get_connected_devices()
     assert len(list(devs)) == 6
class RelayrService:
    def __init__(self, token, deviceId):
        # device 'fe4bb3e0-400f-48fa-aac0-0c2713a92827'
        #token 'FvhcUVcNkTsHqg4qI1w3wVs-Gadryj8O'
        self.client = Client(token=token)
        self.device = self.client.get_device(id=deviceId)

    def startStream(self, callback):
        self.stream = MqttStream(callback, [self.device])
        self.stream.start()

    def stopStream(self):
        self.stream.stop()
Example #45
0
    def test_add_list_remove_device_group_device(self, fix_registered):
        "Test add, list, update and remove device to/from device group."
        from relayr import Client
        from relayr.exceptions import RelayrApiException
        from relayr.resources import Group, Device
        token = fix_registered.testset1['token']
        c = Client(token=token)

        # create test group
        group_name = 'TestGroup'
        g = Group(client=c).create(name=group_name)
        g.get_info()
        assert g.name == group_name
        assert len(g.devices) == 0

        # add two WunderBar devices
        d1_id = fix_registered.testset1['deviceID']
        d1 = Device(d1_id)
        g.add_device(d1)
        d2_id = fix_registered.testset1['deviceID2']
        d2 = Device(d2_id)
        g.add_device(d2)

        # get test group, again
        g = Group(id=g.id, client=c).get_info()
        devices = g.devices
        assert len(devices) == 2
        assert devices[0].id == d1_id
        assert devices[1].id == d2_id

        # update last device's position in group to be first
        g.update_device(devices[1], 0)

        # get test group, again
        g = Group(id=g.id, client=c).get_info()
        devices = g.devices
        assert len(devices) == 2
        assert devices[0].id == d2_id
        assert devices[1].id == d1_id

        # remove first device in group
        g.remove_device(devices[0])

        # get test group, again
        g = Group(id=g.id, client=c).get_info()
        devices = g.devices
        assert len(devices) == 1
        assert devices[0].id == d1_id

        # delete test group
        g.delete()
 def test4(self, fix_registered):
     "Test get publishers for connected user."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     usr = c.get_user()
 def test_post_user_devices_bookmarks(self, fix_registered):
     "Test get user's bookmarked devices."
     from relayr import Client
     token = fix_registered.testset1['token']
     c = Client(token=token)
     user = c.get_user()
import time
from relayr import Client
from relayr.dataconnection import MqttStream
c = Client(token='<my_access_token>')
dev = c.get_device(id='<my_device_id>')
def mqtt_callback(topic, payload):
    print('%s %s' % (topic, payload))
stream = MqttStream(mqtt_callback, [dev])
stream.start()
time.sleep(10)
stream.stop()
Example #49
0
import plotly.tools as tls

from relayr import Client
from relayr.dataconnection import MqttStream

# read config filename
with open('config.yml', 'r') as f:
    config = yaml.load(f)

print(config)

# how often to write to plot.ly in seconds
UPDATE_INTERVALL = config["update_intervall"]

# relayr auth and temperature sensor device
c = Client(token=config["relayr"]["token"])
dev = c.get_device(id=config["relayr"]["deviceid"])

# plot.ly auth
py.sign_in(config["plotly"]["user"], config["plotly"]["apikey"])

# one stream token per trace to be plotted
# https://plot.ly/settings/api
tls.set_credentials_file(stream_ids=config["plotly"]["stream_ids"])

stream_ids = tls.get_credentials_file()['stream_ids']

# plotly: Get first stream token from stream id list
stream_id = stream_ids[0]

# plotly: Make instance of stream id object
Example #50
0
import datetime
import json
import sqlite3
from relayr import Client
from relayr.dataconnection import MqttStream

conn = sqlite3.connect('relayr_sensorsdb.sqlite3')
cur = conn.cursor()

#cur.execute('DROP TABLE IF EXISTS sensors')
cur.execute('CREATE TABLE IF NOT EXISTS sensors (x TEXT, door TEXT, hum TEXT, temp TEXT)')

# works most of the time but sometimes this gives error messages... still needs some fixing
while True:
    stuff = list()    
    c = Client(token='<insert your relayr token here>')
    dev = c.get_device(id='<insert your relayr device id here>')
    def mqtt_callback(topic, payload):
        payvar = '%s' % (payload)
        stuff.append(payvar)
    stream = MqttStream(mqtt_callback, [dev])
    stream.start()
    time.sleep(3)
    x = datetime.datetime.now()
    print x
    #there is an erro with the stuff[0] from time to time. I thought the line commented below helped but error still occures occasionally
    #if stuff[0] == None : break
    payvar = stuff[0]
    try: js = json.loads(payvar)
    except: js = None
    door = js["readings"][0]["value"]
Example #51
0
import time
from relayr import Client
from relayr.dataconnection import MqttStream
try:
    import json
except ImportError:
    import simplejson as json

with open('apikeys.txt', 'r') as keyFile:
    keyFile = open('apikeys.txt', 'r')
    CLIENT_TOKEN = keyFile.readline().rstrip()
    DEVICE_ID = keyFile.readline().rstrip()
keyFile.closed

c = Client(token=CLIENT_TOKEN)
dev = c.get_device(id=DEVICE_ID)
def mqtt_callback(topic, payload):
    print('%s %s' % (topic, payload))
stream = MqttStream(mqtt_callback, [dev])
stream.start()
time.sleep(10)
stream.stop()




#example code where I scraped json to see how to do that
# sound = twitter.statuses.user_timeline.tweets(screen_name="amandapalmer", since_id = int(readData),
#                                                    exclude_replies = "true", include_rts = "false")
#
# #step through list of last tweets