332 lines
15 KiB
Python
332 lines
15 KiB
Python
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.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
self.main_light_zigbee = pd.get(props.STG_ZGW, loc, roo, props.FUN_MAL) # , True, True, True, False
|
|
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.main_light.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
|
|
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_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.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
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)
|
|
|
|
# TODO: Add this again...
|
|
# self.amplifier = my_powerplug(mqtt_client, config.TOPIC_GFW_DIRK_POWERPLUG, 0)
|
|
# self.amplifier.add_channel_name(self.amplifier.KEY_OUTPUT_0, "Amplifier")
|
|
# self.desk_light = my_powerplug(mqtt_client, config.TOPIC_GFW_DIRK_POWERPLUG, 1)
|
|
# self.desk_light.add_channel_name(self.desk_light.KEY_OUTPUT_0, "Desk Light")
|
|
# self.cd_player = my_powerplug(mqtt_client, config.TOPIC_GFW_DIRK_POWERPLUG, 2)
|
|
# self.cd_player.add_channel_name(self.cd_player.KEY_OUTPUT_0, "CD_Player")
|
|
# self.pc_dock = my_powerplug(mqtt_client, config.TOPIC_GFW_DIRK_POWERPLUG, 3)
|
|
# self.pc_dock.add_channel_name(self.pc_dock.KEY_OUTPUT_0, "PC_Dock")
|
|
# self.desk_light_zigbee = tradfri_light(mqtt_client, config.TOPIC_GFW_DIRK_DESK_LIGHT_ZIGBEE, True, True, True)
|
|
# self.desk_light.add_callback(self.amplifier.KEY_OUTPUT_0, True, self.desk_light_zigbee.power_on)
|
|
# self.desk_light.add_callback(self.amplifier.KEY_OUTPUT_0, False, self.desk_light_zigbee.power_off)
|
|
|
|
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)
|
|
# TODO: Add this again...
|
|
# self.videv_amplifier = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_AMPLIFIER_VIDEV, True, False, False)
|
|
# self.videv_desk_light = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_DESK_LIGHT_VIDEV, True, True, True)
|
|
# self.videv_cd_player = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_CD_PLAYER_VIDEV, True, False, False)
|
|
# self.videv_pc_dock = videv_light(mqtt_client, config.TOPIC_GFW_DIRK_PC_DOCK_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.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
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.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
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.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
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.main_light.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
#
|
|
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.main_light.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
|
|
#
|
|
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.main_light.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
|
|
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.circulation_pump.add_channel_name(self.circulation_pump.KEY_OUTPUT_0, "Circulation Pump")
|
|
|
|
#
|
|
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.main_light.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
|
|
self.floor_lamp = pd.get(props.STG_ZFE, loc, roo, props.FUN_FLL)
|
|
self.floor_lamp.add_channel_name(self.floor_lamp.KEY_OUTPUT_0, "Floor Lamp")
|
|
|
|
if config.CHRISTMAS:
|
|
self.garland = pd.get(props.STG_ZFE, loc, roo, props.FUN_GAR)
|
|
self.garland.add_channel_name(self.garland.KEY_OUTPUT_0, "Garland")
|
|
|
|
#
|
|
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.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
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.bed_light_ma.add_channel_name(self.bed_light_ma.KEY_OUTPUT_0, "Bed light Marion")
|
|
|
|
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.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
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_tree.add_channel_name(self.xmas_tree.KEY_OUTPUT_0, "Xmas-Tree")
|
|
self.xmas_star = pd.get(props.STG_ZFE, loc, roo, props.FUN_XST)
|
|
self.xmas_star.add_channel_name(self.xmas_star.KEY_OUTPUT_0, "Xmas-Star")
|
|
|
|
#
|
|
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.main_light.add_channel_name(self.main_light.KEY_OUTPUT_0, "Main Light")
|
|
|
|
#
|
|
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)
|