Example #1
0
    def read(self):

        platform_info = get_platform_info()

        if platform_info.vendor == MicroPythonPlatform.Vanilla:
            stats = {
                'system.wifi.channel': self.station.config('channel'),
            }

            try:
                stats['system.wifi.rssi'] = self.station.status('rssi')
            except:
                pass

            return stats

        stats = {
            'system.wifi.bandwidth': self.station.bandwidth(),
            'system.wifi.channel': self.station.channel(),
            #'system.wifi.protocol': self.station.wifi_protocol(),
            'system.wifi.max_tx_power': self.station.max_tx_power(),
            #'system.wifi.joined_ap_info': self.station.joined_ap_info(),
        }

        try:
            stats['system.wifi.country'] = self.station.country().country
        except:
            pass

        try:
            stats['system.wifi.rssi'] = self.station.joined_ap_info().rssi
        except:
            pass

        return stats
Example #2
0
def wake_reason():
    from terkin.util import get_platform_info
    platform_info = get_platform_info()
    if platform_info.vendor == platform_info.MICROPYTHON.Pycom:
        return 0, None
    else:
        return 0
Example #3
0
    def start_modem(self):
        """ """

        # Resolve modem driver.
        if self.gprs_settings['driver'] != 'pythings-sim800':
            raise KeyError('Unable to setup unknown modem driver {}'.format(
                self.gprs_settings['driver']))

        from pythings_sim800 import Modem

        platform_info = get_platform_info()

        # Define two pins for clock and data.
        if platform_info.vendor == platform_info.MICROPYTHON.Vanilla:
            self.modem = Modem(
                MODEM_PWKEY_PIN=int(self.gprs_settings['pin_pwrkey'][1:]),
                MODEM_RST_PIN=int(self.gprs_settings['pin_reset'][1:]),
                MODEM_POWER_ON_PIN=int(self.gprs_settings['pin_power'][1:]),
                MODEM_TX_PIN=int(self.gprs_settings['pin_txd'][1:]),
                MODEM_RX_PIN=int(self.gprs_settings['pin_rxd'][1:]))

        elif platform_info.vendor == platform_info.MICROPYTHON.Pycom:
            self.modem = Modem(
                MODEM_PWKEY_PIN=self.gprs_settings['pin_pwrkey'],
                MODEM_RST_PIN=self.gprs_settings['pin_reset'],
                MODEM_POWER_ON_PIN=self.gprs_settings['pin_power'],
                MODEM_TX_PIN=self.gprs_settings['pin_txd'],
                MODEM_RX_PIN=self.gprs_settings['pin_rxd'])

        else:
            raise NotImplementedError(
                'GPRS modem support is not implemented on this platform')

        # Initialize the modem.
        self.modem.initialize()
Example #4
0
    def __init__(self, dout, pd_sck, gain=128):

        self.platform_info = get_platform_info()

        # Define two pins for clock and data.
        if self.platform_info.vendor == self.platform_info.MICROPYTHON.Vanilla:
            self.pSCK = Pin(int(pd_sck[1:]), mode=Pin.OUT)
            self.pOUT = Pin(int(dout[1:]), mode=Pin.IN, pull=Pin.PULL_UP)
        elif self.platform_info.vendor == self.platform_info.MICROPYTHON.Pycom:
            self.pSCK = Pin(pd_sck, mode=Pin.OUT)
            self.pOUT = Pin(dout, mode=Pin.IN, pull=Pin.PULL_UP)
        else:
            raise NotImplementedError('HX711 is '
                                      'not implemented on this platform')

        self.initialized = False

        self.GAIN = 0
        self.OFFSET = 0
        self.SCALE = 1

        self.time_constant = 0.1
        self.filtered = None

        self.set_gain(gain)
    def start(self):
        """ """
        if self.bus is None:
            raise KeyError("Bus missing for DS18X20Sensor")

        # Initialize the DS18x20 hardware driver.
        onewire_bus = self.bus.adapter
        try:

            use_native_driver = self.bus.settings.get('driver') == 'native'

            platform_info = get_platform_info()

            # Vanilla MicroPython 1.11
            if platform_info.vendor == platform_info.MICROPYTHON.Vanilla or use_native_driver:
                import ds18x20_native
                self.driver = ds18x20_native.DS18X20(onewire_bus)

            # Pycom MicroPython 1.9.4
            elif platform_info.vendor == platform_info.MICROPYTHON.Pycom:
                import ds18x20_python
                self.driver = ds18x20_python.DS18X20(onewire_bus)

            else:
                raise NotImplementedError('DS18X20 driver not implemented on this platform')

        except Exception as ex:
            log.exc(ex, 'DS18X20 hardware driver failed')
            return False

        return True
 def compute_paths(self):
     platform_info = get_platform_info()
     if platform_info.vendor == platform_info.MICROPYTHON.Pycom:
         self.CONFIG_PATH = '/flash'
         self.BACKUP_PATH = '/flash/backup'
     else:
         self.CONFIG_PATH = '/'
         self.BACKUP_PATH = '/backup'
Example #7
0
def get_chronometer():
    global _chrono
    if _chrono:
        return _chrono
    platform_info = get_platform_info()
    if platform_info.vendor == platform_info.MICROPYTHON.Pycom:
        _chrono = PycomChronometer()
    else:
        _chrono = GenericChronometer()
    return _chrono
Example #8
0
 def compute_paths(self):
     platform_info = get_platform_info()
     if platform_info.vendor == platform_info.MICROPYTHON.Pycom:
         self.CONFIG_PATH = '/flash'
         self.BACKUP_PATH = '/flash/backup'
     elif platform_info.vendor == platform_info.MICROPYTHON.Vanilla:
         self.CONFIG_PATH = '/'
         self.BACKUP_PATH = '/backup'
     else:
         self.CONFIG_PATH = os.path.abspath('.')
         self.BACKUP_PATH = os.path.join(self.CONFIG_PATH, 'backup')
Example #9
0
def get_chronometer():
    """
    Get a timer that counts from boot.
    """
    global _chrono
    if _chrono:
        return _chrono
    platform_info = get_platform_info()
    if platform_info.vendor == platform_info.MICROPYTHON.Pycom:
        _chrono = PycomChronometer()
    else:
        _chrono = GenericChronometer()
    return _chrono
Example #10
0
    def __init__(self, settings):
        """
        convention <type>:<index>
        """
        self.settings = settings
        self.number = self.settings['number']

        self.adapter = None
        # TODO: Publish found 1-Wire devices to MQTT bus and HTTP API.
        self.devices = []
        self.pins = {}

        # Indicate whether the bus driver just has been started.
        self.just_started = None

        # Reference to platform information.
        self.platform_info = get_platform_info()
Example #11
0
    def __init__(self, manager, settings):

        self.manager = manager
        self.settings = settings

        # WIFI settings.
        self.phy = self.settings.get('networking.wifi.phy', {})
        self.stations = self.settings.get('networking.wifi.stations')
        self.station = None

        # Stopwatch for keeping track of time.
        log.info('Starting stopwatch')
        self.stopwatch = Stopwatch()
        log.info('Started stopwatch successfully')

        # Helper for the ``stay_connected`` thread.
        self.is_running = False

        # Reference to platform information.
        self.platform_info = get_platform_info()
    def start(self):
        """
        Setup the DS18x20 sensor driver.
        :return:
        """

        # Ensure a bus object exists and is ready.
        self.ensure_bus()

        # Initialize the DS18x20 hardware driver.
        onewire_bus = self.bus.adapter
        try:

            use_native_driver = self.bus.settings.get('driver') == 'native'

            platform_info = get_platform_info()

            # Vanilla MicroPython >=1.11
            if platform_info.vendor == platform_info.MICROPYTHON.Vanilla or use_native_driver:
                import ds18x20_native
                self.driver = ds18x20_native.DS18X20(onewire_bus)

            # Pycom MicroPython 1.9.4
            elif platform_info.vendor == platform_info.MICROPYTHON.Pycom:
                import ds18x20_python
                self.driver = ds18x20_python.DS18X20(onewire_bus)

            # RaspberryPi
            elif platform_info.vendor == platform_info.MICROPYTHON.RaspberryPi:
                from terkin.sensor.linux import LinuxSysfsDS18B20
                self.driver = LinuxSysfsDS18B20(onewire_bus)

            else:
                raise NotImplementedError(
                    'DS18x20 driver not implemented on this platform')

            return True

        except Exception as ex:
            log.exc(ex, 'DS18x20 hardware driver failed')
            return False
Example #13
0
    def humanize(self):
        """
        Yield dictionary containing reset cause and wakeup reason
        suitable for human consumption through an appropriate log message.
        """

        platform_info = get_platform_info()

        reset_cause_magic = machine.reset_cause()
        if platform_info.vendor == platform_info.MICROPYTHON.Pycom:
            wakeup_reason_magic, _ = machine.wake_reason()
        else:
            wakeup_reason_magic = machine.wake_reason()

        log.debug('Reset cause: %s', reset_cause_magic)
        log.debug('Wakeup reason: %s', wakeup_reason_magic)

        reset_cause_label = self.reset_causes.get(reset_cause_magic, 'UNKNOWN')
        wakeup_reason_label = self.wakeup_reasons.get(wakeup_reason_magic, 'UNKNOWN')
        status = {
            'reset_cause': {'code': reset_cause_magic, 'message': reset_cause_label},
            'wakeup_reason': {'code': wakeup_reason_magic, 'message': wakeup_reason_label},
        }
        return status
Example #14
0
# -*- coding: utf-8 -*-
# (c) 2019-2020 Andreas Motl <*****@*****.**>
# (c) 2019-2020 Richard Pobering <*****@*****.**>
# License: GNU General Public License, Version 3
from terkin import logging
from terkin.model import SensorReading
from terkin.sensor import SensorManager, AbstractSensor
from terkin.util import get_platform_info

log = logging.getLogger(__name__)
platform_info = get_platform_info()


def includeme(sensor_manager: SensorManager, sensor_info):
    """
    Create BME280 sensor object.

    :param sensor_manager:
    :param sensor_info:

    :return: sensor_object
    """
    sensor_object = BME280Sensor(settings=sensor_info)
    sensor_bus = sensor_manager.get_bus_by_name(sensor_info.get('bus'))
    sensor_object.acquire_bus(sensor_bus)

    return sensor_object


class BME280Sensor(AbstractSensor):
    """
Example #15
0
 def __init__(self, settings):
     self.settings = settings
     self.platform_info = get_platform_info()