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])