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