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.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_JULIAN_MAIN_LIGHT_VIDEV, True, True, True) 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.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_LIVINGROOM_MAIN_LIGHT_VIDEV, True, True, True) 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.videv_main_light = videv_light(mqtt_client, config.TOPIC_FFW_SLEEP_MAIN_LIGHT_VIDEV, True, True, False) class ffw_bath(base): def __init__(self, mqtt_client, pd): loc = props.LOC_FFW roo = props.ROO_BAT # self.heating_valve = pd.get(props.STG_ZFW, loc, roo, props.FUN_HEA) # 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.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) 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) 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) 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.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) 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)