forked from platypush/platypush
Simplified MCP3008 sensor backend by letting it extend SensorBackend
This commit is contained in:
parent
c410bd8926
commit
77d954f14e
2 changed files with 26 additions and 48 deletions
|
@ -1,28 +1,37 @@
|
||||||
|
import time
|
||||||
|
|
||||||
from platypush.backend import Backend
|
from platypush.backend import Backend
|
||||||
from platypush.message.event.sensor import SensorDataChangeEvent, \
|
from platypush.message.event.sensor import SensorDataChangeEvent, \
|
||||||
SensorDataAboveThresholdEvent, SensorDataBelowThresholdEvent
|
SensorDataAboveThresholdEvent, SensorDataBelowThresholdEvent
|
||||||
|
|
||||||
|
|
||||||
class SensorBackend(Backend):
|
class SensorBackend(Backend):
|
||||||
def __init__(self, thresholds=None, *args, **kwargs):
|
def __init__(self, thresholds=None, poll_seconds=None, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Thresholds is either a scalr value or a dictionary.
|
Params:
|
||||||
|
-- thresholds: Thresholds can be either a scalr value or a dictionary.
|
||||||
|
|
||||||
If set, SensorDataAboveThresholdEvent and SensorDataBelowThresholdEvent
|
If set, SensorDataAboveThresholdEvent and SensorDataBelowThresholdEvent
|
||||||
events will be triggered whenever the measurement goes above or below
|
events will be triggered whenever the measurement goes above or
|
||||||
that value.
|
below that value.
|
||||||
|
|
||||||
Set it as a scalar if your get_measurement() code returns a scalar,
|
Set it as a scalar if your get_measurement() code returns a scalar,
|
||||||
as a dictionary if it returns a dictionary of values.
|
as a dictionary if it returns a dictionary of values.
|
||||||
|
|
||||||
For instance, if your sensor code returns both humidity and temperature
|
For instance, if your sensor code returns both humidity and
|
||||||
in a format like {'humidity':60.0, 'temperature': 25.0}, you'll want to
|
temperature in a format like {'humidity':60.0, 'temperature': 25.0},
|
||||||
set up a threshold on temperature with a syntax like {'temperature':20.0}
|
you'll want to set up a threshold on temperature with a syntax like
|
||||||
|
{'temperature':20.0}
|
||||||
|
|
||||||
|
-- poll_seconds: If set, the thread will wait for the specificed
|
||||||
|
number of seconds between a read and the next one.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self.data = None
|
self.data = None
|
||||||
self.thresholds = thresholds
|
self.thresholds = thresholds
|
||||||
|
self.poll_seconds = poll_seconds
|
||||||
|
|
||||||
def get_measurement(self):
|
def get_measurement(self):
|
||||||
raise NotImplementedError('To be implemented in a derived class')
|
raise NotImplementedError('To be implemented in a derived class')
|
||||||
|
@ -56,6 +65,9 @@ class SensorBackend(Backend):
|
||||||
|
|
||||||
self.data = new_data
|
self.data = new_data
|
||||||
|
|
||||||
|
if self.poll_seconds:
|
||||||
|
time.sleep(self.poll_seconds)
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
||||||
|
|
|
@ -1,45 +1,11 @@
|
||||||
import time
|
from platypush.backend.sensor import SensorBackend
|
||||||
|
|
||||||
from platypush.backend import Backend
|
|
||||||
from platypush.context import get_plugin
|
from platypush.context import get_plugin
|
||||||
from platypush.message.event.sensor import SensorDataChangeEvent
|
|
||||||
from platypush.plugins.gpio.sensor.mcp3008 import GpioSensorMcp3008Plugin
|
|
||||||
|
|
||||||
|
|
||||||
class SensorMcp3008Backend(Backend):
|
class SensorMcp3008Backend(SensorBackend):
|
||||||
last_measurement = {}
|
def get_measurement(self):
|
||||||
|
|
||||||
def __init__(self, poll_seconds, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.poll_seconds = poll_seconds
|
|
||||||
self.logger.info('Initialized MCP3008 analog sensors backend')
|
|
||||||
|
|
||||||
|
|
||||||
def send_message(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
super().run()
|
|
||||||
plugin = get_plugin('gpio.sensor.mcp3008')
|
plugin = get_plugin('gpio.sensor.mcp3008')
|
||||||
|
return plugin.get_data().output
|
||||||
while not self.should_stop():
|
|
||||||
try:
|
|
||||||
measurement = plugin.get_measurement().output
|
|
||||||
except:
|
|
||||||
plugin = get_plugin('gpio.sensor.mcp3008', reload=True)
|
|
||||||
|
|
||||||
new_measurement = {}
|
|
||||||
for key in measurement.keys():
|
|
||||||
if key not in self.last_measurement \
|
|
||||||
or measurement[key] != self.last_measurement[key]:
|
|
||||||
new_measurement[key] = measurement[key]
|
|
||||||
|
|
||||||
if new_measurement:
|
|
||||||
self.bus.post(SensorDataChangeEvent(data=new_measurement))
|
|
||||||
|
|
||||||
self.last_measurement = measurement
|
|
||||||
time.sleep(self.poll_seconds)
|
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
Loading…
Reference in a new issue