示例#1
0
    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')
示例#2
0
    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
示例#3
0
    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')
示例#4
0
    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
示例#5
0
 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')
示例#6
0
    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
示例#7
0
    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