# -*- coding: utf-8 -*- """ Homematic Geraetetyp-Klassifizierung. Ordnet alle bekannten HM-, HmIP-, HMW- und HmIPW-Geraetetypen funktionalen Kategorien zu. Jeder Eintrag enthaelt neben der Kategorie auch die relevanten Datenpunkte fuer Steuerung und Status. Ermoeglicht praezise Filterung z.B. "alle Lichtschalter im Wohnzimmer" ohne Steckdosen mitzuschalten. Namenskonventionen: HM-LC-Sw = Light Control Switch HM-LC-Dim = Light Control Dimmer HM-LC-Bl = Light Control Blind (Rollladen) HM-LC-Ja = Light Control Jalousie HM-ES-PM = Energy Sensor Power Meter HM-Sec- = Security (Kontakte, Melder, Schloss) HM-Sen- = Sensor HM-RC- = Remote Control HM-PB- = Push Button HM-CC- = Climate Control HM-TC- = Temperature Control HM-WDS- = Weather Data Sensor HM-OU- = Output Unit (Display, Sirene) HmIP- = Homematic IP (Funk) HMW- = Homematic Wired (RS485) HmIPW- = Homematic IP Wired Quellen: - pyhomematic (github.com/danielperna84/pyhomematic) - aiohomematic (github.com/SukramJ/aiohomematic) - FHEM HMCCUConf.pm - Homematic IP Firmware-Archiv (openccu.github.io/HMDeviceFirmware) - TinyMatic App (github.com/ulikoenig/TinyMatic) """ from __future__ import annotations from dataclasses import dataclass, field from enum import Enum class DeviceCategory(Enum): """Funktionale Kategorie eines Homematic-Geraets.""" # === Aktoren: Licht === LIGHT_SWITCH = "light_switch" DIMMER = "dimmer" DIMMER_COLOR_TEMP = "dimmer_color_temp" LED_RGBW = "led_rgbw" LED_CONTROLLER = "led_controller" # === Aktoren: Steckdose === PLUG_SWITCH = "plug_switch" PLUG_METERING = "plug_metering" SWITCH_METERING = "switch_metering" # Unterputz-Schaltaktor mit Messung (IST Licht) # === Aktoren: Rollladen / Jalousie === BLIND = "blind" SHUTTER = "shutter" # === Aktoren: Heizung / Klima === THERMOSTAT = "thermostat" WALL_THERMOSTAT = "wall_thermostat" FLOOR_HEATING = "floor_heating" VALVE = "valve" # === Sensoren: Kontakte === CONTACT = "contact" ROTARY_HANDLE = "rotary_handle" TILT = "tilt" # === Sensoren: Bewegung === MOTION = "motion" PRESENCE = "presence" # === Sensoren: Klima === CLIMATE_SENSOR = "climate_sensor" # === Sensoren: Wetter === WEATHER = "weather" RAIN = "rain" LIGHT_SENSOR = "light_sensor" # === Sensoren: Sonstige === POWER_SENSOR = "power_sensor" WATER = "water" SMOKE = "smoke" # === Sicherheit === SIREN = "siren" KEY_LOCK = "key_lock" # === Bedienelemente === REMOTE = "remote" WALL_BUTTON = "wall_button" KEY_PAD = "key_pad" DOOR_BELL = "door_bell" # === Sonstige === DISPLAY = "display" IO_MODULE = "io_module" CCU = "ccu" GARAGE = "garage" UNKNOWN = "unknown" @dataclass(frozen=True) class DeviceTypeInfo: """Informationen zu einem Geraetetyp.""" category: DeviceCategory control_datapoints: tuple[str, ...] = () status_datapoints: tuple[str, ...] = () description: str = "" # ============================================================================ # Geraetetyp → Info Mapping # ============================================================================ # Eintraege mit "*" am Ende sind Prefix-Matches. # Exakte Matches haben immer Vorrang. # Bei Prefix-Matches gewinnt der laengste Match. # ============================================================================ DEVICE_TYPE_MAP: dict[str, DeviceTypeInfo] = { # ================================================================== # HM Classic — Schaltaktoren (Licht) # ================================================================== # HM-LC-Sw = Unterputz/Aufputz/Hutschiene Lichtschalter # ACHTUNG: HM-LC-Sw*-Pl = Zwischenstecker = PLUG_SWITCH! "HM-LC-Sw1-Pl*": DeviceTypeInfo( DeviceCategory.PLUG_SWITCH, ("STATE",), ("STATE",), "Schaltaktor Zwischenstecker", ), "HM-LC-Sw*": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "Schaltaktor (Unterputz/Aufputz/Hutschiene)", ), # ================================================================== # HM Classic — Dimmer # ================================================================== "HM-LC-Dim*": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL", "RAMP_TIME", "ON_TIME"), ("LEVEL",), "Dimmaktor (Phasen-An/Abschnitt, PWM)", ), "HM-LC-DW-WM": DeviceTypeInfo( DeviceCategory.DIMMER_COLOR_TEMP, ("LEVEL", "COLOR_TEMPERATURE"), ("LEVEL", "COLOR_TEMPERATURE"), "Dual-White Dimmer (warm/kalt-weiss)", ), "HM-LC-AO-SM": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "Analoger Ausgang (0-10V)", ), "HM-LC-DDC1-PCB": DeviceTypeInfo( DeviceCategory.LED_CONTROLLER, ("LEVEL",), ("LEVEL",), "LED-Treiber PCB", ), "HM-DW-WM": DeviceTypeInfo( DeviceCategory.DIMMER_COLOR_TEMP, ("LEVEL", "COLOR_TEMPERATURE"), ("LEVEL", "COLOR_TEMPERATURE"), "Dual-White Wanddimmer", ), # ================================================================== # HM Classic — LED RGBW # ================================================================== # COLOR: 0-199 = Hue-Farbkreis, 200 = Weiss # LEVEL: 0.0-1.0 = Helligkeit # PROGRAM: 0-x = LED-Programm "HM-LC-RGBW-WM": DeviceTypeInfo( DeviceCategory.LED_RGBW, ("COLOR", "LEVEL", "PROGRAM"), ("COLOR", "LEVEL", "PROGRAM"), "RGBW LED-Controller (COLOR 0-200 Hue)", ), # ================================================================== # HM Classic — Rollladen / Jalousie # ================================================================== "HM-LC-Bl*": DeviceTypeInfo( DeviceCategory.SHUTTER, ("LEVEL", "STOP"), ("LEVEL", "WORKING"), "Rollladenaktor", ), "HM-LC-Ja*": DeviceTypeInfo( DeviceCategory.BLIND, ("LEVEL", "LEVEL_SLATS", "STOP"), ("LEVEL", "LEVEL_SLATS", "WORKING"), "Jalousieaktor mit Lamellenverstellung", ), # ================================================================== # HM Classic — Steckdosen mit Energiemessung (KEIN Licht!) # ================================================================== "HM-ES-PMSw*": DeviceTypeInfo( DeviceCategory.PLUG_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "Steckdosen-Schaltaktor mit Leistungsmessung", ), "HM-ES-TX-WM": DeviceTypeInfo( DeviceCategory.POWER_SENSOR, (), ("ENERGY_COUNTER", "POWER"), "Energiezaehler-Sensor (Gas/Strom)", ), "HM-EM-CCM": DeviceTypeInfo( DeviceCategory.POWER_SENSOR, (), ("ENERGY_COUNTER",), "Energiezaehler Gaszaehler", ), "HM-EM-CMM": DeviceTypeInfo( DeviceCategory.POWER_SENSOR, (), ("ENERGY_COUNTER",), "Energiezaehler Stromzaehler", ), # ================================================================== # HM Classic — Heizung / Klima # ================================================================== "HM-CC-RT-DN": DeviceTypeInfo( DeviceCategory.THERMOSTAT, ("SET_TEMPERATURE", "MANU_MODE", "AUTO_MODE", "BOOST_MODE"), ("ACTUAL_TEMPERATURE", "SET_TEMPERATURE", "VALVE_STATE", "BATTERY_STATE"), "Funk-Heizkoerperthermostat", ), "HM-CC-TC": DeviceTypeInfo( DeviceCategory.WALL_THERMOSTAT, ("SET_TEMPERATURE",), ("TEMPERATURE", "SET_TEMPERATURE", "HUMIDITY"), "Wandthermostat (aeltere Version)", ), "HM-TC-IT-WM-W-EU": DeviceTypeInfo( DeviceCategory.WALL_THERMOSTAT, ("SET_TEMPERATURE", "MANU_MODE", "AUTO_MODE", "BOOST_MODE"), ("ACTUAL_TEMPERATURE", "SET_TEMPERATURE", "ACTUAL_HUMIDITY"), "Funk-Wandthermostat mit Display", ), "HM-CC-VD": DeviceTypeInfo( DeviceCategory.VALVE, ("VALVE_STATE",), ("VALVE_STATE",), "Ventilantrieb", ), "HM-CC-VG-1": DeviceTypeInfo( DeviceCategory.THERMOSTAT, ("SET_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_TEMPERATURE", "VALVE_STATE"), "Heizungsgruppe (virtuell)", ), "HM-CC-SCD": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("STATE",), "CO2-Sensor", ), # Temperatur-/Feuchte-Sensoren "HM-WDS40-TH-I*": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("TEMPERATURE", "HUMIDITY"), "Temperatur-/Feuchte-Sensor (innen)", ), "HM-WDS10-TH-O": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("TEMPERATURE", "HUMIDITY"), "Temperatur-/Feuchte-Sensor (aussen)", ), "HM-WDS30-T-O": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("TEMPERATURE",), "Temperatursensor (aussen)", ), "HM-WDS30-OT2-SM*": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("TEMPERATURE",), "Temperaturdifferenz-Sensor", ), # Wettersensoren "HM-WDS100-C6-O*": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("TEMPERATURE", "HUMIDITY", "WIND_SPEED", "WIND_DIRECTION", "RAIN_COUNTER", "BRIGHTNESS"), "Kombinierter Wettersensor", ), "HM-WDC7000": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("TEMPERATURE", "HUMIDITY"), "Wettersensor", ), "WS550*": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("TEMPERATURE", "HUMIDITY"), "Wetterstation WS550", ), "KS550*": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("TEMPERATURE", "HUMIDITY", "WIND_SPEED", "RAIN_COUNTER"), "Kombisensor KS550", ), "WS888*": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("TEMPERATURE", "HUMIDITY"), "Wetterstation WS888", ), # ================================================================== # HM Classic — Kontakte # ================================================================== "HM-Sec-SCo": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "Fenster-/Tuerkontakt (optisch)", ), "HM-Sec-SC*": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "Fenster-/Tuerkontakt", ), "HM-SCI-3-FM": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "3-Kanal Kontaktschnittstelle", ), "HM-Sec-RHS*": DeviceTypeInfo( DeviceCategory.ROTARY_HANDLE, (), ("STATE",), "Fenstergriff-Sensor", ), "HM-Sec-TiS": DeviceTypeInfo( DeviceCategory.TILT, (), ("STATE",), "Neigungssensor", ), # ================================================================== # HM Classic — Bewegungsmelder # ================================================================== "HM-Sec-MDIR*": DeviceTypeInfo( DeviceCategory.MOTION, (), ("MOTION", "BRIGHTNESS"), "Bewegungsmelder (innen)", ), "HM-Sen-MDIR*": DeviceTypeInfo( DeviceCategory.MOTION, (), ("MOTION", "BRIGHTNESS"), "Bewegungsmelder", ), # ================================================================== # HM Classic — Rauch / Wasser / Sicherheit # ================================================================== "HM-Sec-SD*": DeviceTypeInfo( DeviceCategory.SMOKE, (), ("STATE",), "Rauchmelder", ), "HM-Sec-WDS*": DeviceTypeInfo( DeviceCategory.WATER, (), ("STATE",), "Wassersensor", ), "HM-Sec-SFA-SM": DeviceTypeInfo( DeviceCategory.SIREN, ("STATE",), ("STATE",), "Sirenen-/Blitzansteuerung", ), "HM-Sec-Sir-WM": DeviceTypeInfo( DeviceCategory.SIREN, ("ARMSTATE", "STATE"), ("ARMSTATE", "STATE"), "Innensirene", ), "HM-Sec-Key*": DeviceTypeInfo( DeviceCategory.KEY_LOCK, ("STATE", "OPEN"), ("STATE", "ERROR"), "KeyMatic Tuerschloss", ), "HM-Sec-Win": DeviceTypeInfo( DeviceCategory.SHUTTER, ("LEVEL",), ("LEVEL", "STATUS"), "WinMatic Fensterantrieb", ), # ================================================================== # HM Classic — Fernbedienungen / Taster # ================================================================== "HM-RC-*": DeviceTypeInfo( DeviceCategory.REMOTE, (), ("PRESS_SHORT", "PRESS_LONG"), "Fernbedienung", ), "HM-PB-*": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "Wandtaster", ), "HM-PBI-4-FM": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "4-Kanal Tasterschnittstelle", ), "HM-SwI-3-FM": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT",), "3-Kanal Tasterschnittstelle", ), # ================================================================== # HM Classic — Sonstige Sensoren # ================================================================== "HM-Sen-LI-O": DeviceTypeInfo( DeviceCategory.LIGHT_SENSOR, (), ("LUX",), "Helligkeitssensor", ), "HM-Sen-EP": DeviceTypeInfo( DeviceCategory.POWER_SENSOR, (), ("ENERGY_COUNTER",), "Impulssensor (S0)", ), "HM-Sen-RD-O": DeviceTypeInfo( DeviceCategory.RAIN, (), ("STATE",), "Regensensor", ), "HM-Sen-Wa-Od": DeviceTypeInfo( DeviceCategory.WATER, (), ("FILLING_LEVEL",), "Fuellstandsensor", ), "HM-Sen-DB-PCB": DeviceTypeInfo( DeviceCategory.DOOR_BELL, (), ("PRESS_SHORT",), "Klingelsensor", ), # ================================================================== # HM Classic — Display / Ausgabe # ================================================================== "HM-OU-LED16": DeviceTypeInfo( DeviceCategory.DISPLAY, ("LED_STATUS",), ("LED_STATUS",), "16-Kanal LED-Statusanzeige", ), "HM-OU-CF*": DeviceTypeInfo( DeviceCategory.SIREN, ("STATE",), ("STATE",), "Funk-Gong / Signalgeber", ), "HM-OU-CM-PCB": DeviceTypeInfo( DeviceCategory.SIREN, ("STATE",), ("STATE",), "Schaltaktor mit Signalausgang", ), "HM-Dis-*": DeviceTypeInfo( DeviceCategory.DISPLAY, ("SUBMIT",), ("PRESS_SHORT", "PRESS_LONG"), "Statusanzeige / Display", ), # ================================================================== # HM Classic — Zentrale / System # ================================================================== "HM-RCV-50": DeviceTypeInfo(DeviceCategory.CCU, (), (), "Virtueller Empfaenger"), "HM-CCU-1": DeviceTypeInfo(DeviceCategory.CCU, (), (), "Zentrale"), "HM-Sys-sRP-Pl": DeviceTypeInfo(DeviceCategory.CCU, (), (), "Repeater"), "RPI-RF-MOD": DeviceTypeInfo(DeviceCategory.CCU, (), (), "RPI-RF-Modul"), "HM-MOD-Re-8": DeviceTypeInfo(DeviceCategory.IO_MODULE, ("STATE",), ("STATE",), "8-Kanal Empfangsmodul"), "HM-MOD-EM-8*": DeviceTypeInfo(DeviceCategory.IO_MODULE, (), ("PRESS_SHORT",), "8-Kanal Sendermodul"), # ================================================================== # HmIP — Wandschalter (Licht!) # ================================================================== "HmIP-BS2": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP 2-Kanal Wandschalter", ), "HmIP-BSL": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE", "COLOR", "LEVEL"), ("STATE", "COLOR", "LEVEL"), "IP Schalter mit Signalleuchte", ), "HmIP-BSM": DeviceTypeInfo( DeviceCategory.SWITCH_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Schaltaktor mit Leistungsmessung (Unterputz)", ), "HmIP-BSM-I": DeviceTypeInfo( DeviceCategory.SWITCH_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Schaltaktor mit Leistungsmessung (unsichtbar)", ), "HmIP-FSI16": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP Schaltaktor 16A Unterputz", ), "HmIP-FSM": DeviceTypeInfo( DeviceCategory.SWITCH_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Schalt-Mess-Aktor Unterputz", ), "HmIP-FSM16": DeviceTypeInfo( DeviceCategory.SWITCH_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Schalt-Mess-Aktor 16A Unterputz", ), "HmIP-DRSI1": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP Hutschiene 1-fach Schaltaktor", ), "HmIP-DRSI4": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP Hutschiene 4-fach Schaltaktor", ), "HmIP-DRS4": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP Hutschiene 4-fach Schaltaktor", ), "HmIP-DRS8": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP Hutschiene 8-fach Schaltaktor", ), "HmIP-PCBS*": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP Schaltplatine", ), "HmIP-MOD-OC8": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP 8-fach Open-Collector", ), "HmIP-WHS2": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP 2-fach Schaltaktor Wandmontage", ), # ================================================================== # HmIP — Steckdosen (NICHT Licht!) # ================================================================== "HmIP-PS": DeviceTypeInfo( DeviceCategory.PLUG_SWITCH, ("STATE",), ("STATE",), "IP Steckdose (Zwischenstecker)", ), "HmIP-PS-2": DeviceTypeInfo( DeviceCategory.PLUG_SWITCH, ("STATE",), ("STATE",), "IP Steckdose V2", ), "HmIP-PSM": DeviceTypeInfo( DeviceCategory.PLUG_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Steckdose mit Leistungsmessung", ), "HmIP-PSM-2": DeviceTypeInfo( DeviceCategory.PLUG_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Steckdose mit Leistungsmessung V2", ), # Laendervarianten "HmIP-PS-*": DeviceTypeInfo( DeviceCategory.PLUG_SWITCH, ("STATE",), ("STATE",), "IP Steckdose (Laendervariante)", ), "HmIP-PSM-*": DeviceTypeInfo( DeviceCategory.PLUG_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Steckdose mit Messung (Laendervariante)", ), "HmIP-USBSM": DeviceTypeInfo( DeviceCategory.PLUG_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP USB-Steckdose mit Messung", ), "HMIP-PS*": DeviceTypeInfo( DeviceCategory.PLUG_SWITCH, ("STATE",), ("STATE",), "IP Steckdose (alte Schreibweise)", ), "HMIP-PSM*": DeviceTypeInfo( DeviceCategory.PLUG_METERING, ("STATE",), ("STATE", "CURRENT", "ENERGY_COUNTER", "POWER", "VOLTAGE"), "IP Steckdose mit Messung (alte Schreibweise)", ), # ================================================================== # HmIP — Dimmer # ================================================================== "HmIP-BDT*": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL", "RAMP_TIME", "ON_TIME"), ("LEVEL",), "IP Wanddimmer", ), "HmIP-FDT": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL", "RAMP_TIME", "ON_TIME"), ("LEVEL",), "IP Unterputz-Dimmer", ), "HmIP-PDT*": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL", "RAMP_TIME", "ON_TIME"), ("LEVEL",), "IP Steckdosen-Dimmer", ), "HmIP-DRDI3": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "IP Hutschiene 3-fach Dimmer", ), "HmIP-DRG-DALI": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "IP DALI Gateway", ), # ================================================================== # HmIP — LED / RGBW # ================================================================== "HmIP-RGBW": DeviceTypeInfo( DeviceCategory.LED_RGBW, ("LEVEL", "HUE", "SATURATION"), ("LEVEL", "HUE", "SATURATION"), "IP RGBW LED-Controller (HSV)", ), "HmIP-LSC": DeviceTypeInfo( DeviceCategory.LED_CONTROLLER, ("LEVEL", "HUE", "SATURATION"), ("LEVEL", "HUE", "SATURATION"), "IP LED-Strip-Controller", ), # ================================================================== # HmIP — Rollladen / Jalousie # ================================================================== "HmIP-BROLL*": DeviceTypeInfo( DeviceCategory.SHUTTER, ("LEVEL", "STOP"), ("LEVEL", "ACTIVITY_STATE"), "IP Rollladenaktor", ), "HmIP-FROLL": DeviceTypeInfo( DeviceCategory.SHUTTER, ("LEVEL", "STOP"), ("LEVEL", "ACTIVITY_STATE"), "IP Rollladenaktor Unterputz", ), "HmIP-BBL*": DeviceTypeInfo( DeviceCategory.BLIND, ("LEVEL", "LEVEL_2", "STOP"), ("LEVEL", "LEVEL_2", "ACTIVITY_STATE"), "IP Jalousieaktor", ), "HmIP-FBL": DeviceTypeInfo( DeviceCategory.BLIND, ("LEVEL", "LEVEL_2", "STOP"), ("LEVEL", "LEVEL_2", "ACTIVITY_STATE"), "IP Jalousieaktor Unterputz", ), "HmIP-DRBLI4": DeviceTypeInfo( DeviceCategory.BLIND, ("LEVEL", "LEVEL_2", "STOP"), ("LEVEL", "LEVEL_2", "ACTIVITY_STATE"), "IP Hutschiene 4-fach Jalousie", ), "HmIP-MOD-HO": DeviceTypeInfo( DeviceCategory.GARAGE, ("DOOR_COMMAND",), ("DOOR_STATE",), "IP Hoermann Garagentorantrieb", ), "HmIP-MOD-TM": DeviceTypeInfo( DeviceCategory.GARAGE, ("DOOR_COMMAND",), ("DOOR_STATE",), "IP Tormatic Garagentorantrieb", ), "HmIP-WGC": DeviceTypeInfo( DeviceCategory.GARAGE, ("STATE",), ("STATE",), "IP Wandschalter Garagentor", ), # ================================================================== # HmIP — Thermostate # ================================================================== "HmIP-eTRV": DeviceTypeInfo( DeviceCategory.THERMOSTAT, ("SET_POINT_TEMPERATURE", "BOOST_MODE", "CONTROL_MODE"), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "LEVEL", "VALVE_STATE"), "IP Heizkoerperthermostat", ), "HmIP-eTRV-*": DeviceTypeInfo( DeviceCategory.THERMOSTAT, ("SET_POINT_TEMPERATURE", "BOOST_MODE", "CONTROL_MODE"), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "LEVEL"), "IP Heizkoerperthermostat (Variante)", ), "HmIP-HEATING": DeviceTypeInfo( DeviceCategory.THERMOSTAT, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE"), "IP Heizungsgruppe (virtuell)", ), "HMIP-eTRV*": DeviceTypeInfo( DeviceCategory.THERMOSTAT, ("SET_POINT_TEMPERATURE", "BOOST_MODE"), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE"), "IP Thermostat (alte Schreibweise)", ), # Wandthermostate "HmIP-WTH*": DeviceTypeInfo( DeviceCategory.WALL_THERMOSTAT, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "HUMIDITY"), "IP Wandthermostat", ), "HmIP-BWTH*": DeviceTypeInfo( DeviceCategory.WALL_THERMOSTAT, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "HUMIDITY"), "IP Wandthermostat Pro (230V)", ), "HMIP-WTH*": DeviceTypeInfo( DeviceCategory.WALL_THERMOSTAT, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "HUMIDITY"), "IP Wandthermostat (alte Schreibweise)", ), # Klimasensoren "HmIP-STH": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("ACTUAL_TEMPERATURE", "HUMIDITY"), "IP Temperatur-/Feuchte-Sensor", ), "HmIP-STH-*": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("ACTUAL_TEMPERATURE", "HUMIDITY"), "IP Temperatur-/Feuchte-Sensor (Variante)", ), "HmIP-STHD*": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "HUMIDITY"), "IP Temperatur-/Feuchte-Sensor mit Display", ), "HmIP-STHO*": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("ACTUAL_TEMPERATURE", "HUMIDITY"), "IP Temperatur-/Feuchte-Sensor (aussen)", ), "HmIP-SCTH230": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, ("STATE",), ("CONCENTRATION", "ACTUAL_TEMPERATURE", "HUMIDITY"), "IP CO2-Sensor (230V)", ), "HmIP-STE2-PCB": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("ACTUAL_TEMPERATURE",), "IP 2-Kanal Temperatur-Sensormodul", ), # Fussbodenheizung "HmIP-FAL*": DeviceTypeInfo( DeviceCategory.FLOOR_HEATING, ("STATE",), ("STATE",), "IP Fussbodenheizungsaktor", ), "HmIP-FALMOT*": DeviceTypeInfo( DeviceCategory.FLOOR_HEATING, ("LEVEL",), ("LEVEL",), "IP Fussbodenheizungsaktor motorisch", ), # ================================================================== # HmIP — Kontakte # ================================================================== "HmIP-SWDO*": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "IP Fenster-/Tuerkontakt (optisch)", ), "HmIP-SWDM*": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "IP Fenster-/Tuerkontakt (magnetisch)", ), "HmIP-SCI": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "IP Kontaktschnittstelle", ), "HmIP-FCI*": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "IP Unterputz-Kontaktschnittstelle", ), "HmIP-SRH": DeviceTypeInfo( DeviceCategory.ROTARY_HANDLE, (), ("STATE",), "IP Fenstergriff-Sensor", ), "HmIP-SAM": DeviceTypeInfo( DeviceCategory.TILT, (), ("MOTION",), "IP Beschleunigungssensor", ), "HmIP-STV": DeviceTypeInfo( DeviceCategory.TILT, (), ("MOTION",), "IP Kipp-/Vibrationssensor", ), "HmIP-STI": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "IP Tuerkontakt (induktiv)", ), "HmIP-DLS": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "IP Tuerschloss-Sensor", ), "HmIP-PMFS": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("UNREACH",), "IP Netzausfallmelder", ), "HMIP-SWDO*": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "IP Kontakt (alte Schreibweise)", ), # ================================================================== # HmIP — Bewegung / Praesenz # ================================================================== "HmIP-SMI55*": DeviceTypeInfo( DeviceCategory.MOTION, (), ("MOTION", "ILLUMINATION", "PRESS_SHORT", "PRESS_LONG"), "IP Bewegungsmelder mit Taster (55er Rahmen)", ), "HmIP-SMI": DeviceTypeInfo( DeviceCategory.MOTION, (), ("MOTION", "ILLUMINATION"), "IP Bewegungsmelder (innen)", ), "HmIP-SMO*": DeviceTypeInfo( DeviceCategory.MOTION, (), ("MOTION", "ILLUMINATION"), "IP Bewegungsmelder (aussen)", ), "HmIP-SPI": DeviceTypeInfo( DeviceCategory.PRESENCE, (), ("PRESENCE_DETECTION_STATE", "ILLUMINATION"), "IP Praesenzmelder", ), "HmIP-SPDR": DeviceTypeInfo( DeviceCategory.PRESENCE, (), ("PASSAGE_COUNTER_VALUE",), "IP Durchgangssensor", ), # ================================================================== # HmIP — Rauch / Wasser / Sicherheit # ================================================================== "HmIP-SWSD*": DeviceTypeInfo( DeviceCategory.SMOKE, ("SMOKE_DETECTOR_COMMAND",), ("SMOKE_DETECTOR_ALARM_STATUS",), "IP Rauchmelder", ), "HmIP-SWD*": DeviceTypeInfo( DeviceCategory.WATER, (), ("WATERLEVEL_DETECTED", "MOISTURE_DETECTED"), "IP Wassersensor", ), "HmIP-ASIR*": DeviceTypeInfo( DeviceCategory.SIREN, ("ACOUSTIC_ALARM_ACTIVE", "OPTICAL_ALARM_ACTIVE"), ("ACOUSTIC_ALARM_ACTIVE", "OPTICAL_ALARM_ACTIVE"), "IP Alarmsirene", ), "HmIP-DLD*": DeviceTypeInfo( DeviceCategory.KEY_LOCK, ("LOCK_STATE", "LOCK_TARGET_LEVEL"), ("LOCK_STATE",), "IP Tuerschlossantrieb", ), # ================================================================== # HmIP — Fernbedienungen / Taster # ================================================================== "HmIP-KRC*": DeviceTypeInfo( DeviceCategory.REMOTE, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Fernbedienung (Schluesselanhaenger)", ), "HmIP-KRCA*": DeviceTypeInfo( DeviceCategory.REMOTE, (), ("PRESS_SHORT", "PRESS_LONG"), "IP 1-Taste Alarm-Fernbedienung", ), "HmIP-KRCK*": DeviceTypeInfo( DeviceCategory.REMOTE, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Funkschluessel", ), "HmIP-RC8": DeviceTypeInfo( DeviceCategory.REMOTE, (), ("PRESS_SHORT", "PRESS_LONG"), "IP 8-Tasten Fernbedienung", ), "HmIP-MOD-RC8": DeviceTypeInfo( DeviceCategory.REMOTE, (), ("PRESS_SHORT", "PRESS_LONG"), "IP 8-Tasten Sendermodul", ), "HmIP-RCB1": DeviceTypeInfo( DeviceCategory.REMOTE, (), ("PRESS_SHORT",), "IP 1-Taste Fernbedienung", ), "HmIP-WRC2*": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP 2-Kanal Wandtaster", ), "HmIP-WRC6*": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP 6-Kanal Wandtaster", ), "HmIP-WRCC2": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP 2-Kanal Flachtaster", ), "HmIP-WRCD": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wandtaster mit Display", ), "HmIP-WRCR": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wandtaster Drehknopf", ), "HmIP-BRC2*": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP 2-Kanal Markentaster", ), "HmIP-WSC": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wandschalter", ), "HmIP-WT": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wandtaster", ), "HmIP-WKP": DeviceTypeInfo( DeviceCategory.KEY_PAD, (), ("CODE_STATE",), "IP Codeschloss", ), "HmIP-DBB": DeviceTypeInfo( DeviceCategory.DOOR_BELL, (), ("PRESS_SHORT",), "IP Klingeltaster", ), "HmIP-DSD-PCB": DeviceTypeInfo( DeviceCategory.DOOR_BELL, (), ("PRESS_SHORT",), "IP Klingel-Kontaktschnittstelle", ), "HMIP-WRC*": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wandtaster (alte Schreibweise)", ), # ================================================================== # HmIP — Wetter / Licht / Sonstige Sensoren # ================================================================== "HmIP-SWO-B": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("ACTUAL_TEMPERATURE", "HUMIDITY", "ILLUMINATION", "WIND_SPEED", "SUNSHINEDURATION"), "IP Wettersensor Basic", ), "HmIP-SWO-PL": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("ACTUAL_TEMPERATURE", "HUMIDITY", "ILLUMINATION", "WIND_SPEED", "WIND_DIR", "RAINING"), "IP Wettersensor Plus", ), "HmIP-SWO-PR": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("ACTUAL_TEMPERATURE", "HUMIDITY", "ILLUMINATION", "WIND_SPEED", "WIND_DIR", "RAIN_COUNTER"), "IP Wettersensor Pro", ), "HmIP-SLO": DeviceTypeInfo( DeviceCategory.LIGHT_SENSOR, (), ("CURRENT_ILLUMINATION", "AVERAGE_ILLUMINATION"), "IP Lichtsensor", ), "HmIP-SRD": DeviceTypeInfo( DeviceCategory.RAIN, (), ("RAINING", "RAIN_COUNTER"), "IP Regensensor", ), "HmIP-SFD": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("PARTICULATE_MATTER_10", "PARTICULATE_MATTER_25"), "IP Feinstaubsensor", ), "HmIP-ESI": DeviceTypeInfo( DeviceCategory.POWER_SENSOR, (), ("ENERGY_COUNTER", "POWER"), "IP Energiezaehler-Schnittstelle", ), "HmIP-FWI": DeviceTypeInfo( DeviceCategory.WEATHER, (), ("WIND_SPEED",), "IP Windmesser", ), "HmIP-MP3P": DeviceTypeInfo( DeviceCategory.DISPLAY, ("PLAY", "SOUND_ID", "VOLUME"), ("PLAY",), "IP MP3-Signalgeber", ), # ================================================================== # HmIP — Zentrale / Infrastruktur # ================================================================== "HmIP-CCU3": DeviceTypeInfo(DeviceCategory.CCU, (), (), "CCU3 Zentrale"), "HmIP-HAP*": DeviceTypeInfo(DeviceCategory.CCU, (), (), "IP Access Point"), "HmIP-RCV-50": DeviceTypeInfo(DeviceCategory.CCU, (), (), "IP Virtueller Empfaenger"), "HmIP-MIO*": DeviceTypeInfo(DeviceCategory.IO_MODULE, ("STATE",), ("STATE",), "IP Multi-IO"), "HmIP-MOD-WD-VK": DeviceTypeInfo(DeviceCategory.IO_MODULE, (), (), "IP Wiegand-Modul"), # ================================================================== # HMW — Homematic Wired # ================================================================== "HMW-LC-Sw*": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "Wired Schaltaktor", ), "HMW-LC-Bl*": DeviceTypeInfo( DeviceCategory.SHUTTER, ("LEVEL", "STOP"), ("LEVEL",), "Wired Rollladenaktor", ), "HMW-LC-Dim*": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "Wired Dimmer", ), "HMW-IO-*": DeviceTypeInfo( DeviceCategory.IO_MODULE, ("STATE",), ("STATE",), "Wired I/O-Modul", ), "HMW-Sen-SC*": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "Wired Kontaktsensor", ), "HMW-Sec-TR-FM": DeviceTypeInfo( DeviceCategory.CONTACT, (), ("STATE",), "Wired Tuerkontakt", ), "HMW-RCV-50": DeviceTypeInfo(DeviceCategory.CCU, (), (), "Wired Virtueller Empfaenger"), "HMW-Sys-PS7-DR": DeviceTypeInfo(DeviceCategory.CCU, (), (), "Wired Netzteil"), "HMW-WSE-SM": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("TEMPERATURE", "HUMIDITY"), "Wired Temperatur-/Feuchte-Sensor", ), "HMW-WSTH-SM": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("TEMPERATURE", "HUMIDITY"), "Wired Temperatur-/Feuchte-Sensor", ), # ================================================================== # HmIPW — Homematic IP Wired # ================================================================== "HmIPW-DRS*": DeviceTypeInfo( DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "IP Wired Schaltaktor Hutschiene", ), "HmIPW-DRD3": DeviceTypeInfo( DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "IP Wired 3-fach Dimmer Hutschiene", ), "HmIPW-DRBL4": DeviceTypeInfo( DeviceCategory.BLIND, ("LEVEL", "LEVEL_2", "STOP"), ("LEVEL", "LEVEL_2", "ACTIVITY_STATE"), "IP Wired 4-fach Jalousie Hutschiene", ), "HmIPW-DRAP": DeviceTypeInfo(DeviceCategory.CCU, (), (), "IP Wired Access Point"), "HmIPW-BRC2": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wired 2-Kanal Taster", ), "HmIPW-WRC2*": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wired 2-Kanal Wandtaster", ), "HmIPW-WRC6*": DeviceTypeInfo( DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT", "PRESS_LONG"), "IP Wired 6-Kanal Wandtaster", ), "HmIPW-STH*": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("ACTUAL_TEMPERATURE", "HUMIDITY"), "IP Wired Temperatur-/Feuchte-Sensor", ), "HmIPW-STHD*": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "HUMIDITY"), "IP Wired Temperatur-/Feuchte-Sensor mit Display", ), "HmIPW-WTH*": DeviceTypeInfo( DeviceCategory.WALL_THERMOSTAT, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE", "HUMIDITY"), "IP Wired Wandthermostat", ), "HmIPW-FAL*": DeviceTypeInfo( DeviceCategory.FLOOR_HEATING, ("STATE",), ("STATE",), "IP Wired Fussbodenheizungsaktor", ), "HmIPW-FALMOT*": DeviceTypeInfo( DeviceCategory.FLOOR_HEATING, ("LEVEL",), ("LEVEL",), "IP Wired Fussbodenheizungsaktor motorisch", ), "HmIPW-SMI*": DeviceTypeInfo( DeviceCategory.MOTION, (), ("MOTION", "ILLUMINATION"), "IP Wired Bewegungsmelder", ), "HmIPW-SPI": DeviceTypeInfo( DeviceCategory.PRESENCE, (), ("PRESENCE_DETECTION_STATE", "ILLUMINATION"), "IP Wired Praesenzmelder", ), "HmIPW-SCTHD": DeviceTypeInfo( DeviceCategory.CLIMATE_SENSOR, (), ("CONCENTRATION", "ACTUAL_TEMPERATURE", "HUMIDITY"), "IP Wired CO2-Sensor mit Display", ), "HmIPW-WGD*": DeviceTypeInfo( DeviceCategory.DISPLAY, (), (), "IP Wired Glasdisplay", ), "HmIPW-FIO6": DeviceTypeInfo( DeviceCategory.IO_MODULE, ("STATE",), ("STATE",), "IP Wired 6-fach I/O-Modul", ), "HmIPW-DRI*": DeviceTypeInfo( DeviceCategory.IO_MODULE, (), ("STATE",), "IP Wired Eingangsmodul", ), # ================================================================== # Virtuelle / Sonstige # ================================================================== "VIR-LG-ONOFF": DeviceTypeInfo(DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "Virtuelles Licht On/Off"), "VIR-LG-DIM": DeviceTypeInfo(DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "Virtueller Dimmer"), "VIR-LG-RGB*": DeviceTypeInfo(DeviceCategory.LED_RGBW, ("COLOR", "LEVEL"), ("COLOR", "LEVEL"), "Virtuelles RGB-Licht"), "VIR-LG-RGBW*": DeviceTypeInfo(DeviceCategory.LED_RGBW, ("COLOR", "LEVEL"), ("COLOR", "LEVEL"), "Virtuelles RGBW-Licht"), "VIR-LG-WHITE*": DeviceTypeInfo(DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "Virtuelles White-Licht"), "VIR-LG-GROUP": DeviceTypeInfo(DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "Virtuelle Lichtgruppe"), "VIR-HUE-GTW": DeviceTypeInfo(DeviceCategory.CCU, (), (), "Hue Gateway"), "VIR-OL-GTW": DeviceTypeInfo(DeviceCategory.CCU, (), (), "OsramLightify Gateway"), "OLIGO.smart.iq.HM": DeviceTypeInfo(DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "Oligo Dimmer"), # ELV-Geraete "ELV-SH-BS2": DeviceTypeInfo(DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "ELV 2-fach Schalter"), "ELV-SH-SW1-BAT": DeviceTypeInfo(DeviceCategory.LIGHT_SWITCH, ("STATE",), ("STATE",), "ELV Batterie-Schalter"), "ELV-SH-BM-S": DeviceTypeInfo(DeviceCategory.MOTION, (), ("MOTION",), "ELV Bewegungsmelder"), "ELV-SH-WSC": DeviceTypeInfo(DeviceCategory.WALL_BUTTON, (), ("PRESS_SHORT",), "ELV Wandschalter"), "ELV-SH-WUA": DeviceTypeInfo(DeviceCategory.DIMMER, ("LEVEL",), ("LEVEL",), "ELV Universal-Aktor"), # ALPHA-IP "ALPHA-IP-RBG*": DeviceTypeInfo(DeviceCategory.THERMOSTAT, ("SET_POINT_TEMPERATURE",), ("ACTUAL_TEMPERATURE", "SET_POINT_TEMPERATURE"), "Alpha IP Thermostat"), } # ============================================================================ # Lookup # ============================================================================ def classify_device(device_type: str) -> DeviceTypeInfo: """Klassifiziert einen Homematic-Geraetetyp. Prueft zuerst exakten Match, dann Prefix-Match (laengster gewinnt). Bei Geraetetypen mit Suffix (z.B. "HmIP-eTRV-2 I9F") wird auch der Basisname ohne Leerzeichen-Suffix geprueft. Args: device_type: Geraetetyp-String aus der CCU Returns: DeviceTypeInfo mit Kategorie und Datenpunkten """ # 1. Exakter Match info = DEVICE_TYPE_MAP.get(device_type) if info is not None: return info # 2. Basisname ohne Suffix (z.B. "HmIP-PSM-2 QHJ" → "HmIP-PSM-2") base = device_type.split(" ")[0] if base != device_type: info = DEVICE_TYPE_MAP.get(base) if info is not None: return info # 3. Prefix-Match (laengster gewinnt) best: DeviceTypeInfo | None = None best_len = 0 for pattern, type_info in DEVICE_TYPE_MAP.items(): if pattern.endswith("*"): prefix = pattern[:-1] if device_type.startswith(prefix) and len(prefix) > best_len: best = type_info best_len = len(prefix) if best is not None: return best return DeviceTypeInfo(DeviceCategory.UNKNOWN, description=f"Unbekannt: {device_type}") # ============================================================================ # Kategorie-Gruppen # ============================================================================ #: Alle Kategorien die "Licht" steuern (NICHT Steckdosen!) LIGHT_CATEGORIES: frozenset[DeviceCategory] = frozenset({ DeviceCategory.LIGHT_SWITCH, DeviceCategory.DIMMER, DeviceCategory.DIMMER_COLOR_TEMP, DeviceCategory.LED_RGBW, DeviceCategory.LED_CONTROLLER, DeviceCategory.SWITCH_METERING, # Unterputz mit Messung = trotzdem Licht }) PLUG_CATEGORIES: frozenset[DeviceCategory] = frozenset({ DeviceCategory.PLUG_SWITCH, DeviceCategory.PLUG_METERING, }) CLIMATE_CATEGORIES: frozenset[DeviceCategory] = frozenset({ DeviceCategory.THERMOSTAT, DeviceCategory.WALL_THERMOSTAT, DeviceCategory.FLOOR_HEATING, DeviceCategory.CLIMATE_SENSOR, }) CONTACT_CATEGORIES: frozenset[DeviceCategory] = frozenset({ DeviceCategory.CONTACT, DeviceCategory.ROTARY_HANDLE, DeviceCategory.TILT, }) MOTION_CATEGORIES: frozenset[DeviceCategory] = frozenset({ DeviceCategory.MOTION, DeviceCategory.PRESENCE, }) # ============================================================================ # Convenience-Funktionen # ============================================================================ def is_light(device_type: str) -> bool: """Prueft ob ein Geraet ein Licht-Aktor ist.""" return classify_device(device_type).category in LIGHT_CATEGORIES def is_plug(device_type: str) -> bool: """Prueft ob ein Geraet eine Steckdose ist.""" return classify_device(device_type).category in PLUG_CATEGORIES def is_climate(device_type: str) -> bool: """Prueft ob ein Geraet ein Klima-/Heizungsgeraet ist.""" return classify_device(device_type).category in CLIMATE_CATEGORIES def is_contact(device_type: str) -> bool: """Prueft ob ein Geraet ein Fenster-/Tuer-Kontakt ist.""" return classify_device(device_type).category in CONTACT_CATEGORIES def is_motion(device_type: str) -> bool: """Prueft ob ein Geraet ein Bewegungsmelder ist.""" return classify_device(device_type).category in MOTION_CATEGORIES