diff --git a/__init__.py b/__init__.py index 33de7a1..6b3c966 100644 --- a/__init__.py +++ b/__init__.py @@ -4,8 +4,10 @@ import config import logging import socket_protocol +import time -import rpi_envsens as envsens +from rpi_envsens.dht import dht_22 +from rpi_envsens.bmp import bmp_180 logger = logging.getLogger('APP') @@ -18,13 +20,28 @@ class my_base_protocol_tcp(socket_protocol.pure_json_protocol): class my_server_protocol_tcp(my_base_protocol_tcp): - def __init__(self, comm_instance, envsens, secret=None): + def __init__(self, comm_instance, dht_data, bmp_data, secret=None): socket_protocol.pure_json_protocol.__init__(self, comm_instance, secret) - self.envsens = envsens - self.register_callback(self.SID_READ_REQUEST, self.CURRENT_ENVDATA, self.rd_temperature) + self.dht_data = dht_data + self.bmp_data = bmp_data + self.register_callback(self.SID_READ_REQUEST, self.CURRENT_ENVDATA, self.current_envdata) - def rd_temperature(self, msg): - return self.STATUS_OKAY, self.envsens.get_env_data() + def data_age_okay(self, dd, bd): + MAX_AGE = 60. + tm = time.time() + return dd[dht_22.KEY_TIME] + MAX_AGE >= tm and bd[bmp_180.KEY_TIME] + MAX_AGE >= tm + + def current_envdata(self, msg): + dd = self.dht_data.current + bd = self.bmp_data.current + if self.data_age_okay(bd, dd): + rv = {} + rv[dht_22.KEY_TEMPERATURE] = dd[dht_22.KEY_TEMPERATURE] + rv[dht_22.KEY_HUMIDITY] = dd[dht_22.KEY_HUMIDITY] + rv[bmp_180.KEY_PRESSURE] = bd[bmp_180.KEY_PRESSURE] + return self.STATUS_OKAY, rv + else: + return self.STATUS_OPERATION_NOT_PERMITTED, None class my_client_protocol_tcp(my_base_protocol_tcp): @@ -44,9 +61,9 @@ class my_client_protocol_tcp(my_base_protocol_tcp): def read_current_envdata(self, msg): if msg.get_status() == self.STATUS_OKAY: env_data = msg.get_data() - print("Temperature: %6.1f °C" % env_data[envsens.KEY_TEMPERATURE]) - print("Humidity: %6.1f %%" % env_data[envsens.KEY_HUMIDITY]) - print("Pressure: %6.1f mbar" % env_data[envsens.KEY_PRESSURE]) + print("Temperature: %6.1f °C" % env_data[dht_22.KEY_TEMPERATURE]) + print("Humidity: %6.1f %%" % env_data[dht_22.KEY_HUMIDITY]) + print("Pressure: %6.1f mbar" % env_data[bmp_180.KEY_PRESSURE]) return self.STATUS_OKAY, None else: print('No environmental data received!')