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
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
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)
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)
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
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
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()
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()
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
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