from function.modules import heating_function import os import sqlite3 db_file = os.path.join(os.path.dirname(__file__), '..', 'database.db') db_mapping_radiator = { 0: heating_function.KEY_AWAY_MODE, 1: heating_function.KEY_SUMMER_MODE, 2: heating_function.KEY_USER_TEMPERATURE_SETPOINT, 3: heating_function.KEY_TEMPERATURE_SETPOINT } def get_radiator_data(topic): db_data = __storage__().get_radiator_data(topic) rv = {} for index in db_mapping_radiator: rv[db_mapping_radiator[index]] = db_data[index] return rv def set_radiator_data(device, key, data): if key in db_mapping_radiator.values(): db_data = [] for index in range(0, len(db_mapping_radiator)): db_data.append(device.get(db_mapping_radiator[index])) return __storage__().store_radiator_data(device.heating_valve.topic, db_data) class __storage__(object): def __init__(self): self.conn = sqlite3.connect(db_file) self.c = self.conn.cursor() with self.conn: self.c.execute("""CREATE TABLE IF NOT EXISTS radiator ( topic text PRIMARY KEY, away_mode integer, summer_mode integer, user_temperatur_setpoint real, temperatur_setpoint real )""") def store_radiator_data(self, topic, target_data): try: with self.conn: self.c.execute( 'INSERT INTO radiator VALUES (?, ?, ?, ?, ?)', [topic] + target_data) except sqlite3.IntegrityError: db_data = self.get_radiator_data(topic) if db_data != target_data: with self.conn: self.c.execute( 'UPDATE radiator SET away_mode = ?, summer_mode = ?, user_temperatur_setpoint = ?, temperatur_setpoint = ? WHERE topic = ?', target_data + [topic]) def get_radiator_data(self, topic): """ returns a list [away_mode, summer_mode, user_temperatur_setpoint, temperatur_setpoint] or [None, None, None, None]""" self.c.execute("SELECT * FROM radiator WHERE topic=?", (topic, )) data = self.c.fetchone() if data is not None: data = list(data) data[1] = data[1] == 1 data[2] = data[2] == 1 return data[1:] else: return [None, None, None, None] def __del__(self): self.conn.close()