Added EnviropHAT support
This commit is contained in:
parent
b8f936e440
commit
bdadd2061c
5 changed files with 112 additions and 0 deletions
|
@ -220,6 +220,7 @@ autodoc_mock_imports = ['googlesamples.assistant.grpc.audio_helpers',
|
||||||
'serial',
|
'serial',
|
||||||
'pyHS100',
|
'pyHS100',
|
||||||
'grpc',
|
'grpc',
|
||||||
|
'envirophat',
|
||||||
]
|
]
|
||||||
|
|
||||||
sys.path.insert(0, os.path.abspath('../..'))
|
sys.path.insert(0, os.path.abspath('../..'))
|
||||||
|
|
36
platypush/backend/sensor/envirophat.py
Normal file
36
platypush/backend/sensor/envirophat.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
from platypush.backend.sensor import SensorBackend
|
||||||
|
from platypush.context import get_plugin
|
||||||
|
|
||||||
|
|
||||||
|
class SensorEnvirophatBackend(SensorBackend):
|
||||||
|
"""
|
||||||
|
Backend to poll analog sensor values from an MCP3008 chipset
|
||||||
|
(https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008)
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
* ``adafruit-mcp3008`` (``pip install adafruit-mcp3008``)
|
||||||
|
* The :mod:`platypush.plugins.gpio.sensor.mcp3008` plugin configured
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, temperature=True, pressure=True, altitude=True, luminosity=True,
|
||||||
|
analog=True, accelerometer=True, magnetometer=True, qnh=1020, **kwargs):
|
||||||
|
super().__init__(self, **kwargs)
|
||||||
|
|
||||||
|
self.qnh = qnh
|
||||||
|
self.enabled_sensors = {
|
||||||
|
'temperature': temperature,
|
||||||
|
'pressure': pressure,
|
||||||
|
'altitude': altitude,
|
||||||
|
'luminosity': luminosity,
|
||||||
|
'analog': analog,
|
||||||
|
'accelerometer': accelerometer,
|
||||||
|
'magnetometer': magnetometer,
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_measurement(self):
|
||||||
|
plugin = get_plugin('gpio.sensor.envirophat')
|
||||||
|
return plugin.get_data(qnh=self.qnh).output
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
71
platypush/plugins/gpio/sensor/envirophat.py
Normal file
71
platypush/plugins/gpio/sensor/envirophat.py
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
import envirophat
|
||||||
|
|
||||||
|
from platypush.plugins import action
|
||||||
|
from platypush.plugins.gpio.sensor import GpioSensorPlugin
|
||||||
|
|
||||||
|
|
||||||
|
class GpioSensorEnvirophatPlugin(GpioSensorPlugin):
|
||||||
|
"""
|
||||||
|
Plugin to interact with a `Pimoroni enviropHAT <https://shop.pimoroni.com/products/enviro-phat>`_ device.
|
||||||
|
You can use an enviropHAT device to read e.g. temperature, pressure, altitude, accelerometer, magnetometer and
|
||||||
|
luminosity data, plus control the status of its RGB LEDs.
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
* ``envirophat`` (``pip install envirophat``)
|
||||||
|
"""
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_measurement(self, qnh=1020.0):
|
||||||
|
"""
|
||||||
|
:param: qnh: Local value for atmospheric pressure adjusted to sea level (default: 1020)
|
||||||
|
:type qnh: float
|
||||||
|
|
||||||
|
:returns: dict. Example::
|
||||||
|
|
||||||
|
output = {
|
||||||
|
"temperature": 21.0, # Celsius
|
||||||
|
"pressure": 101555.08, # pascals
|
||||||
|
"altitude": 10, # meters
|
||||||
|
"luminosity": 426, # lumens
|
||||||
|
|
||||||
|
# Measurements from the custom analog channels
|
||||||
|
"analog": [0.513, 0.519, 0.531, 0.528],
|
||||||
|
|
||||||
|
"accelerometer": {
|
||||||
|
"x": -0.000915,
|
||||||
|
"y": 0.0760,
|
||||||
|
"z": 1.026733
|
||||||
|
},
|
||||||
|
"magnetometer": {
|
||||||
|
"x": -2297,
|
||||||
|
"y": 1226,
|
||||||
|
"z": -7023
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
ret = {}
|
||||||
|
weather = envirophat.weather
|
||||||
|
light = envirophat.light
|
||||||
|
accelerometer = envirophat.motion.accelerometer()
|
||||||
|
magnetometer = envirophat.motion.magnetometer()
|
||||||
|
leds = envirophat.leds
|
||||||
|
analog = envirophat.analog
|
||||||
|
|
||||||
|
weather.update()
|
||||||
|
|
||||||
|
ret['temperature'] = weather.temperature()
|
||||||
|
ret['pressure'] = weather.pressure()
|
||||||
|
ret['altitude'] = weather.altitude(qnh=qnh)
|
||||||
|
ret['luminosity'] = light.light()
|
||||||
|
ret['accelerometer'] = {getattr(accelerometer, v) for v in ['x', 'y', 'z']}
|
||||||
|
ret['magnetometer'] = {getattr(magnetometer, v) for v in ['x', 'y', 'z']}
|
||||||
|
ret['analog'] = list(analog.read_all())
|
||||||
|
ret['leds'] = leds.is_on()
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
|
@ -147,3 +147,6 @@ pyScss
|
||||||
# nfcpy >= 1.0
|
# nfcpy >= 1.0
|
||||||
# ndef
|
# ndef
|
||||||
|
|
||||||
|
# Support for enviropHAT
|
||||||
|
# envirophat
|
||||||
|
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -171,6 +171,7 @@ setup(
|
||||||
'Support for mpv player plugin': ['python-mpv'],
|
'Support for mpv player plugin': ['python-mpv'],
|
||||||
'Support for compiling SASS/SCSS styles to CSS': ['pyScss'],
|
'Support for compiling SASS/SCSS styles to CSS': ['pyScss'],
|
||||||
'Support for NFC tags': ['nfcpy>=1.0', 'ndef'],
|
'Support for NFC tags': ['nfcpy>=1.0', 'ndef'],
|
||||||
|
'Support for enviropHAT': ['envirophat'],
|
||||||
# 'Support for Leap Motion backend': ['git+ssh://git@github.com:BlackLight/leap-sdk-python3.git'],
|
# 'Support for Leap Motion backend': ['git+ssh://git@github.com:BlackLight/leap-sdk-python3.git'],
|
||||||
# 'Support for Flic buttons': ['git+https://@github.com/50ButtonsEach/fliclib-linux-hci.git']
|
# 'Support for Flic buttons': ['git+https://@github.com/50ButtonsEach/fliclib-linux-hci.git']
|
||||||
# 'Support for media subtitles': ['git+https://github.com/agonzalezro/python-opensubtitles#egg=python-opensubtitles']
|
# 'Support for media subtitles': ['git+https://github.com/agonzalezro/python-opensubtitles#egg=python-opensubtitles']
|
||||||
|
|
Loading…
Reference in a new issue