Exemplo n.º 1
0
def build_site_node3():
    site = Site()
    for x in 'left', 'middle', 'right':
        site.add_resource(['light', x], Light3())
    site.add_resource(['.well-known', 'core'],
                      WKCResource(site.get_resources_as_linkheader))
    return site
Exemplo n.º 2
0
def init_resource_tree():
    from resources.cluster import ClusterSite
    from aiocoap.resource import Site, WKCResource

    root = Site()
    root.add_resource([".well-known", "core"],
                      WKCResource(root.get_resources_as_linkheader))

    cluster = ClusterSite()
    root.add_resource(["lights"], cluster)

    return root
Exemplo n.º 3
0
class Manager:
    def __init__(self, config):
        self.root = Site()
        self._config = config

        self.root.add_resource([".well-known", "core"],
                               WKCResource(
                                   self.root.get_resources_as_linkheader))

        self.cluster = ClusterSite(self)
        # root.add_resource(["ciao"], Resource())
        self.root.add_resource(["lights"], self.cluster)

    def update_light_resources_of_cluster(self, light):
        self.cluster.add_light_resource(light)
Exemplo n.º 4
0
async def start_server(args):
    hx711 = HX711(args.dout, args.pd_sck)
    hx711.tare()
    hx711.set_reference_unit(args.ref_unit)

    root = Site()
    root.add_resource(['.well-known', 'core'],
                      WKCResource(root.get_resources_as_linkheader,
                                  impl_info=None))
    root.add_resource(['weight'], LoadCellSensor(hx711, 1, args.title))

    protocol = await Context.create_server_context(root,
                                                   bind=('::', args.port))
    registration_parameters = {}
    if args.ep is not None:
        registration_parameters['ep'] = args.ep
    registration = Registerer(protocol,
                              rd=args.rd,
                              registration_parameters=registration_parameters)
Exemplo n.º 5
0
def build_site_node2():
    site = Site()
    temp = Temp()
    site.add_resource(('temp',), temp)
    light = Light()
    site.add_resource(('light',), light)
    for x in (temp, light):
        x.ct = 0

    def get_links():
        links = site.get_resources_as_linkheader()
        links.links.append(Link("/t", anchor="sensors/temp", rel="alternate"))
        links.links.append(Link("http://www.example.com/sensors/t123", anchor="sensors/temp", rel="describedby"))
        return LinkFormat(links.links)
    site.add_resource(('.well-known', 'core'), WKCResource(get_links))

    return site
Exemplo n.º 6
0
def build_site_node1():
    site = Site()
    temp = Temp()
    site.add_resource(('sensors', 'temp'), temp)
    light = Light()
    site.add_resource(('sensors', 'light'), light)
    for x in (temp, light):
        x.if_ = "sensor"
        x.ct = 41

    def get_links():
        links = site.get_resources_as_linkheader()
        for l in links.links:
            if l.href == "/sensors/light":
                l.attr_pairs.append(("anchor", "coap://spurious.example.com:5683"))
        return LinkFormat(links.links)
    site.add_resource(('.well-known', 'core'), WKCResource(get_links))

    return site
Exemplo n.º 7
0
def main():
    """
    Create resource tree from given configuration file
    """

    root = Site()

    # default resources to add
    root.add_resource('', r.RootResource(root))
    root.add_resource(('.well-known', 'core'), r.CoreResource(root))

    # temporarily disabled
    #root.add_resource(('alert',), r.Alert())

    with open('config.json') as data_file:
        sensor_list = json.load(data_file)['sensors']
    
    for sensor in sensor_list:
        # Known sensors that has been pre-defined
        if sensor['name'] == 'hello':
            root.add_resource(tuple(sensor['url'].split('/')), r.HelloWorld())
        elif sensor['name'] == 'time':
            root.add_resource(tuple(sensor['url'].split('/')), r.LocalTime())
        elif sensor['name'] == 'accelerometer':
            root.add_resource(tuple(sensor['url'].split('/')), r.Acceleration())
        elif sensor['name'] == 'temperature':
            root.add_resource(tuple(sensor['url'].split('/')), r.Temperature())
        elif sensor['name'] == 'humidity':
            root.add_resource(tuple(sensor['url'].split('/')), r.Humidity())
        elif sensor['name'] == 'joystick':
            root.add_resource(tuple(sensor['url'].split('/')), r.Joystick())
        # For unknown sensors, use template resource
        else:
            root.add_resource(tuple(sensor['url'].split('/')),
                              r.ResourceTemplate(sensor['name'],
                                                 sensor['active'],
                                                 sensor['period'],
                                                 sensor['min'],
                                                 sensor['max'],
                                                 sensor['channel']))

        print("{} resource added to path /{}".format(sensor['name'], sensor['url']))
        '''
        # Debug information: print all fields of each resource in configuration file
        for entry in sensor:
            if entry != 'name' and entry != 'url':
                print("{}:{}".format(entry, sensor[entry]))
        '''

    asyncio.async(aiocoap.Context.create_server_context(root))
    asyncio.get_event_loop().run_forever()
Exemplo n.º 8
0
def main():
    """
    Create resource tree from given configuration file
    """

    root = Site()

    # default resources to add
    root.add_resource('', r.RootResource(root))
    root.add_resource(('.well-known', 'core'), r.CoreResource(root))

    # temporarily disabled
    # root.add_resource(('alert',), r.Alert())

    with open('/home/pi/POEModule-master/POEModule-master/config.json') as data_file:
        server = json.load(data_file)
        sensor_list = server['sensors']
        status = server['server']['status']
    if status == 'main':
        poe_config = open('/home/pi/POEModule-master/POEModule-master/poe_test.tcl', 'w+')
        for mod in server['server']['additional modules']:
            poe_config.write('ios_config "interface gi {}" "power inline four-pair forced" "shutdown" "no shutdown"\n'.format(mod['port']))
            poe_config.write('exec "show power inline gi {}"\n'.format(mod['port']))       
        poe_config.close()    
        try:
            child = pexpect.spawn('scp %s %s@%s:%s' % ('/home/pi/POEModule-master/POEModule-master/poe_test.tcl', 'group94', '192.168.2.100', 'poe_test.tcl'))
            i = child.expect(['Password:'******'upoe94')
            elif i == 1:
                child.sendline("yes")
                child.expect("Password:"******"TCL file transference failed")

    for sensor in sensor_list:
        # Known sensors that has been pre-defined
        if sensor['name'] == 'hello':
            root.add_resource(tuple(sensor['url'].split('/')), r.HelloWorld())
        elif sensor['name'] == 'time':
            root.add_resource(tuple(sensor['url'].split('/')), r.LocalTime())
        elif sensor['name'] == 'accelerometer':
            root.add_resource(tuple(sensor['url'].split('/')), r.Acceleration())
        elif sensor['name'] == 'temperature':
            root.add_resource(tuple(sensor['url'].split('/')), r.Temperature())
        elif sensor['name'] == 'humidity':
            root.add_resource(tuple(sensor['url'].split('/')), r.Humidity())
        elif sensor['name'] == 'joystick':
            root.add_resource(tuple(sensor['url'].split('/')), r.Joystick())
        elif sensor['name'] == 'Motion':
            root.add_resource(tuple(sensor['url'].split('/')), r.Motion())
        # For unknown sensors, use template resource
        else:
            root.add_resource(tuple(sensor['url'].split('/')),
                              r.ResourceTemplate(sensor['name'],
                                                 sensor['active'],
                                                 sensor['period'],
                                                 sensor['min'],
                                                 sensor['max'],
                                                 sensor['channel']
                                                 ))

        print("{} resource added to path /{}".format(sensor['name'], sensor['url']))
        '''
        # Debug information: print all fields of each resource in configuration file
        for entry in sensor:
            if entry != 'name' and entry != 'url':
                print("{}:{}".format(entry, sensor[entry]))
        '''

    asyncio.async(aiocoap.Context.create_server_context(root))
    asyncio.get_event_loop().run_forever()
Exemplo n.º 9
0
class Broker:
    def __init__(self, db_manager: DataManager, port: int = 5683):
        self._db_manager = db_manager
        self._port = port

        self._loop = None
        self._root = Site()

    def add_topic(self, path: tuple, instance: Union[Resource,
                                                     ObservableResource]):
        """
		Adds a topic to the broker.
		Should be called before starting the broker.
		:param path: A tuple separated path to the topic. For example, `('some', 'path')` will turn into `coap://yourdomain/some/path`.
		:param instance: An instance of aiocoap's resources or something that inherits from it.
		"""
        self._root.add_resource(path, instance)

    def _setup_resources(self):
        self.add_topic(('.well-known', 'core'),
                       WKCResource(self._root.get_resources_as_linkheader))
        self.add_topic(('alldata', ), AllData(self._db_manager))

        self._setup_clients()
        self._setup_datatypes()

    def _setup_clients(self):
        self.add_topic(('list', 'clients'),
                       ListClientsResource(self._db_manager))

        for client in self._db_manager.query_clients():
            alert_resource = ClientAlert()
            self.add_topic(('alert', client['name']), alert_resource)
            self.add_topic(
                ('client', client['name']),
                ClientResource(client['name'], client['ecc_public_key'],
                               self._db_manager, alert_resource))

    def _setup_datatypes(self):
        self.add_topic(('list', 'datatypes'),
                       ListDatatypesResource(self._db_manager))

        for datatype in self._db_manager.query_datatypes():
            self.add_topic(('datatype', datatype['name']),
                           DatatypeResource(datatype['name'],
                                            self._db_manager))

    def run(self):
        self._setup_resources()

        self._loop = asyncio.get_event_loop()
        self._loop.add_signal_handler(SIGTERM, self.stop)
        self._loop.add_signal_handler(SIGINT, self.stop)

        asyncio.Task(
            Context.create_server_context(self._root, bind=('::', self._port)))
        self._loop.run_forever()

    def stop(self, s=None, f=None):
        self._loop.stop()
        self._db_manager.close()
        self._loop = None
Exemplo n.º 10
0
def build_site_node3():
    site = Site()
    for x in 'left', 'middle', 'right':
        site.add_resource(('light', x), Light3())
    site.add_resource(('.well-known', 'core'), WKCResource(site.get_resources_as_linkheader))
    return site