This commit is contained in:
Dirk Alders 2025-08-25 18:33:19 +02:00
parent c11d2e53fd
commit 46617bc952

393
rooms.py Normal file
View File

@ -0,0 +1,393 @@
import config
from .topic import get_topic
import logging
#
from devdi import topic as props
from mqtt import mqtt_client
"""
In this module we initialse the smartzhome devices for all rooms.
These rooms can be used in the different project for smarthome.
The device names in the room classes follow this definition:
switch_main_light
light_main_light
motion_main_light_xx (xx: gf, ff)
videv_main_light
switch_desk_light
light_desk_light
videv_desk_light
switch_floor_light
light_floor_light
videv_floor_light
switch_window_light
light_window_light
videv_window_light
switch_wardrobe_light
light_wardrobe_light
videv_wardrobe_light
switch_bed_dirk_light
light_bed_dirk_light
videv_bed_dirk_light
switch_bed_marion_light
light_bed_marion_light
videv_bed_marion_light
switch_window_light
light_window_light
videv_window_light
switch_garland_light
videv_garland_light
switch_repeater
videv_repeater
switch_xmas_tree_light
videv_xmas_tree_light
switch_xmas_star_light
videv_xmas_star_light
switch_circulation_pump
videv_circulation_pump
my_powerplug
videv_amplifier
videv_cd_player
videv_bluetooth
videv_phono
switch_pc_dock
videv_pc_dock
remote_ctrl
audio_status_spotify
audio_status_mpd
audio_status_bluetooth
valve_heating
ambient_info
videv_heating
input_device
The following devices are already in use and have to be defined in devices.xxx
"""
from devices import group
from devices import shelly_sw1
from devices import hue_sw_br_ct
from devices import tradfri_sw
from devices import tradfri_sw_br
from devices import tradfri_sw_br_ct
from devices import tradfri_button
from devices import livarno_sw_br_ct
from devices import brennenstuhl_heatingvalve
from devices import silvercrest_powerplug
from devices import silvercrest_motion_sensor
from devices import my_powerplug
from devices import audio_status
from devices import remote
from devices import my_ambient
#
from devices import videv_sw
from devices import videv_sw_br
from devices import videv_sw_br_ct
from devices import videv_hea
#
#
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 base_room(object):
def __get_group__(self, class_type, mqtt_client, stg, loc, roo, fun, num):
dg = []
topic = get_topic(stg, loc, roo, fun)
for i in range(1, num + 1):
device_topic = topic + '_%d' % i
dg.append(class_type(mqtt_client, device_topic))
this_device = group(*dg)
return this_device
#
# FFE #############################################################################################
#
class ffe_floor(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFE
roo = props.ROO_FLO
#
# http://shelly1l-3C6105E4E629
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
class ffe_diningroom(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFE
roo = props.ROO_DIN
#
# http://shelly1l-84CCA8ADD055
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.switch_floor_light = silvercrest_powerplug(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_FLL))
self.videv_floor_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_FLL))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
if config.CHRISTMAS:
self.switch_garland_light = silvercrest_powerplug(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_GAR))
self.videv_garland_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_GAR))
class ffe_kitchen(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFE
roo = props.ROO_KIT
#
# http://shelly1l-8CAAB5616C01
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = self.__get_group__(hue_sw_br_ct, mqtt_client, props.STG_ZFE, loc, roo, props.FUN_MAL, 2)
self.videv_main_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
# http://shelly1-e89f6d85a466
self.switch_circulation_pump = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_CIR))
self.videv_circulation_pump = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_CIR))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
class ffe_livingroom(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFE
roo = props.ROO_LIV
#
# http://shelly1l-3C6105E3F910
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.light_floor_light = self.__get_group__(tradfri_sw_br_ct, mqtt_client, props.STG_ZFE, loc, roo, props.FUN_FLL, 6)
self.videv_floor_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_FLL))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
self.ambient_info = my_ambient(mqtt_client, get_topic(props.STG_MYA, loc, roo, props.FUN_AMB))
if config.CHRISTMAS:
self.switch_xmas_tree_light = silvercrest_powerplug(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_XTR))
self.videv_xmas_tree_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_XTR))
self.switch_xmas_star_light = silvercrest_powerplug(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_XST))
self.videv_xmas_star_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_XST))
class ffe_sleep(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFE
roo = props.ROO_SLP
#
# http://shelly1l-E8DB84A254C7
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.input_device = tradfri_button(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_INP))
self.light_bed_dirk_light = tradfri_sw_br(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_BLD))
self.videv_bed_dirk_light = videv_sw_br(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_BLD))
self.switch_bed_marion_light = silvercrest_powerplug(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_BLM))
self.videv_bed_marion_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_BLM))
self.light_wardrobe_light = tradfri_sw_br(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_WLI))
self.videv_wardrobe_light = videv_sw_br(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_WLI))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFE, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
#
# FFW #############################################################################################
#
class ffw_bath(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFW
roo = props.ROO_BAT
#
# http://shelly1-58BF25D84219
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
class ffw_floor(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFW
roo = props.ROO_FLO
#
# http://shelly1-58BF25D848EA
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
class ffw_julian(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFW
roo = props.ROO_JUL
#
# http://shelly1l-3C6105E43452
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
class ffw_livingroom(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFW
roo = props.ROO_LIV
#
# http://shelly1l-84CCA8ACE6A1
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
class ffw_sleep(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_FFW
roo = props.ROO_SLP
#
# http://shelly1-3494546A51F2
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = tradfri_sw_br(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw_br(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.light_window_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_WIL))
self.videv_window_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_WIL))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZFW, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
#
# GAR #############################################################################################
#
class gar_garden(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_GAR
roo = props.ROO_GAR
#
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.videv_repeater = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_REP))
self.switch_repeater = shelly_sw1(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_REP))
#
# GFW #############################################################################################
#
class gfw_dirk(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_GFW
roo = props.ROO_DIR
#
# http://shelly1l-3C6105E44F27
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.input_device = tradfri_button(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_INP))
self.my_powerplug = my_powerplug(mqtt_client, get_topic(props.STG_MYA, loc, roo, props.FUN_MPP))
self.my_powerplug.set_ch_name(self.my_powerplug.KEY_OUTPUT_0, "amplifier")
self.my_powerplug.set_ch_name(self.my_powerplug.KEY_OUTPUT_1, "phono")
self.my_powerplug.set_ch_name(self.my_powerplug.KEY_OUTPUT_2, "cd-player")
self.my_powerplug.set_ch_name(self.my_powerplug.KEY_OUTPUT_3, "bluetooth")
self.videv_amplifier = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_AMP))
self.videv_cd_player = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_CDP))
self.videv_bluetooth = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_BTP))
self.videv_phono = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_PHO))
self.light_desk_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_DEL))
self.videv_desk_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_DEL))
self.switch_pc_dock = tradfri_sw(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_DCK))
self.videv_pc_dock = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_DCK))
self.remote_ctrl = remote(mqtt_client, get_topic(props.STG_MYA, loc, roo, props.FUN_RCA))
self.audio_status_spotify = audio_status(mqtt_client, get_topic(props.STG_MYA, loc, roo, props.FUN_ASS))
self.audio_status_mpd = audio_status(mqtt_client, get_topic(props.STG_MYA, loc, roo, props.FUN_ASM))
self.audio_status_bluetooth = audio_status(mqtt_client, get_topic(props.STG_MYA, loc, roo, props.FUN_ASB))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_HEA))
self.ambient_info = my_ambient(mqtt_client, get_topic(props.STG_MYA, loc, roo, props.FUN_AMB))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
class gfw_floor(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_GFW
roo = props.ROO_FLO
#
# http://shelly1l-84CCA8AD1148
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.light_main_light = self.__get_group__(tradfri_sw_br_ct, mqtt_client, props.STG_ZGW, loc, roo, props.FUN_MAL, 2)
self.videv_main_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
class gfw_marion(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_GFW
roo = props.ROO_MAR
# http://shelly1l-E8DB84A1E067
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, roo, props.FUN_MAL))
self.videv_main_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_MAL))
self.light_window_light = tradfri_sw_br_ct(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_WIL))
self.videv_window_light = videv_sw_br_ct(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_WIL))
self.valve_heating = brennenstuhl_heatingvalve(mqtt_client, get_topic(props.STG_ZGW, loc, roo, props.FUN_HEA))
self.videv_heating = videv_hea(mqtt_client, get_topic(props.STG_VDE, loc, roo, props.FUN_HEA))
#
# STW #############################################################################################
#
class stairway(base_room):
def __init__(self, mqtt_client: mqtt_client):
loc = props.LOC_STW
#
# http://shelly1-3494546A9364
self.switch_main_light = shelly_sw1(mqtt_client, get_topic(props.STG_SHE, loc, props.ROO_STF, props.FUN_MAL))
self.motion_main_light_gf = silvercrest_motion_sensor(mqtt_client, get_topic(props.STG_ZGW, loc, props.ROO_STG, props.FUN_MSE))
self.motion_main_light_ff = silvercrest_motion_sensor(mqtt_client, get_topic(props.STG_ZFE, loc, props.ROO_STF, props.FUN_MSE))
self.videv_main_light = videv_sw(mqtt_client, get_topic(props.STG_VDE, loc, props.ROO_STF, props.FUN_MAL))