added migrated 2.x add-ons
Signed-off-by: Kai Kreuzer <kai@openhab.org>
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<features name="org.openhab.binding.nibeheatpump-${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-nibeheatpump" description="Nibe Heat Pump Binding" version="${project.version}">
|
||||
<feature>openhab-runtime-base</feature>
|
||||
<feature>openhab-transport-serial</feature>
|
||||
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.nibeheatpump/${project.version}</bundle>
|
||||
</feature>
|
||||
</features>
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.openhab.core.thing.ThingTypeUID;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpBindingConstants} class defines common constants, which are
|
||||
* used across the whole binding.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpBindingConstants {
|
||||
|
||||
private static final String BINDING_ID = "nibeheatpump";
|
||||
|
||||
// List of all Thing Type UIDs
|
||||
public static final ThingTypeUID THING_TYPE_F1X45_UDP = new ThingTypeUID(BINDING_ID, "f1x45-udp");
|
||||
public static final ThingTypeUID THING_TYPE_F1X45_SERIAL = new ThingTypeUID(BINDING_ID, "f1x45-serial");
|
||||
public static final ThingTypeUID THING_TYPE_F1X45_SIMULATOR = new ThingTypeUID(BINDING_ID, "f1x45-simulator");
|
||||
|
||||
public static final ThingTypeUID THING_TYPE_F1X55_UDP = new ThingTypeUID(BINDING_ID, "f1x55-udp");
|
||||
public static final ThingTypeUID THING_TYPE_F1X55_SERIAL = new ThingTypeUID(BINDING_ID, "f1x55-serial");
|
||||
public static final ThingTypeUID THING_TYPE_F1X55_SIMULATOR = new ThingTypeUID(BINDING_ID, "f1x55-simulator");
|
||||
|
||||
public static final ThingTypeUID THING_TYPE_F750_UDP = new ThingTypeUID(BINDING_ID, "f750-udp");
|
||||
public static final ThingTypeUID THING_TYPE_F750_SERIAL = new ThingTypeUID(BINDING_ID, "f750-serial");
|
||||
public static final ThingTypeUID THING_TYPE_F750_SIMULATOR = new ThingTypeUID(BINDING_ID, "f750-simulator");
|
||||
|
||||
public static final ThingTypeUID THING_TYPE_F470_UDP = new ThingTypeUID(BINDING_ID, "f470-udp");
|
||||
public static final ThingTypeUID THING_TYPE_F470_SERIAL = new ThingTypeUID(BINDING_ID, "f470-serial");
|
||||
public static final ThingTypeUID THING_TYPE_F470_SIMULATOR = new ThingTypeUID(BINDING_ID, "f470-simulator");
|
||||
|
||||
/**
|
||||
* Presents all supported thing types by NibeHeatPump binding.
|
||||
*/
|
||||
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Stream
|
||||
.of(THING_TYPE_F1X45_UDP, THING_TYPE_F1X45_SERIAL, THING_TYPE_F1X45_SIMULATOR, THING_TYPE_F1X55_UDP,
|
||||
THING_TYPE_F1X55_SERIAL, THING_TYPE_F1X55_SIMULATOR, THING_TYPE_F750_UDP, THING_TYPE_F750_SERIAL,
|
||||
THING_TYPE_F750_SIMULATOR, THING_TYPE_F470_UDP, THING_TYPE_F470_SERIAL, THING_TYPE_F470_SIMULATOR)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import java.util.concurrent.locks.Condition;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpCommandResult} implements a very simple {@link Future} for {@link NibeHeatPumpMessage}s.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpCommandResult implements Future<NibeHeatPumpMessage> {
|
||||
|
||||
private final Lock lock = new ReentrantLock();
|
||||
private final Condition condition = lock.newCondition();
|
||||
|
||||
private NibeHeatPumpMessage result = null;
|
||||
private boolean done = false;
|
||||
|
||||
@Override
|
||||
public boolean cancel(boolean mayInterruptIfRunning) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDone() {
|
||||
lock.lock();
|
||||
try {
|
||||
return done;
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public NibeHeatPumpMessage get() throws InterruptedException {
|
||||
lock.lock();
|
||||
try {
|
||||
if (!done) {
|
||||
condition.await();
|
||||
}
|
||||
return result;
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public NibeHeatPumpMessage get(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException {
|
||||
lock.lock();
|
||||
try {
|
||||
if (!done) {
|
||||
final boolean timedOut = !condition.await(timeout, unit);
|
||||
if (timedOut) {
|
||||
throw new TimeoutException("waiting timed out");
|
||||
}
|
||||
}
|
||||
return result;
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public void set(final NibeHeatPumpMessage result) {
|
||||
lock.lock();
|
||||
try {
|
||||
this.result = result;
|
||||
this.done = true;
|
||||
condition.signalAll();
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpException} define Exceptions for Nibe heat pump errors.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 8030315127747955747L;
|
||||
|
||||
public NibeHeatPumpException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public NibeHeatPumpException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public NibeHeatPumpException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal;
|
||||
|
||||
import static org.openhab.binding.nibeheatpump.internal.NibeHeatPumpBindingConstants.SUPPORTED_THING_TYPES_UIDS;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.binding.nibeheatpump.internal.handler.NibeHeatPumpHandler;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.PumpModel;
|
||||
import org.openhab.core.io.transport.serial.SerialPortManager;
|
||||
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.annotations.Activate;
|
||||
import org.osgi.service.component.annotations.Component;
|
||||
import org.osgi.service.component.annotations.Reference;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpHandlerFactory} is responsible for creating things and
|
||||
* thing handlers.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
@Component(service = ThingHandlerFactory.class, configurationPid = "binding.nibeheatpump")
|
||||
public class NibeHeatPumpHandlerFactory extends BaseThingHandlerFactory {
|
||||
|
||||
private final SerialPortManager serialPortManager;
|
||||
|
||||
@Activate
|
||||
public NibeHeatPumpHandlerFactory(final @Reference SerialPortManager serialPortManager) {
|
||||
this.serialPortManager = serialPortManager;
|
||||
}
|
||||
|
||||
@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 (SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID)) {
|
||||
return new NibeHeatPumpHandler(thing, parsePumpModel(thing), serialPortManager);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private PumpModel parsePumpModel(Thing thing) {
|
||||
String[] pumpModelStrings = thing.getThingTypeUID().getId().split("-");
|
||||
return PumpModel.getPumpModel(pumpModelStrings[0]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.config;
|
||||
|
||||
/**
|
||||
* Configuration class for {@link NibeHeatPumpBinding} device.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpConfiguration {
|
||||
public String hostName;
|
||||
public int port;
|
||||
public int readCommandsPort;
|
||||
public int writeCommandsPort;
|
||||
public String serialPort;
|
||||
public int refreshInterval;
|
||||
public boolean enableReadCommands;
|
||||
public boolean enableWriteCommands;
|
||||
public boolean sendAckToMODBUS40;
|
||||
public boolean sendAckToRMU40;
|
||||
public boolean sendAckToSMS40;
|
||||
public String enableWriteCommandsToRegisters;
|
||||
public int throttleTime;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = "";
|
||||
|
||||
str += "hostName = " + hostName;
|
||||
str += ", port = " + port;
|
||||
str += ", readCommandsPort = " + readCommandsPort;
|
||||
str += ", writeCommandsPort = " + writeCommandsPort;
|
||||
str += ", serialPort = " + serialPort;
|
||||
str += ", refreshInterval = " + refreshInterval;
|
||||
str += ", enableReadCommands = " + enableReadCommands;
|
||||
str += ", enableWriteCommands = " + enableWriteCommands;
|
||||
str += ", sendAckToMODBUS40 = " + sendAckToMODBUS40;
|
||||
str += ", sendAckToRMU40 = " + sendAckToRMU40;
|
||||
str += ", sendAckToSMS40 = " + sendAckToSMS40;
|
||||
str += ", enableWriteCommandsToRegisters = " + enableWriteCommandsToRegisters;
|
||||
str += ", throttleTime = " + throttleTime;
|
||||
|
||||
return str;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.connection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.MessageFactory;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpBaseConnector} define abstract class for Nibe connectors. All connector implementations should
|
||||
* extend this class.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public abstract class NibeHeatPumpBaseConnector implements NibeHeatPumpConnector {
|
||||
private final Logger logger = LoggerFactory.getLogger(NibeHeatPumpBaseConnector.class);
|
||||
|
||||
private final List<NibeHeatPumpEventListener> listeners = new ArrayList<>();
|
||||
public boolean connected = false;
|
||||
|
||||
@Override
|
||||
public synchronized void addEventListener(NibeHeatPumpEventListener listener) {
|
||||
if (!listeners.contains(listener)) {
|
||||
this.listeners.add(listener);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void removeEventListener(NibeHeatPumpEventListener listener) {
|
||||
this.listeners.remove(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConnected() {
|
||||
return connected;
|
||||
}
|
||||
|
||||
public void sendMsgToListeners(byte[] data) {
|
||||
try {
|
||||
NibeHeatPumpMessage msg = MessageFactory.getMessage(data);
|
||||
sendMsgToListeners(msg);
|
||||
} catch (NibeHeatPumpException e) {
|
||||
logger.debug("Invalid message received, exception {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void sendMsgToListeners(NibeHeatPumpMessage msg) {
|
||||
if (msg != null) {
|
||||
for (NibeHeatPumpEventListener listener : listeners) {
|
||||
try {
|
||||
listener.msgReceived(msg);
|
||||
} catch (Exception e) {
|
||||
logger.error("Event listener invoking error", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void sendErrorToListeners(String error) {
|
||||
for (NibeHeatPumpEventListener listener : listeners) {
|
||||
try {
|
||||
listener.errorOccurred(error);
|
||||
} catch (Exception e) {
|
||||
logger.error("Event listener invoking error", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.connection;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.config.NibeHeatPumpConfiguration;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
|
||||
/**
|
||||
* Define interface to communicate Nibe heat pumps.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public interface NibeHeatPumpConnector {
|
||||
|
||||
/**
|
||||
* Procedure for connect to heat pump.
|
||||
*
|
||||
* @param configuration
|
||||
* Configuration parameters for connector.
|
||||
*
|
||||
* @throws NibeHeatPumpException
|
||||
*/
|
||||
void connect(NibeHeatPumpConfiguration configuration) throws NibeHeatPumpException;
|
||||
|
||||
/**
|
||||
* Procedure for disconnect from heat pump.
|
||||
*/
|
||||
void disconnect();
|
||||
|
||||
/**
|
||||
* Procedure for register event listener.
|
||||
*
|
||||
* @param listener
|
||||
* Event listener instance to handle events.
|
||||
*/
|
||||
void addEventListener(NibeHeatPumpEventListener listener);
|
||||
|
||||
/**
|
||||
* Procedure for remove event listener.
|
||||
*
|
||||
* @param listener
|
||||
* Event listener instance to remove.
|
||||
*/
|
||||
void removeEventListener(NibeHeatPumpEventListener listener);
|
||||
|
||||
/**
|
||||
* Procedure for sending datagram to heat pump.
|
||||
*
|
||||
* @throws NibeHeatPumpException
|
||||
*/
|
||||
void sendDatagram(NibeHeatPumpMessage msg) throws NibeHeatPumpException;
|
||||
|
||||
/**
|
||||
* Procedure to check if connector is currently connected to heat pump.
|
||||
*
|
||||
* @return true, if connected
|
||||
*/
|
||||
boolean isConnected();
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.connection;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
|
||||
/**
|
||||
* This interface defines interface to receive data from heat pump.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public interface NibeHeatPumpEventListener {
|
||||
|
||||
/**
|
||||
* Procedure for receive raw data from heat pump.
|
||||
*
|
||||
* @param msg
|
||||
* Received raw data.
|
||||
*/
|
||||
void msgReceived(NibeHeatPumpMessage msg);
|
||||
|
||||
/**
|
||||
* Procedure for receiving error information.
|
||||
*
|
||||
* @param error
|
||||
* Error occurred.
|
||||
*/
|
||||
void errorOccurred(String error);
|
||||
}
|
||||
@@ -0,0 +1,361 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.connection;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TooManyListenersException;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.config.NibeHeatPumpConfiguration;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.MessageFactory;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusReadRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusWriteRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocolContext;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocolDefaultContext;
|
||||
import org.openhab.core.io.transport.serial.PortInUseException;
|
||||
import org.openhab.core.io.transport.serial.SerialPort;
|
||||
import org.openhab.core.io.transport.serial.SerialPortEvent;
|
||||
import org.openhab.core.io.transport.serial.SerialPortEventListener;
|
||||
import org.openhab.core.io.transport.serial.SerialPortIdentifier;
|
||||
import org.openhab.core.io.transport.serial.SerialPortManager;
|
||||
import org.openhab.core.io.transport.serial.UnsupportedCommOperationException;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Connector for serial port communication.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class SerialConnector extends NibeHeatPumpBaseConnector {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(SerialConnector.class);
|
||||
|
||||
private InputStream in;
|
||||
private OutputStream out;
|
||||
private SerialPort serialPort;
|
||||
private final SerialPortManager serialPortManager;
|
||||
private Thread readerThread;
|
||||
private NibeHeatPumpConfiguration conf;
|
||||
|
||||
private final List<byte[]> readQueue = new ArrayList<>();
|
||||
private final List<byte[]> writeQueue = new ArrayList<>();
|
||||
|
||||
public SerialConnector(SerialPortManager serialPortManager) {
|
||||
logger.debug("Nibe heatpump Serial Port message listener created");
|
||||
this.serialPortManager = serialPortManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connect(NibeHeatPumpConfiguration configuration) throws NibeHeatPumpException {
|
||||
if (isConnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
conf = configuration;
|
||||
try {
|
||||
SerialPortIdentifier portIdentifier = serialPortManager.getIdentifier(conf.serialPort);
|
||||
if (portIdentifier == null) {
|
||||
throw new NibeHeatPumpException("Connection failed, no such port: " + conf.serialPort);
|
||||
}
|
||||
|
||||
serialPort = portIdentifier.open(this.getClass().getName(), 2000);
|
||||
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
|
||||
|
||||
serialPort.enableReceiveThreshold(1);
|
||||
serialPort.disableReceiveTimeout();
|
||||
|
||||
in = serialPort.getInputStream();
|
||||
out = serialPort.getOutputStream();
|
||||
|
||||
out.flush();
|
||||
if (in.markSupported()) {
|
||||
in.reset();
|
||||
}
|
||||
} catch (PortInUseException e) {
|
||||
throw new NibeHeatPumpException("Connection failed, port in use: " + conf.serialPort, e);
|
||||
} catch (UnsupportedCommOperationException | IOException e) {
|
||||
throw new NibeHeatPumpException("Connection failed, reason: " + e.getMessage(), e);
|
||||
}
|
||||
|
||||
readQueue.clear();
|
||||
writeQueue.clear();
|
||||
|
||||
readerThread = new SerialReader(in);
|
||||
readerThread.start();
|
||||
connected = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnect() {
|
||||
logger.debug("Disconnecting");
|
||||
if (serialPort != null) {
|
||||
serialPort.removeEventListener();
|
||||
}
|
||||
if (readerThread != null) {
|
||||
logger.debug("Interrupt serial listener");
|
||||
readerThread.interrupt();
|
||||
}
|
||||
if (out != null) {
|
||||
logger.debug("Close serial out stream");
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException e) {
|
||||
logger.debug("Error while closing the output stream: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
if (in != null) {
|
||||
logger.debug("Close serial in stream");
|
||||
try {
|
||||
in.close();
|
||||
} catch (IOException e) {
|
||||
logger.debug("Error while closing the input stream: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
if (serialPort != null) {
|
||||
logger.debug("Close serial port");
|
||||
serialPort.close();
|
||||
}
|
||||
readerThread = null;
|
||||
serialPort = null;
|
||||
out = null;
|
||||
in = null;
|
||||
connected = false;
|
||||
logger.debug("Closed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDatagram(NibeHeatPumpMessage msg) {
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Add request to queue: {}", msg.toHexString());
|
||||
}
|
||||
|
||||
if (msg instanceof ModbusWriteRequestMessage) {
|
||||
writeQueue.add(msg.decodeMessage());
|
||||
} else if (msg instanceof ModbusReadRequestMessage) {
|
||||
readQueue.add(msg.decodeMessage());
|
||||
} else {
|
||||
logger.trace("Ignore PDU: {}", msg.getClass());
|
||||
}
|
||||
|
||||
logger.trace("Read queue: {}, Write queue: {}", readQueue.size(), writeQueue.size());
|
||||
}
|
||||
|
||||
public class SerialReader extends Thread implements SerialPortEventListener {
|
||||
boolean interrupted = false;
|
||||
final InputStream in;
|
||||
|
||||
SerialReader(InputStream in) {
|
||||
this.in = in;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interrupt() {
|
||||
interrupted = true;
|
||||
super.interrupt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
logger.debug("Data listener started");
|
||||
|
||||
// RXTX serial port library causes high CPU load
|
||||
// Start event listener, which will just sleep and slow down event loop
|
||||
try {
|
||||
serialPort.addEventListener(this);
|
||||
serialPort.notifyOnDataAvailable(true);
|
||||
} catch (TooManyListenersException e) {
|
||||
logger.info("RXTX high CPU load workaround failed, reason {}", e.getMessage());
|
||||
}
|
||||
|
||||
NibeHeatPumpProtocolContext context = new NibeHeatPumpProtocolDefaultContext() {
|
||||
@Override
|
||||
public void sendAck() {
|
||||
try {
|
||||
byte addr = msg().get(NibeHeatPumpProtocol.OFFSET_ADR);
|
||||
sendAckToNibe(addr);
|
||||
} catch (IOException e) {
|
||||
sendErrorToListeners(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendNak() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void msgReceived(byte[] data) {
|
||||
sendMsgToListeners(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendWriteMsg() {
|
||||
try {
|
||||
if (!writeQueue.isEmpty()) {
|
||||
sendDataToNibe(writeQueue.remove(0));
|
||||
} else {
|
||||
// no messages to send, send ack to pump
|
||||
byte addr = msg().get(NibeHeatPumpProtocol.OFFSET_ADR);
|
||||
sendAckToNibe(addr);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
sendErrorToListeners(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendReadMsg() {
|
||||
try {
|
||||
if (!readQueue.isEmpty()) {
|
||||
sendDataToNibe(readQueue.remove(0));
|
||||
} else {
|
||||
// no messages to send, send ack to pump
|
||||
byte addr = msg().get(NibeHeatPumpProtocol.OFFSET_ADR);
|
||||
sendAckToNibe(addr);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
sendErrorToListeners(e.getMessage());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
while (!interrupted) {
|
||||
try {
|
||||
final byte[] data = getAllAvailableBytes(in);
|
||||
if (data != null) {
|
||||
context.buffer().put(data);
|
||||
|
||||
// flip buffer for reading
|
||||
context.buffer().flip();
|
||||
}
|
||||
} catch (InterruptedIOException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
logger.debug("Interrupted via InterruptedIOException");
|
||||
} catch (IOException e) {
|
||||
logger.error("Reading from serial port failed", e);
|
||||
sendErrorToListeners(e.getMessage());
|
||||
} catch (Exception e) {
|
||||
logger.debug("Error occurred during serial port read", e);
|
||||
}
|
||||
|
||||
// run state machine to process all received data
|
||||
while (context.state().process(context)) {
|
||||
if (interrupted) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// all bytes should be handled, clear buffer for next round
|
||||
context.buffer().clear();
|
||||
}
|
||||
|
||||
logger.debug("Data listener stopped");
|
||||
}
|
||||
|
||||
private byte[] getAllAvailableBytes(InputStream in) throws IOException {
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||
|
||||
int b;
|
||||
// wait first byte (blocking)
|
||||
if ((b = in.read()) > -1) {
|
||||
byte d[] = new byte[] { (byte) b };
|
||||
os.write(d);
|
||||
|
||||
// read rest of the available bytes
|
||||
final int bufferLen = 100;
|
||||
byte[] buffer = new byte[bufferLen];
|
||||
int available = in.available();
|
||||
if (available > 0) {
|
||||
int len = in.read(buffer, 0, bufferLen);
|
||||
if (len > -1) {
|
||||
os.write(buffer, 0, len);
|
||||
}
|
||||
}
|
||||
|
||||
os.flush();
|
||||
return os.toByteArray();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialEvent(SerialPortEvent event) {
|
||||
try {
|
||||
/*
|
||||
* See more details from
|
||||
* https://github.com/NeuronRobotics/nrjavaserial/issues/22
|
||||
*/
|
||||
logger.trace("RXTX library CPU load workaround, sleep forever");
|
||||
sleep(Long.MAX_VALUE);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void sendNakToNibe() throws IOException {
|
||||
logger.trace("Send data (len=1): 15");
|
||||
out.write(0x15);
|
||||
out.flush();
|
||||
}
|
||||
|
||||
private void sendAckToNibe(byte address) throws IOException {
|
||||
boolean sendack = false;
|
||||
|
||||
if (address == NibeHeatPumpProtocol.ADR_MODBUS40 && conf.sendAckToMODBUS40) {
|
||||
logger.debug("Send ack to MODBUS40 message");
|
||||
sendack = true;
|
||||
} else if (address == NibeHeatPumpProtocol.ADR_SMS40 && conf.sendAckToSMS40) {
|
||||
logger.debug("Send ack to SMS40 message");
|
||||
sendack = true;
|
||||
} else if (address == NibeHeatPumpProtocol.ADR_RMU40 && conf.sendAckToRMU40) {
|
||||
logger.debug("Send ack to RMU40 message");
|
||||
sendack = true;
|
||||
}
|
||||
|
||||
if (sendack) {
|
||||
sendAckToNibe();
|
||||
}
|
||||
}
|
||||
|
||||
private void sendAckToNibe() throws IOException {
|
||||
logger.trace("Send data (len=1): 06");
|
||||
out.write(0x06);
|
||||
out.flush();
|
||||
}
|
||||
|
||||
private void sendDataToNibe(byte[] data) throws IOException {
|
||||
if (logger.isTraceEnabled()) {
|
||||
try {
|
||||
NibeHeatPumpMessage msg = MessageFactory.getMessage(data);
|
||||
logger.trace("Sending msg: {}", msg);
|
||||
} catch (NibeHeatPumpException e) {
|
||||
// do nothing
|
||||
}
|
||||
logger.trace("Sending data (len={}): {}", data.length, HexUtils.bytesToHex(data));
|
||||
}
|
||||
out.write(data);
|
||||
out.flush();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,252 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.connection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.config.NibeHeatPumpConfiguration;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.MessageFactory;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusDataReadOutMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusReadRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusReadResponseMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusValue;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusWriteRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusWriteResponseMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Connector for testing purposes.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class SimulatorConnector extends NibeHeatPumpBaseConnector {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(SimulatorConnector.class);
|
||||
|
||||
private Thread readerThread = null;
|
||||
|
||||
private final List<byte[]> readQueue = new ArrayList<>();
|
||||
private final List<byte[]> writeQueue = new ArrayList<>();
|
||||
|
||||
private static final Random RANDOM = new Random();
|
||||
|
||||
private final ArrayList<ModbusValue> dataReadoutValues = new ArrayList<ModbusValue>() {
|
||||
{
|
||||
add(new ModbusValue(43009, 287));
|
||||
add(new ModbusValue(43008, 100));
|
||||
add(new ModbusValue(43005, 976));
|
||||
add(new ModbusValue(40004, 30));
|
||||
add(new ModbusValue(40015, 160));
|
||||
add(new ModbusValue(40016, 120));
|
||||
add(new ModbusValue(40017, 259));
|
||||
add(new ModbusValue(40018, 283));
|
||||
add(new ModbusValue(40071, 276));
|
||||
add(new ModbusValue(40014, 454));
|
||||
add(new ModbusValue(40007, 257));
|
||||
add(new ModbusValue(47381, -80));
|
||||
add(new ModbusValue(47418, 75));
|
||||
add(new ModbusValue(45001, 0));
|
||||
add(new ModbusValue(40008, 269));
|
||||
add(new ModbusValue(40012, 231));
|
||||
add(new ModbusValue(40011, 0));
|
||||
add(new ModbusValue(0xFFFF, 0));
|
||||
add(new ModbusValue(0xFFFF, 0));
|
||||
add(new ModbusValue(0xFFFF, 0));
|
||||
}
|
||||
};
|
||||
|
||||
private final Map<Integer, Integer> cache = Collections.synchronizedMap(new HashMap<>());
|
||||
|
||||
public SimulatorConnector() {
|
||||
logger.debug("Nibe heatpump Test message listener created");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connect(NibeHeatPumpConfiguration configuration) {
|
||||
if (isConnected()) {
|
||||
return;
|
||||
}
|
||||
readerThread = new Reader();
|
||||
readerThread.start();
|
||||
connected = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnect() {
|
||||
if (readerThread != null) {
|
||||
logger.debug("Interrupt message listener");
|
||||
readerThread.interrupt();
|
||||
try {
|
||||
readerThread.join();
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
|
||||
readerThread = null;
|
||||
connected = false;
|
||||
logger.debug("Closed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDatagram(NibeHeatPumpMessage msg) {
|
||||
logger.debug("Sending request: {}", msg.toHexString());
|
||||
|
||||
if (msg instanceof ModbusWriteRequestMessage) {
|
||||
writeQueue.add(msg.decodeMessage());
|
||||
} else if (msg instanceof ModbusReadRequestMessage) {
|
||||
readQueue.add(msg.decodeMessage());
|
||||
} else {
|
||||
logger.debug("Ignore PDU: {}", msg.getClass().toString());
|
||||
}
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Read queue: {}, Write queue: {}", readQueue.size(), writeQueue.size());
|
||||
}
|
||||
}
|
||||
|
||||
private class Reader extends Thread {
|
||||
boolean interrupted = false;
|
||||
|
||||
@Override
|
||||
public void interrupt() {
|
||||
logger.debug("Data listener interupt request received");
|
||||
interrupted = true;
|
||||
super.interrupt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
logger.debug("Data listener simulator started");
|
||||
|
||||
int i = 1;
|
||||
|
||||
while (!interrupted) {
|
||||
try {
|
||||
if (i++ % 60 == 0) {
|
||||
// simulate CRC error ones a while
|
||||
ModbusDataReadOutMessage dataReadOut = new ModbusDataReadOutMessage.MessageBuilder()
|
||||
.values(dataReadoutValues).build();
|
||||
byte[] data = dataReadOut.decodeMessage();
|
||||
// create CRC error
|
||||
data[data.length - 1] = (byte) (data[data.length - 1] + 1);
|
||||
sendMsgToListeners(data);
|
||||
Thread.sleep(1000);
|
||||
continue;
|
||||
} else if (i % 100 == 0) {
|
||||
sendErrorToListeners("Simulated error");
|
||||
Thread.sleep(1000);
|
||||
continue;
|
||||
} else if (i % 10 == 0) {
|
||||
// ok data
|
||||
ModbusDataReadOutMessage dataReadOut = new ModbusDataReadOutMessage.MessageBuilder()
|
||||
.values(dataReadoutValues).build();
|
||||
updateData();
|
||||
updateCache();
|
||||
sendMsgToListeners(dataReadOut.decodeMessage());
|
||||
}
|
||||
|
||||
if (!writeQueue.isEmpty()) {
|
||||
byte[] data = writeQueue.remove(0);
|
||||
try {
|
||||
ModbusWriteRequestMessage writeReq = (ModbusWriteRequestMessage) MessageFactory
|
||||
.getMessage(data);
|
||||
setCacheValue(writeReq.getCoilAddress(), writeReq.getValue());
|
||||
ModbusWriteResponseMessage writeResp = new ModbusWriteResponseMessage.MessageBuilder()
|
||||
.result(true).build();
|
||||
Thread.sleep(300);
|
||||
sendMsgToListeners(writeResp.decodeMessage());
|
||||
} catch (NibeHeatPumpException e) {
|
||||
logger.debug("Simulation error, cause {}", e.getMessage());
|
||||
}
|
||||
} else if (!readQueue.isEmpty()) {
|
||||
byte[] data = readQueue.remove(0);
|
||||
try {
|
||||
ModbusReadRequestMessage readReq = (ModbusReadRequestMessage) MessageFactory
|
||||
.getMessage(data);
|
||||
ModbusReadResponseMessage readResp = new ModbusReadResponseMessage.MessageBuilder()
|
||||
.coilAddress(readReq.getCoilAddress())
|
||||
.value(getCacheValue(readReq.getCoilAddress())).build();
|
||||
Thread.sleep(200);
|
||||
sendMsgToListeners(readResp.decodeMessage());
|
||||
} catch (NibeHeatPumpException e) {
|
||||
logger.debug("Simulation error, cause {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Read queue: {}, Write queue: {}", readQueue.size(), writeQueue.size());
|
||||
}
|
||||
Thread.sleep(800);
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
|
||||
logger.debug("Data listener stopped");
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCache() {
|
||||
for (ModbusValue val : dataReadoutValues) {
|
||||
cache.put(val.getCoilAddress(), val.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
private int getCacheValue(int coilAddress) {
|
||||
return cache.getOrDefault(coilAddress, 0);
|
||||
}
|
||||
|
||||
private void setCacheValue(int coilAddress, int value) {
|
||||
cache.put(coilAddress, value);
|
||||
}
|
||||
|
||||
private void updateData() {
|
||||
for (ModbusValue val : dataReadoutValues) {
|
||||
switch (val.getCoilAddress()) {
|
||||
case 43005: // Degree Minutes
|
||||
val.setValue(val.getValue() + 5);
|
||||
break;
|
||||
case 40004: // BT1 Outdoor temp
|
||||
val.setValue((int) random(-100, 100));
|
||||
break;
|
||||
case 40015: // EB100-EP14-BT10 Brine in temp
|
||||
val.setValue((int) random(200, 600));
|
||||
break;
|
||||
case 40016: // EB100-EP14-BT11 Brine out temp
|
||||
val.setValue((int) random(200, 600));
|
||||
break;
|
||||
case 40017: // EB100-EP14-BT12 Cond. out
|
||||
val.setValue((int) random(200, 600));
|
||||
break;
|
||||
case 40018: // EB100-EP14-BT14 Hot gas temp
|
||||
val.setValue((int) random(200, 600));
|
||||
break;
|
||||
case 40071: // BT25 external supply temp
|
||||
val.setValue((int) random(200, 600));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static double random(double min, double max) {
|
||||
return min + (RANDOM.nextDouble() * (max - min));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.connection;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
import java.net.SocketException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.config.NibeHeatPumpConfiguration;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusReadRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusWriteRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Connector for UDP communication.
|
||||
*
|
||||
* Command for testing:
|
||||
*
|
||||
* @formatter:off
|
||||
* OK: echo -e "\x5C\x00\x20\x68\x50\x01\xA8\x1F\x01\x00\xA8\x64\x00\xFD\xA7\xD0\x03\x44\x9C\x1E\x00\x4F\x9C\xA0\x00\x50\x9C\x78\x00\x51\x9C\x03\x01\x52\x9C\x1B\x01\x87\x9C\x14\x01\x4E\x9C\xC6\x01\x47\x9C\x01\x01\x15\xB9\xB0\xFF\x3A\xB9\x4B\x00\xC9\xAF\x00\x00\x48\x9C\x0D\x01\x4C\x9C\xE7\x00\x4B\x9C\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x45" | nc -4u -w1 localhost 9999
|
||||
* Special len: echo -e "\x5C\x00\x20\x68\x51\x44\x9C\x25\x00\x48\x9C\xFC\x00\x4C\x9C\xF1\x00\x4E\x9C\xC7\x01\x4D\x9C\x0B\x02\x4F\x9C\x25\x00\x50\x9C\x33\x00\x51\x9C\x0B\x01\x52\x9C\x5C\x5C\x01\x56\x9C\x31\x00\xC9\xAF\x00\x00\x01\xA8\x0C\x01\xFD\xA7\x16\xFA\xFA\xA9\x07\x00\x98\xA9\x1B\x1B\xFF\xFF\x00\x00\xA0\xA9\xCA\x02\xFF\xFF\x00\x00\x9C\xA9\x92\x12\xFF\xFF\x00\x00\xBE" | nc -4u -w1 localhost 9999
|
||||
* Special len: echo -e "\x5C\x00\x20\x68\x52\x44\x9C\x25\x00\x48\x9C\xFE\x00\x4C\x9C\xF2\x00\x4E\x9C\xD4\x01\x4D\x9C\xFB\x01\x4F\x9C\x25\x00\x50\x9C\x37\x00\x51\x9C\x0D\x01\x52\x9C\x5C\x5C\x01\x56\x9C\x32\x00\xC9\xAF\x00\x00\x01\xA8\x0C\x01\xFD\xA7\x12\xFA\xFA\xA9\x07\x00\x98\xA9\x5C\x5C\x1B\xFF\xFF\x00\x00\xA0\xA9\xD1\x02\xFF\xFF\x00\x00\x9C\xA9\xB4\x12\xFF\xFF\x00\x00\x7F" | nc -4u -w1 localhost 9999
|
||||
* Special CRC: echo -e "\x5C\x00\x20\x68\x50\x44\x9C\x26\x00\x48\x9C\xF6\x00\x4C\x9C\xF1\x00\x4E\x9C\xD6\x01\x4D\x9C\x0C\x02\x4F\x9C\x45\x00\x50\x9C\x3F\x00\x51\x9C\xF1\x00\x52\x9C\x04\x01\x56\x9C\xD5\x00\xC9\xAF\x00\x00\x01\xA8\x0C\x01\xFD\xA7\x99\xFA\xFA\xA9\x02\x00\x98\xA9\x1A\x1B\xFF\xFF\x00\x00\xA0\xA9\xCA\x02\xFF\xFF\x00\x00\x9C\xA9\x92\x12\xFF\xFF\x00\x00\xC5" | nc -4u -w1 localhost 9999
|
||||
* CRC failure: echo -e "\x5C\x00\x20\x68\x50\x01\xA8\x1F\x01\x00\xA8\x64\x00\xFD\xA7\xD0\x03\x44\x9C\x1E\x00\x4F\x9C\xA0\x00\x50\x9C\x78\x00\x51\x9C\x03\x01\x52\x9C\x1B\x01\x87\x9C\x14\x01\x4E\x9C\xC6\x01\x47\x9C\x01\x01\x15\xB9\xB0\xFF\x3A\xB9\x4B\x00\xC9\xAF\x00\x00\x48\x9C\x0D\x01\x4C\x9C\xE7\x00\x4B\x9C\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x44" | nc -4u -w1 localhost 9999
|
||||
* @formatter:on
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class UDPConnector extends NibeHeatPumpBaseConnector {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(UDPConnector.class);
|
||||
|
||||
private Thread readerThread;
|
||||
private NibeHeatPumpConfiguration conf;
|
||||
private DatagramSocket socket;
|
||||
|
||||
public UDPConnector() {
|
||||
logger.debug("Nibe heatpump UDP message listener created");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connect(NibeHeatPumpConfiguration configuration) throws NibeHeatPumpException {
|
||||
if (isConnected()) {
|
||||
return;
|
||||
}
|
||||
conf = configuration;
|
||||
if (socket == null) {
|
||||
try {
|
||||
socket = new DatagramSocket(conf.port);
|
||||
} catch (SocketException e) {
|
||||
throw new NibeHeatPumpException(e);
|
||||
}
|
||||
}
|
||||
|
||||
readerThread = new Reader();
|
||||
readerThread.start();
|
||||
connected = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnect() {
|
||||
if (readerThread != null) {
|
||||
logger.debug("Interrupt message listener");
|
||||
readerThread.interrupt();
|
||||
try {
|
||||
readerThread.join();
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
|
||||
if (socket != null) {
|
||||
socket.close();
|
||||
}
|
||||
|
||||
readerThread = null;
|
||||
connected = false;
|
||||
logger.debug("Closed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDatagram(NibeHeatPumpMessage msg) throws NibeHeatPumpException {
|
||||
logger.debug("Sending request: {}", msg.toHexString());
|
||||
|
||||
byte data[] = msg.decodeMessage();
|
||||
int port = -1;
|
||||
|
||||
if (msg instanceof ModbusWriteRequestMessage) {
|
||||
port = conf.writeCommandsPort;
|
||||
} else if (msg instanceof ModbusReadRequestMessage) {
|
||||
port = conf.readCommandsPort;
|
||||
} else {
|
||||
logger.trace("Ignore PDU: {}", msg.getClass());
|
||||
}
|
||||
|
||||
if (port > 0) {
|
||||
try (DatagramSocket socket = new DatagramSocket()) {
|
||||
// Create a packet
|
||||
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName(conf.hostName),
|
||||
port);
|
||||
socket.send(packet);
|
||||
} catch (IOException e) {
|
||||
throw new NibeHeatPumpException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class Reader extends Thread {
|
||||
boolean interrupted = false;
|
||||
|
||||
@Override
|
||||
public void interrupt() {
|
||||
interrupted = true;
|
||||
super.interrupt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
logger.debug("Data listener started");
|
||||
while (!interrupted) {
|
||||
final int packetSize = 255;
|
||||
try {
|
||||
if (socket == null) {
|
||||
socket = new DatagramSocket(conf.port);
|
||||
}
|
||||
// Create a packet
|
||||
DatagramPacket packet = new DatagramPacket(new byte[packetSize], packetSize);
|
||||
// Receive a packet (blocking)
|
||||
socket.receive(packet);
|
||||
sendMsgToListeners(Arrays.copyOfRange(packet.getData(), 0, packet.getLength()));
|
||||
} catch (InterruptedIOException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
logger.error("Interrupted via InterruptedIOException");
|
||||
} catch (IOException e) {
|
||||
sendErrorToListeners(e.getMessage());
|
||||
}
|
||||
}
|
||||
logger.debug("Data listener stopped");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.handler;
|
||||
|
||||
/**
|
||||
* Thrown when a command type is not supported by the channel
|
||||
*
|
||||
* @author Jevgeni Kiski - Initial contribution
|
||||
*/
|
||||
public class CommandTypeNotSupportedException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = -1238089408157624662L;
|
||||
}
|
||||
@@ -0,0 +1,601 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.handler;
|
||||
|
||||
import static org.openhab.binding.nibeheatpump.internal.NibeHeatPumpBindingConstants.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpCommandResult;
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.config.NibeHeatPumpConfiguration;
|
||||
import org.openhab.binding.nibeheatpump.internal.connection.NibeHeatPumpConnector;
|
||||
import org.openhab.binding.nibeheatpump.internal.connection.NibeHeatPumpEventListener;
|
||||
import org.openhab.binding.nibeheatpump.internal.connection.SerialConnector;
|
||||
import org.openhab.binding.nibeheatpump.internal.connection.SimulatorConnector;
|
||||
import org.openhab.binding.nibeheatpump.internal.connection.UDPConnector;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusDataReadOutMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusReadRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusReadResponseMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusValue;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusWriteRequestMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.ModbusWriteResponseMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpMessage;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.PumpModel;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.NibeDataType;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.Type;
|
||||
import org.openhab.core.io.transport.serial.SerialPortManager;
|
||||
import org.openhab.core.library.types.DecimalType;
|
||||
import org.openhab.core.library.types.OnOffType;
|
||||
import org.openhab.core.library.types.OpenClosedType;
|
||||
import org.openhab.core.library.types.QuantityType;
|
||||
import org.openhab.core.library.types.StringType;
|
||||
import org.openhab.core.library.types.UpDownType;
|
||||
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.ThingTypeUID;
|
||||
import org.openhab.core.thing.binding.BaseThingHandler;
|
||||
import org.openhab.core.types.Command;
|
||||
import org.openhab.core.types.RefreshType;
|
||||
import org.openhab.core.types.State;
|
||||
import org.openhab.core.types.UnDefType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpHandler} is responsible for handling commands, which
|
||||
* are sent to one of the channels.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpHandler extends BaseThingHandler implements NibeHeatPumpEventListener {
|
||||
|
||||
private static final int TIMEOUT = 4500;
|
||||
private final Logger logger = LoggerFactory.getLogger(NibeHeatPumpHandler.class);
|
||||
private final PumpModel pumpModel;
|
||||
private final SerialPortManager serialPortManager;
|
||||
private final List<Integer> itemsToPoll = Collections.synchronizedList(new ArrayList<>());
|
||||
private final List<Integer> itemsToEnableWrite = new ArrayList<>();
|
||||
private final Map<Integer, CacheObject> stateMap = Collections.synchronizedMap(new HashMap<>());
|
||||
private NibeHeatPumpConfiguration configuration;
|
||||
private NibeHeatPumpConnector connector;
|
||||
private boolean reconnectionRequest;
|
||||
private NibeHeatPumpCommandResult writeResult;
|
||||
private NibeHeatPumpCommandResult readResult;
|
||||
private final Runnable pollingRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!configuration.enableReadCommands) {
|
||||
logger.trace("All read commands denied, skip polling!");
|
||||
return;
|
||||
}
|
||||
|
||||
List<Integer> items;
|
||||
synchronized (itemsToPoll) {
|
||||
items = new ArrayList<>(itemsToPoll);
|
||||
}
|
||||
|
||||
for (int item : items) {
|
||||
if (connector != null && connector.isConnected()
|
||||
&& getThing().getStatusInfo().getStatus() == ThingStatus.ONLINE) {
|
||||
CacheObject oldValue = stateMap.get(item);
|
||||
if (oldValue == null
|
||||
|| (oldValue.lastUpdateTime + refreshIntervalMillis()) < System.currentTimeMillis()) {
|
||||
// it's time to refresh data
|
||||
logger.debug("Time to refresh variable '{}' data", item);
|
||||
|
||||
ModbusReadRequestMessage request = new ModbusReadRequestMessage.MessageBuilder()
|
||||
.coilAddress(item).build();
|
||||
|
||||
try {
|
||||
readResult = sendMessageToNibe(request);
|
||||
ModbusReadResponseMessage result = (ModbusReadResponseMessage) readResult.get(TIMEOUT,
|
||||
TimeUnit.MILLISECONDS);
|
||||
if (result != null) {
|
||||
if (request.getCoilAddress() != result.getCoilAddress()) {
|
||||
logger.debug("Data from wrong register '{}' received, expected '{}'",
|
||||
result.getCoilAddress(), request.getCoilAddress());
|
||||
}
|
||||
// update variable anyway
|
||||
handleVariableUpdate(pumpModel, result.getValueAsModbusValue());
|
||||
}
|
||||
} catch (TimeoutException e) {
|
||||
logger.debug("Message sending to heat pump failed, no response");
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR);
|
||||
} catch (InterruptedException e) {
|
||||
logger.debug("Message sending to heat pump failed, sending interrupted");
|
||||
} catch (NibeHeatPumpException e) {
|
||||
logger.debug("Message sending to heat pump failed, exception {}", e.getMessage());
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR);
|
||||
} finally {
|
||||
readResult = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
private ScheduledFuture<?> connectorTask;
|
||||
private ScheduledFuture<?> pollingJob;
|
||||
private long lastUpdateTime = 0;
|
||||
|
||||
public NibeHeatPumpHandler(Thing thing, PumpModel pumpModel, SerialPortManager serialPortManager) {
|
||||
super(thing);
|
||||
this.pumpModel = pumpModel;
|
||||
this.serialPortManager = serialPortManager;
|
||||
}
|
||||
|
||||
private NibeHeatPumpConnector getConnector() throws NibeHeatPumpException {
|
||||
ThingTypeUID type = thing.getThingTypeUID();
|
||||
|
||||
if (THING_TYPE_F1X45_UDP.equals(type) || THING_TYPE_F1X55_UDP.equals(type) || THING_TYPE_F750_UDP.equals(type)
|
||||
|| THING_TYPE_F470_UDP.equals(type)) {
|
||||
return new UDPConnector();
|
||||
} else if (THING_TYPE_F1X45_SERIAL.equals(type) || THING_TYPE_F1X55_SERIAL.equals(type)
|
||||
|| THING_TYPE_F750_SERIAL.equals(type) || THING_TYPE_F470_SERIAL.equals(type)) {
|
||||
return new SerialConnector(serialPortManager);
|
||||
} else if (THING_TYPE_F1X45_SIMULATOR.equals(type) || THING_TYPE_F1X55_SIMULATOR.equals(type)
|
||||
|| THING_TYPE_F750_SIMULATOR.equals(type) || THING_TYPE_F470_SIMULATOR.equals(type)) {
|
||||
return new SimulatorConnector();
|
||||
}
|
||||
|
||||
String description = String.format("Unknown connector type %s", type);
|
||||
throw new NibeHeatPumpException(description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(ChannelUID channelUID, Command command) {
|
||||
logger.debug("Received channel: {}, command: {}", channelUID, command);
|
||||
|
||||
int coilAddress = parseCoilAddressFromChannelUID(channelUID);
|
||||
|
||||
if (command.equals(RefreshType.REFRESH)) {
|
||||
logger.debug("Clearing cache value for channel '{}' to refresh channel data", channelUID);
|
||||
clearCache(coilAddress);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!configuration.enableWriteCommands) {
|
||||
logger.info(
|
||||
"All write commands denied, ignoring command! Change Nibe heat pump binding configuration if you want to enable write commands.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!itemsToEnableWrite.contains(coilAddress)) {
|
||||
logger.info(
|
||||
"Write commands to register '{}' not allowed, ignoring command! Add this register to Nibe heat pump binding configuration if you want to enable write commands.",
|
||||
coilAddress);
|
||||
return;
|
||||
}
|
||||
|
||||
if (connector != null) {
|
||||
VariableInformation variableInfo = VariableInformation.getVariableInfo(pumpModel, coilAddress);
|
||||
logger.debug("Using variable information for register {}: {}", coilAddress, variableInfo);
|
||||
|
||||
if (variableInfo != null && variableInfo.type == VariableInformation.Type.SETTING) {
|
||||
try {
|
||||
int value = convertCommandToNibeValue(variableInfo, command);
|
||||
|
||||
ModbusWriteRequestMessage msg = new ModbusWriteRequestMessage.MessageBuilder()
|
||||
.coilAddress(coilAddress).value(value).build();
|
||||
|
||||
writeResult = sendMessageToNibe(msg);
|
||||
ModbusWriteResponseMessage result = (ModbusWriteResponseMessage) writeResult.get(TIMEOUT,
|
||||
TimeUnit.MILLISECONDS);
|
||||
if (result != null) {
|
||||
if (result.isSuccessfull()) {
|
||||
logger.debug("Write message sending to heat pump succeeded");
|
||||
} else {
|
||||
logger.error("Message sending to heat pump failed, value not accepted by the heat pump");
|
||||
}
|
||||
} else {
|
||||
logger.debug("Something weird happen, result for write command is null");
|
||||
}
|
||||
} catch (TimeoutException e) {
|
||||
logger.warn("Message sending to heat pump failed, no response");
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||
"No response received from the heat pump");
|
||||
} catch (InterruptedException e) {
|
||||
logger.debug("Message sending to heat pump failed, sending interrupted");
|
||||
} catch (NibeHeatPumpException e) {
|
||||
logger.debug("Message sending to heat pump failed, exception {}", e.getMessage());
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage());
|
||||
} catch (CommandTypeNotSupportedException e) {
|
||||
logger.warn("Unsupported command type {} received for channel {}, coil address {}.",
|
||||
command.getClass().getName(), channelUID.getId(), coilAddress);
|
||||
} finally {
|
||||
writeResult = null;
|
||||
}
|
||||
|
||||
// Clear cache value to refresh coil data from the pump.
|
||||
// We might not know if write message have succeed or not, so let's always refresh it.
|
||||
logger.debug("Clearing cache value for channel '{}' to refresh channel data", channelUID);
|
||||
clearCache(coilAddress);
|
||||
} else {
|
||||
logger.debug("Command to channel '{}' rejected, because item is read only parameter", channelUID);
|
||||
}
|
||||
} else {
|
||||
logger.debug("No connection to heat pump");
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.HANDLER_MISSING_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelLinked(ChannelUID channelUID) {
|
||||
logger.debug("channelLinked: {}", channelUID);
|
||||
|
||||
// Add channel to polling loop
|
||||
int coilAddress = parseCoilAddressFromChannelUID(channelUID);
|
||||
synchronized (itemsToPoll) {
|
||||
if (!itemsToPoll.contains(coilAddress)) {
|
||||
logger.debug("New channel '{}' found, register '{}'", channelUID.getAsString(), coilAddress);
|
||||
itemsToPoll.add(coilAddress);
|
||||
}
|
||||
}
|
||||
clearCache(coilAddress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelUnlinked(ChannelUID channelUID) {
|
||||
logger.debug("channelUnlinked: {}", channelUID);
|
||||
|
||||
// remove channel from polling loop
|
||||
int coilAddress = parseCoilAddressFromChannelUID(channelUID);
|
||||
synchronized (itemsToPoll) {
|
||||
itemsToPoll.removeIf(c -> c.equals(coilAddress));
|
||||
}
|
||||
}
|
||||
|
||||
private int parseCoilAddressFromChannelUID(ChannelUID channelUID) {
|
||||
if (channelUID.getId().contains("#")) {
|
||||
String[] parts = channelUID.getId().split("#");
|
||||
return Integer.parseInt(parts[parts.length - 1]);
|
||||
} else {
|
||||
return Integer.parseInt(channelUID.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
logger.debug("Initialized Nibe Heat Pump device handler for {}", getThing().getUID());
|
||||
configuration = getConfigAs(NibeHeatPumpConfiguration.class);
|
||||
logger.debug("Using configuration: {}", configuration.toString());
|
||||
|
||||
try {
|
||||
parseWriteEnabledItems();
|
||||
connector = getConnector();
|
||||
} catch (IllegalArgumentException | NibeHeatPumpException e) {
|
||||
String description = String.format("Illegal configuration, %s", e.getMessage());
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, description);
|
||||
return;
|
||||
}
|
||||
|
||||
itemsToPoll.clear();
|
||||
itemsToPoll.addAll(this.getThing().getChannels().stream().filter(c -> isLinked(c.getUID())).map(c -> {
|
||||
int coilAddress = parseCoilAddressFromChannelUID(c.getUID());
|
||||
logger.debug("Linked channel '{}' found, register '{}'", c.getUID().getAsString(), coilAddress);
|
||||
return coilAddress;
|
||||
}).filter(c -> c != 0).collect(Collectors.toSet()));
|
||||
|
||||
logger.debug("Linked registers {}: {}", itemsToPoll.size(), itemsToPoll);
|
||||
|
||||
clearCache();
|
||||
|
||||
if (connectorTask == null || connectorTask.isCancelled()) {
|
||||
connectorTask = scheduler.scheduleWithFixedDelay(() -> {
|
||||
if (reconnectionRequest) {
|
||||
logger.debug("Restarting requested, restarting...");
|
||||
reconnectionRequest = false;
|
||||
closeConnection();
|
||||
}
|
||||
|
||||
logger.debug("Checking Nibe Heat pump connection, thing status = {}", thing.getStatus());
|
||||
connect();
|
||||
}, 0, 10, TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
||||
|
||||
private void connect() {
|
||||
if (!connector.isConnected()) {
|
||||
logger.debug("Connecting to heat pump");
|
||||
try {
|
||||
connector.addEventListener(this);
|
||||
connector.connect(configuration);
|
||||
updateStatus(ThingStatus.ONLINE);
|
||||
|
||||
if (pollingJob == null || pollingJob.isCancelled()) {
|
||||
logger.debug("Start refresh task, interval={}sec", 1);
|
||||
pollingJob = scheduler.scheduleWithFixedDelay(pollingRunnable, 0, 1, TimeUnit.SECONDS);
|
||||
}
|
||||
} catch (NibeHeatPumpException e) {
|
||||
logger.debug("Error occurred when connecting to heat pump, exception {}", e.getMessage());
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage());
|
||||
}
|
||||
} else {
|
||||
logger.debug("Connection to heat pump already open");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
logger.debug("Thing {} disposed.", getThing().getUID());
|
||||
|
||||
if (connectorTask != null && !connectorTask.isCancelled()) {
|
||||
connectorTask.cancel(true);
|
||||
connectorTask = null;
|
||||
}
|
||||
|
||||
closeConnection();
|
||||
}
|
||||
|
||||
private void closeConnection() {
|
||||
logger.debug("Closing connection to the heat pump");
|
||||
|
||||
if (pollingJob != null && !pollingJob.isCancelled()) {
|
||||
pollingJob.cancel(true);
|
||||
pollingJob = null;
|
||||
}
|
||||
|
||||
if (connector != null) {
|
||||
connector.removeEventListener(this);
|
||||
connector.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
private long refreshIntervalMillis() {
|
||||
return configuration.refreshInterval * 1000;
|
||||
}
|
||||
|
||||
private int convertCommandToNibeValue(VariableInformation variableInfo, Command command)
|
||||
throws CommandTypeNotSupportedException {
|
||||
int value;
|
||||
|
||||
if (command instanceof DecimalType || command instanceof QuantityType || command instanceof StringType) {
|
||||
BigDecimal v;
|
||||
if (command instanceof DecimalType) {
|
||||
v = ((DecimalType) command).toBigDecimal();
|
||||
} else if (command instanceof QuantityType) {
|
||||
v = ((QuantityType) command).toBigDecimal();
|
||||
} else {
|
||||
v = new BigDecimal(command.toString());
|
||||
}
|
||||
int decimals = (int) Math.log10(variableInfo.factor);
|
||||
value = v.movePointRight(decimals).intValue();
|
||||
} else if ((command instanceof OnOffType || command instanceof OpenClosedType || command instanceof UpDownType)
|
||||
&& variableInfo.factor == 1) {
|
||||
value = (command.equals(OnOffType.ON) || command.equals(UpDownType.UP)
|
||||
|| command.equals(OpenClosedType.OPEN)) ? 1 : 0;
|
||||
} else {
|
||||
throw new CommandTypeNotSupportedException();
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
private void parseWriteEnabledItems() throws IllegalArgumentException {
|
||||
itemsToEnableWrite.clear();
|
||||
if (configuration.enableWriteCommands && configuration.enableWriteCommandsToRegisters != null
|
||||
&& configuration.enableWriteCommandsToRegisters.length() > 0) {
|
||||
String[] items = configuration.enableWriteCommandsToRegisters.replace(" ", "").split(",");
|
||||
for (String item : items) {
|
||||
try {
|
||||
int coilAddress = Integer.parseInt(item);
|
||||
VariableInformation variableInformation = VariableInformation.getVariableInfo(pumpModel,
|
||||
coilAddress);
|
||||
if (variableInformation == null) {
|
||||
String description = String.format("Unknown register %s", coilAddress);
|
||||
throw new IllegalArgumentException(description);
|
||||
}
|
||||
itemsToEnableWrite.add(coilAddress);
|
||||
} catch (NumberFormatException e) {
|
||||
String description = String.format("Illegal register %s", item);
|
||||
throw new IllegalArgumentException(description);
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.debug("Enabled registers for write commands: {}", itemsToEnableWrite);
|
||||
}
|
||||
|
||||
private State convertNibeValueToState(VariableInformation variableInfo, int value, String acceptedItemType) {
|
||||
State state = UnDefType.UNDEF;
|
||||
long x;
|
||||
|
||||
NibeDataType dataType = variableInfo.dataType;
|
||||
int decimals = (int) Math.log10(variableInfo.factor);
|
||||
switch (dataType) {
|
||||
case U8:
|
||||
x = Byte.toUnsignedLong((byte) (value & 0xFF));
|
||||
break;
|
||||
case U16:
|
||||
x = Short.toUnsignedLong((short) (value & 0xFFFF));
|
||||
break;
|
||||
case U32:
|
||||
x = Integer.toUnsignedLong(value);
|
||||
break;
|
||||
case S8:
|
||||
x = (byte) (value & 0xFF);
|
||||
break;
|
||||
case S16:
|
||||
x = (short) (value & 0xFFFF);
|
||||
break;
|
||||
case S32:
|
||||
x = value;
|
||||
break;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
BigDecimal converted = new BigDecimal(x).movePointLeft(decimals).setScale(decimals, RoundingMode.HALF_EVEN);
|
||||
|
||||
if ("String".equalsIgnoreCase(acceptedItemType)) {
|
||||
state = new StringType(converted.toString());
|
||||
|
||||
} else if ("Switch".equalsIgnoreCase(acceptedItemType)) {
|
||||
state = converted.intValue() == 0 ? OnOffType.OFF : OnOffType.ON;
|
||||
|
||||
} else if ("Number".equalsIgnoreCase(acceptedItemType)) {
|
||||
state = new DecimalType(converted);
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
private void clearCache() {
|
||||
stateMap.clear();
|
||||
lastUpdateTime = 0;
|
||||
}
|
||||
|
||||
private void clearCache(int coilAddress) {
|
||||
stateMap.put(coilAddress, null);
|
||||
}
|
||||
|
||||
private synchronized NibeHeatPumpCommandResult sendMessageToNibe(NibeHeatPumpMessage msg)
|
||||
throws NibeHeatPumpException {
|
||||
logger.debug("Sending message: {}", msg);
|
||||
connector.sendDatagram(msg);
|
||||
return new NibeHeatPumpCommandResult();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void msgReceived(NibeHeatPumpMessage msg) {
|
||||
try {
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Received raw data: {}", msg.toHexString());
|
||||
}
|
||||
|
||||
logger.debug("Received message: {}", msg);
|
||||
|
||||
updateStatus(ThingStatus.ONLINE);
|
||||
|
||||
if (msg instanceof ModbusReadResponseMessage) {
|
||||
handleReadResponseMessage((ModbusReadResponseMessage) msg);
|
||||
} else if (msg instanceof ModbusWriteResponseMessage) {
|
||||
handleWriteResponseMessage((ModbusWriteResponseMessage) msg);
|
||||
} else if (msg instanceof ModbusDataReadOutMessage) {
|
||||
handleDataReadOutMessage((ModbusDataReadOutMessage) msg);
|
||||
} else {
|
||||
logger.debug("Received unknown message: {}", msg.toString());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.debug("Error occurred when parsing received message, reason: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void errorOccurred(String error) {
|
||||
logger.debug("Error '{}' occurred, re-establish the connection", error);
|
||||
reconnectionRequest = true;
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, error);
|
||||
}
|
||||
|
||||
private void handleReadResponseMessage(ModbusReadResponseMessage msg) {
|
||||
if (readResult != null) {
|
||||
readResult.set(msg);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleWriteResponseMessage(ModbusWriteResponseMessage msg) {
|
||||
if (writeResult != null) {
|
||||
writeResult.set(msg);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleDataReadOutMessage(ModbusDataReadOutMessage msg) {
|
||||
boolean parse = true;
|
||||
|
||||
logger.debug("Received data read out message");
|
||||
if (configuration.throttleTime > 0) {
|
||||
if ((lastUpdateTime + configuration.throttleTime) > System.currentTimeMillis()) {
|
||||
logger.debug("Skipping data read out message parsing");
|
||||
parse = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (parse) {
|
||||
logger.debug("Parsing data read out message");
|
||||
lastUpdateTime = System.currentTimeMillis();
|
||||
List<ModbusValue> regValues = msg.getValues();
|
||||
|
||||
if (regValues != null) {
|
||||
for (ModbusValue val : regValues) {
|
||||
handleVariableUpdate(pumpModel, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleVariableUpdate(PumpModel pumpModel, ModbusValue value) {
|
||||
logger.debug("Received variable update: {}", value);
|
||||
int coilAddress = value.getCoilAddress();
|
||||
|
||||
VariableInformation variableInfo = VariableInformation.getVariableInfo(pumpModel, coilAddress);
|
||||
|
||||
if (variableInfo != null) {
|
||||
logger.trace("Using variable information to register {}: {}", coilAddress, variableInfo);
|
||||
|
||||
int val = value.getValue();
|
||||
logger.debug("{} = {}", coilAddress + ":" + variableInfo.variable + "/" + variableInfo.factor, val);
|
||||
|
||||
CacheObject oldValue = stateMap.get(coilAddress);
|
||||
|
||||
if (oldValue != null && val == oldValue.value
|
||||
&& (oldValue.lastUpdateTime + refreshIntervalMillis() / 2) >= System.currentTimeMillis()) {
|
||||
logger.trace("Value did not change, ignoring update");
|
||||
} else {
|
||||
final String channelPrefix = (variableInfo.type == Type.SETTING ? "setting#" : "sensor#");
|
||||
final String channelId = channelPrefix + String.valueOf(coilAddress);
|
||||
final String acceptedItemType = thing.getChannel(channelId).getAcceptedItemType();
|
||||
|
||||
logger.trace("AcceptedItemType for channel {} = {}", channelId, acceptedItemType);
|
||||
State state = convertNibeValueToState(variableInfo, val, acceptedItemType);
|
||||
logger.debug("Setting state {} = {}", coilAddress + ":" + variableInfo.variable, state);
|
||||
stateMap.put(coilAddress, new CacheObject(System.currentTimeMillis(), val));
|
||||
updateState(new ChannelUID(getThing().getUID(), channelId), state);
|
||||
}
|
||||
} else {
|
||||
logger.debug("Unknown register {}", coilAddress);
|
||||
}
|
||||
}
|
||||
|
||||
protected class CacheObject {
|
||||
|
||||
/** Time when cache object updated in milliseconds */
|
||||
final long lastUpdateTime;
|
||||
|
||||
/** Cache value */
|
||||
final int value;
|
||||
|
||||
/**
|
||||
* Initialize cache object.
|
||||
*
|
||||
* @param lastUpdateTime Time in milliseconds.
|
||||
* @param value Cache value.
|
||||
*/
|
||||
CacheObject(long lastUpdateTime, int value) {
|
||||
this.lastUpdateTime = lastUpdateTime;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.message.NibeHeatPumpBaseMessage.MessageType;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
|
||||
/**
|
||||
* The {@link MessageFactory} implements factory class to create Nibe protocol messages.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class MessageFactory {
|
||||
|
||||
public static NibeHeatPumpMessage getMessage(byte[] message) throws NibeHeatPumpException {
|
||||
if (message != null) {
|
||||
byte messageTypeByte = NibeHeatPumpProtocol.getMessageType(message);
|
||||
MessageType messageType = NibeHeatPumpBaseMessage.getMessageType(messageTypeByte);
|
||||
|
||||
switch (messageType) {
|
||||
case MODBUS_DATA_READ_OUT_MSG:
|
||||
return new ModbusDataReadOutMessage(message);
|
||||
case MODBUS_READ_REQUEST_MSG:
|
||||
return new ModbusReadRequestMessage(message);
|
||||
case MODBUS_READ_RESPONSE_MSG:
|
||||
return new ModbusReadResponseMessage(message);
|
||||
case MODBUS_WRITE_REQUEST_MSG:
|
||||
return new ModbusWriteRequestMessage(message);
|
||||
case MODBUS_WRITE_RESPONSE_MSG:
|
||||
return new ModbusWriteResponseMessage(message);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
throw new NibeHeatPumpException("Illegal message (null)");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
|
||||
/**
|
||||
* The {@link ModbusDataReadOutMessage} implements Nibe data read out message.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusDataReadOutMessage extends NibeHeatPumpBaseMessage {
|
||||
|
||||
private List<ModbusValue> values;
|
||||
|
||||
private ModbusDataReadOutMessage(MessageBuilder builder) {
|
||||
super.msgType = MessageType.MODBUS_DATA_READ_OUT_MSG;
|
||||
this.values = builder.values;
|
||||
}
|
||||
|
||||
public ModbusDataReadOutMessage(byte[] data) throws NibeHeatPumpException {
|
||||
encodeMessage(data);
|
||||
}
|
||||
|
||||
public List<ModbusValue> getValues() {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encodeMessage(byte[] data) throws NibeHeatPumpException {
|
||||
values = parseMessage(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] decodeMessage() {
|
||||
return createDataReadOutPdu(values);
|
||||
}
|
||||
|
||||
private byte[] createDataReadOutPdu(List<ModbusValue> values) {
|
||||
byte datalen = (byte) (values.size() * 4);
|
||||
byte msglen = (byte) (6 + datalen);
|
||||
|
||||
byte[] data = new byte[msglen];
|
||||
|
||||
data[0] = NibeHeatPumpProtocol.FRAME_START_CHAR_FROM_NIBE;
|
||||
data[1] = 0x00;
|
||||
data[2] = NibeHeatPumpProtocol.ADR_MODBUS40;
|
||||
data[3] = NibeHeatPumpProtocol.CMD_MODBUS_DATA_MSG;
|
||||
data[4] = datalen;
|
||||
|
||||
int i = NibeHeatPumpProtocol.OFFSET_DATA;
|
||||
|
||||
for (ModbusValue value : values) {
|
||||
|
||||
int coildAddress = value.getCoilAddress();
|
||||
int val = value.getValue();
|
||||
|
||||
data[i + 0] = (byte) (coildAddress & 0xFF);
|
||||
data[i + 1] = (byte) ((coildAddress >> 8) & 0xFF);
|
||||
data[i + 2] = (byte) (val & 0xFF);
|
||||
data[i + 3] = (byte) ((val >> 8) & 0xFF);
|
||||
i += 4;
|
||||
}
|
||||
|
||||
data[msglen - 1] = NibeHeatPumpProtocol.calculateChecksum(data, 2, msglen);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = super.toString();
|
||||
str += ", Values: ";
|
||||
str += values.toString();
|
||||
return str;
|
||||
}
|
||||
|
||||
private List<ModbusValue> parseMessage(byte[] data) throws NibeHeatPumpException {
|
||||
if (NibeHeatPumpProtocol.isModbus40DataReadOut(data)) {
|
||||
super.encodeMessage(data);
|
||||
final int msglen = 5 + rawMessage[NibeHeatPumpProtocol.OFFSET_LEN];
|
||||
|
||||
List<ModbusValue> vals = new ArrayList<>();
|
||||
|
||||
try {
|
||||
for (int i = NibeHeatPumpProtocol.OFFSET_DATA; i < (msglen - 1); i += 4) {
|
||||
|
||||
int id = ((rawMessage[i + 1] & 0xFF) << 8 | (rawMessage[i + 0] & 0xFF));
|
||||
int value = (rawMessage[i + 3] & 0xFF) << 8 | (rawMessage[i + 2] & 0xFF);
|
||||
|
||||
if (id != 0xFFFF) {
|
||||
vals.add(new ModbusValue(id, value));
|
||||
}
|
||||
}
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
throw new NibeHeatPumpException("Error occurred during data parsing", e);
|
||||
}
|
||||
|
||||
return vals;
|
||||
|
||||
} else {
|
||||
throw new NibeHeatPumpException("Not Modbus data readout message");
|
||||
}
|
||||
}
|
||||
|
||||
public static class MessageBuilder {
|
||||
private List<ModbusValue> values = new ArrayList<>();
|
||||
|
||||
public MessageBuilder values(List<ModbusValue> values) {
|
||||
this.values = values;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MessageBuilder value(ModbusValue value) {
|
||||
this.values.add(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MessageBuilder value(int coilAddress, int value) {
|
||||
this.values.add(new ModbusValue(coilAddress, value));
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModbusDataReadOutMessage build() {
|
||||
return new ModbusDataReadOutMessage(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
|
||||
/**
|
||||
* The {@link ModbusReadRequestMessage} implements Nibe read request message.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusReadRequestMessage extends NibeHeatPumpBaseMessage {
|
||||
|
||||
private int coilAddress;
|
||||
|
||||
private ModbusReadRequestMessage(MessageBuilder builder) {
|
||||
super.msgType = MessageType.MODBUS_READ_REQUEST_MSG;
|
||||
this.coilAddress = builder.coilAddress;
|
||||
}
|
||||
|
||||
ModbusReadRequestMessage(byte[] data) throws NibeHeatPumpException {
|
||||
encodeMessage(data);
|
||||
}
|
||||
|
||||
public int getCoilAddress() {
|
||||
return coilAddress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encodeMessage(byte[] data) throws NibeHeatPumpException {
|
||||
if (NibeHeatPumpProtocol.isModbus40ReadRequestPdu(data)) {
|
||||
super.encodeMessage(data);
|
||||
coilAddress = (data[4] & 0xFF) << 8 | (data[3] & 0xFF);
|
||||
} else {
|
||||
throw new NibeHeatPumpException("Not Read Request message");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] decodeMessage() {
|
||||
return createModbus40ReadPdu(coilAddress);
|
||||
}
|
||||
|
||||
private byte[] createModbus40ReadPdu(int coilAddress) {
|
||||
byte[] data = new byte[6];
|
||||
data[0] = NibeHeatPumpProtocol.FRAME_START_CHAR_TO_NIBE;
|
||||
data[1] = NibeHeatPumpProtocol.CMD_MODBUS_READ_REQ;
|
||||
data[2] = (byte) 0x02; // data len
|
||||
data[3] = (byte) (coilAddress & 0xFF);
|
||||
data[4] = (byte) ((coilAddress >> 8) & 0xFF);
|
||||
data[5] = NibeHeatPumpProtocol.calculateChecksum(data, 0, 5);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = super.toString();
|
||||
str += ", Coil address = " + coilAddress;
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
public static class MessageBuilder {
|
||||
private int coilAddress;
|
||||
|
||||
public MessageBuilder coilAddress(int coilAddress) {
|
||||
this.coilAddress = coilAddress;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModbusReadRequestMessage build() {
|
||||
return new ModbusReadRequestMessage(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toHexString() {
|
||||
if (rawMessage == null) {
|
||||
rawMessage = decodeMessage();
|
||||
}
|
||||
|
||||
return super.toHexString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
|
||||
/**
|
||||
* The {@link ModbusReadResponseMessage} implements Nibe read response message.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusReadResponseMessage extends NibeHeatPumpBaseMessage {
|
||||
|
||||
private int coilAddress;
|
||||
private int value;
|
||||
|
||||
private ModbusReadResponseMessage(MessageBuilder builder) {
|
||||
super.msgType = MessageType.MODBUS_READ_RESPONSE_MSG;
|
||||
this.coilAddress = builder.coilAddress;
|
||||
this.value = builder.value;
|
||||
}
|
||||
|
||||
public ModbusReadResponseMessage(byte[] data) throws NibeHeatPumpException {
|
||||
encodeMessage(data);
|
||||
}
|
||||
|
||||
public int getCoilAddress() {
|
||||
return coilAddress;
|
||||
}
|
||||
|
||||
public void setCoilAddress(int coilAddress) {
|
||||
this.coilAddress = coilAddress;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public ModbusValue getValueAsModbusValue() {
|
||||
return new ModbusValue(coilAddress, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encodeMessage(byte[] data) throws NibeHeatPumpException {
|
||||
super.encodeMessage(data);
|
||||
|
||||
coilAddress = (data[3] & 0xFF) << 8 | (data[4] & 0xFF);
|
||||
parseMessage(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] decodeMessage() {
|
||||
return createModbusReadResponsePdu(coilAddress, value);
|
||||
}
|
||||
|
||||
private byte[] createModbusReadResponsePdu(int coilAddress, int value) {
|
||||
byte[] data = new byte[12];
|
||||
|
||||
data[0] = NibeHeatPumpProtocol.FRAME_START_CHAR_FROM_NIBE;
|
||||
data[1] = 0x00;
|
||||
data[2] = NibeHeatPumpProtocol.ADR_MODBUS40;
|
||||
data[3] = NibeHeatPumpProtocol.CMD_MODBUS_READ_RESP;
|
||||
data[4] = (byte) 0x06; // data len
|
||||
|
||||
data[5] = (byte) (coilAddress & 0xFF);
|
||||
data[6] = (byte) ((coilAddress >> 8) & 0xFF);
|
||||
|
||||
data[7] = (byte) (value & 0xFF);
|
||||
data[8] = (byte) ((value >> 8) & 0xFF);
|
||||
data[9] = (byte) ((value >> 16) & 0xFF);
|
||||
data[10] = (byte) ((value >> 24) & 0xFF);
|
||||
|
||||
data[11] = NibeHeatPumpProtocol.calculateChecksum(data, 2, 11);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = "";
|
||||
|
||||
str += super.toString();
|
||||
str += ", Coil address = " + coilAddress;
|
||||
str += ", Value = " + value;
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
private void parseMessage(byte[] data) throws NibeHeatPumpException {
|
||||
if (NibeHeatPumpProtocol.isModbus40ReadResponse(data)) {
|
||||
super.encodeMessage(data);
|
||||
coilAddress = ((data[NibeHeatPumpProtocol.OFFSET_DATA + 1] & 0xFF) << 8
|
||||
| (data[NibeHeatPumpProtocol.OFFSET_DATA + 0] & 0xFF));
|
||||
value = (data[NibeHeatPumpProtocol.OFFSET_DATA + 5] & 0xFF) << 24
|
||||
| (data[NibeHeatPumpProtocol.OFFSET_DATA + 4] & 0xFF) << 16
|
||||
| (data[NibeHeatPumpProtocol.OFFSET_DATA + 3] & 0xFF) << 8
|
||||
| (data[NibeHeatPumpProtocol.OFFSET_DATA + 2] & 0xFF);
|
||||
|
||||
} else {
|
||||
throw new NibeHeatPumpException("Not Read Response message");
|
||||
}
|
||||
}
|
||||
|
||||
public static class MessageBuilder {
|
||||
private int coilAddress;
|
||||
private int value;
|
||||
|
||||
public MessageBuilder coilAddress(int coilAddress) {
|
||||
this.coilAddress = coilAddress;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MessageBuilder value(int value) {
|
||||
this.value = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModbusReadResponseMessage build() {
|
||||
return new ModbusReadResponseMessage(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
/**
|
||||
* The {@link ModbusValue} define class for Modbus values of the Nibe communication.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusValue {
|
||||
|
||||
private int coilAddress;
|
||||
private int value;
|
||||
|
||||
public ModbusValue(int coilAddress, int value) {
|
||||
this.coilAddress = coilAddress;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getCoilAddress() {
|
||||
return coilAddress;
|
||||
}
|
||||
|
||||
public void setCoilAddress(int coilAddress) {
|
||||
this.coilAddress = coilAddress;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = "{";
|
||||
|
||||
str += "Coil address = " + coilAddress;
|
||||
str += ", Value = " + value;
|
||||
str += "}";
|
||||
|
||||
return str;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
|
||||
/**
|
||||
* The {@link ModbusWriteRequestMessage} implements Nibe write request message.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusWriteRequestMessage extends NibeHeatPumpBaseMessage {
|
||||
|
||||
private int coilAddress;
|
||||
private int value;
|
||||
|
||||
private ModbusWriteRequestMessage(MessageBuilder builder) {
|
||||
super.msgType = MessageType.MODBUS_WRITE_REQUEST_MSG;
|
||||
this.coilAddress = builder.coilAddress;
|
||||
this.value = builder.value;
|
||||
}
|
||||
|
||||
public ModbusWriteRequestMessage(byte[] data) throws NibeHeatPumpException {
|
||||
encodeMessage(data);
|
||||
}
|
||||
|
||||
public int getCoilAddress() {
|
||||
return coilAddress;
|
||||
}
|
||||
|
||||
public void setCoildAddress(int coildAddress) {
|
||||
this.coilAddress = coildAddress;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encodeMessage(byte[] data) throws NibeHeatPumpException {
|
||||
if (NibeHeatPumpProtocol.isModbus40WriteRequestPdu(data)) {
|
||||
super.encodeMessage(data);
|
||||
coilAddress = (data[4] & 0xFF) << 8 | (data[3] & 0xFF);
|
||||
value = (data[8] & 0xFF) << 24 | (data[7] & 0xFF) << 16 | (data[6] & 0xFF) << 8 | (data[5] & 0xFF);
|
||||
} else {
|
||||
throw new NibeHeatPumpException("Not Write Request message");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] decodeMessage() {
|
||||
return createModbus40WritePdu(coilAddress, value);
|
||||
}
|
||||
|
||||
private byte[] createModbus40WritePdu(int coildAddress, int value) {
|
||||
byte[] data = new byte[10];
|
||||
|
||||
data[0] = NibeHeatPumpProtocol.FRAME_START_CHAR_TO_NIBE;
|
||||
data[1] = NibeHeatPumpProtocol.CMD_MODBUS_WRITE_REQ;
|
||||
data[2] = (byte) 0x06; // data len
|
||||
data[3] = (byte) (coildAddress & 0xFF);
|
||||
data[4] = (byte) ((coildAddress >> 8) & 0xFF);
|
||||
data[5] = (byte) (value & 0xFF);
|
||||
data[6] = (byte) ((value >> 8) & 0xFF);
|
||||
data[7] = (byte) ((value >> 16) & 0xFF);
|
||||
data[8] = (byte) ((value >> 24) & 0xFF);
|
||||
data[9] = NibeHeatPumpProtocol.calculateChecksum(data, 0, 9);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = "";
|
||||
|
||||
str += super.toString();
|
||||
str += ", Coil address = " + coilAddress;
|
||||
str += ", Value = " + value;
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
public static class MessageBuilder {
|
||||
private int coilAddress;
|
||||
private int value;
|
||||
|
||||
public MessageBuilder coilAddress(int coilAddress) {
|
||||
this.coilAddress = coilAddress;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MessageBuilder value(int value) {
|
||||
this.value = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModbusWriteRequestMessage build() {
|
||||
return new ModbusWriteRequestMessage(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toHexString() {
|
||||
if (rawMessage == null) {
|
||||
rawMessage = decodeMessage();
|
||||
}
|
||||
|
||||
return super.toHexString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
|
||||
/**
|
||||
* The {@link ModbusWriteResponseMessage} implements Nibe write response message.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusWriteResponseMessage extends NibeHeatPumpBaseMessage {
|
||||
|
||||
private boolean result;
|
||||
|
||||
private ModbusWriteResponseMessage(MessageBuilder builder) {
|
||||
super.msgType = MessageType.MODBUS_WRITE_RESPONSE_MSG;
|
||||
this.result = builder.result;
|
||||
}
|
||||
|
||||
public ModbusWriteResponseMessage(byte[] data) throws NibeHeatPumpException {
|
||||
encodeMessage(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encodeMessage(byte[] data) throws NibeHeatPumpException {
|
||||
result = modbus40WriteSuccess(data);
|
||||
}
|
||||
|
||||
public boolean isSuccessfull() {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] decodeMessage() {
|
||||
return createModbusWriteResponsePdu(result);
|
||||
}
|
||||
|
||||
private byte[] createModbusWriteResponsePdu(boolean result) {
|
||||
byte[] data = new byte[7];
|
||||
|
||||
data[0] = NibeHeatPumpProtocol.FRAME_START_CHAR_FROM_NIBE;
|
||||
data[1] = 0x00;
|
||||
data[2] = NibeHeatPumpProtocol.ADR_MODBUS40;
|
||||
data[3] = NibeHeatPumpProtocol.CMD_MODBUS_WRITE_RESP;
|
||||
data[4] = (byte) 0x01; // data len
|
||||
data[5] = result ? (byte) 0x01 : (byte) 0x00;
|
||||
data[6] = NibeHeatPumpProtocol.calculateChecksum(data, 2, 6);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = super.toString();
|
||||
str += ", Result = " + result;
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
private boolean modbus40WriteSuccess(byte[] data) throws NibeHeatPumpException {
|
||||
if (NibeHeatPumpProtocol.isModbus40WriteResponsePdu(data)) {
|
||||
super.encodeMessage(data);
|
||||
return data[NibeHeatPumpProtocol.OFFSET_DATA] == 1;
|
||||
}
|
||||
throw new NibeHeatPumpException("Not Write Response message");
|
||||
}
|
||||
|
||||
public static class MessageBuilder {
|
||||
private boolean result;
|
||||
|
||||
public MessageBuilder result(boolean result) {
|
||||
this.result = result;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ModbusWriteResponseMessage build() {
|
||||
return new ModbusWriteResponseMessage(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocol;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpBaseMessage} define abstract class for Nibe messages. All message implementations should
|
||||
* extend this class.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public abstract class NibeHeatPumpBaseMessage implements NibeHeatPumpMessage {
|
||||
|
||||
public static MessageType getMessageType(byte messageType) {
|
||||
for (MessageType p : MessageType.values()) {
|
||||
if (p.toByte() == messageType) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
return MessageType.UNKNOWN;
|
||||
}
|
||||
|
||||
public enum MessageType {
|
||||
MODBUS_DATA_READ_OUT_MSG(NibeHeatPumpProtocol.CMD_MODBUS_DATA_MSG),
|
||||
MODBUS_READ_REQUEST_MSG(NibeHeatPumpProtocol.CMD_MODBUS_READ_REQ),
|
||||
MODBUS_READ_RESPONSE_MSG(NibeHeatPumpProtocol.CMD_MODBUS_READ_RESP),
|
||||
MODBUS_WRITE_REQUEST_MSG(NibeHeatPumpProtocol.CMD_MODBUS_WRITE_REQ),
|
||||
MODBUS_WRITE_RESPONSE_MSG(NibeHeatPumpProtocol.CMD_MODBUS_WRITE_RESP),
|
||||
|
||||
UNKNOWN(-1);
|
||||
|
||||
private final int msgType;
|
||||
|
||||
MessageType(int msgType) {
|
||||
this.msgType = msgType;
|
||||
}
|
||||
|
||||
public byte toByte() {
|
||||
return (byte) msgType;
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] rawMessage;
|
||||
public MessageType msgType = MessageType.UNKNOWN;
|
||||
public byte msgId;
|
||||
|
||||
public NibeHeatPumpBaseMessage() {
|
||||
}
|
||||
|
||||
public NibeHeatPumpBaseMessage(byte[] data) throws NibeHeatPumpException {
|
||||
encodeMessage(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encodeMessage(byte[] data) throws NibeHeatPumpException {
|
||||
data = NibeHeatPumpProtocol.checkMessageChecksumAndRemoveDoubles(data);
|
||||
rawMessage = data;
|
||||
msgId = data[1];
|
||||
|
||||
byte messageTypeByte = NibeHeatPumpProtocol.getMessageType(data);
|
||||
msgType = NibeHeatPumpBaseMessage.getMessageType(messageTypeByte);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Message type = " + msgType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toHexString() {
|
||||
if (rawMessage == null) {
|
||||
return null;
|
||||
} else {
|
||||
return HexUtils.bytesToHex(rawMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpMessage} define interface for Nibe messages.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public interface NibeHeatPumpMessage {
|
||||
|
||||
/**
|
||||
* Procedure for encode raw data.
|
||||
*
|
||||
* @param data
|
||||
* Raw data.
|
||||
*/
|
||||
void encodeMessage(byte[] data) throws NibeHeatPumpException;
|
||||
|
||||
/**
|
||||
* Procedure for decode object to raw data.
|
||||
*
|
||||
* @return raw data.
|
||||
*/
|
||||
byte[] decodeMessage();
|
||||
|
||||
/**
|
||||
* Procedure to covert message to hex string format. Used for
|
||||
* logging purposes.
|
||||
*
|
||||
*/
|
||||
String toHexString();
|
||||
}
|
||||
@@ -0,0 +1,783 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.models;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.NibeDataType;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.Type;
|
||||
|
||||
/**
|
||||
* Class which holds all data variables of F1x45 heat pumps.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class F1X45 {
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
private static final Map<Integer, VariableInformation> VARIABLE_INFO_F1X45 = Collections
|
||||
.unmodifiableMap(new HashMap<Integer, VariableInformation>() {
|
||||
{
|
||||
// @formatter:off
|
||||
put(40004, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Outdoor temp"));
|
||||
put(40005, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT2 Supply temp S4"));
|
||||
put(40006, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT2 Supply temp S3"));
|
||||
put(40007, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT2 Supply temp S2"));
|
||||
put(40008, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT2 Supply temp S1"));
|
||||
put(40012, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT3 Return temp"));
|
||||
put(40013, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT7 Hot Water top"));
|
||||
put(40014, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT6 Hot Water load"));
|
||||
put(40015, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT10 Brine in temp"));
|
||||
put(40016, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT11 Brine out temp"));
|
||||
put(40017, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT12 Cond. out"));
|
||||
put(40018, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT14 Hot gas temp"));
|
||||
put(40019, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT15 Liquid line"));
|
||||
put(40022, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT17 Suction"));
|
||||
put(40025, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT20 Exhaust air temp. 1"));
|
||||
put(40026, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT21 Vented air temp. 1"));
|
||||
put(40028, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ1-BT26 Temp Collector in FLM 1"));
|
||||
put(40029, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ1-BT27 Temp Collector out FLM 1"));
|
||||
put(40030, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT50 Room Temp S4"));
|
||||
put(40031, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT50 Room Temp S3"));
|
||||
put(40032, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT50 Room Temp S2"));
|
||||
put(40033, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT50 Room Temp S1"));
|
||||
put(40042, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "CL11-BT51 Pool 1 Temp"));
|
||||
put(40043, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP8-BT53 Solar Panel Temp"));
|
||||
put(40044, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP8-BT54 Solar Load Temp"));
|
||||
put(40045, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EQ1-BT64 Cool Supply Temp"));
|
||||
put(40046, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EQ1-BT65 Cool Return Temp"));
|
||||
put(40054, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "EB100-FD1 Temperature limiter"));
|
||||
put(40067, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Average"));
|
||||
put(40070, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EM1-BT52 Boiler temperature"));
|
||||
put(40071, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT25 external supply temp"));
|
||||
put(40072, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BF1 Flow"));
|
||||
put(40074, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "EB100-FR1 Anode Status"));
|
||||
put(40079, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "EB100-BE3 Current Phase 3"));
|
||||
put(40081, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "EB100-BE2 Current Phase 2"));
|
||||
put(40083, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "EB100-BE1 Current Phase 1"));
|
||||
put(40106, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "CL12-BT51 Pool 2 Temp"));
|
||||
put(40107, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT20 Exhaust air temp. 4"));
|
||||
put(40108, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT20 Exhaust air temp. 3"));
|
||||
put(40109, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT20 Exhaust air temp. 2"));
|
||||
put(40110, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT21 Vented air temp. 4"));
|
||||
put(40111, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT21 Vented air temp. 3"));
|
||||
put(40112, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT21 Vented air temp. 2"));
|
||||
put(40113, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ4-BT26 Temp Collector in FLM 4"));
|
||||
put(40114, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ3-BT26 Temp Collector in FLM 3"));
|
||||
put(40115, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ2-BT26 Temp Collector in FLM 2"));
|
||||
put(40116, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ4-BT27 Temp Collector out FLM 4"));
|
||||
put(40117, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ3-BT27 Temp Collector out FLM 3"));
|
||||
put(40118, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ2-BT27 Temp Collector out FLM 2"));
|
||||
put(40127, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT3 Return temp S4"));
|
||||
put(40128, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT3 Return temp S3"));
|
||||
put(40129, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT3 Return temp S2"));
|
||||
put(40155, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EQ1-BT57 Collector temp."));
|
||||
put(40156, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EQ1-BT75 Heatdump temp."));
|
||||
put(43001, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Software version"));
|
||||
put(43005, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Degree Minutes"));
|
||||
put(43006, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calculated Supply Temperature S4"));
|
||||
put(43007, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calculated Supply Temperature S3"));
|
||||
put(43008, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calculated Supply Temperature S2"));
|
||||
put(43009, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calculated Supply Temperature S1"));
|
||||
put(43013, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Freeze Protection Status"));
|
||||
put(43024, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Status Cooling"));
|
||||
put(43081, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. op.time add."));
|
||||
put(43084, new VariableInformation( 100, NibeDataType.S16, Type.SENSOR , "Int. el.add. Power"));
|
||||
put(43086, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Prio"));
|
||||
put(43091, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Int. el.add. State"));
|
||||
put(43097, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Status of the shunt controlled additional heat accessory"));
|
||||
put(43103, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "HPAC state"));
|
||||
put(43108, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(43152, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Internal cooling blocked"));
|
||||
put(43158, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S4"));
|
||||
put(43159, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S3"));
|
||||
put(43160, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S2"));
|
||||
put(43161, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S1"));
|
||||
put(43163, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Blocking status of the shunt controlled add heat acc"));
|
||||
put(43164, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Cooling blocked"));
|
||||
put(43171, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Blocking status of the step controlled add heat acc"));
|
||||
put(43189, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Ext. Heat Medium Pump"));
|
||||
put(43230, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Accumulated energy"));
|
||||
put(43239, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. HW op.time add."));
|
||||
put(43395, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "HPAC Relays"));
|
||||
put(43416, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Compressor starts EB100-EP14"));
|
||||
put(43420, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Tot. op.time compr. EB100-EP14"));
|
||||
put(43424, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Tot. HW op.time compr. EB100-EP14"));
|
||||
put(43427, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Compressor State EP14"));
|
||||
put(43431, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Supply Pump State EP14"));
|
||||
put(43433, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Brine pump state EP14"));
|
||||
put(43435, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Compressor status EP14"));
|
||||
put(43437, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "HM-pump Status EP14"));
|
||||
put(43439, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Brinepump Status EP14"));
|
||||
put(43473, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Heat Compressors"));
|
||||
put(43474, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Hot Water Compressors"));
|
||||
put(43475, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 1 Compressors"));
|
||||
put(43484, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "FLM Cooling Activated"));
|
||||
put(43485, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "FLM Cooling Activated"));
|
||||
put(43486, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "FLM Cooling Activated"));
|
||||
put(43487, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "FLM Cooling Activated"));
|
||||
put(43514, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "PCA-Base Relays EP14"));
|
||||
put(43516, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "PCA-Power Relays EP14"));
|
||||
put(43560, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 2 blocked"));
|
||||
put(43561, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 1 blocked"));
|
||||
put(43563, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 2 valve"));
|
||||
put(43564, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 1 valve"));
|
||||
put(43577, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 2 Compressors"));
|
||||
put(43580, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB108 Version"));
|
||||
put(43598, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108 Slave Type"));
|
||||
put(43599, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108 Compressor Size"));
|
||||
put(43600, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT3 Return temp."));
|
||||
put(43601, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT10 Brine in temp"));
|
||||
put(43602, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT11 Brine out temp"));
|
||||
put(43603, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT12 Cond. out"));
|
||||
put(43604, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT14 Hot gas temp"));
|
||||
put(43605, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT15 Liquid line"));
|
||||
put(43606, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT17 Suction"));
|
||||
put(43607, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BT29 Compr. Oil. temp."));
|
||||
put(43608, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP15-BP8 Pressure transmitter"));
|
||||
put(43609, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP15 Compressor State"));
|
||||
put(43610, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP15 Compr. time to start"));
|
||||
put(43611, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB108-EP15 Relay status"));
|
||||
put(43612, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP15 Heat med. pump status"));
|
||||
put(43613, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP15 Brine pump status"));
|
||||
put(43614, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB108-EP15 Compressor starts"));
|
||||
put(43616, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB108-EP15 Tot. op.time compr"));
|
||||
put(43618, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB108-EP15 Tot. HW op.time compr"));
|
||||
put(43620, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB108-EP15 Alarm number"));
|
||||
put(43621, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT3 Return temp."));
|
||||
put(43622, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT10 Brine in temp"));
|
||||
put(43623, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT11 Brine out temp"));
|
||||
put(43624, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT12 Cond. out"));
|
||||
put(43625, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT14 Hot gas temp"));
|
||||
put(43626, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT15 Liquid line"));
|
||||
put(43627, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT17 Suction"));
|
||||
put(43628, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BT29 Compr. Oil. temp."));
|
||||
put(43629, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-EP14-BP8 Pressure transmitter"));
|
||||
put(43630, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP14 Compressor State"));
|
||||
put(43631, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP14 Compr. time to start"));
|
||||
put(43632, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB108-EP14 Relay status"));
|
||||
put(43633, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP14 Heat med. pump status"));
|
||||
put(43634, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP14 Brine pump status"));
|
||||
put(43635, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB108-EP14 Compressor starts"));
|
||||
put(43637, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB108-EP14 Tot. op.time compr"));
|
||||
put(43639, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB108-EP14 Tot. HW op.time compr"));
|
||||
put(43641, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB108-EP14 Alarm number"));
|
||||
put(43642, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB107 Version"));
|
||||
put(43660, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107 Slave Type"));
|
||||
put(43661, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107 Compressor Size"));
|
||||
put(43662, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT3 Return temp."));
|
||||
put(43663, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT10 Brine in temp"));
|
||||
put(43664, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT11 Brine out temp"));
|
||||
put(43665, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT12 Cond. out"));
|
||||
put(43666, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT14 Hot gas temp"));
|
||||
put(43667, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT15 Liquid line"));
|
||||
put(43668, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT17 Suction"));
|
||||
put(43669, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BT29 Compr. Oil. temp."));
|
||||
put(43670, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP15-BP8 Pressure transmitter"));
|
||||
put(43671, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP15 Compressor State"));
|
||||
put(43672, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP15 Compr. time to start"));
|
||||
put(43673, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB107-EP15 Relay status"));
|
||||
put(43674, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP15 Heat med. pump status"));
|
||||
put(43675, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP15 Brine pump status"));
|
||||
put(43676, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB107-EP15 Compressor starts"));
|
||||
put(43678, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB107-EP15 Tot. op.time compr"));
|
||||
put(43680, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB107-EP15 Tot. HW op.time compr"));
|
||||
put(43682, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB107-EP15 Alarm number"));
|
||||
put(43683, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT3 Return temp."));
|
||||
put(43684, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT10 Brine in temp"));
|
||||
put(43685, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT11 Brine out temp"));
|
||||
put(43686, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT12 Cond. out"));
|
||||
put(43687, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT14 Hot gas temp"));
|
||||
put(43688, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT15 Liquid line"));
|
||||
put(43689, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT17 Suction"));
|
||||
put(43690, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BT29 Compr. Oil. temp."));
|
||||
put(43691, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-EP14-BP8 Pressure transmitter"));
|
||||
put(43692, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP14 Compressor State"));
|
||||
put(43693, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP14 Compr. time to start"));
|
||||
put(43694, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB107-EP14 Relay status"));
|
||||
put(43695, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP14 Heat med. pump status"));
|
||||
put(43696, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP14 Brine pump status"));
|
||||
put(43697, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB107-EP14 Compressor starts"));
|
||||
put(43699, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB107-EP14 Tot. op.time compr"));
|
||||
put(43701, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB107-EP14 Tot. HW op.time compr"));
|
||||
put(43703, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB107-EP14 Alarm number"));
|
||||
put(43704, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB106 Version"));
|
||||
put(43722, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106 Slave Type"));
|
||||
put(43723, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106 Compressor Size"));
|
||||
put(43724, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT3 Return temp."));
|
||||
put(43725, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT10 Brine in temp"));
|
||||
put(43726, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT11 Brine out temp"));
|
||||
put(43727, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT12 Cond. out"));
|
||||
put(43728, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT14 Hot gas temp"));
|
||||
put(43729, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT15 Liquid line"));
|
||||
put(43730, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT17 Suction"));
|
||||
put(43731, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BT29 Compr. Oil. temp."));
|
||||
put(43732, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP15-BP8 Pressure transmitter"));
|
||||
put(43733, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP15 Compressor State"));
|
||||
put(43734, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP15 Compr. time to start"));
|
||||
put(43735, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB106-EP15 Relay status"));
|
||||
put(43736, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP15 Heat med. pump status"));
|
||||
put(43737, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP15 Brine pump status"));
|
||||
put(43738, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB106-EP15 Compressor starts"));
|
||||
put(43740, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB106-EP15 Tot. op.time compr"));
|
||||
put(43742, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB106-EP15 Tot. HW op.time compr"));
|
||||
put(43744, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB106-EP15 Alarm number"));
|
||||
put(43745, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT3 Return temp."));
|
||||
put(43746, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT10 Brine in temp"));
|
||||
put(43747, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT11 Brine out temp"));
|
||||
put(43748, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT12 Cond. out"));
|
||||
put(43749, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT14 Hot gas temp"));
|
||||
put(43750, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT15 Liquid line"));
|
||||
put(43751, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT17 Suction"));
|
||||
put(43752, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BT29 Compr. Oil. temp."));
|
||||
put(43753, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-EP14-BP8 Pressure transmitter"));
|
||||
put(43754, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP14 Compressor State"));
|
||||
put(43755, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP14 Compr. time to start"));
|
||||
put(43756, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB106-EP14 Relay status"));
|
||||
put(43757, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP14 Heat med. pump status"));
|
||||
put(43758, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP14 Brine pump status"));
|
||||
put(43759, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB106-EP14 Compressor starts"));
|
||||
put(43761, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB106-EP14 Tot. op.time compr"));
|
||||
put(43763, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB106-EP14 Tot. HW op.time compr"));
|
||||
put(43765, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB106-EP14 Alarm number"));
|
||||
put(43766, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB105 Version"));
|
||||
put(43784, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105 Slave Type"));
|
||||
put(43785, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105 Compressor Size"));
|
||||
put(43786, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT3 Return temp."));
|
||||
put(43787, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT10 Brine in temp"));
|
||||
put(43788, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT11 Brine out temp"));
|
||||
put(43789, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT12 Cond. out"));
|
||||
put(43790, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT14 Hot gas temp"));
|
||||
put(43791, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT15 Liquid line"));
|
||||
put(43792, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT17 Suction"));
|
||||
put(43793, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BT29 Compr. Oil. temp."));
|
||||
put(43794, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP15-BP8 Pressure transmitter"));
|
||||
put(43795, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP15 Compressor State"));
|
||||
put(43796, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP15 Compr. time to start"));
|
||||
put(43797, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB105-EP15 Relay status"));
|
||||
put(43798, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP15 Heat med. pump status"));
|
||||
put(43799, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP15 Brine pump status"));
|
||||
put(43800, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB105-EP15 Compressor starts"));
|
||||
put(43802, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB105-EP15 Tot. op.time compr"));
|
||||
put(43804, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB105-EP15 Tot. HW op.time compr"));
|
||||
put(43806, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB105-EP15 Alarm number"));
|
||||
put(43807, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT3 Return temp."));
|
||||
put(43808, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT10 Brine in temp"));
|
||||
put(43809, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT11 Brine out temp"));
|
||||
put(43810, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT12 Cond. out"));
|
||||
put(43811, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT14 Hot gas temp"));
|
||||
put(43812, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT15 Liquid line"));
|
||||
put(43813, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT17 Suction"));
|
||||
put(43814, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BT29 Compr. Oil. temp."));
|
||||
put(43815, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-EP14-BP8 Pressure transmitter"));
|
||||
put(43816, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP14 Compressor State"));
|
||||
put(43817, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP14 Compr. time to start"));
|
||||
put(43818, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB105-EP14 Relay status"));
|
||||
put(43819, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP14 Heat med. pump status"));
|
||||
put(43820, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP14 Brine pump status"));
|
||||
put(43821, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB105-EP14 Compressor starts"));
|
||||
put(43823, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB105-EP14 Tot. op.time compr"));
|
||||
put(43825, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB105-EP14 Tot. HW op.time compr"));
|
||||
put(43827, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB105-EP14 Alarm number"));
|
||||
put(43828, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB104 Version"));
|
||||
put(43846, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104 Slave Type"));
|
||||
put(43847, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104 Compressor Size"));
|
||||
put(43848, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT3 Return temp."));
|
||||
put(43849, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT10 Brine in temp"));
|
||||
put(43850, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT11 Brine out temp"));
|
||||
put(43851, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT12 Cond. out"));
|
||||
put(43852, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT14 Hot gas temp"));
|
||||
put(43853, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT15 Liquid line"));
|
||||
put(43854, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT17 Suction"));
|
||||
put(43855, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BT29 Compr. Oil. temp."));
|
||||
put(43856, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP15-BP8 Pressure transmitter"));
|
||||
put(43857, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP15 Compressor State"));
|
||||
put(43858, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP15 Compr. time to start"));
|
||||
put(43859, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB104-EP15 Relay status"));
|
||||
put(43860, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP15 Heat med. pump status"));
|
||||
put(43861, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP15 Brine pump status"));
|
||||
put(43862, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB104-EP15 Compressor starts"));
|
||||
put(43864, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB104-EP15 Tot. op.time compr"));
|
||||
put(43866, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB104-EP15 Tot. HW op.time compr"));
|
||||
put(43868, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB104-EP15 Alarm number"));
|
||||
put(43869, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT3 Return temp."));
|
||||
put(43870, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT10 Brine in temp"));
|
||||
put(43871, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT11 Brine out temp"));
|
||||
put(43872, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT12 Cond. out"));
|
||||
put(43873, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT14 Hot gas temp"));
|
||||
put(43874, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT15 Liquid line"));
|
||||
put(43875, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT17 Suction"));
|
||||
put(43876, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BT29 Compr. Oil. temp."));
|
||||
put(43877, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-EP14-BP8 Pressure transmitter"));
|
||||
put(43878, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP14 Compressor State"));
|
||||
put(43879, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP14 Compr. time to start"));
|
||||
put(43880, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB104-EP14 Relay status"));
|
||||
put(43881, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP14 Heat med. pump status"));
|
||||
put(43882, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP14 Brine pump status"));
|
||||
put(43883, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB104-EP14 Compressor starts"));
|
||||
put(43885, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB104-EP14 Tot. op.time compr"));
|
||||
put(43887, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB104-EP14 Tot. HW op.time compr"));
|
||||
put(43889, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB104-EP14 Alarm number"));
|
||||
put(43890, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB103 Version"));
|
||||
put(43908, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103 Slave Type"));
|
||||
put(43909, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103 Compressor Size"));
|
||||
put(43910, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT3 Return temp."));
|
||||
put(43911, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT10 Brine in temp"));
|
||||
put(43912, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT11 Brine out temp"));
|
||||
put(43913, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT12 Cond. out"));
|
||||
put(43914, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT14 Hot gas temp"));
|
||||
put(43915, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT15 Liquid line"));
|
||||
put(43916, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT17 Suction"));
|
||||
put(43917, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BT29 Compr. Oil. temp."));
|
||||
put(43918, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP15-BP8 Pressure transmitter"));
|
||||
put(43919, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP15 Compressor State"));
|
||||
put(43920, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP15 Compr. time to start"));
|
||||
put(43921, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB103-EP15 Relay status"));
|
||||
put(43922, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP15 Heat med. pump status"));
|
||||
put(43923, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP15 Brine pump status"));
|
||||
put(43924, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB103-EP15 Compressor starts"));
|
||||
put(43926, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB103-EP15 Tot. op.time compr"));
|
||||
put(43928, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB103-EP15 Tot. HW op.time compr"));
|
||||
put(43930, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB103-EP15 Alarm number"));
|
||||
put(43931, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT3 Return temp."));
|
||||
put(43932, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT10 Brine in temp"));
|
||||
put(43933, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT11 Brine out temp"));
|
||||
put(43934, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT12 Cond. out"));
|
||||
put(43935, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT14 Hot gas temp"));
|
||||
put(43936, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT15 Liquid line"));
|
||||
put(43937, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT17 Suction"));
|
||||
put(43938, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BT29 Compr. Oil. temp."));
|
||||
put(43939, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-EP14-BP8 Pressure transmitter"));
|
||||
put(43940, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP14 Compressor State"));
|
||||
put(43941, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP14 Compr. time to start"));
|
||||
put(43942, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB103-EP14 Relay status"));
|
||||
put(43943, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP14 Heat med. pump status"));
|
||||
put(43944, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP14 Brine pump status"));
|
||||
put(43945, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB103-EP14 Compressor starts"));
|
||||
put(43947, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB103-EP14 Tot. op.time compr"));
|
||||
put(43949, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB103-EP14 Tot. HW op.time compr"));
|
||||
put(43951, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB103-EP14 Alarm number"));
|
||||
put(43952, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB102 Version"));
|
||||
put(43970, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102 Slave Type"));
|
||||
put(43971, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102 Compressor Size"));
|
||||
put(43972, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT3 Return temp."));
|
||||
put(43973, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT10 Brine in temp"));
|
||||
put(43974, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT11 Brine out temp"));
|
||||
put(43975, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT12 Cond. out"));
|
||||
put(43976, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT14 Hot gas temp"));
|
||||
put(43977, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT15 Liquid line"));
|
||||
put(43978, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT17 Suction"));
|
||||
put(43979, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BT29 Compr. Oil. temp."));
|
||||
put(43980, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP15-BP8 Pressure transmitter"));
|
||||
put(43981, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP15 Compressor State"));
|
||||
put(43982, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP15 Compr. time to start"));
|
||||
put(43983, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB102-EP15 Relay status"));
|
||||
put(43984, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP15 Heat med. pump status"));
|
||||
put(43985, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP15 Brine pump status"));
|
||||
put(43986, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB102-EP15 Compressor starts"));
|
||||
put(43988, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB102-EP15 Tot. op.time compr"));
|
||||
put(43990, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB102-EP15 Tot. HW op.time compr"));
|
||||
put(43992, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB102-EP15 Alarm number"));
|
||||
put(43993, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT3 Return temp."));
|
||||
put(43994, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT10 Brine in temp"));
|
||||
put(43995, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT11 Brine out temp"));
|
||||
put(43996, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT12 Cond. out"));
|
||||
put(43997, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT14 Hot gas temp"));
|
||||
put(43998, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT15 Liquid line"));
|
||||
put(43999, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT17 Suction"));
|
||||
put(44000, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BT29 Compr. Oil. temp."));
|
||||
put(44001, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-EP14-BP8 Pressure transmitter"));
|
||||
put(44002, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP14 Compressor State"));
|
||||
put(44003, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP14 Compr. time to start"));
|
||||
put(44004, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB102-EP14 Relay status"));
|
||||
put(44005, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP14 Heat med. pump status"));
|
||||
put(44006, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP14 Brine pump status"));
|
||||
put(44007, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB102-EP14 Compressor starts"));
|
||||
put(44009, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB102-EP14 Tot. op.time compr"));
|
||||
put(44011, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB102-EP14 Tot. HW op.time compr"));
|
||||
put(44013, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB102-EP14 Alarm number"));
|
||||
put(44014, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB101 Version"));
|
||||
put(44032, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101 Slave Type"));
|
||||
put(44033, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101 Compressor Size"));
|
||||
put(44034, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT3 Return temp."));
|
||||
put(44035, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT10 Brine in temp"));
|
||||
put(44036, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT11 Brine out temp"));
|
||||
put(44037, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT12 Cond. out"));
|
||||
put(44038, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT14 Hot gas temp"));
|
||||
put(44039, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT15 Liquid line"));
|
||||
put(44040, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT17 Suction"));
|
||||
put(44041, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BT29 Compr. Oil. temp."));
|
||||
put(44042, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP15-BP8 Pressure transmitter"));
|
||||
put(44043, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP15 Compressor State"));
|
||||
put(44044, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP15 Compr. time to start"));
|
||||
put(44045, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB101-EP15 Relay status"));
|
||||
put(44046, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP15 Heat med. pump status"));
|
||||
put(44047, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP15 Brine pump status"));
|
||||
put(44048, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB101-EP15 Compressor starts"));
|
||||
put(44050, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB101-EP15 Tot. op.time compr"));
|
||||
put(44052, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB101-EP15 Tot. HW op.time compr"));
|
||||
put(44054, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB101-EP15 Alarm number"));
|
||||
put(44055, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT3 Return temp."));
|
||||
put(44056, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT10 Brine in temp"));
|
||||
put(44057, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT11 Brine out temp"));
|
||||
put(44058, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT12 Cond. out"));
|
||||
put(44059, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT14 Hot gas temp"));
|
||||
put(44060, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT15 Liquid line"));
|
||||
put(44061, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT17 Suction"));
|
||||
put(44062, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BT29 Compr. Oil. temp."));
|
||||
put(44063, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-EP14-BP8 Pressure transmitter"));
|
||||
put(44064, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP14 Compressor State"));
|
||||
put(44065, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP14 Compr. time to start"));
|
||||
put(44066, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB101-EP14 Relay status"));
|
||||
put(44067, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP14 Heat med. pump status"));
|
||||
put(44068, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP14 Brine pump status"));
|
||||
put(44069, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB101-EP14 Compressor starts"));
|
||||
put(44071, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB101-EP14 Tot. op.time compr"));
|
||||
put(44073, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "EB101-EP14 Tot. HW op.time compr"));
|
||||
put(44075, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "EB101-EP14 Alarm number"));
|
||||
put(44138, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP15 Prio"));
|
||||
put(44139, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108-EP14 Prio"));
|
||||
put(44151, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP15 Prio"));
|
||||
put(44152, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107-EP14 Prio"));
|
||||
put(44164, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP15 Prio"));
|
||||
put(44165, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106-EP14 Prio"));
|
||||
put(44177, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP15 Prio"));
|
||||
put(44178, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105-EP14 Prio"));
|
||||
put(44190, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP15 Prio"));
|
||||
put(44191, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104-EP14 Prio"));
|
||||
put(44203, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP15 Prio"));
|
||||
put(44204, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103-EP14 Prio"));
|
||||
put(44216, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP15 Prio"));
|
||||
put(44217, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102-EP14 Prio"));
|
||||
put(44229, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP15 Prio"));
|
||||
put(44230, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101-EP14 Prio"));
|
||||
put(44242, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB100-EP15 Prio"));
|
||||
put(44243, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB100-EP14 Prio"));
|
||||
put(44266, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Cool Degree Minutes"));
|
||||
put(44267, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Cooling Supply Temperature S4"));
|
||||
put(44268, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Cooling Supply Temperature S3"));
|
||||
put(44269, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Cooling Supply Temperature S2"));
|
||||
put(44270, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Cooling Supply Temperature S1"));
|
||||
put(44276, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State ACS"));
|
||||
put(44277, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State ACS heatdump"));
|
||||
put(44278, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State ACS cooldump"));
|
||||
put(44282, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Used cprs. HW"));
|
||||
put(44283, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Used cprs. heat"));
|
||||
put(44284, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Used cprs. pool 1"));
|
||||
put(44285, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Used cprs. pool 2"));
|
||||
put(44298, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Accumulated Energy HW Cpr and Add"));
|
||||
put(44300, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Accumulated Energy Heat Cpr and Add"));
|
||||
put(44302, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Accumulated Energy Cooling Cpr"));
|
||||
put(44304, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Accumulated Energy Pool Cpr"));
|
||||
put(44306, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Accumulated Energy HW Cpr"));
|
||||
put(44308, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Accumulated Energy Heat Cpr"));
|
||||
put(44320, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Used cprs. cool"));
|
||||
put(44331, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Software release"));
|
||||
put(44380, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External Compressors"));
|
||||
put(44410, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB108 Own Hot Water"));
|
||||
put(44411, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-BT6 Hot water load temp."));
|
||||
put(44412, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-BT7 Hot water top temp."));
|
||||
put(44413, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB108-BT2 Supply temp."));
|
||||
put(44416, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB107 Own Hot Water"));
|
||||
put(44417, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-BT6 Hot water load temp."));
|
||||
put(44418, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-BT7 Hot water top temp."));
|
||||
put(44419, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB107-BT2 Supply temp."));
|
||||
put(44422, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB106 Own Hot Water"));
|
||||
put(44423, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-BT6 Hot water load temp."));
|
||||
put(44424, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-BT7 Hot water top temp."));
|
||||
put(44425, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB106-BT2 Supply temp."));
|
||||
put(44428, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB105 Own Hot Water"));
|
||||
put(44429, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-BT6 Hot water load temp."));
|
||||
put(44430, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-BT7 Hot water top temp."));
|
||||
put(44431, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB105-BT2 Supply temp."));
|
||||
put(44434, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB104 Own Hot Water"));
|
||||
put(44435, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-BT6 Hot water load temp."));
|
||||
put(44436, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-BT7 Hot water top temp."));
|
||||
put(44437, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB104-BT2 Supply temp."));
|
||||
put(44440, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB103 Own Hot Water"));
|
||||
put(44441, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-BT6 Hot water load temp."));
|
||||
put(44442, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-BT7 Hot water top temp."));
|
||||
put(44443, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB103-BT2 Supply temp."));
|
||||
put(44446, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB102 Own Hot Water"));
|
||||
put(44447, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-BT6 Hot water load temp."));
|
||||
put(44448, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-BT7 Hot water top temp."));
|
||||
put(44449, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB102-BT2 Supply temp."));
|
||||
put(44452, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB101 Own Hot Water"));
|
||||
put(44453, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-BT6 Hot water load temp."));
|
||||
put(44454, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-BT7 Hot water top temp."));
|
||||
put(44455, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB101-BT2 Supply temp."));
|
||||
put(44487, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Cool Compressors"));
|
||||
put(44744, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S4"));
|
||||
put(44745, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S3"));
|
||||
put(44746, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S2"));
|
||||
put(44748, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 2 pump"));
|
||||
put(44749, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 1 pump"));
|
||||
put(44753, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Passiv cool shunt"));
|
||||
put(44754, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Passiv cool pool"));
|
||||
put(44756, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State ground water pump"));
|
||||
put(44874, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State SG Ready"));
|
||||
put(44878, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SG Ready input A"));
|
||||
put(44879, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SG Ready input B"));
|
||||
put(44910, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Brine pump dT act."));
|
||||
put(44911, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Brine pump dT act."));
|
||||
put(44912, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "Brine pump auto controlled"));
|
||||
put(45001, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Alarm Number"));
|
||||
put(47291, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Floor drying timer"));
|
||||
put(47325, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Step controlled add. max. step"));
|
||||
put(47004, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat curve S4"));
|
||||
put(47005, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat curve S3"));
|
||||
put(47006, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat curve S2"));
|
||||
put(47007, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat curve S1"));
|
||||
put(47008, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Offset S4"));
|
||||
put(47009, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Offset S3"));
|
||||
put(47010, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Offset S2"));
|
||||
put(47011, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Offset S1"));
|
||||
put(47012, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 4"));
|
||||
put(47013, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 3"));
|
||||
put(47014, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 2"));
|
||||
put(47015, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 1"));
|
||||
put(47016, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 4"));
|
||||
put(47017, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 3"));
|
||||
put(47018, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 2"));
|
||||
put(47019, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 1"));
|
||||
put(47020, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Curve P7"));
|
||||
put(47021, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Curve P6"));
|
||||
put(47022, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Curve P5"));
|
||||
put(47023, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Curve P4"));
|
||||
put(47024, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Curve P3"));
|
||||
put(47025, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Curve P2"));
|
||||
put(47026, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Curve P1"));
|
||||
put(47027, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Point offset outdoor temp."));
|
||||
put(47028, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Point offset"));
|
||||
put(47029, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S4"));
|
||||
put(47030, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S3"));
|
||||
put(47031, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S2"));
|
||||
put(47032, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S1"));
|
||||
put(47033, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S4"));
|
||||
put(47034, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S3"));
|
||||
put(47035, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S2"));
|
||||
put(47036, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S1"));
|
||||
put(47041, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Hot water mode"));
|
||||
put(47043, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Luxury"));
|
||||
put(47044, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Normal"));
|
||||
put(47045, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Economy"));
|
||||
put(47046, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature Periodic HW"));
|
||||
put(47047, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Luxury"));
|
||||
put(47048, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Normal"));
|
||||
put(47049, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Economy"));
|
||||
put(47050, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Periodic HW"));
|
||||
put(47051, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Periodic HW Interval"));
|
||||
put(47054, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Run time HWC"));
|
||||
put(47055, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Still time HWC"));
|
||||
put(47131, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Language"));
|
||||
put(47134, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Period HW"));
|
||||
put(47135, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Period Heat"));
|
||||
put(47136, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Period Pool"));
|
||||
put(47137, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode"));
|
||||
put(47138, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode heat medium pump"));
|
||||
put(47139, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode brine medium pump"));
|
||||
put(47206, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM start heating"));
|
||||
put(47207, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM start cooling"));
|
||||
put(47208, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM start add."));
|
||||
put(47209, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM between add. steps"));
|
||||
put(47210, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM start add. with shunt"));
|
||||
put(47212, new VariableInformation( 100, NibeDataType.S16, Type.SETTING , "Max int add. power"));
|
||||
put(47214, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fuse"));
|
||||
put(47261, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 4"));
|
||||
put(47262, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 3"));
|
||||
put(47263, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 2"));
|
||||
put(47264, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 1"));
|
||||
put(47265, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed normal"));
|
||||
put(47271, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 4"));
|
||||
put(47272, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 3"));
|
||||
put(47273, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 2"));
|
||||
put(47274, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 1"));
|
||||
put(47275, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Filter Reminder period"));
|
||||
put(47276, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying"));
|
||||
put(47277, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 7"));
|
||||
put(47278, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 6"));
|
||||
put(47279, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 5"));
|
||||
put(47280, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 4"));
|
||||
put(47281, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 3"));
|
||||
put(47282, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 2"));
|
||||
put(47283, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 1"));
|
||||
put(47284, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 7"));
|
||||
put(47285, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 6"));
|
||||
put(47286, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 5"));
|
||||
put(47287, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 4"));
|
||||
put(47288, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 3"));
|
||||
put(47289, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 2"));
|
||||
put(47290, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 1"));
|
||||
put(47302, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 2 accessory"));
|
||||
put(47303, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 3 accessory"));
|
||||
put(47304, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 4 accessory"));
|
||||
put(47305, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 4 mixing valve amp."));
|
||||
put(47306, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 3 mixing valve amp."));
|
||||
put(47307, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 2 mixing valve amp."));
|
||||
put(47308, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 4 shunt wait"));
|
||||
put(47309, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 3 shunt wait"));
|
||||
put(47310, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 2 shunt wait"));
|
||||
put(47312, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM pump"));
|
||||
put(47313, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM defrost"));
|
||||
put(47317, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Shunt controlled add. accessory"));
|
||||
put(47318, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Shunt controlled add. min. temp."));
|
||||
put(47319, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Shunt controlled add. min. runtime"));
|
||||
put(47320, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Shunt controlled add. mixing valve amp."));
|
||||
put(47321, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Shunt controlled add. mixing valve wait"));
|
||||
put(47322, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Step controlled add. accessory"));
|
||||
put(47323, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Step controlled add. start DM"));
|
||||
put(47324, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Step controlled add. diff. DM"));
|
||||
put(47326, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Step controlled add. mode"));
|
||||
put(47327, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Ground water pump accessory"));
|
||||
put(47329, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cooling 2-pipe accessory"));
|
||||
put(47330, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cooling 4-pipe accessory"));
|
||||
put(47335, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Time betw. switch heat/cool"));
|
||||
put(47336, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Heat at room under temp."));
|
||||
put(47337, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Cool at room over temp."));
|
||||
put(47338, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Cooling mix. valve amp."));
|
||||
put(47339, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Cooling mix. valve step delay"));
|
||||
put(47340, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Cooling with room sensor"));
|
||||
put(47341, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "HPAC accessory"));
|
||||
put(47342, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Start Passive Cooling DM"));
|
||||
put(47343, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Start Active Cooling DM"));
|
||||
put(47352, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SMS40 accessory"));
|
||||
put(47365, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 1"));
|
||||
put(47366, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 2"));
|
||||
put(47367, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 3"));
|
||||
put(47368, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 4"));
|
||||
put(47370, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Additive Heating"));
|
||||
put(47371, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Heating"));
|
||||
put(47372, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Cooling"));
|
||||
put(47374, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start Temperature Cooling"));
|
||||
put(47375, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop Temperature Heating"));
|
||||
put(47376, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop Temperature Additive"));
|
||||
put(47377, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Outdoor Filter Time"));
|
||||
put(47378, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max diff. comp."));
|
||||
put(47379, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max diff. add."));
|
||||
put(47380, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Low brine out autoreset"));
|
||||
put(47381, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Low brine out temp."));
|
||||
put(47382, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "High brine in"));
|
||||
put(47383, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "High brine in temp."));
|
||||
put(47384, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Date format"));
|
||||
put(47385, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Time format"));
|
||||
put(47387, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "HW production"));
|
||||
put(47388, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm lower room temp."));
|
||||
put(47389, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm lower HW temp."));
|
||||
put(47391, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S4"));
|
||||
put(47392, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S3"));
|
||||
put(47393, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S2"));
|
||||
put(47394, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S1"));
|
||||
put(47395, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S4"));
|
||||
put(47396, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S3"));
|
||||
put(47397, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S2"));
|
||||
put(47398, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S1"));
|
||||
put(47399, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S4"));
|
||||
put(47400, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S3"));
|
||||
put(47401, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S2"));
|
||||
put(47402, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S1"));
|
||||
put(47413, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed circ.pump HW"));
|
||||
put(47414, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed circ.pump Heat"));
|
||||
put(47415, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed circ.pump Pool"));
|
||||
put(47416, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed circ.pump Economy"));
|
||||
put(47417, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed circ.pump Cooling"));
|
||||
put(47418, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed brine pump"));
|
||||
put(47537, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(47538, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(47539, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(47540, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Heat DM diff"));
|
||||
put(47543, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Cooling DM diff"));
|
||||
put(47570, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode"));
|
||||
put(48043, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Holiday - Activated"));
|
||||
put(48046, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset Holiday"));
|
||||
put(48047, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Hot water mode Holiday"));
|
||||
put(48053, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 2 speed 4"));
|
||||
put(48054, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 2 speed 3"));
|
||||
put(48055, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 2 speed 2"));
|
||||
put(48056, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 2 speed 1"));
|
||||
put(48057, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 2 speed normal"));
|
||||
put(48058, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 3 speed 4"));
|
||||
put(48059, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 3 speed 3"));
|
||||
put(48060, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 3 speed 2"));
|
||||
put(48061, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 3 speed 1"));
|
||||
put(48062, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 3 speed normal"));
|
||||
put(48063, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 4 speed 4"));
|
||||
put(48064, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 4 speed 3"));
|
||||
put(48065, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 4 speed 2"));
|
||||
put(48066, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 4 speed 1"));
|
||||
put(48067, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 4 speed normal"));
|
||||
put(48068, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 4 accessory"));
|
||||
put(48069, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 3 accessory"));
|
||||
put(48070, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 2 accessory"));
|
||||
put(48071, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM 1 accessory"));
|
||||
put(48072, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM diff start add."));
|
||||
put(48073, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FLM cooling"));
|
||||
put(48074, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Set point for BT74"));
|
||||
put(48087, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Pool 2 accessory"));
|
||||
put(48088, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Pool 1 accessory"));
|
||||
put(48089, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Pool 2 start temp."));
|
||||
put(48090, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Pool 1 start temp."));
|
||||
put(48091, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Pool 2 stop temp."));
|
||||
put(48092, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Pool 1 stop temp."));
|
||||
put(48093, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Pool 2 Activated"));
|
||||
put(48094, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Pool 1 Activated"));
|
||||
put(48133, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Period Pool 2"));
|
||||
put(48174, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Min cooling supply temp S4"));
|
||||
put(48175, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Min cooling supply temp S3"));
|
||||
put(48176, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Min cooling supply temp S2"));
|
||||
put(48177, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Min cooling supply temp S1"));
|
||||
put(48178, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 20°C"));
|
||||
put(48179, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 20°C"));
|
||||
put(48180, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 20°C"));
|
||||
put(48181, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 20°C"));
|
||||
put(48182, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 40°C"));
|
||||
put(48183, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 40°C"));
|
||||
put(48184, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 40°C"));
|
||||
put(48185, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cooling supply temp. at 40°C"));
|
||||
put(48186, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cooling use mix. valves"));
|
||||
put(48187, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cooling use mix. valves"));
|
||||
put(48188, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cooling use mix. valves"));
|
||||
put(48189, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cooling use mix. valves"));
|
||||
put(48190, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Heatdump mix. valve delay"));
|
||||
put(48191, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Heatdump mix. valve amp."));
|
||||
put(48192, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Cooldump mix. valve delay"));
|
||||
put(48193, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Cooldump mix. valve amp."));
|
||||
put(48194, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "ACS accessory"));
|
||||
put(48195, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "ACS heat dump 24h-function"));
|
||||
put(48196, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "ACS run brinepump in wait mode"));
|
||||
put(48197, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "ACS closingtime for cool dump"));
|
||||
put(48226, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Max charge pump reg speed"));
|
||||
put(48282, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready heating"));
|
||||
put(48283, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready cooling"));
|
||||
put(48284, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready hot water"));
|
||||
put(48285, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready pool"));
|
||||
put(48452, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, hw"));
|
||||
put(48453, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, heat"));
|
||||
put(48454, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, pool"));
|
||||
put(48455, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, cool"));
|
||||
put(48456, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode heat medium pump, cooling"));
|
||||
put(48458, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Max speed circ.pump Heat"));
|
||||
put(48459, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed brine pump cooling"));
|
||||
put(48487, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Speed circ.pump Cooling"));
|
||||
put(49008, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Smart energy source, DM diff source prio 2"));
|
||||
put(49009, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Smart energy source, DM start source prio 1"));
|
||||
// @formatter:on
|
||||
}
|
||||
});
|
||||
|
||||
public static VariableInformation getVariableInfo(int key) {
|
||||
return VARIABLE_INFO_F1X45.get(key);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,529 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.models;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.NibeDataType;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.Type;
|
||||
|
||||
/**
|
||||
* Class which holds all data variables of F470 heat pumps.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
* @author Juho Mäkinen - Adding model F470
|
||||
*/
|
||||
public class F470 {
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
private static final Map<Integer, VariableInformation> VARIABLE_INFO_F470 = Collections
|
||||
.unmodifiableMap(new HashMap<Integer, VariableInformation>() {
|
||||
{
|
||||
// @formatter:off
|
||||
put(40004, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Outdoor Temperature"));
|
||||
put(40005, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT2 Supply temp S4"));
|
||||
put(40006, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT2 Supply temp S3"));
|
||||
put(40007, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT2 Supply temp S2"));
|
||||
put(40008, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT2 Supply temp S1"));
|
||||
put(40012, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT3 Return temp"));
|
||||
put(40013, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT7 HW Top"));
|
||||
put(40014, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT6 HW Load"));
|
||||
put(40020, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT16 Evaporator temp"));
|
||||
put(40022, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT17 Suction"));
|
||||
put(40023, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT18 Compressor temp."));
|
||||
put(40024, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT19 Addition temp."));
|
||||
put(40025, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT20 Exhaust air temp. 1"));
|
||||
put(40026, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT21 Vented air temp. 1"));
|
||||
put(40030, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT50 Room Temp S4"));
|
||||
put(40031, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT50 Room Temp S3"));
|
||||
put(40032, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT50 Room Temp S2"));
|
||||
put(40033, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT50 Room Temp S1"));
|
||||
put(40043, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT53 Solar Panel Temp"));
|
||||
put(40044, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT54 Solar Load Temp"));
|
||||
put(40054, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "EB100-FD1 Temperature limiter"));
|
||||
put(40067, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Average"));
|
||||
put(40071, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT25 Ext. Supply"));
|
||||
put(40074, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "EB100-FR1 Anode Status"));
|
||||
put(40075, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT22 Supply air temp."));
|
||||
put(40076, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP30-BT55 Solar Tank Top Temp"));
|
||||
put(40079, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "EB100-BE3 Current"));
|
||||
put(40081, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "EB100-BE2 Current"));
|
||||
put(40083, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "EB100-BE1 Current"));
|
||||
put(40122, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT52 external water heater load temp."));
|
||||
put(40127, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT3 Return temp S4"));
|
||||
put(40128, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT3 Return temp S3"));
|
||||
put(40129, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT3 Return temp S2"));
|
||||
put(40159, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT2 Supply temp S8"));
|
||||
put(40160, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT2 Supply temp S7"));
|
||||
put(40161, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT2 Supply temp S6"));
|
||||
put(40162, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT2 Supply temp S5"));
|
||||
put(40163, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT3 Return temp S8"));
|
||||
put(40164, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT3 Return temp S7"));
|
||||
put(40165, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT3 Return temp S6"));
|
||||
put(40166, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT3 Return temp S5"));
|
||||
put(40167, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT50 Room Temp S8"));
|
||||
put(40168, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT50 Room Temp S7"));
|
||||
put(40169, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT50 Room Temp S6"));
|
||||
put(40170, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT50 Room Temp S5"));
|
||||
put(40185, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Average, 1h"));
|
||||
put(40188, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT50 Room Temp S8 Average"));
|
||||
put(40189, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT50 Room Temp S7 Average"));
|
||||
put(40190, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT50 Room Temp S6 Average"));
|
||||
put(40191, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT50 Room Temp S5 Average"));
|
||||
put(40192, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT50 Room Temp S4 Average"));
|
||||
put(40193, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT50 Room Temp S3 Average"));
|
||||
put(40194, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT50 Room Temp S2 Average"));
|
||||
put(40195, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT50 Room Temp S1 Average"));
|
||||
put(40212, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT74 Average"));
|
||||
put(40217, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S8"));
|
||||
put(40218, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S7"));
|
||||
put(40219, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S6"));
|
||||
put(40220, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calculated Supply S5"));
|
||||
put(40305, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S8"));
|
||||
put(40306, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S7"));
|
||||
put(40307, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S6"));
|
||||
put(40308, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S5"));
|
||||
put(40339, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S8"));
|
||||
put(40340, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S7"));
|
||||
put(40341, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S6"));
|
||||
put(40342, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S5"));
|
||||
put(40365, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S8"));
|
||||
put(40366, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S7"));
|
||||
put(40367, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S6"));
|
||||
put(40368, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S5"));
|
||||
put(40755, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. ext. HW add op.time"));
|
||||
put(40868, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust AUX Port"));
|
||||
put(40870, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust OP mode"));
|
||||
put(40871, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust Comfort mode"));
|
||||
put(40872, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "+Adjust Parallell adjustment"));
|
||||
put(40873, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "+Adjust Humidity"));
|
||||
put(40874, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "+Adjust Temp indoor"));
|
||||
put(40875, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "+Adjust Temp outdoor"));
|
||||
put(40876, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "+Adjust Version"));
|
||||
put(40877, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust Activated"));
|
||||
put(40878, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust Need"));
|
||||
put(40889, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT64 Average"));
|
||||
put(41027, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Humidity average"));
|
||||
put(41189, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AA20-BE5 EME10 Current"));
|
||||
put(41190, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AA20-BE5 EME10 Average Current"));
|
||||
put(41191, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "PV Panel State"));
|
||||
put(41256, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(41257, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(41258, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(41265, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home Mode"));
|
||||
put(41266, new VariableInformation( 10, NibeDataType.S8 , Type.SENSOR , "Offset to smart home system"));
|
||||
put(41267, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 8"));
|
||||
put(41268, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 7"));
|
||||
put(41269, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 6"));
|
||||
put(41270, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 5"));
|
||||
put(41271, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 4"));
|
||||
put(41272, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 3"));
|
||||
put(41273, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 2"));
|
||||
put(41274, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 1"));
|
||||
put(41928, new VariableInformation( 100, NibeDataType.U16, Type.SENSOR , "Smart Price Adaption Price"));
|
||||
put(41929, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Price Adaption Price Level"));
|
||||
put(41930, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 10"));
|
||||
put(41931, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 9"));
|
||||
put(41932, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 8"));
|
||||
put(41933, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 7"));
|
||||
put(41934, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 6"));
|
||||
put(41935, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 5"));
|
||||
put(41936, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 4"));
|
||||
put(41937, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 3"));
|
||||
put(41938, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 2"));
|
||||
put(41939, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 1"));
|
||||
put(41940, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 10"));
|
||||
put(41941, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 9"));
|
||||
put(41942, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 8"));
|
||||
put(41943, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 7"));
|
||||
put(41944, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 6"));
|
||||
put(41945, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 5"));
|
||||
put(41946, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 4"));
|
||||
put(41947, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 3"));
|
||||
put(41948, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 2"));
|
||||
put(41949, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 1"));
|
||||
put(41950, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 10"));
|
||||
put(41951, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 9"));
|
||||
put(41952, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 8"));
|
||||
put(41953, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 7"));
|
||||
put(41954, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 6"));
|
||||
put(41955, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 5"));
|
||||
put(41956, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 4"));
|
||||
put(41957, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 3"));
|
||||
put(41958, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 2"));
|
||||
put(41959, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 1"));
|
||||
put(41960, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 10"));
|
||||
put(41961, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 9"));
|
||||
put(41962, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 8"));
|
||||
put(41963, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 7"));
|
||||
put(41964, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 6"));
|
||||
put(41965, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 5"));
|
||||
put(41966, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 4"));
|
||||
put(41967, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 3"));
|
||||
put(41968, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 2"));
|
||||
put(41969, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 1"));
|
||||
put(41980, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 10"));
|
||||
put(41981, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 9"));
|
||||
put(41982, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 8"));
|
||||
put(41983, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 7"));
|
||||
put(41984, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 6"));
|
||||
put(41985, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 5"));
|
||||
put(41986, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 4"));
|
||||
put(41987, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 3"));
|
||||
put(41988, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 2"));
|
||||
put(41989, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 1"));
|
||||
put(41990, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 10"));
|
||||
put(41991, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 9"));
|
||||
put(41992, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 8"));
|
||||
put(41993, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 7"));
|
||||
put(41994, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 6"));
|
||||
put(41995, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 5"));
|
||||
put(41996, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 4"));
|
||||
put(41997, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 3"));
|
||||
put(41998, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 2"));
|
||||
put(41999, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 1"));
|
||||
put(42000, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 10"));
|
||||
put(42001, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 9"));
|
||||
put(42002, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 8"));
|
||||
put(42003, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 7"));
|
||||
put(42004, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 6"));
|
||||
put(42005, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 5"));
|
||||
put(42006, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 4"));
|
||||
put(42007, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 3"));
|
||||
put(42008, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 2"));
|
||||
put(42009, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 1"));
|
||||
put(42010, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 10"));
|
||||
put(42012, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 9"));
|
||||
put(42014, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 8"));
|
||||
put(42016, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 7"));
|
||||
put(42018, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 6"));
|
||||
put(42020, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 5"));
|
||||
put(42022, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 4"));
|
||||
put(42024, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 3"));
|
||||
put(42026, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 2"));
|
||||
put(42028, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 1"));
|
||||
put(42030, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 EME20 Version"));
|
||||
put(42033, new VariableInformation( 10, NibeDataType.U8 , Type.SENSOR , "PV Panel Heat Offset"));
|
||||
put(42034, new VariableInformation( 10, NibeDataType.U8 , Type.SENSOR , "PV Panel Pool Offset"));
|
||||
put(42035, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "AA23-BE5 EME20 Total Power"));
|
||||
put(42037, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "AA23-BE5 EME20 Total Average Power"));
|
||||
put(42075, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 EME20 Total Energy"));
|
||||
put(42080, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 504"));
|
||||
put(42081, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 505"));
|
||||
put(42082, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 506"));
|
||||
put(42083, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 507"));
|
||||
put(42084, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 508"));
|
||||
put(42085, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 509"));
|
||||
put(42086, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 510"));
|
||||
put(42087, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 511"));
|
||||
put(42100, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Average, 24h"));
|
||||
put(42101, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Used heating power average, 24h"));
|
||||
put(42136, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT22 Supply air temp."));
|
||||
put(42137, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT22 Supply air temp."));
|
||||
put(42138, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT22 Supply air temp."));
|
||||
put(43001, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Software version"));
|
||||
put(43006, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S4"));
|
||||
put(43007, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S3"));
|
||||
put(43008, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S2"));
|
||||
put(43009, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S1"));
|
||||
put(43013, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Freeze Protection Status"));
|
||||
put(43081, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. op.time add."));
|
||||
put(43084, new VariableInformation( 100, NibeDataType.S16, Type.SENSOR , "Int. el.add. Power"));
|
||||
put(43086, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Prio"));
|
||||
put(43091, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Int. el.add. State"));
|
||||
put(43093, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S4"));
|
||||
put(43094, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S3"));
|
||||
put(43095, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S2"));
|
||||
put(43096, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S1"));
|
||||
put(43105, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Status FJVM"));
|
||||
put(43108, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(43158, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S4"));
|
||||
put(43159, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S3"));
|
||||
put(43160, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S2"));
|
||||
put(43161, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S1"));
|
||||
put(43180, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "HWC Pump Status GP11"));
|
||||
put(43239, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. HW op.time add."));
|
||||
put(43383, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "FJVM Relays"));
|
||||
put(43416, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Compressor starts EB100-EP14"));
|
||||
put(43420, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Tot. op.time compr. EB100-EP14"));
|
||||
put(43424, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Tot. HW op.time compr. EB100-EP14"));
|
||||
put(43427, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Compressor State EP14"));
|
||||
put(43431, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Supply Pump State EP14"));
|
||||
put(43435, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Cpr Status EP14"));
|
||||
put(43460, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State DEH"));
|
||||
put(43514, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB100-EP14 PCA Base Relays"));
|
||||
put(43516, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "PCA-Power Relays EP14"));
|
||||
put(44331, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Software release"));
|
||||
put(44744, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S4"));
|
||||
put(44745, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S3"));
|
||||
put(44746, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S2"));
|
||||
put(44750, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "FJVM pump"));
|
||||
put(44874, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State SG Ready"));
|
||||
put(44878, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SG Ready input A"));
|
||||
put(44879, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SG Ready input B"));
|
||||
put(44896, new VariableInformation( 10, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption Heating Offset"));
|
||||
put(44897, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption HW Comfort Mode"));
|
||||
put(44898, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption Pool Offset"));
|
||||
put(44899, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption Cool Offset"));
|
||||
put(44908, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State smart price adaption"));
|
||||
put(45001, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Alarm"));
|
||||
put(47291, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Floor drying timer"));
|
||||
put(40879, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "+Adjust Parallell factor"));
|
||||
put(40880, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "+Adjust Max change"));
|
||||
put(40881, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system8"));
|
||||
put(40882, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system7"));
|
||||
put(40883, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system6"));
|
||||
put(40884, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system5"));
|
||||
put(40885, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system4"));
|
||||
put(40886, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system3"));
|
||||
put(40887, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system2"));
|
||||
put(40888, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system1"));
|
||||
put(45171, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm Reset"));
|
||||
put(47004, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S4"));
|
||||
put(47005, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S3"));
|
||||
put(47006, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S2"));
|
||||
put(47007, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S1"));
|
||||
put(47008, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S4"));
|
||||
put(47009, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S3"));
|
||||
put(47010, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S2"));
|
||||
put(47011, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S1"));
|
||||
put(47012, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 4"));
|
||||
put(47013, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 3"));
|
||||
put(47014, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 2"));
|
||||
put(47015, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 1"));
|
||||
put(47016, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 4"));
|
||||
put(47017, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 3"));
|
||||
put(47018, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 2"));
|
||||
put(47019, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 1"));
|
||||
put(47020, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P7"));
|
||||
put(47021, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P6"));
|
||||
put(47022, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P5"));
|
||||
put(47023, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P4"));
|
||||
put(47024, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P3"));
|
||||
put(47025, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P2"));
|
||||
put(47026, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P1"));
|
||||
put(47027, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Point offset outdoor temp."));
|
||||
put(47028, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Point offset"));
|
||||
put(47029, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S4"));
|
||||
put(47030, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S3"));
|
||||
put(47031, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S2"));
|
||||
put(47032, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S1"));
|
||||
put(47033, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S4"));
|
||||
put(47034, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S3"));
|
||||
put(47035, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S2"));
|
||||
put(47036, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S1"));
|
||||
put(47041, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Hot water comfort mode"));
|
||||
put(47043, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Luxury"));
|
||||
put(47044, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Normal"));
|
||||
put(47045, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Economy"));
|
||||
put(47046, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature Periodic HW"));
|
||||
put(47047, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Luxury"));
|
||||
put(47048, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Normal"));
|
||||
put(47049, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Economy"));
|
||||
put(47050, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Periodic HW"));
|
||||
put(47051, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Periodic HW Interval"));
|
||||
put(47054, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Run time HWC"));
|
||||
put(47055, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Still time HWC"));
|
||||
put(47131, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Language"));
|
||||
put(47137, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode"));
|
||||
put(47138, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode heat medium pump"));
|
||||
put(47212, new VariableInformation( 100, NibeDataType.S16, Type.SETTING , "Max int add. power"));
|
||||
put(47214, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Fuse"));
|
||||
put(47261, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 4"));
|
||||
put(47262, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 3"));
|
||||
put(47263, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 2"));
|
||||
put(47264, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 1"));
|
||||
put(47265, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed normal"));
|
||||
put(47266, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 4"));
|
||||
put(47267, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 3"));
|
||||
put(47268, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 2"));
|
||||
put(47269, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 1"));
|
||||
put(47270, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed normal"));
|
||||
put(47271, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 4"));
|
||||
put(47272, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 3"));
|
||||
put(47273, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 2"));
|
||||
put(47274, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 1"));
|
||||
put(47275, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Filter Reminder period"));
|
||||
put(47276, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying"));
|
||||
put(47277, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 7"));
|
||||
put(47278, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 6"));
|
||||
put(47279, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 5"));
|
||||
put(47280, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 4"));
|
||||
put(47281, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 3"));
|
||||
put(47282, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 2"));
|
||||
put(47283, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 1"));
|
||||
put(47284, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 7"));
|
||||
put(47285, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 6"));
|
||||
put(47286, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 5"));
|
||||
put(47287, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 4"));
|
||||
put(47288, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 3"));
|
||||
put(47289, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 2"));
|
||||
put(47290, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 1"));
|
||||
put(47292, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Trend temperature"));
|
||||
put(47293, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Transfer time HW-Heat"));
|
||||
put(47300, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "DOT"));
|
||||
put(47301, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "delta T at DOT"));
|
||||
put(47302, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 2 accessory"));
|
||||
put(47303, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 3 accessory"));
|
||||
put(47304, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 4 accessory"));
|
||||
put(47305, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 4 mixing valve amp."));
|
||||
put(47306, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 3 mixing valve amp."));
|
||||
put(47307, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 2 mixing valve amp."));
|
||||
put(47308, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 4 shunt wait"));
|
||||
put(47309, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 3 shunt wait"));
|
||||
put(47310, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 2 shunt wait"));
|
||||
put(47351, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "FJVM accessory"));
|
||||
put(47352, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SMS40 accessory"));
|
||||
put(47365, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 1"));
|
||||
put(47366, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 2"));
|
||||
put(47367, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 3"));
|
||||
put(47368, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 4"));
|
||||
put(47370, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Additive Heating"));
|
||||
put(47371, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Heating"));
|
||||
put(47372, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Cooling"));
|
||||
put(47374, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start Temperature Cooling"));
|
||||
put(47375, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop Temperature Heating"));
|
||||
put(47376, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop Temperature Additive"));
|
||||
put(47377, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Outdoor Filter Time"));
|
||||
put(47378, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max diff. comp."));
|
||||
put(47379, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max diff. add."));
|
||||
put(47384, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Date format"));
|
||||
put(47385, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Time format"));
|
||||
put(47387, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "HW production"));
|
||||
put(47388, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm lower room temp."));
|
||||
put(47389, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm lower HW temp."));
|
||||
put(47391, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S4"));
|
||||
put(47392, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S3"));
|
||||
put(47393, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S2"));
|
||||
put(47394, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S1"));
|
||||
put(47395, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S4"));
|
||||
put(47396, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S3"));
|
||||
put(47397, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S2"));
|
||||
put(47398, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S1"));
|
||||
put(47399, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S4"));
|
||||
put(47400, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S3"));
|
||||
put(47401, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S2"));
|
||||
put(47402, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S1"));
|
||||
put(47442, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "preset flow clim. sys."));
|
||||
put(47525, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S8"));
|
||||
put(47536, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan synch mode"));
|
||||
put(47537, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(47538, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(47539, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(47556, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "DEH accessory"));
|
||||
put(47564, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Heating Sys1"));
|
||||
put(47565, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Heating Sys2"));
|
||||
put(47567, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S7"));
|
||||
put(48043, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Holiday - Activated"));
|
||||
put(48132, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Temporary Lux"));
|
||||
put(48282, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready heating"));
|
||||
put(48283, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready cooling"));
|
||||
put(48284, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready hot water"));
|
||||
put(48285, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready pool"));
|
||||
put(48488, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S6"));
|
||||
put(48489, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S5"));
|
||||
put(48491, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S8"));
|
||||
put(48492, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S7"));
|
||||
put(48493, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S6"));
|
||||
put(48494, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S5"));
|
||||
put(48495, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 8"));
|
||||
put(48496, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 7"));
|
||||
put(48497, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 6"));
|
||||
put(48498, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 5"));
|
||||
put(48499, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 8"));
|
||||
put(48500, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 7"));
|
||||
put(48501, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 6"));
|
||||
put(48502, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 5"));
|
||||
put(48503, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S8"));
|
||||
put(48504, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S7"));
|
||||
put(48505, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S6"));
|
||||
put(48506, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S5"));
|
||||
put(48507, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S8"));
|
||||
put(48508, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S7"));
|
||||
put(48509, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S6"));
|
||||
put(48510, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S5"));
|
||||
put(48569, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 5 accessory"));
|
||||
put(48570, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 6 accessory"));
|
||||
put(48571, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 7 accessory"));
|
||||
put(48572, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 8 accessory"));
|
||||
put(48573, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 8 mixing valve amp."));
|
||||
put(48574, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 7 mixing valve amp."));
|
||||
put(48575, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 6 mixing valve amp."));
|
||||
put(48576, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 5 mixing valve amp."));
|
||||
put(48577, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 8 shunt wait"));
|
||||
put(48578, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 7 shunt wait"));
|
||||
put(48579, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 6 shunt wait"));
|
||||
put(48580, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 5 shunt wait"));
|
||||
put(48675, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S8"));
|
||||
put(48676, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S7"));
|
||||
put(48677, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S6"));
|
||||
put(48678, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S5"));
|
||||
put(48680, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S8"));
|
||||
put(48681, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S7"));
|
||||
put(48682, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S6"));
|
||||
put(48683, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S5"));
|
||||
put(48685, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S8"));
|
||||
put(48686, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S7"));
|
||||
put(48687, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S6"));
|
||||
put(48688, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S5"));
|
||||
put(48732, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S8"));
|
||||
put(48733, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S7"));
|
||||
put(48734, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S6"));
|
||||
put(48735, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S5"));
|
||||
put(48736, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S4"));
|
||||
put(48737, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S3"));
|
||||
put(48738, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S2"));
|
||||
put(48739, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S1"));
|
||||
put(48755, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Transformer ratio"));
|
||||
put(48794, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "RH set value"));
|
||||
put(48810, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S8 "));
|
||||
put(48811, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S7"));
|
||||
put(48812, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S6"));
|
||||
put(48813, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S5"));
|
||||
put(48814, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S4"));
|
||||
put(48815, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S3"));
|
||||
put(48816, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S2"));
|
||||
put(48817, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S1"));
|
||||
put(48889, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "MODBUS40 Disable LOG.SET"));
|
||||
put(48926, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Humidity factor"));
|
||||
put(48927, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Humidity cool factor"));
|
||||
put(48930, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME10 Activated"));
|
||||
put(48931, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME PV Panel Affect Heating"));
|
||||
put(48932, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME PV Panel Affect Hot Water"));
|
||||
put(48968, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "FLM 1 set point, cooling"));
|
||||
put(48970, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Outdoor Air Mixing function"));
|
||||
put(48976, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Smart home room control"));
|
||||
put(49289, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Ground water pump speed control "));
|
||||
put(49297, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME20 Activated"));
|
||||
put(49298, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME PV Panel Affect Pool"));
|
||||
put(49358, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(49359, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(49360, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(49361, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(49362, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(49363, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(49364, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(49365, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(49366, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(49431, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Stop Temperature Supply Air Heating"));
|
||||
|
||||
// @formatter:on
|
||||
}
|
||||
});
|
||||
|
||||
public static VariableInformation getVariableInfo(int key) {
|
||||
return VARIABLE_INFO_F470.get(key);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,681 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.models;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.NibeDataType;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation.Type;
|
||||
|
||||
/**
|
||||
* Class which holds all data variables of F750 heat pumps.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class F750 {
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
private static final Map<Integer, VariableInformation> VARIABLE_INFO_F750 = Collections
|
||||
.unmodifiableMap(new HashMap<Integer, VariableInformation>() {
|
||||
{
|
||||
// @formatter:off
|
||||
put(32260, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "NIBE Inverter 216-state"));
|
||||
put(40004, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Outdoor Temperature"));
|
||||
put(40005, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT2 Supply temp S4"));
|
||||
put(40006, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT2 Supply temp S3"));
|
||||
put(40007, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT2 Supply temp S2"));
|
||||
put(40008, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT2 Supply temp S1"));
|
||||
put(40012, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT3 Return temp"));
|
||||
put(40013, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT7 HW Top"));
|
||||
put(40014, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT6 HW Load"));
|
||||
put(40017, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT12 Condensor Out"));
|
||||
put(40018, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT14 Hot Gas Temp"));
|
||||
put(40019, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT15 Liquid Line"));
|
||||
put(40020, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT16 Evaporator temp"));
|
||||
put(40022, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-EP14-BT17 Suction"));
|
||||
put(40025, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT20 Exhaust air temp. 1"));
|
||||
put(40026, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT21 Vented air temp. 1"));
|
||||
put(40030, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT50 Room Temp S4"));
|
||||
put(40031, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT50 Room Temp S3"));
|
||||
put(40032, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT50 Room Temp S2"));
|
||||
put(40033, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT50 Room Temp S1"));
|
||||
put(40043, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT53 Solar Panel Temp"));
|
||||
put(40044, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT54 Solar Load Temp"));
|
||||
put(40047, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT61 Supply Radiator Temp"));
|
||||
put(40048, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BT62 Return Radiator Temp"));
|
||||
put(40050, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-BS1 Air flow"));
|
||||
put(40051, new VariableInformation( 100, NibeDataType.S16, Type.SENSOR , "EB100-BS1 Air flow unfiltered"));
|
||||
put(40054, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "EB100-FD1 Temperature limiter"));
|
||||
put(40067, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Average"));
|
||||
put(40071, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT25 Ext. Supply"));
|
||||
put(40072, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BF1 EP14 Flow"));
|
||||
put(40074, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "EB100-FR1 Anode Status"));
|
||||
put(40077, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT6 external water heater load temp."));
|
||||
put(40078, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT7 external water heater top temp."));
|
||||
put(40079, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "EB100-BE3 Current"));
|
||||
put(40081, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "EB100-BE2 Current"));
|
||||
put(40083, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "EB100-BE1 Current"));
|
||||
put(40122, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT52 external water heater load temp."));
|
||||
put(40127, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT3 Return temp S4"));
|
||||
put(40128, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT3 Return temp S3"));
|
||||
put(40129, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT3 Return temp S2"));
|
||||
put(40141, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ2-BT22 Supply air temp. SAM"));
|
||||
put(40142, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ2-BT23 Outdoor temp. SAM"));
|
||||
put(40143, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ2-BT68 Flow temp. SAM"));
|
||||
put(40144, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AZ2-BT69 Return temp. SAM"));
|
||||
put(40157, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP30-BT53 Solar Panel Temp"));
|
||||
put(40158, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP30-BT54 Solar Load Temp"));
|
||||
put(40159, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT2 Supply temp S8"));
|
||||
put(40160, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT2 Supply temp S7"));
|
||||
put(40161, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT2 Supply temp S6"));
|
||||
put(40162, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT2 Supply temp S5"));
|
||||
put(40163, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT3 Return temp S8"));
|
||||
put(40164, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT3 Return temp S7"));
|
||||
put(40165, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT3 Return temp S6"));
|
||||
put(40166, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT3 Return temp S5"));
|
||||
put(40167, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT50 Room Temp S8"));
|
||||
put(40168, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT50 Room Temp S7"));
|
||||
put(40169, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT50 Room Temp S6"));
|
||||
put(40170, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT50 Room Temp S5"));
|
||||
put(40185, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Average, 1h"));
|
||||
put(40188, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP47-BT50 Room Temp S8 Average"));
|
||||
put(40189, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP46-BT50 Room Temp S7 Average"));
|
||||
put(40190, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP45-BT50 Room Temp S6 Average"));
|
||||
put(40191, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP44-BT50 Room Temp S5 Average"));
|
||||
put(40192, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP23-BT50 Room Temp S4 Average"));
|
||||
put(40193, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP22-BT50 Room Temp S3 Average"));
|
||||
put(40194, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EP21-BT50 Room Temp S2 Average"));
|
||||
put(40195, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT50 Room Temp S1 Average"));
|
||||
put(40212, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT74 Average"));
|
||||
put(40217, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S8"));
|
||||
put(40218, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S7"));
|
||||
put(40219, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S6"));
|
||||
put(40220, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calculated Supply S5"));
|
||||
put(40305, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S8"));
|
||||
put(40306, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S7"));
|
||||
put(40307, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S6"));
|
||||
put(40308, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S5"));
|
||||
put(40316, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Inverter limit status"));
|
||||
put(40317, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter drive status"));
|
||||
put(40321, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Compressor Frequency, Request"));
|
||||
put(40322, new VariableInformation( 100, NibeDataType.U16, Type.SENSOR , "Max Compressor Frequency, Heating"));
|
||||
put(40323, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter alarm code"));
|
||||
put(40324, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter fault code"));
|
||||
put(40326, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter drive command"));
|
||||
put(40327, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "NIBE Inverter Pic version"));
|
||||
put(40328, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "NIBE Inverter 8051 version"));
|
||||
put(40329, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "NIBE Inverter Def. Wizard"));
|
||||
put(40330, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "NIBE Inverter Mce version"));
|
||||
put(40331, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "NIBE Inverter Hw version"));
|
||||
put(40332, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "NIBE Inverter Hw type"));
|
||||
put(40339, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S8"));
|
||||
put(40340, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S7"));
|
||||
put(40341, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S6"));
|
||||
put(40342, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S5"));
|
||||
put(40364, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AHPS Docking blocked"));
|
||||
put(40365, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S8"));
|
||||
put(40366, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S7"));
|
||||
put(40367, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S6"));
|
||||
put(40368, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S5"));
|
||||
put(40370, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AHPS Docking accessory relays"));
|
||||
put(40755, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. ext. HW add op.time"));
|
||||
put(40760, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Hz unlimited"));
|
||||
put(40762, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Reg. state AHPS Docking shunt"));
|
||||
put(40763, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AHPS Docking calc. supply temp."));
|
||||
put(40771, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - Pool2 Cpr EP14"));
|
||||
put(40868, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust AUX Port"));
|
||||
put(40870, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust OP mode"));
|
||||
put(40871, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust Comfort mode"));
|
||||
put(40872, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "+Adjust Parallell adjustment"));
|
||||
put(40873, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "+Adjust Humidity"));
|
||||
put(40874, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "+Adjust Temp indoor"));
|
||||
put(40875, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "+Adjust Temp outdoor"));
|
||||
put(40876, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "+Adjust Version"));
|
||||
put(40877, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust Activated"));
|
||||
put(40878, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "+Adjust Need"));
|
||||
put(40889, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT64 Average"));
|
||||
put(40918, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "EB100-FD3 Temperature limiter"));
|
||||
put(40932, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Kind of defrost"));
|
||||
put(40934, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Active defrosting time"));
|
||||
put(40935, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Passive defrosting time"));
|
||||
put(40940, new VariableInformation( 10, NibeDataType.S32, Type.SETTING , "Degree Minutes (32 bit)"));
|
||||
put(40993, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter min speed"));
|
||||
put(40994, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter max speed"));
|
||||
put(40995, new VariableInformation( 100, NibeDataType.U32, Type.SENSOR , "External Energy Meter 2 Accumulated Energy"));
|
||||
put(40997, new VariableInformation( 100, NibeDataType.U32, Type.SENSOR , "External Energy Meter 1 Accumulated Energy"));
|
||||
put(41026, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "EB100-Adjusted BS1 Air flow"));
|
||||
put(41027, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Humidity average"));
|
||||
put(41189, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AA20-BE5 EME10 Current"));
|
||||
put(41190, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "AA20-BE5 EME10 Average Current"));
|
||||
put(41191, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "PV Panel State"));
|
||||
put(41214, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "OEK accessory block status"));
|
||||
put(41256, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(41257, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(41258, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(41265, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home Mode"));
|
||||
put(41266, new VariableInformation( 10, NibeDataType.S8 , Type.SENSOR , "Offset to smart home system"));
|
||||
put(41267, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 8"));
|
||||
put(41268, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 7"));
|
||||
put(41269, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 6"));
|
||||
put(41270, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 5"));
|
||||
put(41271, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 4"));
|
||||
put(41272, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 3"));
|
||||
put(41273, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 2"));
|
||||
put(41274, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Home ctrl syst 1"));
|
||||
put(41928, new VariableInformation( 100, NibeDataType.U16, Type.SENSOR , "Smart Price Adaption Price"));
|
||||
put(41929, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Smart Price Adaption Price Level"));
|
||||
put(41930, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 10"));
|
||||
put(41931, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 9"));
|
||||
put(41932, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 8"));
|
||||
put(41933, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 7"));
|
||||
put(41934, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 6"));
|
||||
put(41935, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 5"));
|
||||
put(41936, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 4"));
|
||||
put(41937, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 3"));
|
||||
put(41938, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 2"));
|
||||
put(41939, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Power 1"));
|
||||
put(41940, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 10"));
|
||||
put(41941, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 9"));
|
||||
put(41942, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 8"));
|
||||
put(41943, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 7"));
|
||||
put(41944, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 6"));
|
||||
put(41945, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 5"));
|
||||
put(41946, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 4"));
|
||||
put(41947, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 3"));
|
||||
put(41948, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 2"));
|
||||
put(41949, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error High 1"));
|
||||
put(41950, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 10"));
|
||||
put(41951, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 9"));
|
||||
put(41952, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 8"));
|
||||
put(41953, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 7"));
|
||||
put(41954, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 6"));
|
||||
put(41955, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 5"));
|
||||
put(41956, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 4"));
|
||||
put(41957, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 3"));
|
||||
put(41958, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 2"));
|
||||
put(41959, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Error Low 1"));
|
||||
put(41960, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 10"));
|
||||
put(41961, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 9"));
|
||||
put(41962, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 8"));
|
||||
put(41963, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 7"));
|
||||
put(41964, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 6"));
|
||||
put(41965, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 5"));
|
||||
put(41966, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 4"));
|
||||
put(41967, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 3"));
|
||||
put(41968, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 2"));
|
||||
put(41969, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Com Percentage 1"));
|
||||
put(41980, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 10"));
|
||||
put(41981, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 9"));
|
||||
put(41982, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 8"));
|
||||
put(41983, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 7"));
|
||||
put(41984, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 6"));
|
||||
put(41985, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 5"));
|
||||
put(41986, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 4"));
|
||||
put(41987, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 3"));
|
||||
put(41988, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 2"));
|
||||
put(41989, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage1 1"));
|
||||
put(41990, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 10"));
|
||||
put(41991, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 9"));
|
||||
put(41992, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 8"));
|
||||
put(41993, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 7"));
|
||||
put(41994, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 6"));
|
||||
put(41995, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 5"));
|
||||
put(41996, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 4"));
|
||||
put(41997, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 3"));
|
||||
put(41998, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 2"));
|
||||
put(41999, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Voltage2 1"));
|
||||
put(42000, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 10"));
|
||||
put(42001, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 9"));
|
||||
put(42002, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 8"));
|
||||
put(42003, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 7"));
|
||||
put(42004, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 6"));
|
||||
put(42005, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 5"));
|
||||
put(42006, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 4"));
|
||||
put(42007, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 3"));
|
||||
put(42008, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 2"));
|
||||
put(42009, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "AA23-BE5 Temperature 1"));
|
||||
put(42010, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 10"));
|
||||
put(42012, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 9"));
|
||||
put(42014, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 8"));
|
||||
put(42016, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 7"));
|
||||
put(42018, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 6"));
|
||||
put(42020, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 5"));
|
||||
put(42022, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 4"));
|
||||
put(42024, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 3"));
|
||||
put(42026, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 2"));
|
||||
put(42028, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 Energy 1"));
|
||||
put(42030, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "AA23-BE5 EME20 Version"));
|
||||
put(42033, new VariableInformation( 10, NibeDataType.U8 , Type.SENSOR , "PV Panel Heat Offset"));
|
||||
put(42034, new VariableInformation( 10, NibeDataType.U8 , Type.SENSOR , "PV Panel Pool Offset"));
|
||||
put(42035, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "AA23-BE5 EME20 Total Power"));
|
||||
put(42037, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "AA23-BE5 EME20 Total Average Power"));
|
||||
put(42075, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "AA23-BE5 EME20 Total Energy"));
|
||||
put(42080, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 504"));
|
||||
put(42081, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 505"));
|
||||
put(42082, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 506"));
|
||||
put(42083, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 507"));
|
||||
put(42084, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 508"));
|
||||
put(42085, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 509"));
|
||||
put(42086, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 510"));
|
||||
put(42087, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "AA23-BE5 Alarm 511"));
|
||||
put(42093, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External SAM accessory GQ3 speed"));
|
||||
put(42100, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "BT1 Average, 24h"));
|
||||
put(42101, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Used heating power average, 24h"));
|
||||
put(42437, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - HW Cpr and Add - Total system"));
|
||||
put(42439, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - Heat Cpr and Add - Total system"));
|
||||
put(42443, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - Pool Cpr - Total system"));
|
||||
put(42445, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - HW Cpr - Total system"));
|
||||
put(42447, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - Heat Cpr - Total system"));
|
||||
put(42504, new VariableInformation( 1, NibeDataType.U32, Type.SENSOR , "External Energy Meter Accumulated System"));
|
||||
put(43001, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Software version"));
|
||||
put(43005, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Degree Minutes (16 bit)"));
|
||||
put(43006, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S4"));
|
||||
put(43007, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S3"));
|
||||
put(43008, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S2"));
|
||||
put(43009, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calc. Supply S1"));
|
||||
put(43013, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Freeze Protection Status"));
|
||||
put(43061, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "t. after start timer"));
|
||||
put(43062, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "t. after mode change"));
|
||||
put(43064, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Heat Medium Flow dT Set Point"));
|
||||
put(43065, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Heat Medium Flow dT Actual"));
|
||||
put(43066, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Defrosting time"));
|
||||
put(43081, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. op.time add."));
|
||||
put(43084, new VariableInformation( 100, NibeDataType.S16, Type.SENSOR , "Int. el.add. Power"));
|
||||
put(43086, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Prio"));
|
||||
put(43091, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Int. el.add. State"));
|
||||
put(43093, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S4"));
|
||||
put(43094, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S3"));
|
||||
put(43095, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S2"));
|
||||
put(43096, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Mixing Valve State S1"));
|
||||
put(43097, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Status of the shunt controlled additional heat accessory"));
|
||||
put(43108, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Fan speed current"));
|
||||
put(43122, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Compr. current min.freq."));
|
||||
put(43123, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Compr. current max.freq."));
|
||||
put(43124, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Airflow ref."));
|
||||
put(43132, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter com. timer"));
|
||||
put(43136, new VariableInformation( 10, NibeDataType.U16, Type.SENSOR , "Compressor Frequency, Actual"));
|
||||
put(43140, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Inverter Temperature"));
|
||||
put(43141, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "compr. in power"));
|
||||
put(43144, new VariableInformation( 100, NibeDataType.U32, Type.SENSOR , "Compr. energy total"));
|
||||
put(43147, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Compr. in current"));
|
||||
put(43158, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S4"));
|
||||
put(43159, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S3"));
|
||||
put(43160, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S2"));
|
||||
put(43161, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External adjustment activated via input S1"));
|
||||
put(43180, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "HWC Pump Status GP11"));
|
||||
put(43181, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Chargepump speed"));
|
||||
put(43182, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Compressor Frequency, Target"));
|
||||
put(43239, new VariableInformation( 10, NibeDataType.S32, Type.SENSOR , "Tot. HW op.time add."));
|
||||
put(43305, new VariableInformation( 100, NibeDataType.U32, Type.SENSOR , "Compr. energy HW"));
|
||||
put(43371, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Hot gas limit status"));
|
||||
put(43372, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Evaporater limit status"));
|
||||
put(43375, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "compr. in power mean"));
|
||||
put(43382, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Inverter mem error code"));
|
||||
put(43416, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Compressor starts EB100-EP14"));
|
||||
put(43420, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Tot. op.time compr. EB100-EP14"));
|
||||
put(43424, new VariableInformation( 1, NibeDataType.S32, Type.SENSOR , "Tot. HW op.time compr. EB100-EP14"));
|
||||
put(43427, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Compressor State EP14"));
|
||||
put(43431, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Supply Pump State EP14"));
|
||||
put(43435, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Cpr Status EP14"));
|
||||
put(43437, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Supply Pump Speed EP14"));
|
||||
put(43444, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State OEK"));
|
||||
put(43514, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "EB100-EP14 PCA Base Relays"));
|
||||
put(43516, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "PCA-Power Relays EP14"));
|
||||
put(43542, new VariableInformation( 10, NibeDataType.S16, Type.SENSOR , "Calculated supply air temp."));
|
||||
put(43561, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Pool 1 blocked"));
|
||||
put(44258, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "External supply air accessory relays"));
|
||||
put(44298, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - HW Cpr and Add EP14"));
|
||||
put(44300, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - Heat Cpr and Add EP14"));
|
||||
put(44304, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - Pool Cpr EP14"));
|
||||
put(44306, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - HW Cpr EP14"));
|
||||
put(44308, new VariableInformation( 10, NibeDataType.U32, Type.SENSOR , "Heat Meter - Heat Cpr EP14"));
|
||||
put(44317, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SCA accessory relays"));
|
||||
put(44331, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Software release"));
|
||||
put(44744, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S4"));
|
||||
put(44745, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S3"));
|
||||
put(44746, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Extra heating system pump S2"));
|
||||
put(44755, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "DEW hot water valve"));
|
||||
put(44757, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SCA hot water valve"));
|
||||
put(44874, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State SG Ready"));
|
||||
put(44878, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SG Ready input A"));
|
||||
put(44879, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "SG Ready input B"));
|
||||
put(44896, new VariableInformation( 10, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption Heating Offset"));
|
||||
put(44897, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption HW Comfort Mode"));
|
||||
put(44898, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption Pool Offset"));
|
||||
put(44899, new VariableInformation( 1, NibeDataType.S8 , Type.SENSOR , "Smart Price Adaption Cool Offset"));
|
||||
put(44908, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "State smart price adaption"));
|
||||
put(45001, new VariableInformation( 1, NibeDataType.S16, Type.SENSOR , "Alarm"));
|
||||
put(47062, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "HW charge offset"));
|
||||
put(47291, new VariableInformation( 1, NibeDataType.U16, Type.SENSOR , "Floor drying timer"));
|
||||
put(48206, new VariableInformation( 1, NibeDataType.U8 , Type.SENSOR , "Silent Mode Status"));
|
||||
put(40879, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "+Adjust Parallell factor"));
|
||||
put(40880, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "+Adjust Max change"));
|
||||
put(40881, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system8"));
|
||||
put(40882, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system7"));
|
||||
put(40883, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system6"));
|
||||
put(40884, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system5"));
|
||||
put(40885, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system4"));
|
||||
put(40886, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system3"));
|
||||
put(40887, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system2"));
|
||||
put(40888, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "+Adjust Affect system1"));
|
||||
put(45171, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm Reset"));
|
||||
put(47004, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S4"));
|
||||
put(47005, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S3"));
|
||||
put(47006, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S2"));
|
||||
put(47007, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S1"));
|
||||
put(47008, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S4"));
|
||||
put(47009, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S3"));
|
||||
put(47010, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S2"));
|
||||
put(47011, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S1"));
|
||||
put(47012, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 4"));
|
||||
put(47013, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 3"));
|
||||
put(47014, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 2"));
|
||||
put(47015, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 1"));
|
||||
put(47016, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 4"));
|
||||
put(47017, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 3"));
|
||||
put(47018, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 2"));
|
||||
put(47019, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 1"));
|
||||
put(47020, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P7"));
|
||||
put(47021, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P6"));
|
||||
put(47022, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P5"));
|
||||
put(47023, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P4"));
|
||||
put(47024, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P3"));
|
||||
put(47025, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P2"));
|
||||
put(47026, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Own Heating Curve P1"));
|
||||
put(47027, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Point offset outdoor temp."));
|
||||
put(47028, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Point offset"));
|
||||
put(47029, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S4"));
|
||||
put(47030, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S3"));
|
||||
put(47031, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S2"));
|
||||
put(47032, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S1"));
|
||||
put(47033, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S4"));
|
||||
put(47034, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S3"));
|
||||
put(47035, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S2"));
|
||||
put(47036, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S1"));
|
||||
put(47041, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Hot water comfort mode"));
|
||||
put(47043, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Luxury"));
|
||||
put(47044, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Normal"));
|
||||
put(47045, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start temperature HW Economy"));
|
||||
put(47046, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature Periodic HW"));
|
||||
put(47047, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Luxury"));
|
||||
put(47048, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Normal"));
|
||||
put(47049, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop temperature HW Economy"));
|
||||
put(47050, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Periodic HW"));
|
||||
put(47051, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Periodic HW Interval"));
|
||||
put(47054, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Run time HWC"));
|
||||
put(47055, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Still time HWC"));
|
||||
put(47092, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Manual compfreq HW"));
|
||||
put(47093, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Manual compfreq speed HW"));
|
||||
put(47094, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Sec per compfreq step"));
|
||||
put(47095, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Max compfreq step"));
|
||||
put(47096, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Manual compfreq Heating"));
|
||||
put(47097, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Min speed after start"));
|
||||
put(47098, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Min speed after HW"));
|
||||
put(47099, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "GMz"));
|
||||
put(47100, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Max diff VBF-BerVBF"));
|
||||
put(47101, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Comp freq reg P"));
|
||||
put(47102, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Comp freq max delta F"));
|
||||
put(47103, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Min comp freq"));
|
||||
put(47104, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Max comp freq"));
|
||||
put(47105, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Comp freq heating"));
|
||||
put(47131, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Language"));
|
||||
put(47134, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Period HW"));
|
||||
put(47135, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Period Heat"));
|
||||
put(47137, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode"));
|
||||
put(47138, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Operational mode heat medium pump"));
|
||||
put(47206, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM start heating"));
|
||||
put(47209, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM between add. steps"));
|
||||
put(47210, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM start add. with shunt"));
|
||||
put(47212, new VariableInformation( 100, NibeDataType.S16, Type.SETTING , "Max int add. power"));
|
||||
put(47214, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Fuse"));
|
||||
put(47261, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 4"));
|
||||
put(47262, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 3"));
|
||||
put(47263, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 2"));
|
||||
put(47264, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed 1"));
|
||||
put(47265, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Exhaust Fan speed normal"));
|
||||
put(47266, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 4"));
|
||||
put(47267, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 3"));
|
||||
put(47268, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 2"));
|
||||
put(47269, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed 1"));
|
||||
put(47270, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Supply Fan speed normal"));
|
||||
put(47271, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 4"));
|
||||
put(47272, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 3"));
|
||||
put(47273, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 2"));
|
||||
put(47274, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Fan return time 1"));
|
||||
put(47275, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Filter Reminder period"));
|
||||
put(47276, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying"));
|
||||
put(47277, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 7"));
|
||||
put(47278, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 6"));
|
||||
put(47279, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 5"));
|
||||
put(47280, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 4"));
|
||||
put(47281, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 3"));
|
||||
put(47282, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 2"));
|
||||
put(47283, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying period 1"));
|
||||
put(47284, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 7"));
|
||||
put(47285, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 6"));
|
||||
put(47286, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 5"));
|
||||
put(47287, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 4"));
|
||||
put(47288, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 3"));
|
||||
put(47289, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 2"));
|
||||
put(47290, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Floor drying temp. 1"));
|
||||
put(47294, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use airflow defrost"));
|
||||
put(47295, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Airflow reduction trig"));
|
||||
put(47296, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Airflow defrost done"));
|
||||
put(47299, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Min time defrost"));
|
||||
put(47300, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "DOT"));
|
||||
put(47301, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "delta T at DOT"));
|
||||
put(47302, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 2 accessory"));
|
||||
put(47303, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 3 accessory"));
|
||||
put(47304, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 4 accessory"));
|
||||
put(47305, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 4 mixing valve amp."));
|
||||
put(47306, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 3 mixing valve amp."));
|
||||
put(47307, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 2 mixing valve amp."));
|
||||
put(47308, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 4 shunt wait"));
|
||||
put(47309, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 3 shunt wait"));
|
||||
put(47310, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 2 shunt wait"));
|
||||
put(47317, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Shunt controlled add. accessory"));
|
||||
put(47318, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Shunt controlled add. min. temp."));
|
||||
put(47319, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Shunt controlled add. min. runtime"));
|
||||
put(47320, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Shunt controlled add. mixing valve amp."));
|
||||
put(47321, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Shunt controlled add. mixing valve wait"));
|
||||
put(47352, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SMS40 accessory"));
|
||||
put(47365, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 1"));
|
||||
put(47366, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 2"));
|
||||
put(47367, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 3"));
|
||||
put(47368, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "RMU System 4"));
|
||||
put(47370, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Additive Heating"));
|
||||
put(47371, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Allow Heating"));
|
||||
put(47374, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Start Temperature Cooling"));
|
||||
put(47375, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop Temperature Heating"));
|
||||
put(47376, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Stop Temperature Additive"));
|
||||
put(47377, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Outdoor Filter Time"));
|
||||
put(47378, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max diff. comp."));
|
||||
put(47379, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max diff. add."));
|
||||
put(47384, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Date format"));
|
||||
put(47385, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Time format"));
|
||||
put(47387, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "HW production"));
|
||||
put(47388, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm lower room temp."));
|
||||
put(47389, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Alarm lower HW temp."));
|
||||
put(47391, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S4"));
|
||||
put(47392, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S3"));
|
||||
put(47393, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S2"));
|
||||
put(47394, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S1"));
|
||||
put(47395, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S4"));
|
||||
put(47396, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S3"));
|
||||
put(47397, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S2"));
|
||||
put(47398, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S1"));
|
||||
put(47399, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S4"));
|
||||
put(47400, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S3"));
|
||||
put(47401, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S2"));
|
||||
put(47402, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S1"));
|
||||
put(47442, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "preset flow clim. sys."));
|
||||
put(47473, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Max time defrost"));
|
||||
put(47525, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S8"));
|
||||
put(47537, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(47538, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(47539, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(47555, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "DEW accessory"));
|
||||
put(47567, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S7"));
|
||||
put(48043, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Holiday - Activated"));
|
||||
put(48072, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM diff start add."));
|
||||
put(48132, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Temporary Lux"));
|
||||
put(48139, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "DM startdiff add. with shunt"));
|
||||
put(48158, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "SAM supply air curve: outdoor temp T3"));
|
||||
put(48159, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "SAM supply air curve: outdoor temp T2"));
|
||||
put(48160, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "SAM supply air curve: outdoor temp T1"));
|
||||
put(48161, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "SAM supply air curve: supply air temp at T3"));
|
||||
put(48162, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "SAM supply air curve: supply air temp at T2"));
|
||||
put(48163, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "SAM supply air curve: supply air temp at T1"));
|
||||
put(48201, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SCA accessory"));
|
||||
put(48275, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Max charge pump reg speed"));
|
||||
put(48282, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready heating"));
|
||||
put(48283, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready cooling"));
|
||||
put(48284, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready hot water"));
|
||||
put(48285, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SG Ready pool"));
|
||||
put(48452, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, hw"));
|
||||
put(48453, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, heat"));
|
||||
put(48454, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, pool"));
|
||||
put(48455, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Auto heat medium pump speed, cool"));
|
||||
put(48488, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S6"));
|
||||
put(48489, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Curve S5"));
|
||||
put(48491, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S8"));
|
||||
put(48492, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S7"));
|
||||
put(48493, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S6"));
|
||||
put(48494, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Heat Offset S5"));
|
||||
put(48495, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 8"));
|
||||
put(48496, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 7"));
|
||||
put(48497, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 6"));
|
||||
put(48498, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Min Supply System 5"));
|
||||
put(48499, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 8"));
|
||||
put(48500, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 7"));
|
||||
put(48501, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 6"));
|
||||
put(48502, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Max Supply System 5"));
|
||||
put(48503, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S8"));
|
||||
put(48504, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S7"));
|
||||
put(48505, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S6"));
|
||||
put(48506, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "External adjustment S5"));
|
||||
put(48507, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S8"));
|
||||
put(48508, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S7"));
|
||||
put(48509, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S6"));
|
||||
put(48510, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "External adjustment with room sensor S5"));
|
||||
put(48567, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Initiate inverter"));
|
||||
put(48568, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Force inverter init"));
|
||||
put(48569, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 5 accessory"));
|
||||
put(48570, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 6 accessory"));
|
||||
put(48571, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 7 accessory"));
|
||||
put(48572, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Climate system 8 accessory"));
|
||||
put(48573, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 8 mixing valve amp."));
|
||||
put(48574, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 7 mixing valve amp."));
|
||||
put(48575, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 6 mixing valve amp."));
|
||||
put(48576, new VariableInformation( 10, NibeDataType.S8 , Type.SETTING , "Climate system 5 mixing valve amp."));
|
||||
put(48577, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 8 shunt wait"));
|
||||
put(48578, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 7 shunt wait"));
|
||||
put(48579, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 6 shunt wait"));
|
||||
put(48580, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Climate system 5 shunt wait"));
|
||||
put(48637, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AHPS docking accessory"));
|
||||
put(48638, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AHPS docking: solar heating"));
|
||||
put(48639, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AHPS docking: prioritized add."));
|
||||
put(48640, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AHPS docking: ext. addition"));
|
||||
put(48641, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AHPS docking: ext. hot water"));
|
||||
put(48659, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cut off frequency activated 2"));
|
||||
put(48660, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cut off frequency activated 1"));
|
||||
put(48661, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cut off frequency start 2"));
|
||||
put(48662, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cut off frequency start 1"));
|
||||
put(48663, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cut off frequency stop 2"));
|
||||
put(48664, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Cut off frequency stop 1"));
|
||||
put(48675, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S8"));
|
||||
put(48676, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S7"));
|
||||
put(48677, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S6"));
|
||||
put(48678, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Use room sensor S5"));
|
||||
put(48680, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S8"));
|
||||
put(48681, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S7"));
|
||||
put(48682, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S6"));
|
||||
put(48683, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "Room sensor setpoint S5"));
|
||||
put(48685, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S8"));
|
||||
put(48686, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S7"));
|
||||
put(48687, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S6"));
|
||||
put(48688, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Room sensor factor S5"));
|
||||
put(48732, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S8"));
|
||||
put(48733, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S7"));
|
||||
put(48734, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S6"));
|
||||
put(48735, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S5"));
|
||||
put(48736, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S4"));
|
||||
put(48737, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S3"));
|
||||
put(48738, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S2"));
|
||||
put(48739, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Cool offset S1"));
|
||||
put(48743, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Hot water high power mode"));
|
||||
put(48755, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Transformer ratio"));
|
||||
put(48794, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "RH set value"));
|
||||
put(48810, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S8 "));
|
||||
put(48811, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S7"));
|
||||
put(48812, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S6"));
|
||||
put(48813, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S5"));
|
||||
put(48814, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S4"));
|
||||
put(48815, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S3"));
|
||||
put(48816, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S2"));
|
||||
put(48817, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Prevent humidity S1"));
|
||||
put(48852, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Modbus40 Word Swap"));
|
||||
put(48889, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "MODBUS40 Disable LOG.SET"));
|
||||
put(48891, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Setting up ventilation"));
|
||||
put(48908, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Energy Meter Factor X23"));
|
||||
put(48909, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Energy Meter Factor X22"));
|
||||
put(48910, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Energy Meter X23"));
|
||||
put(48911, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Energy Meter X22"));
|
||||
put(48914, new VariableInformation( 100, NibeDataType.S16, Type.SETTING , "Max int add. power, SG Ready"));
|
||||
put(48915, new VariableInformation( 1, NibeDataType.S16, Type.SETTING , "Real air flow"));
|
||||
put(48926, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Humidity factor"));
|
||||
put(48927, new VariableInformation( 10, NibeDataType.U8 , Type.SETTING , "Humidity cool factor"));
|
||||
put(48930, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME10 Activated"));
|
||||
put(48931, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME PV Panel Affect Heating"));
|
||||
put(48932, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME PV Panel Affect Hot Water"));
|
||||
put(48968, new VariableInformation( 10, NibeDataType.S16, Type.SETTING , "FLM 1 set point, cooling"));
|
||||
put(48969, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AUX block OPT"));
|
||||
put(48970, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Outdoor Air Mixing function"));
|
||||
put(48972, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Outdoor air min. temp."));
|
||||
put(48973, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Reduced ventilation"));
|
||||
put(48975, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "OEK accessory"));
|
||||
put(48976, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Smart home room control"));
|
||||
put(49223, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SCA solar heating"));
|
||||
put(49224, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SCA ext. hot water"));
|
||||
put(49227, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Block top frequencies"));
|
||||
put(49281, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "SAM fan model"));
|
||||
put(49282, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Silent Mode Max Speed"));
|
||||
put(49285, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Energy Meter pulses per kWh X23"));
|
||||
put(49286, new VariableInformation( 1, NibeDataType.U16, Type.SETTING , "Energy Meter pulses per kWh X22"));
|
||||
put(49287, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Energy Meter mode X23"));
|
||||
put(49288, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Energy Meter mode X22"));
|
||||
put(49289, new VariableInformation( 1, NibeDataType.S8 , Type.SETTING , "Ground water pump speed control "));
|
||||
put(49295, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AHPS External Addition start temperature."));
|
||||
put(49296, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "AHPS External Addition stop temperature."));
|
||||
put(49297, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME20 Activated"));
|
||||
put(49298, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "EME PV Panel Affect Pool"));
|
||||
put(49358, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(49359, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(49360, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night cooling"));
|
||||
put(49361, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(49362, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(49363, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Start room temp. night cooling"));
|
||||
put(49364, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(49365, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
put(49366, new VariableInformation( 1, NibeDataType.U8 , Type.SETTING , "Night Cooling Min. diff."));
|
||||
// @formatter:on
|
||||
}
|
||||
});
|
||||
|
||||
public static VariableInformation getVariableInfo(int key) {
|
||||
return VARIABLE_INFO_F750.get(key);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.models;
|
||||
|
||||
/**
|
||||
* Class for different Nibe heat pump models.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public enum PumpModel {
|
||||
F1X45("F1X45"),
|
||||
F1X55("F1X55"),
|
||||
F750("F750"),
|
||||
F470("F470");
|
||||
|
||||
private final String pumpModel;
|
||||
|
||||
PumpModel(String pumpModel) {
|
||||
this.pumpModel = pumpModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return pumpModel;
|
||||
}
|
||||
|
||||
public static PumpModel getPumpModel(String pumpModel) throws IllegalArgumentException {
|
||||
try {
|
||||
return PumpModel.valueOf(pumpModel.toUpperCase());
|
||||
} catch (Exception e) {
|
||||
String description = String.format("Illegal pump model '%s'", pumpModel);
|
||||
throw new IllegalArgumentException(description);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.models;
|
||||
|
||||
/**
|
||||
* Class for VariableInformation
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class VariableInformation {
|
||||
|
||||
public enum NibeDataType {
|
||||
U8,
|
||||
U16,
|
||||
U32,
|
||||
S8,
|
||||
S16,
|
||||
S32
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
SENSOR,
|
||||
SETTING
|
||||
}
|
||||
|
||||
public int factor;
|
||||
public NibeDataType dataType;
|
||||
public Type type;
|
||||
public String variable;
|
||||
|
||||
public VariableInformation() {
|
||||
}
|
||||
|
||||
public VariableInformation(int factor, NibeDataType dataType, Type type, String variable) {
|
||||
this.factor = factor;
|
||||
this.dataType = dataType;
|
||||
this.type = type;
|
||||
this.variable = variable;
|
||||
}
|
||||
|
||||
public static VariableInformation getVariableInfo(PumpModel model, int key) {
|
||||
switch (model) {
|
||||
case F1X45:
|
||||
return F1X45.getVariableInfo(key);
|
||||
case F1X55:
|
||||
return F1X55.getVariableInfo(key);
|
||||
case F750:
|
||||
return F750.getVariableInfo(key);
|
||||
case F470:
|
||||
return F470.getVariableInfo(key);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String str = "";
|
||||
|
||||
str += "Factor = " + factor;
|
||||
str += ", DataType = " + dataType;
|
||||
str += ", Type = " + type;
|
||||
str += ", VariableName = " + variable;
|
||||
|
||||
return str;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.protocol;
|
||||
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
|
||||
/**
|
||||
* This class contains useful Nibe heat pump protocol utils.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpProtocol {
|
||||
|
||||
public static final byte FRAME_START_CHAR_FROM_NIBE = (byte) 0x5C;
|
||||
public static final byte FRAME_START_CHAR_TO_NIBE = (byte) 0xC0;
|
||||
|
||||
public static final byte OFFSET_START = 0;
|
||||
public static final byte OFFSET_ADR = 2;
|
||||
public static final byte OFFSET_CMD = 3;
|
||||
public static final byte OFFSET_LEN = 4;
|
||||
public static final byte OFFSET_DATA = 5;
|
||||
|
||||
public static final byte CMD_RMU_DATA_MSG = (byte) 0x62;
|
||||
public static final byte CMD_MODBUS_DATA_MSG = (byte) 0x68;
|
||||
public static final byte CMD_MODBUS_READ_REQ = (byte) 0x69;
|
||||
public static final byte CMD_MODBUS_READ_RESP = (byte) 0x6A;
|
||||
public static final byte CMD_MODBUS_WRITE_REQ = (byte) 0x6B;
|
||||
public static final byte CMD_MODBUS_WRITE_RESP = (byte) 0x6C;
|
||||
|
||||
public static final byte ADR_SMS40 = (byte) 0x16;
|
||||
public static final byte ADR_RMU40 = (byte) 0x19;
|
||||
public static final byte ADR_MODBUS40 = (byte) 0x20;
|
||||
|
||||
public static boolean isModbus40DataReadOut(byte[] data) {
|
||||
if (data[OFFSET_START] == FRAME_START_CHAR_FROM_NIBE && data[1] == (byte) 0x00
|
||||
&& data[OFFSET_ADR] == ADR_MODBUS40) {
|
||||
return data[OFFSET_CMD] == CMD_MODBUS_DATA_MSG && data[OFFSET_LEN] >= (byte) 0x50;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isModbus40ReadResponse(byte[] data) {
|
||||
if (data[OFFSET_START] == FRAME_START_CHAR_FROM_NIBE && data[1] == (byte) 0x00
|
||||
&& data[OFFSET_ADR] == ADR_MODBUS40) {
|
||||
return data[OFFSET_CMD] == CMD_MODBUS_READ_RESP && data[OFFSET_LEN] >= (byte) 0x06;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isRmu40DataReadOut(byte[] data) {
|
||||
if (data[0] == FRAME_START_CHAR_FROM_NIBE && data[1] == (byte) 0x00 && data[OFFSET_ADR] == ADR_RMU40) {
|
||||
return data[OFFSET_CMD] == CMD_RMU_DATA_MSG && data[OFFSET_LEN] >= (byte) 0x18;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isModbus40WriteResponsePdu(byte[] data) {
|
||||
return data[OFFSET_START] == FRAME_START_CHAR_FROM_NIBE && data[1] == (byte) 0x00
|
||||
&& data[OFFSET_ADR] == ADR_MODBUS40 && data[OFFSET_CMD] == CMD_MODBUS_WRITE_RESP;
|
||||
}
|
||||
|
||||
public static boolean isModbus40WriteTokenPdu(byte[] data) {
|
||||
return data[0] == FRAME_START_CHAR_FROM_NIBE && data[1] == (byte) 0x00 && data[OFFSET_ADR] == ADR_MODBUS40
|
||||
&& data[OFFSET_CMD] == CMD_MODBUS_WRITE_REQ && data[OFFSET_LEN] == 0x00;
|
||||
}
|
||||
|
||||
public static boolean isModbus40ReadTokenPdu(byte[] data) {
|
||||
return data[OFFSET_START] == FRAME_START_CHAR_FROM_NIBE && data[1] == (byte) 0x00
|
||||
&& data[OFFSET_ADR] == ADR_MODBUS40 && data[OFFSET_CMD] == CMD_MODBUS_READ_REQ
|
||||
&& data[OFFSET_LEN] == 0x00;
|
||||
}
|
||||
|
||||
public static boolean isModbus40WriteRequestPdu(byte[] data) {
|
||||
return data[0] == FRAME_START_CHAR_TO_NIBE && data[1] == CMD_MODBUS_WRITE_REQ;
|
||||
}
|
||||
|
||||
public static boolean isModbus40ReadRequestPdu(byte[] data) {
|
||||
return data[OFFSET_START] == FRAME_START_CHAR_TO_NIBE && data[1] == CMD_MODBUS_READ_REQ;
|
||||
}
|
||||
|
||||
public static byte calculateChecksum(byte[] data) {
|
||||
return calculateChecksum(data, 0, data.length);
|
||||
}
|
||||
|
||||
public static byte calculateChecksum(byte[] data, int startIndex, int stopIndex) {
|
||||
byte checksum = 0;
|
||||
// calculate XOR checksum
|
||||
for (int i = startIndex; i < stopIndex; i++) {
|
||||
checksum ^= data[i];
|
||||
}
|
||||
return checksum;
|
||||
}
|
||||
|
||||
public static byte getMessageType(byte[] data) {
|
||||
byte messageType = 0;
|
||||
|
||||
if (data[NibeHeatPumpProtocol.OFFSET_START] == NibeHeatPumpProtocol.FRAME_START_CHAR_FROM_NIBE) {
|
||||
messageType = data[NibeHeatPumpProtocol.OFFSET_CMD];
|
||||
} else if (data[NibeHeatPumpProtocol.OFFSET_START] == NibeHeatPumpProtocol.FRAME_START_CHAR_TO_NIBE) {
|
||||
messageType = data[1];
|
||||
}
|
||||
|
||||
return messageType;
|
||||
}
|
||||
|
||||
public static byte[] checkMessageChecksumAndRemoveDoubles(byte[] data) throws NibeHeatPumpException {
|
||||
int msglen;
|
||||
int startIndex;
|
||||
int stopIndex;
|
||||
|
||||
if (NibeHeatPumpProtocol.isModbus40ReadRequestPdu(data)
|
||||
|| NibeHeatPumpProtocol.isModbus40WriteRequestPdu(data)) {
|
||||
msglen = 3 + data[2];
|
||||
startIndex = 0;
|
||||
stopIndex = msglen;
|
||||
} else {
|
||||
msglen = 5 + data[OFFSET_LEN];
|
||||
startIndex = 2;
|
||||
stopIndex = msglen;
|
||||
}
|
||||
|
||||
final byte checksum = calculateChecksum(data, startIndex, stopIndex);
|
||||
final byte msgChecksum = data[msglen];
|
||||
|
||||
// if checksum is 0x5C (start character), heat pump seems to send 0xC5 checksum
|
||||
|
||||
if (checksum == msgChecksum || (checksum == FRAME_START_CHAR_FROM_NIBE && msgChecksum == (byte) 0xC5)) {
|
||||
// if data contains 0x5C (start character), data seems to contains double 0x5C characters
|
||||
|
||||
// let's remove doubles
|
||||
for (int i = 1; i < msglen; i++) {
|
||||
if (data[i] == FRAME_START_CHAR_FROM_NIBE) {
|
||||
data = ArrayUtils.remove(data, i);
|
||||
msglen--;
|
||||
|
||||
// fix message len
|
||||
data[OFFSET_LEN]--;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new NibeHeatPumpException(
|
||||
"Checksum does not match. Checksum=" + (msgChecksum & 0xFF) + ", expected=" + (checksum & 0xFF));
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.protocol;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpProtocolContext} define interface for Nibe communication protocol context.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public interface NibeHeatPumpProtocolContext {
|
||||
ByteBuffer buffer();
|
||||
|
||||
ByteBuffer msg();
|
||||
|
||||
NibeHeatPumpProtocolStates state();
|
||||
|
||||
void state(NibeHeatPumpProtocolStates state);
|
||||
|
||||
void sendAck();
|
||||
|
||||
void sendNak();
|
||||
|
||||
void sendWriteMsg();
|
||||
|
||||
void sendReadMsg();
|
||||
|
||||
void msgReceived(byte[] data);
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.protocol;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpProtocolDefaultContext} implements default Nibe protocol context.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpProtocolDefaultContext implements NibeHeatPumpProtocolContext {
|
||||
private NibeHeatPumpProtocolStates state = NibeHeatPumpProtocolStates.WAIT_START;
|
||||
private final ByteBuffer buffer = ByteBuffer.allocate(1000);
|
||||
private final ByteBuffer msg = ByteBuffer.allocate(100);
|
||||
|
||||
@Override
|
||||
public NibeHeatPumpProtocolStates state() {
|
||||
return this.state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void state(NibeHeatPumpProtocolStates state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ByteBuffer buffer() {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ByteBuffer msg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendAck() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendNak() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void msgReceived(byte[] data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendWriteMsg() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendReadMsg() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.protocol;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpProtocolState} define interface for Nibe protocol state machine.
|
||||
*
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public interface NibeHeatPumpProtocolState {
|
||||
/**
|
||||
* @return true to keep processing, false to read more data.
|
||||
*/
|
||||
boolean process(NibeHeatPumpProtocolContext context);
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.protocol;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* The {@link NibeHeatPumpProtocolStates} implements Nibe heat pump protocol state machine states.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public enum NibeHeatPumpProtocolStates implements NibeHeatPumpProtocolState {
|
||||
|
||||
WAIT_START {
|
||||
@Override
|
||||
public boolean process(NibeHeatPumpProtocolContext context) {
|
||||
if (context.buffer().hasRemaining()) {
|
||||
byte b = context.buffer().get();
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
LOGGER.trace("Received byte: {}", String.format("%02X", b));
|
||||
}
|
||||
if (b == NibeHeatPumpProtocol.FRAME_START_CHAR_FROM_NIBE) {
|
||||
LOGGER.trace("Frame start found");
|
||||
context.msg().clear();
|
||||
context.msg().put(b);
|
||||
context.state(WAIT_DATA);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},
|
||||
WAIT_DATA {
|
||||
@Override
|
||||
public boolean process(NibeHeatPumpProtocolContext context) {
|
||||
if (context.buffer().hasRemaining()) {
|
||||
if (context.msg().position() >= 100) {
|
||||
LOGGER.trace("Too long message received, rewait start char");
|
||||
context.state(WAIT_START);
|
||||
} else {
|
||||
byte b = context.buffer().get();
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
LOGGER.trace("Received byte: {}", String.format("%02X", b));
|
||||
}
|
||||
context.msg().put(b);
|
||||
|
||||
try {
|
||||
msgStatus status = checkNibeMessage(context.msg().asReadOnlyBuffer());
|
||||
switch (status) {
|
||||
case INVALID:
|
||||
context.state(WAIT_START);
|
||||
break;
|
||||
case VALID:
|
||||
context.state(OK_MESSAGE_RECEIVED);
|
||||
break;
|
||||
case VALID_BUT_NOT_READY:
|
||||
break;
|
||||
}
|
||||
} catch (NibeHeatPumpException e) {
|
||||
LOGGER.trace("Error occured during parsing message: {}", e.getMessage());
|
||||
context.state(CHECKSUM_FAILURE);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},
|
||||
OK_MESSAGE_RECEIVED {
|
||||
@Override
|
||||
public boolean process(NibeHeatPumpProtocolContext context) {
|
||||
context.msg().flip();
|
||||
byte[] data = new byte[context.msg().remaining()];
|
||||
context.msg().get(data, 0, data.length);
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
LOGGER.trace("Received data (len={}): {}", data.length, HexUtils.bytesToHex(data));
|
||||
}
|
||||
if (NibeHeatPumpProtocol.isModbus40ReadTokenPdu(data)) {
|
||||
context.state(READ_TOKEN_RECEIVED);
|
||||
} else if (NibeHeatPumpProtocol.isModbus40WriteTokenPdu(data)) {
|
||||
context.state(WRITE_TOKEN_RECEIVED);
|
||||
} else {
|
||||
context.sendAck();
|
||||
context.msgReceived(data);
|
||||
context.state(WAIT_START);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
WRITE_TOKEN_RECEIVED {
|
||||
@Override
|
||||
public boolean process(NibeHeatPumpProtocolContext context) {
|
||||
LOGGER.trace("Write token received");
|
||||
context.sendWriteMsg();
|
||||
context.state(WAIT_START);
|
||||
return true;
|
||||
}
|
||||
},
|
||||
READ_TOKEN_RECEIVED {
|
||||
@Override
|
||||
public boolean process(NibeHeatPumpProtocolContext context) {
|
||||
LOGGER.trace("Read token received");
|
||||
context.sendReadMsg();
|
||||
context.state(WAIT_START);
|
||||
return true;
|
||||
}
|
||||
},
|
||||
CHECKSUM_FAILURE {
|
||||
@Override
|
||||
public boolean process(NibeHeatPumpProtocolContext context) {
|
||||
LOGGER.trace("CRC failure");
|
||||
context.sendNak();
|
||||
context.state(WAIT_START);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
private enum msgStatus {
|
||||
VALID,
|
||||
VALID_BUT_NOT_READY,
|
||||
INVALID
|
||||
}
|
||||
|
||||
/*
|
||||
* Throws NibeHeatPumpException when checksum fails
|
||||
*/
|
||||
private static msgStatus checkNibeMessage(ByteBuffer byteBuffer) throws NibeHeatPumpException {
|
||||
byteBuffer.flip();
|
||||
int len = byteBuffer.remaining();
|
||||
|
||||
if (len >= 1) {
|
||||
if (byteBuffer.get(0) != NibeHeatPumpProtocol.FRAME_START_CHAR_FROM_NIBE) {
|
||||
return msgStatus.INVALID;
|
||||
}
|
||||
|
||||
if (len >= 2) {
|
||||
if (!(byteBuffer.get(1) == 0x00)) {
|
||||
return msgStatus.INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
if (len >= 6) {
|
||||
int datalen = byteBuffer.get(NibeHeatPumpProtocol.OFFSET_LEN);
|
||||
|
||||
// check if all bytes received
|
||||
if (len < datalen + 6) {
|
||||
return msgStatus.VALID_BUT_NOT_READY;
|
||||
}
|
||||
|
||||
// calculate XOR checksum
|
||||
byte calcChecksum = 0;
|
||||
for (int i = 2; i < (datalen + 5); i++) {
|
||||
calcChecksum ^= byteBuffer.get(i);
|
||||
}
|
||||
|
||||
byte msgChecksum = byteBuffer.get(datalen + 5);
|
||||
|
||||
if (calcChecksum != msgChecksum) {
|
||||
// if checksum is 0x5C (start character), heat pump seems to
|
||||
// send 0xC5 checksum
|
||||
if (calcChecksum != 0x5C && msgChecksum != 0xC5) {
|
||||
throw new NibeHeatPumpException(String.format(
|
||||
"Checksum failure, expected checksum 0x%02X was 0x%02X", msgChecksum, calcChecksum));
|
||||
}
|
||||
}
|
||||
|
||||
return msgStatus.VALID;
|
||||
}
|
||||
}
|
||||
|
||||
return msgStatus.VALID_BUT_NOT_READY;
|
||||
}
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(NibeHeatPumpProtocolStates.class);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<binding:binding id="nibeheatpump" 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>NibeHeatPump Binding</name>
|
||||
<description>This is the binding for Nibe heat pumps.</description>
|
||||
<author>Pauli Anttila</author>
|
||||
|
||||
</binding:binding>
|
||||
@@ -0,0 +1,760 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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">
|
||||
|
||||
<channel-group-type id="f1x45-sensor-group-channels">
|
||||
<label>Sensors</label>
|
||||
<channels>
|
||||
<channel id="40004" typeId="f1x45-40004"/>
|
||||
<channel id="40005" typeId="f1x45-40005"/>
|
||||
<channel id="40006" typeId="f1x45-40006"/>
|
||||
<channel id="40007" typeId="f1x45-40007"/>
|
||||
<channel id="40008" typeId="f1x45-40008"/>
|
||||
<channel id="40012" typeId="f1x45-40012"/>
|
||||
<channel id="40013" typeId="f1x45-40013"/>
|
||||
<channel id="40014" typeId="f1x45-40014"/>
|
||||
<channel id="40015" typeId="f1x45-40015"/>
|
||||
<channel id="40016" typeId="f1x45-40016"/>
|
||||
<channel id="40017" typeId="f1x45-40017"/>
|
||||
<channel id="40018" typeId="f1x45-40018"/>
|
||||
<channel id="40019" typeId="f1x45-40019"/>
|
||||
<channel id="40022" typeId="f1x45-40022"/>
|
||||
<channel id="40025" typeId="f1x45-40025"/>
|
||||
<channel id="40026" typeId="f1x45-40026"/>
|
||||
<channel id="40028" typeId="f1x45-40028"/>
|
||||
<channel id="40029" typeId="f1x45-40029"/>
|
||||
<channel id="40030" typeId="f1x45-40030"/>
|
||||
<channel id="40031" typeId="f1x45-40031"/>
|
||||
<channel id="40032" typeId="f1x45-40032"/>
|
||||
<channel id="40033" typeId="f1x45-40033"/>
|
||||
<channel id="40042" typeId="f1x45-40042"/>
|
||||
<channel id="40043" typeId="f1x45-40043"/>
|
||||
<channel id="40044" typeId="f1x45-40044"/>
|
||||
<channel id="40045" typeId="f1x45-40045"/>
|
||||
<channel id="40046" typeId="f1x45-40046"/>
|
||||
<channel id="40054" typeId="f1x45-40054"/>
|
||||
<channel id="40067" typeId="f1x45-40067"/>
|
||||
<channel id="40070" typeId="f1x45-40070"/>
|
||||
<channel id="40071" typeId="f1x45-40071"/>
|
||||
<channel id="40072" typeId="f1x45-40072"/>
|
||||
<channel id="40074" typeId="f1x45-40074"/>
|
||||
<channel id="40079" typeId="f1x45-40079"/>
|
||||
<channel id="40081" typeId="f1x45-40081"/>
|
||||
<channel id="40083" typeId="f1x45-40083"/>
|
||||
<channel id="40106" typeId="f1x45-40106"/>
|
||||
<channel id="40107" typeId="f1x45-40107"/>
|
||||
<channel id="40108" typeId="f1x45-40108"/>
|
||||
<channel id="40109" typeId="f1x45-40109"/>
|
||||
<channel id="40110" typeId="f1x45-40110"/>
|
||||
<channel id="40111" typeId="f1x45-40111"/>
|
||||
<channel id="40112" typeId="f1x45-40112"/>
|
||||
<channel id="40113" typeId="f1x45-40113"/>
|
||||
<channel id="40114" typeId="f1x45-40114"/>
|
||||
<channel id="40115" typeId="f1x45-40115"/>
|
||||
<channel id="40116" typeId="f1x45-40116"/>
|
||||
<channel id="40117" typeId="f1x45-40117"/>
|
||||
<channel id="40118" typeId="f1x45-40118"/>
|
||||
<channel id="40127" typeId="f1x45-40127"/>
|
||||
<channel id="40128" typeId="f1x45-40128"/>
|
||||
<channel id="40129" typeId="f1x45-40129"/>
|
||||
<channel id="40155" typeId="f1x45-40155"/>
|
||||
<channel id="40156" typeId="f1x45-40156"/>
|
||||
<channel id="43001" typeId="f1x45-43001"/>
|
||||
<channel id="43006" typeId="f1x45-43006"/>
|
||||
<channel id="43007" typeId="f1x45-43007"/>
|
||||
<channel id="43008" typeId="f1x45-43008"/>
|
||||
<channel id="43009" typeId="f1x45-43009"/>
|
||||
<channel id="43013" typeId="f1x45-43013"/>
|
||||
<channel id="43024" typeId="f1x45-43024"/>
|
||||
<channel id="43081" typeId="f1x45-43081"/>
|
||||
<channel id="43084" typeId="f1x45-43084"/>
|
||||
<channel id="43086" typeId="f1x45-43086"/>
|
||||
<channel id="43091" typeId="f1x45-43091"/>
|
||||
<channel id="43097" typeId="f1x45-43097"/>
|
||||
<channel id="43103" typeId="f1x45-43103"/>
|
||||
<channel id="43108" typeId="f1x45-43108"/>
|
||||
<channel id="43152" typeId="f1x45-43152"/>
|
||||
<channel id="43158" typeId="f1x45-43158"/>
|
||||
<channel id="43159" typeId="f1x45-43159"/>
|
||||
<channel id="43160" typeId="f1x45-43160"/>
|
||||
<channel id="43161" typeId="f1x45-43161"/>
|
||||
<channel id="43163" typeId="f1x45-43163"/>
|
||||
<channel id="43164" typeId="f1x45-43164"/>
|
||||
<channel id="43171" typeId="f1x45-43171"/>
|
||||
<channel id="43189" typeId="f1x45-43189"/>
|
||||
<channel id="43230" typeId="f1x45-43230"/>
|
||||
<channel id="43239" typeId="f1x45-43239"/>
|
||||
<channel id="43395" typeId="f1x45-43395"/>
|
||||
<channel id="43416" typeId="f1x45-43416"/>
|
||||
<channel id="43420" typeId="f1x45-43420"/>
|
||||
<channel id="43424" typeId="f1x45-43424"/>
|
||||
<channel id="43427" typeId="f1x45-43427"/>
|
||||
<channel id="43431" typeId="f1x45-43431"/>
|
||||
<channel id="43433" typeId="f1x45-43433"/>
|
||||
<channel id="43435" typeId="f1x45-43435"/>
|
||||
<channel id="43437" typeId="f1x45-43437"/>
|
||||
<channel id="43439" typeId="f1x45-43439"/>
|
||||
<channel id="43473" typeId="f1x45-43473"/>
|
||||
<channel id="43474" typeId="f1x45-43474"/>
|
||||
<channel id="43475" typeId="f1x45-43475"/>
|
||||
<channel id="43484" typeId="f1x45-43484"/>
|
||||
<channel id="43485" typeId="f1x45-43485"/>
|
||||
<channel id="43486" typeId="f1x45-43486"/>
|
||||
<channel id="43487" typeId="f1x45-43487"/>
|
||||
<channel id="43514" typeId="f1x45-43514"/>
|
||||
<channel id="43516" typeId="f1x45-43516"/>
|
||||
<channel id="43560" typeId="f1x45-43560"/>
|
||||
<channel id="43561" typeId="f1x45-43561"/>
|
||||
<channel id="43563" typeId="f1x45-43563"/>
|
||||
<channel id="43564" typeId="f1x45-43564"/>
|
||||
<channel id="43577" typeId="f1x45-43577"/>
|
||||
<channel id="43580" typeId="f1x45-43580"/>
|
||||
<channel id="43598" typeId="f1x45-43598"/>
|
||||
<channel id="43599" typeId="f1x45-43599"/>
|
||||
<channel id="43600" typeId="f1x45-43600"/>
|
||||
<channel id="43601" typeId="f1x45-43601"/>
|
||||
<channel id="43602" typeId="f1x45-43602"/>
|
||||
<channel id="43603" typeId="f1x45-43603"/>
|
||||
<channel id="43604" typeId="f1x45-43604"/>
|
||||
<channel id="43605" typeId="f1x45-43605"/>
|
||||
<channel id="43606" typeId="f1x45-43606"/>
|
||||
<channel id="43607" typeId="f1x45-43607"/>
|
||||
<channel id="43608" typeId="f1x45-43608"/>
|
||||
<channel id="43609" typeId="f1x45-43609"/>
|
||||
<channel id="43610" typeId="f1x45-43610"/>
|
||||
<channel id="43611" typeId="f1x45-43611"/>
|
||||
<channel id="43612" typeId="f1x45-43612"/>
|
||||
<channel id="43613" typeId="f1x45-43613"/>
|
||||
<channel id="43614" typeId="f1x45-43614"/>
|
||||
<channel id="43616" typeId="f1x45-43616"/>
|
||||
<channel id="43618" typeId="f1x45-43618"/>
|
||||
<channel id="43620" typeId="f1x45-43620"/>
|
||||
<channel id="43621" typeId="f1x45-43621"/>
|
||||
<channel id="43622" typeId="f1x45-43622"/>
|
||||
<channel id="43623" typeId="f1x45-43623"/>
|
||||
<channel id="43624" typeId="f1x45-43624"/>
|
||||
<channel id="43625" typeId="f1x45-43625"/>
|
||||
<channel id="43626" typeId="f1x45-43626"/>
|
||||
<channel id="43627" typeId="f1x45-43627"/>
|
||||
<channel id="43628" typeId="f1x45-43628"/>
|
||||
<channel id="43629" typeId="f1x45-43629"/>
|
||||
<channel id="43630" typeId="f1x45-43630"/>
|
||||
<channel id="43631" typeId="f1x45-43631"/>
|
||||
<channel id="43632" typeId="f1x45-43632"/>
|
||||
<channel id="43633" typeId="f1x45-43633"/>
|
||||
<channel id="43634" typeId="f1x45-43634"/>
|
||||
<channel id="43635" typeId="f1x45-43635"/>
|
||||
<channel id="43637" typeId="f1x45-43637"/>
|
||||
<channel id="43639" typeId="f1x45-43639"/>
|
||||
<channel id="43641" typeId="f1x45-43641"/>
|
||||
<channel id="43642" typeId="f1x45-43642"/>
|
||||
<channel id="43660" typeId="f1x45-43660"/>
|
||||
<channel id="43661" typeId="f1x45-43661"/>
|
||||
<channel id="43662" typeId="f1x45-43662"/>
|
||||
<channel id="43663" typeId="f1x45-43663"/>
|
||||
<channel id="43664" typeId="f1x45-43664"/>
|
||||
<channel id="43665" typeId="f1x45-43665"/>
|
||||
<channel id="43666" typeId="f1x45-43666"/>
|
||||
<channel id="43667" typeId="f1x45-43667"/>
|
||||
<channel id="43668" typeId="f1x45-43668"/>
|
||||
<channel id="43669" typeId="f1x45-43669"/>
|
||||
<channel id="43670" typeId="f1x45-43670"/>
|
||||
<channel id="43671" typeId="f1x45-43671"/>
|
||||
<channel id="43672" typeId="f1x45-43672"/>
|
||||
<channel id="43673" typeId="f1x45-43673"/>
|
||||
<channel id="43674" typeId="f1x45-43674"/>
|
||||
<channel id="43675" typeId="f1x45-43675"/>
|
||||
<channel id="43676" typeId="f1x45-43676"/>
|
||||
<channel id="43678" typeId="f1x45-43678"/>
|
||||
<channel id="43680" typeId="f1x45-43680"/>
|
||||
<channel id="43682" typeId="f1x45-43682"/>
|
||||
<channel id="43683" typeId="f1x45-43683"/>
|
||||
<channel id="43684" typeId="f1x45-43684"/>
|
||||
<channel id="43685" typeId="f1x45-43685"/>
|
||||
<channel id="43686" typeId="f1x45-43686"/>
|
||||
<channel id="43687" typeId="f1x45-43687"/>
|
||||
<channel id="43688" typeId="f1x45-43688"/>
|
||||
<channel id="43689" typeId="f1x45-43689"/>
|
||||
<channel id="43690" typeId="f1x45-43690"/>
|
||||
<channel id="43691" typeId="f1x45-43691"/>
|
||||
<channel id="43692" typeId="f1x45-43692"/>
|
||||
<channel id="43693" typeId="f1x45-43693"/>
|
||||
<channel id="43694" typeId="f1x45-43694"/>
|
||||
<channel id="43695" typeId="f1x45-43695"/>
|
||||
<channel id="43696" typeId="f1x45-43696"/>
|
||||
<channel id="43697" typeId="f1x45-43697"/>
|
||||
<channel id="43699" typeId="f1x45-43699"/>
|
||||
<channel id="43701" typeId="f1x45-43701"/>
|
||||
<channel id="43703" typeId="f1x45-43703"/>
|
||||
<channel id="43704" typeId="f1x45-43704"/>
|
||||
<channel id="43722" typeId="f1x45-43722"/>
|
||||
<channel id="43723" typeId="f1x45-43723"/>
|
||||
<channel id="43724" typeId="f1x45-43724"/>
|
||||
<channel id="43725" typeId="f1x45-43725"/>
|
||||
<channel id="43726" typeId="f1x45-43726"/>
|
||||
<channel id="43727" typeId="f1x45-43727"/>
|
||||
<channel id="43728" typeId="f1x45-43728"/>
|
||||
<channel id="43729" typeId="f1x45-43729"/>
|
||||
<channel id="43730" typeId="f1x45-43730"/>
|
||||
<channel id="43731" typeId="f1x45-43731"/>
|
||||
<channel id="43732" typeId="f1x45-43732"/>
|
||||
<channel id="43733" typeId="f1x45-43733"/>
|
||||
<channel id="43734" typeId="f1x45-43734"/>
|
||||
<channel id="43735" typeId="f1x45-43735"/>
|
||||
<channel id="43736" typeId="f1x45-43736"/>
|
||||
<channel id="43737" typeId="f1x45-43737"/>
|
||||
<channel id="43738" typeId="f1x45-43738"/>
|
||||
<channel id="43740" typeId="f1x45-43740"/>
|
||||
<channel id="43742" typeId="f1x45-43742"/>
|
||||
<channel id="43744" typeId="f1x45-43744"/>
|
||||
<channel id="43745" typeId="f1x45-43745"/>
|
||||
<channel id="43746" typeId="f1x45-43746"/>
|
||||
<channel id="43747" typeId="f1x45-43747"/>
|
||||
<channel id="43748" typeId="f1x45-43748"/>
|
||||
<channel id="43749" typeId="f1x45-43749"/>
|
||||
<channel id="43750" typeId="f1x45-43750"/>
|
||||
<channel id="43751" typeId="f1x45-43751"/>
|
||||
<channel id="43752" typeId="f1x45-43752"/>
|
||||
<channel id="43753" typeId="f1x45-43753"/>
|
||||
<channel id="43754" typeId="f1x45-43754"/>
|
||||
<channel id="43755" typeId="f1x45-43755"/>
|
||||
<channel id="43756" typeId="f1x45-43756"/>
|
||||
<channel id="43757" typeId="f1x45-43757"/>
|
||||
<channel id="43758" typeId="f1x45-43758"/>
|
||||
<channel id="43759" typeId="f1x45-43759"/>
|
||||
<channel id="43761" typeId="f1x45-43761"/>
|
||||
<channel id="43763" typeId="f1x45-43763"/>
|
||||
<channel id="43765" typeId="f1x45-43765"/>
|
||||
<channel id="43766" typeId="f1x45-43766"/>
|
||||
<channel id="43784" typeId="f1x45-43784"/>
|
||||
<channel id="43785" typeId="f1x45-43785"/>
|
||||
<channel id="43786" typeId="f1x45-43786"/>
|
||||
<channel id="43787" typeId="f1x45-43787"/>
|
||||
<channel id="43788" typeId="f1x45-43788"/>
|
||||
<channel id="43789" typeId="f1x45-43789"/>
|
||||
<channel id="43790" typeId="f1x45-43790"/>
|
||||
<channel id="43791" typeId="f1x45-43791"/>
|
||||
<channel id="43792" typeId="f1x45-43792"/>
|
||||
<channel id="43793" typeId="f1x45-43793"/>
|
||||
<channel id="43794" typeId="f1x45-43794"/>
|
||||
<channel id="43795" typeId="f1x45-43795"/>
|
||||
<channel id="43796" typeId="f1x45-43796"/>
|
||||
<channel id="43797" typeId="f1x45-43797"/>
|
||||
<channel id="43798" typeId="f1x45-43798"/>
|
||||
<channel id="43799" typeId="f1x45-43799"/>
|
||||
<channel id="43800" typeId="f1x45-43800"/>
|
||||
<channel id="43802" typeId="f1x45-43802"/>
|
||||
<channel id="43804" typeId="f1x45-43804"/>
|
||||
<channel id="43806" typeId="f1x45-43806"/>
|
||||
<channel id="43807" typeId="f1x45-43807"/>
|
||||
<channel id="43808" typeId="f1x45-43808"/>
|
||||
<channel id="43809" typeId="f1x45-43809"/>
|
||||
<channel id="43810" typeId="f1x45-43810"/>
|
||||
<channel id="43811" typeId="f1x45-43811"/>
|
||||
<channel id="43812" typeId="f1x45-43812"/>
|
||||
<channel id="43813" typeId="f1x45-43813"/>
|
||||
<channel id="43814" typeId="f1x45-43814"/>
|
||||
<channel id="43815" typeId="f1x45-43815"/>
|
||||
<channel id="43816" typeId="f1x45-43816"/>
|
||||
<channel id="43817" typeId="f1x45-43817"/>
|
||||
<channel id="43818" typeId="f1x45-43818"/>
|
||||
<channel id="43819" typeId="f1x45-43819"/>
|
||||
<channel id="43820" typeId="f1x45-43820"/>
|
||||
<channel id="43821" typeId="f1x45-43821"/>
|
||||
<channel id="43823" typeId="f1x45-43823"/>
|
||||
<channel id="43825" typeId="f1x45-43825"/>
|
||||
<channel id="43827" typeId="f1x45-43827"/>
|
||||
<channel id="43828" typeId="f1x45-43828"/>
|
||||
<channel id="43846" typeId="f1x45-43846"/>
|
||||
<channel id="43847" typeId="f1x45-43847"/>
|
||||
<channel id="43848" typeId="f1x45-43848"/>
|
||||
<channel id="43849" typeId="f1x45-43849"/>
|
||||
<channel id="43850" typeId="f1x45-43850"/>
|
||||
<channel id="43851" typeId="f1x45-43851"/>
|
||||
<channel id="43852" typeId="f1x45-43852"/>
|
||||
<channel id="43853" typeId="f1x45-43853"/>
|
||||
<channel id="43854" typeId="f1x45-43854"/>
|
||||
<channel id="43855" typeId="f1x45-43855"/>
|
||||
<channel id="43856" typeId="f1x45-43856"/>
|
||||
<channel id="43857" typeId="f1x45-43857"/>
|
||||
<channel id="43858" typeId="f1x45-43858"/>
|
||||
<channel id="43859" typeId="f1x45-43859"/>
|
||||
<channel id="43860" typeId="f1x45-43860"/>
|
||||
<channel id="43861" typeId="f1x45-43861"/>
|
||||
<channel id="43862" typeId="f1x45-43862"/>
|
||||
<channel id="43864" typeId="f1x45-43864"/>
|
||||
<channel id="43866" typeId="f1x45-43866"/>
|
||||
<channel id="43868" typeId="f1x45-43868"/>
|
||||
<channel id="43869" typeId="f1x45-43869"/>
|
||||
<channel id="43870" typeId="f1x45-43870"/>
|
||||
<channel id="43871" typeId="f1x45-43871"/>
|
||||
<channel id="43872" typeId="f1x45-43872"/>
|
||||
<channel id="43873" typeId="f1x45-43873"/>
|
||||
<channel id="43874" typeId="f1x45-43874"/>
|
||||
<channel id="43875" typeId="f1x45-43875"/>
|
||||
<channel id="43876" typeId="f1x45-43876"/>
|
||||
<channel id="43877" typeId="f1x45-43877"/>
|
||||
<channel id="43878" typeId="f1x45-43878"/>
|
||||
<channel id="43879" typeId="f1x45-43879"/>
|
||||
<channel id="43880" typeId="f1x45-43880"/>
|
||||
<channel id="43881" typeId="f1x45-43881"/>
|
||||
<channel id="43882" typeId="f1x45-43882"/>
|
||||
<channel id="43883" typeId="f1x45-43883"/>
|
||||
<channel id="43885" typeId="f1x45-43885"/>
|
||||
<channel id="43887" typeId="f1x45-43887"/>
|
||||
<channel id="43889" typeId="f1x45-43889"/>
|
||||
<channel id="43890" typeId="f1x45-43890"/>
|
||||
<channel id="43908" typeId="f1x45-43908"/>
|
||||
<channel id="43909" typeId="f1x45-43909"/>
|
||||
<channel id="43910" typeId="f1x45-43910"/>
|
||||
<channel id="43911" typeId="f1x45-43911"/>
|
||||
<channel id="43912" typeId="f1x45-43912"/>
|
||||
<channel id="43913" typeId="f1x45-43913"/>
|
||||
<channel id="43914" typeId="f1x45-43914"/>
|
||||
<channel id="43915" typeId="f1x45-43915"/>
|
||||
<channel id="43916" typeId="f1x45-43916"/>
|
||||
<channel id="43917" typeId="f1x45-43917"/>
|
||||
<channel id="43918" typeId="f1x45-43918"/>
|
||||
<channel id="43919" typeId="f1x45-43919"/>
|
||||
<channel id="43920" typeId="f1x45-43920"/>
|
||||
<channel id="43921" typeId="f1x45-43921"/>
|
||||
<channel id="43922" typeId="f1x45-43922"/>
|
||||
<channel id="43923" typeId="f1x45-43923"/>
|
||||
<channel id="43924" typeId="f1x45-43924"/>
|
||||
<channel id="43926" typeId="f1x45-43926"/>
|
||||
<channel id="43928" typeId="f1x45-43928"/>
|
||||
<channel id="43930" typeId="f1x45-43930"/>
|
||||
<channel id="43931" typeId="f1x45-43931"/>
|
||||
<channel id="43932" typeId="f1x45-43932"/>
|
||||
<channel id="43933" typeId="f1x45-43933"/>
|
||||
<channel id="43934" typeId="f1x45-43934"/>
|
||||
<channel id="43935" typeId="f1x45-43935"/>
|
||||
<channel id="43936" typeId="f1x45-43936"/>
|
||||
<channel id="43937" typeId="f1x45-43937"/>
|
||||
<channel id="43938" typeId="f1x45-43938"/>
|
||||
<channel id="43939" typeId="f1x45-43939"/>
|
||||
<channel id="43940" typeId="f1x45-43940"/>
|
||||
<channel id="43941" typeId="f1x45-43941"/>
|
||||
<channel id="43942" typeId="f1x45-43942"/>
|
||||
<channel id="43943" typeId="f1x45-43943"/>
|
||||
<channel id="43944" typeId="f1x45-43944"/>
|
||||
<channel id="43945" typeId="f1x45-43945"/>
|
||||
<channel id="43947" typeId="f1x45-43947"/>
|
||||
<channel id="43949" typeId="f1x45-43949"/>
|
||||
<channel id="43951" typeId="f1x45-43951"/>
|
||||
<channel id="43952" typeId="f1x45-43952"/>
|
||||
<channel id="43970" typeId="f1x45-43970"/>
|
||||
<channel id="43971" typeId="f1x45-43971"/>
|
||||
<channel id="43972" typeId="f1x45-43972"/>
|
||||
<channel id="43973" typeId="f1x45-43973"/>
|
||||
<channel id="43974" typeId="f1x45-43974"/>
|
||||
<channel id="43975" typeId="f1x45-43975"/>
|
||||
<channel id="43976" typeId="f1x45-43976"/>
|
||||
<channel id="43977" typeId="f1x45-43977"/>
|
||||
<channel id="43978" typeId="f1x45-43978"/>
|
||||
<channel id="43979" typeId="f1x45-43979"/>
|
||||
<channel id="43980" typeId="f1x45-43980"/>
|
||||
<channel id="43981" typeId="f1x45-43981"/>
|
||||
<channel id="43982" typeId="f1x45-43982"/>
|
||||
<channel id="43983" typeId="f1x45-43983"/>
|
||||
<channel id="43984" typeId="f1x45-43984"/>
|
||||
<channel id="43985" typeId="f1x45-43985"/>
|
||||
<channel id="43986" typeId="f1x45-43986"/>
|
||||
<channel id="43988" typeId="f1x45-43988"/>
|
||||
<channel id="43990" typeId="f1x45-43990"/>
|
||||
<channel id="43992" typeId="f1x45-43992"/>
|
||||
<channel id="43993" typeId="f1x45-43993"/>
|
||||
<channel id="43994" typeId="f1x45-43994"/>
|
||||
<channel id="43995" typeId="f1x45-43995"/>
|
||||
<channel id="43996" typeId="f1x45-43996"/>
|
||||
<channel id="43997" typeId="f1x45-43997"/>
|
||||
<channel id="43998" typeId="f1x45-43998"/>
|
||||
<channel id="43999" typeId="f1x45-43999"/>
|
||||
<channel id="44000" typeId="f1x45-44000"/>
|
||||
<channel id="44001" typeId="f1x45-44001"/>
|
||||
<channel id="44002" typeId="f1x45-44002"/>
|
||||
<channel id="44003" typeId="f1x45-44003"/>
|
||||
<channel id="44004" typeId="f1x45-44004"/>
|
||||
<channel id="44005" typeId="f1x45-44005"/>
|
||||
<channel id="44006" typeId="f1x45-44006"/>
|
||||
<channel id="44007" typeId="f1x45-44007"/>
|
||||
<channel id="44009" typeId="f1x45-44009"/>
|
||||
<channel id="44011" typeId="f1x45-44011"/>
|
||||
<channel id="44013" typeId="f1x45-44013"/>
|
||||
<channel id="44014" typeId="f1x45-44014"/>
|
||||
<channel id="44032" typeId="f1x45-44032"/>
|
||||
<channel id="44033" typeId="f1x45-44033"/>
|
||||
<channel id="44034" typeId="f1x45-44034"/>
|
||||
<channel id="44035" typeId="f1x45-44035"/>
|
||||
<channel id="44036" typeId="f1x45-44036"/>
|
||||
<channel id="44037" typeId="f1x45-44037"/>
|
||||
<channel id="44038" typeId="f1x45-44038"/>
|
||||
<channel id="44039" typeId="f1x45-44039"/>
|
||||
<channel id="44040" typeId="f1x45-44040"/>
|
||||
<channel id="44041" typeId="f1x45-44041"/>
|
||||
<channel id="44042" typeId="f1x45-44042"/>
|
||||
<channel id="44043" typeId="f1x45-44043"/>
|
||||
<channel id="44044" typeId="f1x45-44044"/>
|
||||
<channel id="44045" typeId="f1x45-44045"/>
|
||||
<channel id="44046" typeId="f1x45-44046"/>
|
||||
<channel id="44047" typeId="f1x45-44047"/>
|
||||
<channel id="44048" typeId="f1x45-44048"/>
|
||||
<channel id="44050" typeId="f1x45-44050"/>
|
||||
<channel id="44052" typeId="f1x45-44052"/>
|
||||
<channel id="44054" typeId="f1x45-44054"/>
|
||||
<channel id="44055" typeId="f1x45-44055"/>
|
||||
<channel id="44056" typeId="f1x45-44056"/>
|
||||
<channel id="44057" typeId="f1x45-44057"/>
|
||||
<channel id="44058" typeId="f1x45-44058"/>
|
||||
<channel id="44059" typeId="f1x45-44059"/>
|
||||
<channel id="44060" typeId="f1x45-44060"/>
|
||||
<channel id="44061" typeId="f1x45-44061"/>
|
||||
<channel id="44062" typeId="f1x45-44062"/>
|
||||
<channel id="44063" typeId="f1x45-44063"/>
|
||||
<channel id="44064" typeId="f1x45-44064"/>
|
||||
<channel id="44065" typeId="f1x45-44065"/>
|
||||
<channel id="44066" typeId="f1x45-44066"/>
|
||||
<channel id="44067" typeId="f1x45-44067"/>
|
||||
<channel id="44068" typeId="f1x45-44068"/>
|
||||
<channel id="44069" typeId="f1x45-44069"/>
|
||||
<channel id="44071" typeId="f1x45-44071"/>
|
||||
<channel id="44073" typeId="f1x45-44073"/>
|
||||
<channel id="44075" typeId="f1x45-44075"/>
|
||||
<channel id="44138" typeId="f1x45-44138"/>
|
||||
<channel id="44139" typeId="f1x45-44139"/>
|
||||
<channel id="44151" typeId="f1x45-44151"/>
|
||||
<channel id="44152" typeId="f1x45-44152"/>
|
||||
<channel id="44164" typeId="f1x45-44164"/>
|
||||
<channel id="44165" typeId="f1x45-44165"/>
|
||||
<channel id="44177" typeId="f1x45-44177"/>
|
||||
<channel id="44178" typeId="f1x45-44178"/>
|
||||
<channel id="44190" typeId="f1x45-44190"/>
|
||||
<channel id="44191" typeId="f1x45-44191"/>
|
||||
<channel id="44203" typeId="f1x45-44203"/>
|
||||
<channel id="44204" typeId="f1x45-44204"/>
|
||||
<channel id="44216" typeId="f1x45-44216"/>
|
||||
<channel id="44217" typeId="f1x45-44217"/>
|
||||
<channel id="44229" typeId="f1x45-44229"/>
|
||||
<channel id="44230" typeId="f1x45-44230"/>
|
||||
<channel id="44242" typeId="f1x45-44242"/>
|
||||
<channel id="44243" typeId="f1x45-44243"/>
|
||||
<channel id="44267" typeId="f1x45-44267"/>
|
||||
<channel id="44268" typeId="f1x45-44268"/>
|
||||
<channel id="44269" typeId="f1x45-44269"/>
|
||||
<channel id="44270" typeId="f1x45-44270"/>
|
||||
<channel id="44276" typeId="f1x45-44276"/>
|
||||
<channel id="44277" typeId="f1x45-44277"/>
|
||||
<channel id="44278" typeId="f1x45-44278"/>
|
||||
<channel id="44282" typeId="f1x45-44282"/>
|
||||
<channel id="44283" typeId="f1x45-44283"/>
|
||||
<channel id="44284" typeId="f1x45-44284"/>
|
||||
<channel id="44285" typeId="f1x45-44285"/>
|
||||
<channel id="44298" typeId="f1x45-44298"/>
|
||||
<channel id="44300" typeId="f1x45-44300"/>
|
||||
<channel id="44302" typeId="f1x45-44302"/>
|
||||
<channel id="44304" typeId="f1x45-44304"/>
|
||||
<channel id="44306" typeId="f1x45-44306"/>
|
||||
<channel id="44308" typeId="f1x45-44308"/>
|
||||
<channel id="44320" typeId="f1x45-44320"/>
|
||||
<channel id="44331" typeId="f1x45-44331"/>
|
||||
<channel id="44380" typeId="f1x45-44380"/>
|
||||
<channel id="44410" typeId="f1x45-44410"/>
|
||||
<channel id="44411" typeId="f1x45-44411"/>
|
||||
<channel id="44412" typeId="f1x45-44412"/>
|
||||
<channel id="44413" typeId="f1x45-44413"/>
|
||||
<channel id="44416" typeId="f1x45-44416"/>
|
||||
<channel id="44417" typeId="f1x45-44417"/>
|
||||
<channel id="44418" typeId="f1x45-44418"/>
|
||||
<channel id="44419" typeId="f1x45-44419"/>
|
||||
<channel id="44422" typeId="f1x45-44422"/>
|
||||
<channel id="44423" typeId="f1x45-44423"/>
|
||||
<channel id="44424" typeId="f1x45-44424"/>
|
||||
<channel id="44425" typeId="f1x45-44425"/>
|
||||
<channel id="44428" typeId="f1x45-44428"/>
|
||||
<channel id="44429" typeId="f1x45-44429"/>
|
||||
<channel id="44430" typeId="f1x45-44430"/>
|
||||
<channel id="44431" typeId="f1x45-44431"/>
|
||||
<channel id="44434" typeId="f1x45-44434"/>
|
||||
<channel id="44435" typeId="f1x45-44435"/>
|
||||
<channel id="44436" typeId="f1x45-44436"/>
|
||||
<channel id="44437" typeId="f1x45-44437"/>
|
||||
<channel id="44440" typeId="f1x45-44440"/>
|
||||
<channel id="44441" typeId="f1x45-44441"/>
|
||||
<channel id="44442" typeId="f1x45-44442"/>
|
||||
<channel id="44443" typeId="f1x45-44443"/>
|
||||
<channel id="44446" typeId="f1x45-44446"/>
|
||||
<channel id="44447" typeId="f1x45-44447"/>
|
||||
<channel id="44448" typeId="f1x45-44448"/>
|
||||
<channel id="44449" typeId="f1x45-44449"/>
|
||||
<channel id="44452" typeId="f1x45-44452"/>
|
||||
<channel id="44453" typeId="f1x45-44453"/>
|
||||
<channel id="44454" typeId="f1x45-44454"/>
|
||||
<channel id="44455" typeId="f1x45-44455"/>
|
||||
<channel id="44487" typeId="f1x45-44487"/>
|
||||
<channel id="44744" typeId="f1x45-44744"/>
|
||||
<channel id="44745" typeId="f1x45-44745"/>
|
||||
<channel id="44746" typeId="f1x45-44746"/>
|
||||
<channel id="44748" typeId="f1x45-44748"/>
|
||||
<channel id="44749" typeId="f1x45-44749"/>
|
||||
<channel id="44753" typeId="f1x45-44753"/>
|
||||
<channel id="44754" typeId="f1x45-44754"/>
|
||||
<channel id="44756" typeId="f1x45-44756"/>
|
||||
<channel id="44874" typeId="f1x45-44874"/>
|
||||
<channel id="44878" typeId="f1x45-44878"/>
|
||||
<channel id="44879" typeId="f1x45-44879"/>
|
||||
<channel id="44910" typeId="f1x45-44910"/>
|
||||
<channel id="44911" typeId="f1x45-44911"/>
|
||||
<channel id="44912" typeId="f1x45-44912"/>
|
||||
<channel id="45001" typeId="f1x45-45001"/>
|
||||
<channel id="47291" typeId="f1x45-47291"/>
|
||||
<channel id="47325" typeId="f1x45-47325"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="f1x45-setting-group-channels">
|
||||
<label>Settings</label>
|
||||
<channels>
|
||||
<channel id="43005" typeId="f1x45-43005"/>
|
||||
<channel id="44266" typeId="f1x45-44266"/>
|
||||
<channel id="47004" typeId="f1x45-47004"/>
|
||||
<channel id="47005" typeId="f1x45-47005"/>
|
||||
<channel id="47006" typeId="f1x45-47006"/>
|
||||
<channel id="47007" typeId="f1x45-47007"/>
|
||||
<channel id="47008" typeId="f1x45-47008"/>
|
||||
<channel id="47009" typeId="f1x45-47009"/>
|
||||
<channel id="47010" typeId="f1x45-47010"/>
|
||||
<channel id="47011" typeId="f1x45-47011"/>
|
||||
<channel id="47012" typeId="f1x45-47012"/>
|
||||
<channel id="47013" typeId="f1x45-47013"/>
|
||||
<channel id="47014" typeId="f1x45-47014"/>
|
||||
<channel id="47015" typeId="f1x45-47015"/>
|
||||
<channel id="47016" typeId="f1x45-47016"/>
|
||||
<channel id="47017" typeId="f1x45-47017"/>
|
||||
<channel id="47018" typeId="f1x45-47018"/>
|
||||
<channel id="47019" typeId="f1x45-47019"/>
|
||||
<channel id="47020" typeId="f1x45-47020"/>
|
||||
<channel id="47021" typeId="f1x45-47021"/>
|
||||
<channel id="47022" typeId="f1x45-47022"/>
|
||||
<channel id="47023" typeId="f1x45-47023"/>
|
||||
<channel id="47024" typeId="f1x45-47024"/>
|
||||
<channel id="47025" typeId="f1x45-47025"/>
|
||||
<channel id="47026" typeId="f1x45-47026"/>
|
||||
<channel id="47027" typeId="f1x45-47027"/>
|
||||
<channel id="47028" typeId="f1x45-47028"/>
|
||||
<channel id="47029" typeId="f1x45-47029"/>
|
||||
<channel id="47030" typeId="f1x45-47030"/>
|
||||
<channel id="47031" typeId="f1x45-47031"/>
|
||||
<channel id="47032" typeId="f1x45-47032"/>
|
||||
<channel id="47033" typeId="f1x45-47033"/>
|
||||
<channel id="47034" typeId="f1x45-47034"/>
|
||||
<channel id="47035" typeId="f1x45-47035"/>
|
||||
<channel id="47036" typeId="f1x45-47036"/>
|
||||
<channel id="47041" typeId="f1x45-47041"/>
|
||||
<channel id="47043" typeId="f1x45-47043"/>
|
||||
<channel id="47044" typeId="f1x45-47044"/>
|
||||
<channel id="47045" typeId="f1x45-47045"/>
|
||||
<channel id="47046" typeId="f1x45-47046"/>
|
||||
<channel id="47047" typeId="f1x45-47047"/>
|
||||
<channel id="47048" typeId="f1x45-47048"/>
|
||||
<channel id="47049" typeId="f1x45-47049"/>
|
||||
<channel id="47050" typeId="f1x45-47050"/>
|
||||
<channel id="47051" typeId="f1x45-47051"/>
|
||||
<channel id="47054" typeId="f1x45-47054"/>
|
||||
<channel id="47055" typeId="f1x45-47055"/>
|
||||
<channel id="47131" typeId="f1x45-47131"/>
|
||||
<channel id="47134" typeId="f1x45-47134"/>
|
||||
<channel id="47135" typeId="f1x45-47135"/>
|
||||
<channel id="47136" typeId="f1x45-47136"/>
|
||||
<channel id="47137" typeId="f1x45-47137"/>
|
||||
<channel id="47138" typeId="f1x45-47138"/>
|
||||
<channel id="47139" typeId="f1x45-47139"/>
|
||||
<channel id="47206" typeId="f1x45-47206"/>
|
||||
<channel id="47207" typeId="f1x45-47207"/>
|
||||
<channel id="47208" typeId="f1x45-47208"/>
|
||||
<channel id="47209" typeId="f1x45-47209"/>
|
||||
<channel id="47210" typeId="f1x45-47210"/>
|
||||
<channel id="47212" typeId="f1x45-47212"/>
|
||||
<channel id="47214" typeId="f1x45-47214"/>
|
||||
<channel id="47261" typeId="f1x45-47261"/>
|
||||
<channel id="47262" typeId="f1x45-47262"/>
|
||||
<channel id="47263" typeId="f1x45-47263"/>
|
||||
<channel id="47264" typeId="f1x45-47264"/>
|
||||
<channel id="47265" typeId="f1x45-47265"/>
|
||||
<channel id="47271" typeId="f1x45-47271"/>
|
||||
<channel id="47272" typeId="f1x45-47272"/>
|
||||
<channel id="47273" typeId="f1x45-47273"/>
|
||||
<channel id="47274" typeId="f1x45-47274"/>
|
||||
<channel id="47275" typeId="f1x45-47275"/>
|
||||
<channel id="47276" typeId="f1x45-47276"/>
|
||||
<channel id="47277" typeId="f1x45-47277"/>
|
||||
<channel id="47278" typeId="f1x45-47278"/>
|
||||
<channel id="47279" typeId="f1x45-47279"/>
|
||||
<channel id="47280" typeId="f1x45-47280"/>
|
||||
<channel id="47281" typeId="f1x45-47281"/>
|
||||
<channel id="47282" typeId="f1x45-47282"/>
|
||||
<channel id="47283" typeId="f1x45-47283"/>
|
||||
<channel id="47284" typeId="f1x45-47284"/>
|
||||
<channel id="47285" typeId="f1x45-47285"/>
|
||||
<channel id="47286" typeId="f1x45-47286"/>
|
||||
<channel id="47287" typeId="f1x45-47287"/>
|
||||
<channel id="47288" typeId="f1x45-47288"/>
|
||||
<channel id="47289" typeId="f1x45-47289"/>
|
||||
<channel id="47290" typeId="f1x45-47290"/>
|
||||
<channel id="47302" typeId="f1x45-47302"/>
|
||||
<channel id="47303" typeId="f1x45-47303"/>
|
||||
<channel id="47304" typeId="f1x45-47304"/>
|
||||
<channel id="47305" typeId="f1x45-47305"/>
|
||||
<channel id="47306" typeId="f1x45-47306"/>
|
||||
<channel id="47307" typeId="f1x45-47307"/>
|
||||
<channel id="47308" typeId="f1x45-47308"/>
|
||||
<channel id="47309" typeId="f1x45-47309"/>
|
||||
<channel id="47310" typeId="f1x45-47310"/>
|
||||
<channel id="47312" typeId="f1x45-47312"/>
|
||||
<channel id="47313" typeId="f1x45-47313"/>
|
||||
<channel id="47317" typeId="f1x45-47317"/>
|
||||
<channel id="47318" typeId="f1x45-47318"/>
|
||||
<channel id="47319" typeId="f1x45-47319"/>
|
||||
<channel id="47320" typeId="f1x45-47320"/>
|
||||
<channel id="47321" typeId="f1x45-47321"/>
|
||||
<channel id="47322" typeId="f1x45-47322"/>
|
||||
<channel id="47323" typeId="f1x45-47323"/>
|
||||
<channel id="47324" typeId="f1x45-47324"/>
|
||||
<channel id="47326" typeId="f1x45-47326"/>
|
||||
<channel id="47327" typeId="f1x45-47327"/>
|
||||
<channel id="47329" typeId="f1x45-47329"/>
|
||||
<channel id="47330" typeId="f1x45-47330"/>
|
||||
<channel id="47335" typeId="f1x45-47335"/>
|
||||
<channel id="47336" typeId="f1x45-47336"/>
|
||||
<channel id="47337" typeId="f1x45-47337"/>
|
||||
<channel id="47338" typeId="f1x45-47338"/>
|
||||
<channel id="47339" typeId="f1x45-47339"/>
|
||||
<channel id="47340" typeId="f1x45-47340"/>
|
||||
<channel id="47341" typeId="f1x45-47341"/>
|
||||
<channel id="47342" typeId="f1x45-47342"/>
|
||||
<channel id="47343" typeId="f1x45-47343"/>
|
||||
<channel id="47352" typeId="f1x45-47352"/>
|
||||
<channel id="47365" typeId="f1x45-47365"/>
|
||||
<channel id="47366" typeId="f1x45-47366"/>
|
||||
<channel id="47367" typeId="f1x45-47367"/>
|
||||
<channel id="47368" typeId="f1x45-47368"/>
|
||||
<channel id="47370" typeId="f1x45-47370"/>
|
||||
<channel id="47371" typeId="f1x45-47371"/>
|
||||
<channel id="47372" typeId="f1x45-47372"/>
|
||||
<channel id="47374" typeId="f1x45-47374"/>
|
||||
<channel id="47375" typeId="f1x45-47375"/>
|
||||
<channel id="47376" typeId="f1x45-47376"/>
|
||||
<channel id="47377" typeId="f1x45-47377"/>
|
||||
<channel id="47378" typeId="f1x45-47378"/>
|
||||
<channel id="47379" typeId="f1x45-47379"/>
|
||||
<channel id="47380" typeId="f1x45-47380"/>
|
||||
<channel id="47381" typeId="f1x45-47381"/>
|
||||
<channel id="47382" typeId="f1x45-47382"/>
|
||||
<channel id="47383" typeId="f1x45-47383"/>
|
||||
<channel id="47384" typeId="f1x45-47384"/>
|
||||
<channel id="47385" typeId="f1x45-47385"/>
|
||||
<channel id="47387" typeId="f1x45-47387"/>
|
||||
<channel id="47388" typeId="f1x45-47388"/>
|
||||
<channel id="47389" typeId="f1x45-47389"/>
|
||||
<channel id="47391" typeId="f1x45-47391"/>
|
||||
<channel id="47392" typeId="f1x45-47392"/>
|
||||
<channel id="47393" typeId="f1x45-47393"/>
|
||||
<channel id="47394" typeId="f1x45-47394"/>
|
||||
<channel id="47395" typeId="f1x45-47395"/>
|
||||
<channel id="47396" typeId="f1x45-47396"/>
|
||||
<channel id="47397" typeId="f1x45-47397"/>
|
||||
<channel id="47398" typeId="f1x45-47398"/>
|
||||
<channel id="47399" typeId="f1x45-47399"/>
|
||||
<channel id="47400" typeId="f1x45-47400"/>
|
||||
<channel id="47401" typeId="f1x45-47401"/>
|
||||
<channel id="47402" typeId="f1x45-47402"/>
|
||||
<channel id="47413" typeId="f1x45-47413"/>
|
||||
<channel id="47414" typeId="f1x45-47414"/>
|
||||
<channel id="47415" typeId="f1x45-47415"/>
|
||||
<channel id="47416" typeId="f1x45-47416"/>
|
||||
<channel id="47417" typeId="f1x45-47417"/>
|
||||
<channel id="47418" typeId="f1x45-47418"/>
|
||||
<channel id="47537" typeId="f1x45-47537"/>
|
||||
<channel id="47538" typeId="f1x45-47538"/>
|
||||
<channel id="47539" typeId="f1x45-47539"/>
|
||||
<channel id="47540" typeId="f1x45-47540"/>
|
||||
<channel id="47543" typeId="f1x45-47543"/>
|
||||
<channel id="47570" typeId="f1x45-47570"/>
|
||||
<channel id="48043" typeId="f1x45-48043"/>
|
||||
<channel id="48046" typeId="f1x45-48046"/>
|
||||
<channel id="48047" typeId="f1x45-48047"/>
|
||||
<channel id="48053" typeId="f1x45-48053"/>
|
||||
<channel id="48054" typeId="f1x45-48054"/>
|
||||
<channel id="48055" typeId="f1x45-48055"/>
|
||||
<channel id="48056" typeId="f1x45-48056"/>
|
||||
<channel id="48057" typeId="f1x45-48057"/>
|
||||
<channel id="48058" typeId="f1x45-48058"/>
|
||||
<channel id="48059" typeId="f1x45-48059"/>
|
||||
<channel id="48060" typeId="f1x45-48060"/>
|
||||
<channel id="48061" typeId="f1x45-48061"/>
|
||||
<channel id="48062" typeId="f1x45-48062"/>
|
||||
<channel id="48063" typeId="f1x45-48063"/>
|
||||
<channel id="48064" typeId="f1x45-48064"/>
|
||||
<channel id="48065" typeId="f1x45-48065"/>
|
||||
<channel id="48066" typeId="f1x45-48066"/>
|
||||
<channel id="48067" typeId="f1x45-48067"/>
|
||||
<channel id="48068" typeId="f1x45-48068"/>
|
||||
<channel id="48069" typeId="f1x45-48069"/>
|
||||
<channel id="48070" typeId="f1x45-48070"/>
|
||||
<channel id="48071" typeId="f1x45-48071"/>
|
||||
<channel id="48072" typeId="f1x45-48072"/>
|
||||
<channel id="48073" typeId="f1x45-48073"/>
|
||||
<channel id="48074" typeId="f1x45-48074"/>
|
||||
<channel id="48087" typeId="f1x45-48087"/>
|
||||
<channel id="48088" typeId="f1x45-48088"/>
|
||||
<channel id="48089" typeId="f1x45-48089"/>
|
||||
<channel id="48090" typeId="f1x45-48090"/>
|
||||
<channel id="48091" typeId="f1x45-48091"/>
|
||||
<channel id="48092" typeId="f1x45-48092"/>
|
||||
<channel id="48093" typeId="f1x45-48093"/>
|
||||
<channel id="48094" typeId="f1x45-48094"/>
|
||||
<channel id="48133" typeId="f1x45-48133"/>
|
||||
<channel id="48174" typeId="f1x45-48174"/>
|
||||
<channel id="48175" typeId="f1x45-48175"/>
|
||||
<channel id="48176" typeId="f1x45-48176"/>
|
||||
<channel id="48177" typeId="f1x45-48177"/>
|
||||
<channel id="48178" typeId="f1x45-48178"/>
|
||||
<channel id="48179" typeId="f1x45-48179"/>
|
||||
<channel id="48180" typeId="f1x45-48180"/>
|
||||
<channel id="48181" typeId="f1x45-48181"/>
|
||||
<channel id="48182" typeId="f1x45-48182"/>
|
||||
<channel id="48183" typeId="f1x45-48183"/>
|
||||
<channel id="48184" typeId="f1x45-48184"/>
|
||||
<channel id="48185" typeId="f1x45-48185"/>
|
||||
<channel id="48186" typeId="f1x45-48186"/>
|
||||
<channel id="48187" typeId="f1x45-48187"/>
|
||||
<channel id="48188" typeId="f1x45-48188"/>
|
||||
<channel id="48189" typeId="f1x45-48189"/>
|
||||
<channel id="48190" typeId="f1x45-48190"/>
|
||||
<channel id="48191" typeId="f1x45-48191"/>
|
||||
<channel id="48192" typeId="f1x45-48192"/>
|
||||
<channel id="48193" typeId="f1x45-48193"/>
|
||||
<channel id="48194" typeId="f1x45-48194"/>
|
||||
<channel id="48195" typeId="f1x45-48195"/>
|
||||
<channel id="48196" typeId="f1x45-48196"/>
|
||||
<channel id="48197" typeId="f1x45-48197"/>
|
||||
<channel id="48226" typeId="f1x45-48226"/>
|
||||
<channel id="48282" typeId="f1x45-48282"/>
|
||||
<channel id="48283" typeId="f1x45-48283"/>
|
||||
<channel id="48284" typeId="f1x45-48284"/>
|
||||
<channel id="48285" typeId="f1x45-48285"/>
|
||||
<channel id="48452" typeId="f1x45-48452"/>
|
||||
<channel id="48453" typeId="f1x45-48453"/>
|
||||
<channel id="48454" typeId="f1x45-48454"/>
|
||||
<channel id="48455" typeId="f1x45-48455"/>
|
||||
<channel id="48456" typeId="f1x45-48456"/>
|
||||
<channel id="48458" typeId="f1x45-48458"/>
|
||||
<channel id="48459" typeId="f1x45-48459"/>
|
||||
<channel id="48487" typeId="f1x45-48487"/>
|
||||
<channel id="49008" typeId="f1x45-49008"/>
|
||||
<channel id="49009" typeId="f1x45-49009"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
</thing:thing-descriptions>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,168 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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="f1x45-udp">
|
||||
<label>UDP Connected Nibe F1145 and F1245 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f1x45-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f1x45-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="hostName" type="text" required="true">
|
||||
<label>Host Name</label>
|
||||
<description>Network address of the NibeGW.</description>
|
||||
</parameter>
|
||||
<parameter name="port" type="integer">
|
||||
<label>UDP Port</label>
|
||||
<description>UDP port to listening data packets from the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="readCommandsPort" type="integer">
|
||||
<label>UDP Port for Read Commands</label>
|
||||
<description>UDP port to send read commands to the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="writeCommandsPort" type="integer">
|
||||
<label>UDP Port for Write Commands</label>
|
||||
<description>UDP port to send write commands to the NibeGW.</description>
|
||||
<default>10000</default>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Registers List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f1x45-serial">
|
||||
<label>Serial Port Connected F1145 and F1245 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f1x45-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f1x45-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="serialPort" type="text" required="true">
|
||||
<label>Serial Port</label>
|
||||
<description>Serial port to connect to the heat pump.</description>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToMODBUS40" type="boolean">
|
||||
<label>Enable Acknowledges to MODBUS40 Messages</label>
|
||||
<description>Binding emulates MODBUS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>true</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToRMU40" type="boolean">
|
||||
<label>Enable Acknowledges to RMU40 Messages</label>
|
||||
<description>Binding emulates RMU40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToSMS40" type="boolean">
|
||||
<label>Enable Acknowledges to SMS40 Messages</label>
|
||||
<description>Binding emulates SMS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f1x45-simulator">
|
||||
<label>Simulator for Nibe F1145 and F1245 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f1x45-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f1x45-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
</thing:thing-descriptions>
|
||||
@@ -0,0 +1,995 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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">
|
||||
|
||||
<channel-group-type id="f1x55-sensor-group-channels">
|
||||
<label>Sensors</label>
|
||||
<channels>
|
||||
<channel id="32260" typeId="f1x55-32260"/>
|
||||
<channel id="40004" typeId="f1x55-40004"/>
|
||||
<channel id="40005" typeId="f1x55-40005"/>
|
||||
<channel id="40006" typeId="f1x55-40006"/>
|
||||
<channel id="40007" typeId="f1x55-40007"/>
|
||||
<channel id="40008" typeId="f1x55-40008"/>
|
||||
<channel id="40012" typeId="f1x55-40012"/>
|
||||
<channel id="40013" typeId="f1x55-40013"/>
|
||||
<channel id="40014" typeId="f1x55-40014"/>
|
||||
<channel id="40015" typeId="f1x55-40015"/>
|
||||
<channel id="40016" typeId="f1x55-40016"/>
|
||||
<channel id="40017" typeId="f1x55-40017"/>
|
||||
<channel id="40018" typeId="f1x55-40018"/>
|
||||
<channel id="40019" typeId="f1x55-40019"/>
|
||||
<channel id="40022" typeId="f1x55-40022"/>
|
||||
<channel id="40025" typeId="f1x55-40025"/>
|
||||
<channel id="40026" typeId="f1x55-40026"/>
|
||||
<channel id="40028" typeId="f1x55-40028"/>
|
||||
<channel id="40029" typeId="f1x55-40029"/>
|
||||
<channel id="40030" typeId="f1x55-40030"/>
|
||||
<channel id="40031" typeId="f1x55-40031"/>
|
||||
<channel id="40032" typeId="f1x55-40032"/>
|
||||
<channel id="40033" typeId="f1x55-40033"/>
|
||||
<channel id="40042" typeId="f1x55-40042"/>
|
||||
<channel id="40043" typeId="f1x55-40043"/>
|
||||
<channel id="40044" typeId="f1x55-40044"/>
|
||||
<channel id="40045" typeId="f1x55-40045"/>
|
||||
<channel id="40046" typeId="f1x55-40046"/>
|
||||
<channel id="40054" typeId="f1x55-40054"/>
|
||||
<channel id="40067" typeId="f1x55-40067"/>
|
||||
<channel id="40070" typeId="f1x55-40070"/>
|
||||
<channel id="40071" typeId="f1x55-40071"/>
|
||||
<channel id="40072" typeId="f1x55-40072"/>
|
||||
<channel id="40074" typeId="f1x55-40074"/>
|
||||
<channel id="40075" typeId="f1x55-40075"/>
|
||||
<channel id="40079" typeId="f1x55-40079"/>
|
||||
<channel id="40081" typeId="f1x55-40081"/>
|
||||
<channel id="40083" typeId="f1x55-40083"/>
|
||||
<channel id="40106" typeId="f1x55-40106"/>
|
||||
<channel id="40107" typeId="f1x55-40107"/>
|
||||
<channel id="40108" typeId="f1x55-40108"/>
|
||||
<channel id="40109" typeId="f1x55-40109"/>
|
||||
<channel id="40110" typeId="f1x55-40110"/>
|
||||
<channel id="40111" typeId="f1x55-40111"/>
|
||||
<channel id="40112" typeId="f1x55-40112"/>
|
||||
<channel id="40113" typeId="f1x55-40113"/>
|
||||
<channel id="40114" typeId="f1x55-40114"/>
|
||||
<channel id="40115" typeId="f1x55-40115"/>
|
||||
<channel id="40116" typeId="f1x55-40116"/>
|
||||
<channel id="40117" typeId="f1x55-40117"/>
|
||||
<channel id="40118" typeId="f1x55-40118"/>
|
||||
<channel id="40127" typeId="f1x55-40127"/>
|
||||
<channel id="40128" typeId="f1x55-40128"/>
|
||||
<channel id="40129" typeId="f1x55-40129"/>
|
||||
<channel id="40146" typeId="f1x55-40146"/>
|
||||
<channel id="40147" typeId="f1x55-40147"/>
|
||||
<channel id="40155" typeId="f1x55-40155"/>
|
||||
<channel id="40156" typeId="f1x55-40156"/>
|
||||
<channel id="40159" typeId="f1x55-40159"/>
|
||||
<channel id="40160" typeId="f1x55-40160"/>
|
||||
<channel id="40161" typeId="f1x55-40161"/>
|
||||
<channel id="40162" typeId="f1x55-40162"/>
|
||||
<channel id="40163" typeId="f1x55-40163"/>
|
||||
<channel id="40164" typeId="f1x55-40164"/>
|
||||
<channel id="40165" typeId="f1x55-40165"/>
|
||||
<channel id="40166" typeId="f1x55-40166"/>
|
||||
<channel id="40167" typeId="f1x55-40167"/>
|
||||
<channel id="40168" typeId="f1x55-40168"/>
|
||||
<channel id="40169" typeId="f1x55-40169"/>
|
||||
<channel id="40170" typeId="f1x55-40170"/>
|
||||
<channel id="40183" typeId="f1x55-40183"/>
|
||||
<channel id="40185" typeId="f1x55-40185"/>
|
||||
<channel id="40188" typeId="f1x55-40188"/>
|
||||
<channel id="40189" typeId="f1x55-40189"/>
|
||||
<channel id="40190" typeId="f1x55-40190"/>
|
||||
<channel id="40191" typeId="f1x55-40191"/>
|
||||
<channel id="40192" typeId="f1x55-40192"/>
|
||||
<channel id="40193" typeId="f1x55-40193"/>
|
||||
<channel id="40194" typeId="f1x55-40194"/>
|
||||
<channel id="40195" typeId="f1x55-40195"/>
|
||||
<channel id="40212" typeId="f1x55-40212"/>
|
||||
<channel id="40216" typeId="f1x55-40216"/>
|
||||
<channel id="40217" typeId="f1x55-40217"/>
|
||||
<channel id="40218" typeId="f1x55-40218"/>
|
||||
<channel id="40219" typeId="f1x55-40219"/>
|
||||
<channel id="40220" typeId="f1x55-40220"/>
|
||||
<channel id="40221" typeId="f1x55-40221"/>
|
||||
<channel id="40222" typeId="f1x55-40222"/>
|
||||
<channel id="40223" typeId="f1x55-40223"/>
|
||||
<channel id="40224" typeId="f1x55-40224"/>
|
||||
<channel id="40305" typeId="f1x55-40305"/>
|
||||
<channel id="40306" typeId="f1x55-40306"/>
|
||||
<channel id="40307" typeId="f1x55-40307"/>
|
||||
<channel id="40308" typeId="f1x55-40308"/>
|
||||
<channel id="40310" typeId="f1x55-40310"/>
|
||||
<channel id="40311" typeId="f1x55-40311"/>
|
||||
<channel id="40312" typeId="f1x55-40312"/>
|
||||
<channel id="40316" typeId="f1x55-40316"/>
|
||||
<channel id="40317" typeId="f1x55-40317"/>
|
||||
<channel id="40321" typeId="f1x55-40321"/>
|
||||
<channel id="40322" typeId="f1x55-40322"/>
|
||||
<channel id="40323" typeId="f1x55-40323"/>
|
||||
<channel id="40324" typeId="f1x55-40324"/>
|
||||
<channel id="40326" typeId="f1x55-40326"/>
|
||||
<channel id="40327" typeId="f1x55-40327"/>
|
||||
<channel id="40328" typeId="f1x55-40328"/>
|
||||
<channel id="40329" typeId="f1x55-40329"/>
|
||||
<channel id="40330" typeId="f1x55-40330"/>
|
||||
<channel id="40331" typeId="f1x55-40331"/>
|
||||
<channel id="40332" typeId="f1x55-40332"/>
|
||||
<channel id="40339" typeId="f1x55-40339"/>
|
||||
<channel id="40340" typeId="f1x55-40340"/>
|
||||
<channel id="40341" typeId="f1x55-40341"/>
|
||||
<channel id="40342" typeId="f1x55-40342"/>
|
||||
<channel id="40365" typeId="f1x55-40365"/>
|
||||
<channel id="40366" typeId="f1x55-40366"/>
|
||||
<channel id="40367" typeId="f1x55-40367"/>
|
||||
<channel id="40368" typeId="f1x55-40368"/>
|
||||
<channel id="40369" typeId="f1x55-40369"/>
|
||||
<channel id="40625" typeId="f1x55-40625"/>
|
||||
<channel id="40626" typeId="f1x55-40626"/>
|
||||
<channel id="40755" typeId="f1x55-40755"/>
|
||||
<channel id="40771" typeId="f1x55-40771"/>
|
||||
<channel id="40792" typeId="f1x55-40792"/>
|
||||
<channel id="40793" typeId="f1x55-40793"/>
|
||||
<channel id="40801" typeId="f1x55-40801"/>
|
||||
<channel id="40802" typeId="f1x55-40802"/>
|
||||
<channel id="40806" typeId="f1x55-40806"/>
|
||||
<channel id="40813" typeId="f1x55-40813"/>
|
||||
<channel id="40834" typeId="f1x55-40834"/>
|
||||
<channel id="40856" typeId="f1x55-40856"/>
|
||||
<channel id="40857" typeId="f1x55-40857"/>
|
||||
<channel id="40858" typeId="f1x55-40858"/>
|
||||
<channel id="40868" typeId="f1x55-40868"/>
|
||||
<channel id="40870" typeId="f1x55-40870"/>
|
||||
<channel id="40871" typeId="f1x55-40871"/>
|
||||
<channel id="40872" typeId="f1x55-40872"/>
|
||||
<channel id="40873" typeId="f1x55-40873"/>
|
||||
<channel id="40874" typeId="f1x55-40874"/>
|
||||
<channel id="40875" typeId="f1x55-40875"/>
|
||||
<channel id="40876" typeId="f1x55-40876"/>
|
||||
<channel id="40877" typeId="f1x55-40877"/>
|
||||
<channel id="40878" typeId="f1x55-40878"/>
|
||||
<channel id="40889" typeId="f1x55-40889"/>
|
||||
<channel id="40912" typeId="f1x55-40912"/>
|
||||
<channel id="40913" typeId="f1x55-40913"/>
|
||||
<channel id="40942" typeId="f1x55-40942"/>
|
||||
<channel id="40943" typeId="f1x55-40943"/>
|
||||
<channel id="40993" typeId="f1x55-40993"/>
|
||||
<channel id="40994" typeId="f1x55-40994"/>
|
||||
<channel id="40995" typeId="f1x55-40995"/>
|
||||
<channel id="40997" typeId="f1x55-40997"/>
|
||||
<channel id="41027" typeId="f1x55-41027"/>
|
||||
<channel id="41186" typeId="f1x55-41186"/>
|
||||
<channel id="41189" typeId="f1x55-41189"/>
|
||||
<channel id="41190" typeId="f1x55-41190"/>
|
||||
<channel id="41191" typeId="f1x55-41191"/>
|
||||
<channel id="41210" typeId="f1x55-41210"/>
|
||||
<channel id="41211" typeId="f1x55-41211"/>
|
||||
<channel id="41212" typeId="f1x55-41212"/>
|
||||
<channel id="41213" typeId="f1x55-41213"/>
|
||||
<channel id="41256" typeId="f1x55-41256"/>
|
||||
<channel id="41257" typeId="f1x55-41257"/>
|
||||
<channel id="41258" typeId="f1x55-41258"/>
|
||||
<channel id="41265" typeId="f1x55-41265"/>
|
||||
<channel id="41266" typeId="f1x55-41266"/>
|
||||
<channel id="41267" typeId="f1x55-41267"/>
|
||||
<channel id="41268" typeId="f1x55-41268"/>
|
||||
<channel id="41269" typeId="f1x55-41269"/>
|
||||
<channel id="41270" typeId="f1x55-41270"/>
|
||||
<channel id="41271" typeId="f1x55-41271"/>
|
||||
<channel id="41272" typeId="f1x55-41272"/>
|
||||
<channel id="41273" typeId="f1x55-41273"/>
|
||||
<channel id="41274" typeId="f1x55-41274"/>
|
||||
<channel id="41287" typeId="f1x55-41287"/>
|
||||
<channel id="41393" typeId="f1x55-41393"/>
|
||||
<channel id="41395" typeId="f1x55-41395"/>
|
||||
<channel id="41397" typeId="f1x55-41397"/>
|
||||
<channel id="41399" typeId="f1x55-41399"/>
|
||||
<channel id="41401" typeId="f1x55-41401"/>
|
||||
<channel id="41403" typeId="f1x55-41403"/>
|
||||
<channel id="41405" typeId="f1x55-41405"/>
|
||||
<channel id="41421" typeId="f1x55-41421"/>
|
||||
<channel id="41424" typeId="f1x55-41424"/>
|
||||
<channel id="41425" typeId="f1x55-41425"/>
|
||||
<channel id="41426" typeId="f1x55-41426"/>
|
||||
<channel id="41427" typeId="f1x55-41427"/>
|
||||
<channel id="41429" typeId="f1x55-41429"/>
|
||||
<channel id="41430" typeId="f1x55-41430"/>
|
||||
<channel id="41928" typeId="f1x55-41928"/>
|
||||
<channel id="41929" typeId="f1x55-41929"/>
|
||||
<channel id="41930" typeId="f1x55-41930"/>
|
||||
<channel id="41931" typeId="f1x55-41931"/>
|
||||
<channel id="41932" typeId="f1x55-41932"/>
|
||||
<channel id="41933" typeId="f1x55-41933"/>
|
||||
<channel id="41934" typeId="f1x55-41934"/>
|
||||
<channel id="41935" typeId="f1x55-41935"/>
|
||||
<channel id="41936" typeId="f1x55-41936"/>
|
||||
<channel id="41937" typeId="f1x55-41937"/>
|
||||
<channel id="41938" typeId="f1x55-41938"/>
|
||||
<channel id="41939" typeId="f1x55-41939"/>
|
||||
<channel id="41940" typeId="f1x55-41940"/>
|
||||
<channel id="41941" typeId="f1x55-41941"/>
|
||||
<channel id="41942" typeId="f1x55-41942"/>
|
||||
<channel id="41943" typeId="f1x55-41943"/>
|
||||
<channel id="41944" typeId="f1x55-41944"/>
|
||||
<channel id="41945" typeId="f1x55-41945"/>
|
||||
<channel id="41946" typeId="f1x55-41946"/>
|
||||
<channel id="41947" typeId="f1x55-41947"/>
|
||||
<channel id="41948" typeId="f1x55-41948"/>
|
||||
<channel id="41949" typeId="f1x55-41949"/>
|
||||
<channel id="41950" typeId="f1x55-41950"/>
|
||||
<channel id="41951" typeId="f1x55-41951"/>
|
||||
<channel id="41952" typeId="f1x55-41952"/>
|
||||
<channel id="41953" typeId="f1x55-41953"/>
|
||||
<channel id="41954" typeId="f1x55-41954"/>
|
||||
<channel id="41955" typeId="f1x55-41955"/>
|
||||
<channel id="41956" typeId="f1x55-41956"/>
|
||||
<channel id="41957" typeId="f1x55-41957"/>
|
||||
<channel id="41958" typeId="f1x55-41958"/>
|
||||
<channel id="41959" typeId="f1x55-41959"/>
|
||||
<channel id="41960" typeId="f1x55-41960"/>
|
||||
<channel id="41961" typeId="f1x55-41961"/>
|
||||
<channel id="41962" typeId="f1x55-41962"/>
|
||||
<channel id="41963" typeId="f1x55-41963"/>
|
||||
<channel id="41964" typeId="f1x55-41964"/>
|
||||
<channel id="41965" typeId="f1x55-41965"/>
|
||||
<channel id="41966" typeId="f1x55-41966"/>
|
||||
<channel id="41967" typeId="f1x55-41967"/>
|
||||
<channel id="41968" typeId="f1x55-41968"/>
|
||||
<channel id="41969" typeId="f1x55-41969"/>
|
||||
<channel id="41980" typeId="f1x55-41980"/>
|
||||
<channel id="41981" typeId="f1x55-41981"/>
|
||||
<channel id="41982" typeId="f1x55-41982"/>
|
||||
<channel id="41983" typeId="f1x55-41983"/>
|
||||
<channel id="41984" typeId="f1x55-41984"/>
|
||||
<channel id="41985" typeId="f1x55-41985"/>
|
||||
<channel id="41986" typeId="f1x55-41986"/>
|
||||
<channel id="41987" typeId="f1x55-41987"/>
|
||||
<channel id="41988" typeId="f1x55-41988"/>
|
||||
<channel id="41989" typeId="f1x55-41989"/>
|
||||
<channel id="41990" typeId="f1x55-41990"/>
|
||||
<channel id="41991" typeId="f1x55-41991"/>
|
||||
<channel id="41992" typeId="f1x55-41992"/>
|
||||
<channel id="41993" typeId="f1x55-41993"/>
|
||||
<channel id="41994" typeId="f1x55-41994"/>
|
||||
<channel id="41995" typeId="f1x55-41995"/>
|
||||
<channel id="41996" typeId="f1x55-41996"/>
|
||||
<channel id="41997" typeId="f1x55-41997"/>
|
||||
<channel id="41998" typeId="f1x55-41998"/>
|
||||
<channel id="41999" typeId="f1x55-41999"/>
|
||||
<channel id="42000" typeId="f1x55-42000"/>
|
||||
<channel id="42001" typeId="f1x55-42001"/>
|
||||
<channel id="42002" typeId="f1x55-42002"/>
|
||||
<channel id="42003" typeId="f1x55-42003"/>
|
||||
<channel id="42004" typeId="f1x55-42004"/>
|
||||
<channel id="42005" typeId="f1x55-42005"/>
|
||||
<channel id="42006" typeId="f1x55-42006"/>
|
||||
<channel id="42007" typeId="f1x55-42007"/>
|
||||
<channel id="42008" typeId="f1x55-42008"/>
|
||||
<channel id="42009" typeId="f1x55-42009"/>
|
||||
<channel id="42010" typeId="f1x55-42010"/>
|
||||
<channel id="42012" typeId="f1x55-42012"/>
|
||||
<channel id="42014" typeId="f1x55-42014"/>
|
||||
<channel id="42016" typeId="f1x55-42016"/>
|
||||
<channel id="42018" typeId="f1x55-42018"/>
|
||||
<channel id="42020" typeId="f1x55-42020"/>
|
||||
<channel id="42022" typeId="f1x55-42022"/>
|
||||
<channel id="42024" typeId="f1x55-42024"/>
|
||||
<channel id="42026" typeId="f1x55-42026"/>
|
||||
<channel id="42028" typeId="f1x55-42028"/>
|
||||
<channel id="42030" typeId="f1x55-42030"/>
|
||||
<channel id="42033" typeId="f1x55-42033"/>
|
||||
<channel id="42034" typeId="f1x55-42034"/>
|
||||
<channel id="42035" typeId="f1x55-42035"/>
|
||||
<channel id="42037" typeId="f1x55-42037"/>
|
||||
<channel id="42075" typeId="f1x55-42075"/>
|
||||
<channel id="42080" typeId="f1x55-42080"/>
|
||||
<channel id="42081" typeId="f1x55-42081"/>
|
||||
<channel id="42082" typeId="f1x55-42082"/>
|
||||
<channel id="42083" typeId="f1x55-42083"/>
|
||||
<channel id="42084" typeId="f1x55-42084"/>
|
||||
<channel id="42085" typeId="f1x55-42085"/>
|
||||
<channel id="42086" typeId="f1x55-42086"/>
|
||||
<channel id="42087" typeId="f1x55-42087"/>
|
||||
<channel id="42100" typeId="f1x55-42100"/>
|
||||
<channel id="42101" typeId="f1x55-42101"/>
|
||||
<channel id="42136" typeId="f1x55-42136"/>
|
||||
<channel id="42137" typeId="f1x55-42137"/>
|
||||
<channel id="42138" typeId="f1x55-42138"/>
|
||||
<channel id="42139" typeId="f1x55-42139"/>
|
||||
<channel id="42140" typeId="f1x55-42140"/>
|
||||
<channel id="42141" typeId="f1x55-42141"/>
|
||||
<channel id="42150" typeId="f1x55-42150"/>
|
||||
<channel id="42151" typeId="f1x55-42151"/>
|
||||
<channel id="42152" typeId="f1x55-42152"/>
|
||||
<channel id="42153" typeId="f1x55-42153"/>
|
||||
<channel id="42154" typeId="f1x55-42154"/>
|
||||
<channel id="42155" typeId="f1x55-42155"/>
|
||||
<channel id="42156" typeId="f1x55-42156"/>
|
||||
<channel id="42157" typeId="f1x55-42157"/>
|
||||
<channel id="42158" typeId="f1x55-42158"/>
|
||||
<channel id="42159" typeId="f1x55-42159"/>
|
||||
<channel id="42160" typeId="f1x55-42160"/>
|
||||
<channel id="42161" typeId="f1x55-42161"/>
|
||||
<channel id="42162" typeId="f1x55-42162"/>
|
||||
<channel id="42163" typeId="f1x55-42163"/>
|
||||
<channel id="42164" typeId="f1x55-42164"/>
|
||||
<channel id="42437" typeId="f1x55-42437"/>
|
||||
<channel id="42439" typeId="f1x55-42439"/>
|
||||
<channel id="42441" typeId="f1x55-42441"/>
|
||||
<channel id="42443" typeId="f1x55-42443"/>
|
||||
<channel id="42445" typeId="f1x55-42445"/>
|
||||
<channel id="42447" typeId="f1x55-42447"/>
|
||||
<channel id="42464" typeId="f1x55-42464"/>
|
||||
<channel id="42465" typeId="f1x55-42465"/>
|
||||
<channel id="42466" typeId="f1x55-42466"/>
|
||||
<channel id="42467" typeId="f1x55-42467"/>
|
||||
<channel id="42504" typeId="f1x55-42504"/>
|
||||
<channel id="43001" typeId="f1x55-43001"/>
|
||||
<channel id="43006" typeId="f1x55-43006"/>
|
||||
<channel id="43007" typeId="f1x55-43007"/>
|
||||
<channel id="43008" typeId="f1x55-43008"/>
|
||||
<channel id="43009" typeId="f1x55-43009"/>
|
||||
<channel id="43013" typeId="f1x55-43013"/>
|
||||
<channel id="43024" typeId="f1x55-43024"/>
|
||||
<channel id="43064" typeId="f1x55-43064"/>
|
||||
<channel id="43065" typeId="f1x55-43065"/>
|
||||
<channel id="43081" typeId="f1x55-43081"/>
|
||||
<channel id="43084" typeId="f1x55-43084"/>
|
||||
<channel id="43086" typeId="f1x55-43086"/>
|
||||
<channel id="43091" typeId="f1x55-43091"/>
|
||||
<channel id="43093" typeId="f1x55-43093"/>
|
||||
<channel id="43094" typeId="f1x55-43094"/>
|
||||
<channel id="43095" typeId="f1x55-43095"/>
|
||||
<channel id="43096" typeId="f1x55-43096"/>
|
||||
<channel id="43097" typeId="f1x55-43097"/>
|
||||
<channel id="43103" typeId="f1x55-43103"/>
|
||||
<channel id="43108" typeId="f1x55-43108"/>
|
||||
<channel id="43122" typeId="f1x55-43122"/>
|
||||
<channel id="43123" typeId="f1x55-43123"/>
|
||||
<channel id="43132" typeId="f1x55-43132"/>
|
||||
<channel id="43136" typeId="f1x55-43136"/>
|
||||
<channel id="43140" typeId="f1x55-43140"/>
|
||||
<channel id="43141" typeId="f1x55-43141"/>
|
||||
<channel id="43147" typeId="f1x55-43147"/>
|
||||
<channel id="43152" typeId="f1x55-43152"/>
|
||||
<channel id="43158" typeId="f1x55-43158"/>
|
||||
<channel id="43159" typeId="f1x55-43159"/>
|
||||
<channel id="43160" typeId="f1x55-43160"/>
|
||||
<channel id="43161" typeId="f1x55-43161"/>
|
||||
<channel id="43163" typeId="f1x55-43163"/>
|
||||
<channel id="43164" typeId="f1x55-43164"/>
|
||||
<channel id="43171" typeId="f1x55-43171"/>
|
||||
<channel id="43180" typeId="f1x55-43180"/>
|
||||
<channel id="43182" typeId="f1x55-43182"/>
|
||||
<channel id="43239" typeId="f1x55-43239"/>
|
||||
<channel id="43375" typeId="f1x55-43375"/>
|
||||
<channel id="43395" typeId="f1x55-43395"/>
|
||||
<channel id="43416" typeId="f1x55-43416"/>
|
||||
<channel id="43420" typeId="f1x55-43420"/>
|
||||
<channel id="43424" typeId="f1x55-43424"/>
|
||||
<channel id="43427" typeId="f1x55-43427"/>
|
||||
<channel id="43431" typeId="f1x55-43431"/>
|
||||
<channel id="43433" typeId="f1x55-43433"/>
|
||||
<channel id="43435" typeId="f1x55-43435"/>
|
||||
<channel id="43437" typeId="f1x55-43437"/>
|
||||
<channel id="43439" typeId="f1x55-43439"/>
|
||||
<channel id="43484" typeId="f1x55-43484"/>
|
||||
<channel id="43485" typeId="f1x55-43485"/>
|
||||
<channel id="43486" typeId="f1x55-43486"/>
|
||||
<channel id="43487" typeId="f1x55-43487"/>
|
||||
<channel id="43514" typeId="f1x55-43514"/>
|
||||
<channel id="43516" typeId="f1x55-43516"/>
|
||||
<channel id="43542" typeId="f1x55-43542"/>
|
||||
<channel id="43555" typeId="f1x55-43555"/>
|
||||
<channel id="43556" typeId="f1x55-43556"/>
|
||||
<channel id="43560" typeId="f1x55-43560"/>
|
||||
<channel id="43561" typeId="f1x55-43561"/>
|
||||
<channel id="43563" typeId="f1x55-43563"/>
|
||||
<channel id="43564" typeId="f1x55-43564"/>
|
||||
<channel id="44267" typeId="f1x55-44267"/>
|
||||
<channel id="44268" typeId="f1x55-44268"/>
|
||||
<channel id="44269" typeId="f1x55-44269"/>
|
||||
<channel id="44270" typeId="f1x55-44270"/>
|
||||
<channel id="44276" typeId="f1x55-44276"/>
|
||||
<channel id="44277" typeId="f1x55-44277"/>
|
||||
<channel id="44278" typeId="f1x55-44278"/>
|
||||
<channel id="44298" typeId="f1x55-44298"/>
|
||||
<channel id="44300" typeId="f1x55-44300"/>
|
||||
<channel id="44302" typeId="f1x55-44302"/>
|
||||
<channel id="44304" typeId="f1x55-44304"/>
|
||||
<channel id="44306" typeId="f1x55-44306"/>
|
||||
<channel id="44308" typeId="f1x55-44308"/>
|
||||
<channel id="44331" typeId="f1x55-44331"/>
|
||||
<channel id="44744" typeId="f1x55-44744"/>
|
||||
<channel id="44745" typeId="f1x55-44745"/>
|
||||
<channel id="44746" typeId="f1x55-44746"/>
|
||||
<channel id="44748" typeId="f1x55-44748"/>
|
||||
<channel id="44749" typeId="f1x55-44749"/>
|
||||
<channel id="44751" typeId="f1x55-44751"/>
|
||||
<channel id="44752" typeId="f1x55-44752"/>
|
||||
<channel id="44753" typeId="f1x55-44753"/>
|
||||
<channel id="44754" typeId="f1x55-44754"/>
|
||||
<channel id="44756" typeId="f1x55-44756"/>
|
||||
<channel id="44874" typeId="f1x55-44874"/>
|
||||
<channel id="44878" typeId="f1x55-44878"/>
|
||||
<channel id="44879" typeId="f1x55-44879"/>
|
||||
<channel id="44896" typeId="f1x55-44896"/>
|
||||
<channel id="44897" typeId="f1x55-44897"/>
|
||||
<channel id="44898" typeId="f1x55-44898"/>
|
||||
<channel id="44899" typeId="f1x55-44899"/>
|
||||
<channel id="44908" typeId="f1x55-44908"/>
|
||||
<channel id="44910" typeId="f1x55-44910"/>
|
||||
<channel id="44911" typeId="f1x55-44911"/>
|
||||
<channel id="45001" typeId="f1x55-45001"/>
|
||||
<channel id="47291" typeId="f1x55-47291"/>
|
||||
<channel id="47325" typeId="f1x55-47325"/>
|
||||
<channel id="49239" typeId="f1x55-49239"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="f1x55-setting-group-channels">
|
||||
<label>Settings</label>
|
||||
<channels>
|
||||
<channel id="40940" typeId="f1x55-40940"/>
|
||||
<channel id="43005" typeId="f1x55-43005"/>
|
||||
<channel id="44266" typeId="f1x55-44266"/>
|
||||
<channel id="40879" typeId="f1x55-40879"/>
|
||||
<channel id="40880" typeId="f1x55-40880"/>
|
||||
<channel id="40881" typeId="f1x55-40881"/>
|
||||
<channel id="40882" typeId="f1x55-40882"/>
|
||||
<channel id="40883" typeId="f1x55-40883"/>
|
||||
<channel id="40884" typeId="f1x55-40884"/>
|
||||
<channel id="40885" typeId="f1x55-40885"/>
|
||||
<channel id="40886" typeId="f1x55-40886"/>
|
||||
<channel id="40887" typeId="f1x55-40887"/>
|
||||
<channel id="40888" typeId="f1x55-40888"/>
|
||||
<channel id="42097" typeId="f1x55-42097"/>
|
||||
<channel id="45171" typeId="f1x55-45171"/>
|
||||
<channel id="47004" typeId="f1x55-47004"/>
|
||||
<channel id="47005" typeId="f1x55-47005"/>
|
||||
<channel id="47006" typeId="f1x55-47006"/>
|
||||
<channel id="47007" typeId="f1x55-47007"/>
|
||||
<channel id="47008" typeId="f1x55-47008"/>
|
||||
<channel id="47009" typeId="f1x55-47009"/>
|
||||
<channel id="47010" typeId="f1x55-47010"/>
|
||||
<channel id="47011" typeId="f1x55-47011"/>
|
||||
<channel id="47012" typeId="f1x55-47012"/>
|
||||
<channel id="47013" typeId="f1x55-47013"/>
|
||||
<channel id="47014" typeId="f1x55-47014"/>
|
||||
<channel id="47015" typeId="f1x55-47015"/>
|
||||
<channel id="47016" typeId="f1x55-47016"/>
|
||||
<channel id="47017" typeId="f1x55-47017"/>
|
||||
<channel id="47018" typeId="f1x55-47018"/>
|
||||
<channel id="47019" typeId="f1x55-47019"/>
|
||||
<channel id="47020" typeId="f1x55-47020"/>
|
||||
<channel id="47021" typeId="f1x55-47021"/>
|
||||
<channel id="47022" typeId="f1x55-47022"/>
|
||||
<channel id="47023" typeId="f1x55-47023"/>
|
||||
<channel id="47024" typeId="f1x55-47024"/>
|
||||
<channel id="47025" typeId="f1x55-47025"/>
|
||||
<channel id="47026" typeId="f1x55-47026"/>
|
||||
<channel id="47027" typeId="f1x55-47027"/>
|
||||
<channel id="47028" typeId="f1x55-47028"/>
|
||||
<channel id="47029" typeId="f1x55-47029"/>
|
||||
<channel id="47030" typeId="f1x55-47030"/>
|
||||
<channel id="47031" typeId="f1x55-47031"/>
|
||||
<channel id="47032" typeId="f1x55-47032"/>
|
||||
<channel id="47033" typeId="f1x55-47033"/>
|
||||
<channel id="47034" typeId="f1x55-47034"/>
|
||||
<channel id="47035" typeId="f1x55-47035"/>
|
||||
<channel id="47036" typeId="f1x55-47036"/>
|
||||
<channel id="47041" typeId="f1x55-47041"/>
|
||||
<channel id="47043" typeId="f1x55-47043"/>
|
||||
<channel id="47044" typeId="f1x55-47044"/>
|
||||
<channel id="47045" typeId="f1x55-47045"/>
|
||||
<channel id="47046" typeId="f1x55-47046"/>
|
||||
<channel id="47047" typeId="f1x55-47047"/>
|
||||
<channel id="47048" typeId="f1x55-47048"/>
|
||||
<channel id="47049" typeId="f1x55-47049"/>
|
||||
<channel id="47050" typeId="f1x55-47050"/>
|
||||
<channel id="47051" typeId="f1x55-47051"/>
|
||||
<channel id="47054" typeId="f1x55-47054"/>
|
||||
<channel id="47055" typeId="f1x55-47055"/>
|
||||
<channel id="47099" typeId="f1x55-47099"/>
|
||||
<channel id="47100" typeId="f1x55-47100"/>
|
||||
<channel id="47101" typeId="f1x55-47101"/>
|
||||
<channel id="47102" typeId="f1x55-47102"/>
|
||||
<channel id="47103" typeId="f1x55-47103"/>
|
||||
<channel id="47104" typeId="f1x55-47104"/>
|
||||
<channel id="47131" typeId="f1x55-47131"/>
|
||||
<channel id="47134" typeId="f1x55-47134"/>
|
||||
<channel id="47135" typeId="f1x55-47135"/>
|
||||
<channel id="47136" typeId="f1x55-47136"/>
|
||||
<channel id="47137" typeId="f1x55-47137"/>
|
||||
<channel id="47138" typeId="f1x55-47138"/>
|
||||
<channel id="47139" typeId="f1x55-47139"/>
|
||||
<channel id="47206" typeId="f1x55-47206"/>
|
||||
<channel id="47209" typeId="f1x55-47209"/>
|
||||
<channel id="47210" typeId="f1x55-47210"/>
|
||||
<channel id="47212" typeId="f1x55-47212"/>
|
||||
<channel id="47214" typeId="f1x55-47214"/>
|
||||
<channel id="47261" typeId="f1x55-47261"/>
|
||||
<channel id="47262" typeId="f1x55-47262"/>
|
||||
<channel id="47263" typeId="f1x55-47263"/>
|
||||
<channel id="47264" typeId="f1x55-47264"/>
|
||||
<channel id="47265" typeId="f1x55-47265"/>
|
||||
<channel id="47271" typeId="f1x55-47271"/>
|
||||
<channel id="47272" typeId="f1x55-47272"/>
|
||||
<channel id="47273" typeId="f1x55-47273"/>
|
||||
<channel id="47274" typeId="f1x55-47274"/>
|
||||
<channel id="47275" typeId="f1x55-47275"/>
|
||||
<channel id="47276" typeId="f1x55-47276"/>
|
||||
<channel id="47277" typeId="f1x55-47277"/>
|
||||
<channel id="47278" typeId="f1x55-47278"/>
|
||||
<channel id="47279" typeId="f1x55-47279"/>
|
||||
<channel id="47280" typeId="f1x55-47280"/>
|
||||
<channel id="47281" typeId="f1x55-47281"/>
|
||||
<channel id="47282" typeId="f1x55-47282"/>
|
||||
<channel id="47283" typeId="f1x55-47283"/>
|
||||
<channel id="47284" typeId="f1x55-47284"/>
|
||||
<channel id="47285" typeId="f1x55-47285"/>
|
||||
<channel id="47286" typeId="f1x55-47286"/>
|
||||
<channel id="47287" typeId="f1x55-47287"/>
|
||||
<channel id="47288" typeId="f1x55-47288"/>
|
||||
<channel id="47289" typeId="f1x55-47289"/>
|
||||
<channel id="47290" typeId="f1x55-47290"/>
|
||||
<channel id="47300" typeId="f1x55-47300"/>
|
||||
<channel id="47301" typeId="f1x55-47301"/>
|
||||
<channel id="47302" typeId="f1x55-47302"/>
|
||||
<channel id="47303" typeId="f1x55-47303"/>
|
||||
<channel id="47304" typeId="f1x55-47304"/>
|
||||
<channel id="47305" typeId="f1x55-47305"/>
|
||||
<channel id="47306" typeId="f1x55-47306"/>
|
||||
<channel id="47307" typeId="f1x55-47307"/>
|
||||
<channel id="47308" typeId="f1x55-47308"/>
|
||||
<channel id="47309" typeId="f1x55-47309"/>
|
||||
<channel id="47310" typeId="f1x55-47310"/>
|
||||
<channel id="47312" typeId="f1x55-47312"/>
|
||||
<channel id="47313" typeId="f1x55-47313"/>
|
||||
<channel id="47317" typeId="f1x55-47317"/>
|
||||
<channel id="47318" typeId="f1x55-47318"/>
|
||||
<channel id="47319" typeId="f1x55-47319"/>
|
||||
<channel id="47320" typeId="f1x55-47320"/>
|
||||
<channel id="47321" typeId="f1x55-47321"/>
|
||||
<channel id="47322" typeId="f1x55-47322"/>
|
||||
<channel id="47324" typeId="f1x55-47324"/>
|
||||
<channel id="47326" typeId="f1x55-47326"/>
|
||||
<channel id="47327" typeId="f1x55-47327"/>
|
||||
<channel id="47329" typeId="f1x55-47329"/>
|
||||
<channel id="47330" typeId="f1x55-47330"/>
|
||||
<channel id="47335" typeId="f1x55-47335"/>
|
||||
<channel id="47336" typeId="f1x55-47336"/>
|
||||
<channel id="47337" typeId="f1x55-47337"/>
|
||||
<channel id="47338" typeId="f1x55-47338"/>
|
||||
<channel id="47339" typeId="f1x55-47339"/>
|
||||
<channel id="47340" typeId="f1x55-47340"/>
|
||||
<channel id="47341" typeId="f1x55-47341"/>
|
||||
<channel id="47342" typeId="f1x55-47342"/>
|
||||
<channel id="47343" typeId="f1x55-47343"/>
|
||||
<channel id="47352" typeId="f1x55-47352"/>
|
||||
<channel id="47365" typeId="f1x55-47365"/>
|
||||
<channel id="47366" typeId="f1x55-47366"/>
|
||||
<channel id="47367" typeId="f1x55-47367"/>
|
||||
<channel id="47368" typeId="f1x55-47368"/>
|
||||
<channel id="47370" typeId="f1x55-47370"/>
|
||||
<channel id="47371" typeId="f1x55-47371"/>
|
||||
<channel id="47372" typeId="f1x55-47372"/>
|
||||
<channel id="47374" typeId="f1x55-47374"/>
|
||||
<channel id="47375" typeId="f1x55-47375"/>
|
||||
<channel id="47376" typeId="f1x55-47376"/>
|
||||
<channel id="47377" typeId="f1x55-47377"/>
|
||||
<channel id="47378" typeId="f1x55-47378"/>
|
||||
<channel id="47379" typeId="f1x55-47379"/>
|
||||
<channel id="47380" typeId="f1x55-47380"/>
|
||||
<channel id="47381" typeId="f1x55-47381"/>
|
||||
<channel id="47382" typeId="f1x55-47382"/>
|
||||
<channel id="47383" typeId="f1x55-47383"/>
|
||||
<channel id="47384" typeId="f1x55-47384"/>
|
||||
<channel id="47385" typeId="f1x55-47385"/>
|
||||
<channel id="47387" typeId="f1x55-47387"/>
|
||||
<channel id="47388" typeId="f1x55-47388"/>
|
||||
<channel id="47389" typeId="f1x55-47389"/>
|
||||
<channel id="47391" typeId="f1x55-47391"/>
|
||||
<channel id="47392" typeId="f1x55-47392"/>
|
||||
<channel id="47393" typeId="f1x55-47393"/>
|
||||
<channel id="47394" typeId="f1x55-47394"/>
|
||||
<channel id="47395" typeId="f1x55-47395"/>
|
||||
<channel id="47396" typeId="f1x55-47396"/>
|
||||
<channel id="47397" typeId="f1x55-47397"/>
|
||||
<channel id="47398" typeId="f1x55-47398"/>
|
||||
<channel id="47399" typeId="f1x55-47399"/>
|
||||
<channel id="47400" typeId="f1x55-47400"/>
|
||||
<channel id="47401" typeId="f1x55-47401"/>
|
||||
<channel id="47402" typeId="f1x55-47402"/>
|
||||
<channel id="47413" typeId="f1x55-47413"/>
|
||||
<channel id="47414" typeId="f1x55-47414"/>
|
||||
<channel id="47415" typeId="f1x55-47415"/>
|
||||
<channel id="47416" typeId="f1x55-47416"/>
|
||||
<channel id="47417" typeId="f1x55-47417"/>
|
||||
<channel id="47418" typeId="f1x55-47418"/>
|
||||
<channel id="47442" typeId="f1x55-47442"/>
|
||||
<channel id="47525" typeId="f1x55-47525"/>
|
||||
<channel id="47537" typeId="f1x55-47537"/>
|
||||
<channel id="47538" typeId="f1x55-47538"/>
|
||||
<channel id="47539" typeId="f1x55-47539"/>
|
||||
<channel id="47567" typeId="f1x55-47567"/>
|
||||
<channel id="48043" typeId="f1x55-48043"/>
|
||||
<channel id="48053" typeId="f1x55-48053"/>
|
||||
<channel id="48054" typeId="f1x55-48054"/>
|
||||
<channel id="48055" typeId="f1x55-48055"/>
|
||||
<channel id="48056" typeId="f1x55-48056"/>
|
||||
<channel id="48057" typeId="f1x55-48057"/>
|
||||
<channel id="48058" typeId="f1x55-48058"/>
|
||||
<channel id="48059" typeId="f1x55-48059"/>
|
||||
<channel id="48060" typeId="f1x55-48060"/>
|
||||
<channel id="48061" typeId="f1x55-48061"/>
|
||||
<channel id="48062" typeId="f1x55-48062"/>
|
||||
<channel id="48063" typeId="f1x55-48063"/>
|
||||
<channel id="48064" typeId="f1x55-48064"/>
|
||||
<channel id="48065" typeId="f1x55-48065"/>
|
||||
<channel id="48066" typeId="f1x55-48066"/>
|
||||
<channel id="48067" typeId="f1x55-48067"/>
|
||||
<channel id="48068" typeId="f1x55-48068"/>
|
||||
<channel id="48069" typeId="f1x55-48069"/>
|
||||
<channel id="48070" typeId="f1x55-48070"/>
|
||||
<channel id="48071" typeId="f1x55-48071"/>
|
||||
<channel id="48072" typeId="f1x55-48072"/>
|
||||
<channel id="48073" typeId="f1x55-48073"/>
|
||||
<channel id="48074" typeId="f1x55-48074"/>
|
||||
<channel id="48087" typeId="f1x55-48087"/>
|
||||
<channel id="48088" typeId="f1x55-48088"/>
|
||||
<channel id="48089" typeId="f1x55-48089"/>
|
||||
<channel id="48090" typeId="f1x55-48090"/>
|
||||
<channel id="48091" typeId="f1x55-48091"/>
|
||||
<channel id="48092" typeId="f1x55-48092"/>
|
||||
<channel id="48093" typeId="f1x55-48093"/>
|
||||
<channel id="48094" typeId="f1x55-48094"/>
|
||||
<channel id="48120" typeId="f1x55-48120"/>
|
||||
<channel id="48132" typeId="f1x55-48132"/>
|
||||
<channel id="48133" typeId="f1x55-48133"/>
|
||||
<channel id="48139" typeId="f1x55-48139"/>
|
||||
<channel id="48142" typeId="f1x55-48142"/>
|
||||
<channel id="48144" typeId="f1x55-48144"/>
|
||||
<channel id="48145" typeId="f1x55-48145"/>
|
||||
<channel id="48146" typeId="f1x55-48146"/>
|
||||
<channel id="48147" typeId="f1x55-48147"/>
|
||||
<channel id="48148" typeId="f1x55-48148"/>
|
||||
<channel id="48157" typeId="f1x55-48157"/>
|
||||
<channel id="48174" typeId="f1x55-48174"/>
|
||||
<channel id="48175" typeId="f1x55-48175"/>
|
||||
<channel id="48176" typeId="f1x55-48176"/>
|
||||
<channel id="48177" typeId="f1x55-48177"/>
|
||||
<channel id="48181" typeId="f1x55-48181"/>
|
||||
<channel id="48185" typeId="f1x55-48185"/>
|
||||
<channel id="48186" typeId="f1x55-48186"/>
|
||||
<channel id="48187" typeId="f1x55-48187"/>
|
||||
<channel id="48188" typeId="f1x55-48188"/>
|
||||
<channel id="48189" typeId="f1x55-48189"/>
|
||||
<channel id="48190" typeId="f1x55-48190"/>
|
||||
<channel id="48191" typeId="f1x55-48191"/>
|
||||
<channel id="48192" typeId="f1x55-48192"/>
|
||||
<channel id="48193" typeId="f1x55-48193"/>
|
||||
<channel id="48194" typeId="f1x55-48194"/>
|
||||
<channel id="48195" typeId="f1x55-48195"/>
|
||||
<channel id="48197" typeId="f1x55-48197"/>
|
||||
<channel id="48264" typeId="f1x55-48264"/>
|
||||
<channel id="48265" typeId="f1x55-48265"/>
|
||||
<channel id="48266" typeId="f1x55-48266"/>
|
||||
<channel id="48267" typeId="f1x55-48267"/>
|
||||
<channel id="48275" typeId="f1x55-48275"/>
|
||||
<channel id="48281" typeId="f1x55-48281"/>
|
||||
<channel id="48282" typeId="f1x55-48282"/>
|
||||
<channel id="48283" typeId="f1x55-48283"/>
|
||||
<channel id="48284" typeId="f1x55-48284"/>
|
||||
<channel id="48285" typeId="f1x55-48285"/>
|
||||
<channel id="48286" typeId="f1x55-48286"/>
|
||||
<channel id="48287" typeId="f1x55-48287"/>
|
||||
<channel id="48288" typeId="f1x55-48288"/>
|
||||
<channel id="48452" typeId="f1x55-48452"/>
|
||||
<channel id="48453" typeId="f1x55-48453"/>
|
||||
<channel id="48454" typeId="f1x55-48454"/>
|
||||
<channel id="48455" typeId="f1x55-48455"/>
|
||||
<channel id="48456" typeId="f1x55-48456"/>
|
||||
<channel id="48458" typeId="f1x55-48458"/>
|
||||
<channel id="48459" typeId="f1x55-48459"/>
|
||||
<channel id="48487" typeId="f1x55-48487"/>
|
||||
<channel id="48488" typeId="f1x55-48488"/>
|
||||
<channel id="48489" typeId="f1x55-48489"/>
|
||||
<channel id="48491" typeId="f1x55-48491"/>
|
||||
<channel id="48492" typeId="f1x55-48492"/>
|
||||
<channel id="48493" typeId="f1x55-48493"/>
|
||||
<channel id="48494" typeId="f1x55-48494"/>
|
||||
<channel id="48495" typeId="f1x55-48495"/>
|
||||
<channel id="48496" typeId="f1x55-48496"/>
|
||||
<channel id="48497" typeId="f1x55-48497"/>
|
||||
<channel id="48498" typeId="f1x55-48498"/>
|
||||
<channel id="48499" typeId="f1x55-48499"/>
|
||||
<channel id="48500" typeId="f1x55-48500"/>
|
||||
<channel id="48501" typeId="f1x55-48501"/>
|
||||
<channel id="48502" typeId="f1x55-48502"/>
|
||||
<channel id="48503" typeId="f1x55-48503"/>
|
||||
<channel id="48504" typeId="f1x55-48504"/>
|
||||
<channel id="48505" typeId="f1x55-48505"/>
|
||||
<channel id="48506" typeId="f1x55-48506"/>
|
||||
<channel id="48507" typeId="f1x55-48507"/>
|
||||
<channel id="48508" typeId="f1x55-48508"/>
|
||||
<channel id="48509" typeId="f1x55-48509"/>
|
||||
<channel id="48510" typeId="f1x55-48510"/>
|
||||
<channel id="48569" typeId="f1x55-48569"/>
|
||||
<channel id="48570" typeId="f1x55-48570"/>
|
||||
<channel id="48571" typeId="f1x55-48571"/>
|
||||
<channel id="48572" typeId="f1x55-48572"/>
|
||||
<channel id="48573" typeId="f1x55-48573"/>
|
||||
<channel id="48574" typeId="f1x55-48574"/>
|
||||
<channel id="48575" typeId="f1x55-48575"/>
|
||||
<channel id="48576" typeId="f1x55-48576"/>
|
||||
<channel id="48577" typeId="f1x55-48577"/>
|
||||
<channel id="48578" typeId="f1x55-48578"/>
|
||||
<channel id="48579" typeId="f1x55-48579"/>
|
||||
<channel id="48580" typeId="f1x55-48580"/>
|
||||
<channel id="48581" typeId="f1x55-48581"/>
|
||||
<channel id="48582" typeId="f1x55-48582"/>
|
||||
<channel id="48583" typeId="f1x55-48583"/>
|
||||
<channel id="48584" typeId="f1x55-48584"/>
|
||||
<channel id="48593" typeId="f1x55-48593"/>
|
||||
<channel id="48594" typeId="f1x55-48594"/>
|
||||
<channel id="48595" typeId="f1x55-48595"/>
|
||||
<channel id="48596" typeId="f1x55-48596"/>
|
||||
<channel id="48597" typeId="f1x55-48597"/>
|
||||
<channel id="48598" typeId="f1x55-48598"/>
|
||||
<channel id="48599" typeId="f1x55-48599"/>
|
||||
<channel id="48600" typeId="f1x55-48600"/>
|
||||
<channel id="48601" typeId="f1x55-48601"/>
|
||||
<channel id="48602" typeId="f1x55-48602"/>
|
||||
<channel id="48603" typeId="f1x55-48603"/>
|
||||
<channel id="48604" typeId="f1x55-48604"/>
|
||||
<channel id="48607" typeId="f1x55-48607"/>
|
||||
<channel id="48659" typeId="f1x55-48659"/>
|
||||
<channel id="48660" typeId="f1x55-48660"/>
|
||||
<channel id="48661" typeId="f1x55-48661"/>
|
||||
<channel id="48662" typeId="f1x55-48662"/>
|
||||
<channel id="48663" typeId="f1x55-48663"/>
|
||||
<channel id="48664" typeId="f1x55-48664"/>
|
||||
<channel id="48675" typeId="f1x55-48675"/>
|
||||
<channel id="48676" typeId="f1x55-48676"/>
|
||||
<channel id="48677" typeId="f1x55-48677"/>
|
||||
<channel id="48678" typeId="f1x55-48678"/>
|
||||
<channel id="48680" typeId="f1x55-48680"/>
|
||||
<channel id="48681" typeId="f1x55-48681"/>
|
||||
<channel id="48682" typeId="f1x55-48682"/>
|
||||
<channel id="48683" typeId="f1x55-48683"/>
|
||||
<channel id="48685" typeId="f1x55-48685"/>
|
||||
<channel id="48686" typeId="f1x55-48686"/>
|
||||
<channel id="48687" typeId="f1x55-48687"/>
|
||||
<channel id="48688" typeId="f1x55-48688"/>
|
||||
<channel id="48724" typeId="f1x55-48724"/>
|
||||
<channel id="48725" typeId="f1x55-48725"/>
|
||||
<channel id="48726" typeId="f1x55-48726"/>
|
||||
<channel id="48727" typeId="f1x55-48727"/>
|
||||
<channel id="48728" typeId="f1x55-48728"/>
|
||||
<channel id="48729" typeId="f1x55-48729"/>
|
||||
<channel id="48730" typeId="f1x55-48730"/>
|
||||
<channel id="48731" typeId="f1x55-48731"/>
|
||||
<channel id="48732" typeId="f1x55-48732"/>
|
||||
<channel id="48733" typeId="f1x55-48733"/>
|
||||
<channel id="48734" typeId="f1x55-48734"/>
|
||||
<channel id="48735" typeId="f1x55-48735"/>
|
||||
<channel id="48736" typeId="f1x55-48736"/>
|
||||
<channel id="48737" typeId="f1x55-48737"/>
|
||||
<channel id="48738" typeId="f1x55-48738"/>
|
||||
<channel id="48739" typeId="f1x55-48739"/>
|
||||
<channel id="48740" typeId="f1x55-48740"/>
|
||||
<channel id="48741" typeId="f1x55-48741"/>
|
||||
<channel id="48742" typeId="f1x55-48742"/>
|
||||
<channel id="48743" typeId="f1x55-48743"/>
|
||||
<channel id="48755" typeId="f1x55-48755"/>
|
||||
<channel id="48778" typeId="f1x55-48778"/>
|
||||
<channel id="48779" typeId="f1x55-48779"/>
|
||||
<channel id="48780" typeId="f1x55-48780"/>
|
||||
<channel id="48781" typeId="f1x55-48781"/>
|
||||
<channel id="48782" typeId="f1x55-48782"/>
|
||||
<channel id="48783" typeId="f1x55-48783"/>
|
||||
<channel id="48784" typeId="f1x55-48784"/>
|
||||
<channel id="48785" typeId="f1x55-48785"/>
|
||||
<channel id="48786" typeId="f1x55-48786"/>
|
||||
<channel id="48787" typeId="f1x55-48787"/>
|
||||
<channel id="48788" typeId="f1x55-48788"/>
|
||||
<channel id="48789" typeId="f1x55-48789"/>
|
||||
<channel id="48790" typeId="f1x55-48790"/>
|
||||
<channel id="48791" typeId="f1x55-48791"/>
|
||||
<channel id="48792" typeId="f1x55-48792"/>
|
||||
<channel id="48793" typeId="f1x55-48793"/>
|
||||
<channel id="48794" typeId="f1x55-48794"/>
|
||||
<channel id="48808" typeId="f1x55-48808"/>
|
||||
<channel id="48810" typeId="f1x55-48810"/>
|
||||
<channel id="48811" typeId="f1x55-48811"/>
|
||||
<channel id="48812" typeId="f1x55-48812"/>
|
||||
<channel id="48813" typeId="f1x55-48813"/>
|
||||
<channel id="48814" typeId="f1x55-48814"/>
|
||||
<channel id="48815" typeId="f1x55-48815"/>
|
||||
<channel id="48816" typeId="f1x55-48816"/>
|
||||
<channel id="48817" typeId="f1x55-48817"/>
|
||||
<channel id="48819" typeId="f1x55-48819"/>
|
||||
<channel id="48820" typeId="f1x55-48820"/>
|
||||
<channel id="48821" typeId="f1x55-48821"/>
|
||||
<channel id="48822" typeId="f1x55-48822"/>
|
||||
<channel id="48823" typeId="f1x55-48823"/>
|
||||
<channel id="48824" typeId="f1x55-48824"/>
|
||||
<channel id="48825" typeId="f1x55-48825"/>
|
||||
<channel id="48826" typeId="f1x55-48826"/>
|
||||
<channel id="48828" typeId="f1x55-48828"/>
|
||||
<channel id="48829" typeId="f1x55-48829"/>
|
||||
<channel id="48849" typeId="f1x55-48849"/>
|
||||
<channel id="48850" typeId="f1x55-48850"/>
|
||||
<channel id="48851" typeId="f1x55-48851"/>
|
||||
<channel id="48852" typeId="f1x55-48852"/>
|
||||
<channel id="48853" typeId="f1x55-48853"/>
|
||||
<channel id="48854" typeId="f1x55-48854"/>
|
||||
<channel id="48855" typeId="f1x55-48855"/>
|
||||
<channel id="48856" typeId="f1x55-48856"/>
|
||||
<channel id="48857" typeId="f1x55-48857"/>
|
||||
<channel id="48889" typeId="f1x55-48889"/>
|
||||
<channel id="48896" typeId="f1x55-48896"/>
|
||||
<channel id="48897" typeId="f1x55-48897"/>
|
||||
<channel id="48898" typeId="f1x55-48898"/>
|
||||
<channel id="48899" typeId="f1x55-48899"/>
|
||||
<channel id="48900" typeId="f1x55-48900"/>
|
||||
<channel id="48901" typeId="f1x55-48901"/>
|
||||
<channel id="48902" typeId="f1x55-48902"/>
|
||||
<channel id="48908" typeId="f1x55-48908"/>
|
||||
<channel id="48909" typeId="f1x55-48909"/>
|
||||
<channel id="48910" typeId="f1x55-48910"/>
|
||||
<channel id="48911" typeId="f1x55-48911"/>
|
||||
<channel id="48918" typeId="f1x55-48918"/>
|
||||
<channel id="48919" typeId="f1x55-48919"/>
|
||||
<channel id="48920" typeId="f1x55-48920"/>
|
||||
<channel id="48921" typeId="f1x55-48921"/>
|
||||
<channel id="48922" typeId="f1x55-48922"/>
|
||||
<channel id="48923" typeId="f1x55-48923"/>
|
||||
<channel id="48924" typeId="f1x55-48924"/>
|
||||
<channel id="48925" typeId="f1x55-48925"/>
|
||||
<channel id="48926" typeId="f1x55-48926"/>
|
||||
<channel id="48927" typeId="f1x55-48927"/>
|
||||
<channel id="48928" typeId="f1x55-48928"/>
|
||||
<channel id="48930" typeId="f1x55-48930"/>
|
||||
<channel id="48931" typeId="f1x55-48931"/>
|
||||
<channel id="48932" typeId="f1x55-48932"/>
|
||||
<channel id="48948" typeId="f1x55-48948"/>
|
||||
<channel id="48949" typeId="f1x55-48949"/>
|
||||
<channel id="48950" typeId="f1x55-48950"/>
|
||||
<channel id="48951" typeId="f1x55-48951"/>
|
||||
<channel id="48952" typeId="f1x55-48952"/>
|
||||
<channel id="48953" typeId="f1x55-48953"/>
|
||||
<channel id="48954" typeId="f1x55-48954"/>
|
||||
<channel id="48955" typeId="f1x55-48955"/>
|
||||
<channel id="48956" typeId="f1x55-48956"/>
|
||||
<channel id="48957" typeId="f1x55-48957"/>
|
||||
<channel id="48958" typeId="f1x55-48958"/>
|
||||
<channel id="48959" typeId="f1x55-48959"/>
|
||||
<channel id="48960" typeId="f1x55-48960"/>
|
||||
<channel id="48961" typeId="f1x55-48961"/>
|
||||
<channel id="48962" typeId="f1x55-48962"/>
|
||||
<channel id="48963" typeId="f1x55-48963"/>
|
||||
<channel id="48964" typeId="f1x55-48964"/>
|
||||
<channel id="48965" typeId="f1x55-48965"/>
|
||||
<channel id="48966" typeId="f1x55-48966"/>
|
||||
<channel id="48967" typeId="f1x55-48967"/>
|
||||
<channel id="48968" typeId="f1x55-48968"/>
|
||||
<channel id="48969" typeId="f1x55-48969"/>
|
||||
<channel id="48970" typeId="f1x55-48970"/>
|
||||
<channel id="48976" typeId="f1x55-48976"/>
|
||||
<channel id="48977" typeId="f1x55-48977"/>
|
||||
<channel id="48979" typeId="f1x55-48979"/>
|
||||
<channel id="48980" typeId="f1x55-48980"/>
|
||||
<channel id="48981" typeId="f1x55-48981"/>
|
||||
<channel id="48982" typeId="f1x55-48982"/>
|
||||
<channel id="48983" typeId="f1x55-48983"/>
|
||||
<channel id="48984" typeId="f1x55-48984"/>
|
||||
<channel id="48985" typeId="f1x55-48985"/>
|
||||
<channel id="48986" typeId="f1x55-48986"/>
|
||||
<channel id="48987" typeId="f1x55-48987"/>
|
||||
<channel id="48988" typeId="f1x55-48988"/>
|
||||
<channel id="48989" typeId="f1x55-48989"/>
|
||||
<channel id="48990" typeId="f1x55-48990"/>
|
||||
<channel id="48991" typeId="f1x55-48991"/>
|
||||
<channel id="48992" typeId="f1x55-48992"/>
|
||||
<channel id="48993" typeId="f1x55-48993"/>
|
||||
<channel id="48994" typeId="f1x55-48994"/>
|
||||
<channel id="48995" typeId="f1x55-48995"/>
|
||||
<channel id="48996" typeId="f1x55-48996"/>
|
||||
<channel id="48997" typeId="f1x55-48997"/>
|
||||
<channel id="48998" typeId="f1x55-48998"/>
|
||||
<channel id="48999" typeId="f1x55-48999"/>
|
||||
<channel id="49000" typeId="f1x55-49000"/>
|
||||
<channel id="49001" typeId="f1x55-49001"/>
|
||||
<channel id="49002" typeId="f1x55-49002"/>
|
||||
<channel id="49003" typeId="f1x55-49003"/>
|
||||
<channel id="49004" typeId="f1x55-49004"/>
|
||||
<channel id="49005" typeId="f1x55-49005"/>
|
||||
<channel id="49006" typeId="f1x55-49006"/>
|
||||
<channel id="49007" typeId="f1x55-49007"/>
|
||||
<channel id="49008" typeId="f1x55-49008"/>
|
||||
<channel id="49009" typeId="f1x55-49009"/>
|
||||
<channel id="49190" typeId="f1x55-49190"/>
|
||||
<channel id="49191" typeId="f1x55-49191"/>
|
||||
<channel id="49192" typeId="f1x55-49192"/>
|
||||
<channel id="49193" typeId="f1x55-49193"/>
|
||||
<channel id="49221" typeId="f1x55-49221"/>
|
||||
<channel id="49241" typeId="f1x55-49241"/>
|
||||
<channel id="49242" typeId="f1x55-49242"/>
|
||||
<channel id="49277" typeId="f1x55-49277"/>
|
||||
<channel id="49278" typeId="f1x55-49278"/>
|
||||
<channel id="49279" typeId="f1x55-49279"/>
|
||||
<channel id="49280" typeId="f1x55-49280"/>
|
||||
<channel id="49285" typeId="f1x55-49285"/>
|
||||
<channel id="49286" typeId="f1x55-49286"/>
|
||||
<channel id="49287" typeId="f1x55-49287"/>
|
||||
<channel id="49288" typeId="f1x55-49288"/>
|
||||
<channel id="49289" typeId="f1x55-49289"/>
|
||||
<channel id="49290" typeId="f1x55-49290"/>
|
||||
<channel id="49291" typeId="f1x55-49291"/>
|
||||
<channel id="49292" typeId="f1x55-49292"/>
|
||||
<channel id="49293" typeId="f1x55-49293"/>
|
||||
<channel id="49297" typeId="f1x55-49297"/>
|
||||
<channel id="49298" typeId="f1x55-49298"/>
|
||||
<channel id="49328" typeId="f1x55-49328"/>
|
||||
<channel id="49329" typeId="f1x55-49329"/>
|
||||
<channel id="49330" typeId="f1x55-49330"/>
|
||||
<channel id="49331" typeId="f1x55-49331"/>
|
||||
<channel id="49332" typeId="f1x55-49332"/>
|
||||
<channel id="49333" typeId="f1x55-49333"/>
|
||||
<channel id="49334" typeId="f1x55-49334"/>
|
||||
<channel id="49335" typeId="f1x55-49335"/>
|
||||
<channel id="49336" typeId="f1x55-49336"/>
|
||||
<channel id="49337" typeId="f1x55-49337"/>
|
||||
<channel id="49338" typeId="f1x55-49338"/>
|
||||
<channel id="49339" typeId="f1x55-49339"/>
|
||||
<channel id="49340" typeId="f1x55-49340"/>
|
||||
<channel id="49341" typeId="f1x55-49341"/>
|
||||
<channel id="49342" typeId="f1x55-49342"/>
|
||||
<channel id="49343" typeId="f1x55-49343"/>
|
||||
<channel id="49344" typeId="f1x55-49344"/>
|
||||
<channel id="49345" typeId="f1x55-49345"/>
|
||||
<channel id="49346" typeId="f1x55-49346"/>
|
||||
<channel id="49347" typeId="f1x55-49347"/>
|
||||
<channel id="49348" typeId="f1x55-49348"/>
|
||||
<channel id="49349" typeId="f1x55-49349"/>
|
||||
<channel id="49350" typeId="f1x55-49350"/>
|
||||
<channel id="49351" typeId="f1x55-49351"/>
|
||||
<channel id="49352" typeId="f1x55-49352"/>
|
||||
<channel id="49353" typeId="f1x55-49353"/>
|
||||
<channel id="49354" typeId="f1x55-49354"/>
|
||||
<channel id="49355" typeId="f1x55-49355"/>
|
||||
<channel id="49356" typeId="f1x55-49356"/>
|
||||
<channel id="49357" typeId="f1x55-49357"/>
|
||||
<channel id="49358" typeId="f1x55-49358"/>
|
||||
<channel id="49359" typeId="f1x55-49359"/>
|
||||
<channel id="49360" typeId="f1x55-49360"/>
|
||||
<channel id="49361" typeId="f1x55-49361"/>
|
||||
<channel id="49362" typeId="f1x55-49362"/>
|
||||
<channel id="49363" typeId="f1x55-49363"/>
|
||||
<channel id="49364" typeId="f1x55-49364"/>
|
||||
<channel id="49365" typeId="f1x55-49365"/>
|
||||
<channel id="49366" typeId="f1x55-49366"/>
|
||||
<channel id="49367" typeId="f1x55-49367"/>
|
||||
<channel id="49368" typeId="f1x55-49368"/>
|
||||
<channel id="49369" typeId="f1x55-49369"/>
|
||||
<channel id="49370" typeId="f1x55-49370"/>
|
||||
<channel id="49371" typeId="f1x55-49371"/>
|
||||
<channel id="49372" typeId="f1x55-49372"/>
|
||||
<channel id="49373" typeId="f1x55-49373"/>
|
||||
<channel id="49374" typeId="f1x55-49374"/>
|
||||
<channel id="49375" typeId="f1x55-49375"/>
|
||||
<channel id="49376" typeId="f1x55-49376"/>
|
||||
<channel id="49377" typeId="f1x55-49377"/>
|
||||
<channel id="49378" typeId="f1x55-49378"/>
|
||||
<channel id="49379" typeId="f1x55-49379"/>
|
||||
<channel id="49380" typeId="f1x55-49380"/>
|
||||
<channel id="49381" typeId="f1x55-49381"/>
|
||||
<channel id="49430" typeId="f1x55-49430"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
</thing:thing-descriptions>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,168 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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="f1x55-udp">
|
||||
<label>UDP Connected Nibe F1155 and F1255 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f1x55-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f1x55-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="hostName" type="text" required="true">
|
||||
<label>Host Name</label>
|
||||
<description>Network address of the NibeGW.</description>
|
||||
</parameter>
|
||||
<parameter name="port" type="integer">
|
||||
<label>UDP Port</label>
|
||||
<description>UDP port to listening data packets from the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="readCommandsPort" type="integer">
|
||||
<label>UDP Port for Read Commands</label>
|
||||
<description>UDP port to send read commands to the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="writeCommandsPort" type="integer">
|
||||
<label>UDP Port for Write Commands</label>
|
||||
<description>UDP port to send write commands to the NibeGW.</description>
|
||||
<default>10000</default>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Registers List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f1x55-serial">
|
||||
<label>Serial Port Connected F1155 and F1255 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f1x55-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f1x55-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="serialPort" type="text" required="true">
|
||||
<label>Serial Port</label>
|
||||
<description>Serial port to connect to the heat pump.</description>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToMODBUS40" type="boolean">
|
||||
<label>Enable Acknowledges to MODBUS40 Messages</label>
|
||||
<description>Binding emulates MODBUS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>true</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToRMU40" type="boolean">
|
||||
<label>Enable Acknowledges to RMU40 Messages</label>
|
||||
<description>Binding emulates RMU40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToSMS40" type="boolean">
|
||||
<label>Enable Acknowledges to SMS40 Messages</label>
|
||||
<description>Binding emulates SMS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f1x55-simulator">
|
||||
<label>Simulator for Nibe F1155 and F1255 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f1x55-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f1x55-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
</thing:thing-descriptions>
|
||||
@@ -0,0 +1,506 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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">
|
||||
|
||||
<channel-group-type id="f470-sensor-group-channels">
|
||||
<label>Sensors</label>
|
||||
<channels>
|
||||
<channel id="40004" typeId="f470-40004"/>
|
||||
<channel id="40005" typeId="f470-40005"/>
|
||||
<channel id="40006" typeId="f470-40006"/>
|
||||
<channel id="40007" typeId="f470-40007"/>
|
||||
<channel id="40008" typeId="f470-40008"/>
|
||||
<channel id="40012" typeId="f470-40012"/>
|
||||
<channel id="40013" typeId="f470-40013"/>
|
||||
<channel id="40014" typeId="f470-40014"/>
|
||||
<channel id="40020" typeId="f470-40020"/>
|
||||
<channel id="40022" typeId="f470-40022"/>
|
||||
<channel id="40023" typeId="f470-40023"/>
|
||||
<channel id="40024" typeId="f470-40024"/>
|
||||
<channel id="40025" typeId="f470-40025"/>
|
||||
<channel id="40026" typeId="f470-40026"/>
|
||||
<channel id="40030" typeId="f470-40030"/>
|
||||
<channel id="40031" typeId="f470-40031"/>
|
||||
<channel id="40032" typeId="f470-40032"/>
|
||||
<channel id="40033" typeId="f470-40033"/>
|
||||
<channel id="40043" typeId="f470-40043"/>
|
||||
<channel id="40044" typeId="f470-40044"/>
|
||||
<channel id="40054" typeId="f470-40054"/>
|
||||
<channel id="40067" typeId="f470-40067"/>
|
||||
<channel id="40071" typeId="f470-40071"/>
|
||||
<channel id="40074" typeId="f470-40074"/>
|
||||
<channel id="40075" typeId="f470-40075"/>
|
||||
<channel id="40076" typeId="f470-40076"/>
|
||||
<channel id="40079" typeId="f470-40079"/>
|
||||
<channel id="40081" typeId="f470-40081"/>
|
||||
<channel id="40083" typeId="f470-40083"/>
|
||||
<channel id="40122" typeId="f470-40122"/>
|
||||
<channel id="40127" typeId="f470-40127"/>
|
||||
<channel id="40128" typeId="f470-40128"/>
|
||||
<channel id="40129" typeId="f470-40129"/>
|
||||
<channel id="40159" typeId="f470-40159"/>
|
||||
<channel id="40160" typeId="f470-40160"/>
|
||||
<channel id="40161" typeId="f470-40161"/>
|
||||
<channel id="40162" typeId="f470-40162"/>
|
||||
<channel id="40163" typeId="f470-40163"/>
|
||||
<channel id="40164" typeId="f470-40164"/>
|
||||
<channel id="40165" typeId="f470-40165"/>
|
||||
<channel id="40166" typeId="f470-40166"/>
|
||||
<channel id="40167" typeId="f470-40167"/>
|
||||
<channel id="40168" typeId="f470-40168"/>
|
||||
<channel id="40169" typeId="f470-40169"/>
|
||||
<channel id="40170" typeId="f470-40170"/>
|
||||
<channel id="40185" typeId="f470-40185"/>
|
||||
<channel id="40188" typeId="f470-40188"/>
|
||||
<channel id="40189" typeId="f470-40189"/>
|
||||
<channel id="40190" typeId="f470-40190"/>
|
||||
<channel id="40191" typeId="f470-40191"/>
|
||||
<channel id="40192" typeId="f470-40192"/>
|
||||
<channel id="40193" typeId="f470-40193"/>
|
||||
<channel id="40194" typeId="f470-40194"/>
|
||||
<channel id="40195" typeId="f470-40195"/>
|
||||
<channel id="40212" typeId="f470-40212"/>
|
||||
<channel id="40217" typeId="f470-40217"/>
|
||||
<channel id="40218" typeId="f470-40218"/>
|
||||
<channel id="40219" typeId="f470-40219"/>
|
||||
<channel id="40220" typeId="f470-40220"/>
|
||||
<channel id="40305" typeId="f470-40305"/>
|
||||
<channel id="40306" typeId="f470-40306"/>
|
||||
<channel id="40307" typeId="f470-40307"/>
|
||||
<channel id="40308" typeId="f470-40308"/>
|
||||
<channel id="40339" typeId="f470-40339"/>
|
||||
<channel id="40340" typeId="f470-40340"/>
|
||||
<channel id="40341" typeId="f470-40341"/>
|
||||
<channel id="40342" typeId="f470-40342"/>
|
||||
<channel id="40365" typeId="f470-40365"/>
|
||||
<channel id="40366" typeId="f470-40366"/>
|
||||
<channel id="40367" typeId="f470-40367"/>
|
||||
<channel id="40368" typeId="f470-40368"/>
|
||||
<channel id="40755" typeId="f470-40755"/>
|
||||
<channel id="40868" typeId="f470-40868"/>
|
||||
<channel id="40870" typeId="f470-40870"/>
|
||||
<channel id="40871" typeId="f470-40871"/>
|
||||
<channel id="40872" typeId="f470-40872"/>
|
||||
<channel id="40873" typeId="f470-40873"/>
|
||||
<channel id="40874" typeId="f470-40874"/>
|
||||
<channel id="40875" typeId="f470-40875"/>
|
||||
<channel id="40876" typeId="f470-40876"/>
|
||||
<channel id="40877" typeId="f470-40877"/>
|
||||
<channel id="40878" typeId="f470-40878"/>
|
||||
<channel id="40889" typeId="f470-40889"/>
|
||||
<channel id="41027" typeId="f470-41027"/>
|
||||
<channel id="41189" typeId="f470-41189"/>
|
||||
<channel id="41190" typeId="f470-41190"/>
|
||||
<channel id="41191" typeId="f470-41191"/>
|
||||
<channel id="41256" typeId="f470-41256"/>
|
||||
<channel id="41257" typeId="f470-41257"/>
|
||||
<channel id="41258" typeId="f470-41258"/>
|
||||
<channel id="41265" typeId="f470-41265"/>
|
||||
<channel id="41266" typeId="f470-41266"/>
|
||||
<channel id="41267" typeId="f470-41267"/>
|
||||
<channel id="41268" typeId="f470-41268"/>
|
||||
<channel id="41269" typeId="f470-41269"/>
|
||||
<channel id="41270" typeId="f470-41270"/>
|
||||
<channel id="41271" typeId="f470-41271"/>
|
||||
<channel id="41272" typeId="f470-41272"/>
|
||||
<channel id="41273" typeId="f470-41273"/>
|
||||
<channel id="41274" typeId="f470-41274"/>
|
||||
<channel id="41928" typeId="f470-41928"/>
|
||||
<channel id="41929" typeId="f470-41929"/>
|
||||
<channel id="41930" typeId="f470-41930"/>
|
||||
<channel id="41931" typeId="f470-41931"/>
|
||||
<channel id="41932" typeId="f470-41932"/>
|
||||
<channel id="41933" typeId="f470-41933"/>
|
||||
<channel id="41934" typeId="f470-41934"/>
|
||||
<channel id="41935" typeId="f470-41935"/>
|
||||
<channel id="41936" typeId="f470-41936"/>
|
||||
<channel id="41937" typeId="f470-41937"/>
|
||||
<channel id="41938" typeId="f470-41938"/>
|
||||
<channel id="41939" typeId="f470-41939"/>
|
||||
<channel id="41940" typeId="f470-41940"/>
|
||||
<channel id="41941" typeId="f470-41941"/>
|
||||
<channel id="41942" typeId="f470-41942"/>
|
||||
<channel id="41943" typeId="f470-41943"/>
|
||||
<channel id="41944" typeId="f470-41944"/>
|
||||
<channel id="41945" typeId="f470-41945"/>
|
||||
<channel id="41946" typeId="f470-41946"/>
|
||||
<channel id="41947" typeId="f470-41947"/>
|
||||
<channel id="41948" typeId="f470-41948"/>
|
||||
<channel id="41949" typeId="f470-41949"/>
|
||||
<channel id="41950" typeId="f470-41950"/>
|
||||
<channel id="41951" typeId="f470-41951"/>
|
||||
<channel id="41952" typeId="f470-41952"/>
|
||||
<channel id="41953" typeId="f470-41953"/>
|
||||
<channel id="41954" typeId="f470-41954"/>
|
||||
<channel id="41955" typeId="f470-41955"/>
|
||||
<channel id="41956" typeId="f470-41956"/>
|
||||
<channel id="41957" typeId="f470-41957"/>
|
||||
<channel id="41958" typeId="f470-41958"/>
|
||||
<channel id="41959" typeId="f470-41959"/>
|
||||
<channel id="41960" typeId="f470-41960"/>
|
||||
<channel id="41961" typeId="f470-41961"/>
|
||||
<channel id="41962" typeId="f470-41962"/>
|
||||
<channel id="41963" typeId="f470-41963"/>
|
||||
<channel id="41964" typeId="f470-41964"/>
|
||||
<channel id="41965" typeId="f470-41965"/>
|
||||
<channel id="41966" typeId="f470-41966"/>
|
||||
<channel id="41967" typeId="f470-41967"/>
|
||||
<channel id="41968" typeId="f470-41968"/>
|
||||
<channel id="41969" typeId="f470-41969"/>
|
||||
<channel id="41980" typeId="f470-41980"/>
|
||||
<channel id="41981" typeId="f470-41981"/>
|
||||
<channel id="41982" typeId="f470-41982"/>
|
||||
<channel id="41983" typeId="f470-41983"/>
|
||||
<channel id="41984" typeId="f470-41984"/>
|
||||
<channel id="41985" typeId="f470-41985"/>
|
||||
<channel id="41986" typeId="f470-41986"/>
|
||||
<channel id="41987" typeId="f470-41987"/>
|
||||
<channel id="41988" typeId="f470-41988"/>
|
||||
<channel id="41989" typeId="f470-41989"/>
|
||||
<channel id="41990" typeId="f470-41990"/>
|
||||
<channel id="41991" typeId="f470-41991"/>
|
||||
<channel id="41992" typeId="f470-41992"/>
|
||||
<channel id="41993" typeId="f470-41993"/>
|
||||
<channel id="41994" typeId="f470-41994"/>
|
||||
<channel id="41995" typeId="f470-41995"/>
|
||||
<channel id="41996" typeId="f470-41996"/>
|
||||
<channel id="41997" typeId="f470-41997"/>
|
||||
<channel id="41998" typeId="f470-41998"/>
|
||||
<channel id="41999" typeId="f470-41999"/>
|
||||
<channel id="42000" typeId="f470-42000"/>
|
||||
<channel id="42001" typeId="f470-42001"/>
|
||||
<channel id="42002" typeId="f470-42002"/>
|
||||
<channel id="42003" typeId="f470-42003"/>
|
||||
<channel id="42004" typeId="f470-42004"/>
|
||||
<channel id="42005" typeId="f470-42005"/>
|
||||
<channel id="42006" typeId="f470-42006"/>
|
||||
<channel id="42007" typeId="f470-42007"/>
|
||||
<channel id="42008" typeId="f470-42008"/>
|
||||
<channel id="42009" typeId="f470-42009"/>
|
||||
<channel id="42010" typeId="f470-42010"/>
|
||||
<channel id="42012" typeId="f470-42012"/>
|
||||
<channel id="42014" typeId="f470-42014"/>
|
||||
<channel id="42016" typeId="f470-42016"/>
|
||||
<channel id="42018" typeId="f470-42018"/>
|
||||
<channel id="42020" typeId="f470-42020"/>
|
||||
<channel id="42022" typeId="f470-42022"/>
|
||||
<channel id="42024" typeId="f470-42024"/>
|
||||
<channel id="42026" typeId="f470-42026"/>
|
||||
<channel id="42028" typeId="f470-42028"/>
|
||||
<channel id="42030" typeId="f470-42030"/>
|
||||
<channel id="42033" typeId="f470-42033"/>
|
||||
<channel id="42034" typeId="f470-42034"/>
|
||||
<channel id="42035" typeId="f470-42035"/>
|
||||
<channel id="42037" typeId="f470-42037"/>
|
||||
<channel id="42075" typeId="f470-42075"/>
|
||||
<channel id="42080" typeId="f470-42080"/>
|
||||
<channel id="42081" typeId="f470-42081"/>
|
||||
<channel id="42082" typeId="f470-42082"/>
|
||||
<channel id="42083" typeId="f470-42083"/>
|
||||
<channel id="42084" typeId="f470-42084"/>
|
||||
<channel id="42085" typeId="f470-42085"/>
|
||||
<channel id="42086" typeId="f470-42086"/>
|
||||
<channel id="42087" typeId="f470-42087"/>
|
||||
<channel id="42100" typeId="f470-42100"/>
|
||||
<channel id="42101" typeId="f470-42101"/>
|
||||
<channel id="42136" typeId="f470-42136"/>
|
||||
<channel id="42137" typeId="f470-42137"/>
|
||||
<channel id="42138" typeId="f470-42138"/>
|
||||
<channel id="43001" typeId="f470-43001"/>
|
||||
<channel id="43006" typeId="f470-43006"/>
|
||||
<channel id="43007" typeId="f470-43007"/>
|
||||
<channel id="43008" typeId="f470-43008"/>
|
||||
<channel id="43009" typeId="f470-43009"/>
|
||||
<channel id="43013" typeId="f470-43013"/>
|
||||
<channel id="43081" typeId="f470-43081"/>
|
||||
<channel id="43084" typeId="f470-43084"/>
|
||||
<channel id="43086" typeId="f470-43086"/>
|
||||
<channel id="43091" typeId="f470-43091"/>
|
||||
<channel id="43093" typeId="f470-43093"/>
|
||||
<channel id="43094" typeId="f470-43094"/>
|
||||
<channel id="43095" typeId="f470-43095"/>
|
||||
<channel id="43096" typeId="f470-43096"/>
|
||||
<channel id="43105" typeId="f470-43105"/>
|
||||
<channel id="43108" typeId="f470-43108"/>
|
||||
<channel id="43158" typeId="f470-43158"/>
|
||||
<channel id="43159" typeId="f470-43159"/>
|
||||
<channel id="43160" typeId="f470-43160"/>
|
||||
<channel id="43161" typeId="f470-43161"/>
|
||||
<channel id="43180" typeId="f470-43180"/>
|
||||
<channel id="43239" typeId="f470-43239"/>
|
||||
<channel id="43383" typeId="f470-43383"/>
|
||||
<channel id="43416" typeId="f470-43416"/>
|
||||
<channel id="43420" typeId="f470-43420"/>
|
||||
<channel id="43424" typeId="f470-43424"/>
|
||||
<channel id="43427" typeId="f470-43427"/>
|
||||
<channel id="43431" typeId="f470-43431"/>
|
||||
<channel id="43435" typeId="f470-43435"/>
|
||||
<channel id="43460" typeId="f470-43460"/>
|
||||
<channel id="43514" typeId="f470-43514"/>
|
||||
<channel id="43516" typeId="f470-43516"/>
|
||||
<channel id="44331" typeId="f470-44331"/>
|
||||
<channel id="44744" typeId="f470-44744"/>
|
||||
<channel id="44745" typeId="f470-44745"/>
|
||||
<channel id="44746" typeId="f470-44746"/>
|
||||
<channel id="44750" typeId="f470-44750"/>
|
||||
<channel id="44874" typeId="f470-44874"/>
|
||||
<channel id="44878" typeId="f470-44878"/>
|
||||
<channel id="44879" typeId="f470-44879"/>
|
||||
<channel id="44896" typeId="f470-44896"/>
|
||||
<channel id="44897" typeId="f470-44897"/>
|
||||
<channel id="44898" typeId="f470-44898"/>
|
||||
<channel id="44899" typeId="f470-44899"/>
|
||||
<channel id="44908" typeId="f470-44908"/>
|
||||
<channel id="45001" typeId="f470-45001"/>
|
||||
<channel id="47291" typeId="f470-47291"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="f470-setting-group-channels">
|
||||
<label>Settings</label>
|
||||
<channels>
|
||||
<channel id="40879" typeId="f470-40879"/>
|
||||
<channel id="40880" typeId="f470-40880"/>
|
||||
<channel id="40881" typeId="f470-40881"/>
|
||||
<channel id="40882" typeId="f470-40882"/>
|
||||
<channel id="40883" typeId="f470-40883"/>
|
||||
<channel id="40884" typeId="f470-40884"/>
|
||||
<channel id="40885" typeId="f470-40885"/>
|
||||
<channel id="40886" typeId="f470-40886"/>
|
||||
<channel id="40887" typeId="f470-40887"/>
|
||||
<channel id="40888" typeId="f470-40888"/>
|
||||
<channel id="45171" typeId="f470-45171"/>
|
||||
<channel id="47004" typeId="f470-47004"/>
|
||||
<channel id="47005" typeId="f470-47005"/>
|
||||
<channel id="47006" typeId="f470-47006"/>
|
||||
<channel id="47007" typeId="f470-47007"/>
|
||||
<channel id="47008" typeId="f470-47008"/>
|
||||
<channel id="47009" typeId="f470-47009"/>
|
||||
<channel id="47010" typeId="f470-47010"/>
|
||||
<channel id="47011" typeId="f470-47011"/>
|
||||
<channel id="47012" typeId="f470-47012"/>
|
||||
<channel id="47013" typeId="f470-47013"/>
|
||||
<channel id="47014" typeId="f470-47014"/>
|
||||
<channel id="47015" typeId="f470-47015"/>
|
||||
<channel id="47016" typeId="f470-47016"/>
|
||||
<channel id="47017" typeId="f470-47017"/>
|
||||
<channel id="47018" typeId="f470-47018"/>
|
||||
<channel id="47019" typeId="f470-47019"/>
|
||||
<channel id="47020" typeId="f470-47020"/>
|
||||
<channel id="47021" typeId="f470-47021"/>
|
||||
<channel id="47022" typeId="f470-47022"/>
|
||||
<channel id="47023" typeId="f470-47023"/>
|
||||
<channel id="47024" typeId="f470-47024"/>
|
||||
<channel id="47025" typeId="f470-47025"/>
|
||||
<channel id="47026" typeId="f470-47026"/>
|
||||
<channel id="47027" typeId="f470-47027"/>
|
||||
<channel id="47028" typeId="f470-47028"/>
|
||||
<channel id="47029" typeId="f470-47029"/>
|
||||
<channel id="47030" typeId="f470-47030"/>
|
||||
<channel id="47031" typeId="f470-47031"/>
|
||||
<channel id="47032" typeId="f470-47032"/>
|
||||
<channel id="47033" typeId="f470-47033"/>
|
||||
<channel id="47034" typeId="f470-47034"/>
|
||||
<channel id="47035" typeId="f470-47035"/>
|
||||
<channel id="47036" typeId="f470-47036"/>
|
||||
<channel id="47041" typeId="f470-47041"/>
|
||||
<channel id="47043" typeId="f470-47043"/>
|
||||
<channel id="47044" typeId="f470-47044"/>
|
||||
<channel id="47045" typeId="f470-47045"/>
|
||||
<channel id="47046" typeId="f470-47046"/>
|
||||
<channel id="47047" typeId="f470-47047"/>
|
||||
<channel id="47048" typeId="f470-47048"/>
|
||||
<channel id="47049" typeId="f470-47049"/>
|
||||
<channel id="47050" typeId="f470-47050"/>
|
||||
<channel id="47051" typeId="f470-47051"/>
|
||||
<channel id="47054" typeId="f470-47054"/>
|
||||
<channel id="47055" typeId="f470-47055"/>
|
||||
<channel id="47131" typeId="f470-47131"/>
|
||||
<channel id="47137" typeId="f470-47137"/>
|
||||
<channel id="47138" typeId="f470-47138"/>
|
||||
<channel id="47212" typeId="f470-47212"/>
|
||||
<channel id="47214" typeId="f470-47214"/>
|
||||
<channel id="47261" typeId="f470-47261"/>
|
||||
<channel id="47262" typeId="f470-47262"/>
|
||||
<channel id="47263" typeId="f470-47263"/>
|
||||
<channel id="47264" typeId="f470-47264"/>
|
||||
<channel id="47265" typeId="f470-47265"/>
|
||||
<channel id="47266" typeId="f470-47266"/>
|
||||
<channel id="47267" typeId="f470-47267"/>
|
||||
<channel id="47268" typeId="f470-47268"/>
|
||||
<channel id="47269" typeId="f470-47269"/>
|
||||
<channel id="47270" typeId="f470-47270"/>
|
||||
<channel id="47271" typeId="f470-47271"/>
|
||||
<channel id="47272" typeId="f470-47272"/>
|
||||
<channel id="47273" typeId="f470-47273"/>
|
||||
<channel id="47274" typeId="f470-47274"/>
|
||||
<channel id="47275" typeId="f470-47275"/>
|
||||
<channel id="47276" typeId="f470-47276"/>
|
||||
<channel id="47277" typeId="f470-47277"/>
|
||||
<channel id="47278" typeId="f470-47278"/>
|
||||
<channel id="47279" typeId="f470-47279"/>
|
||||
<channel id="47280" typeId="f470-47280"/>
|
||||
<channel id="47281" typeId="f470-47281"/>
|
||||
<channel id="47282" typeId="f470-47282"/>
|
||||
<channel id="47283" typeId="f470-47283"/>
|
||||
<channel id="47284" typeId="f470-47284"/>
|
||||
<channel id="47285" typeId="f470-47285"/>
|
||||
<channel id="47286" typeId="f470-47286"/>
|
||||
<channel id="47287" typeId="f470-47287"/>
|
||||
<channel id="47288" typeId="f470-47288"/>
|
||||
<channel id="47289" typeId="f470-47289"/>
|
||||
<channel id="47290" typeId="f470-47290"/>
|
||||
<channel id="47292" typeId="f470-47292"/>
|
||||
<channel id="47293" typeId="f470-47293"/>
|
||||
<channel id="47300" typeId="f470-47300"/>
|
||||
<channel id="47301" typeId="f470-47301"/>
|
||||
<channel id="47302" typeId="f470-47302"/>
|
||||
<channel id="47303" typeId="f470-47303"/>
|
||||
<channel id="47304" typeId="f470-47304"/>
|
||||
<channel id="47305" typeId="f470-47305"/>
|
||||
<channel id="47306" typeId="f470-47306"/>
|
||||
<channel id="47307" typeId="f470-47307"/>
|
||||
<channel id="47308" typeId="f470-47308"/>
|
||||
<channel id="47309" typeId="f470-47309"/>
|
||||
<channel id="47310" typeId="f470-47310"/>
|
||||
<channel id="47351" typeId="f470-47351"/>
|
||||
<channel id="47352" typeId="f470-47352"/>
|
||||
<channel id="47365" typeId="f470-47365"/>
|
||||
<channel id="47366" typeId="f470-47366"/>
|
||||
<channel id="47367" typeId="f470-47367"/>
|
||||
<channel id="47368" typeId="f470-47368"/>
|
||||
<channel id="47370" typeId="f470-47370"/>
|
||||
<channel id="47371" typeId="f470-47371"/>
|
||||
<channel id="47372" typeId="f470-47372"/>
|
||||
<channel id="47374" typeId="f470-47374"/>
|
||||
<channel id="47375" typeId="f470-47375"/>
|
||||
<channel id="47376" typeId="f470-47376"/>
|
||||
<channel id="47377" typeId="f470-47377"/>
|
||||
<channel id="47378" typeId="f470-47378"/>
|
||||
<channel id="47379" typeId="f470-47379"/>
|
||||
<channel id="47384" typeId="f470-47384"/>
|
||||
<channel id="47385" typeId="f470-47385"/>
|
||||
<channel id="47387" typeId="f470-47387"/>
|
||||
<channel id="47388" typeId="f470-47388"/>
|
||||
<channel id="47389" typeId="f470-47389"/>
|
||||
<channel id="47391" typeId="f470-47391"/>
|
||||
<channel id="47392" typeId="f470-47392"/>
|
||||
<channel id="47393" typeId="f470-47393"/>
|
||||
<channel id="47394" typeId="f470-47394"/>
|
||||
<channel id="47395" typeId="f470-47395"/>
|
||||
<channel id="47396" typeId="f470-47396"/>
|
||||
<channel id="47397" typeId="f470-47397"/>
|
||||
<channel id="47398" typeId="f470-47398"/>
|
||||
<channel id="47399" typeId="f470-47399"/>
|
||||
<channel id="47400" typeId="f470-47400"/>
|
||||
<channel id="47401" typeId="f470-47401"/>
|
||||
<channel id="47402" typeId="f470-47402"/>
|
||||
<channel id="47442" typeId="f470-47442"/>
|
||||
<channel id="47525" typeId="f470-47525"/>
|
||||
<channel id="47536" typeId="f470-47536"/>
|
||||
<channel id="47537" typeId="f470-47537"/>
|
||||
<channel id="47538" typeId="f470-47538"/>
|
||||
<channel id="47539" typeId="f470-47539"/>
|
||||
<channel id="47556" typeId="f470-47556"/>
|
||||
<channel id="47564" typeId="f470-47564"/>
|
||||
<channel id="47565" typeId="f470-47565"/>
|
||||
<channel id="47567" typeId="f470-47567"/>
|
||||
<channel id="48043" typeId="f470-48043"/>
|
||||
<channel id="48132" typeId="f470-48132"/>
|
||||
<channel id="48282" typeId="f470-48282"/>
|
||||
<channel id="48283" typeId="f470-48283"/>
|
||||
<channel id="48284" typeId="f470-48284"/>
|
||||
<channel id="48285" typeId="f470-48285"/>
|
||||
<channel id="48488" typeId="f470-48488"/>
|
||||
<channel id="48489" typeId="f470-48489"/>
|
||||
<channel id="48491" typeId="f470-48491"/>
|
||||
<channel id="48492" typeId="f470-48492"/>
|
||||
<channel id="48493" typeId="f470-48493"/>
|
||||
<channel id="48494" typeId="f470-48494"/>
|
||||
<channel id="48495" typeId="f470-48495"/>
|
||||
<channel id="48496" typeId="f470-48496"/>
|
||||
<channel id="48497" typeId="f470-48497"/>
|
||||
<channel id="48498" typeId="f470-48498"/>
|
||||
<channel id="48499" typeId="f470-48499"/>
|
||||
<channel id="48500" typeId="f470-48500"/>
|
||||
<channel id="48501" typeId="f470-48501"/>
|
||||
<channel id="48502" typeId="f470-48502"/>
|
||||
<channel id="48503" typeId="f470-48503"/>
|
||||
<channel id="48504" typeId="f470-48504"/>
|
||||
<channel id="48505" typeId="f470-48505"/>
|
||||
<channel id="48506" typeId="f470-48506"/>
|
||||
<channel id="48507" typeId="f470-48507"/>
|
||||
<channel id="48508" typeId="f470-48508"/>
|
||||
<channel id="48509" typeId="f470-48509"/>
|
||||
<channel id="48510" typeId="f470-48510"/>
|
||||
<channel id="48569" typeId="f470-48569"/>
|
||||
<channel id="48570" typeId="f470-48570"/>
|
||||
<channel id="48571" typeId="f470-48571"/>
|
||||
<channel id="48572" typeId="f470-48572"/>
|
||||
<channel id="48573" typeId="f470-48573"/>
|
||||
<channel id="48574" typeId="f470-48574"/>
|
||||
<channel id="48575" typeId="f470-48575"/>
|
||||
<channel id="48576" typeId="f470-48576"/>
|
||||
<channel id="48577" typeId="f470-48577"/>
|
||||
<channel id="48578" typeId="f470-48578"/>
|
||||
<channel id="48579" typeId="f470-48579"/>
|
||||
<channel id="48580" typeId="f470-48580"/>
|
||||
<channel id="48675" typeId="f470-48675"/>
|
||||
<channel id="48676" typeId="f470-48676"/>
|
||||
<channel id="48677" typeId="f470-48677"/>
|
||||
<channel id="48678" typeId="f470-48678"/>
|
||||
<channel id="48680" typeId="f470-48680"/>
|
||||
<channel id="48681" typeId="f470-48681"/>
|
||||
<channel id="48682" typeId="f470-48682"/>
|
||||
<channel id="48683" typeId="f470-48683"/>
|
||||
<channel id="48685" typeId="f470-48685"/>
|
||||
<channel id="48686" typeId="f470-48686"/>
|
||||
<channel id="48687" typeId="f470-48687"/>
|
||||
<channel id="48688" typeId="f470-48688"/>
|
||||
<channel id="48732" typeId="f470-48732"/>
|
||||
<channel id="48733" typeId="f470-48733"/>
|
||||
<channel id="48734" typeId="f470-48734"/>
|
||||
<channel id="48735" typeId="f470-48735"/>
|
||||
<channel id="48736" typeId="f470-48736"/>
|
||||
<channel id="48737" typeId="f470-48737"/>
|
||||
<channel id="48738" typeId="f470-48738"/>
|
||||
<channel id="48739" typeId="f470-48739"/>
|
||||
<channel id="48755" typeId="f470-48755"/>
|
||||
<channel id="48794" typeId="f470-48794"/>
|
||||
<channel id="48810" typeId="f470-48810"/>
|
||||
<channel id="48811" typeId="f470-48811"/>
|
||||
<channel id="48812" typeId="f470-48812"/>
|
||||
<channel id="48813" typeId="f470-48813"/>
|
||||
<channel id="48814" typeId="f470-48814"/>
|
||||
<channel id="48815" typeId="f470-48815"/>
|
||||
<channel id="48816" typeId="f470-48816"/>
|
||||
<channel id="48817" typeId="f470-48817"/>
|
||||
<channel id="48889" typeId="f470-48889"/>
|
||||
<channel id="48926" typeId="f470-48926"/>
|
||||
<channel id="48927" typeId="f470-48927"/>
|
||||
<channel id="48930" typeId="f470-48930"/>
|
||||
<channel id="48931" typeId="f470-48931"/>
|
||||
<channel id="48932" typeId="f470-48932"/>
|
||||
<channel id="48968" typeId="f470-48968"/>
|
||||
<channel id="48970" typeId="f470-48970"/>
|
||||
<channel id="48976" typeId="f470-48976"/>
|
||||
<channel id="49289" typeId="f470-49289"/>
|
||||
<channel id="49297" typeId="f470-49297"/>
|
||||
<channel id="49298" typeId="f470-49298"/>
|
||||
<channel id="49358" typeId="f470-49358"/>
|
||||
<channel id="49359" typeId="f470-49359"/>
|
||||
<channel id="49360" typeId="f470-49360"/>
|
||||
<channel id="49361" typeId="f470-49361"/>
|
||||
<channel id="49362" typeId="f470-49362"/>
|
||||
<channel id="49363" typeId="f470-49363"/>
|
||||
<channel id="49364" typeId="f470-49364"/>
|
||||
<channel id="49365" typeId="f470-49365"/>
|
||||
<channel id="49366" typeId="f470-49366"/>
|
||||
<channel id="49431" typeId="f470-49431"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
|
||||
</thing:thing-descriptions>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,168 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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="f470-udp">
|
||||
<label>UDP Connected Nibe F470 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f470-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f470-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="hostName" type="text" required="true">
|
||||
<label>Host Name</label>
|
||||
<description>Network address of the NibeGW.</description>
|
||||
</parameter>
|
||||
<parameter name="port" type="integer">
|
||||
<label>UDP Port</label>
|
||||
<description>UDP port to listening data packets from the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="readCommandsPort" type="integer">
|
||||
<label>UDP Port for Read Commands</label>
|
||||
<description>UDP port to send read commands to the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="writeCommandsPort" type="integer">
|
||||
<label>UDP Port for Write Commands</label>
|
||||
<description>UDP port to send write commands to the NibeGW.</description>
|
||||
<default>10000</default>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Registers List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f470-serial">
|
||||
<label>Serial Port Connected F470 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f470-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f470-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="serialPort" type="text" required="true">
|
||||
<label>Serial Port</label>
|
||||
<description>Serial port to connect to the heat pump.</description>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToMODBUS40" type="boolean">
|
||||
<label>Enable Acknowledges to MODBUS40 Messages</label>
|
||||
<description>Binding emulates MODBUS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>true</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToRMU40" type="boolean">
|
||||
<label>Enable Acknowledges to RMU40 Messages</label>
|
||||
<description>Binding emulates RMU40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToSMS40" type="boolean">
|
||||
<label>Enable Acknowledges to SMS40 Messages</label>
|
||||
<description>Binding emulates SMS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f470-simulator">
|
||||
<label>Simulator for Nibe F470 Heat Pumps</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f470-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f470-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 44266, 47004</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
</thing:thing-descriptions>
|
||||
@@ -0,0 +1,658 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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">
|
||||
|
||||
<channel-group-type id="f750-sensor-group-channels">
|
||||
<label>Sensors</label>
|
||||
<channels>
|
||||
<channel id="32260" typeId="f750-32260"/>
|
||||
<channel id="40004" typeId="f750-40004"/>
|
||||
<channel id="40005" typeId="f750-40005"/>
|
||||
<channel id="40006" typeId="f750-40006"/>
|
||||
<channel id="40007" typeId="f750-40007"/>
|
||||
<channel id="40008" typeId="f750-40008"/>
|
||||
<channel id="40012" typeId="f750-40012"/>
|
||||
<channel id="40013" typeId="f750-40013"/>
|
||||
<channel id="40014" typeId="f750-40014"/>
|
||||
<channel id="40017" typeId="f750-40017"/>
|
||||
<channel id="40018" typeId="f750-40018"/>
|
||||
<channel id="40019" typeId="f750-40019"/>
|
||||
<channel id="40020" typeId="f750-40020"/>
|
||||
<channel id="40022" typeId="f750-40022"/>
|
||||
<channel id="40025" typeId="f750-40025"/>
|
||||
<channel id="40026" typeId="f750-40026"/>
|
||||
<channel id="40030" typeId="f750-40030"/>
|
||||
<channel id="40031" typeId="f750-40031"/>
|
||||
<channel id="40032" typeId="f750-40032"/>
|
||||
<channel id="40033" typeId="f750-40033"/>
|
||||
<channel id="40043" typeId="f750-40043"/>
|
||||
<channel id="40044" typeId="f750-40044"/>
|
||||
<channel id="40047" typeId="f750-40047"/>
|
||||
<channel id="40048" typeId="f750-40048"/>
|
||||
<channel id="40050" typeId="f750-40050"/>
|
||||
<channel id="40051" typeId="f750-40051"/>
|
||||
<channel id="40054" typeId="f750-40054"/>
|
||||
<channel id="40067" typeId="f750-40067"/>
|
||||
<channel id="40071" typeId="f750-40071"/>
|
||||
<channel id="40072" typeId="f750-40072"/>
|
||||
<channel id="40074" typeId="f750-40074"/>
|
||||
<channel id="40077" typeId="f750-40077"/>
|
||||
<channel id="40078" typeId="f750-40078"/>
|
||||
<channel id="40079" typeId="f750-40079"/>
|
||||
<channel id="40081" typeId="f750-40081"/>
|
||||
<channel id="40083" typeId="f750-40083"/>
|
||||
<channel id="40122" typeId="f750-40122"/>
|
||||
<channel id="40127" typeId="f750-40127"/>
|
||||
<channel id="40128" typeId="f750-40128"/>
|
||||
<channel id="40129" typeId="f750-40129"/>
|
||||
<channel id="40141" typeId="f750-40141"/>
|
||||
<channel id="40142" typeId="f750-40142"/>
|
||||
<channel id="40143" typeId="f750-40143"/>
|
||||
<channel id="40144" typeId="f750-40144"/>
|
||||
<channel id="40157" typeId="f750-40157"/>
|
||||
<channel id="40158" typeId="f750-40158"/>
|
||||
<channel id="40159" typeId="f750-40159"/>
|
||||
<channel id="40160" typeId="f750-40160"/>
|
||||
<channel id="40161" typeId="f750-40161"/>
|
||||
<channel id="40162" typeId="f750-40162"/>
|
||||
<channel id="40163" typeId="f750-40163"/>
|
||||
<channel id="40164" typeId="f750-40164"/>
|
||||
<channel id="40165" typeId="f750-40165"/>
|
||||
<channel id="40166" typeId="f750-40166"/>
|
||||
<channel id="40167" typeId="f750-40167"/>
|
||||
<channel id="40168" typeId="f750-40168"/>
|
||||
<channel id="40169" typeId="f750-40169"/>
|
||||
<channel id="40170" typeId="f750-40170"/>
|
||||
<channel id="40185" typeId="f750-40185"/>
|
||||
<channel id="40188" typeId="f750-40188"/>
|
||||
<channel id="40189" typeId="f750-40189"/>
|
||||
<channel id="40190" typeId="f750-40190"/>
|
||||
<channel id="40191" typeId="f750-40191"/>
|
||||
<channel id="40192" typeId="f750-40192"/>
|
||||
<channel id="40193" typeId="f750-40193"/>
|
||||
<channel id="40194" typeId="f750-40194"/>
|
||||
<channel id="40195" typeId="f750-40195"/>
|
||||
<channel id="40212" typeId="f750-40212"/>
|
||||
<channel id="40217" typeId="f750-40217"/>
|
||||
<channel id="40218" typeId="f750-40218"/>
|
||||
<channel id="40219" typeId="f750-40219"/>
|
||||
<channel id="40220" typeId="f750-40220"/>
|
||||
<channel id="40305" typeId="f750-40305"/>
|
||||
<channel id="40306" typeId="f750-40306"/>
|
||||
<channel id="40307" typeId="f750-40307"/>
|
||||
<channel id="40308" typeId="f750-40308"/>
|
||||
<channel id="40316" typeId="f750-40316"/>
|
||||
<channel id="40317" typeId="f750-40317"/>
|
||||
<channel id="40321" typeId="f750-40321"/>
|
||||
<channel id="40322" typeId="f750-40322"/>
|
||||
<channel id="40323" typeId="f750-40323"/>
|
||||
<channel id="40324" typeId="f750-40324"/>
|
||||
<channel id="40326" typeId="f750-40326"/>
|
||||
<channel id="40327" typeId="f750-40327"/>
|
||||
<channel id="40328" typeId="f750-40328"/>
|
||||
<channel id="40329" typeId="f750-40329"/>
|
||||
<channel id="40330" typeId="f750-40330"/>
|
||||
<channel id="40331" typeId="f750-40331"/>
|
||||
<channel id="40332" typeId="f750-40332"/>
|
||||
<channel id="40339" typeId="f750-40339"/>
|
||||
<channel id="40340" typeId="f750-40340"/>
|
||||
<channel id="40341" typeId="f750-40341"/>
|
||||
<channel id="40342" typeId="f750-40342"/>
|
||||
<channel id="40364" typeId="f750-40364"/>
|
||||
<channel id="40365" typeId="f750-40365"/>
|
||||
<channel id="40366" typeId="f750-40366"/>
|
||||
<channel id="40367" typeId="f750-40367"/>
|
||||
<channel id="40368" typeId="f750-40368"/>
|
||||
<channel id="40370" typeId="f750-40370"/>
|
||||
<channel id="40755" typeId="f750-40755"/>
|
||||
<channel id="40760" typeId="f750-40760"/>
|
||||
<channel id="40762" typeId="f750-40762"/>
|
||||
<channel id="40763" typeId="f750-40763"/>
|
||||
<channel id="40771" typeId="f750-40771"/>
|
||||
<channel id="40868" typeId="f750-40868"/>
|
||||
<channel id="40870" typeId="f750-40870"/>
|
||||
<channel id="40871" typeId="f750-40871"/>
|
||||
<channel id="40872" typeId="f750-40872"/>
|
||||
<channel id="40873" typeId="f750-40873"/>
|
||||
<channel id="40874" typeId="f750-40874"/>
|
||||
<channel id="40875" typeId="f750-40875"/>
|
||||
<channel id="40876" typeId="f750-40876"/>
|
||||
<channel id="40877" typeId="f750-40877"/>
|
||||
<channel id="40878" typeId="f750-40878"/>
|
||||
<channel id="40889" typeId="f750-40889"/>
|
||||
<channel id="40918" typeId="f750-40918"/>
|
||||
<channel id="40932" typeId="f750-40932"/>
|
||||
<channel id="40934" typeId="f750-40934"/>
|
||||
<channel id="40935" typeId="f750-40935"/>
|
||||
<channel id="40993" typeId="f750-40993"/>
|
||||
<channel id="40994" typeId="f750-40994"/>
|
||||
<channel id="40995" typeId="f750-40995"/>
|
||||
<channel id="40997" typeId="f750-40997"/>
|
||||
<channel id="41026" typeId="f750-41026"/>
|
||||
<channel id="41027" typeId="f750-41027"/>
|
||||
<channel id="41189" typeId="f750-41189"/>
|
||||
<channel id="41190" typeId="f750-41190"/>
|
||||
<channel id="41191" typeId="f750-41191"/>
|
||||
<channel id="41214" typeId="f750-41214"/>
|
||||
<channel id="41256" typeId="f750-41256"/>
|
||||
<channel id="41257" typeId="f750-41257"/>
|
||||
<channel id="41258" typeId="f750-41258"/>
|
||||
<channel id="41265" typeId="f750-41265"/>
|
||||
<channel id="41266" typeId="f750-41266"/>
|
||||
<channel id="41267" typeId="f750-41267"/>
|
||||
<channel id="41268" typeId="f750-41268"/>
|
||||
<channel id="41269" typeId="f750-41269"/>
|
||||
<channel id="41270" typeId="f750-41270"/>
|
||||
<channel id="41271" typeId="f750-41271"/>
|
||||
<channel id="41272" typeId="f750-41272"/>
|
||||
<channel id="41273" typeId="f750-41273"/>
|
||||
<channel id="41274" typeId="f750-41274"/>
|
||||
<channel id="41928" typeId="f750-41928"/>
|
||||
<channel id="41929" typeId="f750-41929"/>
|
||||
<channel id="41930" typeId="f750-41930"/>
|
||||
<channel id="41931" typeId="f750-41931"/>
|
||||
<channel id="41932" typeId="f750-41932"/>
|
||||
<channel id="41933" typeId="f750-41933"/>
|
||||
<channel id="41934" typeId="f750-41934"/>
|
||||
<channel id="41935" typeId="f750-41935"/>
|
||||
<channel id="41936" typeId="f750-41936"/>
|
||||
<channel id="41937" typeId="f750-41937"/>
|
||||
<channel id="41938" typeId="f750-41938"/>
|
||||
<channel id="41939" typeId="f750-41939"/>
|
||||
<channel id="41940" typeId="f750-41940"/>
|
||||
<channel id="41941" typeId="f750-41941"/>
|
||||
<channel id="41942" typeId="f750-41942"/>
|
||||
<channel id="41943" typeId="f750-41943"/>
|
||||
<channel id="41944" typeId="f750-41944"/>
|
||||
<channel id="41945" typeId="f750-41945"/>
|
||||
<channel id="41946" typeId="f750-41946"/>
|
||||
<channel id="41947" typeId="f750-41947"/>
|
||||
<channel id="41948" typeId="f750-41948"/>
|
||||
<channel id="41949" typeId="f750-41949"/>
|
||||
<channel id="41950" typeId="f750-41950"/>
|
||||
<channel id="41951" typeId="f750-41951"/>
|
||||
<channel id="41952" typeId="f750-41952"/>
|
||||
<channel id="41953" typeId="f750-41953"/>
|
||||
<channel id="41954" typeId="f750-41954"/>
|
||||
<channel id="41955" typeId="f750-41955"/>
|
||||
<channel id="41956" typeId="f750-41956"/>
|
||||
<channel id="41957" typeId="f750-41957"/>
|
||||
<channel id="41958" typeId="f750-41958"/>
|
||||
<channel id="41959" typeId="f750-41959"/>
|
||||
<channel id="41960" typeId="f750-41960"/>
|
||||
<channel id="41961" typeId="f750-41961"/>
|
||||
<channel id="41962" typeId="f750-41962"/>
|
||||
<channel id="41963" typeId="f750-41963"/>
|
||||
<channel id="41964" typeId="f750-41964"/>
|
||||
<channel id="41965" typeId="f750-41965"/>
|
||||
<channel id="41966" typeId="f750-41966"/>
|
||||
<channel id="41967" typeId="f750-41967"/>
|
||||
<channel id="41968" typeId="f750-41968"/>
|
||||
<channel id="41969" typeId="f750-41969"/>
|
||||
<channel id="41980" typeId="f750-41980"/>
|
||||
<channel id="41981" typeId="f750-41981"/>
|
||||
<channel id="41982" typeId="f750-41982"/>
|
||||
<channel id="41983" typeId="f750-41983"/>
|
||||
<channel id="41984" typeId="f750-41984"/>
|
||||
<channel id="41985" typeId="f750-41985"/>
|
||||
<channel id="41986" typeId="f750-41986"/>
|
||||
<channel id="41987" typeId="f750-41987"/>
|
||||
<channel id="41988" typeId="f750-41988"/>
|
||||
<channel id="41989" typeId="f750-41989"/>
|
||||
<channel id="41990" typeId="f750-41990"/>
|
||||
<channel id="41991" typeId="f750-41991"/>
|
||||
<channel id="41992" typeId="f750-41992"/>
|
||||
<channel id="41993" typeId="f750-41993"/>
|
||||
<channel id="41994" typeId="f750-41994"/>
|
||||
<channel id="41995" typeId="f750-41995"/>
|
||||
<channel id="41996" typeId="f750-41996"/>
|
||||
<channel id="41997" typeId="f750-41997"/>
|
||||
<channel id="41998" typeId="f750-41998"/>
|
||||
<channel id="41999" typeId="f750-41999"/>
|
||||
<channel id="42000" typeId="f750-42000"/>
|
||||
<channel id="42001" typeId="f750-42001"/>
|
||||
<channel id="42002" typeId="f750-42002"/>
|
||||
<channel id="42003" typeId="f750-42003"/>
|
||||
<channel id="42004" typeId="f750-42004"/>
|
||||
<channel id="42005" typeId="f750-42005"/>
|
||||
<channel id="42006" typeId="f750-42006"/>
|
||||
<channel id="42007" typeId="f750-42007"/>
|
||||
<channel id="42008" typeId="f750-42008"/>
|
||||
<channel id="42009" typeId="f750-42009"/>
|
||||
<channel id="42010" typeId="f750-42010"/>
|
||||
<channel id="42012" typeId="f750-42012"/>
|
||||
<channel id="42014" typeId="f750-42014"/>
|
||||
<channel id="42016" typeId="f750-42016"/>
|
||||
<channel id="42018" typeId="f750-42018"/>
|
||||
<channel id="42020" typeId="f750-42020"/>
|
||||
<channel id="42022" typeId="f750-42022"/>
|
||||
<channel id="42024" typeId="f750-42024"/>
|
||||
<channel id="42026" typeId="f750-42026"/>
|
||||
<channel id="42028" typeId="f750-42028"/>
|
||||
<channel id="42030" typeId="f750-42030"/>
|
||||
<channel id="42033" typeId="f750-42033"/>
|
||||
<channel id="42034" typeId="f750-42034"/>
|
||||
<channel id="42035" typeId="f750-42035"/>
|
||||
<channel id="42037" typeId="f750-42037"/>
|
||||
<channel id="42075" typeId="f750-42075"/>
|
||||
<channel id="42080" typeId="f750-42080"/>
|
||||
<channel id="42081" typeId="f750-42081"/>
|
||||
<channel id="42082" typeId="f750-42082"/>
|
||||
<channel id="42083" typeId="f750-42083"/>
|
||||
<channel id="42084" typeId="f750-42084"/>
|
||||
<channel id="42085" typeId="f750-42085"/>
|
||||
<channel id="42086" typeId="f750-42086"/>
|
||||
<channel id="42087" typeId="f750-42087"/>
|
||||
<channel id="42093" typeId="f750-42093"/>
|
||||
<channel id="42100" typeId="f750-42100"/>
|
||||
<channel id="42101" typeId="f750-42101"/>
|
||||
<channel id="42437" typeId="f750-42437"/>
|
||||
<channel id="42439" typeId="f750-42439"/>
|
||||
<channel id="42443" typeId="f750-42443"/>
|
||||
<channel id="42445" typeId="f750-42445"/>
|
||||
<channel id="42447" typeId="f750-42447"/>
|
||||
<channel id="42504" typeId="f750-42504"/>
|
||||
<channel id="43001" typeId="f750-43001"/>
|
||||
<channel id="43006" typeId="f750-43006"/>
|
||||
<channel id="43007" typeId="f750-43007"/>
|
||||
<channel id="43008" typeId="f750-43008"/>
|
||||
<channel id="43009" typeId="f750-43009"/>
|
||||
<channel id="43013" typeId="f750-43013"/>
|
||||
<channel id="43061" typeId="f750-43061"/>
|
||||
<channel id="43062" typeId="f750-43062"/>
|
||||
<channel id="43064" typeId="f750-43064"/>
|
||||
<channel id="43065" typeId="f750-43065"/>
|
||||
<channel id="43066" typeId="f750-43066"/>
|
||||
<channel id="43081" typeId="f750-43081"/>
|
||||
<channel id="43084" typeId="f750-43084"/>
|
||||
<channel id="43086" typeId="f750-43086"/>
|
||||
<channel id="43091" typeId="f750-43091"/>
|
||||
<channel id="43093" typeId="f750-43093"/>
|
||||
<channel id="43094" typeId="f750-43094"/>
|
||||
<channel id="43095" typeId="f750-43095"/>
|
||||
<channel id="43096" typeId="f750-43096"/>
|
||||
<channel id="43097" typeId="f750-43097"/>
|
||||
<channel id="43108" typeId="f750-43108"/>
|
||||
<channel id="43122" typeId="f750-43122"/>
|
||||
<channel id="43123" typeId="f750-43123"/>
|
||||
<channel id="43124" typeId="f750-43124"/>
|
||||
<channel id="43132" typeId="f750-43132"/>
|
||||
<channel id="43136" typeId="f750-43136"/>
|
||||
<channel id="43140" typeId="f750-43140"/>
|
||||
<channel id="43141" typeId="f750-43141"/>
|
||||
<channel id="43144" typeId="f750-43144"/>
|
||||
<channel id="43147" typeId="f750-43147"/>
|
||||
<channel id="43158" typeId="f750-43158"/>
|
||||
<channel id="43159" typeId="f750-43159"/>
|
||||
<channel id="43160" typeId="f750-43160"/>
|
||||
<channel id="43161" typeId="f750-43161"/>
|
||||
<channel id="43180" typeId="f750-43180"/>
|
||||
<channel id="43181" typeId="f750-43181"/>
|
||||
<channel id="43182" typeId="f750-43182"/>
|
||||
<channel id="43239" typeId="f750-43239"/>
|
||||
<channel id="43305" typeId="f750-43305"/>
|
||||
<channel id="43371" typeId="f750-43371"/>
|
||||
<channel id="43372" typeId="f750-43372"/>
|
||||
<channel id="43375" typeId="f750-43375"/>
|
||||
<channel id="43382" typeId="f750-43382"/>
|
||||
<channel id="43416" typeId="f750-43416"/>
|
||||
<channel id="43420" typeId="f750-43420"/>
|
||||
<channel id="43424" typeId="f750-43424"/>
|
||||
<channel id="43427" typeId="f750-43427"/>
|
||||
<channel id="43431" typeId="f750-43431"/>
|
||||
<channel id="43435" typeId="f750-43435"/>
|
||||
<channel id="43437" typeId="f750-43437"/>
|
||||
<channel id="43444" typeId="f750-43444"/>
|
||||
<channel id="43514" typeId="f750-43514"/>
|
||||
<channel id="43516" typeId="f750-43516"/>
|
||||
<channel id="43542" typeId="f750-43542"/>
|
||||
<channel id="43561" typeId="f750-43561"/>
|
||||
<channel id="44258" typeId="f750-44258"/>
|
||||
<channel id="44298" typeId="f750-44298"/>
|
||||
<channel id="44300" typeId="f750-44300"/>
|
||||
<channel id="44304" typeId="f750-44304"/>
|
||||
<channel id="44306" typeId="f750-44306"/>
|
||||
<channel id="44308" typeId="f750-44308"/>
|
||||
<channel id="44317" typeId="f750-44317"/>
|
||||
<channel id="44331" typeId="f750-44331"/>
|
||||
<channel id="44744" typeId="f750-44744"/>
|
||||
<channel id="44745" typeId="f750-44745"/>
|
||||
<channel id="44746" typeId="f750-44746"/>
|
||||
<channel id="44755" typeId="f750-44755"/>
|
||||
<channel id="44757" typeId="f750-44757"/>
|
||||
<channel id="44874" typeId="f750-44874"/>
|
||||
<channel id="44878" typeId="f750-44878"/>
|
||||
<channel id="44879" typeId="f750-44879"/>
|
||||
<channel id="44896" typeId="f750-44896"/>
|
||||
<channel id="44897" typeId="f750-44897"/>
|
||||
<channel id="44898" typeId="f750-44898"/>
|
||||
<channel id="44899" typeId="f750-44899"/>
|
||||
<channel id="44908" typeId="f750-44908"/>
|
||||
<channel id="45001" typeId="f750-45001"/>
|
||||
<channel id="47291" typeId="f750-47291"/>
|
||||
<channel id="48206" typeId="f750-48206"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="f750-setting-group-channels">
|
||||
<label>Settings</label>
|
||||
<channels>
|
||||
<channel id="40940" typeId="f750-40940"/>
|
||||
<channel id="43005" typeId="f750-43005"/>
|
||||
<channel id="47062" typeId="f750-47062"/>
|
||||
<channel id="40879" typeId="f750-40879"/>
|
||||
<channel id="40880" typeId="f750-40880"/>
|
||||
<channel id="40881" typeId="f750-40881"/>
|
||||
<channel id="40882" typeId="f750-40882"/>
|
||||
<channel id="40883" typeId="f750-40883"/>
|
||||
<channel id="40884" typeId="f750-40884"/>
|
||||
<channel id="40885" typeId="f750-40885"/>
|
||||
<channel id="40886" typeId="f750-40886"/>
|
||||
<channel id="40887" typeId="f750-40887"/>
|
||||
<channel id="40888" typeId="f750-40888"/>
|
||||
<channel id="45171" typeId="f750-45171"/>
|
||||
<channel id="47004" typeId="f750-47004"/>
|
||||
<channel id="47005" typeId="f750-47005"/>
|
||||
<channel id="47006" typeId="f750-47006"/>
|
||||
<channel id="47007" typeId="f750-47007"/>
|
||||
<channel id="47008" typeId="f750-47008"/>
|
||||
<channel id="47009" typeId="f750-47009"/>
|
||||
<channel id="47010" typeId="f750-47010"/>
|
||||
<channel id="47011" typeId="f750-47011"/>
|
||||
<channel id="47012" typeId="f750-47012"/>
|
||||
<channel id="47013" typeId="f750-47013"/>
|
||||
<channel id="47014" typeId="f750-47014"/>
|
||||
<channel id="47015" typeId="f750-47015"/>
|
||||
<channel id="47016" typeId="f750-47016"/>
|
||||
<channel id="47017" typeId="f750-47017"/>
|
||||
<channel id="47018" typeId="f750-47018"/>
|
||||
<channel id="47019" typeId="f750-47019"/>
|
||||
<channel id="47020" typeId="f750-47020"/>
|
||||
<channel id="47021" typeId="f750-47021"/>
|
||||
<channel id="47022" typeId="f750-47022"/>
|
||||
<channel id="47023" typeId="f750-47023"/>
|
||||
<channel id="47024" typeId="f750-47024"/>
|
||||
<channel id="47025" typeId="f750-47025"/>
|
||||
<channel id="47026" typeId="f750-47026"/>
|
||||
<channel id="47027" typeId="f750-47027"/>
|
||||
<channel id="47028" typeId="f750-47028"/>
|
||||
<channel id="47029" typeId="f750-47029"/>
|
||||
<channel id="47030" typeId="f750-47030"/>
|
||||
<channel id="47031" typeId="f750-47031"/>
|
||||
<channel id="47032" typeId="f750-47032"/>
|
||||
<channel id="47033" typeId="f750-47033"/>
|
||||
<channel id="47034" typeId="f750-47034"/>
|
||||
<channel id="47035" typeId="f750-47035"/>
|
||||
<channel id="47036" typeId="f750-47036"/>
|
||||
<channel id="47041" typeId="f750-47041"/>
|
||||
<channel id="47043" typeId="f750-47043"/>
|
||||
<channel id="47044" typeId="f750-47044"/>
|
||||
<channel id="47045" typeId="f750-47045"/>
|
||||
<channel id="47046" typeId="f750-47046"/>
|
||||
<channel id="47047" typeId="f750-47047"/>
|
||||
<channel id="47048" typeId="f750-47048"/>
|
||||
<channel id="47049" typeId="f750-47049"/>
|
||||
<channel id="47050" typeId="f750-47050"/>
|
||||
<channel id="47051" typeId="f750-47051"/>
|
||||
<channel id="47054" typeId="f750-47054"/>
|
||||
<channel id="47055" typeId="f750-47055"/>
|
||||
<channel id="47092" typeId="f750-47092"/>
|
||||
<channel id="47093" typeId="f750-47093"/>
|
||||
<channel id="47094" typeId="f750-47094"/>
|
||||
<channel id="47095" typeId="f750-47095"/>
|
||||
<channel id="47096" typeId="f750-47096"/>
|
||||
<channel id="47097" typeId="f750-47097"/>
|
||||
<channel id="47098" typeId="f750-47098"/>
|
||||
<channel id="47099" typeId="f750-47099"/>
|
||||
<channel id="47100" typeId="f750-47100"/>
|
||||
<channel id="47101" typeId="f750-47101"/>
|
||||
<channel id="47102" typeId="f750-47102"/>
|
||||
<channel id="47103" typeId="f750-47103"/>
|
||||
<channel id="47104" typeId="f750-47104"/>
|
||||
<channel id="47105" typeId="f750-47105"/>
|
||||
<channel id="47131" typeId="f750-47131"/>
|
||||
<channel id="47134" typeId="f750-47134"/>
|
||||
<channel id="47135" typeId="f750-47135"/>
|
||||
<channel id="47137" typeId="f750-47137"/>
|
||||
<channel id="47138" typeId="f750-47138"/>
|
||||
<channel id="47206" typeId="f750-47206"/>
|
||||
<channel id="47209" typeId="f750-47209"/>
|
||||
<channel id="47210" typeId="f750-47210"/>
|
||||
<channel id="47212" typeId="f750-47212"/>
|
||||
<channel id="47214" typeId="f750-47214"/>
|
||||
<channel id="47261" typeId="f750-47261"/>
|
||||
<channel id="47262" typeId="f750-47262"/>
|
||||
<channel id="47263" typeId="f750-47263"/>
|
||||
<channel id="47264" typeId="f750-47264"/>
|
||||
<channel id="47265" typeId="f750-47265"/>
|
||||
<channel id="47266" typeId="f750-47266"/>
|
||||
<channel id="47267" typeId="f750-47267"/>
|
||||
<channel id="47268" typeId="f750-47268"/>
|
||||
<channel id="47269" typeId="f750-47269"/>
|
||||
<channel id="47270" typeId="f750-47270"/>
|
||||
<channel id="47271" typeId="f750-47271"/>
|
||||
<channel id="47272" typeId="f750-47272"/>
|
||||
<channel id="47273" typeId="f750-47273"/>
|
||||
<channel id="47274" typeId="f750-47274"/>
|
||||
<channel id="47275" typeId="f750-47275"/>
|
||||
<channel id="47276" typeId="f750-47276"/>
|
||||
<channel id="47277" typeId="f750-47277"/>
|
||||
<channel id="47278" typeId="f750-47278"/>
|
||||
<channel id="47279" typeId="f750-47279"/>
|
||||
<channel id="47280" typeId="f750-47280"/>
|
||||
<channel id="47281" typeId="f750-47281"/>
|
||||
<channel id="47282" typeId="f750-47282"/>
|
||||
<channel id="47283" typeId="f750-47283"/>
|
||||
<channel id="47284" typeId="f750-47284"/>
|
||||
<channel id="47285" typeId="f750-47285"/>
|
||||
<channel id="47286" typeId="f750-47286"/>
|
||||
<channel id="47287" typeId="f750-47287"/>
|
||||
<channel id="47288" typeId="f750-47288"/>
|
||||
<channel id="47289" typeId="f750-47289"/>
|
||||
<channel id="47290" typeId="f750-47290"/>
|
||||
<channel id="47294" typeId="f750-47294"/>
|
||||
<channel id="47295" typeId="f750-47295"/>
|
||||
<channel id="47296" typeId="f750-47296"/>
|
||||
<channel id="47299" typeId="f750-47299"/>
|
||||
<channel id="47300" typeId="f750-47300"/>
|
||||
<channel id="47301" typeId="f750-47301"/>
|
||||
<channel id="47302" typeId="f750-47302"/>
|
||||
<channel id="47303" typeId="f750-47303"/>
|
||||
<channel id="47304" typeId="f750-47304"/>
|
||||
<channel id="47305" typeId="f750-47305"/>
|
||||
<channel id="47306" typeId="f750-47306"/>
|
||||
<channel id="47307" typeId="f750-47307"/>
|
||||
<channel id="47308" typeId="f750-47308"/>
|
||||
<channel id="47309" typeId="f750-47309"/>
|
||||
<channel id="47310" typeId="f750-47310"/>
|
||||
<channel id="47317" typeId="f750-47317"/>
|
||||
<channel id="47318" typeId="f750-47318"/>
|
||||
<channel id="47319" typeId="f750-47319"/>
|
||||
<channel id="47320" typeId="f750-47320"/>
|
||||
<channel id="47321" typeId="f750-47321"/>
|
||||
<channel id="47352" typeId="f750-47352"/>
|
||||
<channel id="47365" typeId="f750-47365"/>
|
||||
<channel id="47366" typeId="f750-47366"/>
|
||||
<channel id="47367" typeId="f750-47367"/>
|
||||
<channel id="47368" typeId="f750-47368"/>
|
||||
<channel id="47370" typeId="f750-47370"/>
|
||||
<channel id="47371" typeId="f750-47371"/>
|
||||
<channel id="47374" typeId="f750-47374"/>
|
||||
<channel id="47375" typeId="f750-47375"/>
|
||||
<channel id="47376" typeId="f750-47376"/>
|
||||
<channel id="47377" typeId="f750-47377"/>
|
||||
<channel id="47378" typeId="f750-47378"/>
|
||||
<channel id="47379" typeId="f750-47379"/>
|
||||
<channel id="47384" typeId="f750-47384"/>
|
||||
<channel id="47385" typeId="f750-47385"/>
|
||||
<channel id="47387" typeId="f750-47387"/>
|
||||
<channel id="47388" typeId="f750-47388"/>
|
||||
<channel id="47389" typeId="f750-47389"/>
|
||||
<channel id="47391" typeId="f750-47391"/>
|
||||
<channel id="47392" typeId="f750-47392"/>
|
||||
<channel id="47393" typeId="f750-47393"/>
|
||||
<channel id="47394" typeId="f750-47394"/>
|
||||
<channel id="47395" typeId="f750-47395"/>
|
||||
<channel id="47396" typeId="f750-47396"/>
|
||||
<channel id="47397" typeId="f750-47397"/>
|
||||
<channel id="47398" typeId="f750-47398"/>
|
||||
<channel id="47399" typeId="f750-47399"/>
|
||||
<channel id="47400" typeId="f750-47400"/>
|
||||
<channel id="47401" typeId="f750-47401"/>
|
||||
<channel id="47402" typeId="f750-47402"/>
|
||||
<channel id="47442" typeId="f750-47442"/>
|
||||
<channel id="47473" typeId="f750-47473"/>
|
||||
<channel id="47525" typeId="f750-47525"/>
|
||||
<channel id="47537" typeId="f750-47537"/>
|
||||
<channel id="47538" typeId="f750-47538"/>
|
||||
<channel id="47539" typeId="f750-47539"/>
|
||||
<channel id="47555" typeId="f750-47555"/>
|
||||
<channel id="47567" typeId="f750-47567"/>
|
||||
<channel id="48043" typeId="f750-48043"/>
|
||||
<channel id="48072" typeId="f750-48072"/>
|
||||
<channel id="48132" typeId="f750-48132"/>
|
||||
<channel id="48139" typeId="f750-48139"/>
|
||||
<channel id="48158" typeId="f750-48158"/>
|
||||
<channel id="48159" typeId="f750-48159"/>
|
||||
<channel id="48160" typeId="f750-48160"/>
|
||||
<channel id="48161" typeId="f750-48161"/>
|
||||
<channel id="48162" typeId="f750-48162"/>
|
||||
<channel id="48163" typeId="f750-48163"/>
|
||||
<channel id="48201" typeId="f750-48201"/>
|
||||
<channel id="48275" typeId="f750-48275"/>
|
||||
<channel id="48282" typeId="f750-48282"/>
|
||||
<channel id="48283" typeId="f750-48283"/>
|
||||
<channel id="48284" typeId="f750-48284"/>
|
||||
<channel id="48285" typeId="f750-48285"/>
|
||||
<channel id="48452" typeId="f750-48452"/>
|
||||
<channel id="48453" typeId="f750-48453"/>
|
||||
<channel id="48454" typeId="f750-48454"/>
|
||||
<channel id="48455" typeId="f750-48455"/>
|
||||
<channel id="48488" typeId="f750-48488"/>
|
||||
<channel id="48489" typeId="f750-48489"/>
|
||||
<channel id="48491" typeId="f750-48491"/>
|
||||
<channel id="48492" typeId="f750-48492"/>
|
||||
<channel id="48493" typeId="f750-48493"/>
|
||||
<channel id="48494" typeId="f750-48494"/>
|
||||
<channel id="48495" typeId="f750-48495"/>
|
||||
<channel id="48496" typeId="f750-48496"/>
|
||||
<channel id="48497" typeId="f750-48497"/>
|
||||
<channel id="48498" typeId="f750-48498"/>
|
||||
<channel id="48499" typeId="f750-48499"/>
|
||||
<channel id="48500" typeId="f750-48500"/>
|
||||
<channel id="48501" typeId="f750-48501"/>
|
||||
<channel id="48502" typeId="f750-48502"/>
|
||||
<channel id="48503" typeId="f750-48503"/>
|
||||
<channel id="48504" typeId="f750-48504"/>
|
||||
<channel id="48505" typeId="f750-48505"/>
|
||||
<channel id="48506" typeId="f750-48506"/>
|
||||
<channel id="48507" typeId="f750-48507"/>
|
||||
<channel id="48508" typeId="f750-48508"/>
|
||||
<channel id="48509" typeId="f750-48509"/>
|
||||
<channel id="48510" typeId="f750-48510"/>
|
||||
<channel id="48567" typeId="f750-48567"/>
|
||||
<channel id="48568" typeId="f750-48568"/>
|
||||
<channel id="48569" typeId="f750-48569"/>
|
||||
<channel id="48570" typeId="f750-48570"/>
|
||||
<channel id="48571" typeId="f750-48571"/>
|
||||
<channel id="48572" typeId="f750-48572"/>
|
||||
<channel id="48573" typeId="f750-48573"/>
|
||||
<channel id="48574" typeId="f750-48574"/>
|
||||
<channel id="48575" typeId="f750-48575"/>
|
||||
<channel id="48576" typeId="f750-48576"/>
|
||||
<channel id="48577" typeId="f750-48577"/>
|
||||
<channel id="48578" typeId="f750-48578"/>
|
||||
<channel id="48579" typeId="f750-48579"/>
|
||||
<channel id="48580" typeId="f750-48580"/>
|
||||
<channel id="48637" typeId="f750-48637"/>
|
||||
<channel id="48638" typeId="f750-48638"/>
|
||||
<channel id="48639" typeId="f750-48639"/>
|
||||
<channel id="48640" typeId="f750-48640"/>
|
||||
<channel id="48641" typeId="f750-48641"/>
|
||||
<channel id="48659" typeId="f750-48659"/>
|
||||
<channel id="48660" typeId="f750-48660"/>
|
||||
<channel id="48661" typeId="f750-48661"/>
|
||||
<channel id="48662" typeId="f750-48662"/>
|
||||
<channel id="48663" typeId="f750-48663"/>
|
||||
<channel id="48664" typeId="f750-48664"/>
|
||||
<channel id="48675" typeId="f750-48675"/>
|
||||
<channel id="48676" typeId="f750-48676"/>
|
||||
<channel id="48677" typeId="f750-48677"/>
|
||||
<channel id="48678" typeId="f750-48678"/>
|
||||
<channel id="48680" typeId="f750-48680"/>
|
||||
<channel id="48681" typeId="f750-48681"/>
|
||||
<channel id="48682" typeId="f750-48682"/>
|
||||
<channel id="48683" typeId="f750-48683"/>
|
||||
<channel id="48685" typeId="f750-48685"/>
|
||||
<channel id="48686" typeId="f750-48686"/>
|
||||
<channel id="48687" typeId="f750-48687"/>
|
||||
<channel id="48688" typeId="f750-48688"/>
|
||||
<channel id="48732" typeId="f750-48732"/>
|
||||
<channel id="48733" typeId="f750-48733"/>
|
||||
<channel id="48734" typeId="f750-48734"/>
|
||||
<channel id="48735" typeId="f750-48735"/>
|
||||
<channel id="48736" typeId="f750-48736"/>
|
||||
<channel id="48737" typeId="f750-48737"/>
|
||||
<channel id="48738" typeId="f750-48738"/>
|
||||
<channel id="48739" typeId="f750-48739"/>
|
||||
<channel id="48743" typeId="f750-48743"/>
|
||||
<channel id="48755" typeId="f750-48755"/>
|
||||
<channel id="48794" typeId="f750-48794"/>
|
||||
<channel id="48810" typeId="f750-48810"/>
|
||||
<channel id="48811" typeId="f750-48811"/>
|
||||
<channel id="48812" typeId="f750-48812"/>
|
||||
<channel id="48813" typeId="f750-48813"/>
|
||||
<channel id="48814" typeId="f750-48814"/>
|
||||
<channel id="48815" typeId="f750-48815"/>
|
||||
<channel id="48816" typeId="f750-48816"/>
|
||||
<channel id="48817" typeId="f750-48817"/>
|
||||
<channel id="48852" typeId="f750-48852"/>
|
||||
<channel id="48889" typeId="f750-48889"/>
|
||||
<channel id="48891" typeId="f750-48891"/>
|
||||
<channel id="48908" typeId="f750-48908"/>
|
||||
<channel id="48909" typeId="f750-48909"/>
|
||||
<channel id="48910" typeId="f750-48910"/>
|
||||
<channel id="48911" typeId="f750-48911"/>
|
||||
<channel id="48914" typeId="f750-48914"/>
|
||||
<channel id="48915" typeId="f750-48915"/>
|
||||
<channel id="48926" typeId="f750-48926"/>
|
||||
<channel id="48927" typeId="f750-48927"/>
|
||||
<channel id="48930" typeId="f750-48930"/>
|
||||
<channel id="48931" typeId="f750-48931"/>
|
||||
<channel id="48932" typeId="f750-48932"/>
|
||||
<channel id="48968" typeId="f750-48968"/>
|
||||
<channel id="48969" typeId="f750-48969"/>
|
||||
<channel id="48970" typeId="f750-48970"/>
|
||||
<channel id="48972" typeId="f750-48972"/>
|
||||
<channel id="48973" typeId="f750-48973"/>
|
||||
<channel id="48975" typeId="f750-48975"/>
|
||||
<channel id="48976" typeId="f750-48976"/>
|
||||
<channel id="49223" typeId="f750-49223"/>
|
||||
<channel id="49224" typeId="f750-49224"/>
|
||||
<channel id="49227" typeId="f750-49227"/>
|
||||
<channel id="49281" typeId="f750-49281"/>
|
||||
<channel id="49282" typeId="f750-49282"/>
|
||||
<channel id="49285" typeId="f750-49285"/>
|
||||
<channel id="49286" typeId="f750-49286"/>
|
||||
<channel id="49287" typeId="f750-49287"/>
|
||||
<channel id="49288" typeId="f750-49288"/>
|
||||
<channel id="49289" typeId="f750-49289"/>
|
||||
<channel id="49295" typeId="f750-49295"/>
|
||||
<channel id="49296" typeId="f750-49296"/>
|
||||
<channel id="49297" typeId="f750-49297"/>
|
||||
<channel id="49298" typeId="f750-49298"/>
|
||||
<channel id="49358" typeId="f750-49358"/>
|
||||
<channel id="49359" typeId="f750-49359"/>
|
||||
<channel id="49360" typeId="f750-49360"/>
|
||||
<channel id="49361" typeId="f750-49361"/>
|
||||
<channel id="49362" typeId="f750-49362"/>
|
||||
<channel id="49363" typeId="f750-49363"/>
|
||||
<channel id="49364" typeId="f750-49364"/>
|
||||
<channel id="49365" typeId="f750-49365"/>
|
||||
<channel id="49366" typeId="f750-49366"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
</thing:thing-descriptions>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,168 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="nibeheatpump"
|
||||
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="f750-udp">
|
||||
<label>UDP Connected Nibe F750 Heat Pump</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f750-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f750-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="hostName" type="text" required="true">
|
||||
<label>Host Name</label>
|
||||
<description>Network address of the NibeGW.</description>
|
||||
</parameter>
|
||||
<parameter name="port" type="integer">
|
||||
<label>UDP Port</label>
|
||||
<description>UDP port to listening data packets from the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="readCommandsPort" type="integer">
|
||||
<label>UDP Port for Read Commands</label>
|
||||
<description>UDP port to send read commands to the NibeGW.</description>
|
||||
<default>9999</default>
|
||||
</parameter>
|
||||
<parameter name="writeCommandsPort" type="integer">
|
||||
<label>UDP Port for Write Commands</label>
|
||||
<description>UDP port to send write commands to the NibeGW.</description>
|
||||
<default>10000</default>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Registers List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 40940, 45171</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f750-serial">
|
||||
<label>Serial Port Connected F750 Heat Pump</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f750-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f750-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="serialPort" type="text" required="true">
|
||||
<label>Serial Port</label>
|
||||
<description>Serial port to connect to the heat pump.</description>
|
||||
</parameter>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 40940, 45171</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToMODBUS40" type="boolean">
|
||||
<label>Enable Acknowledges to MODBUS40 Messages</label>
|
||||
<description>Binding emulates MODBUS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>true</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToRMU40" type="boolean">
|
||||
<label>Enable Acknowledges to RMU40 Messages</label>
|
||||
<description>Binding emulates RMU40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="sendAckToSMS40" type="boolean">
|
||||
<label>Enable Acknowledges to SMS40 Messages</label>
|
||||
<description>Binding emulates SMS40 device and send protocol acknowledges to heat pump.</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
|
||||
<thing-type id="f750-simulator">
|
||||
<label>Simulator for Nibe F750 Heat Pump</label>
|
||||
<description></description>
|
||||
|
||||
<channel-groups>
|
||||
<channel-group typeId="f750-sensor-group-channels" id="sensor"/>
|
||||
<channel-group typeId="f750-setting-group-channels" id="setting"/>
|
||||
</channel-groups>
|
||||
|
||||
<config-description>
|
||||
<parameter name="refreshInterval" type="integer">
|
||||
<label>Refresh Interval</label>
|
||||
<description>States how often a refresh shall occur in seconds.</description>
|
||||
<default>60</default>
|
||||
</parameter>
|
||||
<parameter name="enableReadCommands" type="boolean">
|
||||
<label>Enable Read Commands</label>
|
||||
<description>Enable read commands to read additional variable from heat pump which are not included to data readout
|
||||
messages. This is experimental feature, use it at your own risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommands" type="boolean">
|
||||
<label>Enable Write Commands</label>
|
||||
<description>Enable write commands to change heat pump settings. This is experimental feature, use it at your own
|
||||
risk!</description>
|
||||
<default>false</default>
|
||||
</parameter>
|
||||
<parameter name="enableWriteCommandsToRegisters" type="text">
|
||||
<label>Register List for Write Commands</label>
|
||||
<description>Comma separated list of registers, which are allowed to write to heat pump. E.g. 40940, 45171</description>
|
||||
<default></default>
|
||||
</parameter>
|
||||
<parameter name="throttleTime" type="integer" unit="ms">
|
||||
<label>Throttle Incoming Data</label>
|
||||
<description>Throttle incoming data read out messages from heat pump. 0 = throttle is disabled, otherwise throttle
|
||||
time in milliseconds.</description>
|
||||
<default>0</default>
|
||||
</parameter>
|
||||
</config-description>
|
||||
</thing-type>
|
||||
</thing:thing-descriptions>
|
||||
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.handler;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.MockitoAnnotations.initMocks;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.mockito.Mock;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.PumpModel;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation;
|
||||
import org.openhab.core.io.transport.serial.SerialPortManager;
|
||||
import org.openhab.core.library.types.DecimalType;
|
||||
import org.openhab.core.library.types.OnOffType;
|
||||
import org.openhab.core.library.types.StringType;
|
||||
import org.openhab.core.types.Command;
|
||||
|
||||
/**
|
||||
* Tests cases for {@link NibeHeatPumpHandler}.
|
||||
*
|
||||
* @author Jevgeni Kiski - Initial contribution
|
||||
*/
|
||||
@RunWith(Parameterized.class)
|
||||
public class NibeHeatPumpHandlerCommand2NibeTest {
|
||||
private NibeHeatPumpHandler product; // the class under test
|
||||
private Method m;
|
||||
private static String METHOD_NAME = "convertCommandToNibeValue";
|
||||
private Class<?>[] parameterTypes;
|
||||
private Object[] parameters;
|
||||
|
||||
private int fCoilAddress;
|
||||
private Command fCommand;
|
||||
private int fExpected;
|
||||
|
||||
private @Mock SerialPortManager serialPortManager;
|
||||
|
||||
@Parameterized.Parameters(name = "{index}: f({0}, {1})={2}")
|
||||
public static Collection<Object[]> data() {
|
||||
return Arrays.asList(new Object[][] { { 47028, new DecimalType("-1"), (byte) 0xFF },
|
||||
{ 48132, new DecimalType("0"), 0 }, { 48132, new StringType("0"), 0 },
|
||||
{ 43009, new DecimalType("28.7"), 0x011F }, { 40004, new DecimalType("-0.1"), (short) 0xFFFF },
|
||||
{ 47418, new DecimalType("75"), 0x004B }, { 43514, new DecimalType("7"), 0x0007 },
|
||||
{ 47291, new DecimalType("65535"), 0xFFFF }, { 42437, new DecimalType("429496729.5"), 0xFFFFFFFF },
|
||||
{ 42504, new DecimalType("4294967295"), 0xFFFFFFFF }, { 47041, new StringType("1"), 0x1 },
|
||||
{ 47371, OnOffType.from(true), 0x1 }, { 47371, OnOffType.from(false), 0x0 }, });
|
||||
}
|
||||
|
||||
public NibeHeatPumpHandlerCommand2NibeTest(final int coilAddress, final Command command, final int expected) {
|
||||
this.fCoilAddress = coilAddress;
|
||||
this.fCommand = command;
|
||||
this.fExpected = expected;
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
initMocks(this);
|
||||
|
||||
product = new NibeHeatPumpHandler(null, PumpModel.F1X55, serialPortManager);
|
||||
parameterTypes = new Class[2];
|
||||
parameterTypes[0] = VariableInformation.class;
|
||||
parameterTypes[1] = Command.class;
|
||||
m = product.getClass().getDeclaredMethod(METHOD_NAME, parameterTypes);
|
||||
m.setAccessible(true);
|
||||
parameters = new Object[2];
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertNibeValueToStateTest() throws InvocationTargetException, IllegalAccessException {
|
||||
VariableInformation varInfo = VariableInformation.getVariableInfo(PumpModel.F1X55, fCoilAddress);
|
||||
parameters[0] = varInfo;
|
||||
parameters[1] = fCommand;
|
||||
int value = (int) m.invoke(product, parameters);
|
||||
|
||||
assertEquals(fExpected, value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.handler;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.MockitoAnnotations.initMocks;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.text.DecimalFormatSymbols;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.mockito.Mock;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.PumpModel;
|
||||
import org.openhab.binding.nibeheatpump.internal.models.VariableInformation;
|
||||
import org.openhab.core.io.transport.serial.SerialPortManager;
|
||||
import org.openhab.core.types.State;
|
||||
|
||||
/**
|
||||
* Tests cases for {@link NibeHeatPumpHandler}.
|
||||
*
|
||||
* @author Jevgeni Kiski - Initial contribution
|
||||
*/
|
||||
@RunWith(Parameterized.class)
|
||||
public class NibeHeatPumpHandlerNibe2StateTest {
|
||||
|
||||
// we need to get the decimal separator of the default locale for our tests
|
||||
private static final char SEP = new DecimalFormatSymbols().getDecimalSeparator();
|
||||
private static final String METHOD_NAME = "convertNibeValueToState";
|
||||
|
||||
private NibeHeatPumpHandler product; // the class under test
|
||||
private Method m;
|
||||
private Class<?>[] parameterTypes;
|
||||
private Object[] parameters;
|
||||
private int fCoilAddress;
|
||||
private int fValue;
|
||||
private String fFormat;
|
||||
private String fType;
|
||||
private String fExpected;
|
||||
|
||||
private @Mock SerialPortManager serialPortManager;
|
||||
|
||||
@Parameterized.Parameters(name = "{index}: f({0}, {1}, {3})={4}")
|
||||
public static Collection<Object[]> data() {
|
||||
return Arrays.asList(new Object[][] { //
|
||||
{ 47028, 0xFF, "%d", "Number", "-1" }, //
|
||||
{ 47028, 0x7F, "%d", "Number", "127" }, //
|
||||
{ 47028, 0x80, "%d", "Number", "-128" }, //
|
||||
{ 48132, 1966080, "%s", "String", "0" }, //
|
||||
{ 47028, 0xFF, "%d", "Number", "-1" }, //
|
||||
{ 43009, 0x011F, "%.1f", "Number", "28" + SEP + "7" }, //
|
||||
{ 43009, 0x7FFF, "%.1f", "Number", "3276" + SEP + "7" }, //
|
||||
{ 43009, 0x8000, "%.1f", "Number", "-3276" + SEP + "8" }, //
|
||||
{ 40004, 0xFFFF, "%.1f", "Number", "-0" + SEP + "1" }, //
|
||||
{ 40004, 0xFFFF, "%.1f", "Number", "-0" + SEP + "1" }, //
|
||||
{ 43416, 0xFFFFFFFF, "%d", "Number", "4294967295" }, //
|
||||
{ 47418, 0x004B, "%d", "Number", "75" }, //
|
||||
{ 43514, 0x0007, "%d", "Number", "7" }, //
|
||||
{ 47291, 0xFFFF, "%d", "Number", "65535" }, //
|
||||
{ 42437, 0xFFFFFFFF, "%.1f", "Number", "429496729" + SEP + "5" }, //
|
||||
{ 42504, 0xFFFFFFFF, "%d", "Number", "4294967295" }, //
|
||||
{ 43081, 196, "%.1f", "Number", "19" + SEP + "6" }, //
|
||||
{ 43424, 1685, "%d", "Number", "1685" }, //
|
||||
{ 43416, 4857, "%d", "Number", "4857" }, //
|
||||
{ 43420, 9487, "%d", "Number", "9487" }, //
|
||||
{ 40940, (byte) 0xFF, "%.1f", "Number", "-0" + SEP + "1" }, //
|
||||
{ 40940, 0x80000000, "%.1f", "Number", "-214748364" + SEP + "8" }, //
|
||||
{ 40940, 0x7FFFFFFF, "%.1f", "Number", "214748364" + SEP + "7" }, //
|
||||
{ 40940, (short) 0xFFFF, "%.1f", "Number", "-0" + SEP + "1" }, //
|
||||
{ 40940, (byte) 0xFF, "%.1f", "Number", "-0" + SEP + "1" }, //
|
||||
{ 40940, 0xFFFF, "%.1f", "Number", "6553" + SEP + "5" } //
|
||||
});
|
||||
}
|
||||
|
||||
public NibeHeatPumpHandlerNibe2StateTest(final int coilAddress, final int value, final String format,
|
||||
final String type, final String expected) {
|
||||
this.fCoilAddress = coilAddress;
|
||||
this.fValue = value;
|
||||
this.fFormat = format;
|
||||
this.fType = type;
|
||||
this.fExpected = expected;
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
initMocks(this);
|
||||
|
||||
product = new NibeHeatPumpHandler(null, PumpModel.F1X55, serialPortManager);
|
||||
parameterTypes = new Class[3];
|
||||
parameterTypes[0] = VariableInformation.class;
|
||||
parameterTypes[1] = int.class;
|
||||
parameterTypes[2] = String.class;
|
||||
m = product.getClass().getDeclaredMethod(METHOD_NAME, parameterTypes);
|
||||
m.setAccessible(true);
|
||||
parameters = new Object[3];
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertNibeValueToStateTest() throws InvocationTargetException, IllegalAccessException {
|
||||
VariableInformation varInfo = VariableInformation.getVariableInfo(PumpModel.F1X55, fCoilAddress);
|
||||
parameters[0] = varInfo;
|
||||
parameters[1] = fValue;
|
||||
parameters[2] = fType;
|
||||
State state = (State) m.invoke(product, parameters);
|
||||
|
||||
assertEquals(fExpected, state.format(fFormat));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
|
||||
/**
|
||||
* Tests cases for {@link ModbusDataReadOutMessage}.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusDataReadOutMessageTest {
|
||||
|
||||
@Test
|
||||
public void createMessageTest() throws NibeHeatPumpException {
|
||||
final String okMessage = "5C0020685001A81F0100A86400FDA7D003449C1E004F9CA000509C7800519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000045";
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
final ArrayList<ModbusValue> values = new ArrayList<ModbusValue>() {
|
||||
{
|
||||
add(new ModbusValue(43009, 287));
|
||||
add(new ModbusValue(43008, 100));
|
||||
add(new ModbusValue(43005, 976));
|
||||
add(new ModbusValue(40004, 30));
|
||||
add(new ModbusValue(40015, 160));
|
||||
add(new ModbusValue(40016, 120));
|
||||
add(new ModbusValue(40017, 259));
|
||||
add(new ModbusValue(40018, 283));
|
||||
add(new ModbusValue(40071, 276));
|
||||
add(new ModbusValue(40014, 454));
|
||||
add(new ModbusValue(40007, 257));
|
||||
add(new ModbusValue(47381, -80));
|
||||
add(new ModbusValue(47418, 75));
|
||||
add(new ModbusValue(45001, 0));
|
||||
add(new ModbusValue(40008, 269));
|
||||
add(new ModbusValue(40012, 231));
|
||||
add(new ModbusValue(40011, 0));
|
||||
add(new ModbusValue(0xFFFF, 0));
|
||||
add(new ModbusValue(0xFFFF, 0));
|
||||
add(new ModbusValue(0xFFFF, 0));
|
||||
}
|
||||
};
|
||||
|
||||
final ModbusDataReadOutMessage m = new ModbusDataReadOutMessage.MessageBuilder().values(values).build();
|
||||
final byte[] byteMessage = m.decodeMessage();
|
||||
assertEquals(okMessage, HexUtils.bytesToHex(byteMessage));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseModbusDataReadOutMessageTest() throws NibeHeatPumpException {
|
||||
final String message = "5C0020685001A81F0100A86400FDA7D003449C1E004F9CA000509C7800519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000045";
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
|
||||
{
|
||||
add(new ModbusValue(43009, 287));
|
||||
add(new ModbusValue(43008, 100));
|
||||
add(new ModbusValue(43005, 976));
|
||||
add(new ModbusValue(40004, 30));
|
||||
add(new ModbusValue(40015, 160));
|
||||
add(new ModbusValue(40016, 120));
|
||||
add(new ModbusValue(40017, 259));
|
||||
add(new ModbusValue(40018, 283));
|
||||
add(new ModbusValue(40071, 276));
|
||||
add(new ModbusValue(40014, 454));
|
||||
add(new ModbusValue(40007, 257));
|
||||
add(new ModbusValue(47381, 65456));
|
||||
add(new ModbusValue(47418, 75));
|
||||
add(new ModbusValue(45001, 0));
|
||||
add(new ModbusValue(40008, 269));
|
||||
add(new ModbusValue(40012, 231));
|
||||
add(new ModbusValue(40011, 0));
|
||||
}
|
||||
};
|
||||
|
||||
checkRegisters(message, expectedValues);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void specialLen1Test() throws NibeHeatPumpException {
|
||||
final String message = "5C00206851449C2500489CFC004C9CF1004E9CC7014D9C0B024F9C2500509C3300519C0B01529C5C5C01569C3100C9AF000001A80C01FDA716FAFAA9070098A91B1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000BE";
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
|
||||
{
|
||||
add(new ModbusValue(40004, 37));
|
||||
add(new ModbusValue(40008, 252));
|
||||
add(new ModbusValue(40012, 241));
|
||||
add(new ModbusValue(40014, 455));
|
||||
add(new ModbusValue(40013, 523));
|
||||
add(new ModbusValue(40015, 37));
|
||||
add(new ModbusValue(40016, 51));
|
||||
add(new ModbusValue(40017, 267));
|
||||
add(new ModbusValue(40018, 348));
|
||||
add(new ModbusValue(40022, 49));
|
||||
add(new ModbusValue(45001, 0));
|
||||
add(new ModbusValue(43009, 268));
|
||||
add(new ModbusValue(43005, 64022));
|
||||
add(new ModbusValue(43514, 7));
|
||||
add(new ModbusValue(43416, 6939));
|
||||
add(new ModbusValue(43424, 714));
|
||||
add(new ModbusValue(43420, 4754));
|
||||
}
|
||||
};
|
||||
|
||||
checkRegisters(message, expectedValues);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void specialLen2Test() throws NibeHeatPumpException {
|
||||
final String message = "5C00206852449C2500489CFE004C9CF2004E9CD4014D9CFB014F9C2500509C3700519C0D01529C5C5C01569C3200C9AF000001A80C01FDA712FAFAA9070098A95C5C1BFFFF0000A0A9D102FFFF00009CA9B412FFFF00007F";
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
|
||||
{
|
||||
add(new ModbusValue(40004, 37));
|
||||
add(new ModbusValue(40008, 254));
|
||||
add(new ModbusValue(40012, 242));
|
||||
add(new ModbusValue(40014, 468));
|
||||
add(new ModbusValue(40013, 507));
|
||||
add(new ModbusValue(40015, 37));
|
||||
add(new ModbusValue(40016, 55));
|
||||
add(new ModbusValue(40017, 269));
|
||||
add(new ModbusValue(40018, 348));
|
||||
add(new ModbusValue(40022, 50));
|
||||
add(new ModbusValue(45001, 0));
|
||||
add(new ModbusValue(43009, 268));
|
||||
add(new ModbusValue(43005, 64018));
|
||||
add(new ModbusValue(43514, 7));
|
||||
add(new ModbusValue(43416, 7004));
|
||||
add(new ModbusValue(43424, 721));
|
||||
add(new ModbusValue(43420, 4788));
|
||||
}
|
||||
};
|
||||
|
||||
checkRegisters(message, expectedValues);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void specialCrcTest() throws NibeHeatPumpException {
|
||||
final String message = "5C00206850449C2600489CF6004C9CF1004E9CD6014D9C0C024F9C4500509C3F00519CF100529C0401569CD500C9AF000001A80C01FDA799FAFAA9020098A91A1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000C5";
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
final ArrayList<ModbusValue> expectedValues = new ArrayList<ModbusValue>() {
|
||||
{
|
||||
add(new ModbusValue(40004, 38));
|
||||
add(new ModbusValue(40008, 246));
|
||||
add(new ModbusValue(40012, 241));
|
||||
add(new ModbusValue(40014, 470));
|
||||
add(new ModbusValue(40013, 524));
|
||||
add(new ModbusValue(40015, 69));
|
||||
add(new ModbusValue(40016, 63));
|
||||
add(new ModbusValue(40017, 241));
|
||||
add(new ModbusValue(40018, 260));
|
||||
add(new ModbusValue(40022, 213));
|
||||
add(new ModbusValue(45001, 0));
|
||||
add(new ModbusValue(43009, 268));
|
||||
add(new ModbusValue(43005, 64153));
|
||||
add(new ModbusValue(43514, 2));
|
||||
add(new ModbusValue(43416, 6938));
|
||||
add(new ModbusValue(43424, 714));
|
||||
add(new ModbusValue(43420, 4754));
|
||||
}
|
||||
};
|
||||
|
||||
checkRegisters(message, expectedValues);
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void badCrcTest() throws NibeHeatPumpException {
|
||||
final String message = "5C0020685001A81F0100A86400FDA7D003449C1E004F9CA000509C7800519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000044";
|
||||
|
||||
final byte[] msg = HexUtils.hexToBytes(message);
|
||||
MessageFactory.getMessage(msg);
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void notModbusDataReadOutMessageTest() throws NibeHeatPumpException {
|
||||
final String message = "519C0301529C1B01879C14014E9CC601479C010115B9B0FF3AB94B00C9AF0000489C0D014C9CE7004B9C0000FFFF0000FFFF0000FFFF000044";
|
||||
|
||||
final byte[] msg = HexUtils.hexToBytes(message);
|
||||
new ModbusDataReadOutMessage(msg);
|
||||
}
|
||||
|
||||
private void checkRegisters(final String message, final ArrayList<ModbusValue> expectedRegs)
|
||||
throws NibeHeatPumpException {
|
||||
final byte[] msg = HexUtils.hexToBytes(message);
|
||||
final ModbusDataReadOutMessage m = (ModbusDataReadOutMessage) MessageFactory.getMessage(msg);
|
||||
assertNotNull(m);
|
||||
|
||||
final ArrayList<ModbusValue> actualValues = (ArrayList<ModbusValue>) m.getValues();
|
||||
|
||||
assertNotNull(actualValues);
|
||||
assertEquals(expectedRegs.size(), actualValues.size());
|
||||
assertEquals(expectedRegs.toString(), actualValues.toString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
|
||||
/**
|
||||
* Tests cases for {@link ModbusReadRequestMessage}.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusReadRequestMessageTest {
|
||||
|
||||
private final String okMessage = "C069023930A2";
|
||||
private final int coilAddress = 12345;
|
||||
|
||||
@Test
|
||||
public void createMessageTest() throws NibeHeatPumpException {
|
||||
ModbusReadRequestMessage m = new ModbusReadRequestMessage.MessageBuilder().coilAddress(coilAddress).build();
|
||||
byte[] byteMessage = m.decodeMessage();
|
||||
assertEquals(okMessage, HexUtils.bytesToHex(byteMessage));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseMessageTest() throws NibeHeatPumpException {
|
||||
byte[] byteMessage = HexUtils.hexToBytes(okMessage);
|
||||
ModbusReadRequestMessage m = new ModbusReadRequestMessage(byteMessage);
|
||||
assertEquals(coilAddress, m.getCoilAddress());
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void badCrcTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "C069023930A1";
|
||||
final byte[] msg = HexUtils.hexToBytes(strMessage);
|
||||
new ModbusReadRequestMessage(msg);
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void notReadRequestMessageTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "C169023930A2";
|
||||
final byte[] byteMessage = HexUtils.hexToBytes(strMessage);
|
||||
new ModbusReadRequestMessage(byteMessage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
|
||||
/**
|
||||
* Tests cases for {@link ModbusReadRequestMessage}.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusReadResponseMessageTest {
|
||||
|
||||
private final int coilAddress = 513;
|
||||
private final int value = 100992003;
|
||||
private final String okMessage = "5C00206A060102030405064B";
|
||||
|
||||
@Test
|
||||
public void createMessageTest() throws NibeHeatPumpException {
|
||||
ModbusReadResponseMessage m = new ModbusReadResponseMessage.MessageBuilder().coilAddress(coilAddress)
|
||||
.value(value).build();
|
||||
byte[] byteMessage = m.decodeMessage();
|
||||
assertEquals(okMessage, HexUtils.bytesToHex(byteMessage));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseMessageTest() throws NibeHeatPumpException {
|
||||
byte[] msg = HexUtils.hexToBytes(okMessage);
|
||||
ModbusReadResponseMessage m = (ModbusReadResponseMessage) MessageFactory.getMessage(msg);
|
||||
assertEquals(coilAddress, m.getCoilAddress());
|
||||
assertEquals(value, m.getValue());
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void badCrcTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "5C00206A060102030405064C";
|
||||
final byte[] byteMessage = HexUtils.hexToBytes(strMessage);
|
||||
MessageFactory.getMessage(byteMessage);
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void notReadResponseMessageTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "5C00206B060102030405064A";
|
||||
final byte[] byteMessage = HexUtils.hexToBytes(strMessage);
|
||||
new ModbusReadResponseMessage(byteMessage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
|
||||
/**
|
||||
* Tests cases for {@link ModbusReadRequestMessage}.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusWriteRequestMessageTest {
|
||||
|
||||
@Before
|
||||
public void Before() {
|
||||
}
|
||||
|
||||
final int coilAddress = 12345;
|
||||
final int value = 987654;
|
||||
final String okMessage = "C06B06393006120F00BF";
|
||||
|
||||
@Test
|
||||
public void createMessageTest() throws NibeHeatPumpException {
|
||||
ModbusWriteRequestMessage m = new ModbusWriteRequestMessage.MessageBuilder().coilAddress(coilAddress)
|
||||
.value(value).build();
|
||||
byte[] byteMessage = m.decodeMessage();
|
||||
assertEquals(okMessage, HexUtils.bytesToHex(byteMessage));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseMessageTest() throws NibeHeatPumpException {
|
||||
final byte[] byteMessage = HexUtils.hexToBytes(okMessage);
|
||||
ModbusWriteRequestMessage m = new ModbusWriteRequestMessage(byteMessage);
|
||||
assertEquals(coilAddress, m.getCoilAddress());
|
||||
assertEquals(value, m.getValue());
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void badCrcTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "C06B06393006120F00BA";
|
||||
final byte[] msg = HexUtils.hexToBytes(strMessage);
|
||||
new ModbusWriteRequestMessage(msg);
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void notWriteRequestMessageTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "C06A06393006120F00BF";
|
||||
final byte[] byteMessage = HexUtils.hexToBytes(strMessage);
|
||||
new ModbusWriteRequestMessage(byteMessage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.nibeheatpump.internal.NibeHeatPumpException;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
|
||||
/**
|
||||
* Tests cases for {@link ModbusReadRequestMessage}.
|
||||
*
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class ModbusWriteResponseMessageTest {
|
||||
|
||||
@Before
|
||||
public void Before() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createMessage1Test() throws NibeHeatPumpException {
|
||||
final String okMessage = "5C00206C01014C";
|
||||
ModbusWriteResponseMessage m = new ModbusWriteResponseMessage.MessageBuilder().result(true).build();
|
||||
byte[] byteMessage = m.decodeMessage();
|
||||
assertEquals(okMessage, HexUtils.bytesToHex(byteMessage));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createMessage2Test() throws NibeHeatPumpException {
|
||||
final String okMessage = "5C00206C01004D";
|
||||
ModbusWriteResponseMessage m = new ModbusWriteResponseMessage.MessageBuilder().result(false).build();
|
||||
byte[] byteMessage = m.decodeMessage();
|
||||
assertEquals(okMessage, HexUtils.bytesToHex(byteMessage));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseSuccMessageTest() throws NibeHeatPumpException {
|
||||
final String message = "5C00206C01014C";
|
||||
byte[] byteMessage = HexUtils.hexToBytes(message);
|
||||
ModbusWriteResponseMessage m = new ModbusWriteResponseMessage(byteMessage);
|
||||
assertEquals(true, m.isSuccessfull());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseFailMessageTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "5C00206C01004D";
|
||||
final byte[] byteMessage = HexUtils.hexToBytes(strMessage);
|
||||
ModbusWriteResponseMessage m = new ModbusWriteResponseMessage(byteMessage);
|
||||
assertEquals(false, m.isSuccessfull());
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void badCrcTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "5C00206C01004A";
|
||||
final byte[] msg = HexUtils.hexToBytes(strMessage);
|
||||
new ModbusWriteResponseMessage(msg);
|
||||
}
|
||||
|
||||
@Test(expected = NibeHeatPumpException.class)
|
||||
public void notWriteResponseMessageTest() throws NibeHeatPumpException {
|
||||
final String strMessage = "5C00206B060102030405064A";
|
||||
final byte[] byteMessage = HexUtils.hexToBytes(strMessage);
|
||||
new ModbusWriteResponseMessage(byteMessage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.message;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocolContext;
|
||||
import org.openhab.binding.nibeheatpump.internal.protocol.NibeHeatPumpProtocolDefaultContext;
|
||||
import org.openhab.core.util.HexUtils;
|
||||
|
||||
/**
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class NibeHeatPumpProtocolTest {
|
||||
|
||||
int ackRequestCount = 0;
|
||||
int nakRequestCount = 0;
|
||||
int sendWriteMsgCount = 0;
|
||||
int sendReadMsgCount = 0;
|
||||
List<byte[]> receivedMsgs = null;
|
||||
|
||||
final NibeHeatPumpProtocolContext mockupContext = new NibeHeatPumpProtocolDefaultContext() {
|
||||
@Override
|
||||
public void sendAck() {
|
||||
ackRequestCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendNak() {
|
||||
nakRequestCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void msgReceived(byte[] data) {
|
||||
receivedMsgs.add(Arrays.copyOf(data, data.length));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendWriteMsg() {
|
||||
sendWriteMsgCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendReadMsg() {
|
||||
sendReadMsgCount++;
|
||||
}
|
||||
};
|
||||
|
||||
@Before
|
||||
public void Before() {
|
||||
ackRequestCount = 0;
|
||||
nakRequestCount = 0;
|
||||
sendWriteMsgCount = 0;
|
||||
sendReadMsgCount = 0;
|
||||
receivedMsgs = new ArrayList<>();
|
||||
mockupContext.buffer().clear();
|
||||
mockupContext.msg().clear();
|
||||
}
|
||||
|
||||
@Test(timeout = 1000)
|
||||
public void test() {
|
||||
//@formatter:off
|
||||
final String strTestData =
|
||||
// RMU40 message, acknowledge should be send
|
||||
"5C001962189600E1010200000000800000000000020914340001000005B8"
|
||||
// RMU40 message, CRC failure, negative acknowledge should be send
|
||||
+ "5C001962189600E1010200000000800000000000020914340001000005B9"
|
||||
// MODBUS40 write request
|
||||
+ "5C00206B004B"
|
||||
// nonsense
|
||||
+ "3EAABB"
|
||||
// MODBUS40 read request
|
||||
+ "5C0020690049"
|
||||
// nonsense
|
||||
+ "F0561939F6"
|
||||
// MODBUS40 data read out, acknowledge should be send
|
||||
+ "5C00206850449C9600489C88014C9C2D014E9CCF004D9CE0014F9C3200509C0400519C8201529C6B02569C3E00C9AF000001A8F600FDA77E02FAA90F0098A9DC27FFFF0000A0A93A04FFFF00009CA9FD19FFFF000081"
|
||||
// nonsense
|
||||
+ "F0349823"
|
||||
// MODBUS40 data read out, CRC failure, negative acknowledge should be send
|
||||
+ "5C00206850449C9600489C88014C9C2D014E9CCF004D9CE0014F9C3200509C0400519C8201529C6B02569C3E00C9AF000001A8F600FDA77E02FAA90F0098A9DC27FFFF0000A0A93A04FFFF00009CA9FD19FFFF000080"
|
||||
// RMU40 message, acknowledge should be send
|
||||
+ "5C001962189600DF01020000000080000000000002091434000100000586"
|
||||
// nonsense
|
||||
+ "123490"
|
||||
// unknown RMU40 message, acknowledge should be send
|
||||
+ "5C0019600079"
|
||||
// MODBUS40 data read out, special len, acknowledge should be send
|
||||
+ "5C00206851449C2500489CFC004C9CF1004E9CC7014D9C0B024F9C2500509C3300519C0B01529C5C5C01569C3100C9AF000001A80C01FDA716FAFAA9070098A91B1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000BE"
|
||||
// MODBUS40 data read out, special len, acknowledge should be send
|
||||
+ "5C00206852449C2500489CFE004C9CF2004E9CD4014D9CFB014F9C2500509C3700519C0D01529C5C5C01569C3200C9AF000001A80C01FDA712FAFAA9070098A95C5C1BFFFF0000A0A9D102FFFF00009CA9B412FFFF00007F"
|
||||
// MODBUS40 data read out, special checksum, acknowledge should be send
|
||||
+ "5C00206850449C2600489CF6004C9CF1004E9CD6014D9C0C024F9C4500509C3F00519CF100529C0401569CD500C9AF000001A80C01FDA799FAFAA9020098A91A1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000C5";
|
||||
//@formatter:on
|
||||
|
||||
// create byte data from hex string
|
||||
final byte[] rawData = HexUtils.hexToBytes(strTestData);
|
||||
|
||||
// put byte data to protocol state machine
|
||||
mockupContext.buffer().put(rawData);
|
||||
mockupContext.buffer().flip();
|
||||
|
||||
// run protocol state machine to process test data
|
||||
while (mockupContext.state().process(mockupContext)) {
|
||||
}
|
||||
|
||||
// test results
|
||||
|
||||
assertEquals(7, ackRequestCount);
|
||||
assertEquals(2, nakRequestCount);
|
||||
assertEquals(1, sendWriteMsgCount);
|
||||
assertEquals(1, sendReadMsgCount);
|
||||
assertEquals(7, receivedMsgs.size());
|
||||
|
||||
String expect;
|
||||
|
||||
expect = "5C001962189600E1010200000000800000000000020914340001000005B8";
|
||||
Assert.assertArrayEquals(HexUtils.hexToBytes(expect), receivedMsgs.get(0));
|
||||
|
||||
expect = "5C00206850449C9600489C88014C9C2D014E9CCF004D9CE0014F9C3200509C0400519C8201529C6B02569C3E00C9AF000001A8F600FDA77E02FAA90F0098A9DC27FFFF0000A0A93A04FFFF00009CA9FD19FFFF000081";
|
||||
Assert.assertArrayEquals(HexUtils.hexToBytes(expect), receivedMsgs.get(1));
|
||||
|
||||
expect = "5C001962189600DF01020000000080000000000002091434000100000586";
|
||||
Assert.assertArrayEquals(HexUtils.hexToBytes(expect), receivedMsgs.get(2));
|
||||
|
||||
expect = "5C0019600079";
|
||||
Assert.assertArrayEquals(HexUtils.hexToBytes(expect), receivedMsgs.get(3));
|
||||
|
||||
expect = "5C00206851449C2500489CFC004C9CF1004E9CC7014D9C0B024F9C2500509C3300519C0B01529C5C5C01569C3100C9AF000001A80C01FDA716FAFAA9070098A91B1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000BE";
|
||||
Assert.assertArrayEquals(HexUtils.hexToBytes(expect), receivedMsgs.get(4));
|
||||
|
||||
expect = "5C00206852449C2500489CFE004C9CF2004E9CD4014D9CFB014F9C2500509C3700519C0D01529C5C5C01569C3200C9AF000001A80C01FDA712FAFAA9070098A95C5C1BFFFF0000A0A9D102FFFF00009CA9B412FFFF00007F";
|
||||
Assert.assertArrayEquals(HexUtils.hexToBytes(expect), receivedMsgs.get(5));
|
||||
|
||||
expect = "5C00206850449C2600489CF6004C9CF1004E9CD6014D9C0C024F9C4500509C3F00519CF100529C0401569CD500C9AF000001A80C01FDA799FAFAA9020098A91A1BFFFF0000A0A9CA02FFFF00009CA99212FFFF0000C5";
|
||||
Assert.assertArrayEquals(HexUtils.hexToBytes(expect), receivedMsgs.get(6));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.models;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class PumpModelTest {
|
||||
|
||||
@Before
|
||||
public void Before() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF1X45() {
|
||||
final String pumpModelString = "F1X45";
|
||||
final PumpModel pumpModel = PumpModel.getPumpModel(pumpModelString);
|
||||
assertEquals(PumpModel.F1X45, pumpModel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF1X55() {
|
||||
final String pumpModelString = "F1X55";
|
||||
final PumpModel pumpModel = PumpModel.getPumpModel(pumpModelString);
|
||||
assertEquals(PumpModel.F1X55, pumpModel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF750() {
|
||||
final String pumpModelString = "F750";
|
||||
final PumpModel pumpModel = PumpModel.getPumpModel(pumpModelString);
|
||||
assertEquals(PumpModel.F750, pumpModel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF470() {
|
||||
final String pumpModelString = "F470";
|
||||
final PumpModel pumpModel = PumpModel.getPumpModel(pumpModelString);
|
||||
assertEquals(PumpModel.F470, pumpModel);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void badPumpModelTest() {
|
||||
PumpModel.getPumpModel("XXXX");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2020 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.nibeheatpump.internal.models;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Pauli Anttila - Initial contribution
|
||||
*/
|
||||
public class VariableInformationTest {
|
||||
|
||||
@Before
|
||||
public void Before() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF1X45Variable() {
|
||||
final int coilAddress = 40004;
|
||||
final VariableInformation variableInfo = VariableInformation.getVariableInfo(PumpModel.F1X45, coilAddress);
|
||||
assertEquals(10, variableInfo.factor);
|
||||
assertEquals("BT1 Outdoor temp", variableInfo.variable);
|
||||
assertEquals(VariableInformation.NibeDataType.S16, variableInfo.dataType);
|
||||
assertEquals(VariableInformation.Type.SENSOR, variableInfo.type);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF1X55Variable() {
|
||||
final int coilAddress = 40004;
|
||||
final VariableInformation variableInfo = VariableInformation.getVariableInfo(PumpModel.F1X55, coilAddress);
|
||||
assertEquals(10, variableInfo.factor);
|
||||
assertEquals("BT1 Outdoor Temperature", variableInfo.variable);
|
||||
assertEquals(VariableInformation.NibeDataType.S16, variableInfo.dataType);
|
||||
assertEquals(VariableInformation.Type.SENSOR, variableInfo.type);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF750Variable() {
|
||||
final int coilAddress = 40004;
|
||||
final VariableInformation variableInfo = VariableInformation.getVariableInfo(PumpModel.F750, coilAddress);
|
||||
assertEquals(10, variableInfo.factor);
|
||||
assertEquals("BT1 Outdoor Temperature", variableInfo.variable);
|
||||
assertEquals(VariableInformation.NibeDataType.S16, variableInfo.dataType);
|
||||
assertEquals(VariableInformation.Type.SENSOR, variableInfo.type);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestF470Variable() {
|
||||
final int coilAddress = 40020;
|
||||
final VariableInformation variableInfo = VariableInformation.getVariableInfo(PumpModel.F470, coilAddress);
|
||||
assertEquals(10, variableInfo.factor);
|
||||
assertEquals("EB100-BT16 Evaporator temp", variableInfo.variable);
|
||||
assertEquals(VariableInformation.NibeDataType.S16, variableInfo.dataType);
|
||||
assertEquals(VariableInformation.Type.SENSOR, variableInfo.type);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user