[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
26 changed files with 6327 additions and 0 deletions

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>