Add soil sensors, cooldown skipping, make dupe skipping optional
This commit is contained in:
parent
54e169bdd2
commit
ecd1dab005
34
main.py
34
main.py
|
@ -81,6 +81,8 @@ class Sensor():
|
|||
bad_keys = []
|
||||
last_update = None
|
||||
update_period = None
|
||||
skip_if_hasnt_changed = False
|
||||
skip_cooldown = 1.0
|
||||
|
||||
def __init__(self, id_, name):
|
||||
self.id_ = id_
|
||||
|
@ -103,7 +105,15 @@ class Sensor():
|
|||
return str(before) != str(after)
|
||||
|
||||
def log(self):
|
||||
if not self.value or not self.changed():
|
||||
if not self.value:
|
||||
return
|
||||
|
||||
if not self.changed() and self.skip_if_hasnt_changed:
|
||||
logging.debug('Skipping writing %s, data hasn\'t changed', self)
|
||||
return
|
||||
|
||||
if self.last_update and self.skip_cooldown and time.time() - self.last_update < self.skip_cooldown:
|
||||
logging.debug('Skipping writing %s, cooldown limit', self)
|
||||
return
|
||||
|
||||
data = self.value.copy()
|
||||
|
@ -146,10 +156,10 @@ class Sensor():
|
|||
self.last_update = time.time()
|
||||
|
||||
def update(self, data):
|
||||
self.last_update = time.time()
|
||||
self.prev_value = self.value
|
||||
self.value = data
|
||||
self.log()
|
||||
self.last_update = time.time()
|
||||
|
||||
async def poll(self):
|
||||
return
|
||||
|
@ -168,6 +178,7 @@ class ThermostatSensor(Sensor):
|
|||
'dehum_setpoint'
|
||||
]
|
||||
update_period = 300
|
||||
skip_if_hasnt_changed = True
|
||||
|
||||
def __init__(self, id_, ip, name):
|
||||
self.id_ = id_
|
||||
|
@ -200,6 +211,7 @@ class OwnTracksSensor(Sensor):
|
|||
'created_at',
|
||||
]
|
||||
update_period = 90
|
||||
skip_cooldown = False
|
||||
|
||||
class DustSensor(Sensor):
|
||||
type_ = 'dust'
|
||||
|
@ -237,6 +249,18 @@ class SleepSensor(Sensor):
|
|||
except TypeError:
|
||||
pass
|
||||
|
||||
class SoilSensor(Sensor):
|
||||
type_ = 'soil'
|
||||
update_period = 90
|
||||
|
||||
def transform(self, data):
|
||||
for key, value in data.items():
|
||||
# what happens if you do this to a timestamp?
|
||||
try:
|
||||
data[key] = float(round(value, 1))
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
class SolarSensor(Sensor):
|
||||
type_ = 'solar'
|
||||
|
||||
|
@ -434,6 +458,9 @@ async def history(request):
|
|||
elif measurement == 'air':
|
||||
client = sensors_client
|
||||
q = 'select max("pm10") as max_p10, max("pm25") as max_p25, max("co2") as max_co2, max("voc_idx") as max_voc from air where "name" = \'{}\' and time >= {}s and time < {}s group by time({}) fill(linear)'.format(name, start, end, window)
|
||||
elif measurement == 'soil':
|
||||
client = sensors_client
|
||||
q = 'select mean("soil") as soil from soil where "name" = \'{}\' and time >= {}s and time < {}s group by time({}) fill(linear)'.format(name, start, end, window)
|
||||
elif measurement == 'lux':
|
||||
client = sensors_client
|
||||
q = 'select mean("lux") as lux from air where "name" = \'{}\' and time >= {}s and time < {}s group by time({}) fill(linear)'.format(name, start, end, window)
|
||||
|
@ -515,6 +542,8 @@ if __name__ == '__main__':
|
|||
sensors.add(ERTSCMSensor('78628180', 'Gas'))
|
||||
sensors.add(OwnTracksSensor('owntracks1', 'OwnTracks'))
|
||||
sensors.add(AirSensor('air1', 'Living Room'))
|
||||
sensors.add(AirSensor('air2', 'Bedroom'))
|
||||
sensors.add(AirSensor('air3', 'Kitchen'))
|
||||
sensors.add(Acurite606TX('185', 'Outside', 0.0))
|
||||
sensors.add(AcuRite6002RM('999999', 'Seeds', 0.0)) # A
|
||||
sensors.add(AcuRite6002RM('999998', 'Misc', 0.7, -1.0)) # A
|
||||
|
@ -523,6 +552,7 @@ if __name__ == '__main__':
|
|||
sensors.add(AcuRite6002RM('11087', 'Bedroom', -0.7, 1.0)) # C
|
||||
sensors.add(SleepSensor('sleep1', 'Bedroom'))
|
||||
sensors.add(SolarSensor('solar', 'Solar'))
|
||||
sensors.add(SoilSensor('soil1', 'Dumb Cane'))
|
||||
|
||||
sensors.add(QotMotionSensor('qot_dc3c', 'Bedroom'))
|
||||
sensors.add(QotMotionSensor('qot_88c3', 'Lower Stairs Hi'))
|
||||
|
|
Loading…
Reference in New Issue
Block a user