diff --git a/devdi b/devdi index c11d2e5..4fa0081 160000 --- a/devdi +++ b/devdi @@ -1 +1 @@ -Subproject commit c11d2e53fd326eb37ba4e4c53a890ff8f1a9a917 +Subproject commit 4fa00811c6d243888828e67b0952b5b06f46a3d7 diff --git a/devices/__init__.py b/devices/__init__.py index 815ed09..2bb52af 100644 --- a/devices/__init__.py +++ b/devices/__init__.py @@ -1,43 +1,62 @@ -from simulation.devices import tradfri_light +import logging + +from simulation.devices import tradfri_light # indirect by classes tradfri_..., livarno_... from simulation.devices import silvercrest_powerplug from simulation.devices import shelly as shelly_sw1 from simulation.devices import brennenstuhl_heatingvalve from simulation.devices import my_powerplug +from simulation.devices import videv_heating as videv_hea +from simulation.devices import videv_light # indirect by classes videv_ -shelly_pro3 = None -tradfri_button = None -silvercrest_button = None -silvercrest_motion_sensor = None -audio_status = None -remote = None -my_ambient = None +try: + from config import APP_NAME as ROOT_LOGGER_NAME +except ImportError: + ROOT_LOGGER_NAME = 'root' +logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__) -class tradfri_sw(tradfri_light): - def __init__(self, mqtt_client, topic): - super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=False, enable_color_temp=False, send_on_power_on=True) +# TODO: Not yet implemented devices ################################### +def hue_sw_br_ct(mqtt_client, topic): + logger.warning("Device type hue_sw_br_ct is not yet implemented. Topic %s will not be supported", topic) + return None -class tradfri_sw_br(tradfri_light): - def __init__(self, mqtt_client, topic): - super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=True, enable_color_temp=False, send_on_power_on=True) +def shelly_pro3(mqtt_client, topic): + logger.warning("Device type shelly_pro3 is not yet implemented. Topic %s will not be supported", topic) + return None -class tradfri_sw_br_ct(tradfri_light): - def __init__(self, mqtt_client, topic): - super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=True, enable_color_temp=True, send_on_power_on=True) +def tradfri_button(mqtt_client, topic): + logger.warning("Device type tradfri_button is not yet implemented. Topic %s will not be supported", topic) + return None -class hue_sw_br_ct(tradfri_light): - def __init__(self, mqtt_client, topic): - super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=True, enable_color_temp=True, send_on_power_on=True) +def silvercrest_button(mqtt_client, topic): + logger.warning("Device type silvercrest_button is not yet implemented. Topic %s will not be supported", topic) + return None -class livarno_sw_br_ct(tradfri_light): - def __init__(self, mqtt_client, topic): - super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=True, enable_color_temp=True, send_on_power_on=False) +def silvercrest_motion_sensor(mqtt_client, topic): + logger.warning("Device type silvercrest_motion_sensor is not yet implemented. Topic %s will not be supported", topic) + return None + + +def audio_status(mqtt_client, topic): + logger.warning("Device type audio_status is not yet implemented. Topic %s will not be supported", topic) + return None + + +def remote(mqtt_client, topic): + logger.warning("Device type remote is not yet implemented. Topic %s will not be supported", topic) + return None + + +def my_ambient(mqtt_client, topic): + logger.warning("Device type my_ambient is not yet implemented. Topic %s will not be supported", topic) + return None +# TODO: Not yet implemented devices ################################### class group(object): @@ -105,3 +124,38 @@ class group(object): return getattr(self[0], name) else: return rv + + +class tradfri_sw(tradfri_light): + def __init__(self, mqtt_client, topic): + super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=False, enable_color_temp=False, send_on_power_on=True) + + +class tradfri_sw_br(tradfri_light): + def __init__(self, mqtt_client, topic): + super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=True, enable_color_temp=False, send_on_power_on=True) + + +class tradfri_sw_br_ct(tradfri_light): + def __init__(self, mqtt_client, topic): + super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=True, enable_color_temp=True, send_on_power_on=True) + + +class livarno_sw_br_ct(tradfri_light): + def __init__(self, mqtt_client, topic): + super().__init__(mqtt_client, topic, enable_state=True, enable_brightness=True, enable_color_temp=True, send_on_power_on=False) + + +class videv_sw(videv_light): + def __init__(self, mqtt_client, topic): + super().__init__(mqtt_client, topic, True, False, False) + + +class videv_sw_br(videv_light): + def __init__(self, mqtt_client, topic): + super().__init__(mqtt_client, topic, True, True, False) + + +class videv_sw_br_ct(videv_light): + def __init__(self, mqtt_client, topic): + super().__init__(mqtt_client, topic, True, True, True) diff --git a/simulation/devices.py b/simulation/devices.py index aa4fd0e..d62cb13 100644 --- a/simulation/devices.py +++ b/simulation/devices.py @@ -2,7 +2,6 @@ from base import mqtt_base import colored import json import task -import time COLOR_GUI_ACTIVE = colored.fg("light_blue") COLOR_GUI_PASSIVE = COLOR_GUI_ACTIVE + colored.attr("dim") @@ -19,14 +18,11 @@ OUTPUT_ACTIVE = False class base_common(mqtt_base): AUTOSEND = True - COMMANDS = [] BOOL_KEYS = [] def __init__(self, mqtt_client, topic, default_values=None): super().__init__(mqtt_client, topic, default_values) - self.commands = self.COMMANDS[:] - def __payload_filter__(self, payload): try: return json.loads(payload) @@ -63,18 +59,6 @@ class base_common(mqtt_base): rv += u"\u25ac" if (percent_value - 5) > 10*i else u"\u25ad" return rv - def __command_int_value__(self, value): - try: - return int(value) - except TypeError: - print("You need to give a integer parameter not '%s'" % str(value)) - - def __command_float_value__(self, value): - try: - return float(value) - except TypeError: - print("You need to give a numeric parameter not '%s'" % str(value)) - def print_formatted_light(self, color, state, description, led=False): if OUTPUT_ACTIVE: if led is True: @@ -150,15 +134,6 @@ class shelly(base): INPUT_FUNC_OUT1_TRIGGER = "out1_trigger" INPUT_FUNC_OUT2_FOLLOW = "out2_follow" INPUT_FUNC_OUT2_TRIGGER = "out2_trigger" - # - COMMANDS = [ - "get_output_0", "toggle_output_0", - "get_output_1", "toggle_output_1", - "get_input_0", "toggle_input_0", - "get_input_1", "toggle_input_1", - "trigger_input_0_longpress", "trigger_input_1_longpress", - "toggle_overtemperature", - ] def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic, default_values={self.KEY_OUTPUT_0: False, self.KEY_OUTPUT_1: False, @@ -235,48 +210,6 @@ class shelly(base): if key == self.KEY_OUTPUT_0: self.set(key, False) - def command(self, command): - if command in self.COMMANDS: - if command == self.COMMANDS[0]: - self.print_formatted(self, self.KEY_OUTPUT_0, self.get(self.KEY_OUTPUT_0)) - elif command == self.COMMANDS[1]: - self.set(self.KEY_OUTPUT_0, not self[self.KEY_OUTPUT_0]) - elif command == self.COMMANDS[2]: - self.print_formatted(self, self.KEY_OUTPUT_1, self.get(self.KEY_OUTPUT_1)) - elif command == self.COMMANDS[3]: - self.set(self.KEY_OUTPUT_1, not self[self.KEY_OUTPUT_1]) - elif command == self.COMMANDS[4]: - self.print_formatted(self, self.KEY_INPUT_0, self.get(self.KEY_INPUT_0)) - elif command == self.COMMANDS[5]: - self.set(self.KEY_INPUT_0, not self[self.KEY_INPUT_0]) - elif command == self.COMMANDS[6]: - self.print_formatted(self, self.KEY_INPUT_1, self.get(self.KEY_INPUT_1)) - elif command == self.COMMANDS[7]: - self.set(self.KEY_INPUT_1, not self[self.KEY_INPUT_1]) - elif command == self.COMMANDS[8]: - self.set(self.KEY_INPUT_0, not self[self.KEY_INPUT_0]) - time.sleep(0.4) - self.set(self.KEY_LONGPUSH_0, True) - time.sleep(0.1) - self.set(self.KEY_INPUT_0, not self[self.KEY_INPUT_0]) - self.set(self.KEY_LONGPUSH_0, False) - elif command == self.COMMANDS[9]: - self.set(self.KEY_INPUT_1, not self[self.KEY_INPUT_1]) - time.sleep(0.4) - self.set(self.KEY_LONGPUSH_1, True) - time.sleep(0.1) - self.set(self.KEY_INPUT_1, not self[self.KEY_INPUT_1]) - self.set(self.KEY_LONGPUSH_1, False) - elif command == self.COMMANDS[10]: - if self.get(self.KEY_OVERTEMPERATURE): - self.warning_state_off() - else: - self.warning_state_on() - else: - print("%s: not yet implemented!" % command) - else: - print("Unknown command!") - def print_formatted(self, device, key, value): if value is not None: info = (" - %ds" % self.__output_0_auto_off__) if self.__output_0_auto_off__ is not None and value else "" @@ -301,10 +234,6 @@ class my_powerplug(base): KEY_OUTPUT_3 = "output/4" # BOOL_KEYS = [KEY_OUTPUT_0, KEY_OUTPUT_1, KEY_OUTPUT_2, KEY_OUTPUT_3, ] - # - COMMANDS = [ - "get_output", "toggle_output", - ] def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic, default_values={self.KEY_OUTPUT_0: False, self.KEY_OUTPUT_1: False, @@ -335,17 +264,6 @@ class my_powerplug(base): for key in keys_changed: self.mqtt_client.send(self.topic + "/" + key, json.dumps(self.get(key))) - def command(self, command): - if command in self.COMMANDS: - if command == self.COMMANDS[0]: - self.print_formatted(self, self.KEY_OUTPUT_0, self.get(self.KEY_OUTPUT_0)) - elif command == self.COMMANDS[1]: - self.set(self.KEY_OUTPUT_0, not self.get(self.KEY_OUTPUT_0)) - else: - print("%s: not yet implemented!" % command) - else: - print("Unknown command!") - def print_formatted(self, device, key, value): if value is not None: self.print_formatted_light(COLOR_POWERPLUG, value, "(%s)" % self.get_name(key, "State")) @@ -357,10 +275,6 @@ class silvercrest_powerplug(base): KEY_OUTPUT_0 = "state" # BOOL_KEYS = [KEY_OUTPUT_0, ] - # - COMMANDS = [ - "get_output", "toggle_output", - ] def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic, default_values={self.KEY_OUTPUT_0: False}) @@ -382,17 +296,6 @@ class silvercrest_powerplug(base): for key in keys_changed: self.mqtt_client.send(self.topic, json.dumps(data)) - def command(self, command): - if command in self.COMMANDS: - if command == self.COMMANDS[0]: - self.print_formatted(self, self.KEY_OUTPUT_0, self.get(self.KEY_OUTPUT_0)) - elif command == self.COMMANDS[1]: - self.set(self.KEY_OUTPUT_0, not self.get(self.KEY_OUTPUT_0)) - else: - print("%s: not yet implemented!" % command) - else: - print("Unknown command!") - def print_formatted(self, device, key, value): if value is not None: self.print_formatted_light(COLOR_POWERPLUG, value, "(%s)" % self.get_name(key, key)) @@ -406,10 +309,6 @@ class tradfri_light(base): KEY_COLOR_TEMP = "color_temp" # BOOL_KEYS = [KEY_OUTPUT_0, ] - # - STATE_COMMANDS = ("get_state", "toggle_state", ) - BRIGHTNESS_COMMANDS = ("get_brightness", "set_brightness",) - COLOR_TEMP_COMMANDS = ("get_color_temp", "set_color_temp",) def __init__(self, mqtt_client, topic, enable_state=True, enable_brightness=False, enable_color_temp=False, send_on_power_on=True): default_values = {} @@ -423,13 +322,6 @@ class tradfri_light(base): # self.send_on_power_on = send_on_power_on # - if enable_state: - self.commands.extend(self.STATE_COMMANDS) - if enable_brightness: - self.commands.extend(self.BRIGHTNESS_COMMANDS) - if enable_color_temp: - self.commands.extend(self.COLOR_TEMP_COMMANDS) - # self.add_callback(self.KEY_OUTPUT_0, None, self.print_formatted, True) self.add_callback(self.KEY_BRIGHTNESS, None, self.print_formatted, True) self.add_callback(self.KEY_COLOR_TEMP, None, self.print_formatted, True) @@ -470,29 +362,6 @@ class tradfri_light(base): tx_data[key] = self.__int_to_ext__(key, self[key]) self.mqtt_client.send(self.topic, json.dumps(tx_data)) - def command(self, command): - try: - command, value = command.split(' ') - except ValueError: - value = None - if command in self.capabilities(): - if command == self.STATE_COMMANDS[0]: - self.print_formatted(self, self.KEY_OUTPUT_0, self.get(self.KEY_OUTPUT_0)) - elif command == self.STATE_COMMANDS[1]: - self.set(self.KEY_OUTPUT_0, not self.get(self.KEY_OUTPUT_0)) - elif command == self.BRIGHTNESS_COMMANDS[0]: - self.print_formatted(self, self.KEY_BRIGHTNESS, self.get(self.KEY_BRIGHTNESS)) - elif command == self.BRIGHTNESS_COMMANDS[1]: - self.set(self.KEY_BRIGHTNESS, self.__command_int_value__(value)) - elif command == self.COLOR_TEMP_COMMANDS[0]: - self.print_formatted(self, self.KEY_COLOR_TEMP, self.get(self.KEY_COLOR_TEMP)) - elif command == self.COLOR_TEMP_COMMANDS[1]: - self.set(self.KEY_COLOR_TEMP, self.__command_int_value__(value)) - else: - print("%s: not yet implemented!" % command) - else: - print("Unknown command!") - def power_off(self, device, key, value): self.set(self.KEY_OUTPUT_0, False, block_callback=(self.__send__, )) @@ -526,10 +395,6 @@ class brennenstuhl_heatingvalve(base): KEY_TEMPERATURE_SETPOINT = "current_heating_setpoint" KEY_TEMPERATURE = "local_temperature" KEY_BATTERY = "battery" - # - COMMANDS = [ - "get_temperature_setpoint", "set_temperature_setpoint", "set_local_temperature", "set_battery", - ] def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic, default_values={ @@ -562,21 +427,6 @@ class brennenstuhl_heatingvalve(base): tx_data[key] = self.__int_to_ext__(key, self[key]) self.mqtt_client.send(self.topic, json.dumps(tx_data)) - def command(self, command): - try: - command, value = command.split(' ') - except ValueError: - value = None - if command in self.COMMANDS: - if command == self.COMMANDS[0]: - self.print_formatted(self, self.KEY_TEMPERATURE_SETPOINT, self.get(self.KEY_TEMPERATURE_SETPOINT)) - elif command == self.COMMANDS[1]: - self.set(self.KEY_TEMPERATURE_SETPOINT, self.__command_float_value__(value)) - elif command == self.COMMANDS[2]: - self.set(self.KEY_TEMPERATURE, self.__command_float_value__(value)) - elif command == self.COMMANDS[3]: - self.set(self.KEY_BATTERY, self.__command_float_value__(value)) - def print_formatted(self, device, key, value): if key == self.KEY_TEMPERATURE_SETPOINT: perc = 100 * (value - self.TEMP_RANGE[0]) / (self.TEMP_RANGE[1] - self.TEMP_RANGE[0]) @@ -592,7 +442,7 @@ class brennenstuhl_heatingvalve(base): class videv_light(base_videv): - DEVICENAME = "ViDevLight" + DEVICENAME = "ViDevCommon" # KEY_OUTPUT_0 = "state" KEY_BRIGHTNESS = "brightness" @@ -600,11 +450,6 @@ class videv_light(base_videv): KEY_TIMER = "timer" # RX_KEYS = [KEY_OUTPUT_0, KEY_BRIGHTNESS, KEY_COLOR_TEMP, KEY_TIMER] - # - STATE_COMMANDS = ("get_state", "toggle_state", ) - BRIGHTNESS_COMMANDS = ("get_brightness", "set_brightness", ) - COLOR_TEMP_COMMANDS = ("get_color_temp", "set_color_temp", ) - TIMER_COMMANDS = ("get_timer", ) def __init__(self, mqtt_client, topic, enable_state=True, enable_brightness=False, enable_color_temp=False, enable_timer=False): default_values = {} @@ -623,15 +468,6 @@ class videv_light(base_videv): self.enable_color_temp = enable_color_temp self.enable_timer = enable_timer # - if enable_state: - self.commands.extend(self.STATE_COMMANDS) - if enable_brightness: - self.commands.extend(self.BRIGHTNESS_COMMANDS) - if enable_color_temp: - self.commands.extend(self.COLOR_TEMP_COMMANDS) - if enable_timer: - self.commands.extend(self.TIMER_COMMANDS) - # self.timer_maxvalue = None def __ext_to_int__(self, key, data): @@ -639,31 +475,6 @@ class videv_light(base_videv): return int(data) return super().__ext_to_int__(key, data) - def command(self, command): - try: - command, value = command.split(' ') - except ValueError: - value = None - if command in self.capabilities(): - if command == self.STATE_COMMANDS[0]: - self.print_formatted(self, self.KEY_OUTPUT_0, self.get(self.KEY_OUTPUT_0)) - elif command == self.STATE_COMMANDS[1]: - self.set(self.KEY_OUTPUT_0, not self.get(self.KEY_OUTPUT_0)) - elif command == self.BRIGHTNESS_COMMANDS[0]: - self.print_formatted(self, self.KEY_BRIGHTNESS, self.get(self.KEY_BRIGHTNESS)) - elif command == self.BRIGHTNESS_COMMANDS[1]: - self.set(self.KEY_BRIGHTNESS, self.__command_int_value__(value)) - elif command == self.COLOR_TEMP_COMMANDS[0]: - self.print_formatted(self, self.KEY_COLOR_TEMP, self.get(self.KEY_COLOR_TEMP)) - elif command == self.COLOR_TEMP_COMMANDS[1]: - self.set(self.KEY_COLOR_TEMP, self.__command_int_value__(value)) - elif command == self.TIMER_COMMANDS[0]: - self.print_formatted(self, self.KEY_TIMER, self.get(self.KEY_TIMER)) - else: - print("%s: not yet implemented!" % command) - else: - print("Unknown command!") - def print_formatted(self, device, key, value): if value is not None: if key == self.KEY_OUTPUT_0: @@ -709,9 +520,6 @@ class videv_heating(base_videv): KEY_TEMPERATURE = 'temperature' # RX_KEYS = [KEY_USER_TEMPERATURE_SETPOINT, KEY_AWAY_MODE, KEY_SUMMER_MODE, KEY_VALVE_TEMPERATURE_SETPOINT, KEY_BOOST_TIMER] - # - COMMANDS = ["get_temperature_setpoint", "set_temperature_setpoint", "toggle_away_mode", - "toggle_summer_mode", "trigger_default_temperature", "trigger_boost"] def __init__(self, mqtt_client, topic): super().__init__(mqtt_client, topic, default_values={ @@ -730,29 +538,6 @@ class videv_heating(base_videv): # self.timer_maxvalue = None - def command(self, command): - try: - command, value = command.split(' ') - except ValueError: - value = None - if command in self.capabilities(): - if command == self.commands[0]: - self.print_formatted(self, self.KEY_USER_TEMPERATURE_SETPOINT, self.get(self.KEY_USER_TEMPERATURE_SETPOINT)) - elif command == self.commands[1]: - self.set(self.KEY_USER_TEMPERATURE_SETPOINT, self.__command_float_value__(value)) - elif command == self.commands[2]: - self.set(self.KEY_AWAY_MODE, not self.get(self.KEY_AWAY_MODE)) - elif command == self.commands[3]: - self.set(self.KEY_SUMMER_MODE, not self.get(self.KEY_SUMMER_MODE)) - elif command == self.commands[4]: - self.set(self.KEY_SET_DEFAULT_TEMPERATURE, True) - elif command == self.commands[5]: - self.set(self.KEY_START_BOOST, True) - else: - print("%s: not yet implemented!" % command) - else: - print("Unknown command!") - def print_formatted(self, device, key, value): desc_temp_dict = { self.KEY_TEMPERATURE: "Current Temperature", @@ -783,43 +568,10 @@ class videv_heating(base_videv): self.print_formatted_percent(COLOR_GUI_ACTIVE, 't', perc, '%3d%%' % perc, '(%.1f)' % disp_value) -class videv_warnings(base): - DEVICENAME = "ViDevWarnings" - # - KEY_WARNING = "html_short" - # - RX_KEYS = [KEY_WARNING] - # - COMMANDS = [ - "get_warnings", - ] - - def __init__(self, mqtt_client, topic): - super().__init__(mqtt_client, topic, dict.fromkeys([self.KEY_WARNING])) - - def command(self, command): - if command in self.COMMANDS: - if command == self.COMMANDS[0]: - self.print_formatted(self, self.KEY_WARNING, self.get(self.KEY_WARNING)) - else: - print("%s: not yet implemented!" % command) - else: - print("Unknown command!") - - def print_formatted(self, device, key, value): - if OUTPUT_ACTIVE: - value = value.replace("

", "\n") - value = value.replace("
", " - ") - print(COLOR_WARNINGS + "** WARNINGS: *************************************************") - for line in value.split("\n"): - print(" ", line) - print("**************************************************************" + colored.attr("reset")) - # class silvercrest_motion_sensor(base): # KEY_OCCUPANCY = "occupancy" # KEY_BATTERY = "battery" # KEY_BATTERY_LOW = "battery_low" -# COMMANDS = ['motion'] # def __init__(self, mqtt_client, topic): # super().__init__(mqtt_client, topic) @@ -829,18 +581,6 @@ class videv_warnings(base): # def __rx__(self, client, userdata, message): # pass -# def command(self, command): -# try: -# command, value = command.split(' ') -# except ValueError: -# value = None -# else: -# value = json.loads(value) -# if command == self.COMMANDS[0]: -# self.store_data(**{self.KEY_OCCUPANCY: True}) -# time.sleep(value or 10) -# self.store_data(**{self.KEY_OCCUPANCY: False}) - # def print_formatted(self, device, key, value): # if value is not None: # print_light(COLOR_MOTION_SENSOR, value, self.topic, "") @@ -866,33 +606,13 @@ class videv_warnings(base): # ACTION_BRIGHTNESS_DOWN_LONG = "brightness_down_hold" # ACTION_RIGHT_LONG = "arrow_right_hold" # ACTION_LEFT_LONG = "arrow_left_hold" -# # -# COMMANDS = [ACTION_TOGGLE, ACTION_LEFT, ACTION_RIGHT, ACTION_BRIGHTNESS_UP, ACTION_BRIGHTNESS_DOWN, -# ACTION_LEFT_LONG, ACTION_RIGHT_LONG, ACTION_BRIGHTNESS_UP_LONG, ACTION_BRIGHTNESS_DOWN_LONG] - +# # def __init__(self, mqtt_client, topic): # super().__init__(mqtt_client, topic) # def __rx__(self, client, userdata, message): # pass -# def command(self, command): -# try: -# command, value = command.split(' ') -# except ValueError: -# value = None -# else: -# value = json.loads(value) -# if command in self.capabilities(): -# action = self.COMMANDS[self.COMMANDS.index(command)] -# if self.COMMANDS.index(command) <= 4: -# self.mqtt_client.send(self.topic, json.dumps({self.KEY_ACTION: action})) -# elif self.COMMANDS.index(command) <= 8: -# self.mqtt_client.send(self.topic, json.dumps({self.KEY_ACTION: action})) -# time.sleep(value or 0.5) -# action = '_'.join(action.split('_')[:-1] + ['release']) -# self.mqtt_client.send(self.topic, json.dumps({self.KEY_ACTION: action})) -# # def warning_state_on(self): # self.set(self.KEY_BATTERY, 7) # def warning_state_off(self): diff --git a/simulation/rooms.py b/simulation/rooms.py index fcbcc82..c65740b 100644 --- a/simulation/rooms.py +++ b/simulation/rooms.py @@ -1,330 +1,96 @@ -import config -from simulation.devices import videv_light, videv_heating, videv_warnings -import inspect -from devdi import topic as props - - -class base(object): - def getmembers(self, prefix=''): - rv = [] - for name, obj in inspect.getmembers(self): - if prefix: - full_name = prefix + '.' + name - else: - full_name = name - if not name.startswith('_'): - try: - if obj.__module__.endswith('devices'): - rv.append(full_name) - else: - rv.extend(obj.getmembers(full_name)) - except AttributeError: - pass - return rv - - def getobjbyname(self, name): - obj = self - for subname in name.split('.'): - obj = getattr(obj, subname) - return obj - - def command(self, full_command): - try: - parameter = " " + full_command.split(' ')[1] - except IndexError: - parameter = "" - command = full_command.split(' ')[0].split('.')[-1] + parameter - device_name = '.'.join(full_command.split(' ')[0].split('.')[:-1]) - self.getobjbyname(device_name).command(command) - - -class gfw_floor(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_GFW - roo = props.ROO_FLO - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.main_light_zigbee = pd.get(props.STG_ZGW, loc, roo, props.FUN_MAL) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, True, self.main_light_zigbee.power_on) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, False, self.main_light_zigbee.power_off) - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_GFW_FLOOR_MAIN_LIGHT_VIDEV, True, True, True) - - -class gfw_marion(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_GFW - roo = props.ROO_MAR - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.window_light = pd.get(props.STG_ZGW, loc, roo, props.FUN_WIL) - - self.heating_valve = pd.get(props.STG_ZGW, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_GFW_MARION_MAIN_LIGHT_VIDEV, True, False, False) - self.videv_window_light = videv_light(mqtt_client, config.TOPIC_GFW_MARION_WINDOW_LAMP_VIDEV, True, False, False) - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_GFW_MARION_HEATING_VALVE_VIDEV) - - -class gfw_dirk(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_GFW - roo = props.ROO_DIR - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.main_light_zigbee = pd.get(props.STG_ZGW, loc, roo, props.FUN_MAL) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, True, self.main_light_zigbee.power_on) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, False, self.main_light_zigbee.power_off) - self.desk_light = pd.get(props.STG_ZGW, loc, roo, props.FUN_DEL) - self.pc_dock = pd.get(props.STG_ZGW, loc, roo, props.FUN_DCK) - - self.my_powerplug = pd.get(props.STG_MYA, loc, roo, props.FUN_MPP) - - self.heating_valve = pd.get(props.STG_ZGW, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_MAIN_LIGHT_VIDEV, True, True, True) - self.videv_pc_dock = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_PC_DOCK_VIDEV, True, False, False) - - self.videv_desk_light = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_DESK_LIGHT_VIDEV, True, True, True) - self.videv_amplifier = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_AMPLIFIER_VIDEV, True, False, False) - self.videv_cd_player = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_CD_PLAYER_VIDEV, True, False, False) - self.videv_bt = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_BT_VIDEV, True, False, False) - self.videv_phono = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_PHONO_VIDEV, True, False, False) - # - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_GFW_DIRK_HEATING_VALVE_VIDEV) - - -class gfw(base): - def __init__(self, mqtt_client, pd): - self.floor = gfw_floor(mqtt_client, pd) - self.marion = gfw_marion(mqtt_client, pd) - self.dirk = gfw_dirk(mqtt_client, pd) - - -class ffw_julian(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFW - roo = props.ROO_JUL - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.main_light_zigbee = pd.get(props.STG_ZFW, loc, roo, props.FUN_MAL) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, True, self.main_light_zigbee.power_on) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, False, self.main_light_zigbee.power_off) - - self.heating_valve = pd.get(props.STG_ZFW, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_JULIAN_MAIN_LIGHT_VIDEV, True, True, True) - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFW_JULIAN_HEATING_VALVE_VIDEV) - - -class ffw_livingroom(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFW - roo = props.ROO_LIV - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.main_light_zigbee = pd.get(props.STG_ZFW, loc, roo, props.FUN_MAL) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, True, self.main_light_zigbee.power_on) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, False, self.main_light_zigbee.power_off) - - self.heating_valve = pd.get(props.STG_ZFW, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_LIVINGROOM_MAIN_LIGHT_VIDEV, True, True, True) - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFW_LIVINGROOM_HEATING_VALVE_VIDEV) - - -class ffw_sleep(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFW - roo = props.ROO_SLP - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.main_light_zigbee = pd.get(props.STG_ZFW, loc, roo, props.FUN_MAL) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, True, self.main_light_zigbee.power_on) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, False, self.main_light_zigbee.power_off) - self.heating_valve = pd.get(props.STG_ZFW, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_SLEEP_MAIN_LIGHT_VIDEV, True, True, False) - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFW_SLEEP_HEATING_VALVE_VIDEV) - - -class ffw_bath(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFW - roo = props.ROO_BAT - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - - self.heating_valve = pd.get(props.STG_ZFW, loc, roo, props.FUN_HEA) - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_BATH_MAIN_LIGHT_VIDEV, True, False, False) - - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFW_BATH_HEATING_VALVE_VIDEV) - - -class ffw_floor(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFW - roo = props.ROO_FLO - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_FLOOR_MAIN_LIGHT_VIDEV, True, False, False) - - -class ffw(base): - def __init__(self, mqtt_client, pd): - self.julian = ffw_julian(mqtt_client, pd) - self.livingroom = ffw_livingroom(mqtt_client, pd) - self.sleep = ffw_sleep(mqtt_client, pd) - self.bath = ffw_bath(mqtt_client, pd) - self.floor = ffw_floor(mqtt_client, pd) - - -class ffe_floor(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFE - roo = props.ROO_FLO - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFE_FLOOR_MAIN_LIGHT_VIDEV, True, False, False) - - -class ffe_kitchen(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFE - roo = props.ROO_KIT - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - - self.circulation_pump = pd.get(props.STG_SHE, loc, roo, props.FUN_CIR) - self.circulation_pump.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) # , output_0_auto_off=10*60) - - self.heating_valve = pd.get(props.STG_ZFE, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFE_KITCHEN_MAIN_LIGHT_VIDEV, True, False, False) - self.videv_circulation_pump = videv_light(mqtt_client, config.TOPIC_FFE_KITCHEN_CIRCULATION_PUMP_VIDEV, True, False, False, True) - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFE_KITCHEN_HEATING_VALVE_VIDEV) - - -class ffe_diningroom(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFE - roo = props.ROO_DIN - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - - self.floor_lamp = pd.get(props.STG_ZFE, loc, roo, props.FUN_FLL) - - self.heating_valve = pd.get(props.STG_ZFE, loc, roo, props.FUN_HEA) - - if config.CHRISTMAS: - self.garland = pd.get(props.STG_ZFE, loc, roo, props.FUN_GAR) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFE_DININGROOM_MAIN_LIGHT_VIDEV, True, False, False) - self.videv_floor_lamp = videv_light(mqtt_client, config.TOPIC_FFE_DININGROOM_FLOOR_LAMP_VIDEV, True, False, False) - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFE_DININGROOM_HEATING_VALVE_VIDEV) - if config.CHRISTMAS: - self.videv_garland = videv_light(mqtt_client, config.TOPIC_FFE_DININGROOM_GARLAND_VIDEV, True, False, False) - - -class ffe_sleep(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFE - roo = props.ROO_SLP - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.main_light_zigbee = pd.get(props.STG_ZFE, loc, roo, props.FUN_MAL) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, True, self.main_light_zigbee.power_on) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, False, self.main_light_zigbee.power_off) - - self.bed_light_di_zigbee = pd.get(props.STG_ZFE, loc, roo, props.FUN_BLD) - self.bed_light_ma = pd.get(props.STG_ZFE, loc, roo, props.FUN_BLM) - - self.heating_valve = pd.get(props.STG_ZFE, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFE_SLEEP_MAIN_LIGHT_VIDEV, True, True, True) - - self.videv_bed_light_ma = videv_light(mqtt_client, config.TOPIC_FFE_SLEEP_BED_LIGHT_MA_VIDEV, True, False, False) - self.videv_bed_light_di = videv_light(mqtt_client, config.TOPIC_FFE_SLEEP_BED_LIGHT_DI_VIDEV, True, True, False) - - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFE_SLEEP_HEATING_VALVE_VIDEV) - - -class ffe_livingroom(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_FFE - roo = props.ROO_LIV - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - self.main_light_zigbee = pd.get(props.STG_ZFE, loc, roo, props.FUN_MAL) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, True, self.main_light_zigbee.power_on) - self.main_light.add_callback(self.main_light.KEY_OUTPUT_0, False, self.main_light_zigbee.power_off) - - self.floor_lamp_zigbee = pd.get(props.STG_ZFE, loc, roo, props.FUN_FLL) - - if config.CHRISTMAS: - self.xmas_tree = pd.get(props.STG_ZFE, loc, roo, props.FUN_XTR) - self.xmas_star = pd.get(props.STG_ZFE, loc, roo, props.FUN_XST) - - self.heating_valve = pd.get(props.STG_ZFE, loc, roo, props.FUN_HEA) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFE_LIVINGROOM_MAIN_LIGHT_VIDEV, True, True, True) - self.videv_floor_lamp = videv_light(mqtt_client, config.TOPIC_FFE_LIVINGROOM_FLOOR_LAMP_VIDEV, True, True, True) - if config.CHRISTMAS: - self.videv_xmas_tree = videv_light(mqtt_client, config.TOPIC_FFE_LIVINGROOM_XMAS_TREE_VIDEV) - self.videv_heating = videv_heating(mqtt_client, config.TOPIC_FFE_LIVINGROOM_HEATING_VALVE_VIDEV) - - -class ffe(base): - def __init__(self, mqtt_client, pd): - self.floor = ffe_floor(mqtt_client, pd) - self.kitchen = ffe_kitchen(mqtt_client, pd) - self.diningroom = ffe_diningroom(mqtt_client, pd) - self.sleep = ffe_sleep(mqtt_client, pd) - self.livingroom = ffe_livingroom(mqtt_client, pd) - - -class stairway(base): - def __init__(self, mqtt_client, pd): - loc = props.LOC_STW - roo = props.ROO_STF - # - self.main_light = pd.get(props.STG_SHE, loc, roo, props.FUN_MAL) - self.main_light.configure(input_0_func=self.main_light.INPUT_FUNC_OUT1_TRIGGER) - - # - self.videv_main_light = videv_light(mqtt_client, config.TOPIC_STW_STAIRWAY_MAIN_LIGHT_VIDEV, True, False, False, True) - - -class house(base): - def __init__(self, mqtt_client, pd): - self.gfw = gfw(mqtt_client, pd) - self.ffw = ffw(mqtt_client, pd) - self.ffe = ffe(mqtt_client, pd) - self.stairway = stairway(mqtt_client, pd) - self.warnings = videv_warnings(mqtt_client, config.TOPIC_WARNINGS) +from devdi import rooms + + +# +# rooms +# +class ffe_livingroom(rooms.ffe_livingroom): + def __init__(self, mqtt_client): + super().__init__(mqtt_client) + # Enable/disable hue device, on power on/off + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, True, self.light_main_light.power_on) + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, False, self.light_main_light.power_off) + + +class ffe_sleep(rooms.ffe_sleep): + def __init__(self, mqtt_client): + super().__init__(mqtt_client) + # Enable/disable hue device, on power on/off + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, True, self.light_main_light.power_on) + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, False, self.light_main_light.power_off) + + +class ffw_julian(rooms.ffw_julian): + def __init__(self, mqtt_client): + super().__init__(mqtt_client) + # Enable/disable hue device, on power on/off + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, True, self.light_main_light.power_on) + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, False, self.light_main_light.power_off) + + +class ffw_livingroom(rooms.ffw_livingroom): + def __init__(self, mqtt_client): + super().__init__(mqtt_client) + # Enable/disable hue device, on power on/off + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, True, self.light_main_light.power_on) + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, False, self.light_main_light.power_off) + + +class ffw_sleep(rooms.ffw_sleep): + def __init__(self, mqtt_client): + super().__init__(mqtt_client) + # Enable/disable hue device, on power on/off + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, True, self.light_main_light.power_on) + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, False, self.light_main_light.power_off) + + +class gfw_dirk(rooms.gfw_dirk): + def __init__(self, mqtt_client): + super().__init__(mqtt_client) + # Enable/disable hue device, on power on/off + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, True, self.light_main_light.power_on) + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, False, self.light_main_light.power_off) + + +class gfw_floor(rooms.gfw_floor): + def __init__(self, mqtt_client): + super().__init__(mqtt_client) + # Enable/disable hue device, on power on/off + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, True, self.light_main_light.power_on) + self.switch_main_light.add_callback(self.switch_main_light.KEY_OUTPUT_0, False, self.light_main_light.power_off) + + +# +# Locations +# +class ffe(object): + def __init__(self, mqtt_client): + self.diningroom = rooms.ffe_diningroom(mqtt_client) + self.floor = rooms.ffe_floor(mqtt_client) + self.kitchen = rooms.ffe_kitchen(mqtt_client) + self.livingroom = ffe_livingroom(mqtt_client) + self.sleep = ffe_sleep(mqtt_client) + + +class ffw(object): + def __init__(self, mqtt_client): + self.bath = rooms.ffw_bath(mqtt_client) + self.floor = rooms.ffw_floor(mqtt_client) + self.julian = ffw_julian(mqtt_client) + self.livingroom = ffw_livingroom(mqtt_client) + self.sleep = ffw_sleep(mqtt_client) + + +class gfw(object): + def __init__(self, mqtt_client): + self.dirk = gfw_dirk(mqtt_client) + self.floor = gfw_floor(mqtt_client) + self.marion = rooms.gfw_marion(mqtt_client) + + +class house(object): + def __init__(self, mqtt_client): + self.ffe = ffe(mqtt_client) + self.ffw = ffw(mqtt_client) + self.gfw = gfw(mqtt_client) + self.stairway = rooms.stairway(mqtt_client) diff --git a/smart_brain_test.py b/smart_brain_test.py index 530036f..9b20896 100644 --- a/smart_brain_test.py +++ b/smart_brain_test.py @@ -1,11 +1,9 @@ import argparse import config -import devdi.devices import mqtt from simulation.rooms import house import report import os -import time import tests.help @@ -37,15 +35,10 @@ if __name__ == "__main__": # mc = mqtt.mqtt_client(host=config.MQTT_SERVER, port=config.MQTT_PORT, username=config.MQTT_USER, password=config.MQTT_PASSWORD, name=config.APP_NAME) - # - # Smarthome physical Devices - # - pd = devdi.devices.physical_devices(mc) - # # House instance # - h = house(mc, pd) + h = house(mc) # # Testsuite diff --git a/tests/help.py b/tests/help.py index 4e0363d..d4f380e 100644 --- a/tests/help.py +++ b/tests/help.py @@ -14,9 +14,9 @@ from config import APP_NAME as ROOT_LOGGER_NAME DELAY_SET_GET = 0.1 STATES_SW = (True, False) -STATES_BR = range(0, 101, 20) -STATES_CT = range(0, 11, 2) -STATES_TEMP = range(15, 31, 5) +STATES_BR = list(range(0, 101, 20)) +STATES_CT = list(range(0, 11, 2)) +STATES_TEMP = list(range(15, 31, 5)) class testSession(testSessionBase): diff --git a/tests/rooms.py b/tests/rooms.py index 22f8c1c..d9d1700 100644 --- a/tests/rooms.py +++ b/tests/rooms.py @@ -82,27 +82,27 @@ def ffe(ts: testSession, mc: mqtt_client, h: house): room = h.ffe.livingroom # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # floor_lamp videv<->zigbee + main_light->zigbee - device_follow_sw(ts, room.videv_floor_lamp, room.floor_lamp_zigbee) - device_follow_sw(ts, room.floor_lamp_zigbee, room.videv_floor_lamp) - device_follow_sw(ts, room.main_light, room.floor_lamp_zigbee) + device_follow_sw(ts, room.videv_floor_light, room.light_floor_light) + device_follow_sw(ts, room.light_floor_light, room.videv_floor_light) + device_follow_sw(ts, room.switch_main_light, room.light_floor_light) # xmas_tree videv<-->shelly if config.CHRISTMAS: - device_follow_sw(ts, room.videv_xmas_tree, room.xmas_tree) - device_follow_sw(ts, room.xmas_tree, room.videv_xmas_tree) + device_follow_sw(ts, room.videv_xmas_tree_light, room.switch_xmas_tree_light) + device_follow_sw(ts, room.switch_xmas_tree_light, room.videv_xmas_tree_light) # Brightness and Colortemperature #################### - device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_ct(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_ct(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_br(ts, room.videv_floor_lamp, room.floor_lamp_zigbee, room.floor_lamp_zigbee) - device_follow_br(ts, room.floor_lamp_zigbee, room.videv_floor_lamp, room.floor_lamp_zigbee) - device_follow_ct(ts, room.videv_floor_lamp, room.floor_lamp_zigbee, room.floor_lamp_zigbee) - device_follow_ct(ts, room.floor_lamp_zigbee, room.videv_floor_lamp, room.floor_lamp_zigbee) + device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_br(ts, room.videv_floor_light, room.light_floor_light, room.light_floor_light) + device_follow_br(ts, room.light_floor_light, room.videv_floor_light, room.light_floor_light) + device_follow_ct(ts, room.videv_floor_light, room.light_floor_light, room.light_floor_light) + device_follow_ct(ts, room.light_floor_light, room.videv_floor_light, room.light_floor_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # ffe.sleep @@ -110,24 +110,24 @@ def ffe(ts: testSession, mc: mqtt_client, h: house): room = h.ffe.sleep # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # bed_light_di videv<-->zigbee - device_follow_sw(ts, room.videv_bed_light_di, room.bed_light_di_zigbee) - device_follow_sw(ts, room.bed_light_di_zigbee, room.videv_bed_light_di) + device_follow_sw(ts, room.videv_bed_dirk_light, room.light_bed_dirk_light) + device_follow_sw(ts, room.light_bed_dirk_light, room.videv_bed_dirk_light) # - device_follow_sw(ts, room.videv_bed_light_ma, room.bed_light_ma) - device_follow_sw(ts, room.bed_light_ma, room.videv_bed_light_ma) + device_follow_sw(ts, room.videv_bed_marion_light, room.switch_bed_marion_light) + device_follow_sw(ts, room.switch_bed_marion_light, room.videv_bed_marion_light) # Brightness and Colortemperature #################### - device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_ct(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_ct(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_br(ts, room.videv_bed_light_di, room.bed_light_di_zigbee, room.bed_light_di_zigbee) - device_follow_br(ts, room.bed_light_di_zigbee, room.videv_bed_light_di, room.bed_light_di_zigbee) + device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_br(ts, room.videv_bed_dirk_light, room.light_bed_dirk_light, room.light_bed_dirk_light) + device_follow_br(ts, room.light_bed_dirk_light, room.videv_bed_dirk_light, room.light_bed_dirk_light) # TODO: Wardrobe # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # ffe.diningroom @@ -135,16 +135,16 @@ def ffe(ts: testSession, mc: mqtt_client, h: house): room = h.ffe.diningroom # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # floor_lamp videv<->zigbee + main_light->zigbee - device_follow_sw(ts, room.videv_floor_lamp, room.floor_lamp) - device_follow_sw(ts, room.floor_lamp, room.videv_floor_lamp) - device_follow_sw(ts, room.main_light, room.floor_lamp) + device_follow_sw(ts, room.videv_floor_light, room.switch_floor_light) + device_follow_sw(ts, room.switch_floor_light, room.videv_floor_light) + device_follow_sw(ts, room.switch_main_light, room.switch_floor_light) # garland if config.CHRISTMAS: - device_follow_sw(ts, room.videv_garland, room.garland) - device_follow_sw(ts, room.garland, room.videv_garland) + device_follow_sw(ts, room.videv_garland_light, room.switch_garland_light) + device_follow_sw(ts, room.switch_garland_light, room.videv_garland_light) # # ffe.kitchen @@ -152,18 +152,18 @@ def ffe(ts: testSession, mc: mqtt_client, h: house): room = h.ffe.kitchen # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # circulation_pump - device_follow_sw(ts, room.videv_circulation_pump, room.circulation_pump) - device_follow_sw(ts, room.circulation_pump, room.videv_circulation_pump) + device_follow_sw(ts, room.videv_circulation_pump, room.switch_circulation_pump) + device_follow_sw(ts, room.switch_circulation_pump, room.videv_circulation_pump) # Brightness and Colortemperature #################### - # TODO: device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - # TODO: device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - # TODO: device_follow_ct(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - # TODO: device_follow_ct(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) + # TODO: device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + # TODO: device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + # TODO: device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + # TODO: device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # ffe.floor @@ -171,8 +171,8 @@ def ffe(ts: testSession, mc: mqtt_client, h: house): # Switching devices ################################## room = h.ffe.floor # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) def ffw(ts: testSession, mc: mqtt_client, h: house): @@ -182,15 +182,15 @@ def ffw(ts: testSession, mc: mqtt_client, h: house): room = h.ffw.livingroom # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # Brightness and Colortemperature #################### - device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_ct(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_ct(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) + device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # ffw.sleep @@ -198,14 +198,14 @@ def ffw(ts: testSession, mc: mqtt_client, h: house): room = h.ffw.sleep # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # TODO: window_light # Brightness and Colortemperature #################### - device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) + device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # ffw.julian @@ -213,15 +213,15 @@ def ffw(ts: testSession, mc: mqtt_client, h: house): room = h.ffw.julian # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # Brightness and Colortemperature #################### - device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_ct(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_ct(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) + device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # ffw.bath @@ -229,10 +229,10 @@ def ffw(ts: testSession, mc: mqtt_client, h: house): room = h.ffw.bath # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light, single=True) - device_follow_sw(ts, room.main_light, room.videv_main_light, single=True) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # ffw.floor @@ -240,8 +240,8 @@ def ffw(ts: testSession, mc: mqtt_client, h: house): room = h.ffw.floor # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) def gfe(ts: testSession, mc: mqtt_client, h: house): @@ -260,14 +260,14 @@ def gfw(ts: testSession, mc: mqtt_client, h: house): room = h.gfw.dirk # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # desk_light videv<-->tradfri - device_follow_sw(ts, room.videv_desk_light, room.desk_light) - device_follow_sw(ts, room.desk_light, room.videv_desk_light) + device_follow_sw(ts, room.videv_desk_light, room.light_desk_light) + device_follow_sw(ts, room.light_desk_light, room.videv_desk_light) # desk_light videv<-->powerplug - device_follow_sw(ts, room.videv_pc_dock, room.pc_dock) - device_follow_sw(ts, room.pc_dock, room.videv_pc_dock) + device_follow_sw(ts, room.videv_pc_dock, room.switch_pc_dock) + device_follow_sw(ts, room.switch_pc_dock, room.videv_pc_dock) # powerplug videv <-> channel device_follow_sw(ts, room.videv_amplifier, room.my_powerplug, slave_ch=0) device_follow_sw(ts, room.my_powerplug, room.videv_amplifier, master_ch=0) @@ -275,23 +275,23 @@ def gfw(ts: testSession, mc: mqtt_client, h: house): device_follow_sw(ts, room.my_powerplug, room.videv_phono, master_ch=1) device_follow_sw(ts, room.videv_cd_player, room.my_powerplug, slave_ch=2) device_follow_sw(ts, room.my_powerplug, room.videv_cd_player, master_ch=2) - device_follow_sw(ts, room.videv_bt, room.my_powerplug, slave_ch=3) - device_follow_sw(ts, room.my_powerplug, room.videv_bt, master_ch=3) + device_follow_sw(ts, room.videv_bluetooth, room.my_powerplug, slave_ch=3) + device_follow_sw(ts, room.my_powerplug, room.videv_bluetooth, master_ch=3) # powerplug follow device_follow_sw(ts, room.my_powerplug, room.my_powerplug, master_ch=1, slave_ch=0) device_follow_sw(ts, room.my_powerplug, room.my_powerplug, master_ch=2, slave_ch=0) device_follow_sw(ts, room.my_powerplug, room.my_powerplug, master_ch=3, slave_ch=0) # Brightness and Colortemperature #################### - device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_ct(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_ct(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_br(ts, room.videv_desk_light, room.desk_light, room.desk_light) - device_follow_br(ts, room.desk_light, room.videv_desk_light, room.desk_light) - device_follow_ct(ts, room.videv_desk_light, room.desk_light, room.desk_light) - device_follow_ct(ts, room.desk_light, room.videv_desk_light, room.desk_light) + device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_br(ts, room.videv_desk_light, room.light_desk_light, room.light_desk_light) + device_follow_br(ts, room.light_desk_light, room.videv_desk_light, room.light_desk_light) + device_follow_ct(ts, room.videv_desk_light, room.light_desk_light, room.light_desk_light) + device_follow_ct(ts, room.light_desk_light, room.videv_desk_light, room.light_desk_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # gfw.marion @@ -299,14 +299,14 @@ def gfw(ts: testSession, mc: mqtt_client, h: house): room = h.gfw.marion # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # floor_lamp videv<->zigbee + main_light->zigbee - device_follow_sw(ts, room.videv_window_light, room.window_light) - device_follow_sw(ts, room.window_light, room.videv_window_light) - device_follow_sw(ts, room.main_light, room.window_light) + device_follow_sw(ts, room.videv_window_light, room.light_window_light) + device_follow_sw(ts, room.light_window_light, room.videv_window_light) + device_follow_sw(ts, room.switch_main_light, room.light_window_light) # Temperature ######################################## - device_follow_temp(ts, room.videv_heating, room.heating_valve) + device_follow_temp(ts, room.videv_heating, room.valve_heating) # # gfw.floor @@ -314,13 +314,13 @@ def gfw(ts: testSession, mc: mqtt_client, h: house): room = h.gfw.floor # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light) # Brightness and Colortemperature #################### - device_follow_br(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_br(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) - device_follow_ct(ts, room.videv_main_light, room.main_light_zigbee, room.main_light) - device_follow_ct(ts, room.main_light_zigbee, room.videv_main_light, room.main_light) + device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) + device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light) + device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light) def stw(ts: testSession, mc: mqtt_client, h: house): @@ -330,5 +330,5 @@ def stw(ts: testSession, mc: mqtt_client, h: house): room = h.stairway # Switching devices ################################## # main_light videv<-->shelly - device_follow_sw(ts, room.videv_main_light, room.main_light) - device_follow_sw(ts, room.main_light, room.videv_main_light) + device_follow_sw(ts, room.videv_main_light, room.switch_main_light) + device_follow_sw(ts, room.switch_main_light, room.videv_main_light)