Exemplo n.º 1
0
    def __init__(
        self,
        baseObject=None,
        port=None
    ):  # FIXME if no baseObject given, create a default base object

        if port == None:
            self._port = 5683  # IETF default port for coap://
        else:
            self._port = port

        if baseObject == None:
            from iottoolkit.core.SmartObject import SmartObject
            self._baseObject = SmartObject()
        else:
            self._baseObject = baseObject

        self.resources = self._baseObject.resources

        self._host = gethostname()
        self._baseObject.Properties.update(
            {'coapService': 'coap://' + self._host + ':' + repr(self._port)})

        self._coapHandler = CoapRequestHandler(self._baseObject)
        self._coapServer = COAPServer(self._host, self._port,
                                      self._coapHandler)
Exemplo n.º 2
0
    def __init__(self, baseObject=None, port=None):

        if port == None:
            self._port = 8000
        else:
            self._port = port  # default port 8000

        if baseObject == None:
            from iottoolkit.core.SmartObject import SmartObject
            self._baseObject = SmartObject()
        else:
            self._baseObject = baseObject

        self.resources = self._baseObject.resources

        self.start(self._port)
    def __init__(self, systemConstructor):

        self._service_metadata = systemConstructor['service_metadata']
        self._services = systemConstructor['services']
        self._object_metadata = systemConstructor['object_metadata']
        self._objects = systemConstructor['objects']

        self._baseObject = None

        self._defaultResources = {
            'SmartObject': ['Description', 'Agent'],
            'ObservableProperty': ['Description', 'Observers']
        }

        self._observerTypes = [
            'subscribesTo', 'publishesTo', 'bridgesTo', 'handledBy'
        ]

        self._observerSchemes = ['http', 'coap', 'mqtt', 'handler']

        self._mqttObserverTemplate = {
            'resourceName': 'mqttObserver',
            'resourceClass': 'mqttObserver',
            'connection': 'localhost',
            'pubTopic': '',
            'subTopic': '',
            'keepAlive': 60,
            'QoS': 0
        }

        self._httpPublisherTemplate = {
            'resourceName': 'httpPublisher',
            'resourceClass': 'httpPublisher',
            'targetURI': 'http://localhost:8000/'
        }

        self._httpSubscriberTemplate = {
            'resourceName': 'httpSubscriber',
            'resourceClass': 'httpSubscriber',
            'ObserverURI': 'http://localhost:8000/',
        }

        self._coapPublisherTemplate = {
            'resourceName': 'coapPublisher',
            'resourceClass': 'coapPublisher',
            'targetURI': 'coap://localhost:5683/'
        }

        self._coapSubscriberTemplate = {
            'resourceName': 'coapSubscriber',
            'resourceClass': 'coapSubscriber',
            'ObserverURI': 'coap://localhost:5683/'
        }

        self._callbackNotifierTemplate = {
            'resourceName': 'callbackNotifier',
            'resourceClass': 'callbackNotifier',
            'handlerURI': 'handler://'
        }
        '''
        make objects from object models first
        make list sorted by path element count + length for import from graph,
        could count a split list but this should be the same if we eat slashes somewhere
        having the root object called '/' and '/' as the separator is extra work
        '''
        self._resourceList = sorted(self._objects.keys(),
                                    key=lambda s: s.count('/'))
        self._resourceList = sorted(self._resourceList, key=lambda s: len(s))
        for self._resourceLink in self._resourceList:
            self._resourceDescriptor = self._objects[self._resourceLink]
            # see if base object needs to be created.
            if self._resourceLink is '/' and self._resourceDescriptor[
                    'resourceClass'] is 'SmartObject' and self._baseObject is None:
                self._newResource = SmartObject()
                self._baseObject = self._newResource
            else:
                self._parentLink = '/'.join(self._resourceLink.split('/')[:-1])
                if self._parentLink == '': self._parentLink = '/'
                self._parentObject = self._objectFromPath(
                    self._parentLink, self._baseObject)
                self._newResource = self._parentObject.create(
                    self._resourceDescriptor)
            if self._resourceDescriptor[
                    'resourceClass'] in self._defaultResources:
                for self._defaultResource in self._defaultResources[
                        self._resourceDescriptor['resourceClass']]:
                    self._newChildResource = self._newResource.create({
                        'resourceName':
                        self._defaultResource,
                        'resourceClass':
                        self._defaultResource
                    })
                    if self._defaultResource is 'Description':
                        self._newChildResource.create(
                            self._graphFromModel(self._resourceLink,
                                                 self._resourceDescriptor))
                        self._newResource.create({'resourceName':'.well-known', 'resourceClass':'Agent'})\
                        .create({'resourceName':'core', 'resourceClass':'LinkFormatProxy'})
                        # FIXME need to aggregate graphs upstream
            # make observers from the list of URIs of each Observer type
            for self._resourceProperty in self._resourceDescriptor:
                if self._resourceProperty in self._observerTypes:
                    for self._observerURI in self._resourceDescriptor[
                            self._resourceProperty]:
                        self._observerFromURI(self._newResource,
                                              self._resourceProperty,
                                              self._observerURI)
        '''
        make services
        '''
        # make this a service Object (RESTfulResource) with dict as constructor
        self._serviceRegistry = self._objectFromPath('/services',
                                                     self._baseObject)
        self._serviceDescription = self._objectFromPath(
            '/services/Description', self._baseObject)

        for self._serviceName in self._services:
            self._newService = ServiceObject(self._serviceName,
                                             self._services[self._serviceName],
                                             self._baseObject)
            self._serviceRegistry.resources.update(
                {self._serviceName: self._newService})
            self._serviceDescription.set(
                self._graphFromModel(self._serviceName,
                                     self._services[self._serviceName]))