Source code for caspia.node.components.sensors.sht2x

import arrow

from .base import SensorBase
from .datatypes import parse_humidity, parse_temperature


[docs]class SHT2XSensor(SensorBase): type = 0x08
[docs] class MeasurementEvent(SensorBase.MeasurementEvent):
[docs] def parse(self): super().parse() self.temperature = self.measurement_data[0] self.humidity = self.measurement_data[1] self.error = any(m is None for m in self.measurement_data)
def __repr_fields__(self): time = self.timestamp.format() if self.timestamp else '-' temp = '{:.02f}°C'.format(self.temperature) if not self.error else 'error' rh = '{:.02f} %'.format(self.humidity) if not self.error else 'error' return dict(time=time, temp=temp, humidity=rh)
[docs] class State(SensorBase.State): def __init__(self, temperature=None, humidity=None, error=None, timestamp=None): self.temperature = temperature self.error = error self.humidity = humidity self.timestamp = timestamp
[docs] def update_from_bytes(self, data): measurement = SHT2XSensor.parse_measurement_data(data) self.temperature = measurement[0] self.humidity = measurement[1] self.error = any(m is None for m in measurement) self.timestamp = arrow.now()
[docs] def update_from_event(self, event): if isinstance(event, SHT2XSensor.MeasurementEvent): self.temperature = event.temperature self.humidity = event.humidity self.error = event.error self.timestamp = event.timestamp
def __repr_fields__(self): return dict(temp=self.temperature, humidity=self.humidity, timestamp=self.timestamp, error=self.error)
[docs] class Config(SensorBase.Config): pass
[docs] @classmethod def parse_measurement_data(cls, data): return parse_temperature(data[0:2]), parse_humidity(data[2:4])