From 4f018b8aecfd275453b81003ee7b59d7cb977463 Mon Sep 17 00:00:00 2001 From: Stefan Giehl Date: Sun, 11 Apr 2021 19:51:46 +0200 Subject: [PATCH] [LuxtronikHeatpump] Initial Contribution (#9669) Signed-off-by: Stefan Giehl --- CODEOWNERS | 1 + bom/openhab-addons/pom.xml | 5 + .../NOTICE | 13 + .../README.md | 334 +++ .../pom.xml | 17 + .../src/main/feature/feature.xml | 9 + .../internal/ChannelUpdaterJob.java | 274 +++ .../internal/HeatpumpConnector.java | 208 ++ .../LuxtronikHeatpumpBindingConstants.java | 30 + .../LuxtronikHeatpumpConfiguration.java | 39 + .../internal/LuxtronikHeatpumpHandler.java | 335 +++ .../LuxtronikHeatpumpHandlerFactory.java | 69 + .../LuxtronikTranslationProvider.java | 54 + .../internal/enums/HeatpumpChannel.java | 1385 +++++++++++ .../enums/HeatpumpCoolingOperationMode.java | 47 + .../internal/enums/HeatpumpOperationMode.java | 50 + .../internal/enums/HeatpumpType.java | 131 ++ .../internal/enums/HeatpumpVisibility.java | 395 ++++ .../exceptions/InvalidChannelException.java | 29 + .../InvalidOperationModeException.java | 29 + .../main/resources/OH-INF/binding/binding.xml | 9 + .../OH-INF/i18n/luxtronikheatpump.properties | 131 ++ .../i18n/luxtronikheatpump_de.properties | 395 ++++ .../main/resources/OH-INF/thing/channels.xml | 2078 +++++++++++++++++ .../resources/OH-INF/thing/thing-types.xml | 259 ++ bundles/pom.xml | 1 + 26 files changed, 6327 insertions(+) create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/NOTICE create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/README.md create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/pom.xml create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/feature/feature.xml create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/ChannelUpdaterJob.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/HeatpumpConnector.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpBindingConstants.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpConfiguration.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandler.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandlerFactory.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikTranslationProvider.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpChannel.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpCoolingOperationMode.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpOperationMode.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpType.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpVisibility.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidChannelException.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidOperationModeException.java create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/binding/binding.xml create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump.properties create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump_de.properties create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/channels.xml create mode 100644 bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/thing-types.xml diff --git a/CODEOWNERS b/CODEOWNERS index 6304d89eb66..04c7e195cc2 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -144,6 +144,7 @@ /bundles/org.openhab.binding.loxone/ @ppieczul /bundles/org.openhab.binding.luftdateninfo/ @weymann /bundles/org.openhab.binding.lutron/ @actong @bobadair +/bundles/org.openhab.binding.luxtronikheatpump/ @sgiehl /bundles/org.openhab.binding.magentatv/ @markus7017 /bundles/org.openhab.binding.mail/ @openhab/add-ons-maintainers /bundles/org.openhab.binding.max/ @marcelrv diff --git a/bom/openhab-addons/pom.xml b/bom/openhab-addons/pom.xml index aa549f61cc1..d26a9a58099 100644 --- a/bom/openhab-addons/pom.xml +++ b/bom/openhab-addons/pom.xml @@ -706,6 +706,11 @@ org.openhab.binding.lutron ${project.version} + + org.openhab.addons.bundles + org.openhab.binding.luxtronikheatpump + ${project.version} + org.openhab.addons.bundles org.openhab.binding.magentatv diff --git a/bundles/org.openhab.binding.luxtronikheatpump/NOTICE b/bundles/org.openhab.binding.luxtronikheatpump/NOTICE new file mode 100644 index 00000000000..38d625e3492 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/NOTICE @@ -0,0 +1,13 @@ +This content is produced and maintained by the openHAB project. + +* Project home: https://www.openhab.org + +== Declared Project Licenses + +This program and the accompanying materials are made available under the terms +of the Eclipse Public License 2.0 which is available at +https://www.eclipse.org/legal/epl-2.0/. + +== Source Code + +https://github.com/openhab/openhab-addons diff --git a/bundles/org.openhab.binding.luxtronikheatpump/README.md b/bundles/org.openhab.binding.luxtronikheatpump/README.md new file mode 100644 index 00000000000..c8aedc74522 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/README.md @@ -0,0 +1,334 @@ +# LuxtronikHeatpump Binding + +This binding gives the possibility to integrate any Heatpump that is based on the Luxtronik 2 contol unit of Alpha Innotec. This includes heatpumps of: + +* Alpha InnoTec +* Buderus (Logamatic HMC20, HMC20 Z) +* CTA All-In-One (Aeroplus) +* Elco +* Nibe (AP-AW10) +* Roth (ThermoAura®, ThermoTerra) +* (Siemens) Novelan (WPR NET) +* Wolf Heiztechnik (BWL/BWS) + +This binding was tested with: + +* Siemens Novelan LD 7 + +_If you have another heatpump the binding works with, let us know, so we can extend the list_ + +Note: The whole functionality is based on data that was reverse engineered, so use it at your own risk. + +## Supported Things + +This binding only supports one thing type "Luxtronik Heatpump" (heatpump). + +## Thing Configuration + +Each heatpump requires the following configuration parameters: + +| parameter | required | default | description | +|--------------|----------|---------|-------------| +| ipAddress | yes | | IP address of the heatpump | +| port | no | 8889 | Port number to connect to. This should be `8889` for most heatpumps. For heatpumps using a firmware version before V1.73 port `8888` needs to be used. | +| refresh | no | 300 | Interval (in seconds) to refresh the channel values. | +| showAllChannels | no | false | Show all channels (even those determined as not supported) | + +## Channels + +As the Luxtronik 2 control is able to handle multiple heat pumps with different features (like heating, hot water, cooling, solar, photovoltaics, swimming pool,...), the binding has a lot channels. +Depending on the heatpump it is used with, various channels might not hold any (useful) values. +If `showAllChannels` is not activated for the thing, this binding will automatically try to hide channels that are not available for your heat pump. As this is done using reverse engineered parameters it might not be correct in all cases. +If you miss a channel that should be available for your heat pump, you can enable `showAllChannels` for your thing, so all channels become available. Feel free to report such a case on the forum, so we can try to improve / fix that behavior. + +The following channels are holding read only values: + +| channel | type | advanced | description | +|----------|--------|----------|------------------------------| +| temperatureHeatingCircuitFlow | Number:Temperature | | Flow temperature heating circuit | +| temperatureHeatingCircuitReturn | Number:Temperature | | Return temperature heating circuit | +| temperatureHeatingCircuitReturnTarget | Number:Temperature | | Return setpoint heating circuit | +| temperatureBufferTankReturn | Number:Temperature | x | Return temperature in buffer tank | +| temperatureHotGas | Number:Temperature | x | Hot gas temperature | +| temperatureOutside | Number:Temperature | | Outside temperature | +| temperatureOutsideMean | Number:Temperature | | Average temperature outside over 24 h (heating limit function) | +| temperatureHotWater | Number:Temperature | | Hot water actual temperature | +| temperatureHotWaterTarget | Number:Temperature | | Hot water target temperature | +| temperatureHeatSourceInlet | Number:Temperature | x | Heat source inlet temperature | +| temperatureHeatSourceOutlet | Number:Temperature | x | Heat source outlet temperature | +| temperatureMixingCircuit1Flow | Number:Temperature | x | Mixing circuit 1 Flow temperature | +| temperatureMixingCircuit1FlowTarget | Number:Temperature | x | Mixing circuit 1 Flow target temperature | +| temperatureRoomStation | Number:Temperature | x | Room temperature room station 1 | +| temperatureMixingCircuit2Flow | Number:Temperature | x | Mixing circuit 2 Flow temperature | +| temperatureMixingCircuit2FlowTarget | Number:Temperature | x | Mixing circuit 2 Flow target temperature | +| temperatureSolarCollector | Number:Temperature | x | Solar collector sensor | +| temperatureSolarTank | Number:Temperature | x | Solar tank sensor | +| temperatureExternalEnergySource | Number:Temperature | x | Sensor external energy source | +| inputASD | Switch | x | Input "Defrost end, brine pressure, flow rate" | +| inputHotWaterThermostat | Switch | x | Input "Domestic hot water thermostat" | +| inputUtilityLock | Switch | x | Input "EVU lock" | +| inputHighPressureCoolingCircuit | Switch | x | Input "High pressure cooling circuit | +| inputMotorProtectionOK | Switch | x | Input "Motor protection OK" | +| inputLowPressure | Switch | x | Input "Low pressure" | +| inputPEX | Switch | x | Input "Monitoring contact for potentiostat" | +| inputSwimmingPoolThermostat | Switch | x | Input "Swimming pool thermostat" | +| outputDefrostValve | Switch | x | Output "Defrost valve" | +| outputBUP | Switch | x | Output "Domestic hot water pump/changeover valve" | +| outputHeatingCirculationPump | Switch | x | Output "Heating circulation pump" | +| outputMixingCircuit1Open | Switch | x | Output "Mixing circuit 1 Open" | +| outputMixingCircuit1Closed | Switch | x | Output "Mixing circuit 1 Closed" | +| outputVentilation | Switch | x | Output "Ventilation" | +| outputVBO | Switch | x | Output "Brine pump/fan" | +| outputCompressor1 | Switch | x | Output "Compressor 1" | +| outputCompressor2 | Switch | x | Output "Compressor 2" | +| outputCirculationPump | Switch | x | Output "Circulation pump" | +| outputZUP | Switch | x | Output "Auxiliary circulation pump" | +| outputControlSignalAdditionalHeating | Switch | x | Output "Control signal additional heating" | +| outputFaultSignalAdditionalHeating | Switch | x | Output "Control signal additional heating/fault signal" | +| outputAuxiliaryHeater3 | Switch | x | Output "Auxiliary heater 3" | +| outputMixingCircuitPump2 | Switch | x | Output "Pump mixing circuit 2" | +| outputSolarChargePump | Switch | x | Output "Solar charge pump" | +| outputSwimmingPoolPump | Switch | x | Output "Swimming pool pump" | +| outputMixingCircuit2Closed | Switch | x | Output "Mixing circuit 2 Closed" | +| outputMixingCircuit2Open | Switch | x | Output "Mixing circuit 2 Open" | +| runtimeTotalCompressor1 | Number:Time | | Operation hours compressor 1 | +| pulsesCompressor1 | Number:Dimensionless | | Pulses compressor 1 | +| runtimeTotalCompressor2 | Number:Time | x | Operation hours compressor 2 | +| pulsesCompressor2 | Number:Dimensionless | x | Pulses compressor 2 | +| runtimeTotalSecondHeatGenerator1 | Number:Time | x | Operation hours Second heat generator 1 | +| runtimeTotalSecondHeatGenerator2 | Number:Time | x | Operation hours Second heat generator 2 | +| runtimeTotalSecondHeatGenerator3 | Number:Time | x | Operation hours Second heat generator 3 | +| runtimeTotalHeatPump | Number:Time | | Operation hours heat pump | +| runtimeTotalHeating | Number:Time | | Operation hours heating | +| runtimeTotalHotWater | Number:Time | | Operation hours hot water | +| runtimeTotalCooling | Number:Time | | Operation hours cooling | +| runtimeCurrentHeatPump | Number:Time | x | Heat pump running since | +| runtimeCurrentSecondHeatGenerator1 | Number:Time | x | Second heat generator 1 running since | +| runtimeCurrentSecondHeatGenerator2 | Number:Time | x | Second heat generator 2 running since | +| mainsOnDelay | Number:Time | x | Mains on delay | +| switchingCycleLockOff | Number:Time | x | Switching cycle lock off | +| switchingCycleLockOn | Number:Time | x | Switching cycle lock on | +| compressorIdleTime | Number:Time | x | Compressor Idle time | +| heatingControllerMoreTime | Number:Time | x | Heating controller More time | +| heatingControllerLessTime | Number:Time | x | Heating controller Less time | +| runtimeCurrentThermalDisinfection | Number:Time | x | Thermal disinfection running since | +| timeHotWaterLock | Number:Time | x | Hot water lock | +| bivalenceStage | Number | x | Bivalence stage | +| operatingStatus | Number | | Operating status | +| errorTime0 | DateTime | | Timestamp error 0 in memory | +| errorTime1 | DateTime | x | Timestamp error 1 in memory | +| errorTime2 | DateTime | x | Timestamp error 2 in memory | +| errorTime3 | DateTime | x | Timestamp error 3 in memory | +| errorTime4 | DateTime | x | Timestamp error 4 in memory | +| errorCode0 | Number | | Error code Error 0 in memory | +| errorCode1 | Number | x | Error code Error 1 in memory | +| errorCode2 | Number | x | Error code Error 2 in memory | +| errorCode3 | Number | x | Error code Error 3 in memory | +| errorCode4 | Number | x | Error code Error 4 in memory | +| errorCountInMemory | Number | x | Number of errors in memory | +| shutdownReason0 | Number | | Reason shutdown 0 in memory | +| shutdownReason1 | Number | x | Reason shutdown 1 in memory | +| shutdownReason2 | Number | x | Reason shutdown 2 in memory | +| shutdownReason3 | Number | x | Reason shutdown 3 in memory | +| shutdownReason4 | Number | x | Reason shutdown 4 in memory | +| shutdownTime0 | DateTime | | Timestamp shutdown 0 in memory | +| shutdownTime1 | DateTime | x | Timestamp shutdown 1 in memory | +| shutdownTime2 | DateTime | x | Timestamp shutdown 2 in memory | +| shutdownTime3 | DateTime | x | Timestamp shutdown 3 in memory | +| shutdownTime4 | DateTime | x | Timestamp shutdown 4 in memory | +| comfortBoardInstalled | Switch | x | Comfort board installed | +| menuStateFull | String | | Status (complete) | +| menuStateLine1 | Number | | Status line 1 | +| menuStateLine2 | Number | x | Status line 2 | +| menuStateLine3 | Number | x | Status line 3 | +| menuStateTime | Number:Time | x | Status Time | +| bakeoutProgramStage | Number | x | Stage bakeout program | +| bakeoutProgramTemperature | Number:Temperature | x | Temperature bakeout program | +| bakeoutProgramTime | Number:Time | x | Runtime bakeout program | +| iconHotWater | Switch | x | DHW active/inactive icon | +| iconHeater | Number | x | Heater icon | +| iconMixingCircuit1 | Number | x | Mixing circuit 1 icon | +| iconMixingCircuit2 | Number | x | Mixing circuit 2 icon | +| shortProgramSetting | Number | x | Short program setting | +| statusSlave1 | Number | x | Status Slave 1 | +| statusSlave2 | Number | x | Status Slave 2 | +| statusSlave3 | Number | x | Status Slave 3 | +| statusSlave4 | Number | x | Status Slave 4 | +| statusSlave5 | Number | x | Status Slave 5 | +| currentTimestamp | DateTime | x | Current time of the heat pump | +| iconMixingCircuit3 | Number | x | Mixing circuit 3 icon | +| temperatureMixingCircuit3FlowTarget | Number:Temperature | x | Mixing circuit 3 Flow set temperature | +| temperatureMixingCircuit3Flow | Number:Temperature | x | Mixing circuit 3 Flow temperature | +| outputMixingCircuit3Close | Switch | x | Output "Mixing circuit 3 Closed" | +| outputMixingCircuit3Open | Switch | x | Output "Mixing circuit 3 Up" | +| outputMixingCircuitPump3 | Switch | x | Pump mixing circuit 3 | +| timeUntilDefrost | Number:Time | x | Time until defrost | +| temperatureRoomStation2 | Number:Temperature | x | Room temperature room station 2 | +| temperatureRoomStation3 | Number:Temperature | x | Room temperature room station 3 | +| iconTimeSwitchSwimmingPool | Number | x | Time switch swimming pool icon | +| runtimeTotalSwimmingPool | Number:Time | x | Operation hours swimming pool | +| coolingRelease | Switch | x | Release cooling | +| inputAnalog | Number:ElectricPotential | x | Analog input signal | +| iconCirculationPump | Number | x | Circulation pumps icon | +| heatMeterHeating | Number:Energy | | Heat meter heating | +| heatMeterHotWater | Number:Energy | | Heat meter domestic water | +| heatMeterSwimmingPool | Number:Energy | | Heat meter swimming pool | +| heatMeterTotalSinceReset | Number:Energy | | Total heat meter | +| heatMeterFlowRate | Number:VolumetricFlowRate | | Heat meter flow rate | +| outputAnalog1 | Number:ElectricPotential | x | Analog output 1 | +| outputAnalog2 | Number:ElectricPotential | x | Analog output 2 | +| timeLockSecondHotGasCompressor | Number:Time | x | Lock second compressor hot gas | +| temperatureSupplyAir | Number:Temperature | x | Supply air temperature | +| temperatureExhaustAir | Number:Temperature | x | Exhaust air temperature | +| runtimeTotalSolar | Number:Time | x | Operating hours solar | +| outputAnalog3 | Number:ElectricPotential | x | Analog output 3 | +| outputAnalog4 | Number:ElectricPotential | x | Analog output 4 | +| outputSupplyAirFan | Number:ElectricPotential | x | Supply air fan (defrost function) | +| outputExhaustFan | Number:ElectricPotential | x | Exhaust fan | +| outputVSK | Switch | x | Output VSK | +| outputFRH | Switch | x | Output FRH | +| inputAnalog2 | Number:ElectricPotential | x | Analog input 2 | +| inputAnalog3 | Number:ElectricPotential | x | Analog input 3 | +| inputSAX | Switch | x | Input SAX | +| inputSPL | Switch | x | Input SPL | +| ventilationBoardInstalled | Switch | x | Ventilation board installed | +| flowRateHeatSource | Number:VolumetricFlowRate | x | Flow rate heat source | +| linBusInstalled | Switch | x | LIN BUS installed | +| temperatureSuctionEvaporator | Number:Temperature | x | Temperature suction evaporator | +| temperatureSuctionCompressor | Number:Temperature | x | Temperature suction compressor | +| temperatureCompressorHeating | Number:Temperature | x | Temperature compressor heating | +| temperatureOverheating | Number:Temperature | x | Overheating | +| temperatureOverheatingTarget | Number:Temperature | x | Overheating target | +| highPressure | Number:Pressure | x | High pressure | +| lowPressure | Number:Pressure | x | Low pressure | +| outputCompressorHeating | Switch | x | Output compressor heating | +| controlSignalCirculatingPump | Number:Energy | x | Control signal circulating pump | +| fanSpeed | Number | x | Fan speed | +| temperatureSafetyLimitFloorHeating | Switch | x | Safety temperature limiter floor heating | +| powerTargetValue | Number:Energy | x | Power target value | +| powerActualValue | Number:Energy | x | Power actual value | +| temperatureFlowTarget | Number:Temperature | x | Temperature flow set point | +| operatingStatusSECBoard | Number | x | SEC Board operating status | +| fourWayValve | Number | x | Four-way valve | +| compressorSpeed | Number | x | Compressor speed | +| temperatureCompressorEVI | Number:Temperature | x | Compressor temperature EVI (Enhanced Vapour Injection) | +| temperatureIntakeEVI | Number:Temperature | x | Intake temperature EVI | +| temperatureOverheatingEVI | Number:Temperature | x | Overheating EVI | +| temperatureOverheatingTargetEVI | Number:Temperature | x | Overheating EVI target | +| temperatureCondensation | Number:Temperature | x | Condensation temperature | +| temperatureLiquidEEV | Number:Temperature | x | Liquid temperature EEV (electronic expansion valve) | +| temperatureHypothermiaEEV | Number:Temperature | x | Hypothermia EEV | +| pressureEVI | Number:Pressure | x | Pressure EVI | +| voltageInverter | Number:ElectricPotential | x | Voltage inverter | +| temperatureHotGas2 | Number:Temperature | x | Hot gas temperature sensor 2 | +| temperatureHeatSourceInlet2 | Number:Temperature | x | Temperature sensor heat source inlet 2 | +| temperatureIntakeEvaporator2 | Number:Temperature | x | Intake temperature evaporator 2 | +| temperatureIntakeCompressor2 | Number:Temperature | x | Intake temperature compressor 2 | +| temperatureCompressor2Heating | Number:Temperature | x | Temperature compressor 2 heating | +| temperatureOverheating2 | Number:Temperature | x | Overheating 2 | +| temperatureOverheatingTarget2 | Number:Temperature | x | Overheating target 2 | +| highPressure2 | Number:Pressure | x | High pressure 2 | +| lowPressure2 | Number:Pressure | x | Low pressure 2 | +| inputSwitchHighPressure2 | Switch | x | Input pressure switch high pressure 2 | +| outputDefrostValve2 | Switch | x | Output defrost valve 2 | +| outputVBO2 | Switch | x | Output brine pump/fan 2 | +| outputCompressor1_2 | Switch | x | Compressor output 1 / 2 | +| outputCompressorHeating2 | Switch | x | Compressor output heating 2 | +| secondShutdownReason0 | Number | x | Reason shutdown 0 in memory | +| secondShutdownReason1 | Number | x | Reason shutdown 1 in memory | +| secondShutdownReason2 | Number | x | Reason shutdown 2 in memory | +| secondShutdownReason3 | Number | x | Reason shutdown 3 in memory | +| secondShutdownReason4 | Number | x | Reason shutdown 4 in memory | +| secondShutdownTime0 | DateTime | x | Timestamp shutdown 0 in memory | +| secondShutdownTime1 | DateTime | x | Timestamp shutdown 1 in memory | +| secondShutdownTime2 | DateTime | x | Timestamp shutdown 2 in memory | +| secondShutdownTime3 | DateTime | x | Timestamp shutdown 3 in memory | +| secondShutdownTime4 | DateTime | x | Timestamp shutdown 4 in memory | +| temperatureRoom | Number:Temperature | x | Room temperature actual value | +| temperatureRoomTarget | Number:Temperature | x | Room temperature set point | +| temperatureHotWaterTop | Number:Temperature | x | Temperature domestic water top | +| frequencyCompressor | Number:Frequency | x | Compressor frequency | + +The following channels are also writable: +| channel | type | advanced | description | +|----------|--------|----------|------------------------------| +| temperatureHeatingParallelShift | Number:Temperature | | Heating temperature (parallel shift) | +| temperatureTargetHotWater_2 | Number:Temperature | | Hot water temperature | +| heatingMode | Number | | Heating mode | +| hotWaterMode | Number | | Hot water operating mode | +| thermalDisinfectionMonday | Switch | x | Thermal disinfection (Monday) | +| thermalDisinfectionTuesday | Switch | x | Thermal disinfection (Tuesday) | +| thermalDisinfectionWednesday | Switch | x | Thermal disinfection (Wednesday) | +| thermalDisinfectionThursday | Switch | x | Thermal disinfection (Thursday) | +| thermalDisinfectionFriday | Switch | x | Thermal disinfection (Friday) | +| thermalDisinfectionSaturday | Switch | x | Thermal disinfection (Saturday) | +| thermalDisinfectionSunday | Switch | x | Thermal disinfection (Sunday) | +| thermalDisinfectionPermanent | Switch | x | Thermal disinfection (Permanent) | +| comfortCoolingMode | Number | | Comfort cooling mode | +| temperatureComfortCoolingATRelease | Number:Temperature | | Comfort cooling AT release | +| temperatureComfortCoolingATReleaseTarget | Number:Temperature | | Comfort cooling AT release target | +| comfortCoolingATExcess | Number:Time | | AT Excess | +| comfortCoolingATUndercut | Number:Time | | AT undercut | + + +## Example + +Below you can find some example textual configuration for a heatpump with some basic functionallity. This can be extended/adjusted according to your needs and depending on the availability of channels (see list above). + +_heatpump.things:_ + +``` +Thing luxtronikheatpump:heatpump:heatpump "Heatpump" [ + ipAddress="192.168.178.12", + port="8889", + refresh="300" +] +``` + +_heatpump.items:_ + +``` +Group gHeatpump "Heatpump" + +Number:Temperature HeatPump_Temp_Outside "Temperature outside [%.1f °C]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureOutside" } +Number:Temperature HeatPump_Temp_Outside_Avg "Avg. temperature outside [%.1f °C]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureOutsideMean" } + +Number:Time HeatPump_Hours_Heatpump "Operating hours [%d h]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:runtimeTotalHeatPump" } +Number:Time HeatPump_Hours_Heating "Operating hours heating [%d h]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:runtimeTotalHeating" } +Number:Time HeatPump_Hours_Warmwater "Operating hours hot water [%d h]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:runtimeTotalHotWater" } + +String HeatPump_State_Ext "State [%s]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:menuStateFull" } + +Number HeatPump_heating_operation_mode "Heating operation mode [%s]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:heatingMode" } +Number HeatPump_heating_temperature "Heating temperature [%.1f]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureHeatingParallelShift" } +Number HeatPump_warmwater_operation_mode "Hot water operation mode [%s]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:hotWaterMode" } +Number HeatPump_warmwater_temperature "Hot water temperature [%.1f]" (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureHotWaterTarget" } +``` + +_heatpump.sitemap:_ + +``` +sitemap heatpump label="Heatpump" { + Frame label="Heatpump" { + Text item=HeatPump_State_Ext + Text item=HeatPump_Temperature_1 + Text item=HeatPump_Outside_Avg + Text item=HeatPump_Hours_Heatpump + Text item=HeatPump_Hours_Heating + Text item=HeatPump_Hours_Warmwater + Switch item=HeatPump_heating_operation_mode mappings=[0="Auto", 1="Auxiliary heater", 2="Party", 3="Holiday", 4="Off"] + Setpoint item=HeatPump_heating_temperature minValue=-10 maxValue=10 step=0.5 + Switch item=HeatPump_warmwater_operation_mode mappings=[0="Auto", 1="Auxiliary heater", 2="Party", 3="Holiday", 4="Off"] + Setpoint item=HeatPump_warmwater_temperature minValue=10 maxValue=65 step=1 + } +} +``` + +## Development Notes + +This binding was initially based on the [Novelan/Luxtronik Heat Pump Binding](https://v2.openhab.org/addons/bindings/novelanheatpump1/) for openHAB 1. + +Luxtronik control units have an internal webserver which serves a Java applet. This applet can be used to configure some parts of the heat pump. The applet itselves uses a socket connection to fetch and send data to the heatpump. +This socket is also used by this binding. To get some more information on how this socket works you can check out other Luxtronik tools like [Luxtronik2 for NodeJS](https://github.com/coolchip/luxtronik2). + +A detailed parameter descriptions for the Java Webinterface can be found in the [Loxwiki](https://www.loxwiki.eu/display/LOX/Java+Webinterface) diff --git a/bundles/org.openhab.binding.luxtronikheatpump/pom.xml b/bundles/org.openhab.binding.luxtronikheatpump/pom.xml new file mode 100644 index 00000000000..f48eeaaa99f --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/pom.xml @@ -0,0 +1,17 @@ + + + + 4.0.0 + + + org.openhab.addons.bundles + org.openhab.addons.reactor.bundles + 3.1.0-SNAPSHOT + + + org.openhab.binding.luxtronikheatpump + + openHAB Add-ons :: Bundles :: Luxtronik Heatpump Binding + + diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/feature/feature.xml b/bundles/org.openhab.binding.luxtronikheatpump/src/main/feature/feature.xml new file mode 100644 index 00000000000..fcd8ee58cf3 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/feature/feature.xml @@ -0,0 +1,9 @@ + + + mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features + + + openhab-runtime-base + mvn:org.openhab.addons.bundles/org.openhab.binding.luxtronikheatpump/${project.version} + + diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/ChannelUpdaterJob.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/ChannelUpdaterJob.java new file mode 100644 index 00000000000..7bca5ae90aa --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/ChannelUpdaterJob.java @@ -0,0 +1,274 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal; + +import java.io.IOException; +import java.time.DateTimeException; +import java.time.Instant; +import java.time.ZoneId; + +import javax.measure.Unit; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.luxtronikheatpump.internal.enums.HeatpumpChannel; +import org.openhab.binding.luxtronikheatpump.internal.enums.HeatpumpType; +import org.openhab.core.items.Item; +import org.openhab.core.library.items.DateTimeItem; +import org.openhab.core.library.items.NumberItem; +import org.openhab.core.library.items.SwitchItem; +import org.openhab.core.library.types.DateTimeType; +import org.openhab.core.library.types.DecimalType; +import org.openhab.core.library.types.OnOffType; +import org.openhab.core.library.types.QuantityType; +import org.openhab.core.library.types.StringType; +import org.openhab.core.library.unit.SIUnits; +import org.openhab.core.library.unit.Units; +import org.openhab.core.scheduler.SchedulerRunnable; +import org.openhab.core.thing.Thing; +import org.openhab.core.types.State; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link ChannelUpdaterJob} updates all channel values + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class ChannelUpdaterJob implements SchedulerRunnable, Runnable { + + private final Thing thing; + private final LuxtronikHeatpumpConfiguration config; + private final LuxtronikTranslationProvider translationProvider; + private final Logger logger = LoggerFactory.getLogger(ChannelUpdaterJob.class); + private final LuxtronikHeatpumpHandler handler; + + public ChannelUpdaterJob(LuxtronikHeatpumpHandler handler, LuxtronikTranslationProvider translationProvider) { + this.translationProvider = translationProvider; + this.handler = handler; + this.thing = handler.getThing(); + this.config = this.thing.getConfiguration().as(LuxtronikHeatpumpConfiguration.class); + } + + public Thing getThing() { + return thing; + } + + @Override + public void run() { + // connect to heatpump and check if values can be fetched + final HeatpumpConnector connector = new HeatpumpConnector(config.ipAddress, config.port); + + try { + connector.read(); + } catch (IOException e) { + logger.warn("Could not connect to heatpump (uuid={}, ip={}, port={}): {}", thing.getUID(), config.ipAddress, + config.port, e.getMessage()); + + handler.setStatusConnectionError(); + return; + } + + handler.setStatusOnline(); + + // read all available values + Integer[] heatpumpValues = connector.getValues(); + + // read all parameters + Integer[] heatpumpParams = connector.getParams(); + Integer[] heatpumpVisibilities = connector.getVisibilities(); + + for (HeatpumpChannel channel : HeatpumpChannel.values()) { + try { + Integer rawValue = getChannelValue(channel, heatpumpValues, heatpumpParams, heatpumpVisibilities); + + if (rawValue == null) { + continue; + } + + State value = convertValueToState(rawValue, channel.getItemClass(), channel.getUnit()); + + if (value != null) { + handleEventType(value, channel); + } + } catch (Exception e) { + // an exception should actually not occur, but is catched nevertheless in case it does + // this ensures the remaining channels are updated even if one fails for some reason + logger.warn("An error occurred while updating the channel {}: {}", channel.getCommand(), + e.getMessage()); + } + } + + setExtendedState(heatpumpValues, heatpumpParams, heatpumpVisibilities); + + updateProperties(heatpumpValues); + } + + private @Nullable State convertValueToState(Integer rawValue, Class itemClass, + @Nullable Unit unit) { + if (itemClass == SwitchItem.class) { + return (rawValue == 0) ? OnOffType.OFF : OnOffType.ON; + } + + if (itemClass == DateTimeItem.class && rawValue > 0) { + try { + Instant instant = Instant.ofEpochSecond(rawValue.longValue()); + return new DateTimeType(instant.atZone(ZoneId.of("UTC"))); + } catch (DateTimeException e) { + logger.warn("Invalid timestamp '{}' received from heatpump: {}", rawValue, e.getMessage()); + } + } + + if (itemClass == NumberItem.class) { + if (unit == null) { + return new DecimalType(rawValue); + } + if (unit == SIUnits.CELSIUS || unit == Units.KELVIN || unit == Units.KILOWATT_HOUR || unit == Units.PERCENT + || unit == Units.HOUR) { + return new QuantityType<>((double) rawValue / 10, unit); + } else if (unit == Units.HERTZ || unit == Units.SECOND) { + return new QuantityType<>((double) rawValue, unit); + } else if (unit == Units.LITRE_PER_MINUTE) { + return new QuantityType<>((double) rawValue / 60, unit); + } else if (unit == Units.BAR || unit == Units.VOLT) { + return new QuantityType<>((double) rawValue / 100, unit); + } + + logger.debug("Unhandled unit {} configured for a channel.", unit); + return new DecimalType(rawValue); + } + + return null; + } + + private @Nullable Integer getChannelValue(HeatpumpChannel channel, Integer[] heatpumpValues, + Integer[] heatpumpParams, Integer[] heatpumpVisibilities) { + Integer channelId = channel.getChannelId(); + + if (channelId == null) { + return null; // no channel id to read defined (for channels handeled separatly) + } + + if (!channel.isVisible(heatpumpVisibilities) && config.showAllChannels) { + logger.debug("Channel {} is not available. Skipped updating it", channel.getCommand()); + return null; + } + + Integer rawValue = null; + + if (channel.isWritable()) { + rawValue = heatpumpParams[channelId]; + } else { + if (heatpumpValues.length <= channelId) { + return null; // channel not available + } + rawValue = heatpumpValues[channelId]; + } + + return rawValue; + } + + private String getSoftwareVersion(Integer[] heatpumpValues) { + StringBuffer softwareVersion = new StringBuffer(""); + + for (int i = 81; i <= 90; i++) { + if (heatpumpValues[i] > 0) { + softwareVersion.append(Character.toString(heatpumpValues[i])); + } + } + + return softwareVersion.toString(); + } + + private String transformIpAddress(int ip) { + return String.format("%d.%d.%d.%d", (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF); + } + + private void handleEventType(State state, HeatpumpChannel heatpumpCommandType) { + handler.updateState(heatpumpCommandType.getCommand(), state); + } + + private void setExtendedState(Integer[] heatpumpValues, Integer[] heatpumpParams, Integer[] heatpumpVisibilities) { + Integer row1 = getChannelValue(HeatpumpChannel.CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEILE1, heatpumpValues, + heatpumpParams, heatpumpVisibilities); + Integer error = getChannelValue(HeatpumpChannel.CHANNEL_HEATPUMP_ERROR_NR0, heatpumpValues, heatpumpParams, + heatpumpVisibilities); + Integer row2 = getChannelValue(HeatpumpChannel.CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEILE2, heatpumpValues, + heatpumpParams, heatpumpVisibilities); + Integer row3 = getChannelValue(HeatpumpChannel.CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEILE3, heatpumpValues, + heatpumpParams, heatpumpVisibilities); + Integer time = getChannelValue(HeatpumpChannel.CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEIT, heatpumpValues, + heatpumpParams, heatpumpVisibilities); + String state = ""; + + if (row1 != null && row1 == 3) { + // 3 means error state + state = getStateTranslation("errorCodeX", error); + } else { + state = getStateTranslation("menuStateLine1", row1); + } + + var longState = String.format("%s - %s %s - %s", state, getStateTranslation("menuStateLine2", row2), + formatHours(time), getStateTranslation("menuStateLine3", row3)); + + handleEventType((State) new StringType(longState), HeatpumpChannel.CHANNEL_HEATPUMP_STATUS); + } + + private void updateProperties(Integer[] heatpumpValues) { + String heatpumpType = HeatpumpType.fromCode(heatpumpValues[78]).getName(); + + setProperty("heatpumpType", heatpumpType); + + // Not sure when Typ 2 should be used + // String heatpumpType2 = HeatpumpType.fromCode(heatpumpValues[230]).getName(); + // setProperty("heatpumpType2", heatpumpType2); + + setProperty("softwareVersion", getSoftwareVersion(heatpumpValues)); + setProperty("ipAddress", transformIpAddress(heatpumpValues[91])); + setProperty("subnetMask", transformIpAddress(heatpumpValues[92])); + setProperty("broadcastAddress", transformIpAddress(heatpumpValues[93])); + setProperty("gateway", transformIpAddress(heatpumpValues[94])); + } + + private String getStateTranslation(String name, @Nullable Integer option) { + if (option == null) { + return ""; + } + + String translation = translationProvider + .getText("channel-type.luxtronikheatpump." + name + ".state.option." + option); + return translation == null ? "" : translation; + } + + private void setProperty(String name, String value) { + handler.updateProperty(name, value); + } + + private String formatHours(@Nullable Integer value) { + String returnValue = ""; + + if (value == null) { + return returnValue; + } + + int intVal = value; + + returnValue += String.format("%02d:", intVal / 3600); + intVal %= 3600; + returnValue += String.format("%02d:", intVal / 60); + intVal %= 60; + returnValue += String.format("%02d", intVal); + return returnValue; + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/HeatpumpConnector.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/HeatpumpConnector.java new file mode 100644 index 00000000000..a3ed82e6433 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/HeatpumpConnector.java @@ -0,0 +1,208 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.net.UnknownHostException; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link HeatpumpConnector} reads / writes internal states of a Heat pump with Luxtronik control. + * + * Based on HeatpumpConnector class of novelanheatpump binding + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class HeatpumpConnector { + + private static final int SOCKET_PARAM_WRITE_PARAMS = 3002; + private static final int SOCKET_PARAM_READ_PARAMS = 3003; + private static final int SOCKET_PARAM_READ_VALUES = 3004; + private static final int SOCKET_PARAM_READ_VISIBILITIES = 3005; + + private final Logger logger = LoggerFactory.getLogger(HeatpumpConnector.class); + + private String serverIp; + private int serverPort; + private Integer[] heatpumpValues = new Integer[0]; + private Integer[] heatpumpParams = new Integer[0]; + private Integer[] heatpumpVisibilities = new Integer[0]; + + public HeatpumpConnector(String serverIp, int serverPort) { + this.serverIp = serverIp; + this.serverPort = serverPort; + } + + /** + * reads all values from the heatpump via network + * + * @throws UnknownHostException indicate that the IP address of a host could not be determined. + * @throws IOException indicate that no data can be read from the heat pump + */ + public void read() throws UnknownHostException, IOException { + try (Socket sock = new Socket(serverIp, serverPort)) { + InputStream in = sock.getInputStream(); + OutputStream out = sock.getOutputStream(); + DataInputStream datain = new DataInputStream(in); + DataOutputStream dataout = new DataOutputStream(out); + + heatpumpValues = readInt(datain, dataout, SOCKET_PARAM_READ_VALUES); + + // workaround for thermal energies + // the thermal energies can be unreasonably high in some cases, probably due to a sign bug in the firmware + // trying to correct this issue here + for (int i = 151; i <= 154; i++) { + if (heatpumpValues[i] >= 214748364) { + heatpumpValues[i] -= 214748364; + } + } + + heatpumpParams = readInt(datain, dataout, SOCKET_PARAM_READ_PARAMS); + heatpumpVisibilities = readInt(datain, dataout, SOCKET_PARAM_READ_VISIBILITIES); + + datain.close(); + dataout.close(); + } + } + + /** + * read the parameters of the heat pump + */ + public Integer[] getParams() { + return heatpumpParams; + } + + /** + * set a parameter of the heat pump + * + * @param param + * @param value + * @throws IOException indicate that no data can be sent to the heat pump + */ + public boolean setParam(int param, int value) throws IOException { + try (Socket sock = new Socket(serverIp, serverPort)) { + InputStream in = sock.getInputStream(); + OutputStream out = sock.getOutputStream(); + DataInputStream datain = new DataInputStream(in); + DataOutputStream dataout = new DataOutputStream(out); + + while (datain.available() > 0) { + datain.readByte(); + } + + // write command, param and value to heatpump socket + dataout.writeInt(SOCKET_PARAM_WRITE_PARAMS); + dataout.writeInt(param); + dataout.writeInt(value); + dataout.flush(); + + // first integer on socket output should represent the command + int cmd = datain.readInt(); + datain.readInt(); + + datain.close(); + dataout.close(); + + if (cmd != SOCKET_PARAM_WRITE_PARAMS) { + logger.debug("Couldn't write parameter {} with value {} to heat pump.", param, value); + return false; + } else { + logger.debug("Parameter {} with value {} successfully written to heat pump.", param, value); + return true; + } + } + } + + /** + * Returns the internal states of the heat pump + * + * @return a array with all internal data of the heat pump + */ + public Integer[] getValues() { + return heatpumpValues; + } + + /** + * Returns the internal visibilities of the heat pump + * + * @return a array with all internal visibilities of the heat pump + */ + public Integer[] getVisibilities() { + return heatpumpVisibilities; + } + + /** + * Reads all available values for the given parameter from socket + * + * @param datain data input stream of socket connection + * @param dataout data output stream of socket connection + * @param parameter int command to read from socket + * @return an array with all values returned from heat pump socket + * @throws IOException indicate that no data can be read from the heat pump + */ + private Integer[] readInt(DataInputStream datain, DataOutputStream dataout, int parameter) throws IOException { + Integer[] result = null; + while (datain.available() > 0) { + datain.readByte(); + } + + // to receive values we first need to write the command followed by four 0 byte values to the socket + dataout.writeInt(parameter); + dataout.writeInt(0); + dataout.flush(); + + // the first integer received from socket should match the written command + if (datain.readInt() != parameter) { + return new Integer[0]; + } + + if (parameter == SOCKET_PARAM_READ_VALUES) { + // when reading values the next integer represents some kind of status + datain.readInt(); + } + + // the next integer value should define the number of values that are following + // Currently the list or parameters is the longest list and contains around 1050 values + // To avoid possible (memory) problems in case the returned number would be unexpected high we limit it to 2000 + int arraylength = Integer.min(datain.readInt(), 2000); + + logger.debug("Found {} values for {}", arraylength, parameter); + + result = new Integer[arraylength]; + + // Note: the visibility params are returned as single byte values + // probably as the are used as boolean values (0/1) only + if (parameter == SOCKET_PARAM_READ_VISIBILITIES) { + byte[] data = datain.readNBytes(arraylength); + for (int i = 0; i < data.length; i++) { + result[i] = (int) data[i]; + } + return result; + } + + for (int i = 0; i < arraylength; i++) { + result[i] = datain.readInt(); + } + + return result; + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpBindingConstants.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpBindingConstants.java new file mode 100644 index 00000000000..d9e9286d03b --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpBindingConstants.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.thing.ThingTypeUID; + +/** + * The {@link LuxtronikHeatpumpBindingConstants} class defines common constants, which are + * used across the whole binding. + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class LuxtronikHeatpumpBindingConstants { + + public static final String BINDING_ID = "luxtronikheatpump"; + + public static final ThingTypeUID THING_TYPE_HEATPUMP = new ThingTypeUID(BINDING_ID, "heatpump"); +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpConfiguration.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpConfiguration.java new file mode 100644 index 00000000000..8d00ca0b8fb --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpConfiguration.java @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * The {@link LuxtronikHeatpumpConfiguration} class contains fields mapping thing configuration parameters. + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class LuxtronikHeatpumpConfiguration { + + public String ipAddress = ""; + public int port = 8889; + public int refresh = 60000; + public boolean showAllChannels = false; + + public boolean isValid() { + return !ipAddress.isEmpty() && port > 0 && refresh > 0; + } + + @Override + public String toString() { + return new StringBuilder().append("[IP=").append(ipAddress).append(",port=").append(port).append(",refresh=") + .append(refresh).append(",showAllChannels=").append(showAllChannels).append("]").toString(); + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandler.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandler.java new file mode 100644 index 00000000000..281d5920c31 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandler.java @@ -0,0 +1,335 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import javax.measure.Unit; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.luxtronikheatpump.internal.enums.HeatpumpChannel; +import org.openhab.binding.luxtronikheatpump.internal.enums.HeatpumpCoolingOperationMode; +import org.openhab.binding.luxtronikheatpump.internal.enums.HeatpumpOperationMode; +import org.openhab.binding.luxtronikheatpump.internal.exceptions.InvalidChannelException; +import org.openhab.binding.luxtronikheatpump.internal.exceptions.InvalidOperationModeException; +import org.openhab.core.config.core.Configuration; +import org.openhab.core.library.types.DecimalType; +import org.openhab.core.library.types.OnOffType; +import org.openhab.core.library.types.QuantityType; +import org.openhab.core.thing.Channel; +import org.openhab.core.thing.ChannelUID; +import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingStatus; +import org.openhab.core.thing.ThingStatusDetail; +import org.openhab.core.thing.binding.BaseThingHandler; +import org.openhab.core.thing.binding.ThingHandlerCallback; +import org.openhab.core.thing.binding.builder.ThingBuilder; +import org.openhab.core.thing.type.ChannelTypeUID; +import org.openhab.core.types.Command; +import org.openhab.core.types.RefreshType; +import org.openhab.core.types.State; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link LuxtronikHeatpumpHandler} is responsible for handling commands, which are + * sent to one of the channels. + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class LuxtronikHeatpumpHandler extends BaseThingHandler { + + private final Logger logger = LoggerFactory.getLogger(LuxtronikHeatpumpHandler.class); + private final Set> scheduledFutures = new HashSet<>(); + private static final int RETRY_INTERVAL_SEC = 60; + private boolean tiggerChannelUpdate = false; + private final LuxtronikTranslationProvider translationProvider; + private LuxtronikHeatpumpConfiguration config; + + public LuxtronikHeatpumpHandler(Thing thing, LuxtronikTranslationProvider translationProvider) { + super(thing); + this.translationProvider = translationProvider; + config = new LuxtronikHeatpumpConfiguration(); + } + + @Override + public void updateState(String channelID, State state) { + super.updateState(channelID, state); + } + + @Override + public void updateProperty(String name, String value) { + super.updateProperty(name, value); + } + + public void setStatusConnectionError() { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, + "couldn't establish network connection [host '" + config.ipAddress + "']"); + } + + public void setStatusOnline() { + updateStatus(ThingStatus.ONLINE); + } + + @Override + public void handleCommand(ChannelUID channelUID, Command command) { + String channelId = channelUID.getIdWithoutGroup(); + logger.debug("Handle command '{}' for channel {}", command, channelId); + if (command == RefreshType.REFRESH) { + // ignore resresh command as channels will be updated automatically + return; + } + + HeatpumpChannel channel; + + try { + channel = HeatpumpChannel.fromString(channelId); + } catch (InvalidChannelException e) { + logger.debug("Channel '{}' could not be found for thing {}", channelId, thing.getUID()); + return; + } + + if (!channel.isWritable()) { + logger.debug("Channel {} is a read-only channel and cannot handle command '{}'", channelId, command); + return; + } + + if (command instanceof QuantityType) { + QuantityType value = (QuantityType) command; + + Unit unit = channel.getUnit(); + if (unit != null) { + value = value.toUnit(unit); + } + + command = new DecimalType(value.floatValue()); + } + + if (command instanceof OnOffType) { + command = ((OnOffType) command) == OnOffType.ON ? new DecimalType(1) : DecimalType.ZERO; + } + + if (!(command instanceof DecimalType)) { + logger.warn("Heatpump operation for item {} must be from type: {}. Received {}", channel.getCommand(), + DecimalType.class.getSimpleName(), command.getClass()); + return; + } + + Integer param = channel.getChannelId(); + Integer value = null; + + switch (channel) { + case CHANNEL_EINST_BWTDI_AKT_MO: + case CHANNEL_EINST_BWTDI_AKT_DI: + case CHANNEL_EINST_BWTDI_AKT_MI: + case CHANNEL_EINST_BWTDI_AKT_DO: + case CHANNEL_EINST_BWTDI_AKT_FR: + case CHANNEL_EINST_BWTDI_AKT_SA: + case CHANNEL_EINST_BWTDI_AKT_SO: + case CHANNEL_EINST_BWTDI_AKT_AL: + value = ((DecimalType) command).intValue(); + break; + case CHANNEL_BA_HZ_AKT: + case CHANNEL_BA_BW_AKT: + value = ((DecimalType) command).intValue(); + try { + // validate the value is valid + HeatpumpOperationMode.fromValue(value); + } catch (InvalidOperationModeException e) { + logger.warn("Heatpump {} mode recevieved invalid value {}: {}", channel.getCommand(), value, + e.getMessage()); + return; + } + break; + case CHANNEL_EINST_WK_AKT: + case CHANNEL_EINST_BWS_AKT: + case CHANNEL_EINST_KUCFTL_AKT: + case CHANNEL_SOLLWERT_KUCFTL_AKT: + float temperature = ((DecimalType) command).floatValue(); + value = (int) (temperature * 10); + break; + case CHANNEL_EINST_BWSTYP_AKT: + value = ((DecimalType) command).intValue(); + try { + // validate the value is valid + HeatpumpCoolingOperationMode.fromValue(value); + } catch (InvalidOperationModeException e) { + logger.warn("Heatpump {} mode recevieved invalid value {}: {}", channel.getCommand(), value, + e.getMessage()); + return; + } + break; + case CHANNEL_EINST_KUHL_ZEIT_EIN_AKT: + case CHANNEL_EINST_KUHL_ZEIT_AUS_AKT: + float hours = ((DecimalType) command).floatValue(); + value = (int) (hours * 10); + break; + + default: + logger.debug("Received unknown channel {}", channelId); + break; + } + + if (param != null && value != null) { + if (sendParamToHeatpump(param, value)) { + logger.debug("Heat pump mode {} set to {}.", channel.getCommand(), value); + } else { + logger.warn("Failed setting heat pump mode {} to {}", channel.getCommand(), value); + } + } else { + logger.warn("No valid value given for Heatpump operation {}", channel.getCommand()); + } + } + + @Override + public void initialize() { + config = getConfigAs(LuxtronikHeatpumpConfiguration.class); + + if (!config.isValid()) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, + "At least one mandatory configuration field is empty"); + return; + } + + updateStatus(ThingStatus.UNKNOWN); + + synchronized (scheduledFutures) { + ScheduledFuture future = scheduler.scheduleWithFixedDelay(this::internalInitialize, 0, + RETRY_INTERVAL_SEC, TimeUnit.SECONDS); + scheduledFutures.add(future); + } + } + + private void internalInitialize() { + // connect to heatpump and check if values can be fetched + HeatpumpConnector connector = new HeatpumpConnector(config.ipAddress, config.port); + + try { + connector.read(); + } catch (IOException e) { + setStatusConnectionError(); + return; + } + + // stop trying to establish a connection for initializing the thing once it was established + stopJobs(); + + // When thing is initialized the first time or and update was triggered, set the available channels + if (thing.getProperties().isEmpty() || tiggerChannelUpdate) { + updateChannels(connector); + } + + setStatusOnline(); + restartJobs(); + } + + @Override + protected void updateConfiguration(Configuration configuration) { + tiggerChannelUpdate = true; + super.updateConfiguration(configuration); + } + + @Override + public void dispose() { + stopJobs(); + } + + private void updateChannels(HeatpumpConnector connector) { + Integer[] visibilityValues = connector.getVisibilities(); + Integer[] heatpumpValues = connector.getValues(); + Integer[] heatpumpParams = connector.getParams(); + + logger.debug("Updating available channels for thing {}", thing.getUID()); + + final ThingHandlerCallback callback = getCallback(); + if (callback == null) { + logger.debug("ThingHandlerCallback is null. Skipping migration of last_update channel."); + return; + } + + ThingBuilder thingBuilder = editThing(); + List channelList = new ArrayList<>(); + + // clear channel list + thingBuilder.withoutChannels(thing.getChannels()); + + // create list with available channels + for (HeatpumpChannel channel : HeatpumpChannel.values()) { + Integer channelId = channel.getChannelId(); + int length = channel.isWritable() ? heatpumpParams.length : heatpumpValues.length; + ChannelUID channelUID = new ChannelUID(thing.getUID(), channel.getCommand()); + ChannelTypeUID channelTypeUID = new ChannelTypeUID(LuxtronikHeatpumpBindingConstants.BINDING_ID, + channel.getCommand()); + if ((channelId != null && length <= channelId) + || (config.showAllChannels == Boolean.FALSE && !channel.isVisible(visibilityValues))) { + logger.debug("Hiding channel {}", channel.getCommand()); + } else { + channelList.add(callback.createChannelBuilder(channelUID, channelTypeUID).build()); + } + } + + thingBuilder.withChannels(channelList); + + updateThing(thingBuilder.build()); + } + + private void restartJobs() { + stopJobs(); + + synchronized (scheduledFutures) { + if (getThing().getStatus() == ThingStatus.ONLINE) { + // Repeat channel update job every configured seconds + Runnable channelUpdaterJob = new ChannelUpdaterJob(this, translationProvider); + ScheduledFuture future = scheduler.scheduleWithFixedDelay(channelUpdaterJob, 0, config.refresh, + TimeUnit.SECONDS); + scheduledFutures.add(future); + } + } + } + + private void stopJobs() { + synchronized (scheduledFutures) { + for (ScheduledFuture future : scheduledFutures) { + if (!future.isDone()) { + future.cancel(true); + } + } + scheduledFutures.clear(); + } + } + + /** + * Set a parameter on the Luxtronik heatpump. + * + * @param param + * @param value + */ + private boolean sendParamToHeatpump(int param, int value) { + HeatpumpConnector connector = new HeatpumpConnector(config.ipAddress, config.port); + + try { + return connector.setParam(param, value); + } catch (IOException e) { + setStatusConnectionError(); + } + + return false; + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandlerFactory.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandlerFactory.java new file mode 100644 index 00000000000..1cbf8118a68 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikHeatpumpHandlerFactory.java @@ -0,0 +1,69 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal; + +import static org.openhab.binding.luxtronikheatpump.internal.LuxtronikHeatpumpBindingConstants.*; + +import java.util.Set; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.i18n.LocaleProvider; +import org.openhab.core.i18n.TranslationProvider; +import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingTypeUID; +import org.openhab.core.thing.binding.BaseThingHandlerFactory; +import org.openhab.core.thing.binding.ThingHandler; +import org.openhab.core.thing.binding.ThingHandlerFactory; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * The {@link LuxtronikHeatpumpHandlerFactory} is responsible for creating things and thing + * handlers. + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +@Component(configurationPid = "binding.luxtronikheatpump", service = ThingHandlerFactory.class) +public class LuxtronikHeatpumpHandlerFactory extends BaseThingHandlerFactory { + + private static final Set SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_HEATPUMP); + private final LuxtronikTranslationProvider translationProvider; + + @Activate + public LuxtronikHeatpumpHandlerFactory(final @Reference LocaleProvider localeProvider, + final @Reference TranslationProvider i18nProvider, ComponentContext componentContext) { + super.activate(componentContext); + this.translationProvider = new LuxtronikTranslationProvider(getBundleContext().getBundle(), i18nProvider, + localeProvider); + } + + @Override + public boolean supportsThingType(ThingTypeUID thingTypeUID) { + return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID); + } + + @Override + protected @Nullable ThingHandler createHandler(Thing thing) { + ThingTypeUID thingTypeUID = thing.getThingTypeUID(); + + if (THING_TYPE_HEATPUMP.equals(thingTypeUID)) { + return new LuxtronikHeatpumpHandler(thing, translationProvider); + } + + return null; + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikTranslationProvider.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikTranslationProvider.java new file mode 100644 index 00000000000..a62d7d16071 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/LuxtronikTranslationProvider.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal; + +import java.util.Locale; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.i18n.LocaleProvider; +import org.openhab.core.i18n.TranslationProvider; +import org.osgi.framework.Bundle; + +/** + * {@link LuxtronikTranslationProvider} provides i18n message lookup + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class LuxtronikTranslationProvider { + + private final Bundle bundle; + private final TranslationProvider i18nProvider; + private final LocaleProvider localeProvider; + + public LuxtronikTranslationProvider(Bundle bundle, TranslationProvider i18nProvider, + LocaleProvider localeProvider) { + this.bundle = bundle; + this.i18nProvider = i18nProvider; + this.localeProvider = localeProvider; + } + + public @Nullable String getText(String key, @Nullable Object... arguments) { + try { + Locale locale = localeProvider.getLocale(); + return i18nProvider.getText(bundle, key, getDefaultText(key), locale, arguments); + } catch (IllegalArgumentException e) { + return "Can't to load message for key " + key; + } + } + + public @Nullable String getDefaultText(String key) { + return i18nProvider.getText(bundle, key, key, Locale.ENGLISH); + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpChannel.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpChannel.java new file mode 100644 index 00000000000..440499b49d6 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpChannel.java @@ -0,0 +1,1385 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal.enums; + +import javax.measure.Unit; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.luxtronikheatpump.internal.exceptions.InvalidChannelException; +import org.openhab.core.items.Item; +import org.openhab.core.library.items.DateTimeItem; +import org.openhab.core.library.items.NumberItem; +import org.openhab.core.library.items.StringItem; +import org.openhab.core.library.items.SwitchItem; +import org.openhab.core.library.unit.SIUnits; +import org.openhab.core.library.unit.Units; + +/** + * Represents all valid channels which could be processed by this binding + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public enum HeatpumpChannel { + + // The constant names are currently based on the variable names used in the heat pumps internal JAVA applet + // for possible values see https://www.loxwiki.eu/display/LOX/Java+Webinterface + // or https://github.com/Bouni/Home-Assistant-Luxtronik/blob/master/data.txt + + /** + * Flow temperature heating circuit + * (original: Vorlauftemperatur Heizkreis) + */ + CHANNEL_TEMPERATUR_TVL(10, "temperatureHeatingCircuitFlow", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_VORLAUF), + + /** + * Return temperature heating circuit + * (original: Rücklauftemperatur Heizkreis) + */ + CHANNEL_TEMPERATUR_TRL(11, "temperatureHeatingCircuitReturn", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_RUCKLAUF), + + /** + * Return set point heating circuit + * (original: Rücklauf-Soll Heizkreis) + */ + CHANNEL_SOLLWERT_TRL_HZ(12, "temperatureHeatingCircuitReturnTarget", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_RL_SOLL), + + /** + * Return temperature in buffer tank + * (original: Rücklauftemperatur im Trennspeicher) + */ + CHANNEL_TEMPERATUR_TRL_EXT(13, "temperatureBufferTankReturn", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_RUECKLEXT), + + /** + * Hot gas temperature + * (original: Heißgastemperatur) + */ + CHANNEL_TEMPERATUR_THG(14, "temperatureHotGas", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_HEISSGAS), + + /** + * Outside temperature + * (original: Außentemperatur) + */ + CHANNEL_TEMPERATUR_TA(15, "temperatureOutside", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_AUSSENT), + + /** + * Average temperature outside over 24 h (heating limit function) + * (original: Durchschnittstemperatur Außen über 24 h (Funktion Heizgrenze)) + */ + CHANNEL_MITTELTEMPERATUR(16, "temperatureOutsideMean", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_AUSSENT), + + /** + * Hot water actual temperature + * (original: Warmwasser Ist-Temperatur) + */ + CHANNEL_TEMPERATUR_TBW(17, "temperatureHotWater", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_BW_IST), + + /** + * Hot water target temperature + * (original: Warmwasser Soll-Temperatur) + */ + // Not needed as it duplicates writable param (2) + // CHANNEL_EINST_BWS_AKT(18, "temperatureHotWaterTarget", NumberItem.class, SIUnits.CELSIUS, false, null), + + /** + * Heat source inlet temperature + * (original: Wärmequellen-Eintrittstemperatur) + */ + CHANNEL_TEMPERATUR_TWE(19, "temperatureHeatSourceInlet", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_WQ_EIN), + + /** + * Heat source outlet temperature + * (original: Wärmequellen-Austrittstemperatur) + */ + CHANNEL_TEMPERATUR_TWA(20, "temperatureHeatSourceOutlet", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_WQ_EIN), + + /** + * Mixing circuit 1 Flow temperature + * (original: Mischkreis 1 Vorlauftemperatur) + */ + CHANNEL_TEMPERATUR_TFB1(21, "temperatureMixingCircuit1Flow", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_MK1_VORLAUF), + + /** + * Mixing circuit 1 Flow target temperature + * (original: Mischkreis 1 Vorlauf-Soll-Temperatur) + */ + CHANNEL_SOLLWERT_TVL_MK1(22, "temperatureMixingCircuit1FlowTarget", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_MK1VL_SOLL), + + /** + * Room temperature room station 1 + * (original: Raumtemperatur Raumstation 1) + */ + CHANNEL_TEMPERATUR_RFV(23, "temperatureRoomStation", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_RAUMSTATION), + + /** + * Mixing circuit 2 Flow temperature + * (original: Mischkreis 2 Vorlauftemperatur) + */ + CHANNEL_TEMPERATUR_TFB2(24, "temperatureMixingCircuit2Flow", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_MK2_VORLAUF), + + /** + * Mixing circuit 2 Flow target temperature + * (original: Mischkreis 2 Vorlauf-Soll-Temperatur) + */ + CHANNEL_SOLLWERT_TVL_MK2(25, "temperatureMixingCircuit2FlowTarget", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_MK2VL_SOLL), + + /** + * Solar collector sensor + * (original: Fühler Solarkollektor) + */ + CHANNEL_TEMPERATUR_TSK(26, "temperatureSolarCollector", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_SOLARKOLL), + + /** + * Solar tank sensor + * (original: Fühler Solarspeicher) + */ + CHANNEL_TEMPERATUR_TSS(27, "temperatureSolarTank", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_SOLARSP), + + /** + * Sensor external energy source + * (original: Fühler externe Energiequelle) + */ + CHANNEL_TEMPERATUR_TEE(28, "temperatureExternalEnergySource", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_EXT_ENERG), + + /** + * Input "Defrost end, brine pressure, flow rate" + * (original: Eingang "Abtauende, Soledruck, Durchfluss") + */ + CHANNEL_ASDIN(29, "inputASD", SwitchItem.class, null, false, HeatpumpVisibility.IN_ASD), + + /** + * Input "Domestic hot water thermostat" + * (original: Eingang "Brauchwarmwasserthermostat") + */ + CHANNEL_BWTIN(30, "inputHotWaterThermostat", SwitchItem.class, null, false, HeatpumpVisibility.IN_BWT), + + /** + * Input "EVU lock" + * (original: Eingang "EVU Sperre") + */ + CHANNEL_EVUIN(31, "inputUtilityLock", SwitchItem.class, null, false, HeatpumpVisibility.IN_EVU), + + /** + * Input "High pressure cooling circuit" + * (original: Eingang "Hochdruck Kältekreis") + */ + CHANNEL_HDIN(32, "inputHighPressureCoolingCircuit", SwitchItem.class, null, false, HeatpumpVisibility.IN_HD), + + /** + * Input "Motor protection OK" + * (original: Eingang "Motorschutz OK") + */ + CHANNEL_MOTIN(33, "inputMotorProtectionOK", SwitchItem.class, null, false, HeatpumpVisibility.IN_MOT), + + /** + * Input "Low pressure" + * (original: Eingang "Niederdruck") + */ + CHANNEL_NDIN(34, "inputLowPressure", SwitchItem.class, null, false, HeatpumpVisibility.IN_ND), + + /** + * Input "Monitoring contact for potentiostat" + * (original: Eingang "Überwachungskontakt für Potentiostat") + */ + CHANNEL_PEXIN(35, "inputPEX", SwitchItem.class, null, false, HeatpumpVisibility.IN_PEX), + + /** + * Input "Swimming pool thermostat" + * (original: Eingang "Schwimmbadthermostat") + */ + CHANNEL_SWTIN(36, "inputSwimmingPoolThermostat", SwitchItem.class, null, false, HeatpumpVisibility.IN_SWT), + + /** + * Output "Defrost valve" + * (original: Ausgang "Abtauventil") + */ + CHANNEL_AVOUT(37, "outputDefrostValve", SwitchItem.class, null, false, HeatpumpVisibility.OUT_ABTAUVENTIL), + + /** + * Output "Domestic hot water pump/changeover valve" + * (original: Ausgang "Brauchwasserpumpe/Umstellventil") + */ + CHANNEL_BUPOUT(38, "outputBUP", SwitchItem.class, null, false, HeatpumpVisibility.OUT_BUP), + + /** + * Output "Heating circulation pump" + * (original: Ausgang "Heizungsumwälzpumpe") + */ + CHANNEL_HUPOUT(39, "outputHeatingCirculationPump", SwitchItem.class, null, false, HeatpumpVisibility.OUT_HUP), + + /** + * Output "Mixing circuit 1 Open" + * (original: Ausgang "Mischkreis 1 Auf") + */ + CHANNEL_MA1OUT(40, "outputMixingCircuit1Open", SwitchItem.class, null, false, HeatpumpVisibility.OUT_MISCHER1AUF), + + /** + * Output "Mixing circuit 1 Closed" + * (original: Ausgang "Mischkreis 1 Zu") + */ + CHANNEL_MZ1OUT(41, "outputMixingCircuit1Closed", SwitchItem.class, null, false, HeatpumpVisibility.OUT_MISCHER1ZU), + + /** + * Output "Ventilation" + * (original: Ausgang "Ventilation (Lüftung)") + */ + CHANNEL_VENOUT(42, "outputVentilation", SwitchItem.class, null, false, HeatpumpVisibility.OUT_VENTILATION), + + /** + * Output "Brine pump/fan" + * (original: Ausgang "Solepumpe/Ventilator") + */ + CHANNEL_VBOOUT(43, "outputVBO", SwitchItem.class, null, false, null), + + /** + * Output "Compressor 1" + * (original: Ausgang "Verdichter 1") + */ + CHANNEL_VD1OUT(44, "outputCompressor1", SwitchItem.class, null, false, HeatpumpVisibility.OUT_VERDICHTER1), + + /** + * Output "Compressor 2" + * (original: Ausgang "Verdichter 2") + */ + CHANNEL_VD2OUT(45, "outputCompressor2", SwitchItem.class, null, false, HeatpumpVisibility.OUT_VERDICHTER2), + + /** + * Output "Circulation pump" + * (original: Ausgang "Zirkulationspumpe") + */ + CHANNEL_ZIPOUT(46, "outputCirculationPump", SwitchItem.class, null, false, HeatpumpVisibility.OUT_ZIP), + + /** + * Output "Auxiliary circulation pump" + * (original: Ausgang "Zusatzumwälzpumpe") + */ + CHANNEL_ZUPOUT(47, "outputZUP", SwitchItem.class, null, false, HeatpumpVisibility.OUT_ZUP), + + /** + * Output "Control signal additional heating" + * (original: Ausgang "Steuersignal Zusatzheizung v. Heizung") + */ + CHANNEL_ZW1OUT(48, "outputControlSignalAdditionalHeating", SwitchItem.class, null, false, + HeatpumpVisibility.OUT_ZWE1), + + /** + * Output "Control signal additional heating/fault signal" + * (original: Ausgang "Steuersignal Zusatzheizung/Störsignal") + */ + CHANNEL_ZW2SSTOUT(49, "outputFaultSignalAdditionalHeating", SwitchItem.class, null, false, + HeatpumpVisibility.OUT_ZWE2_SST), + + /** + * Output "Auxiliary heater 3" + * (original: Ausgang "Zusatzheizung 3") + */ + CHANNEL_ZW3SSTOUT(50, "outputAuxiliaryHeater3", SwitchItem.class, null, false, HeatpumpVisibility.OUT_ZWE3), + + /** + * Output "Pump mixing circuit 2" + * (original: Ausgang "Pumpe Mischkreis 2") + */ + CHANNEL_FP2OUT(51, "outputMixingCircuitPump2", SwitchItem.class, null, false, HeatpumpVisibility.OUT_FUP2), + + /** + * Output "Solar charge pump" + * (original: Ausgang "Solarladepumpe") + */ + CHANNEL_SLPOUT(52, "outputSolarChargePump", SwitchItem.class, null, false, HeatpumpVisibility.OUT_SLP), + + /** + * Output "Swimming pool pump" + * (original: Ausgang "Schwimmbadpumpe") + */ + CHANNEL_OUTPUT_SUP(53, "outputSwimmingPoolPump", SwitchItem.class, null, false, HeatpumpVisibility.OUT_SUP), + + /** + * Output "Mixing circuit 2 Closed" + * (original: Ausgang "Mischkreis 2 Zu") + */ + CHANNEL_MZ2OUT(54, "outputMixingCircuit2Closed", SwitchItem.class, null, false, HeatpumpVisibility.OUT_MISCHER2ZU), + + /** + * Output "Mixing circuit 2 Open" + * (original: Ausgang "Mischkreis 2 Auf") + */ + CHANNEL_MA2OUT(55, "outputMixingCircuit2Open", SwitchItem.class, null, false, HeatpumpVisibility.OUT_MISCHER2AUF), + + /** + * Operating hours compressor 1 + * (original: Betriebsstunden Verdichter 1) + */ + CHANNEL_ZAEHLER_BETRZEITVD1(56, "runtimeTotalCompressor1", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDVD1), + + /** + * Pulses compressor 1 + * (original: Impulse Verdichter 1) + */ + CHANNEL_ZAEHLER_BETRZEITIMPVD1(57, "pulsesCompressor1", NumberItem.class, null, false, + HeatpumpVisibility.BST_IMPVD1), + + /** + * Operating hours compressor 2 + * (original: Betriebsstunden Verdichter 2) + */ + CHANNEL_ZAEHLER_BETRZEITVD2(58, "runtimeTotalCompressor2", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDVD2), + + /** + * Pulses compressor 2 + * (original: Impulse Verdichter 2) + */ + CHANNEL_ZAEHLER_BETRZEITIMPVD2(59, "pulsesCompressor2", NumberItem.class, null, false, + HeatpumpVisibility.BST_IMPVD2), + + /** + * Operating hours Second heat generator 1 + * (original: Betriebsstunden Zweiter Wärmeerzeuger 1) + */ + CHANNEL_ZAEHLER_BETRZEITZWE1(60, "runtimeTotalSecondHeatGenerator1", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDZWE1), + + /** + * Operating hours Second heat generator 2 + * (original: Betriebsstunden Zweiter Wärmeerzeuger 2) + */ + CHANNEL_ZAEHLER_BETRZEITZWE2(61, "runtimeTotalSecondHeatGenerator2", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDZWE2), + + /** + * Operating hours Second heat generator 3 + * (original: Betriebsstunden Zweiter Wärmeerzeuger 3) + */ + CHANNEL_ZAEHLER_BETRZEITZWE3(62, "runtimeTotalSecondHeatGenerator3", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDZWE3), + + /** + * Operating hours heat pump + * (original: Betriebsstunden Wärmepumpe) + */ + CHANNEL_ZAEHLER_BETRZEITWP(63, "runtimeTotalHeatPump", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDWP), + + /** + * Operating hours heating + * (original: Betriebsstunden Heizung) + */ + CHANNEL_ZAEHLER_BETRZEITHZ(64, "runtimeTotalHeating", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDHZ), + + /** + * Operating hours hot water + * (original: Betriebsstunden Warmwasser) + */ + CHANNEL_ZAEHLER_BETRZEITBW(65, "runtimeTotalHotWater", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDBW), + + /** + * Operating hours cooling + * (original: Betriebsstunden Kühlung) + */ + CHANNEL_ZAEHLER_BETRZEITKUE(66, "runtimeTotalCooling", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDKUE), + + /** + * Heat pump running since + * (original: Wärmepumpe läuft seit) + */ + CHANNEL_TIME_WPEIN_AKT(67, "runtimeCurrentHeatPump", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_WP_SEIT), + + /** + * Second heat generator 1 running since + * (original: Zweiter Wärmeerzeuger 1 läuft seit) + */ + CHANNEL_TIME_ZWE1_AKT(68, "runtimeCurrentSecondHeatGenerator1", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_ZWE1_SEIT), + + /** + * Second heat generator 2 running since + * (original: Zweiter Wärmeerzeuger 2 läuft seit) + */ + CHANNEL_TIME_ZWE2_AKT(69, "runtimeCurrentSecondHeatGenerator2", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_ZWE2_SEIT), + + /** + * Mains on delay + * (original: Netzeinschaltverzögerung) + */ + CHANNEL_TIMER_EINSCHVERZ(70, "mainsOnDelay", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_NETZEINV), + + /** + * Switching cycle lock off + * (original: Schaltspielsperre Aus) + */ + CHANNEL_TIME_SSPAUS_AKT(71, "switchingCycleLockOff", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_SSP_ZEIT1), + + /** + * Switching cycle lock on + * (original: Schaltspielsperre Ein) + */ + CHANNEL_TIME_SSPEIN_AKT(72, "switchingCycleLockOn", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_SSP_ZEIT1), + + /** + * Compressor Idle time + * (original: Verdichter-Standzeit) + */ + CHANNEL_TIME_VDSTD_AKT(73, "compressorIdleTime", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_VD_STAND), + + /** + * Heating controller More time + * (original: Heizungsregler Mehr-Zeit) + */ + CHANNEL_TIME_HRM_AKT(74, "heatingControllerMoreTime", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_HRM_ZEIT), + + /** + * Heating controller Less time + * (original: Heizungsregler Weniger-Zeit) + */ + CHANNEL_TIME_HRW_AKT(75, "heatingControllerLessTime", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_HRW_ZEIT), + + /** + * Thermal disinfection running since + * (original: Thermische Desinfektion läuft seit) + */ + CHANNEL_TIME_LGS_AKT(76, "runtimeCurrentThermalDisinfection", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_TDI_SEIT), + + /** + * Hot water lock + * (original: Sperre Warmwasser) + */ + CHANNEL_TIME_SBW_AKT(77, "timeHotWaterLock", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_SPERRE_BW), + + // Channel 78 (Code_WP_akt_2) represents the heatpump type, will be handeled as property + + /** + * Bivalence stage + * (original: Bivalenzstufe) + */ + CHANNEL_BIV_STUFE_AKT(79, "bivalenceStage", NumberItem.class, null, false, null), + + /** + * Operating status + * (original: Betriebszustand) + */ + CHANNEL_WP_BZ_AKT(80, "operatingStatus", NumberItem.class, null, false, null), + + // channel 81 - 90 represents the firmware version, will be handeled as property + // channel 91 represents the IP address, will be handeled as property + // channel 92 represents the Subnet mask, will be handeled as property + // channel 93 represents the Broadcast address, will be handeled as property + // channel 94 represents the Gateway, will be handeled as property + + /** + * Timestamp error X in memory + * (original: Zeitstempel Fehler X im Speicher) + */ + CHANNEL_HEATPUMP_ERROR_TIME0(95, "errorTime0", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_ERROR_TIME1(96, "errorTime1", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_ERROR_TIME2(97, "errorTime2", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_ERROR_TIME3(98, "errorTime3", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_ERROR_TIME4(99, "errorTime4", DateTimeItem.class, Units.SECOND, false, null), + + /** + * Error code Error X in memory + * (original: Fehlercode Fehler X im Speicher) + */ + CHANNEL_HEATPUMP_ERROR_NR0(100, "errorCode0", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_ERROR_NR1(101, "errorCode1", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_ERROR_NR2(102, "errorCode2", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_ERROR_NR3(103, "errorCode3", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_ERROR_NR4(104, "errorCode4", NumberItem.class, null, false, null), + + /** + * Number of errors in memory + * (original: Anzahl der Fehler im Speicher) + */ + CHANNEL_ANZAHLFEHLERINSPEICHER(105, "errorCountInMemory", NumberItem.class, null, false, null), + + /** + * Reason shutdown X in memory + * (original: Grund Abschaltung X im Speicher) + */ + CHANNEL_HEATPUMP_SWITCHOFF_FILE_NR0(106, "shutdownReason0", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_NR1(107, "shutdownReason1", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_NR2(108, "shutdownReason2", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_NR3(109, "shutdownReason3", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_NR4(110, "shutdownReason4", NumberItem.class, null, false, null), + + /** + * Timestamp shutdown X in memory + * (original: Zeitstempel Abschaltung X im Speicher) + */ + CHANNEL_HEATPUMP_SWITCHOFF_FILE_TIME0(111, "shutdownTime0", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_TIME1(112, "shutdownTime1", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_TIME2(113, "shutdownTime2", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_TIME3(114, "shutdownTime3", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_HEATPUMP_SWITCHOFF_FILE_TIME4(115, "shutdownTime4", DateTimeItem.class, Units.SECOND, false, null), + + /** + * Comfort board installed + * (original: Comfort Platine installiert) + */ + CHANNEL_HEATPUMP_COMFORT_EXISTS(116, "comfortBoardInstalled", SwitchItem.class, null, false, null), + + /** + * Status + * (original: Status) + */ + CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEILE1(117, "menuStateLine1", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEILE2(118, "menuStateLine2", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEILE3(119, "menuStateLine3", NumberItem.class, null, false, null), + CHANNEL_HEATPUMP_HAUPTMENUSTATUS_ZEIT(120, "menuStateTime", NumberItem.class, Units.SECOND, false, null), + + /** + * Stage bakeout program + * (original: Stufe Ausheizprogramm) + */ + CHANNEL_HAUPTMENUAHP_STUFE(121, "bakeoutProgramStage", NumberItem.class, null, false, + HeatpumpVisibility.SERVICE_AUSHEIZ), + + /** + * Temperature bakeout program + * (original: Temperatur Ausheizprogramm) + */ + CHANNEL_HAUPTMENUAHP_TEMP(122, "bakeoutProgramTemperature", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.SERVICE_AUSHEIZ), + + /** + * Runtime bakeout program + * (original: Laufzeit Ausheizprogramm) + */ + CHANNEL_HAUPTMENUAHP_ZEIT(123, "bakeoutProgramTime", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.SERVICE_AUSHEIZ), + + /** + * DHW active/inactive icon + * (original: Brauchwasser aktiv/inaktiv Symbol) + */ + CHANNEL_SH_BWW(124, "iconHotWater", SwitchItem.class, null, false, HeatpumpVisibility.BRAUWASSER), + + /** + * Heater icon + * (original: Heizung Symbol) + */ + CHANNEL_SH_HZ(125, "iconHeater", NumberItem.class, null, false, HeatpumpVisibility.HEIZUNG), + + /** + * Mixing circuit 1 icon + * (original: Mischkreis 1 Symbol) + */ + CHANNEL_SH_MK1(126, "iconMixingCircuit1", NumberItem.class, null, false, HeatpumpVisibility.MK1), + + /** + * Mixing circuit 2 icon + * (original: Mischkreis 2 Symbol) + */ + CHANNEL_SH_MK2(127, "iconMixingCircuit2", NumberItem.class, null, false, HeatpumpVisibility.MK2), + + /** + * Short program setting + * (original: Einstellung Kurzprogramm) + */ + CHANNEL_EINST_KURZPROGRAMM(128, "shortProgramSetting", NumberItem.class, null, false, null), + + /** + * Status Slave X + * (original: Status Slave X) + */ + CHANNEL_STATUSSLAVE1(129, "statusSlave1", NumberItem.class, null, false, null), + CHANNEL_STATUSSLAVE2(130, "statusSlave2", NumberItem.class, null, false, null), + CHANNEL_STATUSSLAVE3(131, "statusSlave3", NumberItem.class, null, false, null), + CHANNEL_STATUSSLAVE4(132, "statusSlave4", NumberItem.class, null, false, null), + CHANNEL_STATUSSLAVE5(133, "statusSlave5", NumberItem.class, null, false, null), + + /** + * Current time of the heat pump + * (original: Aktuelle Zeit der Wärmepumpe) + */ + CHANNEL_AKTUELLETIMESTAMP(134, "currentTimestamp", DateTimeItem.class, Units.SECOND, false, + HeatpumpVisibility.SERVICE_DATUMUHRZEIT), + + /** + * Mixing circuit 3 icon + * (original: Mischkreis 3 Symbol) + */ + CHANNEL_SH_MK3(135, "iconMixingCircuit3", NumberItem.class, null, false, HeatpumpVisibility.MK3), + + /** + * Mixing circuit 3 Flow set temperature + * (original: Mischkreis 3 Vorlauf-Soll-Temperatur) + */ + CHANNEL_SOLLWERT_TVL_MK3(136, "temperatureMixingCircuit3FlowTarget", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_MK3VL_SOLL), + + /** + * Mixing circuit 3 Flow temperature + * (original: Mischkreis 3 Vorlauftemperatur) + */ + CHANNEL_TEMPERATUR_TFB3(137, "temperatureMixingCircuit3Flow", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_MK3_VORLAUF), + + /** + * Output "Mixing circuit 3 close" + * (original: Ausgang "Mischkreis 3 Zu") + */ + CHANNEL_MZ3OUT(138, "outputMixingCircuit3Close", SwitchItem.class, null, false, HeatpumpVisibility.OUT_MISCHER3ZU), + + /** + * Output "Mixing circuit 3 open" + * (original: Ausgang "Mischkreis 3 Auf") + */ + CHANNEL_MA3OUT(139, "outputMixingCircuit3Open", SwitchItem.class, null, false, HeatpumpVisibility.OUT_MISCHER3AUF), + + /** + * Pump mixing circuit 3 + * (original: Pumpe Mischkreis 3) + */ + CHANNEL_FP3OUT(140, "outputMixingCircuitPump3", SwitchItem.class, null, false, HeatpumpVisibility.OUT_FUP3), + + /** + * Time until defrost + * (original: Zeit bis Abtauen) + */ + CHANNEL_TIME_ABTIN(141, "timeUntilDefrost", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_ABTAUIN), + + /** + * Room temperature room station 2 + * (original: Raumtemperatur Raumstation 2) + */ + CHANNEL_TEMPERATUR_RFV2(142, "temperatureRoomStation2", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_RAUMSTATION2), + + /** + * Room temperature room station 3 + * (original: Raumtemperatur Raumstation 3) + */ + CHANNEL_TEMPERATUR_RFV3(143, "temperatureRoomStation3", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMP_RAUMSTATION3), + + /** + * Time switch swimming pool icon + * (original: Schaltuhr Schwimmbad Symbol) + */ + CHANNEL_SH_SW(144, "iconTimeSwitchSwimmingPool", NumberItem.class, null, false, HeatpumpVisibility.SCHWIMMBAD), + + /** + * Swimming pool operating hours + * (original: Betriebsstunden Schwimmbad) + */ + CHANNEL_ZAEHLER_BETRZEITSW(145, "runtimeTotalSwimmingPool", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.BST_BSTDSW), + + /** + * Release cooling + * (original: Freigabe Kühlung) + */ + CHANNEL_FREIGABKUEHL(146, "coolingRelease", SwitchItem.class, null, false, HeatpumpVisibility.KUHLUNG), + + /** + * Analog input signal + * (original: Analoges Eingangssignal) + */ + CHANNEL_ANALOGIN(147, "inputAnalog", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.IN_ANALOGIN), + + // CHANNEL_SONDERZEICHEN(148, "SonderZeichen", NumberItem.class, null, false, null), + + /** + * Circulation pumps icon + * (original: Zirkulationspumpen Symbol) + */ + CHANNEL_SH_ZIP(149, "iconCirculationPump", NumberItem.class, null, false, null), + + // CHANNEL_WEBSRVPROGRAMMWERTEBEOBARTEN(150, "WebsrvProgrammWerteBeobarten", NumberItem.class, null, false, null), + + /** + * Heat meter heating + * (original: Wärmemengenzähler Heizung) + */ + CHANNEL_WMZ_HEIZUNG(151, "heatMeterHeating", NumberItem.class, Units.KILOWATT_HOUR, false, + HeatpumpVisibility.HEIZUNG), + + /** + * Heat meter domestic water + * (original: Wärmemengenzähler Brauchwasser) + */ + CHANNEL_WMZ_BRAUCHWASSER(152, "heatMeterHotWater", NumberItem.class, Units.KILOWATT_HOUR, false, + HeatpumpVisibility.BRAUWASSER), + + /** + * Heat meter swimming pool + * (original: Wärmemengenzähler Schwimmbad) + */ + CHANNEL_WMZ_SCHWIMMBAD(153, "heatMeterSwimmingPool", NumberItem.class, Units.KILOWATT_HOUR, false, + HeatpumpVisibility.SCHWIMMBAD), + + /** + * Total heat meter (since reset) + * (original: Wärmemengenzähler seit Reset) + */ + CHANNEL_WMZ_SEIT(154, "heatMeterTotalSinceReset", NumberItem.class, Units.KILOWATT_HOUR, false, null), + + /** + * Heat meter flow rate + * (original: Wärmemengenzähler Durchfluss) + */ + CHANNEL_WMZ_DURCHFLUSS(155, "heatMeterFlowRate", NumberItem.class, Units.LITRE_PER_MINUTE, false, null), + + /** + * Analog output 1 + * (original: Analog Ausgang 1) + */ + CHANNEL_ANALOGOUT1(156, "outputAnalog1", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.OUT_ANALOG_1), + + /** + * Analog output 2 + * (original: Analog Ausgang 2) + */ + CHANNEL_ANALOGOUT2(157, "outputAnalog2", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.OUT_ANALOG_2), + + /** + * Lock second compressor hot gas + * (original: Sperre zweiter Verdichter Heissgas) + */ + CHANNEL_TIME_HEISSGAS(158, "timeLockSecondHotGasCompressor", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.ABLAUFZ_HG_SPERRE), + + /** + * Supply air temperature + * (original: Zulufttemperatur) + */ + CHANNEL_TEMP_LUEFTUNG_ZULUFT(159, "temperatureSupplyAir", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMPERATUR_LUEFTUNG_ZULUFT), + + /** + * Exhaust air temperature + * (original: Ablufttemperatur) + */ + CHANNEL_TEMP_LUEFTUNG_ABLUFT(160, "temperatureExhaustAir", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.TEMPERATUR_LUEFTUNG_ABLUFT), + + /** + * Operating hours solar + * (original: Betriebstundenzähler Solar) + */ + CHANNEL_ZAEHLER_BETRZEITSOLAR(161, "runtimeTotalSolar", NumberItem.class, Units.SECOND, false, + HeatpumpVisibility.SOLAR), + + /** + * Analog output 3 + * (original: Analog Ausgang 3) + */ + CHANNEL_ANALOGOUT3(162, "outputAnalog3", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.OUT_ANALOG_3), + + /** + * Analog output 4 + * (original: Analog Ausgang 4) + */ + CHANNEL_ANALOGOUT4(163, "outputAnalog4", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.OUT_ANALOG_4), + + /** + * Supply air fan (defrost function) + * (original: Zuluft Ventilator (Abtaufunktion)) + */ + CHANNEL_OUT_VZU(164, "outputSupplyAirFan", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.OUT_VZU), + + /** + * Exhaust fan + * (original: Abluft Ventilator) + */ + CHANNEL_OUT_VAB(165, "outputExhaustFan", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.OUT_VAB), + + /** + * Output VSK + * (original: Ausgang VSK) + */ + CHANNEL_OUT_VSK(166, "outputVSK", SwitchItem.class, null, false, HeatpumpVisibility.OUT_VSK), + + /** + * Output FRH + * (original: Ausgang FRH) + */ + CHANNEL_OUT_FRH(167, "outputFRH", SwitchItem.class, null, false, HeatpumpVisibility.OUT_FRH), + + /** + * Analog input 2 + * (original: Analog Eingang 2) + */ + CHANNEL_ANALOGIN2(168, "inputAnalog2", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.IN_ANALOG_2), + + /** + * Analog input 3 + * (original: Analog Eingang 3) + */ + CHANNEL_ANALOGIN3(169, "inputAnalog3", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.IN_ANALOG_3), + + /** + * Input SAX + * (original: Eingang SAX) + */ + CHANNEL_SAXIN(170, "inputSAX", SwitchItem.class, null, false, HeatpumpVisibility.IN_SAX), + + /** + * Input SPL + * (original: Eingang SPL) + */ + CHANNEL_SPLIN(171, "inputSPL", SwitchItem.class, null, false, HeatpumpVisibility.IN_SPL), + + /** + * Ventilation board installed + * (original: Lüftungsplatine verbaut) + */ + CHANNEL_COMPACT_EXISTS(172, "ventilationBoardInstalled", SwitchItem.class, null, false, null), + + /** + * Flow rate heat source + * (original: Durchfluss Wärmequelle) + */ + CHANNEL_DURCHFLUSS_WQ(173, "flowRateHeatSource", NumberItem.class, Units.LITRE_PER_MINUTE, false, null), + + /** + * LIN BUS installed + * (original: LIN BUS verbaut) + */ + CHANNEL_LIN_EXISTS(174, "linBusInstalled", SwitchItem.class, null, false, null), + + /** + * Temperature suction evaporator + * (original: Temperatur Ansaug Verdampfer) + */ + CHANNEL_LIN_ANSAUG_VERDAMPFER(175, "temperatureSuctionEvaporator", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.LIN_ANSAUG_VERDAMPFER), + + /** + * Temperature suction compressor + * (original: Temperatur Ansaug Verdichter) + */ + CHANNEL_LIN_ANSAUG_VERDICHTER(176, "temperatureSuctionCompressor", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.LIN_ANSAUG_VERDICHTER), + + /** + * Temperature compressor heating + * (original: Temperatur Verdichter Heizung) + */ + CHANNEL_LIN_VDH(177, "temperatureCompressorHeating", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.LIN_VDH), + + /** + * Overheating + * (original: Überhitzung) + */ + CHANNEL_LIN_UH(178, "temperatureOverheating", NumberItem.class, Units.KELVIN, false, HeatpumpVisibility.LIN_UH), + + /** + * Overheating target + * (original: Überhitzung Soll) + */ + CHANNEL_LIN_UH_SOLL(179, "temperatureOverheatingTarget", NumberItem.class, Units.KELVIN, false, + HeatpumpVisibility.LIN_UH), + + /** + * High pressure + * (original: Hochdruck) + */ + CHANNEL_LIN_HD(180, "highPressure", NumberItem.class, Units.BAR, false, HeatpumpVisibility.LIN_DRUCK), + + /** + * Low pressure + * (original: Niederdruck) + */ + CHANNEL_LIN_ND(181, "lowPressure", NumberItem.class, Units.BAR, false, HeatpumpVisibility.LIN_DRUCK), + + /** + * Output compressor heating + * (original: Ausgang Verdichterheizung) + */ + CHANNEL_LIN_VDH_OUT(182, "outputCompressorHeating", SwitchItem.class, null, false, null), + + /** + * Control signal circulating pump + * (original: Steuersignal Umwälzpumpe) + */ + CHANNEL_HZIO_PWM(183, "controlSignalCirculatingPump", NumberItem.class, Units.PERCENT, false, null), + + /** + * Fan speed + * (original: Ventilator Drehzahl) + */ + CHANNEL_HZIO_VEN(184, "fanSpeed", NumberItem.class, null, false, null), + + /** + * EVU 2 + * (original: EVU 2) + */ + // CHANNEL_HZIO_EVU2(185, "HZIO_EVU2", NumberItem.class, null, false, null), + + /** + * Safety tempearture limiter floor heating + * (original: Sicherheits-Tempeartur-Begrenzer Fussbodenheizung) + */ + CHANNEL_HZIO_STB(186, "temperatureSafetyLimitFloorHeating", SwitchItem.class, null, false, null), + + /** + * Power target value + * (original: Leistung Sollwert) + */ + CHANNEL_SEC_QH_SOLL(187, "powerTargetValue", NumberItem.class, Units.KILOWATT_HOUR, false, null), + + /** + * Power actual value + * (original: Leistung Istwert) + */ + CHANNEL_SEC_QH_IST(188, "powerActualValue", NumberItem.class, Units.KILOWATT_HOUR, false, null), + + /** + * Temperature flow set point + * (original: Temperatur Vorlauf Soll) + */ + CHANNEL_SEC_TVL_SOLL(189, "temperatureFlowTarget", NumberItem.class, SIUnits.CELSIUS, false, null), + + /** + * Software version SEC Board + * (original: Software Stand SEC Board) + */ + // CHANNEL_SEC_SOFTWARE(190, "SEC_Software", NumberItem.class, null, false, null), + + /** + * SEC Board operating status + * (original: Betriebszustand SEC Board) + */ + CHANNEL_SEC_BZ(191, "operatingStatusSECBoard", NumberItem.class, null, false, HeatpumpVisibility.SEC), + + /** + * Four-way valve + * (original: Vierwegeventil) + */ + CHANNEL_SEC_VWV(192, "fourWayValve", NumberItem.class, null, false, HeatpumpVisibility.SEC), + + /** + * Compressor speed + * (original: Verdichterdrehzahl) + */ + CHANNEL_SEC_VD(193, "compressorSpeed", NumberItem.class, null, false, HeatpumpVisibility.SEC), + + /** + * Compressor temperature EVI (Enhanced Vapour Injection) + * (original: Verdichtertemperatur EVI) + */ + CHANNEL_SEC_VERDEVI(194, "temperatureCompressorEVI", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.SEC), + + /** + * Intake temperature EVI + * (original: Ansaugtemperatur EVI) + */ + CHANNEL_SEC_ANSEVI(195, "temperatureIntakeEVI", NumberItem.class, SIUnits.CELSIUS, false, HeatpumpVisibility.SEC), + + /** + * Overheating EVI + * (original: Überhitzung EVI) + */ + CHANNEL_SEC_UEH_EVI(196, "temperatureOverheatingEVI", NumberItem.class, Units.KELVIN, false, + HeatpumpVisibility.SEC), + + /** + * Overheating EVI target + * (original: Überhitzung EVI Sollwert) + */ + CHANNEL_SEC_UEH_EVI_S(197, "temperatureOverheatingTargetEVI", NumberItem.class, Units.KELVIN, false, + HeatpumpVisibility.SEC), + + /** + * Condensation temperature + * (original: Kondensationstemperatur) + */ + CHANNEL_SEC_KONDTEMP(198, "temperatureCondensation", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.SEC), + + /** + * Liquid temperature EEV (electronic expansion valve) + * (original: Flüssigtemperatur EEV (elektronisches Expansionsventil)) + */ + CHANNEL_SEC_FLUSSIGEX(199, "temperatureLiquidEEV", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.SEC), + + /** + * Hypothermia EEV + * (original: Unterkühlung EEV) + */ + CHANNEL_SEC_UK_EEV(200, "temperatureHypothermiaEEV", NumberItem.class, SIUnits.CELSIUS, false, + HeatpumpVisibility.SEC), + + /** + * Pressure EVI + * (original: Druck EVI) + */ + CHANNEL_SEC_EVI_DRUCK(201, "pressureEVI", NumberItem.class, Units.BAR, false, HeatpumpVisibility.SEC), + + /** + * Voltage inverter + * (original: Spannung Inverter) + */ + CHANNEL_SEC_U_INV(202, "voltageInverter", NumberItem.class, Units.VOLT, false, HeatpumpVisibility.SEC), + + /** + * Hot gas temperature sensor 2 + * (original: Temperarturfühler Heissgas 2) + */ + CHANNEL_TEMPERATUR_THG_2(203, "temperatureHotGas2", NumberItem.class, SIUnits.CELSIUS, false, null), + + /** + * Temperature sensor heat source inlet 2 + * (original: Temperaturfühler Wärmequelleneintritt 2) + */ + CHANNEL_TEMPERATUR_TWE_2(204, "temperatureHeatSourceInlet2", NumberItem.class, SIUnits.CELSIUS, false, null), + + /** + * Intake temperature evaporator 2 + * (original: Ansaugtemperatur Verdampfer 2) + */ + CHANNEL_LIN_ANSAUG_VERDAMPFER_2(205, "temperatureIntakeEvaporator2", NumberItem.class, SIUnits.CELSIUS, false, + null), + + /** + * Intake temperature compressor 2 + * (original: Ansaugtemperatur Verdichter 2) + */ + CHANNEL_LIN_ANSAUG_VERDICHTER_2(206, "temperatureIntakeCompressor2", NumberItem.class, SIUnits.CELSIUS, false, + null), + + /** + * Temperature compressor 2 heating + * (original: Temperatur Verdichter 2 Heizung) + */ + CHANNEL_LIN_VDH_2(207, "temperatureCompressor2Heating", NumberItem.class, SIUnits.CELSIUS, false, null), + + /** + * Overheating 2 + * (original: Überhitzung 2) + */ + CHANNEL_LIN_UH_2(208, "temperatureOverheating2", NumberItem.class, Units.KELVIN, false, HeatpumpVisibility.LIN_UH), + + /** + * Overheating target 2 + * (original: Überhitzung Soll 2) + */ + CHANNEL_LIN_UH_SOLL_2(209, "temperatureOverheatingTarget2", NumberItem.class, Units.KELVIN, false, + HeatpumpVisibility.LIN_UH), + + /** + * High pressure 2 + * (original: Hochdruck 2) + */ + CHANNEL_LIN_HD_2(210, "highPressure2", NumberItem.class, Units.BAR, false, HeatpumpVisibility.LIN_DRUCK), + + /** + * Low pressure 2 + * (original: Niederdruck 2) + */ + CHANNEL_LIN_ND_2(211, "lowPressure2", NumberItem.class, Units.BAR, false, HeatpumpVisibility.LIN_DRUCK), + + /** + * Input pressure switch high pressure 2 + * (original: Eingang Druckschalter Hochdruck 2) + */ + CHANNEL_HDIN_2(212, "inputSwitchHighPressure2", SwitchItem.class, null, false, HeatpumpVisibility.IN_HD), + + /** + * Output defrost valve 2 + * (original: Ausgang Abtauventil 2) + */ + CHANNEL_AVOUT_2(213, "outputDefrostValve2", SwitchItem.class, null, false, HeatpumpVisibility.OUT_ABTAUVENTIL), + + /** + * Output brine pump/fan 2 + * (original: Ausgang Solepumpe/Ventilator 2) + */ + CHANNEL_VBOOUT_2(214, "outputVBO2", SwitchItem.class, null, false, null), + + /** + * Compressor output 1 / 2 + * (original: Ausgang Verdichter 1 / 2) + */ + CHANNEL_VD1OUT_2(215, "outputCompressor1_2", SwitchItem.class, null, false, null), + + /** + * Compressor output heating 2 + * (original: Ausgang Verdichter Heizung 2) + */ + CHANNEL_LIN_VDH_OUT_2(216, "outputCompressorHeating2", SwitchItem.class, null, false, null), + + /** + * Reason shutdown X in memory 2 + * (original: Grund Abschaltung X im Speicher 2) + */ + CHANNEL_SWITCHOFF2_FILE_NR0(217, "secondShutdownReason0", NumberItem.class, null, false, null), + CHANNEL_SWITCHOFF2_FILE_NR1(218, "secondShutdownReason1", NumberItem.class, null, false, null), + CHANNEL_SWITCHOFF2_FILE_NR2(219, "secondShutdownReason2", NumberItem.class, null, false, null), + CHANNEL_SWITCHOFF2_FILE_NR3(220, "secondShutdownReason3", NumberItem.class, null, false, null), + CHANNEL_SWITCHOFF2_FILE_NR4(221, "secondShutdownReason4", NumberItem.class, null, false, null), + + /** + * Timestamp shutdown X in memory 2 + * (original: Zeitstempel Abschaltung X im Speicher 2) + */ + CHANNEL_SWITCHOFF2_FILE_TIME0(222, "secondShutdownTime0", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_SWITCHOFF2_FILE_TIME1(223, "secondShutdownTime1", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_SWITCHOFF2_FILE_TIME2(224, "secondShutdownTime2", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_SWITCHOFF2_FILE_TIME3(225, "secondShutdownTime3", DateTimeItem.class, Units.SECOND, false, null), + CHANNEL_SWITCHOFF2_FILE_TIME4(226, "secondShutdownTime4", DateTimeItem.class, Units.SECOND, false, null), + + /** + * Room temperature actual value + * (original: Raumtemperatur Istwert) + */ + CHANNEL_RBE_RT_IST(227, "temperatureRoom", NumberItem.class, SIUnits.CELSIUS, false, null), + + /** + * Room temperature set point + * (original: Raumtemperatur Sollwert) + */ + CHANNEL_RBE_RT_SOLL(228, "temperatureRoomTarget", NumberItem.class, SIUnits.CELSIUS, false, null), + + /** + * Temperature domestic water top + * (original: Temperatur Brauchwasser Oben) + */ + CHANNEL_TEMPERATUR_BW_OBEN(229, "temperatureHotWaterTop", NumberItem.class, SIUnits.CELSIUS, false, null), + + // DE: Channel 230 (Code_WP_akt_2) represent the heatpump type 2 + + /** + * Compressor frequency + * (original: Verdichterfrequenz) + */ + CHANNEL_CODE_FREQ_VD(231, "frequencyCompressor", NumberItem.class, Units.HERTZ, false, null), + + // Changeable Parameters + // https://www.loxwiki.eu/display/LOX/Java+Webinterface?preview=/13306044/13307658/3003.txt + + /** + * Heating temperature (parallel shift) + * (original: Heizung Temperatur (Parallelverschiebung)) + */ + CHANNEL_EINST_WK_AKT(1, "temperatureHeatingParallelShift", NumberItem.class, SIUnits.CELSIUS, true, + HeatpumpVisibility.HEIZUNG), + + /** + * Hot water temperature + * (original: Warmwasser Soll Temperatur) + */ + CHANNEL_EINST_BWS_AKT(2, "temperatureHotWaterTarget", NumberItem.class, SIUnits.CELSIUS, true, + HeatpumpVisibility.BRAUWASSER), + + /** + * Heating mode + * (original: Heizung Betriebsart) + */ + CHANNEL_BA_HZ_AKT(3, "heatingMode", NumberItem.class, null, true, HeatpumpVisibility.HEIZUNG), + + /** + * Hot water operating mode + * (original: Warmwasser Betriebsart) + */ + CHANNEL_BA_BW_AKT(4, "hotWaterMode", NumberItem.class, null, true, HeatpumpVisibility.BRAUWASSER), + + /** + * Thermal disinfection (Monday) + * (original: Thermische Desinfektion (Montag)) + */ + CHANNEL_EINST_BWTDI_AKT_MO(20, "thermalDisinfectionMonday", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + /** + * Thermal disinfection (Tuesday) + * (original: Thermische Desinfektion (Dienstag)) + */ + CHANNEL_EINST_BWTDI_AKT_DI(21, "thermalDisinfectionTuesday", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + /** + * Thermal disinfection (Wednesday) + * (original: Thermische Desinfektion (Mittwoch)) + */ + CHANNEL_EINST_BWTDI_AKT_MI(22, "thermalDisinfectionWednesday", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + /** + * Thermal disinfection (Thursday) + * (original: Thermische Desinfektion (Donnerstag)) + */ + CHANNEL_EINST_BWTDI_AKT_DO(23, "thermalDisinfectionThursday", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + /** + * Thermal disinfection (Friday) + * (original: Thermische Desinfektion (Freitag)) + */ + CHANNEL_EINST_BWTDI_AKT_FR(24, "thermalDisinfectionFriday", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + /** + * Thermal disinfection (Saturday) + * (original: Thermische Desinfektion (Samstag)) + */ + CHANNEL_EINST_BWTDI_AKT_SA(25, "thermalDisinfectionSaturday", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + /** + * Thermal disinfection (Sunday) + * (original: Thermische Desinfektion (Sonntag)) + */ + CHANNEL_EINST_BWTDI_AKT_SO(26, "thermalDisinfectionSunday", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + /** + * Thermal disinfection (Permanent) + * (original: Thermische Desinfektion (Dauerbetrieb)) + */ + CHANNEL_EINST_BWTDI_AKT_AL(27, "thermalDisinfectionPermanent", SwitchItem.class, null, true, + HeatpumpVisibility.THERMDESINFEKT), + + /** + * Comfort cooling mode + * (original: Comfort Kühlung Betriebsart) + */ + CHANNEL_EINST_BWSTYP_AKT(108, "comfortCoolingMode", NumberItem.class, null, true, HeatpumpVisibility.KUHLUNG), + + /** + * Comfort cooling AT release + * (original: Comfort Kühlung AT-Freigabe) + */ + CHANNEL_EINST_KUCFTL_AKT(110, "temperatureComfortCoolingATRelease", NumberItem.class, SIUnits.CELSIUS, true, + HeatpumpVisibility.KUHLUNG), + + /** + * Comfort cooling AT release target + * (original: Comfort Kühlung AT-Freigabe Sollwert) + */ + CHANNEL_SOLLWERT_KUCFTL_AKT(132, "temperatureComfortCoolingATReleaseTarget", NumberItem.class, SIUnits.CELSIUS, + true, HeatpumpVisibility.KUHLUNG), + + /** + * AT Excess + * (original: AT-Überschreitung) + */ + CHANNEL_EINST_KUHL_ZEIT_EIN_AKT(850, "comfortCoolingATExcess", NumberItem.class, Units.HOUR, true, + HeatpumpVisibility.KUHLUNG), + + /** + * AT undercut + * (original: AT-Unterschreitung) + */ + CHANNEL_EINST_KUHL_ZEIT_AUS_AKT(851, "comfortCoolingATUndercut", NumberItem.class, Units.HOUR, true, + HeatpumpVisibility.KUHLUNG), + + /** + * Channel holding complete (localized) status message + */ + CHANNEL_HEATPUMP_STATUS(null, "menuStateFull", StringItem.class, null, false, null); + + private @Nullable Integer channelId; + private String command; + private Class itemClass; + private @Nullable Unit unit; + private boolean isParameter; + private @Nullable HeatpumpVisibility requiredVisibility; + + private HeatpumpChannel(@Nullable Integer channelId, String command, Class itemClass, + @Nullable Unit unit, boolean isParameter, @Nullable HeatpumpVisibility requiredVisibility) { + this.channelId = channelId; + this.command = command; + this.itemClass = itemClass; + this.unit = unit; + this.isParameter = isParameter; + this.requiredVisibility = requiredVisibility; + } + + public @Nullable Integer getChannelId() { + return channelId; + } + + public String getCommand() { + return command; + } + + public Class getItemClass() { + return itemClass; + } + + public @Nullable Unit getUnit() { + return unit; + } + + public boolean isWritable() { + return isParameter == Boolean.TRUE; + } + + protected @Nullable HeatpumpVisibility getVisibility() { + return requiredVisibility; + } + + public boolean isVisible(Integer[] visibilityValues) { + HeatpumpVisibility visiblity = getVisibility(); + + if (visiblity == null) { + return true; + } + + int code = visiblity.getCode(); + + if (visibilityValues.length < code || visibilityValues[code] == 1) { + return true; + } + + return false; + } + + public static HeatpumpChannel fromString(String heatpumpCommand) throws InvalidChannelException { + for (HeatpumpChannel c : HeatpumpChannel.values()) { + + if (c.getCommand().equals(heatpumpCommand)) { + return c; + } + } + + throw new InvalidChannelException("cannot find LuxtronikHeatpump channel for '" + heatpumpCommand + "'"); + } + + @Override + public String toString() { + return getCommand(); + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpCoolingOperationMode.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpCoolingOperationMode.java new file mode 100644 index 00000000000..2ce17cade64 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpCoolingOperationMode.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal.enums; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.luxtronikheatpump.internal.exceptions.InvalidOperationModeException; + +/** + * Represents all heat pump cooling operation modes + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public enum HeatpumpCoolingOperationMode { + AUTOMATIC(1), + OFF(0); + + private int value; + + private HeatpumpCoolingOperationMode(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + public static HeatpumpCoolingOperationMode fromValue(int value) throws InvalidOperationModeException { + for (HeatpumpCoolingOperationMode mode : HeatpumpCoolingOperationMode.values()) { + if (mode.value == value) { + return mode; + } + } + + throw new InvalidOperationModeException("Invalid heat pump cooling operation mode: '" + value + "'"); + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpOperationMode.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpOperationMode.java new file mode 100644 index 00000000000..2f90149c30d --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpOperationMode.java @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal.enums; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.binding.luxtronikheatpump.internal.exceptions.InvalidOperationModeException; + +/** + * Represents all heat pump operation modes + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public enum HeatpumpOperationMode { + AUTOMATIC(0), + OFF(4), + PARTY(2), + HOLIDAY(3), + AUXILIARY_HEATER(1); + + private int value; + + private HeatpumpOperationMode(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + public static HeatpumpOperationMode fromValue(int value) throws InvalidOperationModeException { + for (HeatpumpOperationMode mode : HeatpumpOperationMode.values()) { + if (mode.value == value) { + return mode; + } + } + + throw new InvalidOperationModeException("Invalid heat pump operation mode: '" + value + "'"); + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpType.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpType.java new file mode 100644 index 00000000000..31295f80b16 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpType.java @@ -0,0 +1,131 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal.enums; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Represents all heat pump types + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public enum HeatpumpType { + TYPE_ERC(0, "ERC"), + TYPE_SW1(1, "SW1"), + TYPE_SW2(2, "SW2"), + TYPE_WW1(3, "WW1"), + TYPE_WW2(4, "WW2"), + TYPE_L1I(5, "L1I"), + TYPE_L2I(6, "L2I"), + TYPE_L1A(7, "L1A"), + TYPE_L2A(8, "L2A"), + TYPE_KSW(9, "KSW"), + TYPE_KLW(10, "KLW"), + TYPE_SWC(11, "SWC"), + TYPE_LWC(12, "LWC"), + TYPE_L2G(13, "L2G"), + TYPE_WZS(14, "WZS"), + TYPE_L1I407(15, "L1I407"), + TYPE_L2I407(16, "L2I407"), + TYPE_L1A407(17, "L1A407"), + TYPE_L2A407(18, "L2A407"), + TYPE_L2G407(19, "L2G407"), + TYPE_LWC407(20, "LWC407"), + TYPE_L1AREV(21, "L1AREV"), + TYPE_L2AREV(22, "L2AREV"), + TYPE_WWC1(23, "WWC1"), + TYPE_WWC2(24, "WWC2"), + TYPE_L2G404(25, "L2G404"), + TYPE_WZW(26, "WZW"), + TYPE_L1S(27, "L1S"), + TYPE_L1H(28, "L1H"), + TYPE_L2H(29, "L2H"), + TYPE_WZWD(30, "WZWD"), + TYPE_ERC2(31, "ERC"), + TYPE_WWB_20(40, "WWB_20"), + TYPE_LD5(41, "LD5"), + TYPE_LD7(42, "LD7"), + TYPE_SW_37_45(43, "SW 37_45"), + TYPE_SW_58_69(44, "SW 58_69"), + TYPE_SW_29_56(45, "SW 29_56"), + TYPE_LD5_230V(46, "LD5 (230V)"), + TYPE_LD7_230V(47, "LD7 (230 V)"), + TYPE_LD9(48, "LD9"), + TYPE_LD5_REV(49, "LD5 REV"), + TYPE_LD7_REV(50, "LD7 REV"), + TYPE_LD5_REV_230V(51, "LD5 REV 230V"), + TYPE_LD7_REV_230V(52, "LD7 REV 230V"), + TYPE_LD9_REV_230V(53, "LD9 REV 230V"), + TYPE_SW_291(54, "SW 291"), + TYPE_LW_SEC(55, "LW SEC"), + TYPE_HMD_2(56, "HMD 2"), + TYPE_MSW_4(57, "MSW 4"), + TYPE_MSW_6(58, "MSW 6"), + TYPE_MSW_8(59, "MSW 8"), + TYPE_MSW_10(60, "MSW 10"), + TYPE_MSW_12(61, "MSW 12"), + TYPE_MSW_14(62, "MSW 14"), + TYPE_MSW_17(63, "MSW 17"), + TYPE_MSW_19(64, "MSW 19"), + TYPE_MSW_23(65, "MSW 23"), + TYPE_MSW_26(66, "MSW 26"), + TYPE_MSW_30(67, "MSW 30"), + TYPE_MSW_4S(68, "MSW 4S"), + TYPE_MSW_6S(69, "MSW 6S"), + TYPE_MSW_8S(70, "MSW 8S"), + TYPE_MSW_10S(71, "MSW 10S"), + TYPE_MSW_13S(72, "MSW 13S"), + TYPE_MSW_16S(73, "MSW 16S"), + TYPE_MSW2_6S(74, "MSW2-6S"), + TYPE_MSW4_16(75, "MSW4-16"), + TYPE_LD2AG(76, "LD2AG"), + TYPE_LWD90V(77, "LWD90V"), + TYPE_MSW3_12(78, "MSW3-12"), + TYPE_MSW3_12S(79, "MSW3-12S"), + TYPE_MSW2_9S(80, "MSW2-9S"), + TYPE_LW12(82, "LW 12"), + TYPE_UNKNOWN(-1, "Unknown"); + + private final String name; + private final Integer code; + private static final Logger logger = LoggerFactory.getLogger(HeatpumpType.class); + + private HeatpumpType(Integer code, String name) { + this.code = code; + this.name = name; + } + + public static final HeatpumpType fromCode(Integer code) { + for (HeatpumpType error : HeatpumpType.values()) { + if (error.code.equals(code)) { + return error; + } + } + + logger.warn("Unknown heatpump type code {}", code); + + return TYPE_UNKNOWN; + } + + public String getName() { + return name; + } + + @Override + public String toString() { + return code + ": " + name; + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpVisibility.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpVisibility.java new file mode 100644 index 00000000000..00d5d521abb --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/enums/HeatpumpVisibility.java @@ -0,0 +1,395 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal.enums; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * Represents all heatpump visibily settings + * + * The names of the enum values are those used in the code if the internal Java applet of the heat pump + * The meaning of most of the values is currently unclear, but are included here for completeness only + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public enum HeatpumpVisibility { + /** + * Defines if the device has heating capabilities + */ + HEIZUNG(0, "Heizung"), + + /** + * Defines if the device has hot water capabilities + */ + BRAUWASSER(1, "Brauwasser"), + + /** + * Defines if the device swimming pool capabilities + */ + SCHWIMMBAD(2, "Schwimmbad"), + + /** + * Defines if the device has cooling capabilities + */ + KUHLUNG(3, "Kuhlung"), + + /** + * Defines if the device has ventilation capabilities + */ + LUEFTUNG(4, "Lueftung"), + + MK1(5, "MK1"), + MK2(6, "MK2"), + + /** + * Defines if thermal disinfiction is available + */ + THERMDESINFEKT(7, "ThermDesinfekt"), + ZIRKULATION(8, "Zirkulation"), + KUHLTEMP_SOLLTEMPMK1(9, "KuhlTemp_SolltempMK1"), + KUHLTEMP_SOLLTEMPMK2(10, "KuhlTemp_SolltempMK2"), + KUHLTEMP_ATDIFFMK1(11, "KuhlTemp_ATDiffMK1"), + KUHLTEMP_ATDIFFMK2(12, "KuhlTemp_ATDiffMK2"), + SERVICE_INFORMATION(13, "Service_Information"), + SERVICE_EINSTELLUNG(14, "Service_Einstellung"), + SERVICE_SPRACHE(15, "Service_Sprache"), + SERVICE_DATUMUHRZEIT(16, "Service_DatumUhrzeit"), + SERVICE_AUSHEIZ(17, "Service_Ausheiz"), + SERVICE_ANLAGENKONFIGURATION(18, "Service_Anlagenkonfiguration"), + SERVICE_IBNASSISTANT(19, "Service_IBNAssistant"), + SERVICE_PARAMETERIBNZURUCK(20, "Service_ParameterIBNZuruck"), + TEMP_VORLAUF(21, "Temp_Vorlauf"), + TEMP_RUCKLAUF(22, "Temp_Rucklauf"), + TEMP_RL_SOLL(23, "Temp_RL_Soll"), + TEMP_RUECKLEXT(24, "Temp_Ruecklext"), + TEMP_HEISSGAS(25, "Temp_Heissgas"), + TEMP_AUSSENT(26, "Temp_Aussent"), + TEMP_BW_IST(27, "Temp_BW_Ist"), + TEMP_BW_SOLL(28, "Temp_BW_Soll"), + TEMP_WQ_EIN(29, "Temp_WQ_Ein"), + TEMP_KALTEKREIS(30, "Temp_Kaltekreis"), + TEMP_MK1_VORLAUF(31, "Temp_MK1_Vorlauf"), + TEMP_MK1VL_SOLL(32, "Temp_MK1VL_Soll"), + TEMP_RAUMSTATION(33, "Temp_Raumstation"), + TEMP_MK2_VORLAUF(34, "Temp_MK2_Vorlauf"), + TEMP_MK2VL_SOLL(35, "Temp_MK2VL_Soll"), + TEMP_SOLARKOLL(36, "Temp_Solarkoll"), + TEMP_SOLARSP(37, "Temp_Solarsp"), + TEMP_EXT_ENERG(38, "Temp_Ext_Energ"), + IN_ASD(39, "IN_ASD"), + IN_BWT(40, "IN_BWT"), + IN_EVU(41, "IN_EVU"), + IN_HD(42, "IN_HD"), + IN_MOT(43, "IN_MOT"), + IN_ND(44, "IN_ND"), + IN_PEX(45, "IN_PEX"), + IN_SWT(46, "IN_SWT"), + OUT_ABTAUVENTIL(47, "OUT_Abtauventil"), + OUT_BUP(48, "OUT_BUP"), + OUT_FUP1(49, "OUT_FUP1"), + OUT_HUP(50, "OUT_HUP"), + OUT_MISCHER1AUF(51, "OUT_Mischer1Auf"), + OUT_MISCHER1ZU(52, "OUT_Mischer1Zu"), + OUT_VENTILATION(53, "OUT_Ventilation"), + OUT_VENTIL_BOSUP(54, "OUT_Ventil_BOSUP"), + OUT_VERDICHTER1(55, "OUT_Verdichter1"), + OUT_VERDICHTER2(56, "OUT_Verdichter2"), + OUT_ZIP(57, "OUT_ZIP"), + OUT_ZUP(58, "OUT_ZUP"), + OUT_ZWE1(59, "OUT_ZWE1"), + OUT_ZWE2_SST(60, "OUT_ZWE2_SST"), + OUT_ZWE3(61, "OUT_ZWE3"), + OUT_FUP2(62, "OUT_FUP2"), + OUT_SLP(63, "OUT_SLP"), + OUT_SUP(64, "OUT_SUP"), + OUT_MISCHER2AUF(65, "OUT_Mischer2Auf"), + OUT_MISCHER2ZU(66, "OUT_Mischer2Zu"), + ABLAUFZ_WP_SEIT(67, "AblaufZ_WP_Seit"), + ABLAUFZ_ZWE1_SEIT(68, "AblaufZ_ZWE1_seit"), + ABLAUFZ_ZWE2_SEIT(69, "AblaufZ_ZWE2_seit"), + ABLAUFZ_ZWE3_SEIT(70, "AblaufZ_ZWE3_seit"), + ABLAUFZ_NETZEINV(71, "AblaufZ_Netzeinv"), + ABLAUFZ_SSP_ZEIT1(72, "AblaufZ_SSP_Zeit1"), + ABLAUFZ_VD_STAND(73, "AblaufZ_VD_Stand"), + ABLAUFZ_HRM_ZEIT(74, "AblaufZ_HRM_Zeit"), + ABLAUFZ_HRW_ZEIT(75, "AblaufZ_HRW_Zeit"), + ABLAUFZ_TDI_SEIT(76, "AblaufZ_TDI_seit"), + ABLAUFZ_SPERRE_BW(77, "AblaufZ_Sperre_BW"), + BST_BSTDVD1(78, "Bst_BStdVD1"), + BST_IMPVD1(79, "Bst_ImpVD1"), + BST_DEZVD1(80, "Bst_dEZVD1"), + BST_BSTDVD2(81, "Bst_BStdVD2"), + BST_IMPVD2(82, "Bst_ImpVD2"), + BST_DEZVD2(83, "Bst_dEZVD2"), + BST_BSTDZWE1(84, "Bst_BStdZWE1"), + BST_BSTDZWE2(85, "Bst_BStdZWE2"), + BST_BSTDZWE3(86, "Bst_BStdZWE3"), + BST_BSTDWP(87, "Bst_BStdWP"), + TEXT_KURZPROGRAMME(88, "Text_Kurzprogramme"), + TEXT_ZWANGSHEIZUNG(89, "Text_Zwangsheizung"), + TEXT_ZWANGSBRAUCHWASSER(90, "Text_Zwangsbrauchwasser"), + TEXT_ABTAUEN(91, "Text_Abtauen"), + EINSTTEMP_RUCKLBEGR(92, "EinstTemp_RucklBegr"), + EINSTTEMP_HYSTERESEHR(93, "EinstTemp_HystereseHR"), + EINSTTEMP_TRERHMAX(94, "EinstTemp_TRErhmax"), + EINSTTEMP_FREIG2VD(95, "EinstTemp_Freig2VD"), + EINSTTEMP_FREIGZWE(96, "EinstTemp_FreigZWE"), + EINSTTEMP_TLUFTABT(97, "EinstTemp_Tluftabt"), + EINSTTEMP_TDISOLLTEMP(98, "EinstTemp_TDISolltemp"), + EINSTTEMP_HYSTERESEBW(99, "EinstTemp_HystereseBW"), + EINSTTEMP_VORL2VDBW(100, "EinstTemp_Vorl2VDBW"), + EINSTTEMP_TAUSSENMAX(101, "EinstTemp_TAussenmax"), + EINSTTEMP_TAUSSENMIN(102, "EinstTemp_TAussenmin"), + EINSTTEMP_TWQMIN(103, "EinstTemp_TWQmin"), + EINSTTEMP_THGMAX(104, "EinstTemp_THGmax"), + EINSTTEMP_TLABTENDE(105, "EinstTemp_TLABTEnde"), + EINSTTEMP_ABSENKBIS(106, "EinstTemp_Absenkbis"), + EINSTTEMP_VORLAUFMAX(107, "EinstTemp_Vorlaufmax"), + EINSTTEMP_TDIFFEIN(108, "EinstTemp_TDiffEin"), + EINSTTEMP_TDIFFAUS(109, "EinstTemp_TDiffAus"), + EINSTTEMP_TDIFFMAX(110, "EinstTemp_TDiffmax"), + EINSTTEMP_TEEHEIZUNG(111, "EinstTemp_TEEHeizung"), + EINSTTEMP_TEEBRAUCHW(112, "EinstTemp_TEEBrauchw"), + EINSTTEMP_VORL2VDSW(113, "EinstTemp_Vorl2VDSW"), + EINSTTEMP_VLMAXMK1(114, "EinstTemp_VLMaxMk1"), + EINSTTEMP_VLMAXMK2(115, "EinstTemp_VLMaxMk2"), + PRIORI_BRAUCHWASSER(116, "Priori_Brauchwasser"), + PRIORI_HEIZUNG(117, "Priori_Heizung"), + PRIORI_SCHWIMMBAD(118, "Priori_Schwimmbad"), + SYSEIN_EVUSPERRE(119, "SysEin_EVUSperre"), + SYSEIN_RAUMSTATION(120, "SysEin_Raumstation"), + SYSEIN_EINBINDUNG(121, "SysEin_Einbindung"), + SYSEIN_MISCHKREIS1(122, "SysEin_Mischkreis1"), + SYSEIN_MISCHKREIS2(123, "SysEin_Mischkreis2"), + SYSEIN_ZWE1ART(124, "SysEin_ZWE1Art"), + SYSEIN_ZWE1FKT(125, "SysEin_ZWE1Fkt"), + SYSEIN_ZWE2ART(126, "SysEin_ZWE2Art"), + SYSEIN_ZWE2FKT(127, "SysEin_ZWE2Fkt"), + SYSEIN_ZWE3ART(128, "SysEin_ZWE3Art"), + SYSEIN_ZWE3FKT(129, "SysEin_ZWE3Fkt"), + SYSEIN_STOERUNG(130, "SysEin_Stoerung"), + SYSEIN_BRAUCHWASSER1(131, "SysEin_Brauchwasser1"), + SYSEIN_BRAUCHWASSER2(132, "SysEin_Brauchwasser2"), + SYSEIN_BRAUCHWASSER3(133, "SysEin_Brauchwasser3"), + SYSEIN_BRAUCHWASSER4(134, "SysEin_Brauchwasser4"), + SYSEIN_BRAUCHWASSER5(135, "SysEin_Brauchwasser5"), + SYSEIN_BWWPMAX(136, "SysEin_BWWPmax"), + SYSEIN_ABTZYKMAX(137, "SysEin_Abtzykmax"), + SYSEIN_LUFTABT(138, "SysEin_Luftabt"), + SYSEIN_LUFTABTMAX(139, "SysEin_LuftAbtmax"), + SYSEIN_ABTAUEN1(140, "SysEin_Abtauen1"), + SYSEIN_ABTAUEN2(141, "SysEin_Abtauen2"), + SYSEIN_PUMPENOPTIM(142, "SysEin_Pumpenoptim"), + SYSEIN_ZUSATZPUMPE(143, "SysEin_Zusatzpumpe"), + SYSEIN_ZUGANG(144, "SysEin_Zugang"), + SYSEIN_SOLEDRDURCHF(145, "SysEin_SoledrDurchf"), + SYSEIN_UBERWACHUNGVD(146, "SysEin_UberwachungVD"), + SYSEIN_REGELUNGHK(147, "SysEin_RegelungHK"), + SYSEIN_REGELUNGMK1(148, "SysEin_RegelungMK1"), + SYSEIN_REGELUNGMK2(149, "SysEin_RegelungMK2"), + SYSEIN_KUHLUNG(150, "SysEin_Kuhlung"), + SYSEIN_AUSHEIZEN(151, "SysEin_Ausheizen"), + SYSEIN_ELEKTRANODE(152, "SysEin_ElektrAnode"), + SYSEIN_SWBBER(153, "SysEin_SWBBer"), + SYSEIN_SWBMIN(154, "SysEin_SWBMin"), + SYSEIN_HEIZUNG(155, "SysEin_Heizung"), + SYSEIN_PERIODEMK1(156, "SysEin_PeriodeMk1"), + SYSEIN_LAUFZEITMK1(157, "SysEin_LaufzeitMk1"), + SYSEIN_PERIODEMK2(158, "SysEin_PeriodeMk2"), + SYSEIN_LAUFZEITMK2(159, "SysEin_LaufzeitMk2"), + SYSEIN_HEIZGRENZE(160, "SysEin_Heizgrenze"), + ENLT_HUP(161, "Enlt_HUP"), + ENLT_ZUP(162, "Enlt_ZUP"), + ENLT_BUP(163, "Enlt_BUP"), + ENLT_VENTILATOR_BOSUP(164, "Enlt_Ventilator_BOSUP"), + ENLT_MA1(165, "Enlt_MA1"), + ENLT_MZ1(166, "Enlt_MZ1"), + ENLT_ZIP(167, "Enlt_ZIP"), + ENLT_MA2(168, "Enlt_MA2"), + ENLT_MZ2(169, "Enlt_MZ2"), + ENLT_SUP(170, "Enlt_SUP"), + ENLT_SLP(171, "Enlt_SLP"), + ENLT_FP2(172, "Enlt_FP2"), + ENLT_LAUFZEIT(173, "Enlt_Laufzeit"), + ANLGKONF_HEIZUNG(174, "Anlgkonf_Heizung"), + ANLGKONF_BRAUCHWARMWASSER(175, "Anlgkonf_Brauchwarmwasser"), + ANLGKONF_SCHWIMMBAD(176, "Anlgkonf_Schwimmbad"), + HEIZUNG_BETRIEBSART(177, "Heizung_Betriebsart"), + HEIZUNG_TEMPERATURPLUSMINUS(178, "Heizung_TemperaturPlusMinus"), + HEIZUNG_HEIZKURVEN(179, "Heizung_Heizkurven"), + HEIZUNG_ZEITSCHLALTPROGRAMM(180, "Heizung_Zeitschlaltprogramm"), + HEIZUNG_HEIZGRENZE(181, "Heizung_Heizgrenze"), + MITTELTEMPERATUR(182, "Mitteltemperatur"), + DATAENLOGGER(183, "Dataenlogger"), + SPRACHEN_DEUTSCH(184, "Sprachen_DEUTSCH"), + SPRACHEN_ENGLISH(185, "Sprachen_ENGLISH"), + SPRACHEN_FRANCAIS(186, "Sprachen_FRANCAIS"), + SPRACHEN_NORWAY(187, "Sprachen_NORWAY"), + SPRACHEN_TCHECH(188, "Sprachen_TCHECH"), + SPRACHEN_ITALIANO(189, "Sprachen_ITALIANO"), + SPRACHEN_NEDERLANDS(190, "Sprachen_NEDERLANDS"), + SPRACHEN_SVENSKA(191, "Sprachen_SVENSKA"), + SPRACHEN_POLSKI(192, "Sprachen_POLSKI"), + SPRACHEN_MAGYARUL(193, "Sprachen_MAGYARUL"), + ERRORUSBSPEICHERN(194, "ErrorUSBspeichern"), + BST_BSTDHZ(195, "Bst_BStdHz"), + BST_BSTDBW(196, "Bst_BStdBW"), + BST_BSTDKUE(197, "Bst_BStdKue"), + SERVICE_SYSTEMSTEUERUNG(198, "Service_Systemsteuerung"), + SERVICE_SYSTEMSTEUERUNG_CONTRAST(199, "Service_Systemsteuerung_Contrast"), + SERVICE_SYSTEMSTEUERUNG_WEBSERVER(200, "Service_Systemsteuerung_Webserver"), + SERVICE_SYSTEMSTEUERUNG_IPADRESSE(201, "Service_Systemsteuerung_IPAdresse"), + SERVICE_SYSTEMSTEUERUNG_FERNWARTUNG(202, "Service_Systemsteuerung_Fernwartung"), + PARALLELESCHALTUNG(203, "Paralleleschaltung"), + SYSEIN_PARALLELESCHALTUNG(204, "SysEin_Paralleleschaltung"), + SPRACHEN_DANSK(205, "Sprachen_DANSK"), + SPRACHEN_PORTUGES(206, "Sprachen_PORTUGES"), + HEIZKURVE_HEIZUNG(207, "Heizkurve_Heizung"), + SYSEIN_MISCHKREIS3(208, "SysEin_Mischkreis3"), + MK3(209, "MK3"), + TEMP_MK3_VORLAUF(210, "Temp_MK3_Vorlauf"), + TEMP_MK3VL_SOLL(211, "Temp_MK3VL_Soll"), + OUT_MISCHER3AUF(212, "OUT_Mischer3Auf"), + OUT_MISCHER3ZU(213, "OUT_Mischer3Zu"), + SYSEIN_REGELUNGMK3(214, "SysEin_RegelungMK3"), + SYSEIN_PERIODEMK3(215, "SysEin_PeriodeMk3"), + SYSEIN_LAUFZEITMK3(216, "SysEin_LaufzeitMk3"), + SYSEIN_KUHL_ZEIT_EIN(217, "SysEin_Kuhl_Zeit_Ein"), + SYSEIN_KUHL_ZEIT_AUS(218, "SysEin_Kuhl_Zeit_Aus"), + ABLAUFZ_ABTAUIN(219, "AblaufZ_AbtauIn"), + WAERMEMENGE_WS(220, "Waermemenge_WS"), + WAERMEMENGE_WQ(221, "Waermemenge_WQ"), + ENLT_MA3(222, "Enlt_MA3"), + ENLT_MZ3(223, "Enlt_MZ3"), + ENLT_FP3(224, "Enlt_FP3"), + OUT_FUP3(225, "OUT_FUP3"), + TEMP_RAUMSTATION2(226, "Temp_Raumstation2"), + TEMP_RAUMSTATION3(227, "Temp_Raumstation3"), + BST_BSTDSW(228, "Bst_BStdSW"), + SPRACHEN_LITAUISCH(229, "Sprachen_LITAUISCH"), + SPRACHEN_ESTNICH(230, "Sprachen_ESTNICH"), + SYSEIN_FERNWARTUNG(231, "SysEin_Fernwartung"), + SPRACHEN_SLOVENISCH(232, "Sprachen_SLOVENISCH"), + EINSTTEMP_TA_EG(233, "EinstTemp_TA_EG"), + EINST_TVLMAX_EG(234, "Einst_TVLmax_EG"), + SYSEIN_POPTNACHLAUF(235, "SysEin_PoptNachlauf"), + RFV_K_KUEHLIN(236, "RFV_K_Kuehlin"), + SYSEIN_EFFIZIENZPUMPENOM(237, "SysEin_EffizienzpumpeNom"), + SYSEIN_EFFIZIENZPUMPEMIN(238, "SysEin_EffizienzpumpeMin"), + SYSEIN_EFFIZIENZPUMPE(239, "SysEin_Effizienzpumpe"), + SYSEIN_WAERMEMENGE(240, "SysEin_Waermemenge"), + SERVICE_WMZ_EFFIZIENZ(241, "Service_WMZ_Effizienz"), + SYSEIN_WM_VERSORGUNG_KORREKTUR(242, "SysEin_Wm_Versorgung_Korrektur"), + SYSEIN_WM_AUSWERTUNG_KORREKTUR(243, "SysEin_Wm_Auswertung_Korrektur"), + IN_ANALOGIN(244, "IN_AnalogIn"), + EINS_SN_EINGABE(245, "Eins_SN_Eingabe"), + OUT_ANALOG_1(246, "OUT_Analog_1"), + OUT_ANALOG_2(247, "OUT_Analog_2"), + SOLAR(248, "Solar"), + SYSEIN_SOLAR(249, "SysEin_Solar"), + EINSTTEMP_TDIFFKOLLMAX(250, "EinstTemp_TDiffKollmax"), + ABLAUFZ_HG_SPERRE(251, "AblaufZ_HG_Sperre"), + SYSEIN_AKT_KUEHLUNG(252, "SysEin_Akt_Kuehlung"), + SYSEIN_VORLAUF_VBO(253, "SysEin_Vorlauf_VBO"), + EINST_KRHYST(254, "Einst_KRHyst"), + EINST_AKT_KUEHL_SPEICHER_MIN(255, "Einst_Akt_Kuehl_Speicher_min"), + EINST_AKT_KUEHL_FREIG_WQE(256, "Einst_Akt_Kuehl_Freig_WQE"), + SYSEIN_ABTZYKMIN(257, "SysEin_AbtZykMin"), + SYSEIN_VD2_ZEIT_MIN(258, "SysEin_VD2_Zeit_Min"), + EINSTTEMP_HYSTERESE_HR_VERKUERZT(259, "EinstTemp_Hysterese_HR_verkuerzt"), + EINST_LUF_FEUCHTESCHUTZ_AKT(260, "Einst_Luf_Feuchteschutz_akt"), + EINST_LUF_REDUZIERT_AKT(261, "Einst_Luf_Reduziert_akt"), + EINST_LUF_NENNLUEFTUNG_AKT(262, "Einst_Luf_Nennlueftung_akt"), + EINST_LUF_INTENSIVLUEFTUNG_AKT(263, "Einst_Luf_Intensivlueftung_akt"), + TEMPERATUR_LUEFTUNG_ZULUFT(264, "Temperatur_Lueftung_Zuluft"), + TEMPERATUR_LUEFTUNG_ABLUFT(265, "Temperatur_Lueftung_Abluft"), + OUT_ANALOG_3(266, "OUT_Analog_3"), + OUT_ANALOG_4(267, "OUT_Analog_4"), + IN_ANALOG_2(268, "IN_Analog_2"), + IN_ANALOG_3(269, "IN_Analog_3"), + IN_SAX(270, "IN_SAX"), + OUT_VZU(271, "OUT_VZU"), + OUT_VAB(272, "OUT_VAB"), + OUT_VSK(273, "OUT_VSK"), + OUT_FRH(274, "OUT_FRH"), + KUHLTEMP_SOLLTEMPMK3(275, "KuhlTemp_SolltempMK3"), + KUHLTEMP_ATDIFFMK3(276, "KuhlTemp_ATDiffMK3"), + IN_SPL(277, "IN_SPL"), + SYSEIN_LUEFTUNGSSTUFEN(278, "SysEin_Lueftungsstufen"), + SYSEIN_MELDUNG_TDI(279, "SysEin_Meldung_TDI"), + SYSEIN_TYP_WZW(280, "SysEin_Typ_WZW"), + BACNET(281, "BACnet"), + SPRACHEN_SLOWAKISCH(282, "Sprachen_SLOWAKISCH"), + SPRACHEN_LETTISCH(283, "Sprachen_LETTISCH"), + SPRACHEN_FINNISCH(284, "Sprachen_FINNISCH"), + KALIBRIERUNG_LWD(285, "Kalibrierung_LWD"), + IN_DURCHFLUSS(286, "IN_Durchfluss"), + LIN_ANSAUG_VERDICHTER(287, "LIN_ANSAUG_VERDICHTER"), + LIN_VDH(288, "LIN_VDH"), + LIN_UH(289, "LIN_UH"), + LIN_DRUCK(290, "LIN_Druck"), + EINST_SOLLWERT_TRL_KUEHLEN(291, "Einst_Sollwert_TRL_Kuehlen"), + ENTL_EXVENTIL(292, "Entl_ExVentil"), + EINST_MEDIUM_WAERMEQUELLE(293, "Einst_Medium_Waermequelle"), + EINST_MULTISPEICHER(294, "Einst_Multispeicher"), + EINST_MINIMALE_RUECKLAUFSOLLTEMPERATUR(295, "Einst_Minimale_Ruecklaufsolltemperatur"), + EINST_PKUEHLTIME(296, "Einst_PKuehlTime"), + SPRACHEN_TUERKISCH(297, "Sprachen_TUERKISCH"), + RBE(298, "RBE"), + EINST_LUF_STUFEN_FAKTOR(299, "Einst_Luf_Stufen_Faktor"), + FREIGABE_ZEIT_ZWE(300, "Freigabe_Zeit_ZWE"), + EINST_MIN_VL_KUEHL(301, "Einst_min_VL_Kuehl"), + ZWE1(302, "ZWE1"), + ZWE2(303, "ZWE2"), + ZWE3(304, "ZWE3"), + SEC(305, "SEC"), + HZIO(306, "HZIO"), + WPIO(307, "WPIO"), + LIN_ANSAUG_VERDAMPFER(308, "LIN_ANSAUG_VERDAMPFER"), + LIN_MULTI1(309, "LIN_MULTI1"), + LIN_MULTI2(310, "LIN_MULTI2"), + EINST_LEISTUNG_ZWE(311, "Einst_Leistung_ZWE"), + SPRACHEN_ESPANOL(312, "Sprachen_ESPANOL"), + TEMP_BW_OBEN(313, "Temp_BW_oben"), + MAXIO(314, "MAXIO"), + OUT_ABTAUWUNSCH(315, "OUT_Abtauwunsch"), + SMARTGRID(316, "SmartGrid"), + DREHZAHLGEREGELT(317, "Drehzahlgeregelt"), + P155_INVERTER(318, "P155_Inverter"), + LEISTUNGSFREIGABE(319, "Leistungsfreigabe"), + EINST_VORL_AKT_KUEHL(320, "Einst_Vorl_akt_Kuehl"), + EINST_ABTAUEN_IM_WARMWASSER(321, "Einst_Abtauen_im_Warmwasser"), + WAERMEMENGE_ZWE(32, "Waermemenge_ZWE"); + + private final String name; + private final Integer code; + + private HeatpumpVisibility(Integer code, String name) { + this.code = code; + this.name = name; + } + + public String getName() { + return name; + } + + public Integer getCode() { + return code; + } + + @Override + public String toString() { + return code + ": " + name; + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidChannelException.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidChannelException.java new file mode 100644 index 00000000000..b8b484f1f3f --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidChannelException.java @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal.exceptions; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * The {@link InvalidChannelException} is thrown if a channel can't be found + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class InvalidChannelException extends Exception { + private static final long serialVersionUID = 1L; + + public InvalidChannelException(String message) { + super(message); + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidOperationModeException.java b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidOperationModeException.java new file mode 100644 index 00000000000..54688a31b03 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/java/org/openhab/binding/luxtronikheatpump/internal/exceptions/InvalidOperationModeException.java @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.luxtronikheatpump.internal.exceptions; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * The {@link InvalidOperationModeException} is thrown for invalid operation modes + * + * @author Stefan Giehl - Initial contribution + */ +@NonNullByDefault +public class InvalidOperationModeException extends Exception { + private static final long serialVersionUID = 1L; + + public InvalidOperationModeException(String message) { + super(message); + } +} diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/binding/binding.xml b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/binding/binding.xml new file mode 100644 index 00000000000..ca5ce9ed07a --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/binding/binding.xml @@ -0,0 +1,9 @@ + + + + Luxtronik Heatpump Binding + This is the binding for a Heatpump with Luxtronik control. + + diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump.properties b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump.properties new file mode 100644 index 00000000000..dcab406312b --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump.properties @@ -0,0 +1,131 @@ +channel-type.luxtronikheatpump.menuStateLine1.state.option.0 = Heat pump runs +channel-type.luxtronikheatpump.menuStateLine1.state.option.1 = Heat pump stopped +channel-type.luxtronikheatpump.menuStateLine1.state.option.2 = Heat pump coming +channel-type.luxtronikheatpump.menuStateLine1.state.option.3 = Error code memory location 0 +channel-type.luxtronikheatpump.menuStateLine1.state.option.4 = Defrost +channel-type.luxtronikheatpump.menuStateLine1.state.option.5 = Wait for LIN connection +channel-type.luxtronikheatpump.menuStateLine1.state.option.6 = Compressor heats up +channel-type.luxtronikheatpump.menuStateLine1.state.option.7 = Pump flow +channel-type.luxtronikheatpump.menuStateLine2.state.option.0 = since +channel-type.luxtronikheatpump.menuStateLine2.state.option.1 = in +channel-type.luxtronikheatpump.menuStateLine3.state.option.0 = Heating mode +channel-type.luxtronikheatpump.menuStateLine3.state.option.1 = No requirement +channel-type.luxtronikheatpump.menuStateLine3.state.option.2 = Mains switch-on delay +channel-type.luxtronikheatpump.menuStateLine3.state.option.3 = Switching cycle lock +channel-type.luxtronikheatpump.menuStateLine3.state.option.4 = Blocking time +channel-type.luxtronikheatpump.menuStateLine3.state.option.5 = Service water +channel-type.luxtronikheatpump.menuStateLine3.state.option.6 = Info bakeout program +channel-type.luxtronikheatpump.menuStateLine3.state.option.7 = Defrost +channel-type.luxtronikheatpump.menuStateLine3.state.option.8 = Pump flow +channel-type.luxtronikheatpump.menuStateLine3.state.option.9 = Thermal disinfection +channel-type.luxtronikheatpump.menuStateLine3.state.option.10 = Cooling mode +channel-type.luxtronikheatpump.menuStateLine3.state.option.12 = Swimming pool / Photovoltaics +channel-type.luxtronikheatpump.menuStateLine3.state.option.13 = Heating ext. energy source +channel-type.luxtronikheatpump.menuStateLine3.state.option.14 = Service water ext. energy source +channel-type.luxtronikheatpump.menuStateLine3.state.option.16 = Flow monitoring +channel-type.luxtronikheatpump.menuStateLine3.state.option.17 = Second heat generator 1 operation + +channel-type.luxtronikheatpump.operationMode.state.option.0 = Auto +channel-type.luxtronikheatpump.operationMode.state.option.1 = Auxiliary heater +channel-type.luxtronikheatpump.operationMode.state.option.2 = Party +channel-type.luxtronikheatpump.operationMode.state.option.3 = Holiday +channel-type.luxtronikheatpump.operationMode.state.option.4 = Off + +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.1 = Heat pump malfunction +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.2 = Facility malfunction +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.3 = Second heat generator operating mode +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.4 = Utility lock +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.5 = Running dew (LW units only) +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.6 = Temperature application limit maximum +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.7 = Temperature application limit minimum +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.8 = Lower operating limit +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.9 = No requirement + +channel-type.luxtronikheatpump.errorCodeX.state.option.701 = Error low pressure - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.702 = Low pressure stop - RESET automatic +channel-type.luxtronikheatpump.errorCodeX.state.option.703 = Antifreeze - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.704 = Error hot gas - reset in hh:mm +channel-type.luxtronikheatpump.errorCodeX.state.option.705 = Motor protection VEN - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.706 = Motor protection BCP - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.707 = Coding of heat pump - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.708 = Return sensor - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.709 = Flow sensor - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.710 = Hot gas sensor - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.711 = External temp. sensor - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.712 = Domestic hot water sensor - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.713 = HS-on sensor - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.714 = Hot gas SW - Reset in hh:mm +channel-type.luxtronikheatpump.errorCodeX.state.option.715 = High-pressure switch-off - RESET automatic +channel-type.luxtronikheatpump.errorCodeX.state.option.716 = High-pressure fault - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.717 = Flow HS - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.718 = Max. outside temp. - reset automatic +channel-type.luxtronikheatpump.errorCodeX.state.option.719 = Min. outside temp. - reset automatic +channel-type.luxtronikheatpump.errorCodeX.state.option.720 = HS temperature - reset automatic in hh:mm +channel-type.luxtronikheatpump.errorCodeX.state.option.721 = Low-pressure switch-off - reset automatic +channel-type.luxtronikheatpump.errorCodeX.state.option.722 = Tempdiff HW - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.723 = Tempdiff SW - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.724 = Tempdiff defrosting - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.725 = System error DHW - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.726 = Sensor mixing circ 1 - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.727 = Brine pressure - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.728 = Sensor HS Off - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.729 = Rotating field error - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.730 = Screed heating error - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.731 = Timeout TDI +channel-type.luxtronikheatpump.errorCodeX.state.option.732 = Cooling fault - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.733 = Anode fault - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.734 = Anode fault - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.735 = Error Ext. En - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.736 = Error solar collector - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.737 = Error solar tank - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.738 = Error mixing circle 2 - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.739 = Error mixing circle 3 - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.750 = Return sensor external - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.751 = Phase monitoring fault +channel-type.luxtronikheatpump.errorCodeX.state.option.752 = Flow error +channel-type.luxtronikheatpump.errorCodeX.state.option.755 = Lost connection to slave - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.756 = Lost connection to master - Please call fitter +channel-type.luxtronikheatpump.errorCodeX.state.option.757 = Low-pressure fault in W/W-appliance +channel-type.luxtronikheatpump.errorCodeX.state.option.758 = Defrosting malfunction +channel-type.luxtronikheatpump.errorCodeX.state.option.759 = TDI Message +channel-type.luxtronikheatpump.errorCodeX.state.option.760 = Defrosting fault +channel-type.luxtronikheatpump.errorCodeX.state.option.761 = LIN timeout +channel-type.luxtronikheatpump.errorCodeX.state.option.762 = Sensor evaporator intake +channel-type.luxtronikheatpump.errorCodeX.state.option.763 = Sensor compressor intake +channel-type.luxtronikheatpump.errorCodeX.state.option.764 = Sensor compressor heater +channel-type.luxtronikheatpump.errorCodeX.state.option.765 = Overheating +channel-type.luxtronikheatpump.errorCodeX.state.option.766 = Compressors functional range +channel-type.luxtronikheatpump.errorCodeX.state.option.767 = STB E-Rod +channel-type.luxtronikheatpump.errorCodeX.state.option.768 = Flow monitoring +channel-type.luxtronikheatpump.errorCodeX.state.option.769 = Pump control +channel-type.luxtronikheatpump.errorCodeX.state.option.770 = Low superheat +channel-type.luxtronikheatpump.errorCodeX.state.option.771 = High superheat +channel-type.luxtronikheatpump.errorCodeX.state.option.776 = limit of application-CP +channel-type.luxtronikheatpump.errorCodeX.state.option.777 = Expansion valve +channel-type.luxtronikheatpump.errorCodeX.state.option.778 = Low pressure sensor +channel-type.luxtronikheatpump.errorCodeX.state.option.779 = High pressure sensor +channel-type.luxtronikheatpump.errorCodeX.state.option.780 = EVI sensor +channel-type.luxtronikheatpump.errorCodeX.state.option.781 = Liquid temp. sensor before EXV +channel-type.luxtronikheatpump.errorCodeX.state.option.782 = Suction gas EVI temp. sensor +channel-type.luxtronikheatpump.errorCodeX.state.option.783 = Communication SEC board - Inverter +channel-type.luxtronikheatpump.errorCodeX.state.option.784 = VSS lockdown +channel-type.luxtronikheatpump.errorCodeX.state.option.785 = SEC-Board defective +channel-type.luxtronikheatpump.errorCodeX.state.option.786 = Communication SEC board - Inverter +channel-type.luxtronikheatpump.errorCodeX.state.option.787 = VD alert +channel-type.luxtronikheatpump.errorCodeX.state.option.788 = Major VSS fault +channel-type.luxtronikheatpump.errorCodeX.state.option.789 = LIN/Encoding not found +channel-type.luxtronikheatpump.errorCodeX.state.option.790 = Major VSS fault +channel-type.luxtronikheatpump.errorCodeX.state.option.791 = ModBus Inverter +channel-type.luxtronikheatpump.errorCodeX.state.option.792 = LIN-connection lost +channel-type.luxtronikheatpump.errorCodeX.state.option.793 = Inverter Temperature +channel-type.luxtronikheatpump.errorCodeX.state.option.794 = Overvoltage +channel-type.luxtronikheatpump.errorCodeX.state.option.795 = Undervoltage +channel-type.luxtronikheatpump.errorCodeX.state.option.796 = Safety switch off +channel-type.luxtronikheatpump.errorCodeX.state.option.797 = MLRH is not supported +channel-type.luxtronikheatpump.errorCodeX.state.option.798 = ModBus Fan +channel-type.luxtronikheatpump.errorCodeX.state.option.799 = ModBus ASB +channel-type.luxtronikheatpump.errorCodeX.state.option.800 = Desuperheater-error +channel-type.luxtronikheatpump.errorCodeX.state.option.802 = Switchbox fan +channel-type.luxtronikheatpump.errorCodeX.state.option.803 = Switchbox fan +channel-type.luxtronikheatpump.errorCodeX.state.option.806 = ModBus SEC +channel-type.luxtronikheatpump.errorCodeX.state.option.807 = Lost ModBus communication diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump_de.properties b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump_de.properties new file mode 100644 index 00000000000..b1b32f6ff61 --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/i18n/luxtronikheatpump_de.properties @@ -0,0 +1,395 @@ +# binding +binding.luxtronikheatpump.name = Luxtronik Wärmepumpen Binding +binding.luxtronikheatpump.description = Dieses Binding integriert Wärmepumpen mit einer Luxtronik-Steuerung. + +# thing types +thing-type.luxtronikheatpump.heatpump.label = Luxtronik Wärmepumpe +thing-type.luxtronikheatpump.heatpump.description = Integriert eine Wärmepumpe mit einer Luxtronik-Steuerung. + +# thing type configuration +thing-type.config.luxtronikheatpump.heatpump.ipAddress.label = IP Adresse +thing-type.config.luxtronikheatpump.heatpump.ipAddress.description = IP Adresse der Wärmepumpe +thing-type.config.luxtronikheatpump.heatpump.port.label = Port +thing-type.config.luxtronikheatpump.heatpump.port.description = Port der zum Aufbau einer Verbindung zur Wärmepumpe verwendet werden soll. Standardwert ist 8889. Für Wärmepumpen mit einer Firmware version vor V1.73 muss der Port 8888 verwendet werden. +thing-type.config.luxtronikheatpump.heatpump.refresh.label = Aktualisierungsintervall +thing-type.config.luxtronikheatpump.heatpump.refresh.description = Aktualisierungsintervall in Sekunden. Standardwert ist 300 +thing-type.config.luxtronikheatpump.heatpump.showAllChannels.label = Zeige auch nicht verfügbare Kanäle +thing-type.config.luxtronikheatpump.heatpump.showAllChannels.description = Kanäle die auf einer Wärmepumpe nicht verfügbar sind werden standardmäßig ausgeblendet. + +# channel types +channel-type.luxtronikheatpump.temperatureHeatingCircuitFlow.label = Vorlauftemp. Heizkreis +channel-type.luxtronikheatpump.temperatureHeatingCircuitReturn.label = Rücklauftemp. Heizkreis +channel-type.luxtronikheatpump.temperatureHeatingCircuitReturnTarget.label = Rücklauf-Soll Heizkreis +channel-type.luxtronikheatpump.temperatureBufferTankReturn.label = Rücklauftemp. im Trennspeicher +channel-type.luxtronikheatpump.temperatureHotGas.label = Heißgastemp. +channel-type.luxtronikheatpump.temperatureOutside.label = Außentemp. +channel-type.luxtronikheatpump.temperatureOutsideMean.label = Durchschnittstemp. Außen über 24 h (Funktion Heizgrenze) +channel-type.luxtronikheatpump.temperatureHotWater.label = Warmwasser Ist-Temp. +channel-type.luxtronikheatpump.temperatureHotWaterTarget.label = Warmwasser Soll-Temp. +channel-type.luxtronikheatpump.temperatureHeatSourceInlet.label = Wärmequellen-Eintrittstemp. +channel-type.luxtronikheatpump.temperatureHeatSourceOutlet.label = Wärmequellen-Austrittstemp. +channel-type.luxtronikheatpump.temperatureMixingCircuit1Flow.label = Mischkreis 1 Vorlauftemp. +channel-type.luxtronikheatpump.temperatureMixingCircuit1FlowTarget.label = Mischkreis 1 Vorlauf-Soll-Temp. +channel-type.luxtronikheatpump.temperatureRoomStation.label = Raumtemp. Raumstation 1 +channel-type.luxtronikheatpump.temperatureMixingCircuit2Flow.label = Mischkreis 2 Vorlauftemp. +channel-type.luxtronikheatpump.temperatureMixingCircuit2FlowTarget.label = Mischkreis 2 Vorlauf-Soll-Temp. +channel-type.luxtronikheatpump.temperatureSolarCollector.label = Fühler Solarkollektor +channel-type.luxtronikheatpump.temperatureSolarTank.label = Fühler Solarspeicher +channel-type.luxtronikheatpump.temperatureExternalEnergySource.label = Fühler externe Energiequelle +channel-type.luxtronikheatpump.inputASD.label = Eingang "Abtauende, Soledruck, Durchfluss" +channel-type.luxtronikheatpump.inputHotWaterThermostat.label = Eingang "Brauchwarmwasserthermostat" +channel-type.luxtronikheatpump.inputUtilityLock.label = Eingang "EVU-Sperre" +channel-type.luxtronikheatpump.inputHighPressureCoolingCircuit.label = Eingang "Hochdruck Kältekreis" +channel-type.luxtronikheatpump.inputMotorProtectionOK.label = Eingang "Motorschutz OK" +channel-type.luxtronikheatpump.inputLowPressure.label = Eingang "Niederdruck" +channel-type.luxtronikheatpump.inputPEX.label = Eingang "Überwachungskontakt für Potentiostat" +channel-type.luxtronikheatpump.inputSwimmingPoolThermostat.label = Eingang "Schwimmbadthermostat" +channel-type.luxtronikheatpump.outputDefrostValve.label = Ausgang "Abtauventil" +channel-type.luxtronikheatpump.outputBUP.label = Ausgang "Brauchwasserpumpe/Umstellventil" +channel-type.luxtronikheatpump.outputHeatingCirculationPump.label = Ausgang "Heizungsumwälzpumpe" +channel-type.luxtronikheatpump.outputMixingCircuit1Open.label = Ausgang "Mischkreis 1 Auf" +channel-type.luxtronikheatpump.outputMixingCircuit1Closed.label = Ausgang "Mischkreis 1 Zu" +channel-type.luxtronikheatpump.outputVentilation.label = Ausgang "Ventilation (Lüftung)" +channel-type.luxtronikheatpump.outputVBO.label = Ausgang "Solepumpe/Ventilator" +channel-type.luxtronikheatpump.outputCompressor1.label = Ausgang "Verdichter 1" +channel-type.luxtronikheatpump.outputCompressor2.label = Ausgang "Verdichter 2" +channel-type.luxtronikheatpump.outputCirculationPump.label = Ausgang "Zirkulationspumpe" +channel-type.luxtronikheatpump.outputZUP.label = Ausgang "Zusatzumwälzpumpe" +channel-type.luxtronikheatpump.outputControlSignalAdditionalHeating.label = Ausgang "Steuersignal Zusatzheizung v. Heizung" +channel-type.luxtronikheatpump.outputFaultSignalAdditionalHeating.label = Ausgang "Steuersignal Zusatzheizung/Störsignal" +channel-type.luxtronikheatpump.outputAuxiliaryHeater3.label = Ausgang "Zusatzheizung 3" +channel-type.luxtronikheatpump.outputMixingCircuitPump2.label = Ausgang "Pumpe Mischkreis 2" +channel-type.luxtronikheatpump.outputSolarChargePump.label = Ausgang "Solarladepumpe" +channel-type.luxtronikheatpump.outputSwimmingPoolPump.label = Ausgang "Schwimmbadpumpe" +channel-type.luxtronikheatpump.outputMixingCircuit2Closed.label = Ausgang "Mischkreis 2 Zu" +channel-type.luxtronikheatpump.outputMixingCircuit2Open.label = Ausgang "Mischkreis 2 Auf" +channel-type.luxtronikheatpump.runtimeTotalCompressor1.label = Betriebszeit Verdichter 1 +channel-type.luxtronikheatpump.pulsesCompressor1.label = Impulse Verdichter 1 +channel-type.luxtronikheatpump.runtimeTotalCompressor2.label = Betriebszeit Verdichter 2 +channel-type.luxtronikheatpump.pulsesCompressor2.label = Impulse Verdichter 2 +channel-type.luxtronikheatpump.runtimeTotalSecondHeatGenerator1.label = Betriebszeit Zweiter Wärmeerzeuger 1 +channel-type.luxtronikheatpump.runtimeTotalSecondHeatGenerator2.label = Betriebszeit Zweiter Wärmeerzeuger 2 +channel-type.luxtronikheatpump.runtimeTotalSecondHeatGenerator3.label = Betriebszeit Zweiter Wärmeerzeuger 3 +channel-type.luxtronikheatpump.runtimeTotalHeatPump.label = Betriebszeit Wärmepumpe +channel-type.luxtronikheatpump.runtimeTotalHeating.label = Betriebszeit Heizung +channel-type.luxtronikheatpump.runtimeTotalHotWater.label = Betriebszeit Warmwasser +channel-type.luxtronikheatpump.runtimeTotalCooling.label = Betriebszeit Kühlung +channel-type.luxtronikheatpump.runtimeCurrentHeatPump.label = Wärmepumpe läuft seit +channel-type.luxtronikheatpump.runtimeCurrentSecondHeatGenerator1.label = Zweiter Wärmeerzeuger 1 läuft seit +channel-type.luxtronikheatpump.runtimeCurrentSecondHeatGenerator2.label = Zweiter Wärmeerzeuger 2 läuft seit +channel-type.luxtronikheatpump.mainsOnDelay.label = Netzeinschaltverzögerung +channel-type.luxtronikheatpump.switchingCycleLockOff.label = Schaltspielsperre Aus +channel-type.luxtronikheatpump.switchingCycleLockOn.label = Schaltspielsperre Ein +channel-type.luxtronikheatpump.compressorIdleTime.label = Verdichter-Standzeit +channel-type.luxtronikheatpump.heatingControllerMoreTime.label = Heizungsregler Mehr-Zeit +channel-type.luxtronikheatpump.heatingControllerLessTime.label = Heizungsregler Weniger-Zeit +channel-type.luxtronikheatpump.runtimeCurrentThermalDisinfection.label = Thermische Desinfektion läuft seit +channel-type.luxtronikheatpump.timeHotWaterLock.label = Sperre Warmwasser +channel-type.luxtronikheatpump.bivalenceStage.label = Bivalenzstufe +channel-type.luxtronikheatpump.bivalenceStage.state.option.1 = ein Verdichter darf laufen +channel-type.luxtronikheatpump.bivalenceStage.state.option.2 = zwei Verdichter dürfen laufen +channel-type.luxtronikheatpump.bivalenceStage.state.option.3 = zusätzlicher Wärmeerzeuger darf mitlaufen +channel-type.luxtronikheatpump.operatingStatus.label = Betriebszustand +channel-type.luxtronikheatpump.operatingStatus.state.option.0 = Heizen +channel-type.luxtronikheatpump.operatingStatus.state.option.1 = Warmwasser +channel-type.luxtronikheatpump.operatingStatus.state.option.2 = Schwimmbad / Photovoltaik +channel-type.luxtronikheatpump.operatingStatus.state.option.3 = EVU-Sperre +channel-type.luxtronikheatpump.operatingStatus.state.option.4 = Abtauen +channel-type.luxtronikheatpump.operatingStatus.state.option.5 = Keine Anforderung +channel-type.luxtronikheatpump.operatingStatus.state.option.6 = Heizen ext. Energiequelle +channel-type.luxtronikheatpump.operatingStatus.state.option.7 = Kühlbetrieb +channel-type.luxtronikheatpump.errorTime0.label = Zeitstempel Fehler 0 im Speicher +channel-type.luxtronikheatpump.errorTime1.label = Zeitstempel Fehler 1 im Speicher +channel-type.luxtronikheatpump.errorTime2.label = Zeitstempel Fehler 2 im Speicher +channel-type.luxtronikheatpump.errorTime3.label = Zeitstempel Fehler 3 im Speicher +channel-type.luxtronikheatpump.errorTime4.label = Zeitstempel Fehler 4 im Speicher +channel-type.luxtronikheatpump.errorCode0.label = Fehlercode Fehler 0 im Speicher +channel-type.luxtronikheatpump.errorCode1.label = Fehlercode Fehler 1 im Speicher +channel-type.luxtronikheatpump.errorCode2.label = Fehlercode Fehler 2 im Speicher +channel-type.luxtronikheatpump.errorCode3.label = Fehlercode Fehler 3 im Speicher +channel-type.luxtronikheatpump.errorCode4.label = Fehlercode Fehler 4 im Speicher +channel-type.luxtronikheatpump.errorCountInMemory.label = Anzahl der Fehler im Speicher +channel-type.luxtronikheatpump.shutdownReason0.label = Grund Abschaltung 0 im Speicher +channel-type.luxtronikheatpump.shutdownReason1.label = Grund Abschaltung 1 im Speicher +channel-type.luxtronikheatpump.shutdownReason2.label = Grund Abschaltung 2 im Speicher +channel-type.luxtronikheatpump.shutdownReason3.label = Grund Abschaltung 3 im Speicher +channel-type.luxtronikheatpump.shutdownReason4.label = Grund Abschaltung 4 im Speicher +channel-type.luxtronikheatpump.shutdownTime0.label = Zeitstempel Abschaltung 0 im Speicher +channel-type.luxtronikheatpump.shutdownTime1.label = Zeitstempel Abschaltung 1 im Speicher +channel-type.luxtronikheatpump.shutdownTime2.label = Zeitstempel Abschaltung 2 im Speicher +channel-type.luxtronikheatpump.shutdownTime3.label = Zeitstempel Abschaltung 3 im Speicher +channel-type.luxtronikheatpump.shutdownTime4.label = Zeitstempel Abschaltung 4 im Speicher +channel-type.luxtronikheatpump.comfortBoardInstalled.label = Comfort Platine installiert +channel-type.luxtronikheatpump.menuStateLine.label = Status +channel-type.luxtronikheatpump.menuStateLine1.label = Status Zeile 1 +channel-type.luxtronikheatpump.menuStateLine1.state.option.0 = Wärmepumpe läuft +channel-type.luxtronikheatpump.menuStateLine1.state.option.1 = Wärmepumpe steht +channel-type.luxtronikheatpump.menuStateLine1.state.option.2 = Wärmepumpe kommt +channel-type.luxtronikheatpump.menuStateLine1.state.option.3 = Fehlercode Speicherplatz 0 +channel-type.luxtronikheatpump.menuStateLine1.state.option.4 = Abtauen +channel-type.luxtronikheatpump.menuStateLine1.state.option.5 = Warte auf LIN-Verbindung +channel-type.luxtronikheatpump.menuStateLine1.state.option.6 = Verdichter heizt auf +channel-type.luxtronikheatpump.menuStateLine1.state.option.7 = Pumpenvorlauf +channel-type.luxtronikheatpump.menuStateLine2.label = Status Zeile 2 +channel-type.luxtronikheatpump.menuStateLine2.state.option.0 = seit +channel-type.luxtronikheatpump.menuStateLine2.state.option.1 = in +channel-type.luxtronikheatpump.menuStateLine3.label = Status Zeile 3 +channel-type.luxtronikheatpump.menuStateLine3.state.option.0 = Heizbetrieb +channel-type.luxtronikheatpump.menuStateLine3.state.option.1 = Keine Anforderung +channel-type.luxtronikheatpump.menuStateLine3.state.option.2 = Netz-Einschaltverzögerung +channel-type.luxtronikheatpump.menuStateLine3.state.option.3 = Schaltspielsperre +channel-type.luxtronikheatpump.menuStateLine3.state.option.4 = Sperrzeit +channel-type.luxtronikheatpump.menuStateLine3.state.option.5 = Brauchwasser +channel-type.luxtronikheatpump.menuStateLine3.state.option.6 = Info Ausheizprogramm +channel-type.luxtronikheatpump.menuStateLine3.state.option.7 = Abtauen +channel-type.luxtronikheatpump.menuStateLine3.state.option.8 = Pumpenvorlauf +channel-type.luxtronikheatpump.menuStateLine3.state.option.9 = Thermische Desinfektion +channel-type.luxtronikheatpump.menuStateLine3.state.option.10 = Kühlbetrieb +channel-type.luxtronikheatpump.menuStateLine3.state.option.12 = Schwimmbad / Photovoltaik +channel-type.luxtronikheatpump.menuStateLine3.state.option.13 = Heizen ext. Energiequelle +channel-type.luxtronikheatpump.menuStateLine3.state.option.14 = Brauchwasser ext. Energiequelle +channel-type.luxtronikheatpump.menuStateLine3.state.option.16 = Durchflussüberachung +channel-type.luxtronikheatpump.menuStateLine3.state.option.17 = Zweiter Wärmeerzeuger 1 Betrieb +channel-type.luxtronikheatpump.menuStateTime.label = Status Zeit Zeile 2 +channel-type.luxtronikheatpump.bakeoutProgramStage.label = Stufe Ausheizprogramm +channel-type.luxtronikheatpump.bakeoutProgramTemperature.label = Temp. Ausheizprogramm +channel-type.luxtronikheatpump.bakeoutProgramTime.label = Laufzeit Ausheizprogramm +channel-type.luxtronikheatpump.iconHotWater.label = Brauchwasser aktiv/inaktiv Symbol +channel-type.luxtronikheatpump.iconHeater.label = Heizung Symbol +channel-type.luxtronikheatpump.iconMixingCircuit1.label = Mischkreis 1 Symbol +channel-type.luxtronikheatpump.iconMixingCircuit2.label = Mischkreis 2 Symbol +channel-type.luxtronikheatpump.shortProgramSetting.label = Einstellung Kurzprogramm +channel-type.luxtronikheatpump.statusSlave1.label = Status Slave 1 +channel-type.luxtronikheatpump.statusSlave2.label = Status Slave 2 +channel-type.luxtronikheatpump.statusSlave3.label = Status Slave 3 +channel-type.luxtronikheatpump.statusSlave4.label = Status Slave 4 +channel-type.luxtronikheatpump.statusSlave5.label = Status Slave 5 +channel-type.luxtronikheatpump.currentTimestamp.label = Aktuelle Zeit der Wärmepumpe +channel-type.luxtronikheatpump.iconMixingCircuit3.label = Mischkreis 3 Symbol +channel-type.luxtronikheatpump.temperatureMixingCircuit3FlowTarget.label = Mischkreis 3 Vorlauf-Soll-Temp. +channel-type.luxtronikheatpump.temperatureMixingCircuit3Flow.label = Mischkreis 3 Vorlauftemp. +channel-type.luxtronikheatpump.outputMixingCircuit3Close.label = Ausgang "Mischkreis 3 Zu" +channel-type.luxtronikheatpump.outputMixingCircuit3Open.label = Ausgang "Mischkreis 3 Auf" +channel-type.luxtronikheatpump.outputMixingCircuitPump3.label = Pumpe Mischkreis 3 +channel-type.luxtronikheatpump.timeUntilDefrost.label = Zeit bis Abtauen +channel-type.luxtronikheatpump.temperatureRoomStation2.label = Raumtemp. Raumstation 2 +channel-type.luxtronikheatpump.temperatureRoomStation3.label = Raumtemp. Raumstation 3 +channel-type.luxtronikheatpump.iconTimeSwitchSwimmingPool.label = Schaltuhr-Schwimmbad-Symbol +channel-type.luxtronikheatpump.runtimeTotalSwimmingPool.label = Betriebszeit Schwimmbad +channel-type.luxtronikheatpump.coolingRelease.label = Freigabe Kühlung +channel-type.luxtronikheatpump.inputAnalog.label = Analoges Eingangssignal +channel-type.luxtronikheatpump.iconCirculationPump.label = Zirkulationspumpensymbol +channel-type.luxtronikheatpump.heatMeterHeating.label = Wärmemengenzähler Heizung +channel-type.luxtronikheatpump.heatMeterHotWater.label = Wärmemengenzähler Brauchwasser +channel-type.luxtronikheatpump.heatMeterSwimmingPool.label = Wärmemengenzähler Schwimmbad +channel-type.luxtronikheatpump.heatMeterTotalSinceReset.label = Wärmemengenzähler Gesamt (seit Reset) +channel-type.luxtronikheatpump.heatMeterFlowRate.label = Wärmemengenzähler Durchfluss +channel-type.luxtronikheatpump.outputAnalog1.label = Analog Ausgang 1 +channel-type.luxtronikheatpump.outputAnalog2.label = Analog Ausgang 2 +channel-type.luxtronikheatpump.timeLockSecondHotGasCompressor.label = Sperre zweiter Verdichter Heißgas +channel-type.luxtronikheatpump.temperatureSupplyAir.label = Zulufttemp. +channel-type.luxtronikheatpump.temperatureExhaustAir.label = Ablufttemp. +channel-type.luxtronikheatpump.runtimeTotalSolar.label = Betriebszeit Solar +channel-type.luxtronikheatpump.outputAnalog3.label = Analog Ausgang 3 +channel-type.luxtronikheatpump.outputAnalog4.label = Analog Ausgang 4 +channel-type.luxtronikheatpump.outputSupplyAirFan.label = Zuluft Ventilator (Abtaufunktion) +channel-type.luxtronikheatpump.outputExhaustFan.label = Abluft Ventilator +channel-type.luxtronikheatpump.outputVSK.label = Ausgang VSK +channel-type.luxtronikheatpump.outputFRH.label = Ausgang FRH +channel-type.luxtronikheatpump.inputAnalog2.label = Analog Eingang 2 +channel-type.luxtronikheatpump.inputAnalog3.label = Analog Eingang 3 +channel-type.luxtronikheatpump.inputSAX.label = Eingang SAX +channel-type.luxtronikheatpump.inputSPL.label = Eingang SPL +channel-type.luxtronikheatpump.ventilationBoardInstalled.label = Lüftungsplatine verbaut +channel-type.luxtronikheatpump.flowRateHeatSource.label = Durchfluss Wärmequelle +channel-type.luxtronikheatpump.linBusInstalled.label = LIN BUS verbaut +channel-type.luxtronikheatpump.temperatureSuctionEvaporator.label = Temp. Ansaug Verdampfer +channel-type.luxtronikheatpump.temperatureSuctionCompressor.label = Temp. Ansaug Verdichter +channel-type.luxtronikheatpump.temperatureCompressorHeating.label = Temp. Verdichter Heizung +channel-type.luxtronikheatpump.temperatureOverheating.label = Überhitzung +channel-type.luxtronikheatpump.temperatureOverheatingTarget.label = Überhitzung Soll +channel-type.luxtronikheatpump.highPressure.label = Hochdruck +channel-type.luxtronikheatpump.lowPressure.label = Niederdruck +channel-type.luxtronikheatpump.outputCompressorHeating.label = Ausgang Verdichterheizung +channel-type.luxtronikheatpump.controlSignalCirculatingPump.label = Steuersignal Umwälzpumpe +channel-type.luxtronikheatpump.fanSpeed.label = Ventilatordrehzahl +channel-type.luxtronikheatpump.temperatureSafetyLimitFloorHeating.label = Sicherheits-Temp.-Begrenzer Fußbodenheizung +channel-type.luxtronikheatpump.powerTargetValue.label = Leistung Sollwert +channel-type.luxtronikheatpump.powerActualValue.label = Leistung Istwert +channel-type.luxtronikheatpump.temperatureFlowTarget.label = Temp. Vorlauf Soll +channel-type.luxtronikheatpump.operatingStatusSECBoard.label = Betriebszustand SEC Board +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option0 = Aus +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option1 = Kühlung +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option2 = Heizung +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option3 = Störung +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option4 = Übergang +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option5 = Abtauen +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option6 = Warte +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option7 = Warte +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option8 = Übergang +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option9 = Stop +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option10 = Manuell +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option11 = Simulation Start +channel-type.luxtronikheatpump.operatingStatusSECBoard.state.option12 = EVU-Sperre +channel-type.luxtronikheatpump.fourWayValve.label = Vierwegeventil +channel-type.luxtronikheatpump.compressorSpeed.label = Verdichterdrehzahl +channel-type.luxtronikheatpump.temperatureCompressorEVI.label = Verdichtertemp. EVI (Enhanced Vapour Injection) +channel-type.luxtronikheatpump.temperatureIntakeEVI.label = Ansaugtemp. EVI +channel-type.luxtronikheatpump.temperatureOverheatingEVI.label = Überhitzung EVI +channel-type.luxtronikheatpump.temperatureOverheatingTargetEVI.label = Überhitzung EVI Sollwert +channel-type.luxtronikheatpump.temperatureCondensation.label = Kondensationstemp. +channel-type.luxtronikheatpump.temperatureLiquidEEV.label = Flüssigtemp. EEV (elektronisches Expansionsventil) +channel-type.luxtronikheatpump.temperatureHypothermiaEEV.label = Unterkühlung EEV +channel-type.luxtronikheatpump.pressureEVI.label = Druck EVI +channel-type.luxtronikheatpump.voltageInverter.label = Spannung Inverter +channel-type.luxtronikheatpump.temperatureHotGas2.label = Temp.-Fühler Heißgas 2 +channel-type.luxtronikheatpump.temperatureHeatSourceInlet2.label = Temp.-Fühler Wärmequelleneintritt 2 +channel-type.luxtronikheatpump.temperatureIntakeEvaporator2.label = Ansaugtemp. Verdampfer 2 +channel-type.luxtronikheatpump.temperatureIntakeCompressor2.label = Ansaugtemp. Verdichter 2 +channel-type.luxtronikheatpump.temperatureCompressor2Heating.label = Temp. Verdichter 2 Heizung +channel-type.luxtronikheatpump.temperatureOverheating2.label = Überhitzung 2 +channel-type.luxtronikheatpump.temperatureOverheatingTarget2.label = Überhitzung Soll 2 +channel-type.luxtronikheatpump.highPressure2.label = Hochdruck 2 +channel-type.luxtronikheatpump.lowPressure2.label = Niederdruck 2 +channel-type.luxtronikheatpump.inputSwitchHighPressure2.label = Eingang Druckschalter Hochdruck 2 +channel-type.luxtronikheatpump.outputDefrostValve2.label = Ausgang Abtauventil 2 +channel-type.luxtronikheatpump.outputVBO2.label = Ausgang Solepumpe/Ventilator 2 +channel-type.luxtronikheatpump.outputCompressor1_2.label = Ausgang Verdichter 1 / 2 +channel-type.luxtronikheatpump.outputCompressorHeating2.label = Ausgang Verdichter Heizung 2 +channel-type.luxtronikheatpump.secondShutdownReason0.label = Grund Abschaltung 0 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownReason1.label = Grund Abschaltung 1 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownReason2.label = Grund Abschaltung 2 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownReason3.label = Grund Abschaltung 3 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownReason4.label = Grund Abschaltung 4 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownTime0.label = Zeitstempel Abschaltung 0 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownTime1.label = Zeitstempel Abschaltung 1 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownTime2.label = Zeitstempel Abschaltung 2 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownTime3.label = Zeitstempel Abschaltung 3 im Speicher 2 +channel-type.luxtronikheatpump.secondShutdownTime4.label = Zeitstempel Abschaltung 4 im Speicher 2 +channel-type.luxtronikheatpump.temperatureRoom.label = Raumtemp. Istwert +channel-type.luxtronikheatpump.temperatureRoomTarget.label = Raumtemp. Sollwert +channel-type.luxtronikheatpump.temperatureHotWaterTop.label = Temp. Brauchwasser Oben +channel-type.luxtronikheatpump.frequencyCompressor.label = Verdichterfrequenz +channel-type.luxtronikheatpump.temperatureHeatingParallelShift.label = Heizung Temp. (Parallelverschiebung) +channel-type.luxtronikheatpump.heatingMode.label = Heizung Betriebsart +channel-type.luxtronikheatpump.hotWaterMode.label = Warmwasser Betriebsart +channel-type.luxtronikheatpump.thermalDisinfectionMonday.label = Thermische Desinfektion (Mo) +channel-type.luxtronikheatpump.thermalDisinfectionTuesday.label = Thermische Desinfektion (Di) +channel-type.luxtronikheatpump.thermalDisinfectionWednesday.label = Thermische Desinfektion (Mi) +channel-type.luxtronikheatpump.thermalDisinfectionThursday.label = Thermische Desinfektion (Do) +channel-type.luxtronikheatpump.thermalDisinfectionFriday.label = Thermische Desinfektion (Fr) +channel-type.luxtronikheatpump.thermalDisinfectionSaturday.label = Thermische Desinfektion (Sa) +channel-type.luxtronikheatpump.thermalDisinfectionSunday.label = Thermische Desinfektion (So) +channel-type.luxtronikheatpump.thermalDisinfectionPermanent.label = Thermische Desinfektion (Dauerbetrieb) +channel-type.luxtronikheatpump.comfortCoolingMode.label = Comfort Kühlung Betriebsart +channel-type.luxtronikheatpump.comfortCoolingMode.state.option.0 = Aus +channel-type.luxtronikheatpump.comfortCoolingMode.state.option.1 = Auto +channel-type.luxtronikheatpump.temperatureComfortCoolingATRelease.label = Comfort Kühlung AT-Freigabe +channel-type.luxtronikheatpump.temperatureComfortCoolingATReleaseTarget.label = Comfort Kühlung AT-Freigabe Sollwert +channel-type.luxtronikheatpump.comfortCoolingATExcess.label = AT-Überschreitung +channel-type.luxtronikheatpump.comfortCoolingATUndercut.label = AT-Unterschreitung + +channel-type.luxtronikheatpump.operationMode.state.option.0 = Auto +channel-type.luxtronikheatpump.operationMode.state.option.1 = Zuheizer +channel-type.luxtronikheatpump.operationMode.state.option.2 = Party +channel-type.luxtronikheatpump.operationMode.state.option.3 = Ferien +channel-type.luxtronikheatpump.operationMode.state.option.4 = Aus + +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.1 = Wärmepumpe Störung +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.2 = Anlagenstörung +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.3 = Betriebsart Zweiter Wärmeerzeuger +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.4 = EVU-Sperre +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.5 = Lauftabtau (nur LW-Geräte) +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.6 = Temperatur Einsatzgrenze maximal +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.7 = Temperatur Einsatzgrenze minimal +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.8 = Untere Einsatzgrenze +channel-type.luxtronikheatpump.SwitchoffX_file_NrX.state.option.9 = Keine Anforderung + +channel-type.luxtronikheatpump.errorCodeX.state.option.701 = Niederdruckstörung - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.702 = Niederdrucksperre - RESET automatisch +channel-type.luxtronikheatpump.errorCodeX.state.option.703 = Frostschutz - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.704 = Heißgasstörung - Reset in hh:mm +channel-type.luxtronikheatpump.errorCodeX.state.option.705 = Motorschutz VEN - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.706 = Motorschutz BSUP - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.707 = Kodierung Wärmepumpe - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.708 = Fühler Rücklauf - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.709 = Fühler Vorlauf - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.710 = Fühler Heißgas - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.711 = Fühler Außentemp. - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.712 = Fühler Trinkwarmwasser - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.713 = Fühler WQ-Eintritt - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.714 = Heißgas Warmwasser - Reset in hh:mm +channel-type.luxtronikheatpump.errorCodeX.state.option.715 = Hochdruck-Abschaltung - RESET automatisch +channel-type.luxtronikheatpump.errorCodeX.state.option.716 = Hochdruckstörung - Bitte Inst rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.717 = Durchfluss-WQ - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.718 = Maximale Außentemperatur - RESET automatisch +channel-type.luxtronikheatpump.errorCodeX.state.option.719 = Minimale Außentemperatur - RESET automatisch +channel-type.luxtronikheatpump.errorCodeX.state.option.720 = Minimale WQ-Temperatur - RESET automatisch in hh:mm +channel-type.luxtronikheatpump.errorCodeX.state.option.721 = Niederdruckabschaltung - RESET automatisch +channel-type.luxtronikheatpump.errorCodeX.state.option.722 = Temperaturdifferenz Heizwasser - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.723 = Temperaturdifferenz Warmwasser - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.724 = Temperaturdifferenz Abtauen - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.725 = Anlagenfehler Warmwasser - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.726 = Fühler Mischkreis 1 - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.727 = Soledruck - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.728 = Fühler WQ-Austritt - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.729 = Drehfeldfehler - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.730 = Leistung Ausheizen - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.731 = Zeitüberschreitung TDI +channel-type.luxtronikheatpump.errorCodeX.state.option.732 = Störung Kühlung - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.733 = Störung Anode - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.734 = Störung Anode - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.735 = Fühler Externe Energiequelle - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.736 = Fühler Solarkollektor - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.737 = Fühler Solarspeicher - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.738 = Fühler Mischkreis 2 - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.739 = Fühler Mischkreis 3 - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.750 = Fühler Rücklauf extern - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.751 = Phasenüberwachungsfehler +channel-type.luxtronikheatpump.errorCodeX.state.option.752 = Phasenüberwachungs- / Durchflussfehler +channel-type.luxtronikheatpump.errorCodeX.state.option.755 = Verbindung zu Slave verloren - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.756 = Verbindung zu Master verloren - Bitte Inst. rufen +channel-type.luxtronikheatpump.errorCodeX.state.option.757 = ND-Störung bei W/W-Gerät +channel-type.luxtronikheatpump.errorCodeX.state.option.758 = Störung Abtauung +channel-type.luxtronikheatpump.errorCodeX.state.option.759 = Meldung TDI +channel-type.luxtronikheatpump.errorCodeX.state.option.760 = Störung Abtauung +channel-type.luxtronikheatpump.errorCodeX.state.option.761 = LIN-Verbindung unterbrochen +channel-type.luxtronikheatpump.errorCodeX.state.option.762 = Fühler Ansaug-Verdichter +channel-type.luxtronikheatpump.errorCodeX.state.option.763 = Fühler Ansaug-Verdampfer +channel-type.luxtronikheatpump.errorCodeX.state.option.764 = Fühler Verdichterheizung +channel-type.luxtronikheatpump.errorCodeX.state.option.765 = Überhitzung +channel-type.luxtronikheatpump.errorCodeX.state.option.766 = Einsatzgrenzen-VD +channel-type.luxtronikheatpump.errorCodeX.state.option.767 = STB E-Stab +channel-type.luxtronikheatpump.errorCodeX.state.option.768 = Durchflussüberwachung +channel-type.luxtronikheatpump.errorCodeX.state.option.769 = Pumpenansteuerung +channel-type.luxtronikheatpump.errorCodeX.state.option.770 = Niedrige Überhitzung +channel-type.luxtronikheatpump.errorCodeX.state.option.771 = Hohe Überhitzung +channel-type.luxtronikheatpump.errorCodeX.state.option.776 = Einsatzgrenzen-VD +channel-type.luxtronikheatpump.errorCodeX.state.option.777 = Expansionsventil +channel-type.luxtronikheatpump.errorCodeX.state.option.778 = Fühler Niederdruck +channel-type.luxtronikheatpump.errorCodeX.state.option.779 = Fühler Hochdruck +channel-type.luxtronikheatpump.errorCodeX.state.option.780 = Fühler EVI +channel-type.luxtronikheatpump.errorCodeX.state.option.781 = Fühler Flüssig, vor Ex-Ventil +channel-type.luxtronikheatpump.errorCodeX.state.option.782 = Fühler EVI Sauggas +channel-type.luxtronikheatpump.errorCodeX.state.option.783 = Kommunikation SEC-Platine / Inverter +channel-type.luxtronikheatpump.errorCodeX.state.option.784 = VSS gesperrt +channel-type.luxtronikheatpump.errorCodeX.state.option.785 = SEC-Platine defekt +channel-type.luxtronikheatpump.errorCodeX.state.option.786 = Kommunikation SEC-Platine / Inverter +channel-type.luxtronikheatpump.errorCodeX.state.option.787 = VD Alarm +channel-type.luxtronikheatpump.errorCodeX.state.option.788 = Schwerw. Inverter Fehler +channel-type.luxtronikheatpump.errorCodeX.state.option.789 = LIN/Kodierung nicht vorhanden +channel-type.luxtronikheatpump.errorCodeX.state.option.790 = Schwerw. Inverter Fehler +channel-type.luxtronikheatpump.errorCodeX.state.option.791 = ModBus Inverter +channel-type.luxtronikheatpump.errorCodeX.state.option.792 = LIN-Verbindung unterbrochen +channel-type.luxtronikheatpump.errorCodeX.state.option.793 = Inverter Temperatur +channel-type.luxtronikheatpump.errorCodeX.state.option.794 = Überspannung +channel-type.luxtronikheatpump.errorCodeX.state.option.795 = Unterspannung +channel-type.luxtronikheatpump.errorCodeX.state.option.796 = Sicherheitsabschaltung +channel-type.luxtronikheatpump.errorCodeX.state.option.797 = MLRH wird nicht unterstützt +channel-type.luxtronikheatpump.errorCodeX.state.option.798 = ModBus Ventilator +channel-type.luxtronikheatpump.errorCodeX.state.option.799 = ModBus ASB +channel-type.luxtronikheatpump.errorCodeX.state.option.800 = Enthitzer-Fehler +channel-type.luxtronikheatpump.errorCodeX.state.option.802 = Ventilator Schaltkasten +channel-type.luxtronikheatpump.errorCodeX.state.option.803 = Ventilator Schaltkasten +channel-type.luxtronikheatpump.errorCodeX.state.option.806 = ModBus SEC +channel-type.luxtronikheatpump.errorCodeX.state.option.807 = ModBus Verbindung verloren diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/channels.xml b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/channels.xml new file mode 100644 index 00000000000..134311476dc --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/channels.xml @@ -0,0 +1,2078 @@ + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Number:Time + + Time + + + + + Number:Dimensionless + + + + + + Number:Time + + Time + + + + + Number:Dimensionless + + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + + Number + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + + Number + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + + Switch + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + + + + + + + + + Number:Time + + Time + + + + + String + + + + + + Number + + + + + + Number:Temperature + + Temperature + + + + + Number:Time + + Time + + + + + Switch + + + + + + Number + + + + + + Number + + + + + + Number + + + + + + Number + + + + + + Number + + + + + Number + + + + + Number + + + + + Number + + + + + Number + + + + + + DateTime + + Time + + + + + Number + + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Number:Time + + Time + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number + + + + + + Number:Time + + Time + + + + + Switch + + + + + + Number:ElectricPotential + + Energy + + + + + Number + + + + + + Number:Energy + + Energy + + + + + Number:Energy + + Energy + + + + + Number:Energy + + Energy + + + + + Number:Energy + + Energy + + + + + Number:VolumetricFlowRate + + Flow + + + + + Number:ElectricPotential + + Energy + + + + + Number:ElectricPotential + + Energy + + + + + Number:Time + + Time + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Time + + Time + + + + + Number:ElectricPotential + + Energy + + + + + Number:ElectricPotential + + Energy + + + + + Number:ElectricPotential + + Energy + + + + + Number:ElectricPotential + + Energy + + + + + Switch + + + + + + Switch + + + + + + Number:ElectricPotential + + Energy + + + + + Number:ElectricPotential + + Energy + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Number:VolumetricFlowRate + + Flow + + + + + Switch + + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Pressure + + Pressure + + + + + Number:Pressure + + Pressure + + + + + Switch + + + + + + Number:Energy + + Energy + + + + + Number + + Frequency + + + + + Switch + + + + + + Number:Energy + + Energy + + + + + Number:Energy + + Energy + + + + + Number:Temperature + + Temperature + + + + + Number + + + + + + + + + + + + + + + + + + + + + + Number + + + + + + Number + + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Pressure + + Pressure + + + + + Number:ElectricPotential + + Energy + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Pressure + + Pressure + + + + + Number:Pressure + + Pressure + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Switch + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + DateTime + + Time + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Frequency + + + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number + + + + + + + + + + + + + + Number + + + + + + + + + + + + + + Switch + + + + + Switch + + + + + Switch + + + + + Switch + + + + + Switch + + + + + Switch + + + + + Switch + + + + + Switch + + + + + Number + + + + + + + + + + + Number:Temperature + + Temperature + + + + + Number:Temperature + + Temperature + + + + + Number:Time + + Time + + + + + Number:Time + + Time + + + + diff --git a/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/thing-types.xml new file mode 100644 index 00000000000..d4589d1384a --- /dev/null +++ b/bundles/org.openhab.binding.luxtronikheatpump/src/main/resources/OH-INF/thing/thing-types.xml @@ -0,0 +1,259 @@ + + + + + Integrates a heatpump with a Luxtronik control. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + network-address + + IP address of the heat pump to connect to + + + + 8889 + Port number of the heat pump to connect to. Defaults to 8889. For heatpumps running firmware version + before V1.73, port 8888 needs to be used. + + + + 300 + s + Refresh inverval in seconds. Defaults to 300 + + + + false + By default channels that aren't supported are hidden. + + + + + + diff --git a/bundles/pom.xml b/bundles/pom.xml index bb91aa1cd92..7a0c0bd6403 100644 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -175,6 +175,7 @@ org.openhab.binding.loxone org.openhab.binding.luftdateninfo org.openhab.binding.lutron + org.openhab.binding.luxtronikheatpump org.openhab.binding.magentatv org.openhab.binding.mail org.openhab.binding.max