コード例 #1
0
    def run(self):
        broadcast_index = 1
        while not self.config.getboolean('gateway', 'is_adopted'):
            self._send_broadcast(broadcast_index)
            time.sleep(self.interval)
            broadcast_index += 1

        while True:
            response = self._send_inform(create_inform(self.config))
            logger.debug('Receive {} from controller'.format(response))
            time.sleep(self.interval)
コード例 #2
0
    def set_adopt(self, url, key):
        self.config.set('gateway', 'url', url)
        self.config.set('gateway', 'key', key)
        self._save_config()

        response = self._send_inform(create_inform(self.config))
        logger.debug('Receive {} from controller'.format(response))
        if response['_type'] == 'setparam':
            for key, value in response.items():
                if key not in ['_type', 'server_time_in_utc', 'mgmt_cfg']:
                    self.config.set('gateway', key, value)
            self.config.set('gateway', 'is_adopted', True)
            self._save_config()
コード例 #3
0
    def set_adopt(self, url, key):
        self.config.set('gateway', 'url', url)
        self.config.set('gateway', 'key', key)
        self._save_config()

        response = self._send_inform(
            create_inform(self.config, self.datacollector))
        logger.debug('Receive {} from controller'.format(response))
        if response['_type'] == 'httperror':
            if response['code'] == '404':
                logger.info(
                    'Controller has received initial inform, Adopt from GUI and re-run this command'
                )
                return
            if response['code'] == '400':
                logger.error(
                    'Authentication to controller failed, indicates wrong authkey, device removed from controller?'
                )
                return
        if response['_type'] == 'urlerror':
            logger.error('Connection error to controller: {}'.format(
                response['msg']))
            return

        if response['_type'] == 'setparam':
            if not self.config.getboolean('gateway', 'is_adopted'):
                logger.info(
                    'setparam received from controller, device now adopted')
                self.config.set('gateway', 'is_adopted', True)

            for key, value in response.items():
                if key == 'mgmt_cfg':
                    self._parse_mgmt_cfg(value)
                if key not in ['_type', 'server_time_in_utc', 'blocked_sta']:
                    self.config.set('provisioned', key, value)
            self._save_config()
コード例 #4
0
    def run(self):
        broadcast_index = 1
        while not self.config.getboolean('gateway', 'is_adopted'):
            if self.config.getboolean('global', 'disable_broadcast'):
                logger.critical(
                    'Not adopted and TLV broadcasting disabled, run set-adopt first'
                )
                return
            self._send_broadcast(broadcast_index)
            time.sleep(self.interval)
            broadcast_index += 1

        while True:
            self.datacollector.update()

            response = self._send_inform(
                create_inform(self.config, self.datacollector))
            logger.debug('Receive {} from controller'.format(response))
            if response['_type'] == 'noop':
                self.interval = response['interval']
            elif response['_type'] == 'setparam':
                for key, value in response.items():
                    if key == 'mgmt_cfg':
                        self._parse_mgmt_cfg(value)
                    if key not in [
                            '_type', 'server_time_in_utc', 'blocked_sta'
                    ]:
                        self.config.set('provisioned', key, value)
                self._save_config()
            elif response['_type'] == 'reboot':
                logger.info('Received reboot request from controller')
            elif response['_type'] == 'cmd':
                logger.info('Received CMD request: {}'.format(response['cmd']))
                # speed-test
                # set-locate
                # unset-locate
            elif response['_type'] == 'upgrade':
                logger.info('Received upgrade request to version {}'.format(
                    response['version']))
                if response['version'] != self.config.get(
                        'gateway', 'firmware'):
                    self.config.set('gateway', 'previous_firmware',
                                    self.config.get('gateway', 'firmware'))
                    self.config.set('gateway', 'firmware', response['version'])
                    self._save_config()
                    logger.info('New version information stored')
            elif response['_type'] == 'setdefault':
                logger.critical(
                    'Controller requested device reset, removing authkey and adopted state'
                )
                self.config.set('gateway', 'is_adopted', False)
                self.config.set('gateway', 'key', None)
                self.config.set('gateway', 'use_aes_gcm', False)
                self._save_config()
                break
            elif response['_type'] == 'httperror':
                pass
            elif response['_type'] == 'urlerror':
                logger.error(
                    'Connection error to controller, retry in 60 seconds: {}'.
                    format(response['msg']))
                self.interval = 60
            else:
                logger.warn('Unhandled response type')
            time.sleep(self.interval)