def wait_for_nic(self, timeout=5): """ :param timeout: (Default value = 5) """ eggtimer = Eggtimer(duration=timeout) log.info('Waiting for network interface') while not eggtimer.expired(): self.device.watchdog.feed() try: # TODO: Make WiFi-agnostic. if self.wifi_manager.is_connected(): log.info('Network interface ready') return True except OSError as ex: log.warning('Network interface not available: %s', format_exception(ex)) # Report about progress. sys.stderr.write('.') #sys.stderr.flush() # Save power while waiting. machine.idle() time.sleep(0.25) # TODO: Make WiFi-agnostic. raise NetworkUnavailable('Could not connect to WiFi network')
def connect(self): """Connect to MQTT broker""" try: log.info('Connecting to MQTT broker at {} with username {}'.format( self.server, self.username)) self.connection = self.driver_class(self.client_id, self.server, port=self.port, user=self.username, password=self.password) self.connection.DEBUG = True self.connection.connect() self.connected = True log.info('Connecting to MQTT broker at %s succeeded', self.connection.addr) except Exception as ex: # FIXME: Evaluate exception. "MQTTException: 5" means "Authentication/Authorization failed". self.connected = False message = 'Connecting to MQTT broker at {} failed: {}'.format( self.server, format_exception(ex)) log.exc(ex, message) raise TelemetryAdapterError(message) return self.connected
def wait_for_ip_stack(self, timeout=5): eggtimer = Eggtimer(duration=timeout) log.info('Waiting for network stack') while not eggtimer.expired(): self.device.watchdog.feed() try: socket.getaddrinfo("localhost", 333) log.info('Network stack ready') return True except OSError as ex: log.warning('Network stack not available', format_exception(ex)) # Report about progress. sys.stderr.write('.') #sys.stderr.flush() # Save power while waiting. machine.idle() time.sleep(0.25) # TODO: Make WiFi-agnostic. raise NetworkUnavailable('Could not connect to WiFi network')
def send(self, request_data): # Evaluate and handle defunctness. if self.defunct: if not self.defunctness_reported: log.error('MQTT transport is defunct, please scan log ' 'output for previous error messages.') self.defunctness_reported = True return False # Derive MQTT topic string from URI path component. topic = self.target.path.lstrip('/') if not topic: message = 'Empty MQTT topic, please configure MQTT URI with path component or topology with address' raise TelemetryTransportError(message) # Use payload from request. payload = request_data['payload'] # Reporting. log.debug('MQTT topic: %s', topic) log.debug('MQTT payload: %s', payload) try: connection = self.get_connection() connection.publish(topic, payload) except TelemetryAdapterError as ex: message = 'Protocol adapter not connected: {}'.format( format_exception(ex)) raise TelemetryTransportError(message) return True
def wait_for_nic(self, retries=5): attempts = 0 while attempts < retries: try: socket.getaddrinfo("localhost", 333) break except OSError as ex: log.warning('Network interface not available: %s', format_exception(ex)) log.info('Waiting for network interface') # Save power while waiting. machine.idle() time.sleep(0.25) attempts += 1 log.info('Network interface ready')
def send(self, dataframe: DataFrame): """ :param dataframe: defined in terkin/model.py sends data in dataframe.payload_out per MQTT to a server """ # Evaluate and handle defunctness. if self.defunct: if not self.defunctness_reported: log.error('MQTT transport is defunct, please scan log ' 'output for previous error messages.') self.defunctness_reported = True return False # Derive MQTT topic string from URI path component. topic = self.target.path.lstrip('/') if not topic: message = 'Empty MQTT topic, please configure MQTT URI with path component or topology with address' raise TelemetryTransportError(message) # Use payload from request. payload = dataframe.payload_out # Reporting. log.info('MQTT topic: %s', topic) prettify_log = False if prettify_log: log.info('MQTT payload:\n\ns', dformat(payload, indent=48)) else: log.info('MQTT payload: %s', payload) try: connection = self.get_connection() connection.publish(topic, payload) except TelemetryAdapterError as ex: message = 'Protocol adapter not connected: {}'.format( format_exception(ex)) raise TelemetryTransportError(message) return True
def connect(self): """Connect to MQTT broker""" try: log.info('Connecting to MQTT broker at %s', self.server) self.connection = self.driver_class(self.client_id, self.server, port=self.port) self.connection.DEBUG = True self.connection.connect() self.connected = True log.info('Connecting to MQTT broker at %s succeeded', self.connection.addr) except Exception as ex: self.connected = False message = 'Connecting to MQTT broker at {} failed: {}'.format( self.server, format_exception(ex)) log.exception(message) raise TelemetryAdapterError(message) return self.connected