/** * Copyright (c) 2010-2016 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.binding.ecotouch; import org.openhab.core.items.Item; import org.openhab.core.library.items.NumberItem; import org.openhab.core.library.items.SwitchItem; /** * Represents all valid commands which could be processed by this binding * * @author Sebastian Held <sebastian.held@gmx.de> * @since 1.5.0 */ public enum EcoTouchTags { // German: Außentemperatur TYPE_TEMPERATURE_OUTSIDE { { command = "temperature_outside"; itemClass = NumberItem.class; tagName = "A1"; } }, // German: Außentemperatur gemittelt über 1h TYPE_TEMPERATURE_OUTSIDE_1H { { command = "temperature_outside_1h"; itemClass = NumberItem.class; tagName = "A2"; } }, // German: Außentemperatur gemittelt über 24h TYPE_TEMPERATURE_OUTSIDE_24H { { command = "temperature_outside_24h"; itemClass = NumberItem.class; tagName = "A3"; } }, // German: Quelleneintrittstemperatur TYPE_TEMPERATURE_SOURCE_IN { { command = "temperature_source_in"; itemClass = NumberItem.class; tagName = "A4"; } }, // German: Quellenaustrittstemperatur TYPE_TEMPERATURE_SOURCE_OUT { { command = "temperature_source_out"; itemClass = NumberItem.class; tagName = "A5"; } }, // German: Verdampfungstemperatur TYPE_TEMPERATURE_EVAPORATION { { command = "temperature_evaporation"; itemClass = NumberItem.class; tagName = "A6"; } }, // German: Sauggastemperatur TYPE_TEMPERATURE_SUCTION { { command = "temperature_suction"; itemClass = NumberItem.class; tagName = "A7"; } }, // German: Verdampfungsdruck TYPE_PRESSURE_EVAPORATION { { command = "pressure_evaporation"; itemClass = NumberItem.class; tagName = "A8"; } }, // German: Temperatur Rücklauf Soll TYPE_TEMPERATURE_RETURN_SET { { command = "temperature_return_set"; itemClass = NumberItem.class; tagName = "A10"; } }, // German: Temperatur Rücklauf TYPE_TEMPERATURE_RETURN { { command = "temperature_return"; itemClass = NumberItem.class; tagName = "A11"; } }, // German: Temperatur Vorlauf TYPE_TEMPERATURE_FLOW { { command = "temperature_flow"; itemClass = NumberItem.class; tagName = "A12"; } }, // German: Kondensationstemperatur TYPE_TEMPERATURE_CONDENSATION { { command = "temperature_condensation"; itemClass = NumberItem.class; tagName = "A14"; } }, // German: Kondensationsdruck TYPE_PRESSURE_CONDENSATION { { command = "pressure_condensation"; itemClass = NumberItem.class; tagName = "A15"; } }, // German: Speichertemperatur TYPE_TEMPERATURE_STORAGE { { command = "temperature_storage"; itemClass = NumberItem.class; tagName = "A16"; } }, // German: Raumtemperatur TYPE_TEMPERATURE_ROOM { { command = "temperature_room"; itemClass = NumberItem.class; tagName = "A17"; } }, // German: Raumtemperatur gemittelt über 1h TYPE_TEMPERATURE_ROOM_1H { { command = "temperature_room_1h"; itemClass = NumberItem.class; tagName = "A18"; } }, // German: Warmwassertemperatur TYPE_TEMPERATURE_WATER { { command = "temperature_water"; itemClass = NumberItem.class; tagName = "A19"; } }, // German: Pooltemperatur TYPE_TEMPERATURE_POOL { { command = "temperature_pool"; itemClass = NumberItem.class; tagName = "A20"; } }, // German: Solarkollektortemperatur TYPE_TEMPERATURE_SOLAR { { command = "temperature_solar"; itemClass = NumberItem.class; tagName = "A21"; } }, // German: Solarkreis Vorlauf TYPE_TEMPERATURE_SOLAR_FLOW { { command = "temperature_solar_flow"; itemClass = NumberItem.class; tagName = "A22"; } }, // German: Ventilöffnung elektrisches Expansionsventil TYPE_POSITION_EXPANSION_VALVE { { command = "position_expansion_valve"; itemClass = NumberItem.class; tagName = "A23"; } }, // German: elektrische Leistung Verdichter TYPE_POWER_COMPRESSOR { { command = "power_compressor"; itemClass = NumberItem.class; tagName = "A25"; } }, // German: abgegebene thermische Heizleistung der Wärmepumpe TYPE_POWER_HEATING { { command = "power_heating"; itemClass = NumberItem.class; tagName = "A26"; } }, // German: abgegebene thermische KälteLeistung der Wärmepumpe TYPE_POWER_COOLING { { command = "power_cooling"; itemClass = NumberItem.class; tagName = "A27"; } }, // German: COP Heizleistung TYPE_COP_HEATING { { command = "cop_heating"; itemClass = NumberItem.class; tagName = "A28"; } }, // German: COP Kälteleistungleistung TYPE_COP_COOLING { { command = "cop_cooling"; itemClass = NumberItem.class; tagName = "A29"; } }, // German: Aktuelle Heizkreistemperatur TYPE_TEMPERATURE_HEATING { { command = "temperature_heating_return"; itemClass = NumberItem.class; tagName = "A30"; } }, // German: Geforderte Temperatur im Heizbetrieb TYPE_TEMPERATURE_HEATING_SET { { command = "temperature_heating_set"; itemClass = NumberItem.class; tagName = "A31"; } }, // German: Sollwertvorgabe Heizkreistemperatur TYPE_TEMPERATURE_HEATING_SET2 { { command = "temperature_heating_set2"; itemClass = NumberItem.class; tagName = "A32"; } }, // German: Aktuelle Kühlkreistemperatur TYPE_TEMPERATURE_COOLING { { command = "temperature_cooling_return"; itemClass = NumberItem.class; tagName = "A33"; } }, // German: Geforderte Temperatur im Kühlbetrieb TYPE_TEMPERATURE_COOLING_SET { { command = "temperature_cooling_set"; itemClass = NumberItem.class; tagName = "A34"; } }, // German: Sollwertvorgabe Kühlbetrieb TYPE_TEMPERATURE_COOLING_SET2 { { command = "temperature_cooling_set2"; itemClass = NumberItem.class; tagName = "A35"; } }, // German: Sollwert Warmwassertemperatur TYPE_TEMPERATURE_WATER_SET { { command = "temperature_water_set"; itemClass = NumberItem.class; tagName = "A37"; } }, // German: Sollwertvorgabe Warmwassertemperatur TYPE_TEMPERATURE_WATER_SET2 { { command = "temperature_water_set2"; itemClass = NumberItem.class; tagName = "A38"; } }, // German: Sollwert Poolwassertemperatur TYPE_TEMPERATURE_POOL_SET { { command = "temperature_pool_set"; itemClass = NumberItem.class; tagName = "A40"; } }, // German: Sollwertvorgabe Poolwassertemperatur TYPE_TEMPERATURE_POOL_SET2 { { command = "temperature_pool_set2"; itemClass = NumberItem.class; tagName = "A41"; } }, // German: geforderte Verdichterleistung TYPE_COMPRESSOR_POWER { { command = "compressor_power"; itemClass = NumberItem.class; tagName = "A50"; } }, // German: % Heizungsumwälzpumpe TYPE_PERCENT_HEAT_CIRC_PUMP { { command = "percent_heat_circ_pump"; itemClass = NumberItem.class; tagName = "A51"; } }, // German: % Quellenpumpe TYPE_PERCENT_SOURCE_PUMP { { command = "percent_source_pump"; itemClass = NumberItem.class; tagName = "A52"; } }, // German: % Leistung Verdichter TYPE_PERCENT_COMPRESSOR { { command = "percent_compressor"; itemClass = NumberItem.class; tagName = "A58"; } }, // German: Hysterese Heizung TYPE_HYSTERESIS_HEATING { { command = "hysteresis_heating"; itemClass = NumberItem.class; tagName = "A61"; } }, // German: Außentemperatur gemittelt über 1h (scheinbar identisch zu A2) TYPE_TEMPERATURE2_OUTSIDE_1H { { command = "temperature2_outside_1h"; itemClass = NumberItem.class; tagName = "A90"; } }, // German: Heizkurve - nviNormAussen TYPE_NVINORMAUSSEN { { command = "nviNormAussen"; itemClass = NumberItem.class; tagName = "A91"; } }, // German: Heizkurve - nviHeizkreisNorm TYPE_NVIHEIZKREISNORM { { command = "nviHeizkreisNorm"; itemClass = NumberItem.class; tagName = "A92"; } }, // German: Heizkurve - nviTHeizgrenze TYPE_NVITHEIZGRENZE { { command = "nviTHeizgrenze"; itemClass = NumberItem.class; tagName = "A93"; } }, // German: Heizkurve - nviTHeizgrenzeSoll TYPE_NVITHEIZGRENZESOLL { { command = "nviTHeizgrenzeSoll"; itemClass = NumberItem.class; tagName = "A94"; } }, // German: undokumentiert: Heizkurve max. VL-Temp (??) TYPE_MAX_VL_TEMP { { command = "maxVLTemp"; itemClass = NumberItem.class; tagName = "A95"; } }, // German: undokumentiert: Heizkreis Soll-Temp bei 0° Aussen TYPE_TEMP_SET_0DEG { { command = "tempSet0Deg"; itemClass = NumberItem.class; tagName = "A97"; } }, // German: undokumentiert: Kühlen Einschalt-Temp. Aussentemp (??) TYPE_COOLENABLETEMP { { command = "coolEnableTemp"; itemClass = NumberItem.class; tagName = "A108"; } }, // German: Heizkurve - nviSollKuehlen TYPE_NVITSOLLKUEHLEN { { command = "nviSollKuehlen"; itemClass = NumberItem.class; tagName = "A109"; } }, // German: Temperaturveränderung Heizkreis bei PV-Ertrag TYPE_TEMPCHANGE_HEATING_PV { { command = "tempchange_heating_pv"; itemClass = NumberItem.class; tagName = "A682"; } }, // German: Temperaturveränderung Kühlkreis bei PV-Ertrag TYPE_TEMPCHANGE_COOLING_PV { { command = "tempchange_cooling_pv"; itemClass = NumberItem.class; tagName = "A683"; } }, // German: Temperaturveränderung Warmwasser bei PV-Ertrag TYPE_TEMPCHANGE_WARMWATER_PV { { command = "tempchange_warmwater_pv"; itemClass = NumberItem.class; tagName = "A684"; } }, // German: Temperaturveränderung Pool bei PV-Ertrag TYPE_TEMPCHANGE_POOL_PV { { command = "tempchange_pool_pv"; itemClass = NumberItem.class; tagName = "A685"; } }, // German: undokumentiert: Firmware-Version Regler // value 10401 => 01.04.01 TYPE_VERSION_CONTROLLER { { command = "version_controller"; itemClass = NumberItem.class; tagName = "I1"; type = Type.Word; } }, // German: undokumentiert: Firmware-Build Regler TYPE_VERSION_CONTROLLER_BUILD { { command = "version_controller_build"; itemClass = NumberItem.class; tagName = "I2"; type = Type.Word; } }, // German: undokumentiert: BIOS-Version // value 620 => 06.20 TYPE_VERSION_BIOS { { command = "version_bios"; itemClass = NumberItem.class; tagName = "I3"; type = Type.Word; } }, // German: undokumentiert: Datum: Tag TYPE_DATE_DAY { { command = "date_day"; itemClass = NumberItem.class; tagName = "I5"; type = Type.Word; } }, // German: undokumentiert: Datum: Monat TYPE_DATE_MONTH { { command = "date_month"; itemClass = NumberItem.class; tagName = "I6"; type = Type.Word; } }, // German: undokumentiert: Datum: Jahr TYPE_DATE_YEAR { { command = "date_year"; itemClass = NumberItem.class; tagName = "I7"; type = Type.Word; } }, // German: undokumentiert: Uhrzeit: Stunde TYPE_TIME_HOUR { { command = "time_hour"; itemClass = NumberItem.class; tagName = "I8"; type = Type.Word; } }, // German: undokumentiert: Uhrzeit: Minute TYPE_TIME_MINUTE { { command = "time_minute"; itemClass = NumberItem.class; tagName = "I9"; type = Type.Word; } }, // German: Betriebsstunden Verdichter 1 TYPE_OPERATING_HOURS_COMPRESSOR1 { { command = "operating_hours_compressor1"; itemClass = NumberItem.class; tagName = "I10"; type = Type.Word; } }, // German: Betriebsstunden Verdichter 2 TYPE_OPERATING_HOURS_COMPRESSOR2 { { command = "operating_hours_compressor2"; itemClass = NumberItem.class; tagName = "I14"; type = Type.Word; } }, // German: Betriebsstunden Heizungsumwälzpumpe TYPE_OPERATING_HOURS_CIRCULATION_PUMP { { command = "operating_hours_circulation_pump"; itemClass = NumberItem.class; tagName = "I18"; type = Type.Word; } }, // German: Betriebsstunden Quellenpumpe TYPE_OPERATING_HOURS_SOURCE_PUMP { { command = "operating_hours_source_pump"; itemClass = NumberItem.class; tagName = "I20"; type = Type.Word; } }, // German: Betriebsstunden Solarkreis TYPE_OPERATING_HOURS_SOLAR { { command = "operating_hours_solar"; itemClass = NumberItem.class; tagName = "I22"; type = Type.Word; } }, // German: Handabschaltung Heizbetrieb TYPE_ENABLE_HEATING { { command = "enable_heating"; itemClass = SwitchItem.class; tagName = "I30"; type = Type.Word; } }, // German: Handabschaltung Kühlbetrieb TYPE_ENABLE_COOLING { { command = "enable_cooling"; itemClass = SwitchItem.class; tagName = "I31"; type = Type.Word; } }, // German: Handabschaltung Warmwasserbetrieb TYPE_ENABLE_WARMWATER { { command = "enable_warmwater"; itemClass = SwitchItem.class; tagName = "I32"; type = Type.Word; } }, // German: Handabschaltung Pool_Heizbetrieb TYPE_ENABLE_POOL { { command = "enable_pool"; itemClass = SwitchItem.class; tagName = "I33"; type = Type.Word; } }, // German: undokumentiert: vermutlich Betriebsmodus PV 0=Aus, 1=Auto, 2=Ein TYPE_ENABLE_PV { { command = "enable_pv"; itemClass = NumberItem.class; tagName = "I41"; type = Type.Word; } }, // German: Status der Wärmepumpenkomponenten TYPE_STATE { { command = "state"; itemClass = NumberItem.class; tagName = "I51"; type = Type.Word; } }, // German: Status der Wärmepumpenkomponenten: Quellenpumpe TYPE_STATE_SOURCEPUMP { { command = "state_sourcepump"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 0; } }, // German: Status der Wärmepumpenkomponenten: Heizungsumwälzpumpe TYPE_STATE_HEATINGPUMP { { command = "state_heatingpump"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 1; } }, // German: Status der Wärmepumpenkomponenten: Freigabe Regelung EVD / // Magnetventil TYPE_STATE_EVD { { command = "state_evd"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 2; } }, // German: Status der Wärmepumpenkomponenten: Verdichter 1 TYPE_STATE_compressor1 { { command = "state_compressor1"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 3; } }, // German: Status der Wärmepumpenkomponenten: Verdichter 2 TYPE_STATE_compressor2 { { command = "state_compressor2"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 4; } }, // German: Status der Wärmepumpenkomponenten: externer Wärmeerzeuger TYPE_STATE_extheater { { command = "state_extheater"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 5; } }, // German: Status der Wärmepumpenkomponenten: Alarmausgang TYPE_STATE_alarm { { command = "state_alarm"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 6; } }, // German: Status der Wärmepumpenkomponenten: Motorventil Kühlbetrieb TYPE_STATE_cooling { { command = "state_cooling"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 7; } }, // German: Status der Wärmepumpenkomponenten: Motorventil Warmwasser TYPE_STATE_water { { command = "state_water"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 8; } }, // German: Status der Wärmepumpenkomponenten: Motorventil Pool TYPE_STATE_pool { { command = "state_pool"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 9; } }, // German: Status der Wärmepumpenkomponenten: Solarbetrieb TYPE_STATE_solar { { command = "state_solar"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 10; } }, // German: Status der Wärmepumpenkomponenten: 4-Wegeventil im Kältekreis TYPE_STATE_cooling4way { { command = "state_cooling4way"; itemClass = SwitchItem.class; tagName = "I51"; type = Type.Bitfield; bitnum = 11; } }, // German: Meldungen von Ausfällen F0xx die zum Wärmepumpenausfall führen TYPE_ALARM { { command = "alarm"; itemClass = NumberItem.class; tagName = "I52"; type = Type.Word; } }, // German: Unterbrechungen TYPE_INTERRUPTIONS { { command = "interruptions"; itemClass = NumberItem.class; tagName = "I53"; type = Type.Word; } }, // German: Serviceebene (0: normal, 1: service) TYPE_STATE_SERVICE { { command = "state_service"; itemClass = NumberItem.class; tagName = "I135"; type = Type.Word; } }, // German: Temperaturanpassung für die Heizung TYPE_ADAPT_HEATING { { command = "adapt_heating"; itemClass = NumberItem.class; tagName = "I263"; type = Type.Word; // value range 0..8 => -2K .. +2K } }, // German: Handschaltung Heizungspumpe (H-0-A) // H:Handschaltung Ein 0:Aus A:Automatik // Kodierung: 0:? 1:? 2:Automatik TYPE_MANUAL_HEATINGPUMP { { command = "manual_heatingpump"; itemClass = NumberItem.class; tagName = "I1270"; type = Type.Word; } }, // German: Handschaltung Quellenpumpe (H-0-A) TYPE_MANUAL_SOURCEPUMP { { command = "manual_sourcepump"; itemClass = NumberItem.class; tagName = "I1281"; type = Type.Word; } }, // German: Handschaltung Solarpumpe 1 (H-0-A) TYPE_MANUAL_SOLARPUMP1 { { command = "manual_solarpump1"; itemClass = NumberItem.class; tagName = "I1287"; type = Type.Word; } }, // German: Handschaltung Solarpumpe 2 (H-0-A) TYPE_MANUAL_SOLARPUMP2 { { command = "manual_solarpump2"; itemClass = NumberItem.class; tagName = "I1289"; type = Type.Word; } }, // German: Handschaltung Speicherladepumpe (H-0-A) TYPE_MANUAL_TANKPUMP { { command = "manual_tankpump"; itemClass = NumberItem.class; tagName = "I1291"; type = Type.Word; } }, // German: Handschaltung Brauchwasserventil (H-0-A) TYPE_MANUAL_VALVE { { command = "manual_valve"; itemClass = NumberItem.class; tagName = "I1293"; type = Type.Word; } }, // German: Handschaltung Poolventil (H-0-A) TYPE_MANUAL_POOLVALVE { { command = "manual_poolvalve"; itemClass = NumberItem.class; tagName = "I1295"; type = Type.Word; } }, // German: Handschaltung Kühlventil (H-0-A) TYPE_MANUAL_COOLVALVE { { command = "manual_coolvalve"; itemClass = NumberItem.class; tagName = "I1297"; type = Type.Word; } }, // German: Handschaltung Vierwegeventil (H-0-A) TYPE_MANUAL_4WAYVALVE { { command = "manual_4wayvalve"; itemClass = NumberItem.class; tagName = "I1299"; type = Type.Word; } }, // German: Handschaltung Multiausgang Ext. (H-0-A) TYPE_MANUAL_MULTIEXT { { command = "manual_multiext"; itemClass = NumberItem.class; tagName = "I1319"; type = Type.Word; } }, ; /** * Represents the heatpump command as it will be used in *.items * configuration */ String command; /** * Represents the internal raw heatpump command as it will be used in * querying the heat pump */ String tagName; Class<? extends Item> itemClass; /** * The heatpump always returns 16-bit integers encoded as ASCII. They need * to be interpreted according to the context. */ public enum Type { Analog, Word, Bitfield }; /** * The format of the response of the heat pump */ Type type = Type.Analog; /** * If \c type is Type.Bitfield, this determines the bit number (0-based) */ int bitnum = 0; /** * @return command name (uses in *.items files) */ public String getCommand() { return command; } /** * @return tag name (raw communication with heat pump) */ public String getTagName() { return tagName; } /** * @return type: how to interprete the response from the heat pump */ public Type getType() { return type; } /** * @return bitnum: if the value is a bit field, this indicates the bit * number (0-based) */ public int getBitNum() { return bitnum; } public Class<? extends Item> getItemClass() { return itemClass; } /** * * @param bindingConfig * command e.g. TYPE_TEMPERATURE_OUTSIDE,.. * @param itemClass * class to validate * @return true if item class can bound to heatpumpCommand */ public static boolean validateBinding(EcoTouchTags bindingConfig, Class<? extends Item> itemClass) { boolean ret = false; for (EcoTouchTags c : EcoTouchTags.values()) { if (c.getCommand().equals(bindingConfig.getCommand()) && c.getItemClass().equals(itemClass)) { ret = true; break; } } return ret; } /** * Searches the available heat pump commands and returns the matching one. * * @param heatpumpCommand * command string e.g. "temperature_outside" * @return matching EcoTouchTags instance, if available */ public static EcoTouchTags fromString(String heatpumpCommand) { if ("".equals(heatpumpCommand)) { return null; } for (EcoTouchTags c : EcoTouchTags.values()) { if (c.getCommand().equals(heatpumpCommand)) { return c; } } throw new IllegalArgumentException("cannot find EcoTouch tag for '" + heatpumpCommand + "'"); } /** * Searches the available heat pump commands and returns the first matching * one. * * @param tag * raw heatpump tag e.g. "A1" * @return first matching EcoTouchTags instance, if available */ public static EcoTouchTags fromTag(String tag) { for (EcoTouchTags c : EcoTouchTags.values()) { if (c.getTagName().equals(tag)) { return c; } } throw new IllegalArgumentException("cannot find EcoTouch tag for '" + tag + "'"); } }