コード例 #1
0
ファイル: proxy.py プロジェクト: byoungb/garage-iot
class GarageDoor(Thing):
    def __init__(self):
        super(GarageDoor, self).__init__(
            id_='urn:dev:ops:garage-door',
            title='Garage Door',
            type_=['DoorSensor'],
            description='The garage door',
        )
        self.is_open = Value(False)
        self.add_property(
            Property(
                thing=self,
                name='is_open',
                value=self.is_open,
                metadata={
                    '@type': 'OpenProperty',
                    'title': 'Open/Close',
                    'type': 'boolean',
                    'description': 'Whether the garage door is open',
                },
            ),
        )
        self.add_available_action(
            name='toggle',
            metadata={
                'title': 'Open/Close',
                '@type': 'ToggleAction',
                'description': 'Open/Close Garage Door',
            },
            cls=ToggleAction,
        )
        self.timer = PeriodicCallback(
            callback=self.update_level,
            callback_time=30000,
        )
        self.timer.start()

    def update_level(self):
        data = get('http://garage.home.internal/').json()
        if data.get('is_open') != self.is_open.get():
            self.is_open.notify_of_external_update(
                value=data.get('is_open'),
            )
コード例 #2
0
class AnwingWebThing(Thing):

    # regarding capabilities refer https://iot.mozilla.org/schemas
    # there is also another schema registry http://iotschema.org/docs/full.html not used by webthing

    def __init__(self, description: str, awning: Awning):
        Thing.__init__(self, 'urn:dev:ops:anwing-TB6612FNG',
                       'Awning ' + awning.name + " Controller",
                       ['MultiLevelSensor'], description)
        self.awning = awning
        self.awning.register_listener(WebThingAwningPropertyListener(self))

        self.target_position = Value(0, self.__target_position)
        self.add_property(
            Property(self,
                     'target_position',
                     self.target_position,
                     metadata={
                         '@type': 'LevelProperty',
                         'title': 'Awning target position',
                         "type": "integer",
                         "minimum": 0,
                         "maximum": 100,
                         "unit": "percent",
                         'description': 'awning target position'
                     }))

        self.current_position = Value(0)
        self.add_property(
            Property(self,
                     'current_position',
                     self.current_position,
                     metadata={
                         '@type': 'LevelProperty',
                         'title': 'Awning current position',
                         "type": "integer",
                         'minimum': 0,
                         'maximum': 100,
                         "unit": "percent",
                         'readOnly': True,
                         'description': 'awning current position'
                     }))

        self.retracting = Value(0)
        self.add_property(
            Property(self,
                     'retracting',
                     self.retracting,
                     metadata={
                         '@type': 'BooleanProperty',
                         'title': 'Awning is retracting',
                         "type": "boolean",
                         'readOnly': True,
                         'description': 'Awning is retracting'
                     }))

        self.extending = Value(0)
        self.add_property(
            Property(self,
                     'extending',
                     self.extending,
                     metadata={
                         '@type': 'BooleanProperty',
                         'title': 'Awning is extending',
                         "type": "boolean",
                         'readOnly': True,
                         'description': 'Awning is extending'
                     }))

        self.ioloop = tornado.ioloop.IOLoop.current()

    def __target_position(self, new_postion):
        self.awning.set_target_position(new_postion)

    def set_current_position(self, value):
        self.current_position.notify_of_external_update(value)
        logging.debug(self.awning.name + " position " + str(value) +
                      " reached (target=" + str(self.target_position.get()) +
                      ")")

    def set_retracting(self, value):
        self.retracting.notify_of_external_update(value)

    def set_extending(self, value):
        self.extending.notify_of_external_update(value)