[LuxtronikHeatpump] Initial Contribution (#9669)

Signed-off-by: Stefan Giehl <stefangiehl@gmail.com>
This commit is contained in:
Stefan Giehl 2021-04-11 19:51:46 +02:00 committed by GitHub
parent d9ed461950
commit 4f018b8aec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 6327 additions and 0 deletions

View File

@ -144,6 +144,7 @@
/bundles/org.openhab.binding.loxone/ @ppieczul /bundles/org.openhab.binding.loxone/ @ppieczul
/bundles/org.openhab.binding.luftdateninfo/ @weymann /bundles/org.openhab.binding.luftdateninfo/ @weymann
/bundles/org.openhab.binding.lutron/ @actong @bobadair /bundles/org.openhab.binding.lutron/ @actong @bobadair
/bundles/org.openhab.binding.luxtronikheatpump/ @sgiehl
/bundles/org.openhab.binding.magentatv/ @markus7017 /bundles/org.openhab.binding.magentatv/ @markus7017
/bundles/org.openhab.binding.mail/ @openhab/add-ons-maintainers /bundles/org.openhab.binding.mail/ @openhab/add-ons-maintainers
/bundles/org.openhab.binding.max/ @marcelrv /bundles/org.openhab.binding.max/ @marcelrv

View File

@ -706,6 +706,11 @@
<artifactId>org.openhab.binding.lutron</artifactId> <artifactId>org.openhab.binding.lutron</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.binding.luxtronikheatpump</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.openhab.addons.bundles</groupId> <groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.binding.magentatv</artifactId> <artifactId>org.openhab.binding.magentatv</artifactId>

View File

@ -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

View File

@ -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" <temperature>
Number:Temperature HeatPump_Temp_Outside "Temperature outside [%.1f °C]" <temperature> (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureOutside" }
Number:Temperature HeatPump_Temp_Outside_Avg "Avg. temperature outside [%.1f °C]" <temperature> (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:temperatureOutsideMean" }
Number:Time HeatPump_Hours_Heatpump "Operating hours [%d h]" <clock> (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:runtimeTotalHeatPump" }
Number:Time HeatPump_Hours_Heating "Operating hours heating [%d h]" <clock> (gHeatpump) { channel="luxtronikheatpump:heatpump:heatpump:runtimeTotalHeating" }
Number:Time HeatPump_Hours_Warmwater "Operating hours hot water [%d h]" <clock> (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)

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.1.0-SNAPSHOT</version>
</parent>
<artifactId>org.openhab.binding.luxtronikheatpump</artifactId>
<name>openHAB Add-ons :: Bundles :: Luxtronik Heatpump Binding</name>
</project>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<features name="org.openhab.binding.luxtronikheatpump-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository>
<feature name="openhab-binding-luxtronikheatpump" description="LuxtronikHeatpump Binding" version="${project.version}">
<feature>openhab-runtime-base</feature>
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.luxtronikheatpump/${project.version}</bundle>
</feature>
</features>

View File

@ -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<? extends Item> 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;
}
}

View File

@ -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;
}
}

View File

@ -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");
}

View File

@ -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();
}
}

View File

@ -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<ScheduledFuture<?>> 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<Channel> 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;
}
}

View File

@ -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<ThingTypeUID> 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;
}
}

View File

@ -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);
}
}

View File

@ -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 + "'");
}
}

View File

@ -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 + "'");
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<binding:binding id="luxtronikheatpump" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:binding="https://openhab.org/schemas/binding/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/binding/v1.0.0 https://openhab.org/schemas/binding-1.0.0.xsd">
<name>Luxtronik Heatpump Binding</name>
<description>This is the binding for a Heatpump with Luxtronik control.</description>
</binding:binding>

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="luxtronikheatpump"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<thing-type id="heatpump">
<label>Heatpump with Luxtronik Control</label>
<description>Integrates a heatpump with a Luxtronik control.</description>
<channels>
<channel id="temperatureHeatingCircuitFlow" typeId="temperatureHeatingCircuitFlow"/>
<channel id="temperatureHeatingCircuitReturn" typeId="temperatureHeatingCircuitReturn"/>
<channel id="temperatureHeatingCircuitReturnTarget" typeId="temperatureHeatingCircuitReturnTarget"/>
<channel id="temperatureBufferTankReturn" typeId="temperatureBufferTankReturn"/>
<channel id="temperatureHotGas" typeId="temperatureHotGas"/>
<channel id="temperatureOutside" typeId="temperatureOutside"/>
<channel id="temperatureOutsideMean" typeId="temperatureOutsideMean"/>
<channel id="temperatureHotWater" typeId="temperatureHotWater"/>
<channel id="temperatureHotWaterTarget" typeId="temperatureHotWaterTarget"/>
<channel id="temperatureHeatSourceInlet" typeId="temperatureHeatSourceInlet"/>
<channel id="temperatureHeatSourceOutlet" typeId="temperatureHeatSourceOutlet"/>
<channel id="temperatureMixingCircuit1Flow" typeId="temperatureMixingCircuit1Flow"/>
<channel id="temperatureMixingCircuit1FlowTarget" typeId="temperatureMixingCircuit1FlowTarget"/>
<channel id="temperatureRoomStation" typeId="temperatureRoomStation"/>
<channel id="temperatureMixingCircuit2Flow" typeId="temperatureMixingCircuit2Flow"/>
<channel id="temperatureMixingCircuit2FlowTarget" typeId="temperatureMixingCircuit2FlowTarget"/>
<channel id="temperatureSolarCollector" typeId="temperatureSolarCollector"/>
<channel id="temperatureSolarTank" typeId="temperatureSolarTank"/>
<channel id="temperatureExternalEnergySource" typeId="temperatureExternalEnergySource"/>
<channel id="inputASD" typeId="inputASD"/>
<channel id="inputHotWaterThermostat" typeId="inputHotWaterThermostat"/>
<channel id="inputUtilityLock" typeId="inputUtilityLock"/>
<channel id="inputHighPressureCoolingCircuit" typeId="inputHighPressureCoolingCircuit"/>
<channel id="inputMotorProtectionOK" typeId="inputMotorProtectionOK"/>
<channel id="inputLowPressure" typeId="inputLowPressure"/>
<channel id="inputPEX" typeId="inputPEX"/>
<channel id="inputSwimmingPoolThermostat" typeId="inputSwimmingPoolThermostat"/>
<channel id="outputDefrostValve" typeId="outputDefrostValve"/>
<channel id="outputBUP" typeId="outputBUP"/>
<channel id="outputHeatingCirculationPump" typeId="outputHeatingCirculationPump"/>
<channel id="outputMixingCircuit1Open" typeId="outputMixingCircuit1Open"/>
<channel id="outputMixingCircuit1Closed" typeId="outputMixingCircuit1Closed"/>
<channel id="outputVentilation" typeId="outputVentilation"/>
<channel id="outputVBO" typeId="outputVBO"/>
<channel id="outputCompressor1" typeId="outputCompressor1"/>
<channel id="outputCompressor2" typeId="outputCompressor2"/>
<channel id="outputCirculationPump" typeId="outputCirculationPump"/>
<channel id="outputZUP" typeId="outputZUP"/>
<channel id="outputControlSignalAdditionalHeating" typeId="outputControlSignalAdditionalHeating"/>
<channel id="outputFaultSignalAdditionalHeating" typeId="outputFaultSignalAdditionalHeating"/>
<channel id="outputAuxiliaryHeater3" typeId="outputAuxiliaryHeater3"/>
<channel id="outputMixingCircuitPump2" typeId="outputMixingCircuitPump2"/>
<channel id="outputSolarChargePump" typeId="outputSolarChargePump"/>
<channel id="outputSwimmingPoolPump" typeId="outputSwimmingPoolPump"/>
<channel id="outputMixingCircuit2Closed" typeId="outputMixingCircuit2Closed"/>
<channel id="outputMixingCircuit2Open" typeId="outputMixingCircuit2Open"/>
<channel id="runtimeTotalCompressor1" typeId="runtimeTotalCompressor1"/>
<channel id="pulsesCompressor1" typeId="pulsesCompressor1"/>
<channel id="runtimeTotalCompressor2" typeId="runtimeTotalCompressor2"/>
<channel id="pulsesCompressor2" typeId="pulsesCompressor2"/>
<channel id="runtimeTotalSecondHeatGenerator1" typeId="runtimeTotalSecondHeatGenerator1"/>
<channel id="runtimeTotalSecondHeatGenerator2" typeId="runtimeTotalSecondHeatGenerator2"/>
<channel id="runtimeTotalSecondHeatGenerator3" typeId="runtimeTotalSecondHeatGenerator3"/>
<channel id="runtimeTotalHeatPump" typeId="runtimeTotalHeatPump"/>
<channel id="runtimeTotalHeating" typeId="runtimeTotalHeating"/>
<channel id="runtimeTotalHotWater" typeId="runtimeTotalHotWater"/>
<channel id="runtimeTotalCooling" typeId="runtimeTotalCooling"/>
<channel id="runtimeCurrentHeatPump" typeId="runtimeCurrentHeatPump"/>
<channel id="runtimeCurrentSecondHeatGenerator1" typeId="runtimeCurrentSecondHeatGenerator1"/>
<channel id="runtimeCurrentSecondHeatGenerator2" typeId="runtimeCurrentSecondHeatGenerator2"/>
<channel id="mainsOnDelay" typeId="mainsOnDelay"/>
<channel id="switchingCycleLockOff" typeId="switchingCycleLockOff"/>
<channel id="switchingCycleLockOn" typeId="switchingCycleLockOn"/>
<channel id="compressorIdleTime" typeId="compressorIdleTime"/>
<channel id="heatingControllerMoreTime" typeId="heatingControllerMoreTime"/>
<channel id="heatingControllerLessTime" typeId="heatingControllerLessTime"/>
<channel id="runtimeCurrentThermalDisinfection" typeId="runtimeCurrentThermalDisinfection"/>
<channel id="timeHotWaterLock" typeId="timeHotWaterLock"/>
<channel id="bivalenceStage" typeId="bivalenceStage"/>
<channel id="operatingStatus" typeId="operatingStatus"/>
<channel id="errorTime0" typeId="errorTime0"/>
<channel id="errorTime1" typeId="errorTime1"/>
<channel id="errorTime2" typeId="errorTime2"/>
<channel id="errorTime3" typeId="errorTime3"/>
<channel id="errorTime4" typeId="errorTime4"/>
<channel id="errorCode0" typeId="errorCode0"/>
<channel id="errorCode1" typeId="errorCode1"/>
<channel id="errorCode2" typeId="errorCode2"/>
<channel id="errorCode3" typeId="errorCode3"/>
<channel id="errorCode4" typeId="errorCode4"/>
<channel id="errorCountInMemory" typeId="errorCountInMemory"/>
<channel id="shutdownReason0" typeId="shutdownReason0"/>
<channel id="shutdownReason1" typeId="shutdownReason1"/>
<channel id="shutdownReason2" typeId="shutdownReason2"/>
<channel id="shutdownReason3" typeId="shutdownReason3"/>
<channel id="shutdownReason4" typeId="shutdownReason4"/>
<channel id="shutdownTime0" typeId="shutdownTime0"/>
<channel id="shutdownTime1" typeId="shutdownTime1"/>
<channel id="shutdownTime2" typeId="shutdownTime2"/>
<channel id="shutdownTime3" typeId="shutdownTime3"/>
<channel id="shutdownTime4" typeId="shutdownTime4"/>
<channel id="comfortBoardInstalled" typeId="comfortBoardInstalled"/>
<channel id="menuStateLine1" typeId="menuStateLine1"/>
<channel id="menuStateLine2" typeId="menuStateLine2"/>
<channel id="menuStateLine3" typeId="menuStateLine3"/>
<channel id="menuStateTime" typeId="menuStateTime"/>
<channel id="menuStateFull" typeId="menuStateFull"/>
<channel id="bakeoutProgramStage" typeId="bakeoutProgramStage"/>
<channel id="bakeoutProgramTemperature" typeId="bakeoutProgramTemperature"/>
<channel id="bakeoutProgramTime" typeId="bakeoutProgramTime"/>
<channel id="iconHotWater" typeId="iconHotWater"/>
<channel id="iconHeater" typeId="iconHeater"/>
<channel id="iconMixingCircuit1" typeId="iconMixingCircuit1"/>
<channel id="iconMixingCircuit2" typeId="iconMixingCircuit2"/>
<channel id="shortProgramSetting" typeId="shortProgramSetting"/>
<channel id="statusSlave1" typeId="statusSlave1"/>
<channel id="statusSlave2" typeId="statusSlave2"/>
<channel id="statusSlave3" typeId="statusSlave3"/>
<channel id="statusSlave4" typeId="statusSlave4"/>
<channel id="statusSlave5" typeId="statusSlave5"/>
<channel id="currentTimestamp" typeId="currentTimestamp"/>
<channel id="iconMixingCircuit3" typeId="iconMixingCircuit3"/>
<channel id="temperatureMixingCircuit3FlowTarget" typeId="temperatureMixingCircuit3FlowTarget"/>
<channel id="temperatureMixingCircuit3Flow" typeId="temperatureMixingCircuit3Flow"/>
<channel id="outputMixingCircuit3Close" typeId="outputMixingCircuit3Close"/>
<channel id="outputMixingCircuit3Open" typeId="outputMixingCircuit3Open"/>
<channel id="outputMixingCircuitPump3" typeId="outputMixingCircuitPump3"/>
<channel id="timeUntilDefrost" typeId="timeUntilDefrost"/>
<channel id="temperatureRoomStation2" typeId="temperatureRoomStation2"/>
<channel id="temperatureRoomStation3" typeId="temperatureRoomStation3"/>
<channel id="iconTimeSwitchSwimmingPool" typeId="iconTimeSwitchSwimmingPool"/>
<channel id="runtimeTotalSwimmingPool" typeId="runtimeTotalSwimmingPool"/>
<channel id="coolingRelease" typeId="coolingRelease"/>
<channel id="inputAnalog" typeId="inputAnalog"/>
<channel id="iconCirculationPump" typeId="iconCirculationPump"/>
<channel id="heatMeterHeating" typeId="heatMeterHeating"/>
<channel id="heatMeterHotWater" typeId="heatMeterHotWater"/>
<channel id="heatMeterSwimmingPool" typeId="heatMeterSwimmingPool"/>
<channel id="heatMeterTotalSinceReset" typeId="heatMeterTotalSinceReset"/>
<channel id="heatMeterFlowRate" typeId="heatMeterFlowRate"/>
<channel id="outputAnalog1" typeId="outputAnalog1"/>
<channel id="outputAnalog2" typeId="outputAnalog2"/>
<channel id="timeLockSecondHotGasCompressor" typeId="timeLockSecondHotGasCompressor"/>
<channel id="temperatureSupplyAir" typeId="temperatureSupplyAir"/>
<channel id="temperatureExhaustAir" typeId="temperatureExhaustAir"/>
<channel id="runtimeTotalSolar" typeId="runtimeTotalSolar"/>
<channel id="outputAnalog3" typeId="outputAnalog3"/>
<channel id="outputAnalog4" typeId="outputAnalog4"/>
<channel id="outputSupplyAirFan" typeId="outputSupplyAirFan"/>
<channel id="outputExhaustFan" typeId="outputExhaustFan"/>
<channel id="outputVSK" typeId="outputVSK"/>
<channel id="outputFRH" typeId="outputFRH"/>
<channel id="inputAnalog2" typeId="inputAnalog2"/>
<channel id="inputAnalog3" typeId="inputAnalog3"/>
<channel id="inputSAX" typeId="inputSAX"/>
<channel id="inputSPL" typeId="inputSPL"/>
<channel id="ventilationBoardInstalled" typeId="ventilationBoardInstalled"/>
<channel id="flowRateHeatSource" typeId="flowRateHeatSource"/>
<channel id="linBusInstalled" typeId="linBusInstalled"/>
<channel id="temperatureSuctionEvaporator" typeId="temperatureSuctionEvaporator"/>
<channel id="temperatureSuctionCompressor" typeId="temperatureSuctionCompressor"/>
<channel id="temperatureCompressorHeating" typeId="temperatureCompressorHeating"/>
<channel id="temperatureOverheating" typeId="temperatureOverheating"/>
<channel id="temperatureOverheatingTarget" typeId="temperatureOverheatingTarget"/>
<channel id="highPressure" typeId="highPressure"/>
<channel id="lowPressure" typeId="lowPressure"/>
<channel id="outputCompressorHeating" typeId="outputCompressorHeating"/>
<channel id="controlSignalCirculatingPump" typeId="controlSignalCirculatingPump"/>
<channel id="fanSpeed" typeId="fanSpeed"/>
<channel id="temperatureSafetyLimitFloorHeating" typeId="temperatureSafetyLimitFloorHeating"/>
<channel id="powerTargetValue" typeId="powerTargetValue"/>
<channel id="powerActualValue" typeId="powerActualValue"/>
<channel id="temperatureFlowTarget" typeId="temperatureFlowTarget"/>
<channel id="operatingStatusSECBoard" typeId="operatingStatusSECBoard"/>
<channel id="fourWayValve" typeId="fourWayValve"/>
<channel id="compressorSpeed" typeId="compressorSpeed"/>
<channel id="temperatureCompressorEVI" typeId="temperatureCompressorEVI"/>
<channel id="temperatureIntakeEVI" typeId="temperatureIntakeEVI"/>
<channel id="temperatureOverheatingEVI" typeId="temperatureOverheatingEVI"/>
<channel id="temperatureOverheatingTargetEVI" typeId="temperatureOverheatingTargetEVI"/>
<channel id="temperatureCondensation" typeId="temperatureCondensation"/>
<channel id="temperatureLiquidEEV" typeId="temperatureLiquidEEV"/>
<channel id="temperatureHypothermiaEEV" typeId="temperatureHypothermiaEEV"/>
<channel id="pressureEVI" typeId="pressureEVI"/>
<channel id="voltageInverter" typeId="voltageInverter"/>
<channel id="temperatureHotGas2" typeId="temperatureHotGas2"/>
<channel id="temperatureHeatSourceInlet2" typeId="temperatureHeatSourceInlet2"/>
<channel id="temperatureIntakeEvaporator2" typeId="temperatureIntakeEvaporator2"/>
<channel id="temperatureIntakeCompressor2" typeId="temperatureIntakeCompressor2"/>
<channel id="temperatureCompressor2Heating" typeId="temperatureCompressor2Heating"/>
<channel id="temperatureOverheating2" typeId="temperatureOverheating2"/>
<channel id="temperatureOverheatingTarget2" typeId="temperatureOverheatingTarget2"/>
<channel id="highPressure2" typeId="highPressure2"/>
<channel id="lowPressure2" typeId="lowPressure2"/>
<channel id="inputSwitchHighPressure2" typeId="inputSwitchHighPressure2"/>
<channel id="outputDefrostValve2" typeId="outputDefrostValve2"/>
<channel id="outputVBO2" typeId="outputVBO2"/>
<channel id="outputCompressor1_2" typeId="outputCompressor1_2"/>
<channel id="outputCompressorHeating2" typeId="outputCompressorHeating2"/>
<channel id="secondShutdownReason0" typeId="secondShutdownReason0"/>
<channel id="secondShutdownReason1" typeId="secondShutdownReason1"/>
<channel id="secondShutdownReason2" typeId="secondShutdownReason2"/>
<channel id="secondShutdownReason3" typeId="secondShutdownReason3"/>
<channel id="secondShutdownReason4" typeId="secondShutdownReason4"/>
<channel id="secondShutdownTime0" typeId="secondShutdownTime0"/>
<channel id="secondShutdownTime1" typeId="secondShutdownTime1"/>
<channel id="secondShutdownTime2" typeId="secondShutdownTime2"/>
<channel id="secondShutdownTime3" typeId="secondShutdownTime3"/>
<channel id="secondShutdownTime4" typeId="secondShutdownTime4"/>
<channel id="temperatureRoom" typeId="temperatureRoom"/>
<channel id="temperatureRoomTarget" typeId="temperatureRoomTarget"/>
<channel id="temperatureHotWaterTop" typeId="temperatureHotWaterTop"/>
<channel id="frequencyCompressor" typeId="frequencyCompressor"/>
<channel id="temperatureHeatingParallelShift" typeId="temperatureHeatingParallelShift"/>
<channel id="heatingMode" typeId="heatingMode"/>
<channel id="hotWaterMode" typeId="hotWaterMode"/>
<channel id="comfortCoolingMode" typeId="comfortCoolingMode"/>
<channel id="thermalDisinfectionMonday" typeId="thermalDisinfectionMonday"/>
<channel id="thermalDisinfectionTuesday" typeId="thermalDisinfectionTuesday"/>
<channel id="thermalDisinfectionWednesday" typeId="thermalDisinfectionWednesday"/>
<channel id="thermalDisinfectionThursday" typeId="thermalDisinfectionThursday"/>
<channel id="thermalDisinfectionFriday" typeId="thermalDisinfectionFriday"/>
<channel id="thermalDisinfectionSaturday" typeId="thermalDisinfectionSaturday"/>
<channel id="thermalDisinfectionSunday" typeId="thermalDisinfectionSunday"/>
<channel id="thermalDisinfectionPermanent" typeId="thermalDisinfectionPermanent"/>
<channel id="temperatureComfortCoolingATRelease" typeId="temperatureComfortCoolingATRelease"/>
<channel id="temperatureComfortCoolingATReleaseTarget" typeId="temperatureComfortCoolingATReleaseTarget"/>
<channel id="comfortCoolingATExcess" typeId="comfortCoolingATExcess"/>
<channel id="comfortCoolingATUndercut" typeId="comfortCoolingATUndercut"/>
</channels>
<config-description>
<parameter name="ipAddress" type="text" required="true">
<context>network-address</context>
<label>IP Address</label>
<description>IP address of the heat pump to connect to</description>
</parameter>
<parameter name="port" type="integer" required="false">
<label>Port</label>
<default>8889</default>
<description>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.</description>
</parameter>
<parameter name="refresh" type="integer" required="false" unit="s" min="1">
<label>Refresh inverval</label>
<default>300</default>
<unitLabel>s</unitLabel>
<description>Refresh inverval in seconds. Defaults to 300</description>
</parameter>
<parameter name="showAllChannels" type="boolean" required="false">
<label>Show all channels</label>
<default>false</default>
<description>By default channels that aren't supported are hidden.</description>
</parameter>
</config-description>
</thing-type>
</thing:thing-descriptions>

View File

@ -175,6 +175,7 @@
<module>org.openhab.binding.loxone</module> <module>org.openhab.binding.loxone</module>
<module>org.openhab.binding.luftdateninfo</module> <module>org.openhab.binding.luftdateninfo</module>
<module>org.openhab.binding.lutron</module> <module>org.openhab.binding.lutron</module>
<module>org.openhab.binding.luxtronikheatpump</module>
<module>org.openhab.binding.magentatv</module> <module>org.openhab.binding.magentatv</module>
<module>org.openhab.binding.mail</module> <module>org.openhab.binding.mail</module>
<module>org.openhab.binding.max</module> <module>org.openhab.binding.max</module>