From 924038311088bc2287ead1b6796e4485510b7d17 Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:20:19 +0100
Subject: [PATCH 01/10] Delete SoftwareSerial.cpp
---
BSB_lan/lib/BSB/SoftwareSerial.cpp | 512 -----------------------------
1 file changed, 512 deletions(-)
delete mode 100644 BSB_lan/lib/BSB/SoftwareSerial.cpp
diff --git a/BSB_lan/lib/BSB/SoftwareSerial.cpp b/BSB_lan/lib/BSB/SoftwareSerial.cpp
deleted file mode 100644
index 80ddc206..00000000
--- a/BSB_lan/lib/BSB/SoftwareSerial.cpp
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
-SoftwareSerial.cpp (formerly NewSoftSerial.cpp) -
-Multi-instance software serial library for Arduino/Wiring
--- Interrupt-driven receive and other improvements by ladyada
- (http://ladyada.net)
--- Tuning, circular buffer, derivation from class Print/Stream,
- multi-instance support, porting to 8MHz processors,
- various optimizations, PROGMEM delay tables, inverse logic and
- direct port writing by Mikal Hart (http://www.arduiniana.org)
--- Pin change interrupt macros by Paul Stoffregen (http://www.pjrc.com)
--- 20MHz processor support by Garrett Mace (http://www.macetech.com)
--- ATmega1280/2560 support by Brett Hagman (http://www.roguerobotics.com/)
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-The latest version of this library can always be found at
-http://arduiniana.org.
-*/
-
-// When set, _DEBUG co-opts pins 11 and 13 for debugging with an
-// oscilloscope or logic analyzer. Beware: it also slightly modifies
-// the bit times, so don't rely on it too much at high baud rates
-#define _DEBUG 0
-#define _DEBUG_PIN1 11
-#define _DEBUG_PIN2 13
-//
-// Includes
-//
-#include
-#include
-#include "Arduino.h"
-#include "SoftwareSerial.h"
-//
-// Lookup table
-//
-typedef struct _DELAY_TABLE
-{
- long baud;
- unsigned short rx_delay_centering;
- unsigned short rx_delay_intrabit;
- unsigned short rx_delay_stopbit;
- unsigned short tx_delay;
-} DELAY_TABLE;
-
-#if F_CPU == 16000000
-
-static const DELAY_TABLE PROGMEM table[] =
-{
- // baud rxcenter rxintra rxstop tx
- { 115200, 1, 17, 17, 12, },
- { 57600, 10, 37, 37, 33, },
- { 38400, 25, 57, 57, 54, },
- { 31250, 31, 70, 70, 68, },
- { 28800, 34, 77, 77, 74, },
- { 19200, 54, 117, 117, 114, },
- { 14400, 74, 156, 156, 153, },
- { 9600, 114, 236, 236, 233, },
- { 4800, 233, 474, 474, 471, },
- { 2400, 471, 950, 950, 947, },
- { 1200, 947, 1902, 1902, 1899, },
- { 300, 3804, 7617, 7617, 7614, },
-};
-
-const int XMIT_START_ADJUSTMENT = 5;
-
-#elif F_CPU == 8000000
-
-static const DELAY_TABLE table[] PROGMEM =
-{
- // baud rxcenter rxintra rxstop tx
- { 115200, 1, 5, 5, 3, },
- { 57600, 1, 15, 15, 13, },
- { 38400, 2, 25, 26, 23, },
- { 31250, 7, 32, 33, 29, },
- { 28800, 11, 35, 35, 32, },
- { 19200, 20, 55, 55, 52, },
- { 14400, 30, 75, 75, 72, },
- { 9600, 50, 114, 114, 112, },
- { 4800, 110, 233, 233, 230, },
- { 2400, 229, 472, 472, 469, },
- { 1200, 467, 948, 948, 945, },
- { 300, 1895, 3805, 3805, 3802, },
-};
-
-const int XMIT_START_ADJUSTMENT = 4;
-
-#elif F_CPU == 20000000
-
-// 20MHz support courtesy of the good people at macegr.com.
-// Thanks, Garrett!
-
-static const DELAY_TABLE PROGMEM table[] =
-{
- // baud rxcenter rxintra rxstop tx
- { 115200, 3, 21, 21, 18, },
- { 57600, 20, 43, 43, 41, },
- { 38400, 37, 73, 73, 70, },
- { 31250, 45, 89, 89, 88, },
- { 28800, 46, 98, 98, 95, },
- { 19200, 71, 148, 148, 145, },
- { 14400, 96, 197, 197, 194, },
- { 9600, 146, 297, 297, 294, },
- { 4800, 296, 595, 595, 592, },
- { 2400, 592, 1189, 1189, 1186, },
- { 1200, 1187, 2379, 2379, 2376, },
- { 300, 4759, 9523, 9523, 9520, },
-};
-
-const int XMIT_START_ADJUSTMENT = 6;
-
-#else
-
-#error This version of SoftwareSerial supports only 20, 16 and 8MHz processors
-
-#endif
-
-//
-// Statics
-//
-SoftwareSerial *SoftwareSerial::active_object = 0;
-char SoftwareSerial::_receive_buffer[_SS_MAX_RX_BUFF];
-volatile uint8_t SoftwareSerial::_receive_buffer_tail = 0;
-volatile uint8_t SoftwareSerial::_receive_buffer_head = 0;
-
-//
-// Debugging
-//
-// This function generates a brief pulse
-// for debugging or measuring on an oscilloscope.
-inline void DebugPulse(uint8_t pin, uint8_t count)
-{
-#if _DEBUG
- volatile uint8_t *pport = portOutputRegister(digitalPinToPort(pin));
-
- uint8_t val = *pport;
- while (count--)
- {
- *pport = val | digitalPinToBitMask(pin);
- *pport = val;
- }
-#endif
-}
-
-//
-// Private methods
-//
-
-/* static */
-inline void SoftwareSerial::tunedDelay(uint16_t delay) {
- uint8_t tmp=0;
-
- asm volatile("sbiw %0, 0x01 \n\t"
- "ldi %1, 0xFF \n\t"
- "cpi %A0, 0xFF \n\t"
- "cpc %B0, %1 \n\t"
- "brne .-10 \n\t"
- : "+r" (delay), "+a" (tmp)
- : "0" (delay)
- );
-}
-
-// This function sets the current object as the "listening"
-// one and returns true if it replaces another
-bool SoftwareSerial::listen()
-{
- if (active_object != this)
- {
- _buffer_overflow = false;
- uint8_t oldSREG = SREG;
- cli();
- _receive_buffer_head = _receive_buffer_tail = 0;
- active_object = this;
- SREG = oldSREG;
- return true;
- }
-
- return false;
-}
-
-//
-// The receive routine called by the interrupt handler
-//
-void SoftwareSerial::recv()
-{
-
-#if GCC_VERSION < 40302
-// Work-around for avr-gcc 4.3.0 OSX version bug
-// Preserve the registers that the compiler misses
-// (courtesy of Arduino forum user *etracer*)
- asm volatile(
- "push r18 \n\t"
- "push r19 \n\t"
- "push r20 \n\t"
- "push r21 \n\t"
- "push r22 \n\t"
- "push r23 \n\t"
- "push r26 \n\t"
- "push r27 \n\t"
- ::);
-#endif
-
- uint8_t d = 0;
-
- // If RX line is high, then we don't see any start bit
- // so interrupt is probably not for us
- if (_inverse_logic ? rx_pin_read() : !rx_pin_read())
- {
- // Wait approximately 1/2 of a bit width to "center" the sample
- tunedDelay(_rx_delay_centering);
- DebugPulse(_DEBUG_PIN2, 1);
-
- // Read each of the 8 bits
- for (uint8_t i=0x1; i; i <<= 1)
- {
- tunedDelay(_rx_delay_intrabit);
- DebugPulse(_DEBUG_PIN2, 1);
- uint8_t noti = ~i;
- if (rx_pin_read())
- d |= i;
- else // else clause added to ensure function timing is ~balanced
- d &= noti;
- }
-
- // skip the stop bit
- tunedDelay(_rx_delay_stopbit *2);
- DebugPulse(_DEBUG_PIN2, 1);
-
- if (_inverse_logic)
- d = ~d;
-
- // if buffer full, set the overflow flag and return
- if ((_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF != _receive_buffer_head)
- {
- // save new data in buffer: tail points to where byte goes
- _receive_buffer[_receive_buffer_tail] = d; // save new byte
- _receive_buffer_tail = (_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF;
- }
- else
- {
-#if _DEBUG // for scope: pulse pin as overflow indictator
- DebugPulse(_DEBUG_PIN1, 1);
-#endif
- _buffer_overflow = true;
- }
- }
-
-#if GCC_VERSION < 40302
-// Work-around for avr-gcc 4.3.0 OSX version bug
-// Restore the registers that the compiler misses
- asm volatile(
- "pop r27 \n\t"
- "pop r26 \n\t"
- "pop r23 \n\t"
- "pop r22 \n\t"
- "pop r21 \n\t"
- "pop r20 \n\t"
- "pop r19 \n\t"
- "pop r18 \n\t"
- ::);
-#endif
-}
-
-void SoftwareSerial::tx_pin_write(uint8_t pin_state)
-{
- if (pin_state == LOW)
- *_transmitPortRegister &= ~_transmitBitMask;
- else
- *_transmitPortRegister |= _transmitBitMask;
-}
-
-uint8_t SoftwareSerial::rx_pin_read()
-{
- return *_receivePortRegister & _receiveBitMask;
-}
-
-//
-// Interrupt handling
-//
-
-/* static */
-inline void SoftwareSerial::handle_interrupt()
-{
- if (active_object)
- {
- active_object->recv();
- }
-}
-
-#if defined(PCINT0_vect)
-ISR(PCINT0_vect)
-{
- SoftwareSerial::handle_interrupt();
-}
-#endif
-
-#if defined(PCINT1_vect)
-ISR(PCINT1_vect)
-{
- SoftwareSerial::handle_interrupt();
-}
-#endif
-
-#if defined(PCINT2_vect)
-ISR(PCINT2_vect)
-{
- SoftwareSerial::handle_interrupt();
-}
-#endif
-
-#if defined(PCINT3_vect)
-ISR(PCINT3_vect)
-{
- SoftwareSerial::handle_interrupt();
-}
-#endif
-
-//
-// Constructor
-//
-SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */) :
- _rx_delay_centering(0),
- _rx_delay_intrabit(0),
- _rx_delay_stopbit(0),
- _tx_delay(0),
- _buffer_overflow(false),
- _inverse_logic(inverse_logic)
-{
- setTX(transmitPin);
- setRX(receivePin);
-}
-
-//
-// Destructor
-//
-SoftwareSerial::~SoftwareSerial()
-{
- end();
-}
-
-void SoftwareSerial::setTX(uint8_t tx)
-{
- pinMode(tx, OUTPUT);
- digitalWrite(tx, LOW);
- _transmitBitMask = digitalPinToBitMask(tx);
- uint8_t port = digitalPinToPort(tx);
- _transmitPortRegister = portOutputRegister(port);
-}
-
-void SoftwareSerial::setRX(uint8_t rx)
-{
- pinMode(rx, INPUT);
- if (!_inverse_logic)
- digitalWrite(rx, HIGH); // pullup for normal logic!
- _receivePin = rx;
- _receiveBitMask = digitalPinToBitMask(rx);
- uint8_t port = digitalPinToPort(rx);
- _receivePortRegister = portInputRegister(port);
-}
-
-//
-// Public methods
-//
-
-void SoftwareSerial::begin(long speed)
-{
- _rx_delay_centering = _rx_delay_intrabit = _rx_delay_stopbit = _tx_delay = 0;
-
- for (unsigned i=0; i>= 1)
- if (b & t) p++;
-
- for (byte mask = 0x01; mask; mask <<= 1)
- {
- if (b & mask) // choose bit
- tx_pin_write(LOW); // send 1
- else
- tx_pin_write(HIGH); // send 0
-
- tunedDelay(_tx_delay);
- }
-
- // parity
- if (p & 0x01)
- tx_pin_write(HIGH); // send 0
- else
- tx_pin_write(LOW); // send 1
- tunedDelay(_tx_delay);
-
- // Stop bit
- tx_pin_write(LOW); // send 1
- tunedDelay(_tx_delay);
-
- tx_pin_write(LOW); // restore pin to natural state
-
- SREG = oldSREG; // turn interrupts back on
-
- return 1;
-}
-
-void SoftwareSerial::flush()
-{
- if (!isListening())
- return;
-
- uint8_t oldSREG = SREG;
- cli();
- _receive_buffer_head = _receive_buffer_tail = 0;
- SREG = oldSREG;
-}
-
-int SoftwareSerial::peek()
-{
- if (!isListening())
- return -1;
-
- // Empty buffer?
- if (_receive_buffer_head == _receive_buffer_tail)
- return -1;
-
- // Read from "head"
- return _receive_buffer[_receive_buffer_head];
-}
From c942065c4ae159b017b1fcb444047aec2d835b7c Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:20:31 +0100
Subject: [PATCH 02/10] Delete SoftwareSerial.h
---
BSB_lan/lib/BSB/SoftwareSerial.h | 119 -------------------------------
1 file changed, 119 deletions(-)
delete mode 100644 BSB_lan/lib/BSB/SoftwareSerial.h
diff --git a/BSB_lan/lib/BSB/SoftwareSerial.h b/BSB_lan/lib/BSB/SoftwareSerial.h
deleted file mode 100644
index 90cbfa27..00000000
--- a/BSB_lan/lib/BSB/SoftwareSerial.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-SoftwareSerial.h (formerly NewSoftSerial.h) -
-Multi-instance software serial library for Arduino/Wiring
--- Interrupt-driven receive and other improvements by ladyada
- (http://ladyada.net)
--- Tuning, circular buffer, derivation from class Print/Stream,
- multi-instance support, porting to 8MHz processors,
- various optimizations, PROGMEM delay tables, inverse logic and
- direct port writing by Mikal Hart (http://www.arduiniana.org)
--- Pin change interrupt macros by Paul Stoffregen (http://www.pjrc.com)
--- 20MHz processor support by Garrett Mace (http://www.macetech.com)
--- ATmega1280/2560 support by Brett Hagman (http://www.roguerobotics.com/)
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-The latest version of this library can always be found at
-http://arduiniana.org.
-*/
-
-#ifndef SoftwareSerial_h
-#define SoftwareSerial_h
-
-#include
-#include
-
-//Now the library is compatible both with Arduino <=0023 and Arduino >=100
-#if defined(ARDUINO) && ARDUINO >= 100
-#include "Arduino.h"
-#else
-#include "WProgram.h"
-#endif
-
-/******************************************************************************
-* Definitions
-******************************************************************************/
-
-#define _SS_MAX_RX_BUFF 48 // RX buffer size
-#ifndef GCC_VERSION
-#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
-#endif
-
-class SoftwareSerial : public Stream
-{
-private:
- // per object data
- uint8_t _receivePin;
- uint8_t _receiveBitMask;
- volatile uint8_t *_receivePortRegister;
- uint8_t _transmitBitMask;
- volatile uint8_t *_transmitPortRegister;
-
- uint16_t _rx_delay_centering;
- uint16_t _rx_delay_intrabit;
- uint16_t _rx_delay_stopbit;
- uint16_t _tx_delay;
-
- uint16_t _buffer_overflow:1;
- uint16_t _inverse_logic:1;
-
- // static data
- static char _receive_buffer[_SS_MAX_RX_BUFF];
- static volatile uint8_t _receive_buffer_tail;
- static volatile uint8_t _receive_buffer_head;
- static SoftwareSerial *active_object;
-
- // private methods
- void recv();
- void tx_pin_write(uint8_t pin_state);
- void setTX(uint8_t transmitPin);
- void setRX(uint8_t receivePin);
-
- // private static method for timing
- static inline void tunedDelay(uint16_t delay);
-
-public:
- // public methods
- SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false);
- ~SoftwareSerial();
- void begin(long speed);
- bool listen();
- void end();
- uint8_t rx_pin_read();
- bool isListening() { return this == active_object; }
- bool overflow() { bool ret = _buffer_overflow; _buffer_overflow = false; return ret; }
- int peek();
-
- virtual size_t write(byte b);
- virtual int read();
- virtual int available();
- virtual void flush();
-
- using Print::write;
-
- // public only for easy access by interrupt handlers
- static inline void handle_interrupt();
-};
-
-// Arduino 0012 workaround
-#undef int
-#undef char
-#undef long
-#undef byte
-#undef float
-#undef abs
-#undef round
-
-#endif
From 86229890bc6b10056c28fe489d565f15d32a6a15 Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:20:45 +0100
Subject: [PATCH 03/10] Delete bsb.cpp
---
BSB_lan/lib/BSB/bsb.cpp | 228 ----------------------------------------
1 file changed, 228 deletions(-)
delete mode 100644 BSB_lan/lib/BSB/bsb.cpp
diff --git a/BSB_lan/lib/BSB/bsb.cpp b/BSB_lan/lib/BSB/bsb.cpp
deleted file mode 100644
index 2a9c7af2..00000000
--- a/BSB_lan/lib/BSB/bsb.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-#if defined(ARDUINO) && ARDUINO >= 100
-#include "Arduino.h"
-#else
-#include "WProgram.h"
-#endif
-
-#include "bsb.h"
-
-#define DEBUG_LL 0
-
-// Constructor
-BSB::BSB(uint8_t rx, uint8_t tx, uint8_t addr) {
- serial = new SoftwareSerial(rx, tx, true);
-
- serial->begin(4800);
- serial->listen();
- myAddr=addr;
-}
-
-// Dumps a message to Serial
-void BSB::print(byte* msg) {
- //if (msg[0] != 0xDC) return;
- byte len = msg[3];
- //if (len > 30) return;
- byte data = 0;
-
- for (; len > 0; len--) {
- data = msg[msg[3]-len];
- if (data < 16) Serial.print("0");
- Serial.print(data, HEX);
- Serial.print(" ");
- }
- Serial.println();
-}
-
-
-// Receives a message and stores it to buffer
-bool BSB::GetMessage(byte* msg) {
- byte i=0,timeout;
- byte read;
-
- while (serial->available() > 0) {
- // Read serial data...
- read = serial->read() ^ 0xFF;
-
-#if DEBUG_LL
- Serial.println();
- if(read<16){
- Serial.print("0");
- }
- Serial.print(read, HEX);
- Serial.print(" ");
-#endif
-
- // ... until SOF detected (= 0xDC)
- if (read == 0xDC || read == 0xDE) {
- // Restore otherwise dropped SOF indicator
- msg[i++] = read;
-
- // Delay for more data
- delay(1);
-
- // read the rest of the message
- while (serial->available() > 0) {
- read = serial->read() ^ 0xFF;
- msg[i++] = read;
-#if DEBUG_LL
- if(read<16){
- Serial.print("0");
- }
- Serial.print(read, HEX);
- Serial.print(" ");
-#endif
- // Break if message seems to be completely received (i==msg.length)
- if (i > 3){
- if ( msg[3] > 32 ) // check for maximum message length
- break;
- if (i >= msg[3])
- break;
- }
- // Delay until we got next byte
- if (serial->available() == 0) {
- timeout = 30;
- while ((timeout > 0) && (serial->available() == 0)){
- delayMicroseconds(15);
- timeout--;
- }
- }
-
- // Break if next byte signals next message (0x23 ^ 0xFF == 0xDC)
- // if((serial->peek() == 0x23)) break;
- // DO NOT break because some messages contain a 0xDC
- }
-
- // We should have read the message completly. Now check and return
- if (i == msg[3]) {
- // Seems to have received all data
- if (CRC(msg, i) == 0) return true;
- else return false;
- }
- else {
- // Length error
- return false;
- }
- }
- }
-
- // We got no data so:
- return false;
-}
-
-// Generates CCITT XMODEM CRC from message
-uint16_t BSB::CRC (byte* buffer, uint8_t length) {
- uint16_t crc = 0, i;
-
- for (i = 0; i < length; i++) {
- crc = _crc_xmodem_update(crc, buffer[i]);
- }
-
- // Complete message returns 0x00
- // Message w/o last 2 bytes (CRC) returns last 2 bytes (CRC)
- return crc;
-}
-
-// Low-Level sending of message to bus
-inline void BSB::_send(byte* msg) {
-// Nun - Ein Teilnehmer will senden :
- byte i;
- byte data;
- byte len = msg[3];
- msg[0] = 0xDC;
- msg[1] = myAddr | 0x80;
- msg[2] = 0x00;
-
- {
- uint16_t crc = CRC (msg, len -2);
- msg[len -2] = (crc >> 8);
- msg[len -1] = (crc & 0xFF);
- }
-#if DEBUG_LL
- print(msg);
-#endif
- /*
-Er wartet 10/4800 Sek ab, lauscht und schaut ob der Bus in dieser Zeit
-von jemand anderem benutzt wird. Sprich ob der Bus in dieser Zeit mal
-auf 0 runtergezogen wurde. Wenn ja - mit den warten neu anfangen.
-*/
-
-retry:
- {
- //i=3;
- unsigned long timeout = millis() + 3;//((1/480)*1000);
- while (millis() < timeout) {
- if ( serial->rx_pin_read()) // inverse logic
- {
- goto retry;
- }
- }
- }
- //Serial.println("bus free");
-
-/*
-Wenn nicht wird das erste Bit gesendet. ( Startbit )
-
-Jedes gesendete Bit wird ( wegen Bus ) ja sofort auf der Empfangsleitung
-wieder ankommen. Man schaut nach, ob das gesendetet Bit mit dem
-empfangenen Bit übereinstimmt.
-Wenn ich eine "0" sende - also den Bus auf High lasse, dann will ich
-sehen, dass der Bus weiterhin auf High ist. Sollte ein anderer
-Teilnehmer in dieser Zeit eine "1" senden - also den Bus herunterziehen,
-dann höre ich sofort auf mit dem Senden und fange oben wieder an.
-Danach folgen nach gleichem Muster die folgenden Bits, Bit 7..0, Parity
-und Stop Bit.
-*/
-
- cli();
- for (i=0; i < msg[3]; i++) {
- data = msg[i] ^ 0xFF;
- if (serial->write(data) != 1) {
- // Collision
- sei();
- goto retry;
- }
- }
- sei();
-}
-
-bool BSB::Send(uint8_t type, uint32_t cmd, byte* rx_msg, byte* tx_msg, byte* param, byte param_len, bool wait_for_reply) {
- byte i;
-
- // first two bytes are swapped
- byte A2 = (cmd & 0xff000000) >> 24;
- byte A1 = (cmd & 0x00ff0000) >> 16;
- byte A3 = (cmd & 0x0000ff00) >> 8;
- byte A4 = (cmd & 0x000000ff);
-
- tx_msg[3] = param_len + 11;
- tx_msg[4] = type;
- // Adress
- tx_msg[5] = A1;
- tx_msg[6] = A2;
- tx_msg[7] = A3;
- tx_msg[8] = A4;
-
- // Value
- for (i=0; i < param_len; i++)
- tx_msg[9+i] = param[i];
-
- _send(tx_msg);
-
- if(!wait_for_reply) return true;
-
- i=15;
-
- unsigned long timeout = millis() + 1000;
- while ((i > 0) && (millis() < timeout)) {
- if (GetMessage(rx_msg)) {
- i--;
- if ((rx_msg[2] == myAddr) && (rx_msg[5] == A2) && (rx_msg[6] == A1) && (rx_msg[7] == A3) && (rx_msg[8] == A4)) {
- return true;
- }
- }
- else {
- delayMicroseconds(205);
- }
- }
- return false;
-}
From 5815f7952c0a5303cb482ebc4b1584fe5a4dd484 Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:20:55 +0100
Subject: [PATCH 04/10] Delete bsb.h
---
BSB_lan/lib/BSB/bsb.h | 54 -------------------------------------------
1 file changed, 54 deletions(-)
delete mode 100644 BSB_lan/lib/BSB/bsb.h
diff --git a/BSB_lan/lib/BSB/bsb.h b/BSB_lan/lib/BSB/bsb.h
deleted file mode 100644
index 5c34be11..00000000
--- a/BSB_lan/lib/BSB/bsb.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef __BSB_H__
-#define __BSB_H__
-
-//Now the library is compatible both with Arduino <=0023 and Arduino >=100
-#if defined(ARDUINO) && ARDUINO >= 100
-#include "Arduino.h"
-#else
-#include "WProgram.h"
-#endif
-
-#include "SoftwareSerial.h"
-#include "util/crc16.h"
-
-// See this page for further details:
-// http://www.mikrocontroller.net/topic/218643
-/*
-typedef struct
-{
- byte SOF;
-
- byte SRC;
- byte RCV;
-
- byte LEN;
-
- byte TYP;
-
- byte ADR_1;
- byte ADR_2;
- byte ADR_3;
- byte ADR_4;
-
- byte DATA[3];
-} BSB_MESSAGE;
-*/
-
-class BSB
-{
-public:
- BSB(uint8_t rx, uint8_t tx, uint8_t addr=0x06 );
- bool GetMessage(byte* msg);
- void print(byte* msg);
-
- bool Send(uint8_t type, uint32_t cmd, byte* rx_msg, byte* tx_msg, byte* param=NULL, byte param_len=0, bool wait_for_reply=true);
-
-private:
- uint8_t myAddr;
- inline void _send(byte* msg);
- uint16_t CRC (byte* buffer, uint8_t length);
-
- SoftwareSerial* serial;
-};
-
-#endif
From bc6fe8888ff1f816b8fc256bc433b38e80e833d2 Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:21:03 +0100
Subject: [PATCH 05/10] Delete keywords.txt
---
BSB_lan/lib/BSB/keywords.txt | 27 ---------------------------
1 file changed, 27 deletions(-)
delete mode 100644 BSB_lan/lib/BSB/keywords.txt
diff --git a/BSB_lan/lib/BSB/keywords.txt b/BSB_lan/lib/BSB/keywords.txt
deleted file mode 100644
index 90d4c152..00000000
--- a/BSB_lan/lib/BSB/keywords.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-#######################################
-# Syntax Coloring Map for NewSoftSerial
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-NewSoftSerial KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-begin KEYWORD2
-end KEYWORD2
-read KEYWORD2
-available KEYWORD2
-isListening KEYWORD2
-overflow KEYWORD2
-flush KEYWORD2
-listen KEYWORD2
-
-#######################################
-# Constants (LITERAL1)
-#######################################
-
From 92366ff3efafe96c8fe8aab9d6854d89b9656402 Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:21:19 +0100
Subject: [PATCH 06/10] Delete BSB_lan.ino
---
BSB_lan/src/BSB_lan.ino | 4110 ---------------------------------------
1 file changed, 4110 deletions(-)
delete mode 100644 BSB_lan/src/BSB_lan.ino
diff --git a/BSB_lan/src/BSB_lan.ino b/BSB_lan/src/BSB_lan.ino
deleted file mode 100644
index f4af6809..00000000
--- a/BSB_lan/src/BSB_lan.ino
+++ /dev/null
@@ -1,4110 +0,0 @@
-/*
- * BSB Boiler-System-Bus LAN Interface
- *
- * ATTENION:
- * There is no waranty that this system will not damage your heating system!
- *
- * Author: Gero Schumacher (gero.schumacher@gmail.com)
- * (based on the code and work from many other developers. Many thanks!)
- *
- * see README file for more information
- *
- * Version:
- * 0.1 - 21.01.2015 - initial version
- * 0.5 - 02.02.2015
- *
- * Changelog:
- * version 0.5
- * - bugfixes
- * - added documentation (README)
- * - added passkey feature
- * - added R feature (query reset value)
- * - added E feature (list enum values)
- * - added setter for almost all value types
- * - fixed indentation
- * - added V feature to set verbosity for serial output
- * - set baudrate to 115200 for serial output
- * - redirecting favicon request
- * - added some images of the BSB adapter
- *
- */
-
-#include
-#include "SoftwareSerial.h"
-#include "bsb.h"
-
-#include
-#include
-#include
-#include
-
-// if set to 1, all messages on the bus are printed to the serial interface
-byte verbose = 0;
-
-// if enabled the URL has to contain the defined passkey as first element
-// e.g.
-// http://192.168.178.88/1234/ - to see the help
-// http://192.168.178.88/1234/K - to list all categories
-#define USE_PASSKEY 0
-
-#define PASSKEY "1234"
-
-// defines the number of retries for the qery command
-#define QUERY_RETRIES 3
-
-// Adjust the following settings!
-
-// Enter a MAC address and IP address for your controller below.
-// The IP address will be dependent on your local network:
-byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEA };
-
-// Initialize the Ethernet server library
-// with the IP address and port you want to use
-// (port 80 is default for HTTP):
-IPAddress ip(192,168,178,88);
-EthernetServer server(80);
-EthernetClient client;
-
-// Software Serial needs special pins for RX: 10-13, 50-53, 62(A8)-69(A15)
-// W5100 ethernet shield uses the following pins: 10, 50-53
-BSB bus(68,69);
-
-/****************************************************/
-/* DEFINITIONS and TYPEDEFS */
-/****************************************************/
-
-/* telegram types */
-#define TYPE_INF 0x02
-#define TYPE_SET 0x03
-#define TYPE_ACK 0x04
-#define TYPE_NACK 0x05
-#define TYPE_QUR 0x06
-#define TYPE_ANS 0x07
-#define TYPE_ERR 0x08
-#define TYPE_QRV 0x0F // query reset value
-#define TYPE_ARV 0x10 // anser reset value
-
-/* telegram addresses */
-#define ADDR_HEIZ 0x00
-#define ADDR_RGT1 0x06
-#define ADDR_RGT2 0x07
-#define ADDR_DISP 0x0A
-#define ADDR_ALL 0x7F
-
-/* special command ids */
-#define CMD_UNKNOWN 0x00000000u
-#define CMD_END 0xffffffffu
-
-typedef enum{
- CAT_DATUMZEIT,
- CAT_BEDIENEINHEIT,
- CAT_FUNK,
- CAT_ZEITPROG_HK1,
- CAT_ZEITPROG_HK2,
- CAT_ZEITPROG_HKP,
- CAT_ZEITPROG_TWW,
- CAT_ZEITPROG_5,
- CAT_FERIEN_HK1,
- CAT_FERIEN_HK2,
- CAT_FERIEN_HKP,
- CAT_HK1,
- CAT_KUEHL1,
- CAT_HK2,
- CAT_HKP,
- CAT_TW,
- CAT_HXPUMPE,
- CAT_SCHWIMMBAD,
- CAT_VORREGLERPUMPE,
- CAT_KESSEL,
- CAT_WAERMEPUMPE,
- CAT_KASKADE,
- CAT_ZUSATZERZEUGER,
- CAT_SOLAR,
- CAT_FESTSTOFFKESSEL,
- CAT_PUFFERSPEICHER,
- CAT_TWSPEICHER,
- CAT_DRUCHLERHITZER,
- CAT_KONFIG,
- CAT_LPB,
- CAT_FEHLER,
- CAT_WARTUNG,
- CAT_IOTEST,
- CAT_STATUS,
- CAT_DIAG_KASKADE,
- CAT_DIAG_ERZEUGER,
- CAT_DIAG_VERBRAUCHER,
- CAT_FEUERUNGSAUTOMAT,
- CAT_USER_DEFINED,
- CAT_UNKNOWN
-}category_t;
-
-/* Parameter types */
-typedef enum{
- VT_TEMP, // 3 Byte - 1 enable / value/64
- VT_FP1, // 3 Byte - 1 enable / value/10
- VT_FP02, // 3 Byte - 1 enable / value/50
- VT_UINT, // 3 Byte - 1 enable / value
- VT_ERRORCODE, // 3 Byte - 1 enable / value
- VT_ONOFF, // 2 Byte - 1 enable / 0=Aus 1=An (auch 0xff=An)
- VT_YESNO, // 2 Byte - 1 enable / 0=Nein 1=Ja (auch 0xff=Ja)
- VT_CLOSEDOPEN, // 2 Byte - 1 enable / 0=Offen 1=Geschlossen
- VT_MINUTES, // 5 Byte - 1 enable / seconds/60
- VT_MINUTES_WORD, // 3 Byte - 1 enable / minutes
- VT_MINUTES_SHORT, // 2 Byte - 1 enable / minutes
- VT_HOURS, // 5 Byte - 1 enable / seconds/3600
- VT_HOURS_WORD, // 3 Byte - 1 enable / hours
- VT_HOURS_SHORT, // 2 Byte - 1 enable / hours
- VT_HOUR_MINUTES, // 3 Byte - 1 enable / h m
- VT_DAYS, // 2 Byte - 1 enable / day
- VT_MONTHS, // 2 Byte - 1 enable / months
- VT_DATETIME, // 9 Byte - 1 enable / year+1900 month day weekday hour min sec
- VT_TIMEPROG, // 12 Byte - 1_ein 1_aus 2_ein 2_aus 3_ein 3_aus (jeweils SS:MM)
- VT_VACATIONPROG, // 9 Byte - 1 enable / byte 2/3 month/year
- VT_SUMMERPERIOD, // 9 Byte - 1 enable / byte 2/3 month/year
- VT_WEEKDAY, // 2 Byte - 1 enable / weekday (1=Mo..7=So)
- VT_PERCENT, // 2 Byte - 1 enable / percent
- VT_PRESSURE, // 2 Byte - 1 enable bar/10.0
- VT_PRESSURE_WORD, // 3 Byte - 1 enable / bar/10.0
- VT_VOLTAGE, // 2 Byte - 1 enable / volt (???) unklar, da nur 0.0V verfügbar
- VT_DWORD, // 5 Byte - 1 enable / value
- VT_BYTE, // 2 Byte - 1 enable / value
- VT_STRING, // x Byte - 1 enable / string
- VT_ENUM, // 2 Byte - 1 enable / value
- VT_LPBADDR, // 2 Byte - 1 enable / adr/seg
- VT_UNKNOWN
-}vt_type_t;
-
-typedef struct {
- uint32_t cmd;
- uint8_t category;
- uint8_t type;
- uint16_t line;
- const char *desc;
- uint16_t enumstr_len;
- const char *enumstr;
-} cmd_t;
-
-/****************************************************/
-/* PROGMEM TABLES and STRINGS */
-/****************************************************/
-//Kategorien
-const char ENUM_CAT[] PROGMEM = {
-"\x00 Uhrzeit und Datum\0"
-"\x01 Bedieneinheit\0"
-"\x02 Funk\0"
-"\x03 Zeitprogramm Heizkreis 1\0"
-"\x04 Zeitprogramm Heizkreis 2\0"
-"\x05 Zeitprogramm 3/HKP\0"
-"\x06 Zeitprogramm 4/TWW\0"
-"\x07 Zeitprogramm 5\0"
-"\x08 Ferien Heizkreis 1\0"
-"\x09 Ferien Heizkreis 2\0"
-"\x0a Ferien Heizkreis P\0"
-"\x0b Heizkreis 1\0"
-"\x0c Kühlkreis 1\0"
-"\x0d Heizkreis 2\0"
-"\x0e Heizkreis 3/P\0"
-"\x0f Trinkwasser\0"
-"\x10 Hx-Pumpe\0"
-"\x11 Schwimmbad\0"
-"\x12 Vorregler/Zubringerpumpe\0"
-"\x13 Kessel\0"
-"\x14 Wärmepumpe\0"
-"\x15 Kaskade\0"
-"\x16 Zusatzerzeuger\0"
-"\x17 Solar\0"
-"\x18 Feststoffkessel\0"
-"\x19 Pufferspeicher\0"
-"\x1a Trinkwasserspeicher\0"
-"\x1b Trinkwasser Durchl'erhitzer\0"
-"\x1c Konfiguration\0"
-"\x1d LPB-System\0"
-"\x1e Fehler\0"
-"\x1f Wartung/Sonderbetrieb\0"
-"\x20 Ein-/Ausgangstest\0"
-"\x21 Status\0"
-"\x22 Diagnose Kaskade\0"
-"\x23 Diagnose Erzeuger\0"
-"\x24 Diagnose Verbraucher\0"
-"\x25 Feuerungsautomat\0"
-"\x26 Benutzerdefiniert\0"
-"\x27 unbekannte Kategorie\0"
-};
-
-
- /* Menue Strings */
-const char STR0[] PROGMEM = "Datum/Zeit";
-const char STR1[] PROGMEM = "Stunden/Minuten";
-const char STR2[] PROGMEM = "Tag/Monat";
-const char STR3[] PROGMEM = "Jahr";
-const char STR5[] PROGMEM = "Sommerzeitbeginn Tag/Monat";
-const char STR6[] PROGMEM = "Sommerzeitende Tag/Monat";
-const char STR20[] PROGMEM = "Sprachauswahl";
-const char STR22[] PROGMEM = "Info";
-const char STR23[] PROGMEM = "Fehleranzeige";
-const char STR25[] PROGMEM = "Anzeigekontrast";
-const char STR26[] PROGMEM = "Sperre Bedienung";
-const char STR27[] PROGMEM = "Sperre Programmierung";
-const char STR28[] PROGMEM = "Bedieneinheit Direktverstellung";
-const char STR30[] PROGMEM = "Bedieneinheit Grundeinstellung sichern";
-const char STR31[] PROGMEM = "Bedieneinheit Grundeinstellung aktivieren";
-const char STR40[] PROGMEM = "Einsatz als";
-const char STR42[] PROGMEM = "Zurodnung Raumgerät 1";
-const char STR44[] PROGMEM = "Bedienung HK 2";
-const char STR46[] PROGMEM = "Bedienung HK P";
-const char STR48[] PROGMEM = "Wirkung Präsenztaste";
-const char STR54[] PROGMEM = "Korrektur Raumfühler";
-const char STR70[] PROGMEM = "Geräte-Version Bedienteil";
-const char STR120[] PROGMEM = "Binding";
-const char STR121[] PROGMEM = "Testmode";
-const char STR130[] PROGMEM = "Raumgerät 1 Status ";
-const char STR131[] PROGMEM = "Raumgerät 2 Status ";
-const char STR132[] PROGMEM = "Raumgerät P Status ";
-const char STR133[] PROGMEM = "Außenfühler P Status ";
-const char STR134[] PROGMEM = "Repeater P Status ";
-const char STR135[] PROGMEM = "Bedieneinheit 1 Status ";
-const char STR136[] PROGMEM = "Bedieneinheit 2 Status ";
-const char STR137[] PROGMEM = "Bedieneinheit P Status ";
-const char STR138[] PROGMEM = "Servicegerät Status ";
-const char STR140[] PROGMEM = "Alle Geräte löschen";
-/*
-const char STR500[] PROGMEM = "Vorwahl";
-const char STR501[] PROGMEM = "Mo-So: 1. Phase Ein";
-const char STR502[] PROGMEM = "Mo-So: 1. Phase Aus";
-const char STR503[] PROGMEM = "Mo-So: 2. Phase Ein";
-const char STR504[] PROGMEM = "Mo-So: 2. Phase Aus";
-const char STR505[] PROGMEM = "Mo-So: 3. Phase Ein";
-const char STR506[] PROGMEM = "Mo-So: 3. Phase Aus";
-*/
-const char STR500[] PROGMEM = "Mo";
-const char STR501[] PROGMEM = "Di";
-const char STR502[] PROGMEM = "Mi";
-const char STR503[] PROGMEM = "Do";
-const char STR504[] PROGMEM = "Fr";
-const char STR505[] PROGMEM = "Sa";
-const char STR506[] PROGMEM = "So";
-
-const char STR516[] PROGMEM = "Standardwerte";
-const char STR520[] PROGMEM = "Vorwahl";
-const char STR521[] PROGMEM = "Mo-So: 1. Phase Ein";
-const char STR522[] PROGMEM = "Mo-So: 1. Phase Aus";
-const char STR523[] PROGMEM = "Mo-So: 2. Phase Ein";
-const char STR524[] PROGMEM = "Mo-So: 2. Phase Aus";
-const char STR525[] PROGMEM = "Mo-So: 3. Phase Ein";
-const char STR526[] PROGMEM = "Mo-So: 3. Phase Aus";
-const char STR536[] PROGMEM = "Standardwerte";
-const char STR540[] PROGMEM = "Vorwahl";
-const char STR541[] PROGMEM = "Mo-So: 1. Phase Ein";
-const char STR542[] PROGMEM = "Mo-So: 1. Phase Aus";
-const char STR543[] PROGMEM = "Mo-So: 2. Phase Ein";
-const char STR544[] PROGMEM = "Mo-So: 2. Phase Aus";
-const char STR545[] PROGMEM = "Mo-So: 3. Phase Ein";
-const char STR546[] PROGMEM = "Mo-So: 3. Phase Aus";
-const char STR556[] PROGMEM = "Standardwerte";
-const char STR560[] PROGMEM = "Vorwahl";
-const char STR561[] PROGMEM = "Mo-So: 1. Phase Ein";
-const char STR562[] PROGMEM = "Mo-So: 1. Phase Aus";
-const char STR563[] PROGMEM = "Mo-So: 2. Phase Ein";
-const char STR564[] PROGMEM = "Mo-So: 2. Phase Aus";
-const char STR565[] PROGMEM = "Mo-So: 3. Phase Ein";
-const char STR566[] PROGMEM = "Mo-So: 3. Phase Aus";
-const char STR576[] PROGMEM = "Standardwerte";
-const char STR600[] PROGMEM = "Vorwahl";
-const char STR601[] PROGMEM = "Mo-So: 1. Phase Ein";
-const char STR602[] PROGMEM = "Mo-So: 1. Phase Aus";
-const char STR603[] PROGMEM = "Mo-So: 2. Phase Ein";
-const char STR604[] PROGMEM = "Mo-So: 2. Phase Aus";
-const char STR605[] PROGMEM = "Mo-So: 3. Phase Ein";
-const char STR606[] PROGMEM = "Mo-So: 3. Phase Aus";
-const char STR616[] PROGMEM = "Standardwerte";
-
-/* Die Zeilennummern 632-682 entsprechen nicht den Zeilennummern im Bedienteil, sondern wurden künstlich hinzugefügt*/
-const char STR632[] PROGMEM = "Periode 1 Beginn Tag/Monat";
-const char STR633[] PROGMEM = "Periode 1 Ende Tag/Monat";
-const char STR634[] PROGMEM = "Periode 2 Beginn Tag/Monat";
-const char STR635[] PROGMEM = "Periode 2 Ende Tag/Monat";
-const char STR636[] PROGMEM = "Periode 3 Beginn Tag/Monat";
-const char STR637[] PROGMEM = "Periode 3 Ende Tag/Monat";
-const char STR638[] PROGMEM = "Periode 4 Beginn Tag/Monat";
-const char STR639[] PROGMEM = "Periode 4 Ende Tag/Monat";
-const char STR640[] PROGMEM = "Periode 5 Beginn Tag/Monat";
-const char STR641[] PROGMEM = "Periode 5 Ende Tag/Monat";
-const char STR642[] PROGMEM = "Periode 6 Beginn Tag/Monat";
-const char STR643[] PROGMEM = "Periode 6 Ende Tag/Monat";
-const char STR644[] PROGMEM = "Periode 7 Beginn Tag/Monat";
-const char STR645[] PROGMEM = "Periode 7 Ende Tag/Monat";
-const char STR646[] PROGMEM = "Periode 8 Beginn Tag/Monat";
-const char STR647[] PROGMEM = "Periode 8 Ende Tag/Monat";
-const char STR648[] PROGMEM = "Betriebsniveau";
-
-#define STR649 STR632
-#define STR650 STR633
-#define STR651 STR634
-#define STR652 STR635
-#define STR653 STR636
-#define STR654 STR637
-#define STR655 STR638
-#define STR656 STR639
-#define STR657 STR640
-#define STR658 STR641
-#define STR659 STR642
-#define STR660 STR643
-#define STR661 STR644
-#define STR662 STR645
-#define STR663 STR646
-#define STR664 STR647
-#define STR665 STR648
-
-#define STR666 STR632
-#define STR667 STR633
-#define STR668 STR634
-#define STR669 STR635
-#define STR670 STR636
-#define STR671 STR637
-#define STR672 STR638
-#define STR673 STR639
-#define STR674 STR640
-#define STR675 STR641
-#define STR676 STR642
-#define STR677 STR643
-#define STR678 STR644
-#define STR679 STR645
-#define STR680 STR646
-#define STR681 STR647
-#define STR682 STR648
-
-/*
-const char STR641[] PROGMEM = "Vorwahl";
-const char STR642[] PROGMEM = "Beginn Tag/Monat";
-const char STR643[] PROGMEM = "Ende Tag/Monat";
-const char STR648[] PROGMEM = "Betriebsniveau";
-const char STR651[] PROGMEM = "Vorwahl";
-const char STR652[] PROGMEM = "Beginn Tag/Monat";
-const char STR653[] PROGMEM = "Ende Tag/Monat";
-const char STR658[] PROGMEM = "Betriebsniveau";
-const char STR661[] PROGMEM = "Vorwahl";
-const char STR662[] PROGMEM = "Beginn Tag/Monat";
-const char STR663[] PROGMEM = "Ende Tag/Monat";
-const char STR668[] PROGMEM = "Betriebsniveau";
-*/
-
-const char STR700[] PROGMEM = "Betriebsart";
-const char STR710[] PROGMEM = "Komfortsollwert";
-const char STR711[] PROGMEM = "Komfortsollwert Maximum";
-const char STR712[] PROGMEM = "Reduziertsollwert";
-const char STR714[] PROGMEM = "Frostschutzsollwert";
-const char STR720[] PROGMEM = "Kennlinie Steilheit";
-const char STR721[] PROGMEM = "Kennlinie Verschiebung";
-const char STR726[] PROGMEM = "Kennlinie Adaption";
-const char STR730[] PROGMEM = "Sommer-/ Winterheizgrenze";
-const char STR732[] PROGMEM = "Tagesheizgrenze";
-const char STR740[] PROGMEM = "Vorlaufsollwert Minimum";
-const char STR741[] PROGMEM = "Vorlaufsollwert Maximum";
-const char STR750[] PROGMEM = "Raumeinfluss";
-const char STR760[] PROGMEM = "Raumtemperaturbegrenzung";
-const char STR770[] PROGMEM = "Schnellaufheizung";
-const char STR780[] PROGMEM = "Schnellabsenkung";
-const char STR790[] PROGMEM = "Einschalt-Optimierung Max.";
-const char STR791[] PROGMEM = "Ausschalt-Optimierung Max.";
-const char STR800[] PROGMEM = "Reduziert-Anhebung Begin";
-const char STR801[] PROGMEM = "Reduziert-Anhebung Ende";
-const char STR820[] PROGMEM = "Überhitzschutz Pumpenkreis";
-const char STR830[] PROGMEM = "Mischerüberhöhung";
-const char STR850[] PROGMEM = "Estrichfunktion";
-const char STR851[] PROGMEM = "Estrich sollwert manuell";
-const char STR861[] PROGMEM = "Übertemperaturabnahme";
-const char STR870[] PROGMEM = "Mit Pufferspeicher";
-const char STR872[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
-const char STR882[] PROGMEM = "Pumpendrehzahl Minimum";
-const char STR883[] PROGMEM = "Pumpendrehzahl Maximum";
-const char STR900[] PROGMEM = "Betriebsartumschaltung";
-const char STR901[] PROGMEM = "Betriebsart";
-const char STR902[] PROGMEM = "Komfortsollwert";
-const char STR907[] PROGMEM = "Freigabe";
-const char STR908[] PROGMEM = "Vorlaufsollwert bei TA 25 °C";
-const char STR909[] PROGMEM = "Vorlaufsollwert bei TA 35 °C";
-const char STR912[] PROGMEM = "Kühlgrenze bei TA";
-const char STR913[] PROGMEM = "Sperrdauer nach Heizende";
-const char STR918[] PROGMEM = "Sommerkomp Beginn bei TA";
-const char STR919[] PROGMEM = "Sommerkomp Ende bei TA";
-const char STR920[] PROGMEM = "Sommerkomp Sollw’anhebung";
-const char STR923[] PROGMEM = "Vorlaufsollwert Min bei TA 25 °C";
-const char STR924[] PROGMEM = "Vorlaufsollwert Min bei TA 35 °C";
-const char STR928[] PROGMEM = "Raumeinfluss";
-const char STR932[] PROGMEM = "Raumtemperaturbegrenzung";
-const char STR938[] PROGMEM = "Mischerunterkühlung";
-const char STR939[] PROGMEM = "Antrieb Typ";
-const char STR940[] PROGMEM = "Schaltdifferenz 2-Punkt";
-const char STR941[] PROGMEM = "Antrieb Laufzeit";
-const char STR945[] PROGMEM = "Mischventil im Heizbetrieb";
-const char STR946[] PROGMEM = "Sperrdauer Taupunktwächt";
-const char STR947[] PROGMEM = "Vorlaufsollw’anhebung Hygro";
-const char STR948[] PROGMEM = "Vorl'anhebung Beginn bei r. F.";
-const char STR950[] PROGMEM = "Vorlauftemp'diff Taupunkt";
-const char STR962[] PROGMEM = "Mit Pufferspeicher";
-const char STR963[] PROGMEM = "Mit Vorregler/Zubring'pumpe";
-const char STR969[] PROGMEM = "Betriebsartumschaltung";
-const char STR1010[] PROGMEM = "Komfortsollwert";
-const char STR1011[] PROGMEM = "Komfortsollwert Maximum";
-const char STR1012[] PROGMEM = "Reduziertsollwert";
-const char STR1014[] PROGMEM = "Frostschutzsollwert";
-const char STR1020[] PROGMEM = "Kennlinie Steilheit";
-const char STR1021[] PROGMEM = "Kennlinie Verschiebung";
-const char STR1026[] PROGMEM = "Kennlinie Adaption";
-const char STR1030[] PROGMEM = "Sommer-/ Winterheizgrenze";
-const char STR1032[] PROGMEM = "Tagesheizgrenze";
-const char STR1040[] PROGMEM = "Vorlaufsollwert Minimum";
-const char STR1041[] PROGMEM = "Vorlaufsollwert Maximum";
-const char STR1050[] PROGMEM = "Raumeinfluss";
-const char STR1060[] PROGMEM = "Raumtemperaturbegrenzung";
-const char STR1070[] PROGMEM = "Schnellaufheizung";
-const char STR1080[] PROGMEM = "Schnellabsenkung";
-const char STR1090[] PROGMEM = "Einschalt-Optimierung Max.";
-const char STR1091[] PROGMEM = "Ausschalt-Optimierung Max.";
-const char STR1100[] PROGMEM = "Reduziert-Anhebung Begin";
-const char STR1101[] PROGMEM = "Reduziert-Anhebung Ende";
-const char STR1120[] PROGMEM = "Überhitzschutz Pumpenkreis";
-const char STR1130[] PROGMEM = "Mischerüberhöhung";
-const char STR1132[] PROGMEM = "Antrieb Typ";
-const char STR1133[] PROGMEM = "Schaltdiffernez 2-Punkt";
-const char STR1150[] PROGMEM = "Estrichfunktion";
-const char STR1151[] PROGMEM = "Estrich sollwert manuell";
-const char STR1156[] PROGMEM = "Estrich Tag aktuell";
-const char STR1157[] PROGMEM = "Estrich Tag erfüllt";
-const char STR1161[] PROGMEM = "Übertemperaturabnahme";
-const char STR1170[] PROGMEM = "Mit Pufferspeicher";
-const char STR1172[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
-const char STR1182[] PROGMEM = "Pumpendrehzahl Minimum";
-const char STR1183[] PROGMEM = "Pumpendrehzahl Maximum";
-const char STR1200[] PROGMEM = "Betriebsartumschaltung";
-const char STR1300[] PROGMEM = "Betriebsart";
-const char STR1310[] PROGMEM = "Komfortsollwert";
-const char STR1312[] PROGMEM = "Reduziertsollwert";
-const char STR1314[] PROGMEM = "Frostschutzsollwert";
-const char STR1320[] PROGMEM = "Kennlinie Steilheit";
-const char STR1321[] PROGMEM = "Kennlinie Verschiebung";
-const char STR1326[] PROGMEM = "Kennlinie Adaption";
-const char STR1330[] PROGMEM = "Sommer-/ Winterheizgrenze";
-const char STR1332[] PROGMEM = "Tagesheizgrenze";
-const char STR1340[] PROGMEM = "Vorlaufsollwert Minimum";
-const char STR1341[] PROGMEM = "Vorlaufsollwert Maximum";
-const char STR1350[] PROGMEM = "Raumeinfluss";
-const char STR1360[] PROGMEM = "Raumtemperaturbegrenzung";
-const char STR1370[] PROGMEM = "Schnellaufheizung";
-const char STR1380[] PROGMEM = "Schnellabsenkung";
-const char STR1390[] PROGMEM = "Einschalt-Optimierung Max.";
-const char STR1391[] PROGMEM = "Ausschalt-Optimierung Max.";
-const char STR1400[] PROGMEM = "Reduziert-Anhebung Begin";
-const char STR1401[] PROGMEM = "Reduziert-Anhebung Ende";
-const char STR1420[] PROGMEM = "Überhitzschutz Pumpenkreis";
-const char STR1430[] PROGMEM = "Mischerüberhöhung";
-const char STR1450[] PROGMEM = "Estrichfunktion";
-const char STR1451[] PROGMEM = "Estrich sollwert manuell";
-const char STR1455[] PROGMEM = "Estrich Sollwert aktuell";
-const char STR1456[] PROGMEM = "Estrich Tag aktuell";
-const char STR1457[] PROGMEM = "Estrich Tag erfüllt";
-const char STR1461[] PROGMEM = "Übertemperaturabnahme";
-const char STR1470[] PROGMEM = "Mit Pufferspeicher";
-const char STR1472[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
-const char STR1482[] PROGMEM = "Pumpendrehzahl Minimum";
-const char STR1483[] PROGMEM = "Pumpendrehzahl Maximum";
-const char STR1500[] PROGMEM = "Betriebsartumschaltung";
-const char STR1600[] PROGMEM = "Trinkwasserbetrieb";
-const char STR1610[] PROGMEM = "Nennsollwert";
-const char STR1612[] PROGMEM = "Reduziertsollwert";
-const char STR1620[] PROGMEM = "Freigabe";
-const char STR1630[] PROGMEM = "Ladevorgang";
-const char STR1640[] PROGMEM = "Legionellenfunktion";
-const char STR1641[] PROGMEM = "Legionellenfkt. Periodisch";
-const char STR1642[] PROGMEM = "Legionellenfkt. Wochentag";
-const char STR1644[] PROGMEM = "Legionellenfkt. Zeitpunkt";
-const char STR1645[] PROGMEM = "Legionellenfkt. Sollwert";
-const char STR1646[] PROGMEM = "Legionellenfkt. Verweildauer";
-const char STR1647[] PROGMEM = "Legionellenfkt. Zirk`pumpe";
-const char STR1660[] PROGMEM = "Zirkulationspumpe Freigabe";
-const char STR1661[] PROGMEM = "Zirk`pumpe Taktbetrieb";
-const char STR1663[] PROGMEM = "Zirkulations Sollwert";
-const char STR2008[] PROGMEM = "H1 TWW-Ladevorrang";
-const char STR2010[] PROGMEM = "H1 Übertemperaturabnahme";
-const char STR2012[] PROGMEM = "H1 mit Pufferspeicher";
-const char STR2014[] PROGMEM = "H1 Vorregler/Zubring`pumpe";
-const char STR2015[] PROGMEM = "H1 Kälteanforderung";
-const char STR2033[] PROGMEM = "H2 TWW-Ladevorrang ";
-const char STR2035[] PROGMEM = "H2 Übertemperaturabnahme ";
-const char STR2037[] PROGMEM = "H2 mit Pufferspeicher ";
-const char STR2039[] PROGMEM = "H2 Vorregler / Zubring'pumpe ";
-const char STR2040[] PROGMEM = "H2 Kälteanforderung";
-const char STR2044[] PROGMEM = "H3 TWW-Ladevorrang";
-const char STR2046[] PROGMEM = "H3 Übertemperaturabnahme";
-const char STR2048[] PROGMEM = "H3 mit Pufferspeicher";
-const char STR2050[] PROGMEM = "H3 Vorregler/Zubring`pumpe";
-const char STR2051[] PROGMEM = "H3 Kälteanforderung";
-const char STR2055[] PROGMEM = "Sollwert Solarbeheizung ";
-const char STR2056[] PROGMEM = "Sollwert Erzeugerbeheizung ";
-const char STR2065[] PROGMEM = "Ladevorrang Solar ";
-const char STR2070[] PROGMEM = "Schwimmbadtemp Maximum";
-const char STR2080[] PROGMEM = "Mit Solareinbindung";
-const char STR2150[] PROGMEM = "Vorregler/Zubringerpumpe";
-const char STR2203[] PROGMEM = "Freigabe unter Außentemp";
-const char STR2205[] PROGMEM = "Bei Ökobetrieb";
-const char STR2208[] PROGMEM = "Durchladung Pufferspeicher";
-const char STR2210[] PROGMEM = "Sollwert Minimum";
-const char STR2212[] PROGMEM = "Sollwert maximum";
-const char STR2220[] PROGMEM = "Freigabeintegral Stufe 2";
-const char STR2221[] PROGMEM = "Rückstellintegral Stufe 2";
-const char STR2270[] PROGMEM = "Rücklaufsollwert Minimum";
-const char STR2291[] PROGMEM = "Steuerung Bypasspumpe";
-const char STR2330[] PROGMEM = "Leistung Nenn";
-const char STR2331[] PROGMEM = "Leistung Grundstufe";
-const char STR2340[] PROGMEM = "Auto Erz’folge 2 x 1 Kaskade";
-const char STR2800[] PROGMEM = "Frostschutz Kondens’pumpe";
-const char STR2801[] PROGMEM = "Steuerung Kondens’pumpe";
-const char STR2802[] PROGMEM = "Vorlaufzeit Kondens’pumpe";
-const char STR2803[] PROGMEM = "Nachlaufzeit Kondens’pumpe";
-const char STR2805[] PROGMEM = "Soll Temp’Spreizung Kond";
-const char STR2806[] PROGMEM = "Max Abweich Spreiz Kondens";
-const char STR2815[] PROGMEM = "Quellentemp Min Wasser";
-const char STR2816[] PROGMEM = "Quellentemp Min Sole";
-const char STR2817[] PROGMEM = "Schaltdiff Quellenschutz";
-const char STR2818[] PROGMEM = "Erhöhung Quellenschutztemp";
-const char STR2819[] PROGMEM = "Vorlaufzeit Quelle";
-const char STR2820[] PROGMEM = "Nachlaufzeit Quelle";
-const char STR2821[] PROGMEM = "Quellen-Anlaufzeit Maximum";
-const char STR2822[] PROGMEM = "Zeit Begr Quelletemp Min";
-const char STR2840[] PROGMEM = "Schaltdiff Rücklauftemp";
-const char STR2841[] PROGMEM = "Verd'laufzeit min einhalten";
-const char STR2842[] PROGMEM = "Verdichterlaufzeit Minimum";
-const char STR2843[] PROGMEM = "Verdichtersillstandszeit Min";
-const char STR2844[] PROGMEM = "Ausschalttemp. max";
-const char STR2845[] PROGMEM = "Reduktion Ausschaltemp Max";
-const char STR2846[] PROGMEM = "Heissgastemp Max";
-const char STR2852[] PROGMEM = "ND-Verzögerung beim Start";
-const char STR2880[] PROGMEM = "Verwendung Elektro-Vorlauf";
-const char STR2881[] PROGMEM = "Sperrzeit Elektro-Vorlauf ";
-const char STR2882[] PROGMEM = "Freigabeintegr. Elektro-Vorl ";
-const char STR2883[] PROGMEM = "Rückstellintegr. Elektro-Vorl ";
-const char STR2884[] PROGMEM = "Freig Elektro-Vorl unter TA ";
-const char STR2886[] PROGMEM = "Kompensation Wärmedefizit";
-const char STR2893[] PROGMEM = "Anzahl TWW-Ladeversuche ";
-const char STR2894[] PROGMEM = "Verzögerung Drehstr'fehler ";
-const char STR2895[] PROGMEM = "Verzögerung Ström'wächter ";
-const char STR2910[] PROGMEM = "Freigabe oberhalb TA ";
-const char STR2911[] PROGMEM = "Für Pufferzwangsladung";
-const char STR2912[] PROGMEM = "Durchladung Pufferspeicher";
-const char STR2951[] PROGMEM = "Abtaufreigabe unterhalb TA ";
-const char STR2952[] PROGMEM = "Schaltdifferenz Abtauen ";
-const char STR2954[] PROGMEM = "Verdampfertemp Abtau-Ende ";
-const char STR2963[] PROGMEM = "Dauer bis Zwangsabtauen ";
-const char STR2964[] PROGMEM = "Abtaudauer Maximal ";
-const char STR2965[] PROGMEM = "Abtropfdauer Verdampfer ";
-const char STR2966[] PROGMEM = "Abkühldauer Verdampfer ";
-const char STR3002[] PROGMEM = "Quellentemp min Kühlbetrieb ";
-const char STR3006[] PROGMEM = "Während Verdichterbetrieb";
-const char STR3007[] PROGMEM = "Im passiven Kühlbetrieb";
-const char STR3010[] PROGMEM = "Drehz max V'lator/Q'Pump ";
-const char STR3510[] PROGMEM = "Führungsstrategie";
-const char STR3530[] PROGMEM = "Freigabeintegral Erz’folge";
-const char STR3531[] PROGMEM = "Rückstellintegral Erz’folge";
-const char STR3532[] PROGMEM = "Wiedereinschaltsperre";
-const char STR3533[] PROGMEM = "Zuschaltverzögerung";
-const char STR3540[] PROGMEM = "Auto Erz’folge Umschaltung";
-const char STR3541[] PROGMEM = "Auto Erz’folge Ausgrenzung";
-const char STR3544[] PROGMEM = "Führender Erzeuger";
-const char STR3550[] PROGMEM = "Anfahrentlast Kaskad'pumpe";
-const char STR3560[] PROGMEM = "Rücklaufsollwert Minimum";
-const char STR3590[] PROGMEM = "Temp’spreizung Minimum";
-const char STR3700[] PROGMEM = "Freigabe unter Außentemp";
-const char STR3701[] PROGMEM = "Freigabe über Außentemp";
-const char STR3705[] PROGMEM = "Nachlaufzeit";
-const char STR3720[] PROGMEM = "Schaltintegral";
-const char STR3722[] PROGMEM = "Schaltdifferenz Aus";
-const char STR3723[] PROGMEM = "Sperrzeit";
-const char STR3810[] PROGMEM = "Temperaturdifferenz Ein";
-const char STR3811[] PROGMEM = "Temperaturdifferenz Aus";
-const char STR3812[] PROGMEM = "Ladetemp Min TWW-Speicher";
-const char STR3813[] PROGMEM = "Temp’diff EIN Puffer";
-const char STR3814[] PROGMEM = "Temp’diff AUS Puffer";
-const char STR3815[] PROGMEM = "Ladetemp Min Puffer";
-const char STR3816[] PROGMEM = "Temp'differenz EIN Sch'bad";
-const char STR3817[] PROGMEM = "Temp'differenz AUS Sch'bad";
-const char STR3818[] PROGMEM = "Ladetemp Min Schwimmbad";
-const char STR3822[] PROGMEM = "Ladevorrang Speicher";
-const char STR3825[] PROGMEM = "Ladezeit relativer Vorrang";
-const char STR3826[] PROGMEM = "Wartezeit relativer Vorrang";
-const char STR3827[] PROGMEM = "Wartezeit Parallelbetrieb";
-const char STR3828[] PROGMEM = "Verzögerung Sekundärpumpe";
-const char STR3830[] PROGMEM = "Kollektorstartfunktion";
-const char STR3831[] PROGMEM = "Mindestlaufzeit Kollek`pumpe";
-const char STR3832[] PROGMEM = "Kollektorstartfunktion Ein";
-const char STR3833[] PROGMEM = "Kollektorstartfunktion Aus";
-const char STR3834[] PROGMEM = "Kollektorstartfkt Gradient";
-const char STR3840[] PROGMEM = "Kollektor Frostschutz";
-const char STR3850[] PROGMEM = "Kollektorüberhitzschutz";
-const char STR3860[] PROGMEM = "Verdampfung Wärmeträger";
-const char STR3870[] PROGMEM = "Pumpendrehzahl Minimum";
-const char STR3871[] PROGMEM = "Pumpendrehzahl Maximum";
-const char STR3880[] PROGMEM = "Frostschutzmittel";
-const char STR3881[] PROGMEM = "Frost'mittel Konzentration";
-const char STR3884[] PROGMEM = "Pumpendurchfluss";
-const char STR4102[] PROGMEM = "Sperrt andere Erzeuger";
-const char STR4110[] PROGMEM = "Sollwert Minimum";
-const char STR4130[] PROGMEM = "Temperaturdifferenz Ein";
-const char STR4131[] PROGMEM = "Temperaturdifferenz Aus";
-const char STR4133[] PROGMEM = "Vergleichstempertatur";
-const char STR4140[] PROGMEM = "Pumpennachlaufzeit";
-const char STR4141[] PROGMEM = "Übertemperaturableitung";
-const char STR4708[] PROGMEM = "Zwangsladungsollwert Kühlen";
-const char STR4709[] PROGMEM = "Zwangsladungsoll Heizen Min";
-const char STR4710[] PROGMEM = "Zwangsladungsoll Heizen Max";
-const char STR4711[] PROGMEM = "Zwangsladung Zeitpunkt";
-const char STR4712[] PROGMEM = "Zwangsladung Dauer Max";
-const char STR4720[] PROGMEM = "Auto Erzeugersperre";
-const char STR4721[] PROGMEM = "Auto Erzeugersperre SD";
-const char STR4722[] PROGMEM = "Temp`diff Puffer/Heizkreis";
-const char STR4724[] PROGMEM = "Min Speichertemp Heizbetrieb";
-const char STR4739[] PROGMEM = "Schichtschutz";
-const char STR4750[] PROGMEM = "Ladetemperatur Maximum";
-const char STR4755[] PROGMEM = "Rückkühltemperatur";
-const char STR4756[] PROGMEM = "Rückkühlung TWW/HK`s";
-const char STR4757[] PROGMEM = "Rückkühlung Kollektor";
-const char STR4760[] PROGMEM = "Ladefühler Elektroeinsatz";
-const char STR4761[] PROGMEM = "Zwangsladung mit Elektro";
-const char STR4783[] PROGMEM = "Mit Solareinbindung";
-const char STR4790[] PROGMEM = "Temp'diff EIN Rückl'umlenk";
-const char STR4791[] PROGMEM = "Temp'diff AUS Rückl'umlenk";
-const char STR4795[] PROGMEM = "Vergleichstemp Rückl'umlenk";
-const char STR4796[] PROGMEM = "Wirksinn Rücklaufumlenkung";
-const char STR4810[] PROGMEM = "Durchladung";
-const char STR5010[] PROGMEM = "Ladung";
-const char STR5020[] PROGMEM = "Vorlaufsollwertüberhöhung";
-const char STR5021[] PROGMEM = "Umladeüberhöhung";
-const char STR5022[] PROGMEM = "Ladeart";
-const char STR5050[] PROGMEM = "Ladetemperatur Maximum";
-const char STR5055[] PROGMEM = "Rückkühltemperatur";
-const char STR5056[] PROGMEM = "Rückkühlung Kessel/HK";
-const char STR5057[] PROGMEM = "Rückkühlung Kollektor";
-const char STR5060[] PROGMEM = "Elektroeinsatz Betriebsart";
-const char STR5061[] PROGMEM = "Elektroeinsatz Freigabe";
-const char STR5062[] PROGMEM = "Elektroeinsatz Regelung";
-const char STR5085[] PROGMEM = "Übertemperaturabnahme";
-const char STR5090[] PROGMEM = "Mit Pufferspeicher";
-const char STR5092[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
-const char STR5093[] PROGMEM = "Mit Solareinbindung";
-const char STR5101[] PROGMEM = "Pumpendrehzahl Minimum";
-const char STR5102[] PROGMEM = "Pumpendrehzahl Maximum";
-const char STR5130[] PROGMEM = "Umladestrategie";
-const char STR5131[] PROGMEM = "Vergleichstemp Umladung";
-const char STR5406[] PROGMEM = "Min Sollw'diff zu Speich'temp ";
-const char STR5530[] PROGMEM = "Pumpendrehzahl Minimum ";
-const char STR5544[] PROGMEM = "Antrieb Laufzeit ";
-const char STR5700[] PROGMEM = "Voreinstellung";
-const char STR5710[] PROGMEM = "Heizkreis 1";
-const char STR5711[] PROGMEM = "Kühlkreis 1 ";
-const char STR5712[] PROGMEM = "Verwendung Mischer 1";
-const char STR5715[] PROGMEM = "Heizkreis2";
-const char STR5730[] PROGMEM = "Trinkwasser-Sensor B3";
-const char STR5731[] PROGMEM = "Trinkwasser-Stellglied Q3";
-const char STR5736[] PROGMEM = "Trinkwasser Trennschaltung";
-const char STR5770[] PROGMEM = "Erzeugertyp";
-const char STR5772[] PROGMEM = "Brenner Vorlaufzeit";
-const char STR5800[] PROGMEM = "Wärmequelle";
-const char STR5807[] PROGMEM = "Kälteerzeugung";
-const char STR5810[] PROGMEM = "Spreizung HK bei TA –10 °C";
-const char STR5840[] PROGMEM = "Solarstellglied";
-const char STR5841[] PROGMEM = "Externer Solartauscher";
-const char STR5870[] PROGMEM = "Kombispeicher";
-const char STR5890[] PROGMEM = "Relaisausgang QX1";
-const char STR5891[] PROGMEM = "Relaisausgang QX2";
-const char STR5892[] PROGMEM = "Relaisausgang QX3";
-const char STR5894[] PROGMEM = "Relaisausgang QX4";
-const char STR5895[] PROGMEM = "Relaisausgang QX5";
-const char STR5896[] PROGMEM = "Relaisausgang QX6";
-const char STR5908[] PROGMEM = "Funktion Ausgang QX3-Mod";
-const char STR5909[] PROGMEM = "Funktion Ausgang QX4-Mod";
-const char STR5930[] PROGMEM = "Fühlereingang BX 1";
-const char STR5931[] PROGMEM = "Fühlereingang BX 2";
-const char STR5932[] PROGMEM = "Fühlereingang BX 3";
-const char STR5933[] PROGMEM = "Fühlereingang BX 4";
-const char STR5934[] PROGMEM = "Fühlereingang BX5";
-const char STR5950[] PROGMEM = "Funktion Eingang H1";
-const char STR5951[] PROGMEM = "Wirksinn Kontakt H1";
-const char STR5952[] PROGMEM = "Minimaler Vorlaufsollwert H1";
-const char STR5953[] PROGMEM = "Spannungswert 1 H1";
-const char STR5954[] PROGMEM = "Wärmeanforderung 10V H1";
-const char STR5955[] PROGMEM = "Spannungswert 2 H1";
-const char STR5956[] PROGMEM = "Druckwert 3.5V H1";
-const char STR5960[] PROGMEM = "Funktion Eingang H3";
-const char STR5961[] PROGMEM = "Wirksinn Kontakt H3";
-const char STR5962[] PROGMEM = "Minimaler Vorlaufsollwert H3";
-const char STR5963[] PROGMEM = "Spannungswert 1 H3";
-const char STR5964[] PROGMEM = "Wärmeanforderung 10V H3";
-const char STR5965[] PROGMEM = "Spannungswert 2 H3";
-const char STR5966[] PROGMEM = "Druckwert 3.5V H3";
-const char STR5980[] PROGMEM = "Funktion Eingang EX1";
-const char STR5981[] PROGMEM = "Wirksinn Eingang EX1";
-const char STR5982[] PROGMEM = "Funktion Eingang EX2";
-const char STR5983[] PROGMEM = "Wirksinn Eingang EX2";
-const char STR5984[] PROGMEM = "Funktion Eingang EX3";
-const char STR5985[] PROGMEM = "Wirksinn Eingang EX3";
-const char STR5986[] PROGMEM = "Funktion Eingang EX4";
-const char STR5987[] PROGMEM = "Wirksinn Eingang EX4";
-const char STR5988[] PROGMEM = "Funktion Eingang EX5";
-const char STR5990[] PROGMEM = "Funktion Eingang EX6";
-const char STR5992[] PROGMEM = "Funktion Eingang EX7";
-const char STR6014[] PROGMEM = "Funktion Mischergruppe 1";
-const char STR6015[] PROGMEM = "Funktion Mischergruppe 2";
-const char STR6020[] PROGMEM = "Funktion Erweiterungsmodul 1";
-const char STR6021[] PROGMEM = "Funktion Erweiterungsmodul 2";
-const char STR6030[] PROGMEM = "Relaisausgang QX21";
-const char STR6031[] PROGMEM = "Relaisausgang QX22";
-const char STR6032[] PROGMEM = "Relaisausgang QX23";
-const char STR6040[] PROGMEM = "Fühlereingang BX21";
-const char STR6041[] PROGMEM = "Fühlereingang BX22";
-const char STR6046[] PROGMEM = "Funktion Eingang H2";
-const char STR6047[] PROGMEM = "Wirksinn Kontakt H2";
-const char STR6048[] PROGMEM = "Minimaler Vorlaufsollwert H2";
-const char STR6049[] PROGMEM = "Spannungswert 1 H2";
-const char STR6050[] PROGMEM = "Temperaturwert 10V H2";
-const char STR6051[] PROGMEM = "Spannungswert 2 H2";
-const char STR6052[] PROGMEM = "Funktionswert 2 H2";
-const char STR6070[] PROGMEM = "Funktion Ausgang UX";
-const char STR6071[] PROGMEM = "Signallogik Ausgang UX";
-const char STR6072[] PROGMEM = "Signal Ausgang UX";
-const char STR6075[] PROGMEM = "Temperaturwert 10V UX";
-const char STR6097[] PROGMEM = "Fühlertyp Kollektor";
-const char STR6098[] PROGMEM = "Korrektur Kollektorfühler";
-const char STR6099[] PROGMEM = "Korrektur Kollektorfühler 2";
-const char STR6100[] PROGMEM = "korrektur Aussenfühler";
-const char STR6101[] PROGMEM = "Fühlertyp Abgastemperatur";
-const char STR6102[] PROGMEM = "Korrektur Abgastemp'fühler";
-const char STR6110[] PROGMEM = "Zeitkonstante Gebäude";
-const char STR6120[] PROGMEM = "Anlagenfrostschutz";
-const char STR6128[] PROGMEM = "Wärm'anfo unter Außentemp";
-const char STR6129[] PROGMEM = "Wärm'anfo über Außentemp";
-const char STR6130[] PROGMEM = "H1 mit Pufferspeicher";
-const char STR6131[] PROGMEM = "Wärm'anfo bei Ökobetrieb";
-const char STR6134[] PROGMEM = "H2 mit Pufferspeicher";
-const char STR6135[] PROGMEM = "Luftentfeuchter";
-const char STR6136[] PROGMEM = "Luftentfeuchter Freigabe";
-const char STR6137[] PROGMEM = "Luftentfeuchter r. F. EIN";
-const char STR6138[] PROGMEM = "Luftentfeuchter r. F. SD";
-const char STR6200[] PROGMEM = "Fühler Speichern";
-const char STR6201[] PROGMEM = "Fühler löschen";
-const char STR6205[] PROGMEM = "Parameter zurücksetzen";
-const char STR6212[] PROGMEM = "Kontrollbnummer Erzeuger 1";
-const char STR6213[] PROGMEM = "Kontrollbnummer Erzeuger 2";
-const char STR6215[] PROGMEM = "Kontrollnummer Speicher";
-const char STR6217[] PROGMEM = "Kontrollnummer Heizkreise";
-const char STR6220[] PROGMEM = "Software- Version LOGON B";
-const char STR6600[] PROGMEM = "Geräteadresse";
-const char STR6601[] PROGMEM = "Segmentadresse";
-const char STR6604[] PROGMEM = "Busspeisung Funktion";
-const char STR6605[] PROGMEM = "Busspeisung Status";
-const char STR6610[] PROGMEM = "Anzeige Systemmeldungen";
-const char STR6612[] PROGMEM = "Alarmverzögerung";
-const char STR6620[] PROGMEM = "Wirkbereich Umschaltungen";
-const char STR6621[] PROGMEM = "Sommerumschaltung";
-const char STR6623[] PROGMEM = "Betriebsartumschaltung";
-const char STR6624[] PROGMEM = "Manuelle Erzeugersperre";
-const char STR6625[] PROGMEM = "Trinkwasserzuordnung";
-const char STR6627[] PROGMEM = "Kälteanforderung";
-const char STR6632[] PROGMEM = "TA'grenze ext Erz beachten";
-const char STR6640[] PROGMEM = "Uhrbetrieb";
-const char STR6650[] PROGMEM = "Aussentemperatur Lieferant";
-const char STR6710[] PROGMEM = "Reset Alarmrelais";
-const char STR6711[] PROGMEM = "Reset Wärmepumpe";
-const char STR6740[] PROGMEM = "Vorlauftemperatur 1 Alarm";
-const char STR6741[] PROGMEM = "Vorlauftemperatur 2 Alarm";
-const char STR6743[] PROGMEM = "Kesseltemperatur Alarm";
-const char STR6745[] PROGMEM = "Trinkwasserladung Alarm ";
-const char STR6746[] PROGMEM = "Vorlauftemp Kühlen 1 Alarm ";
-const char STR6800[] PROGMEM = "Historie 1 Datum/Zeit";
-const char STR6801[] PROGMEM = "Historie 1 Fehlercode";
-const char STR6802[] PROGMEM = "Historie 2 Datum/Zeit";
-const char STR6803[] PROGMEM = "Historie 2 Fehlercode";
-const char STR6804[] PROGMEM = "Historie 3 Datum/Zeit";
-const char STR6805[] PROGMEM = "Historie 3 Fehlercode";
-const char STR6806[] PROGMEM = "Historie 4 Datum/Zeit";
-const char STR6807[] PROGMEM = "Historie 4 Fehlercode";
-const char STR6808[] PROGMEM = "Historie 5 Datum/Zeit";
-const char STR6809[] PROGMEM = "Historie 5 Fehlercode";
-const char STR6810[] PROGMEM = "Historie 6 Datum/Zeit";
-const char STR6811[] PROGMEM = "Historie 6 Fehlercode";
-const char STR6812[] PROGMEM = "Historie 7 Datum/Zeit";
-const char STR6813[] PROGMEM = "Historie 7 Fehlercode";
-const char STR6814[] PROGMEM = "Historie 8 Datum/Zeit";
-const char STR6815[] PROGMEM = "Historie 8 Fehlercode";
-const char STR6816[] PROGMEM = "Historie 9 Datum/Zeit";
-const char STR6817[] PROGMEM = "Historie 9 Fehlercode";
-const char STR6818[] PROGMEM = "Historie 10 Datum/Zeit";
-const char STR6819[] PROGMEM = "Historie 10 Fehlercode";
-const char STR7040[] PROGMEM = "Brennerstunden Intervall";
-const char STR7041[] PROGMEM = "Brennerstunden seit Wartung";
-const char STR7042[] PROGMEM = "Brennerstarts Intervall";
-const char STR7043[] PROGMEM = "Brennerstarts seit Wartung";
-const char STR7044[] PROGMEM = "Wartungsintervall";
-const char STR7045[] PROGMEM = "Zeit seit Wartung";
-const char STR7053[] PROGMEM = "Abgastemperaturgrenze ";
-const char STR7054[] PROGMEM = "Verzögerung Abgasmeldung ";
-const char STR7070[] PROGMEM = "WP Zeitintervall ";
-const char STR7071[] PROGMEM = "WP Zeit seit Wartung ";
-const char STR7072[] PROGMEM = "Max Starts Verd1 / Betr’Std ";
-const char STR7073[] PROGMEM = "Akt Starts Verd1 / Betr’Std ";
-const char STR7074[] PROGMEM = "Max Starts Verd2 / Betr’Std ";
-const char STR7075[] PROGMEM = "Akt Starts Verd2 / Betr’Std ";
-const char STR7076[] PROGMEM = "Spreiz Kondens Max / Wo";
-const char STR7077[] PROGMEM = "Akt Spreiz Kondens Max / Wo";
-const char STR7078[] PROGMEM = "Spreiz Kondens Min / Wo";
-const char STR7079[] PROGMEM = "Akt Spreiz Kondens Min / Wo";
-const char STR7080[] PROGMEM = "Spreiz Verdampfer Max / Wo";
-const char STR7081[] PROGMEM = "Akt Spreiz Verdampfer Max / Wo";
-const char STR7082[] PROGMEM = "Spreiz Verdampfer Min / Wo";
-const char STR7083[] PROGMEM = "Akt Spreiz Verdampfer Min / Wo";
-const char STR7090[] PROGMEM = "TWW Speicher Zeitintervall";
-const char STR7091[] PROGMEM = "TWW Speicher seit Wartung";
-const char STR7092[] PROGMEM = "TWW Ladetemp WP Minimum";
-const char STR7093[] PROGMEM = "Akt TWW Ladetemperatur WP";
-const char STR7119[] PROGMEM = "Ökofunktion";
-const char STR7120[] PROGMEM = "Ökobetrieb";
-const char STR7130[] PROGMEM = "Schornsteinfegerfunktion";
-const char STR7140[] PROGMEM = "Handbetrieb";
-const char STR7141[] PROGMEM = "Notbetrieb";
-const char STR7142[] PROGMEM = "Notbetrieb Funktionsstart";
-const char STR7150[] PROGMEM = "Simulation Aussentemperatur";
-const char STR7152[] PROGMEM = "Abtauen auslösen";
-const char STR7160[] PROGMEM = "Reset Begrenzungszeiten";
-const char STR7170[] PROGMEM = "Telefon Kundendienst";
-const char STR7700[] PROGMEM = "Relaistest";
-const char STR7705[] PROGMEM = "Mod'sollwert QX3 Relaistest";
-const char STR7708[] PROGMEM = "Modulationssignal QX3";
-const char STR7710[] PROGMEM = "Ausgangstest UX";
-const char STR7711[] PROGMEM = "Spannungssignal UX";
-const char STR7714[] PROGMEM = "PWM-Signal P1";
-const char STR7730[] PROGMEM = "Aussentemperatur B9";
-const char STR7732[] PROGMEM = "Vorlauftemperatur B1";
-const char STR7734[] PROGMEM = "Vorlauftemperatur B12";
-const char STR7750[] PROGMEM = "Trinkwassertemperatur B3";
-const char STR7760[] PROGMEM = "Kesseltemperatur B2";
-const char STR7770[] PROGMEM = "Vorlauftemperatur WP B21";
-const char STR7771[] PROGMEM = "Rücklauftemperatur WP B71";
-const char STR7772[] PROGMEM = "Heissgastemperatur B81";
-const char STR7775[] PROGMEM = "Quelle Eintrittstemp B91";
-const char STR7777[] PROGMEM = "Fühlertemperatur B92, B84";
-const char STR7820[] PROGMEM = "Fühlertemperatur BX1";
-const char STR7821[] PROGMEM = "Fühlertemperatur BX2";
-const char STR7822[] PROGMEM = "Fühlertemperatur BX3";
-const char STR7823[] PROGMEM = "Fühlertemperatur BX4";
-const char STR7824[] PROGMEM = "Fühlertemperatur BX5";
-const char STR7830[] PROGMEM = "Fühlertemp. BX21 Modul 1";
-const char STR7831[] PROGMEM = "Fühlertemp. BX22 Modul 1";
-const char STR7832[] PROGMEM = "Fühlertemp. BX21 Modul 2";
-const char STR7833[] PROGMEM = "Fühlertemp. BX22 Modul 2";
-const char STR7840[] PROGMEM = "Spannungssignal H1";
-const char STR7841[] PROGMEM = "Kontaktzustand H1";
-const char STR7845[] PROGMEM = "Spannungssignal H2";
-const char STR7846[] PROGMEM = "Kontaktzustand H2";
-const char STR7854[] PROGMEM = "Spannungssignal H3";
-const char STR7855[] PROGMEM = "Kontaktzustand H3";
-const char STR7870[] PROGMEM = "Brennerstörung S3";
-const char STR7881[] PROGMEM = "1. Brennerstufe E1";
-const char STR7889[] PROGMEM = "Niederdruckwächter E9";
-const char STR7890[] PROGMEM = "Hochdruckwächter E10";
-const char STR7891[] PROGMEM = "Wickl’schutz Verdicht 1 E11";
-const char STR7911[] PROGMEM = "Eingang EX 1";
-const char STR7912[] PROGMEM = "Eingang EX2";
-const char STR7913[] PROGMEM = "Eingang EX 3";
-const char STR7914[] PROGMEM = "Eingang EX 4";
-const char STR7915[] PROGMEM = "Eingang EX 5";
-const char STR7916[] PROGMEM = "Eingang EX 6";
-const char STR7917[] PROGMEM = "Eingang EX 7";
-const char STR8000[] PROGMEM = "Status Heizkreis 1";
-const char STR8001[] PROGMEM = "Status Heizkreis 2";
-const char STR8002[] PROGMEM = "Status Heizkreis P";
-const char STR8003[] PROGMEM = "Status Trinkwasser";
-const char STR8004[] PROGMEM = "Status Kühlkreis 1";
-const char STR8005[] PROGMEM = "Status Kessel";
-const char STR8006[] PROGMEM = "Status Wärmepumpe";
-const char STR8007[] PROGMEM = "Status Solar";
-const char STR8008[] PROGMEM = "Status Feststoffkessel";
-const char STR8010[] PROGMEM = "Status Pufferspeicher";
-const char STR8011[] PROGMEM = "Status Schwimmbad";
-const char STR8022[] PROGMEM = "Status Zusatzerzeuger";
-const char STR8050[] PROGMEM = "Zeitstemper Statushistorie 1";
-const char STR8051[] PROGMEM = "Statuscode Statushistorie 1";
-const char STR8052[] PROGMEM = "Zeitstemper Statushistorie 2";
-const char STR8053[] PROGMEM = "Statuscode Statushistorie 2";
-const char STR8054[] PROGMEM = "Zeitstemper Statushistorie 3";
-const char STR8055[] PROGMEM = "Statuscode Statushistorie 3";
-const char STR8056[] PROGMEM = "Zeitstemper Statushistorie 4";
-const char STR8057[] PROGMEM = "Statuscode Statushistorie 4";
-const char STR8058[] PROGMEM = "Zeitstemper Statushistorie 5";
-const char STR8059[] PROGMEM = "Statuscode Statushistorie 5";
-const char STR8060[] PROGMEM = "Zeitstemper Statushistorie 6";
-const char STR8061[] PROGMEM = "Statuscode Statushistorie 6";
-const char STR8062[] PROGMEM = "Zeitstemper Statushistorie 7";
-const char STR8063[] PROGMEM = "Statuscode Statushistorie 7";
-const char STR8064[] PROGMEM = "Zeitstemper Statushistorie 8 ";
-const char STR8065[] PROGMEM = "Statuscode Statushistorie 8 ";
-const char STR8066[] PROGMEM = "Zeitstemper Statushistorie 9 ";
-const char STR8067[] PROGMEM = "Statuscode Statushistorie 10 ";
-const char STR8068[] PROGMEM = "Zeitstemper Statushistorie 10 ";
-const char STR8069[] PROGMEM = "Statuscode Statushistorie 10 ";
-const char STR8100[] PROGMEM = "Priorität / Status Erzeuger 1 ";
-const char STR8102[] PROGMEM = "Priorität / Status Erzeuger 2 ";
-const char STR8104[] PROGMEM = "Priorität / Status Erzeuger 3 ";
-const char STR8106[] PROGMEM = "Priorität / Status Erzeuger 4 ";
-const char STR8108[] PROGMEM = "Priorität / Status Erzeuger 5 ";
-const char STR8110[] PROGMEM = "Priorität / Status Erzeuger 6 ";
-const char STR8112[] PROGMEM = "Priorität / Status Erzeuger 7 ";
-const char STR8114[] PROGMEM = "Priorität / Status Erzeuger 8 ";
-const char STR8116[] PROGMEM = "Priorität / Status Erzeuger 9 ";
-const char STR8118[] PROGMEM = "Priorität / Status Erzeuger 10 ";
-const char STR8120[] PROGMEM = "Priorität / Status Erzeuger 11 ";
-const char STR8122[] PROGMEM = "Priorität / Status Erzeuger 12 ";
-const char STR8124[] PROGMEM = "Priorität / Status Erzeuger 13 ";
-const char STR8126[] PROGMEM = "Priorität / Status Erzeuger 14 ";
-const char STR8128[] PROGMEM = "Priorität / Status Erzeuger 15 ";
-const char STR8130[] PROGMEM = "Priorität / Status Erzeuger 16 ";
-const char STR8138[] PROGMEM = "Kaskadenvorlauftemperatur ";
-const char STR8139[] PROGMEM = "Kaskadenvorlaufsollwert ";
-const char STR8140[] PROGMEM = "Kaskadenrücklauftemperatur ";
-const char STR8141[] PROGMEM = "Kaskadenrücklaufsollwert ";
-const char STR8150[] PROGMEM = "Erz'folge Umschalt aktuell ";
-const char STR8300[] PROGMEM = "1. Brennerstufe T2";
-const char STR8301[] PROGMEM = "2. Brennerstufe T8";
-const char STR8308[] PROGMEM = "Drehzahl Kesselpumpe ";
-const char STR8310[] PROGMEM = "Kesseltemperatur";
-const char STR8311[] PROGMEM = "Kesselsollwert";
-const char STR8312[] PROGMEM = "Kesselschaltpunkt ";
-const char STR8314[] PROGMEM = "Kesselrücklauftemperatur";
-const char STR8315[] PROGMEM = "Kesselrücklaufsollwert ";
-const char STR8316[] PROGMEM = "Abgastemperatur";
-const char STR8318[] PROGMEM = "Abgastemperatur Maximum";
-const char STR8326[] PROGMEM = "Brennermodulation ";
-const char STR8330[] PROGMEM = "Betriebsstunden 1.Stufe";
-const char STR8331[] PROGMEM = "Startzähler 1.Stufe";
-const char STR8332[] PROGMEM = "Betriebsstunden 2.Stufe";
-const char STR8333[] PROGMEM = "Startzähler 2.Stufe";
-const char STR8400[] PROGMEM = "Verdichter 1 K1";
-const char STR8401[] PROGMEM = "Verdichter 2 K2";
-const char STR8402[] PROGMEM = "Elektroeinsatz 1 Vorlauf";
-const char STR8403[] PROGMEM = "Elektroeinsatz 2 Vorlauf";
-const char STR8404[] PROGMEM = "Quellenpu Q8 / Ventilat K19";
-const char STR8405[] PROGMEM = "Drehzahl Quellenpumpe";
-const char STR8406[] PROGMEM = "Konendastorpumpe Q9";
-const char STR8410[] PROGMEM = "Rücklauftemperatur WP";
-const char STR8411[] PROGMEM = "Sollwert WP";
-const char STR8412[] PROGMEM = "Vorlauftemperatur WP";
-const char STR8415[] PROGMEM = "Heissgastemperatur 1";
-const char STR8416[] PROGMEM = "Heissgastemperatur Max";
-const char STR8417[] PROGMEM = "Heissgastemperatur 2";
-const char STR8420[] PROGMEM = "Kältemitteltemperatur flüssig";
-const char STR8425[] PROGMEM = "Temp’spreizung Kondensator";
-const char STR8426[] PROGMEM = "Temp’spreizung Verdampfer";
-const char STR8427[] PROGMEM = "Quelle Eintrittstemperatur";
-const char STR8428[] PROGMEM = "Quelle Eintritt Min";
-const char STR8429[] PROGMEM = "Quelle Austrittstemperatur";
-const char STR8430[] PROGMEM = "Quelle Austritt Min";
-const char STR8440[] PROGMEM = "Rest Stufe 1 Stillst’zeit Min";
-const char STR8441[] PROGMEM = "Rest Stufe 2 Stillst’zeit Min";
-const char STR8442[] PROGMEM = "Rest Stufe 1 Laufzeit Min";
-const char STR8443[] PROGMEM = "Rest Stufe 2 Laufzeit Min";
-const char STR8444[] PROGMEM = "Restzeit Begr Quelle TempMin";
-const char STR8446[] PROGMEM = "Verdichterfolge";
-const char STR8450[] PROGMEM = "Betr’stunden Verdichter 1";
-const char STR8451[] PROGMEM = "Startzähler Verdichter 1";
-const char STR8452[] PROGMEM = "Betr’stunden Verdichter 2";
-const char STR8453[] PROGMEM = "Startzähler Verdichter 2";
-const char STR8454[] PROGMEM = "Sperrdauer WP";
-const char STR8455[] PROGMEM = "Zähler Anzahl Sperren WP";
-const char STR8456[] PROGMEM = "Betr’stunden Elektro Vorl";
-const char STR8457[] PROGMEM = "Startzähler Elektro Vorlauf";
-const char STR8469[] PROGMEM = "Drehzahl Ventilator";
-const char STR8470[] PROGMEM = "Ventilator K19";
-const char STR8471[] PROGMEM = "Prozessumkehrventil";
-const char STR8475[] PROGMEM = "Verdampfertemperatur";
-const char STR8477[] PROGMEM = "Temp'diff Abtauen Istwert";
-const char STR8478[] PROGMEM = "Temp'diff Abtauen Sollwert";
-const char STR8480[] PROGMEM = "Restzeit Abtausperrung";
-const char STR8481[] PROGMEM = "Restzeit Zwangsabtauen";
-const char STR8482[] PROGMEM = "Restzeit Abtaustabilisierung";
-const char STR8485[] PROGMEM = "Anzahl Abtauversuche";
-const char STR8487[] PROGMEM = "Status Abtauen WP";
-const char STR8505[] PROGMEM = "Drehzahl Kollektorpumpe 1";
-const char STR8506[] PROGMEM = "Drehzahl Solarpump ext.Tau ";
-const char STR8507[] PROGMEM = "Drehzahl Solarpumpe Puffer ";
-const char STR8508[] PROGMEM = "Drehzahl Solarpump Sch'bad ";
-const char STR8510[] PROGMEM = "Kollektortemperatur 1";
-const char STR8511[] PROGMEM = "Kollektortemperatur 1 Max";
-const char STR8512[] PROGMEM = "Kollektortemperatur 1 Min";
-const char STR8513[] PROGMEM = "dT Kollektor 1/TWW";
-const char STR8514[] PROGMEM = "dt Kollektor 1/Puffer";
-const char STR8515[] PROGMEM = "dT Kollektor 1 / Schwimmbad ";
-const char STR8519[] PROGMEM = "Solarvorlauftemperatur ";
-const char STR8520[] PROGMEM = "Solarrücklauftemperatur ";
-const char STR8526[] PROGMEM = "Tagesertrag Solarenergie ";
-const char STR8527[] PROGMEM = "Gesamtertrag Solarenergie ";
-const char STR8530[] PROGMEM = "Betr`stunden Solarertrag";
-const char STR8531[] PROGMEM = "Betr`stunden Kollektor`überhitz";
-const char STR8543[] PROGMEM = "Drehzahl Kollektorpumpe 2 ";
-const char STR8547[] PROGMEM = "Kollektortemperatur 2 ";
-const char STR8548[] PROGMEM = "Kollektortemperatur 2 Max ";
-const char STR8549[] PROGMEM = "Kollektortemperatur 2 Min ";
-const char STR8550[] PROGMEM = "dT Kollektor 2 / TWW ";
-const char STR8551[] PROGMEM = "dT Kollektor 2 / Puffer ";
-const char STR8552[] PROGMEM = "dT Kollektor 2 / Schwimmbad ";
-const char STR8560[] PROGMEM = "Feststoffkesseltemperatur";
-const char STR8570[] PROGMEM = "Betr'std Feststoffkessel ";
-const char STR8700[] PROGMEM = "Aussentemperatur";
-const char STR8701[] PROGMEM = "Außentemperatur Minimum";
-const char STR8702[] PROGMEM = "Außentemperatur Maximum";
-const char STR8703[] PROGMEM = "Aussentemperatur gedämpft";
-const char STR8704[] PROGMEM = "Aussentemperatur gemischt";
-const char STR8720[] PROGMEM = "Relative Raumfeuchte";
-const char STR8721[] PROGMEM = "Raumtemperatur";
-const char STR8722[] PROGMEM = "Taupunkttemperatur";
-const char STR8730[] PROGMEM = "Heizkreispumpe Q2";
-const char STR8731[] PROGMEM = "Heizkreismischer Auf Y1";
-const char STR8732[] PROGMEM = "Heizkreismischer Zu Y2";
-const char STR8735[] PROGMEM = "Drehzahl Heizkreispumpe 1";
-const char STR8740[] PROGMEM = "Raumtemperatur 1";
-const char STR8741[] PROGMEM = "Raumsollwert 1";
-const char STR8743[] PROGMEM = "Vorlauftemperatur 1";
-const char STR8744[] PROGMEM = "Vorlaufsollwert 1";
-const char STR8751[] PROGMEM = "Kühlkreispumpe Q24";
-const char STR8752[] PROGMEM = "Kühlkreismischer Auf Y23";
-const char STR8753[] PROGMEM = "Kühlkreismischer Zu Y24";
-const char STR8754[] PROGMEM = "Umlenkventil Kühlen Y21";
-const char STR8756[] PROGMEM = "Vorlauftemperatur Kühlen 1";
-const char STR8757[] PROGMEM = "Vorlaufsollwert Kühlen1";
-const char STR8760[] PROGMEM = "Heizkreispumpe 2";
-const char STR8761[] PROGMEM = "Heizkreismischer 2 Auf";
-const char STR8762[] PROGMEM = "Heizkreismischer 2 Zu";
-const char STR8765[] PROGMEM = "Drehzahl Heizkreispumpe 2";
-const char STR8770[] PROGMEM = "Raumtemperatur 2";
-const char STR8771[] PROGMEM = "Raumsollwert 2";
-const char STR8773[] PROGMEM = "Vorlauftemperatur 2";
-const char STR8774[] PROGMEM = "Vorlaufsollwert 2";
-const char STR8795[] PROGMEM = " Drehzahl Heizkreispumpe P";
-const char STR8800[] PROGMEM = "Raumtemperatur P";
-const char STR8801[] PROGMEM = "Raumsollwert P";
-const char STR8803[] PROGMEM = "Vorlaufsollwert P";
-const char STR8820[] PROGMEM = "Trinkwasserpumpe Q3";
-const char STR8821[] PROGMEM = "Elektroeinsatz TWW K6";
-const char STR8825[] PROGMEM = "Drehzahl Trinkwasserpumpe";
-const char STR8826[] PROGMEM = "Drehzahl TWW Zw'kreispumpe";
-const char STR8827[] PROGMEM = "Drehzahl Dl'erhitzerpumpe";
-const char STR8830[] PROGMEM = "Trinkwassertemperatur 1";
-const char STR8831[] PROGMEM = "Trinkwassersollwert";
-const char STR8832[] PROGMEM = "Trinkwassertemperatur 2";
-const char STR8835[] PROGMEM = "TWW Zirkulationstemperatur";
-const char STR8836[] PROGMEM = "TWW Ladetemperatur";
-const char STR8840[] PROGMEM = "Betr’stunden TWW-Pumpe";
-const char STR8841[] PROGMEM = "Startzähler TWW-Pumpe";
-const char STR8842[] PROGMEM = "Betr’stunden Elektro TWW";
-const char STR8843[] PROGMEM = "Startzähler Elektro TWW";
-const char STR8850[] PROGMEM = "TWW Vorreglertemperatur";
-const char STR8851[] PROGMEM = "TWW Vorreglersollwert";
-const char STR8852[] PROGMEM = "TWW Durchl'erhitzertemp";
-const char STR8853[] PROGMEM = "TWW Durchl'erhitzersollwert";
-const char STR8900[] PROGMEM = "Schwimmbadtemperatur";
-const char STR8901[] PROGMEM = "Schwimmbadsollwert";
-const char STR8930[] PROGMEM = "Vorreglertemperatur";
-const char STR8931[] PROGMEM = "Vorreglersollwert";
-const char STR8950[] PROGMEM = "Schienenvorlauftemperatur";
-const char STR8951[] PROGMEM = "Schienenvorlaufsollwert";
-const char STR8952[] PROGMEM = "Schienenrücklauftemperatur";
-const char STR8957[] PROGMEM = "Schienenvorl'sollwert Kälte";
-const char STR8962[] PROGMEM = "Leistungssollwert Schiene";
-const char STR8970[] PROGMEM = "Elektroeinsatz Puffer";
-const char STR8980[] PROGMEM = "Pufferspeichertemperatur 1";
-const char STR8981[] PROGMEM = "Pufferspeichersollwert";
-const char STR8982[] PROGMEM = "Pufferspeichertemperatur 2";
-const char STR8983[] PROGMEM = "Pufferspeichertemperatur 3";
-const char STR8990[] PROGMEM = "Betr’stunden Elektro Puffer";
-const char STR8991[] PROGMEM = "Startzähler Elektro Puffer";
-const char STR9000[] PROGMEM = "Vorlaufsollwert H1";
-const char STR9001[] PROGMEM = "Vorlaufsollwert H2";
-const char STR9004[] PROGMEM = "Vorlaufsollwert H3";
-const char STR9005[] PROGMEM = "Wasserdruck H1";
-const char STR9006[] PROGMEM = "Wasserdruck H2";
-const char STR9009[] PROGMEM = "Wasserdruck H3";
-const char STR9031[] PROGMEM = "Relaisausgang QX1";
-const char STR9032[] PROGMEM = "Relaisausgang QX2";
-const char STR9033[] PROGMEM = "Relaisausgang QX3";
-const char STR9034[] PROGMEM = "Relaisausgang QX4";
-const char STR9035[] PROGMEM = "Relaisausgang QX5";
-const char STR9036[] PROGMEM = "Relaisausgang QX6";
-const char STR9037[] PROGMEM = "Relaisausgang QX7";
-const char STR9038[] PROGMEM = "Relaisausgang QX8";
-const char STR9050[] PROGMEM = "Relaisausgang QX21 Modul 1";
-const char STR9051[] PROGMEM = "Relaisausgang QX22 Modul 1";
-const char STR9052[] PROGMEM = "Relaisausgang QX23 Modul 1";
-const char STR9053[] PROGMEM = "Relaisausgang QX21 Modul 2";
-const char STR9054[] PROGMEM = "Relaisausgang QX22 Modul 2";
-const char STR9055[] PROGMEM = "Relaisausgang QX23 Modul 2";
-const char STR9500[] PROGMEM = "Vorlüftzeit";
-const char STR9502[] PROGMEM = "Gebl'ansteuerung Vorlüftung";
-const char STR9504[] PROGMEM = "Solldrehzahl Vorlüftung";
-const char STR9510[] PROGMEM = "Gebl'ansteuerung Zündung";
-const char STR9512[] PROGMEM = "Solldrehzahl Zündung";
-const char STR9520[] PROGMEM = "Gebl'ansteuerung Betrieb. Min";
-const char STR9522[] PROGMEM = "Gebl'ansteuerung Betrieb. Max";
-const char STR9524[] PROGMEM = "Solldrehzahl Betrieb Min";
-const char STR9527[] PROGMEM = "Solldrehzahl Betrieb Max";
-const char STR9540[] PROGMEM = "Nachlüftzeit";
-const char STR9560[] PROGMEM = "Gebl'ansteuerung Durchlad";
-const char STR9563[] PROGMEM = "Solldrehzahl Durchlasung";
-
-const char STR10000[] PROGMEM = "Raumtemperatur 1";
-
-/* ENUM tables */
-/*
-const char ENUM648[] PROGMEM = {"\x00 Frostschutz\0\x01 Reduziert"};
-#define ENUM658 ENUM648
-#define ENUM668 ENUM648
-*/
-const char ENUM648[] PROGMEM = {"\x00 Frostschutz\0\x01 Reduziert"};
-#define ENUM665 ENUM648
-#define ENUM682 ENUM648
-
-const char ENUM700[] PROGMEM = {"\x00 Schutzbetrieb\0\x01 Automatik\0\x02 Reduziert\0\x03 Komfort"};
-
-const char ENUM780[] PROGMEM = {"\x00 Aus\0\x01 Bis Reduziertsollwert\0\x02 Bis Frostschutzsollwert"};
-const char ENUM850[] PROGMEM = {"\x00 Aus\0\x01 Funktionsheizen\0\x02 Belegreifheizen\0\x03 Funktions-/Belegreifheizen\0\x04 Beleg-/Funktionsheizen\0\x05 Manuell"};
-const char ENUM861[] PROGMEM = {"\x00 Aus\0\x01 Heizbetrieb\0\x02 Immer"};
-const char ENUM900[] PROGMEM = {"\x00 Keine\0\x01 Schutzbetrieb\0\x02 Reduziert\0\x03 Komfort\0\x04 Automatik"};
-
-#define ENUM1080 ENUM780
-#define ENUM1150 ENUM850
-#define ENUM1161 ENUM861
-#define ENUM1200 ENUM900
-const char ENUM1620[] PROGMEM = {"\x00 24h/Tag\0\x01 Zeitprogramme Heizkreise\0\x02 Zeitprogramm 4/TWW"};
-const char ENUM1630[] PROGMEM = {"\x00 Absolut\0\x01 Gleitend\0\x02 Kein\0\x03 MK gleitend PK absolut\0\x04 Aus"};
-const char ENUM1640[] PROGMEM = {"\x00 Aus\0\x01 Periodisch\0\x02 Fixer Wochentag"};
-const char ENUM1660[] PROGMEM = {"\x01 Zeitprogramm 3/HKP\0\x02 Trinkwasser Freigabe\0\x03 Zeitprogramm 4/TWW\0\x04 Zeitprogramm 5"};
-const char ENUM5022[] PROGMEM = {"\x01 Mit B3\0\x02 Mit B3/B31\0\x03 Mit B3, Legio B3/31"};
-const char ENUM5057[] PROGMEM = {"\x00 Aus\0\x01 Sommer\0\x02 Immer"};
-const char ENUM5060[] PROGMEM = {"\x01 Ersatz\0\x02 Sommer\0\x03 Immer"};
-const char ENUM5061[] PROGMEM = {"\x01 24H/Tag\0\x02 Trinkwasser Freigabe\0\x03 Zeitprogramm 4/TWW"};
-const char ENUM5062[] PROGMEM = {"\x01 Externer Thermostat\0\x02 Trinkwasserfühler"};
-const char ENUM5730[] PROGMEM = {"\x00 Fühler\0\x01 Thermostat"};
-const char ENUM5731[] PROGMEM = {"\x00 kein\0\x01 Ladepumpe\0\x02 Umlenkventil"};
-
-const char ENUM5890[] PROGMEM = {
-"\x00 Kein\0"
-"\x01 Zirkulationspumpe Q4\0"
-"\x02 Elektroeinsatz TWW K6\0"
-"\x03 Kollektorpumpe Q5\0"
-"\x04 H1-Pumpe Q15\0"
-"\x05 Kesselpumpe Q1\0"
-"\x06 Bypasspumpe Q12\0"
-"\x07 Alarmausgang K10\0"
-"\x08 2.Pumpenstufe HK1 Q21\0"
-"\x09 2.Pumpenstufe HK2 Q22\0"
-"\x0a 2.Pumpenstufe HKP Q32\0"
-"\x0b Heizkreispumpe HKP Q20\0"
-"\x0c H2-Pumpe Q18\0"
-"\x0d Zubringerpumpe Q14\0"
-"\x0e Erzeugersperrventil Y4\0"
-"\x0f Feststoffkesselpumpe Q10\0"
-"\x10 Zeitprogramm 5 K13\0"
-"\x11 Pufferrücklaufventil Y15\0"
-"\x12 Solarpumpe ext. Tauscher K9\0"
-"\x13 Solarstellglied Puffer K8\0"
-"\x14 Solarstellglied Schw'bad K18\0"
-"\x15 Kollektorpumpe 2 Q16\0"
-"\x16 H3-Pumpe Q19\0"
-"\x17 Abgasrelais K17\0"
-"\x19 Kaskadenpumpe Q25\0"
-"\x1a Speicherumladepumpe Q11\0"
-"\x1b TWW Durchmischpumpe Q35\0"
-"\x1c TWW Zwisch'kreispumpe Q33\0"
-"\x1d Wärmeanforderung K27"};
-
-
-#define ENUM5891 ENUM5890
-#define ENUM5892 ENUM5890
-
-const char ENUM5930[] PROGMEM = {
-"\x00 Kein\0"
-"\x01 Trinkwasserfühler B31\0"
-"\x02 Kollektorfühler B6\0"
-"\x04 TWW Zirkulationsfühler B39\0"
-"\x05 Pufferspeicherfühler B4\0"
-"\x06 Pufferspeicherfühler B41\0"
-"\x07 Abgastemperaturfühler B8\0"
-"\x08 Schienenvorlauffühler B10\0"
-"\x09 Feststoffkesselfühler B22\0"
-"\x0a TWW Ladefühler B36\0"
-"\x0b Pufferspeicherfühler B42\0"
-"\x0c Schienenrücklauffühler B73\0"
-"\x0d Kaskadenrücklauffühler B70\0"
-"\x0e Schwimmbadfühler B13\0"
-"\x0f Kollektorfühler 2 B61\0"
-"\x10 Solarvorlauffühler B63\0"
-"\x11 Solarrücklauffühler B64"};
-
-#define ENUM5931 ENUM5930
-#define ENUM5932 ENUM5930
-#define ENUM5933 ENUM5930
-
-const char ENUM5950[] PROGMEM = {
-"\x01 BA-Umschaltung HK's + TWW\0"
-"\x02 BA-Umschaltung HK's\0"
-"\x03 BA-Umschaltung HK1\0"
-"\x04 BA-Umschaltung HK2\0"
-"\x05 BA-Umschaltung HKP\0"
-"\x06 Erzeugersperre\0"
-"\x07 Fehler- / Alarmmeldung\0"
-"\x08 Minimaler Vorlaufsollwert\0"
-"\x09 Übertemperaturableitung\0"
-"\x0a Freigabe Schwimmbad\0"
-"\x0d Wärmeanforderung 10V\0"
-"\x0e Druckmessung 10V"};
-
-const char ENUM5951[] PROGMEM = {"\x00 Ruhekontakt\0\x01 Arbeitskontakt"};
-#define ENUM5960 ENUM5950
-#define ENUM5961 ENUM5951
-const char ENUM5982[] PROGMEM = {
-"\x01 Zähler 2.Brennerstufe\0"
-"\x02 Erzeugersperre\0"
-"\x03 Fehler- / Alarmmeldung\0"
-"\x04 STB Fehlermeldung\0"
-"\x05 Übertemperaturableitung"};
-
-#define ENUM5983 ENUM5951
-
-const char ENUM6014[] PROGMEM = {
-"\x01 Heizkreis 1\0"
-"\x03 Vorregler / Zubringerpumpe\0"
-"\x04 Trinkwasser Vorregler\0"
-"\x05 Trinkwasser Durchl'erhitzer\0"
-"\x06 Rücklaufregler Kaskade"};
-
-const char ENUM6020[] PROGMEM = {
-"\x00 Keine Funktion\0"
-"\x01 Multifunktional\0"
-"\x02 Heizkreis 2\0"
-"\x03 Rücklaufregler\0"
-"\x04 Solar Trinkwasser\0"
-"\x05 Vorregler / Zubringerpumpe\0"
-"\x06 Trinkwasser Vorregler\0"
-"\x07 Trinkwasser Durchl'erhitzer\0"
-"\x08 Rücklaufregler Kaskade"};
-
-#define ENUM6021 ENUM6020
-
-const char ENUM6604[] PROGMEM = {
-"\x00 Aus\0"
-"\x01 Automatisch"
-};
-
-const char ENUM6620[] PROGMEM = {
-"\x00 Segment\0"
-"\x01 System"
-};
-
-const char ENUM6621[] PROGMEM = {
-"\x00 Lokal\0"
-"\x01 Zentral"
-};
-
-const char ENUM6625[] PROGMEM = {
-"\x00 Lokale Heizkreise\0"
-"\x01 Alle Heizkreise im Segment\0"
-"\x02 Alle Heizkreise im System"
-};
-
-const char ENUM6640[] PROGMEM = {
-"\x00 Autonom\0"
-"\x01 Slave ohne Fernverstellung\0"
-"\x02 Slave mit Fernverstellung\0"
-"\x03 Master"
-};
-
-const char ENUM7700[] PROGMEM = {
-"\x00 Kein Test\0"
-"\x01 Alles aus\0"
-"\x02 ---\0"
-"\x03 ---\0"
-"\x04 Trinkwasserpumpe Q3\0"
-"\x05 Heizkreispumpe Q2\0"
-"\x06 Heizkreismischer Auf Y1\0"
-"\x07 Heizkreismischer Zu Y2\0"
-"\x08 Heizkreispumpe Q6\0"
-"\x09 Heizkreismischer Auf Y5\0"
-"\x0a Heizkreismischer Zu Y6\0"
-"\x0b Relaisausgang QX1\0"
-"\x0c Relaisausgang QX2\0"
-"\x0d Relaisausgang QX3\0"
-"\x0e Relaisausgang QX4\0"
-"\x0f Relaisausgang QX21 Modul 1\0"
-"\x10 Relaisausgang QX22 Modul 1\0"
-"\x11 Relaisausgang QX23 Modul 1\0"
-"\x12 Relaisausgang QX21 Modul 2\0"
-"\x13 Relaisausgang QX22 Modul 2\0"
-"\x14 Relaisausgang QX23 Modul 2"
-};
-
-//Status Heizkreis
-const char ENUM8000[] PROGMEM = {
-"\x00 ---\0"
-"\x03 Wächter angesprochen\0"
-"\x04 Handbetrieb aktiv\0"
-"\x11 Nachlauf aktiv\0"
-"\x16 Anlagenfrostschutz aktiv\0"
-"\x17 Frostschutz aktiv\0"
-"\x18 Aus\0"
-"\x38 Überhitzschutz aktiv\0"
-"\x65 Raumfrostschutz aktiv\0"
-"\x66 Estrichfunktion aktiv\0"
-"\x67 Eingeschränkt, Kesselschutz\0"
-"\x68 Eingeschränkt, TWW-Vorrang\0"
-"\x69 Eingeschränkt, Puffer\0"
-"\x6a Heizbetrieb eingeschränkt\0"
-"\x6b Zwangsabnahme Puffer\0"
-"\x6c Zwangsabnahme TWW\0"
-"\x6d Zwangsabnahme Erzeuger\0"
-"\x6e Zwangsabnahme\0"
-"\x6f Einschaltopt + Schnellaufheiz\0"
-"\x70 Einschaltoptimierung\0"
-"\x71 Schnellaufheizung\0"
-"\x72 Heizbetrieb Komfort\0"
-"\x73 Ausschaltoptimierung\0"
-"\x74 Heizbetrieb Reduziert\0"
-"\x75 Vorlauffrostschutz aktiv\0"
-"\x76 Sommerbetrieb\0"
-"\x77 Tages-Eco aktiv\0"
-"\x78 Absenkung Reduziert\0"
-"\x79 Absenkung Frostschutz\0"
-"\x7a Raumtemp’begrenzung"};
-
-#define ENUM8001 ENUM8000
-#define ENUM8002 ENUM8000
-
-
-//Status Trinkwasser
-const char ENUM8003[] PROGMEM = {
-"\x00 ---\0"
-"\x03 Wächter angesprochen\0"
-"\x04 Handbetrieb aktiv\0"
-"\x11 Nachlauf aktiv\0"
-"\x18 Frostschutz aktiv\0"
-"\x19 Aus\0"
-"\x35 Rückkühlung aktiv\0"
-"\x42 Ladung Elektroeinsatz\0"
-"\x43 Zwangsladung aktiv\0"
-"\x45 Ladung aktiv\0"
-"\x46 Geladen, Max Speichertemp\0"
-"\x47 Geladen, Max Ladetemp\0"
-"\x4b Geladen\0"
-"\x4d Rückkühlung via Kollektor\0"
-"\x4e Rückkühlung via Erz / Hk's\0"
-"\x4f Entladeschutz aktiv\0"
-"\x50 Ladezeitbegrenzung aktiv\0"
-"\x51 Ladung gesperrt\0"
-"\x52 Ladesperre aktiv\0"
-"\x53 Zwang, Max Speichertemp\0"
-"\x54 Zwang, Max Ladetemperatur\0"
-"\x55 Zwang, Legionellensollwert\0"
-"\x56 Zwang, Nennsollwert\0"
-"\x57 Ladung Elektro, Leg’sollwert\0"
-"\x58 Ladung Elektro, Nennsollwert\0"
-"\x59 Ladung Elektro, Red’sollwert\0"
-"\x5a Ladung Elektro, Fros’sollwert\0"
-"\x5b Elektroeinsatz freigegeben\0"
-"\x5c Push, Legionellensollwert\0"
-"\x5d Push, Nennsollwert\0"
-"\x5e Push aktiv\0"
-"\x5f Ladung, Legionellensollwert\0"
-"\x60 Ladung, Nennsollwert\0"
-"\x61 Ladung, Reduziertsollwert\0"
-"\x62 Geladen, Legio’temperatur\0"
-"\x63 Geladen, Nenntemperatur\0"
-"\x64 Geladen, Reduz’temperatur\0"
-"\xc7 Zapfbetrieb\0"
-"\xc8 Bereit\0"
-"\xc9 Bereitschaftsladung"
-};
-
-//Status Kessel
-const char ENUM8005[] PROGMEM = {
-"\x00 ---\0"
-"\x01 STB angesprochen\0"
-"\x02 Störung\0"
-"\x03 Wächter angesprochen\0"
-"\x04 Handbetrieb aktiv\0"
-"\x05 Schornsteinfegerfkt, Vollast\0"
-"\x06 Schornsteinfegerfkt, Teillast\0"
-"\x07 Schornsteinfegerfkt aktiv\0"
-"\x08 Gesperrt, Manuell\0"
-"\x09 Gesperrt, Automatisch\0"
-"\x0a Gesperrt\0"
-"\x0b Anfahrentlastung\0"
-"\x0c Anfahrentlastung, Teillast\0"
-"\x0d Rückl’begrenzung\0"
-"\x0e Rückl’begrenzung, Teillast\0"
-"\x11 Nachlauf aktiv\0"
-"\x12 In Betrieb\0"
-"\x13 Freigegeben\0"
-"\x14 Minimalbegrenzung\0"
-"\x15 Minimalbegrenzung, Teillast\0"
-"\x16 Minimalbegrenzung aktiv\0"
-"\x17 Anlagenfrostschutz aktiv\0"
-"\x18 Frostschutz aktiv\0"
-"\x19 Aus\0"
-"\x3b Ladung Pufferspeicher\0"
-"\x7b STB Test aktiv\0"
-"\xa6 In Betrieb für Heizkreis\0"
-"\xa7 In Teillastbetrieb für HK\0"
-"\xa8 In Betrieb für Trinkwasser\0"
-"\xa9 In Teillastbetrieb für TWW\0"
-"\xaa In Betrieb für HK, TWW\0"
-"\xab In Teillastbetrieb für HK, TWW\0"
-"\xac Gesperrt, Feststoffkessel\0"
-"\xad Freigegeben für HK, TWW\0"
-"\xae Freigeben für TWW\0"
-"\xaf Freigegeben für HK\0"
-"\xb0 Gesperrt, Außentemperatur\0"
-"\xc6 Gesperrt, Ökobetrieb"};
-
-//Status Solar
-const char ENUM8007[] PROGMEM = {
-"\x00 ---\0"
-"\x04 Handbetrieb aktiv\0"
-"\x02 Störung\0"
-"\x34 Kollektorfrostschutz aktiv\0"
-"\x35 Rückkühlung aktiv\0"
-"\x36 Max Speichertemp erreicht\0"
-"\x37 Verdampfungsschutz aktiv\0"
-"\x38 Überhitzschutz aktiv\0"
-"\x39 Max Ladetemp erreicht\0"
-"\x3a Ladung Trinkwasser\0"
-"\x3b Ladung Pufferspeicher\0"
-"\x3c Ladung Schwimmbad\0"
-"\x3d Min Ladetemp nicht erreicht\0"
-"\x3e Temp’differenz ungenügend\0"
-"\x3f Einstrahlung ungenügend\0"
-"\x97 Lad'ng TWW + Puffer + Sch'bad\0"
-"\x98 Ladung Trinkwasser + Puffer\0"
-"\x99 Ladung Trinkwasser + Sch'bad\0"
-"\x9a Ladung Puffer + Schwimmbad"
-};
-
-
-//Status Feststoffkessel
-const char ENUM8008[] PROGMEM = {
-"\x00 ---\0"
-"\x04 Handbetrieb aktiv\0"
-"\x02 Störung\0"
-"\x08 Gesperrt, Manuell\0"
-"\x09 Gesperrt, Automatisch\0"
-"\x0a Gesperrt\0"
-"\x0b Anfahrentlastung\0"
-"\x0c Anfahrentlastung, Teillast\0"
-"\x0d Rücklaufbegrenzung\0"
-"\x0e Rücklaufbegrenzung, Teillast\0"
-"\x11 Nachlauf aktiv\0"
-"\x12 In Betrieb\0"
-"\x13 Freigegeben\0"
-"\x14 Minimalbegrenzung\0"
-"\x15 Minimalbegrenzung, Teillast\0"
-"\x16 Minimalbegrenzung aktiv\0"
-"\x17 Anlagenfrostschutz aktiv\0"
-"\x18 Frostschutz aktiv\0"
-"\x19 Aus\0"
-"\x38 Überhitzschutz aktiv\0"
-"\x8d Kesselfrostschutz aktiv\0"
-"\xa3 Anfeuerungshilfe aktiv\0"
-"\xa6 In Betrieb für Heizkreis\0"
-"\xa7 In Teillastbetrieb für HK\0"
-"\xa8 In Betrieb für Trinkwasser\0"
-"\xa9 In Teillastbetrieb für TWW\0"
-"\xaa In Betrieb für HK, TWW\0"
-"\xab In Teillastbetrieb für HK, TWW"
-};
-
-//Status Pufferspeicher
-const char ENUM8010[] PROGMEM = {
-"\x00 ---\0"
-"\x18 Frostschutz aktiv\0"
-"\x33 Keine Wärmeanforderung\0"
-"\x35 Rückkühlung aktiv\0"
-"\x40 Ladung Elektro, Notbetrieb\0"
-"\x41 Ladung Elektro, Quell’schutz\0"
-"\x42 Ladung Elektroeinsatz\0"
-"\x43 Zwangsladung aktiv\0"
-"\x44 Teilladung aktiv\0"
-"\x45 Ladung aktiv\0"
-"\x46 Geladen, Max Speichertemp\0"
-"\x47 Geladen, Max Ladetemp\0"
-"\x48 Geladen, Zwanglad Solltemp\0"
-"\x49 Geladen, Solltemperatur\0"
-"\x4a Teilgeladen, Solltemperatur\0"
-"\x4b Geladen\0"
-"\x4c Kalt\0"
-"\x4d Rückkühlung via Kollektor\0"
-"\x51 Ladung gesperrt\0"
-"\x68 Eingeschränkt, TWW-Vorrang\0"
-"\x7c Ladung eingeschränkt\0"
-"\x83 Ladung Elektro, Abtauen\0"
-"\x87 Sperrdauer nach Heizen\0"
-"\x8e Rückkühlung via TWW / Hk’s\0"
-"\x8f Geladen, Min Ladetemp\0"
-"\x93 Warm\0"
-"\xa4 Ladung Elektro, Zwang\0"
-"\xa5 Ladung Elektro, Ersatz\0"
-"\xca Frostschutz Kühlen aktiv\0"
-"\xcb Durchladung aktiv"
-};
-
-/* SPECIAL ENUM tables */
-//Fehlercodes
-const char ENUM_ERROR[] PROGMEM = {
-"\x00 kein Fehler\0"
-"\x0a Außentemperatur Fühlerfehler\0"
-"\x14 Kesseltemperatur 1 Fühlerfehler\0"
-"\x19 Feststoffkesseltemperatur (Holz) Fühlerfehler\0"
-"\x1a Gemeinsame Vorlauftemperatur Fühlerfehler\0"
-"\x1c Rauch- / Abgastemperatur Fühlerfehler\0"
-"\x1e Vorlauftemperatur 1 Fühlerfehler\0"
-"\x1f Vorlauftemperatur 1 Kühlen Fühlerfehler\0"
-"\x20 Vorlauftemperatur 2 Fühlerfehler\0"
-"\x26 Vorlauftemperatur Vorregler Fühlerfehler\0"
-"\x28 Rücklauftemperatur 1 Fühlerfehler\0"
-"\x2e Rücklauftemperatur Kaskade Fühlerfehler\0"
-"\x2f Gemeinsame Rücklauftemperatur Fühlerfehler\0"
-"\x32 Trinkwassertemperatur 1 Fühlerfehler\0"
-"\x34 Trinkwassertemperatur 2 Fühlerfehler\0"
-"\x36 TWW-Vorregler Fühlerfehler\0"
-"\x39 TWW-Zirkulationstemperatur Fühlerfehler\0"
-"\x3c Raumtemperatur 1 Fühlerfehler\0"
-"\x41 Raumtemperatur 2 Fühlerfehler\0"
-"\x44 Raumtemperatur 3 Fühlerfehler\0"
-"\x46 Pufferspeichertemperatur 1 Fühlerfehler\0"
-"\x47 Pufferspeichertemperatur 2 Fühlerfehler\0"
-"\x48 Pufferspeichertemperatur 3 Fühlerfehler\0"
-"\x49 Kollektortemperatur 1 Fühlerfehler\0"
-"\x4a Kollektortemperatur 2 Fühlerfehler\0"
-"\x51 LPB-Kurzschluss\0"
-"\x52 LPB-Adresskollision\0"
-"\x53 BSB-Draht Kurzschluss\0"
-"\x54 BSB-Adresskollision\0"
-"\x55 BSB-Funk Kommunikationsfehler\0"
-"\x62 Erweiterungsmodul 1 Fehler (Sammelfehler)\0"
-"\x63 Erweiterungsmodul 2 Fehler (Sammelfehler)\0"
-"\x64 Zwei Uhrzeitmaster (LPB)\0"
-"\x66 Uhrzeitmaster ohne Gangreserve (LPB)\0"
-"\x69 Wartungsmeldung\0"
-"\x6d Kesseltemperatur Überwachung\0"
-"\x6e STB Störabschaltung\0"
-"\x75 Obere Druckgrenze (überschritten)\0"
-"\x76 Kritische untere Druckgrenze (unterschritten)\0"
-"\x79 Vorlauftemperatur 1 (Hk1) Überwachung\0"
-"\x7a Vorlauftemperatur 2 (Hk2) Überwachung\0"
-"\x7e Trinkwasser-Ladeüberwachung\0"
-"\x7f Legionellentemperatur nicht erreicht\0"
-"\x83 Brennerstörung\0"
-"\x92 Konfigurationsfehler Sammelmeldung\0"
-"\xab Alarmkontakt 1 (H1) aktiv\0"
-"\xac Alarmkontakt 2 (H2) aktiv\0"
-"\xad Alarmkontakt 3 (EX2 / 230 VAC) aktiv\0"
-"\xae Alarmkontakt 4 (H3) aktiv\0"
-"\xb0 Obere Druckgrenze 2 (überschritten)\0"
-"\xb1 Kritische untere Druckgrenze 2 (unterschritten)\0"
-"\xb2 Temperaturwächter Heizkreis 1\0"
-"\xb3 Temperaturwächter Heizkreis 2\0"
-"\xcf Störung Kühlkreis\0"
-"\xd9 Fühler- / Sensorfehler Sammelmeldung\0"
-"\xd9 Fühler- / Sensorfehler Sammelmeldung\0"
-"\xda Drucküberwachung Sammelmeldung\0"
-"\xf1 Vorlauffühler Solar Fühlerfehler\0"
-"\xf2 Rücklauffühler Solar Fühlerfehler\0"
-"\xf3 Schwimmbadtemperatur Fühlerfehler\0"
-"\x1\x40 TWW Ladetemperatur Fühlerfehler\0"
-"\x1\x41 Durchl’erhitzer Zapftemperatur Fühlerfehler\0"
-"\x1\x42 Obere Druckgrenze 3 (überschritten)\0"
-"\x1\x43 Kritische untere Druckgrenze 3 (unterschritten)\0"
-"\x1\x44 BX gleiche Fühler\0"
-"\x1\x45 BX/Erweiterungsmodul gleiche Fühler\0"
-"\x1\x46 BX/Mischergruppe gleiche Fühler\0"
-"\x1\x47 Erweiterungsmodul gleiche Funktion\0"
-"\x1\x48 Mischergruppe gleiche Funktion\0"
-"\x1\x49 Erweit’modul / Mischergruppe gleiche Funktion\0"
-"\x1\x4a Fühler BX1 keine Funktion\0"
-"\x1\x4b Fühler BX2 keine Funktion\0"
-"\x1\x4c Fühler BX3 keine Funktion\0"
-"\x1\x4d Fühler BX4 keine Funktion\0"
-"\x1\x4e Fühler BX5 keine Funktion\0"
-"\x1\x4f Fühler BX21 keine Funktion\0"
-"\x1\x50 Fühler BX22 keine Funktion\0"
-"\x1\x51 Fühler BX1 keine Funktion\0"
-"\x1\x52 Fühler BX12 keine Funktion\0"
-"\x1\x53 Kollektorpumpe Q5 fehlt\0"
-"\x1\x54 Kollektorpumpe Q16 fehlt\0"
-"\x1\x55 Kollektorfühler B6 fehlt\0"
-"\x1\x56 Solar TWW-Fühler B31 fehlt\0"
-"\x1\x57 Solareinbindung fehlt\0"
-"\x1\x58 Solarstellglied Puffer K8 fehlt\0"
-"\x1\x59 Solarstellglied Schwimmbad K18 fehlt\0"
-"\x1\x5a Feststoffkesselpumpe Q10 fehlt\0"
-"\x1\x5b Feststoffkessel Vergleichsfühler fehlt\0"
-"\x1\x5c Feststoffkessel Adressfehler\0"
-"\x1\x5d Pufferrücklaufventil Y15 fehlt\0"
-"\x1\x5e Pufferspeicher Adressfehler\0"
-"\x1\x5f Vorregler / Zubringerpumpe Adressfehler\0"
-"\x1\x60 Hydraulische Weiche Adressfehler\0"
-"\x1\x61 Kaskadenfühler B10 fehlt\0"
-"\x1\x65 Vorlauftemperatur Kühlkreis 1 Überwachung\0"
-"\x1\x6e Raumtemperatur Hx Fühlerfehler\0"
-"\x1\x6f Relative Raumfeuchte Hx Fühlerfehler"
-};
-
-// Wartungs-Codes
-const char ENUM_WARTUNG[] PROGMEM = {
-"\x01 Brennerbetriebsstunden überschritten\0"
-"\x02 Brennerstarts überschritten\0"
-"\x03 Wartungsintervall überschritten\0"
-"\x05 Wasserdruck Heizkreis zu niedrig (Untere Druckgrenze 1 unterschritten)\0"
-"\x12 Wasserdruck 2 Heizkreis zu niedrig (Untere Druckgrenze 2 unterschritten)\0"
-"\x0a Batterie Außenfühler wechseln\0"
-"\x15 Maximale Abgastemperatur überschritten\0"
-"\x16 Wasserdruck 3 Heizkreis zu niedrig (Untere Druckgrenze 3 unterschritten)"
-};
-
-// Sonderbetriebs-Codes
-const char ENUM_SONDERBETRIEB[] PROGMEM = {
-"\x1\x2d Handbetrieb\0"
-"\x1\x2e STB-Test\0"
-"\x1\x2f Schornsteinfegerfkt\0"
-"\x1\x35 Simulation Außentemp\0"
-"\x1\x36 Alternativenerg"
-};
-
-// Sonderbetriebs-Codes
-const char ENUM_WEEKDAY[] PROGMEM = {
-"\x01 Montag\0"
-"\x02 Dienstag\0"
-"\x03 Mittwoch\0"
-"\x04 Donnerstag\0"
-"\x05 Freitag\0"
-"\x06 Samstag\0"
-"\x07 Sonntag"
-};
-
-/*
- * Bei der Änderung des Komfortsollwertes durch einfaches Drehen des Rades werden scheinbar die Grenzwerte abgefragt:
-HEIZ->DISP ANS 710 11 - Heizkreis 1 - Komfortsollwert 20.00 °C
-HEIZ->DISP ANS 2D3D05A5 00 08 C0 (35.0°C)
-DC 80 0A 0E 07 2D 3D 05 A5 00 08 C0 3F 7B
-HEIZ->DISP ANS 712 11 - Heizkreis 1 - Reduziertsollwert 15.00 °C
-*/
-
-/*global command table */
-PROGMEM const cmd_t cmdtbl[]={
-// Uhrzeit und Datum
-{0x0500006C, CAT_DATUMZEIT, VT_DATETIME, 0, STR0, 0, NULL}, // [ ] - Uhrzeit und Datum
-{CMD_UNKNOWN, CAT_DATUMZEIT, VT_UNKNOWN, 1, STR1, 0, NULL}, // [hh:mm ] - Uhrzeit und Datum - Stunden/Minuten
-{CMD_UNKNOWN, CAT_DATUMZEIT, VT_UNKNOWN, 2, STR2, 0, NULL}, // [tt:MM ] - Uhrzeit und Datum - Tag/Monat
-{CMD_UNKNOWN, CAT_DATUMZEIT, VT_UNKNOWN, 3, STR3, 0, NULL}, // [jjjj ] - Uhrzeit und Datum - Jahr
-// Sommerzeit scheint im DISP gehandelt zu werden
-// Bei Anzeige werden keine Werte abgefragt. Bei Änderung wird ein INF geschickt.
-// Sommerzeit Beginn 25.3. DISP->ALL INF 0500009E 00 FF 03 19 FF FF FF FF 16
-// Sommerzeit Ende 25.11. DISP->ALL INF 0500009D 00 FF 0B 19 FF FF FF FF 16
-{0x0500009E, CAT_DATUMZEIT, VT_SUMMERPERIOD, 5, STR5, 0, NULL}, // [tt:MM ] - Uhrzeit und Datum - Sommerzeitbeginn Tag/Monat
-{0x0500009D, CAT_DATUMZEIT, VT_SUMMERPERIOD, 6, STR6, 0, NULL}, // [tt.MM ] - Uhrzeit und Datum - Sommerzeitende Tag/Monat
-
-// nur Bedienteil -> keine Kommunikation über BSB
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 20, STR20, 0, NULL}, // [0] - Bedieneinheit - Sprachauswahl
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 22, STR22, 0, NULL}, // [0] - Bedieneinheit - Info
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 23, STR23, 0, NULL}, // Fehleranzeige
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 25, STR25, 0, NULL}, // Anzeigekontrast
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 26, STR26, 0, NULL}, // [0] - Bedieneinheit - Sperre Bedienung
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 27, STR27, 0, NULL}, // [0] - Bedieneinheit - Sperre Programmierung
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 28, STR28, 0, NULL}, // [0] - Bedieneinheit - Bedieneinheit Direktverstellung
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 30, STR30, 0, NULL}, // Bedieneinheit Grundeinstellung sichern
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 31, STR31, 0, NULL}, // Bedieneinheit Grundeinstellung aktivieren
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 40, STR40, 0, NULL}, // Einsatz als
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 42, STR42, 0, NULL}, // Zurodnung Raumgerät 1
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 44, STR44, 0, NULL}, // [0] - Bedieneinheit - Bedienung HK 2
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 46, STR46, 0, NULL}, // [0] - Bedieneinheit - Bedienung HK P
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 48, STR48, 0, NULL}, // Wirkung Präsenztaste
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 54, STR54, 0, NULL}, // Korrektur Raumfühler
-{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 70, STR70, 0, NULL}, // [0] - Bedieneinheit - Geraete-Version Bedienteil
-
-// Funk
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 120, STR120, 0, NULL}, // Binding
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 121, STR121, 0, NULL}, // Testmode
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 130, STR130, 0, NULL}, // Raumgerät 1 Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 131, STR131, 0, NULL}, // Raumgerät 2 Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 132, STR132, 0, NULL}, // Raumgerät P Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 133, STR133, 0, NULL}, // Außenfühler P Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 134, STR134, 0, NULL}, // Repeater P Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 135, STR135, 0, NULL}, // Bedieneinheit 1 Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 136, STR136, 0, NULL}, // Bedieneinheit 2 Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 137, STR137, 0, NULL}, // Bedieneinheit P Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 138, STR138, 0, NULL}, // Servicegerät Status
-{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 140, STR140, 0, NULL}, // Alle Geräte löschen
-
-// Zeitprogramm Heizkreis 1
-// HEIZ->DISP ANS 500 Vorwahl 05 00 15 00 98 00 18 00 98 00 18 00
-// set Mo 1. Heizphase 05:10 -> DISP->HEIZ SET 3D050A8C 05 0A 15 00 80 00 00 00 80 00 00 00
-// set Mo 1. Heizphase 05:00 -> DISP->HEIZ SET 3D050A8C 05 00 15 00 80 00 00 00 80 00 00 00
-/*
- Für jeden Wochentag können 3 Phasen gesetzt werden. Die Kombinationen Mo-Fr, Mo-So, Sa - So werden nur auf dem Bedienteil angezeigt.
- 8C = Mo .. 92 = So
-*/
-/* virtuelle Zeilen*/
-{0x053d0a8c, CAT_ZEITPROG_HK1, VT_TIMEPROG, 500, STR500, 0, NULL}, // [0] - Zeitprogramm Heizkreis 1 - Vorwahl
-{0x053d0a8d, CAT_ZEITPROG_HK1, VT_TIMEPROG, 501, STR501, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 1. Phase Ein
-{0x053d0a8e, CAT_ZEITPROG_HK1, VT_TIMEPROG, 502, STR502, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 1. Phase Aus
-{0x053d0a8f, CAT_ZEITPROG_HK1, VT_TIMEPROG, 503, STR503, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 2. Phase Ein
-{0x053d0a90, CAT_ZEITPROG_HK1, VT_TIMEPROG, 504, STR504, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 2. Phase Aus
-{0x053d0a91, CAT_ZEITPROG_HK1, VT_TIMEPROG, 505, STR505, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 3. Phase Ein
-{0x053d0a92, CAT_ZEITPROG_HK1, VT_TIMEPROG, 506, STR506, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 3. Phase Aus
-{0x053d05b2, CAT_ZEITPROG_HK1, VT_YESNO, 516, STR516, 0, NULL}, // [0] - Zeitprogramm Heizkreis 1 - Standardwerte
-
-// Zeitprogramm Heizkreis 2
-/* virtuelle Zeilen*/
-{0x063d0a8c, CAT_ZEITPROG_HK2, VT_TIMEPROG, 520, STR520, 0, NULL}, // [0] - Zeitprogramm Heizkreis 2 - Vorwahl
-{0x063d0a8d, CAT_ZEITPROG_HK2, VT_TIMEPROG, 521, STR521, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 1. Phase Ein
-{0x063d0a8e, CAT_ZEITPROG_HK2, VT_TIMEPROG, 522, STR522, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 1. Phase Aus
-{0x063d0a8f, CAT_ZEITPROG_HK2, VT_TIMEPROG, 523, STR523, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 2. Phase Ein
-{0x063d0a90, CAT_ZEITPROG_HK2, VT_TIMEPROG, 524, STR524, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 2. Phase Aus
-{0x063d0a91, CAT_ZEITPROG_HK2, VT_TIMEPROG, 525, STR525, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 3. Phase Ein
-{0x063d0a92, CAT_ZEITPROG_HK2, VT_TIMEPROG, 526, STR526, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 3. Phase Aus
-{0x063d05b2, CAT_ZEITPROG_HK2, VT_YESNO, 536, STR536, 0, NULL}, // [0] - Zeitprogramm Heizkreis 2 - Standardwerte
-
-// Zeitprogramm 3/HKP
-/* virtuelle Zeilen*/
-{0x073d0a8c, CAT_ZEITPROG_HKP, VT_TIMEPROG, 540, STR540, 0, NULL}, // [0] - Zeitprogramm 3 HKP - Vorwahl
-{0x073d0a8d, CAT_ZEITPROG_HKP, VT_TIMEPROG, 541, STR541, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 1. Phase Ein
-{0x073d0a8e, CAT_ZEITPROG_HKP, VT_TIMEPROG, 542, STR542, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 1. Phase Aus
-{0x073d0a8f, CAT_ZEITPROG_HKP, VT_TIMEPROG, 543, STR543, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 2. Phase Ein
-{0x073d0a90, CAT_ZEITPROG_HKP, VT_TIMEPROG, 544, STR544, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 2. Phase Aus
-{0x073d0a91, CAT_ZEITPROG_HKP, VT_TIMEPROG, 545, STR545, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 3. Phase Ein
-{0x073d0a92, CAT_ZEITPROG_HKP, VT_TIMEPROG, 546, STR546, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 3. Phase Aus
-{0x073d05b2, CAT_ZEITPROG_HKP, VT_YESNO, 556, STR556, 0, NULL}, // [0] - Zeitprogramm 3 HKP - Standardwerte
-
-// Zeitprogramm 4/TWW
-{0x053d0aa0, CAT_ZEITPROG_TWW, VT_TIMEPROG, 560, STR560, 0, NULL}, // [0] - Zeitprogramm 4 TWW - Vorwahl
-{0x053d0aa1, CAT_ZEITPROG_TWW, VT_TIMEPROG, 561, STR561, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 1. Phase Ein
-{0x053d0aa2, CAT_ZEITPROG_TWW, VT_TIMEPROG, 562, STR562, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 1. Phase Aus
-{0x053d0aa3, CAT_ZEITPROG_TWW, VT_TIMEPROG, 563, STR563, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 2. Phase Ein
-{0x053d0aa4, CAT_ZEITPROG_TWW, VT_TIMEPROG, 564, STR564, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 2. Phase Aus
-{0x053d0aa5, CAT_ZEITPROG_TWW, VT_TIMEPROG, 565, STR565, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 3. Phase Ein
-{0x053d0aa6, CAT_ZEITPROG_TWW, VT_TIMEPROG, 566, STR566, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 3. Phase Aus
-{0x053d05b3, CAT_ZEITPROG_TWW, VT_YESNO, 576, STR576, 0, NULL}, // [0] - Zeitprogramm 4 TWW - Standardwerte
-
-// Zeitprogramm 5
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 600, STR600, 0, NULL}, // [0] - Zeitprogramm 5 - Vorwahl
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 601, STR601, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 1. Phase Ein
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 602, STR602, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 1. Phase Aus
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 603, STR603, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 2. Phase Ein
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 604, STR604, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 2. Phase Aus
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 605, STR605, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 3. Phase Ein
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 606, STR606, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 3. Phase Aus
-{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_YESNO, 616, STR616, 0, NULL}, // [0] - Zeitprogramm 5 - Standardwerte
-
-/*
- Es gibt 8 Perioden c4..d3 (jeweils Beginn/Ende).
- Zeile 641 dient nur zur Vorwahl der Perioden auf dem Bedienteil.
- Die Parameter scheinen VT_DATETIME ähnlich zu sein.
- 1. Byte:
- Bei RX 00=enabled 01=disabled
- Bei TX 06=enable 05=disable
- byte 3 Monat
- byte 4 Tag
- byte 17=0x17
- alle anderen Bytes sind 0
- z.B.:
- DISP->HEIZ SET 3D0509C6 06 00 02 0A 00 00 00 00 17
- Periode 2 Ende: DC 80 0A 14 07 05 3D 09 C6 01 00 01 01 00 00 00 00 17 0C 38
-*/
-// Ferien Heizkreis 1
-/* virtuelle Zeilen*/
-{0x053d09c4, CAT_FERIEN_HK1, VT_VACATIONPROG, 632, STR632, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 1 Beginn Tag/Monat
-{0x053d09c5, CAT_FERIEN_HK1, VT_VACATIONPROG, 633, STR633, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 1 Ende Tag/Monat
-{0x053d09c6, CAT_FERIEN_HK1, VT_VACATIONPROG, 634, STR634, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 2 Beginn Tag/Monat
-{0x053d09c7, CAT_FERIEN_HK1, VT_VACATIONPROG, 635, STR635, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 2 Ende Tag/Monat
-{0x053d09c8, CAT_FERIEN_HK1, VT_VACATIONPROG, 636, STR636, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 3 Beginn Tag/Monat
-{0x053d09c9, CAT_FERIEN_HK1, VT_VACATIONPROG, 637, STR637, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 3 Ende Tag/Monat
-{0x053d09ca, CAT_FERIEN_HK1, VT_VACATIONPROG, 638, STR638, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 4 Beginn Tag/Monat
-{0x053d09cb, CAT_FERIEN_HK1, VT_VACATIONPROG, 639, STR639, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 4 Ende Tag/Monat
-{0x053d09cc, CAT_FERIEN_HK1, VT_VACATIONPROG, 640, STR640, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 5 Beginn Tag/Monat
-{0x053d09cd, CAT_FERIEN_HK1, VT_VACATIONPROG, 641, STR641, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 5 Ende Tag/Monat
-{0x053d09ce, CAT_FERIEN_HK1, VT_VACATIONPROG, 642, STR642, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 6 Beginn Tag/Monat
-{0x053d09cf, CAT_FERIEN_HK1, VT_VACATIONPROG, 643, STR643, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 6 Ende Tag/Monat
-{0x053d09d0, CAT_FERIEN_HK1, VT_VACATIONPROG, 644, STR644, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 7 Beginn Tag/Monat
-{0x053d09d1, CAT_FERIEN_HK1, VT_VACATIONPROG, 645, STR645, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 7 Ende Tag/Monat
-{0x053d09d2, CAT_FERIEN_HK1, VT_VACATIONPROG, 646, STR646, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 8 Beginn Tag/Monat
-{0x053d09d3, CAT_FERIEN_HK1, VT_VACATIONPROG, 647, STR647, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 8 Ende Tag/Monat
-{0x2d3d04c2, CAT_FERIEN_HK1, VT_ENUM, 648, STR648, sizeof(ENUM648), ENUM648}, // [0] - Ferienheizkreis 1 - Betriebsniveau
-// Ferien Heizkreis 2
-/* virtuelle Zeilen*/
-{0x063d09c4, CAT_FERIEN_HK2, VT_VACATIONPROG, 649, STR649, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 1 Beginn Tag/Monat
-{0x063d09c5, CAT_FERIEN_HK2, VT_VACATIONPROG, 650, STR650, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 1 Ende Tag/Monat
-{0x063d09c6, CAT_FERIEN_HK2, VT_VACATIONPROG, 651, STR651, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 2 Beginn Tag/Monat
-{0x063d09c7, CAT_FERIEN_HK2, VT_VACATIONPROG, 652, STR652, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 2 Ende Tag/Monat
-{0x063d09c8, CAT_FERIEN_HK2, VT_VACATIONPROG, 653, STR653, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 3 Beginn Tag/Monat
-{0x063d09c9, CAT_FERIEN_HK2, VT_VACATIONPROG, 654, STR654, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 3 Ende Tag/Monat
-{0x063d09ca, CAT_FERIEN_HK2, VT_VACATIONPROG, 655, STR655, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 4 Beginn Tag/Monat
-{0x063d09cb, CAT_FERIEN_HK2, VT_VACATIONPROG, 656, STR656, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 4 Ende Tag/Monat
-{0x063d09cc, CAT_FERIEN_HK2, VT_VACATIONPROG, 657, STR657, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 5 Beginn Tag/Monat
-{0x063d09cd, CAT_FERIEN_HK2, VT_VACATIONPROG, 658, STR658, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 5 Ende Tag/Monat
-{0x063d09ce, CAT_FERIEN_HK2, VT_VACATIONPROG, 659, STR659, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 6 Beginn Tag/Monat
-{0x063d09cf, CAT_FERIEN_HK2, VT_VACATIONPROG, 660, STR660, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 6 Ende Tag/Monat
-{0x063d09d0, CAT_FERIEN_HK2, VT_VACATIONPROG, 661, STR661, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 7 Beginn Tag/Monat
-{0x063d09d1, CAT_FERIEN_HK2, VT_VACATIONPROG, 662, STR662, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 7 Ende Tag/Monat
-{0x063d09d2, CAT_FERIEN_HK2, VT_VACATIONPROG, 663, STR663, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 8 Beginn Tag/Monat
-{0x063d09d3, CAT_FERIEN_HK2, VT_VACATIONPROG, 664, STR664, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 8 Ende Tag/Monat
-{0x2e3d04c2, CAT_FERIEN_HK2, VT_ENUM, 665, STR665, sizeof(ENUM665), ENUM665}, // [0] - Ferienheizkreis 2 - Betriebsniveau
-// Ferien Heizkreis P
-/* virtuelle Zeilen*/
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 666, STR666, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 1 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 667, STR667, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 1 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 668, STR668, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 2 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 669, STR669, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 2 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 670, STR670, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 3 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 671, STR671, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 3 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 672, STR672, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 4 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 673, STR673, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 4 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 674, STR674, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 5 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 675, STR675, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 5 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 676, STR676, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 6 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 677, STR677, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 6 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 678, STR678, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 7 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 679, STR679, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 7 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 680, STR680, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 8 Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 681, STR681, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 8 Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_ENUM, 682, STR682, sizeof(ENUM682), ENUM682}, // [0] - Ferienheizkreis P - Betriebsniveau
-/*
-{CMD_UNKNOWN, CAT_FERIEN_HK1, VT_UNKNOWN, 641, STR641, 0, NULL}, // [0] - Ferienheizkreis 1 - Vorwahl
-{0x053d09c4, CAT_FERIEN_HK1, VT_VACATIONPROG, 642, STR642, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Beginn Tag/Monat
-{0x053d09c5, CAT_FERIEN_HK1, VT_UNKNOWN, 643, STR643, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Ende Tag/Monat
-{0x2d3d04c2, CAT_FERIEN_HK1, VT_ENUM, 648, STR648, sizeof(ENUM648), ENUM648}, // [0] - Ferienheizkreis 1 - Betriebsniveau
-
-// Ferien Heizkreis 2
-{CMD_UNKNOWN, CAT_FERIEN_HK2, VT_UNKNOWN, 651, STR651, 0, NULL}, // [0] - Ferienheizkreis 2 (nur wenn aktiviert) - Vorwahl
-{0x063d09c4, CAT_FERIEN_HK2, VT_UNKNOWN, 652, STR652, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 (nur wenn aktiviert) - Beginn Tag/Monat
-{0x063d09c5, CAT_FERIEN_HK2, VT_UNKNOWN, 653, STR653, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 (nur wenn aktiviert) - Ende Tag/Monat
-{0x2e3d04c2, CAT_FERIEN_HK2, VT_UNKNOWN, 658, STR658, sizeof(ENUM658), ENUM658}, // [0] - Ferienheizkreis 2 (nur wenn aktiviert) - Betriebsniveau
-
-// Ferien Heizkreis P
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 661, STR661, 0, NULL}, // [0] - Ferienheizkreis P (nur wenn aktiviert) - Vorwahl
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 662, STR662, 0, NULL}, // [tt.MM ] - Ferienheizkreis P (nur wenn aktiviert) - Beginn Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 663, STR663, 0, NULL}, // [tt.MM ] - Ferienheizkreis P (nur wenn aktiviert) - Ende Tag/Monat
-{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 668, STR668, sizeof(ENUM668), ENUM668}, // [0] - Ferienheizkreis P (nur wenn aktiviert) - Betriebsniveau
-*/
-
-// Heizkreis 1
-{0x2D3D0574, CAT_HK1, VT_ENUM, 700, STR700, sizeof(ENUM700), ENUM700}, // [-] - Heizkreis 1 - Betriebsart ***(virtuelle Zeile)***
-{0x2d3d058e, CAT_HK1, VT_TEMP, 710, STR710, 0, NULL}, // [°C ] - Heizkreis 1 - Komfortsollwert
-//HEIZ->DISP ANS 2D3D05A5 00 08 C0 (35.0°C)
-// line not in menue!
-/* virtuelle Zeile*/
-{0x2D3D05A5, CAT_HK1, VT_TEMP, 711, STR711, 0, NULL}, // [°C ] - Heizkreis 1 - Komfortsollwert Max
-{0x2d3d0590, CAT_HK1, VT_TEMP, 712, STR712, 0, NULL}, // [°C ] - Heizkreis 1 - Reduziertsollwert
-{0x2d3d0592, CAT_HK1, VT_TEMP, 714, STR714, 0, NULL}, // [°C ] - Heizkreis 1 - Frostschutzsollwert
-{0x2d3d05f6, CAT_HK1, VT_FP02, 720, STR720, 0, NULL}, // [0] - Heizkreis 1 - Kennlinie Steilheit
-{0x2d3d0610, CAT_HK1, VT_TEMP, 721, STR721, 0, NULL}, // [°C ] - Heizkreis 1 - Kennlinie Verschiebung
-{0x2d3d060b, CAT_HK1, VT_ONOFF, 726, STR726, 0, NULL}, // [] - Heizkreis 1 - Kennlinie Adaption
-{0x2d3d05fd, CAT_HK1, VT_TEMP, 730, STR730, 0, NULL}, // [°C ] - Heizkreis 1 - Sommer-/ Winterheizgrenze
-{0x2d3d0640, CAT_HK1, VT_TEMP, 732, STR732, 0, NULL}, // [°C ] - Heizkreis 1 - Tagesheizgrenze
-{0x213d0663, CAT_HK1, VT_TEMP, 740, STR740, 0, NULL}, // [°C ] - Heizkreis 1 - Vorlaufsollwert Minimum
-{0x213d0662, CAT_HK1, VT_TEMP, 741, STR741, 0, NULL}, // [°C ] - Heizkreis 1 - Vorlaufsollwert Maximum
-{0x2d3d0603, CAT_HK1, VT_PERCENT, 750, STR750, 0, NULL}, // [% ] - Heizkreis 1 - Raumeinfluss
-{0x2d3d0614, CAT_HK1, VT_TEMP, 760, STR760, 0, NULL}, // [°C ] - Heizkreis 1 - Raumtemperaturbegrenzung
-{0x2d3d0602, CAT_HK1, VT_TEMP, 770, STR770, 0, NULL}, // [°C ] - Heizkreis 1 - Schnellaufheizung
-{0x2d3d05e8, CAT_HK1, VT_ENUM, 780, STR780, sizeof(ENUM780), ENUM780}, // [-] - Heizkreis 1 - Schnellabsenkung
-{0x2d3d0607, CAT_HK1, VT_MINUTES, 790, STR790, 0, NULL}, // [Min ] - Heizkreis 1 - Einschalt-Optimierung Max.
-{0x2d3d0609, CAT_HK1, VT_MINUTES, 791, STR791, 0, NULL}, // [Min ] - Heizkreis 1 - Ausschalt-Optimierung Max.
-{0x2d3d059e, CAT_HK1, VT_TEMP, 800, STR800, 0, NULL}, // [°C ] - Heizkreis 1 - Reduziert-Anhebung Begin
-{0x2d3d059d, CAT_HK1, VT_TEMP, 801, STR801, 0, NULL}, // [°C ] - Heizkreis 1 - Reduziert-Anhebung Ende
-{0x213D0674, CAT_HK1, VT_ONOFF, 820, STR820, 0, NULL}, // [ - ] - Heizkreis 1 - Überhitzschutz Pumpenkreis
-{0x213D065D, CAT_HK1, VT_TEMP, 830, STR830, 0, NULL}, // [°C ] - Heizkreis 1 - Mischerüberhöhung
-{0x2d3d067b, CAT_HK1, VT_ENUM, 850, STR850, sizeof(ENUM850), ENUM850}, // [-] - Heizkreis 1 - Estrichfunktion
-{0x2d3d068a, CAT_HK1, VT_TEMP, 851, STR851, 0, NULL}, // [°C ] - Heizkreis 1 - Estrich sollwert manuell
-{0x213D08C9, CAT_HK1, VT_ENUM, 861, STR861, sizeof(ENUM861), ENUM861}, // [0] - Heizkreis 1 - Übertemperaturabnahme
-{0x2D3D07C4, CAT_HK1, VT_YESNO, 870, STR870, 0, NULL}, // [0] - Heizkreis 1 - Mit Pufferspeicher
-{0x2D3D07C5, CAT_HK1, VT_YESNO, 872, STR872, 0, NULL}, // [0] - Heizkreis 1 - Mit Vorregler/Zubring`pumpe
-{CMD_UNKNOWN, CAT_HK1, VT_UNKNOWN, 882, STR882, 0, NULL}, // Pumpendrehzahl Minimum
-{CMD_UNKNOWN, CAT_HK1, VT_UNKNOWN, 883, STR883, 0, NULL}, // Pumpendrehzahl Maximum
-{0x053D07BE, CAT_HK1, VT_ENUM, 900, STR900, sizeof(ENUM900), ENUM900}, // [0] - Heizkreis 1 - Betriebsartumschaltung
-
-// Kühlkreis 1
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 901, STR901, 0, NULL}, // Betriebsart
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 902, STR902, 0, NULL}, // Komfortsollwert
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 907, STR907, 0, NULL}, // Freigabe
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 908, STR908, 0, NULL}, // Vorlaufsollwert bei TA 25 °C
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 909, STR909, 0, NULL}, // Vorlaufsollwert bei TA 35 °C
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 912, STR912, 0, NULL}, // Kühlgrenze bei TA
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 913, STR913, 0, NULL}, // Sperrdauer nach Heizende
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 918, STR918, 0, NULL}, // Sommerkomp Beginn bei TA
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 919, STR919, 0, NULL}, // Sommerkomp Ende bei TA
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 920, STR920, 0, NULL}, // Sommerkomp Sollw’anhebung
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 923, STR923, 0, NULL}, // Vorlaufsollwert Min bei TA 25 °C
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 924, STR924, 0, NULL}, // Vorlaufsollwert Min bei TA 35 °C
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 928, STR928, 0, NULL}, // Raumeinfluss
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 932, STR932, 0, NULL}, // Raumtemperaturbegrenzung
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 938, STR938, 0, NULL}, // Mischerunterkühlung
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 939, STR939, 0, NULL}, // Antrieb Typ
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 940, STR940, 0, NULL}, // Schaltdifferenz 2-Punkt
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 941, STR941, 0, NULL}, // Antrieb Laufzeit
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 945, STR945, 0, NULL}, // Mischventil im Heizbetrieb
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 946, STR946, 0, NULL}, // Sperrdauer Taupunktwächt
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 947, STR947, 0, NULL}, // Vorlaufsollw’anhebung Hygro
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 948, STR948, 0, NULL}, // Vorl'anhebung Beginn bei r. F.
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 950, STR950, 0, NULL}, // Vorlauftemp'diff Taupunkt
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 962, STR962, 0, NULL}, // Mit Pufferspeicher
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 963, STR963, 0, NULL}, // Mit Vorregler/Zubring'pumpe
-{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 969, STR969, 0, NULL}, // Betriebsartumschaltung
-
-// Heizkreis 2
-{0x2e3d058e, CAT_HK2, VT_TEMP, 1010, STR1010, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Komfortsollwert
-// line not in menue!
-/* virtuelle Zeile*/
-{0x2E3D05A5, CAT_HK2, VT_TEMP, 1011, STR1011, 0, NULL}, // [°C ] - Heizkreis 1 - Komfortsollwert Max
-{0x2e3d0590, CAT_HK2, VT_TEMP, 1012, STR1012, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Reduziertsollwert
-{0x2e3d0592, CAT_HK2, VT_TEMP, 1014, STR1014, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Frostschutzsollwert
-{0x2e3d05f6, CAT_HK2, VT_FP02, 1020, STR1020, 0, NULL}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Kennlinie Steilheit
-{0x2e3d0610, CAT_HK2, VT_TEMP, 1021, STR1021, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Kennlinie Verschiebung
-{0x2e3d060b, CAT_HK2, VT_ONOFF, 1026, STR1026, 0, NULL}, // [] - Heizkreis 2 (nur wenn aktiviert) - Kennlinie Adaption
-{0x2e3d05fd, CAT_HK2, VT_TEMP, 1030, STR1030, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Sommer-/ Winterheizgrenze
-{0x2e3d0640, CAT_HK2, VT_TEMP, 1032, STR1032, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Tagesheizgrenze
-{0x223d0663, CAT_HK2, VT_TEMP, 1040, STR1040, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Vorlaufsollwert Minimum
-{0x223d0662, CAT_HK2, VT_TEMP, 1041, STR1041, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Vorlaufsollwert Maximum
-{0x2e3d0603, CAT_HK2, VT_PERCENT, 1050, STR1050, 0, NULL}, // [% ] - Heizkreis 2 (nur wenn aktiviert) - Raumeinfluss
-{0x2e3d0614, CAT_HK2, VT_TEMP, 1060, STR1060, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Raumtemperaturbegrenzung
-{0x2e3d0602, CAT_HK2, VT_TEMP, 1070, STR1070, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Schnellaufheizung
-{0x2e3d05e8, CAT_HK2, VT_ENUM, 1080, STR1080, sizeof(ENUM1080), ENUM1080}, // [-] - Heizkreis 2 (nur wenn aktiviert) - Schnellabsenkung
-{0x2e3d0607, CAT_HK2, VT_MINUTES, 1090, STR1090, 0, NULL}, // [min] - Heizkreis 2 (nur wenn aktiviert) - Einschalt-Optimierung Max.
-{0x2e3d0609, CAT_HK2, VT_MINUTES, 1091, STR1091, 0, NULL}, // [min] - Heizkreis 2 (nur wenn aktiviert) - Ausschalt-Optimierung Max.
-{0x2e3d059e, CAT_HK2, VT_TEMP, 1100, STR1100, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Reduziert-Anhebung Begin
-{0x2e3d059d, CAT_HK2, VT_TEMP, 1101, STR1101, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Reduziert-Anhebung Ende
-{CMD_UNKNOWN, CAT_HK2, VT_ONOFF, 1120, STR1120, 0, NULL}, // [ - ] - Heizkreis 2 (nur wenn aktiviert) - Überhitzschutz Pumpenkreis
-{0x223d065d, CAT_HK2, VT_TEMP, 1130, STR1130, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Mischerüberhöhung
-{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1132, STR1132, 0, NULL}, // Antrieb Typ
-{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1133, STR1133, 0, NULL}, // Schaltdiffernez 2-Punkt
-{0x2e3d067b, CAT_HK2, VT_ENUM, 1150, STR1150, sizeof(ENUM1150), ENUM1150}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Estrichfunktion
-{0x2e3d068a, CAT_HK2, VT_TEMP, 1151, STR1151, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Estrich sollwert manuell
-{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1156, STR1156, 0, NULL}, // Estrich Tag aktuell
-{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1157, STR1157, 0, NULL}, // Estrich Tag erfüllt
-{CMD_UNKNOWN, CAT_HK2, VT_ENUM, 1161, STR1161, sizeof(ENUM1161), ENUM1161}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Übertemperaturabnahme
-{CMD_UNKNOWN, CAT_HK2, VT_YESNO, 1170, STR1170, 0, NULL}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Mit Pufferspeicher
-{CMD_UNKNOWN, CAT_HK2, VT_YESNO, 1172, STR1172, 0, NULL}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Mit Vorregler/Zubring`pumpe
-{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1182, STR1182, 0, NULL}, // Pumpendrehzahl Minimum
-{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1183, STR1183, 0, NULL}, // Pumpendrehzahl Maximum
-{CMD_UNKNOWN, CAT_HK2, VT_ENUM, 1200, STR1200, sizeof(ENUM1200), ENUM1200}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Betriebsartumschaltung
-
-// Heizkreis 3/P
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1300, STR1300, 0, NULL}, // Betriebsart
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1310, STR1310, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Komfortsollwert
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1312, STR1312, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Reduziertsollwert
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1314, STR1314, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Frostschutzsollwert
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1320, STR1320, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Kennlinie Steilheit
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1321, STR1321, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Kennlinie Verschiebung
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1326, STR1326, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Kennlinie Adaption
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1330, STR1330, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Sommer-/ Winterheizgrenze
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1332, STR1332, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Tagesheizgrenze
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1340, STR1340, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Vorlaufsollwert Minimum
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1341, STR1341, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Vorlaufsollwert Maximum
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1350, STR1350, 0, NULL}, // [% ] - Heizkreis 3/P (nur wenn aktiviert) - Raumeinfluss
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1360, STR1360, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Raumtemperaturbegrenzung
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1370, STR1370, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Schnellaufheizung
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1380, STR1380, 0, NULL}, // [-] - Heizkreis 3/P (nur wenn aktiviert) - Schnellabsenkung
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1390, STR1390, 0, NULL}, // [min] - Heizkreis 3/P (nur wenn aktiviert) - Einschalt-Optimierung Max.
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1391, STR1391, 0, NULL}, // [min] - Heizkreis 3/P (nur wenn aktiviert) - Ausschalt-Optimierung Max.
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1400, STR1400, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Reduziert-Anhebung Begin
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1401, STR1401, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Reduziert-Anhebung Ende
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1420, STR1420, 0, NULL}, // [ - ] - Heizkreis 3/P (nur wenn aktiviert) - Überhitzschutz Pumpenkreis
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1430, STR1430, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Mischerüberhöhung
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1450, STR1450, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Estrichfunktion
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1451, STR1451, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Estrich sollwert manuell
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1455, STR1455, 0, NULL}, // Estrich Sollwert aktuell
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1456, STR1456, 0, NULL}, // Estrich Tag aktuell
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1457, STR1457, 0, NULL}, // Estrich Tag erfüllt
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1461, STR1461, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Übertemperaturabnahme
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1470, STR1470, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Mit Pufferspeicher
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1472, STR1472, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Mit Vorregler/Zubring`pumpe
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1482, STR1482, 0, NULL}, // Pumpendrehzahl Minimum
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1483, STR1483, 0, NULL}, // Pumpendrehzahl Maximum
-{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1500, STR1500, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Betriebsartumschaltung
-
-// Trinkwasser
-{0x313D0571, CAT_TW, VT_YESNO, 1600, STR1600, 0, NULL}, // [-] - Trinkwasser - Trinkwasserbetrieb Ein/Aus ***(virtuelle Zeile)***
-{0x313d06b9, CAT_TW, VT_TEMP, 1610, STR1610, 0, NULL}, // [°C ] - Trinkwasser - Nennsollwert
-{0x313d06ba, CAT_TW, VT_TEMP, 1612, STR1612, 0, NULL}, // [°C ] - Trinkwasser - Reduziertsollwert
-{0x253d0722, CAT_TW, VT_ENUM, 1620, STR1620, sizeof(ENUM1620), ENUM1620}, // [0] - Trinkwasser - Freigabe
-{0x313D0721, CAT_TW, VT_ENUM, 1630, STR1630, sizeof(ENUM1630), ENUM1630}, // [0] - Trinkwasser - Ladevorgang
-{0x313d0759, CAT_TW, VT_ENUM, 1640, STR1640, sizeof(ENUM1640), ENUM1640}, // [0] - Trinkwasser - Legionellenfunktion
-{0x313d0738, CAT_TW, VT_DAYS, 1641, STR1641, 0, NULL}, // [Tage ] - Trinkwasser - Legionellenfkt. Periodisch
-{0x313d075e, CAT_TW, VT_WEEKDAY, 1642, STR1642, 0, NULL}, // [0] - Trinkwasser - Legionellenfkt. Wochentag
-{0x313d075a, CAT_TW, VT_HOUR_MINUTES, 1644, STR1644, 0, NULL}, // [hh:mm ] - Trinkwasser - Legionellenfkt. Zeitpunkt
-{0x313d06bc, CAT_TW, VT_TEMP, 1645, STR1645, 0, NULL}, // [°C ] - Trinkwasser - Legionellenfkt. Sollwert
-{0x313d0496, CAT_TW, VT_MINUTES_WORD, 1646, STR1646, 0, NULL}, // [min] - Trinkwasser - Legionellenfkt. Verweildauer
-{0x313d08ab, CAT_TW, VT_ONOFF, 1647, STR1647, 0, NULL}, // [0] - Trinkwasser - Legionellenfkt. Zirk`pumpe
-{0x253d072e, CAT_TW, VT_ENUM, 1660, STR1660, sizeof(ENUM1660), ENUM1660}, // [0] - Trinkwasser - Zirkulationspumpe Freigabe
-{0x253d0689, CAT_TW, VT_ONOFF, 1661, STR1661, 0, NULL}, // [0] - Trinkwasser - Zirk`pumpe Taktbetrieb
-{0x253D077E, CAT_TW, VT_TEMP, 1663, STR1663, 0, NULL}, // [°C ] - Trinkwasser - Zirkulations Sollwert
-
-// Hx-Pumpe
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2008, STR2008, 0, NULL}, // H1 TWW-Ladevorrang
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2010, STR2010, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H1 Übertemperaturabnahme
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2012, STR2012, 0, NULL}, // [-] - H1/H3-Pumpe (nur wenn aktiviert) - H1 mit Pufferspeicher
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2014, STR2014, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H1 Vorregler/Zubring`pumpe
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2015, STR2015, 0, NULL}, // H1 Kälteanforderung
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2033, STR2033, 0, NULL}, // H2 TWW-Ladevorrang
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2035, STR2035, 0, NULL}, // H2 Übertemperaturabnahme
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2037, STR2037, 0, NULL}, // H2 mit Pufferspeicher
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2039, STR2039, 0, NULL}, // H2 Vorregler / Zubring'pumpe
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2040, STR2040, 0, NULL}, // H2 Kälteanforderung
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2044, STR2044, 0, NULL}, // H3 TWW-Ladevorrang
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2046, STR2046, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H3 Übertemperaturabnahme
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2048, STR2048, 0, NULL}, // [-] - H1/H3-Pumpe (nur wenn aktiviert) - H3 mit Pufferspeicher
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2050, STR2050, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H3 Vorregler/Zubring`pumpe
-{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2051, STR2051, 0, NULL}, // H3 Kälteanforderung
-
-// Schwimmbad
-{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2055, STR2055, 0, NULL}, // Sollwert Solarbeheizung
-{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2056, STR2056, 0, NULL}, // Sollwert Erzeugerbeheizung
-{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2065, STR2065, 0, NULL}, // Ladevorrang Solar
-{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2070, STR2070, 0, NULL}, // Schwimmbadtemp Maximum
-{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2080, STR2080, 0, NULL}, // Mit Solareinbindung
-
-// Vorregler/Zubringerpumpe
-{CMD_UNKNOWN, CAT_VORREGLERPUMPE, VT_UNKNOWN, 2150, STR2150, 0, NULL}, // Vorregler/Zubringerpumpe
-
-// Kessel
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2203, STR2203, 0, NULL}, // Freigabe unter Außentemp
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2205, STR2205, 0, NULL}, // Bei Ökobetrieb
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2208, STR2208, 0, NULL}, // Durchladung Pufferspeicher
-{0x0d3d092c, CAT_KESSEL, VT_TEMP, 2210, STR2210, 0, NULL}, // [°C ] - Kessel - Sollwert Minimum
-{0x0d3d092b, CAT_KESSEL, VT_TEMP, 2212, STR2212, 0, NULL}, // [°C ] - Kessel - Sollwert maximum
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2220, STR2220, 0, NULL}, // Freigabeintegral Stufe 2
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2221, STR2221, 0, NULL}, // Rückstellintegral Stufe 2
-{0x0d3d08eb, CAT_KESSEL, VT_TEMP, 2270, STR2270, 0, NULL}, // [°C ] - Kessel - Rücklaufsollwert Minimum
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2291, STR2291, 0, NULL}, // Steuerung Bypasspumpe
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2330, STR2330, 0, NULL}, // Leistung Nenn
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2331, STR2331, 0, NULL}, // Leistung Grundstufe
-{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2340, STR2340, 0, NULL}, // Auto Erz’folge 2 x 1 Kaskade
-
-// Wärmpumpe
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2800, STR2800, 0, NULL}, // Frostschutz Kondens’pumpe
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2801, STR2801, 0, NULL}, // Steuerung Kondens’pumpe
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2802, STR2802, 0, NULL}, // Vorlaufzeit Kondens’pumpe
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2803, STR2803, 0, NULL}, // Nachlaufzeit Kondens’pumpe
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2805, STR2805, 0, NULL}, // Soll Temp’Spreizung Kond
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2806, STR2806, 0, NULL}, // Max Abweich Spreiz Kondens
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2815, STR2815, 0, NULL}, // Quellentemp Min Wasser
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2816, STR2816, 0, NULL}, // Quellentemp Min Sole
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2817, STR2817, 0, NULL}, // Schaltdiff Quellenschutz
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2818, STR2818, 0, NULL}, // Erhöhung Quellenschutztemp
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2819, STR2819, 0, NULL}, // Vorlaufzeit Quelle
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2820, STR2820, 0, NULL}, // Nachlaufzeit Quelle
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2821, STR2821, 0, NULL}, // Quellen-Anlaufzeit Maximum
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2822, STR2822, 0, NULL}, // Zeit Begr Quelletemp Min
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2840, STR2840, 0, NULL}, // Schaltdiff Rücklauftemp
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2841, STR2841, 0, NULL}, // Verd'laufzeit min einhalten
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2842, STR2842, 0, NULL}, // Verdichterlaufzeit Minimum
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2843, STR2843, 0, NULL}, // Verdichtersillstandszeit Min
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2844, STR2844, 0, NULL}, // Ausschalttemp. max
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2845, STR2845, 0, NULL}, // Reduktion Ausschaltemp Max
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2846, STR2846, 0, NULL}, // Heissgastemp Max
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2852, STR2852, 0, NULL}, // ND-Verzögerung beim Start
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2880, STR2880, 0, NULL}, // Verwendung Elektro-Vorlauf
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2881, STR2881, 0, NULL}, // Sperrzeit Elektro-Vorlauf
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2882, STR2882, 0, NULL}, // Freigabeintegr. Elektro-Vorl
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2883, STR2883, 0, NULL}, // Rückstellintegr. Elektro-Vorl
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2884, STR2884, 0, NULL}, // Freig Elektro-Vorl unter TA
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2886, STR2886, 0, NULL}, // Kompensation Wärmedefizit
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2893, STR2893, 0, NULL}, // Anzahl TWW-Ladeversuche
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2894, STR2894, 0, NULL}, // Verzögerung Drehstr'fehler
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2895, STR2895, 0, NULL}, // Verzögerung Ström'wächter
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2910, STR2910, 0, NULL}, // Freigabe oberhalb TA
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2911, STR2911, 0, NULL}, // Für Pufferzwangsladung
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2912, STR2912, 0, NULL}, // Durchladung Pufferspeicher
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2951, STR2951, 0, NULL}, // Abtaufreigabe unterhalb TA
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2952, STR2952, 0, NULL}, // Schaltdifferenz Abtauen
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2954, STR2954, 0, NULL}, // Verdampfertemp Abtau-Ende
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2963, STR2963, 0, NULL}, // Dauer bis Zwangsabtauen
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2964, STR2964, 0, NULL}, // Abtaudauer Maximal
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2965, STR2965, 0, NULL}, // Abtropfdauer Verdampfer
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2966, STR2966, 0, NULL}, // Abkühldauer Verdampfer
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3002, STR3002, 0, NULL}, // Quellentemp min Kühlbetrieb
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3006, STR3006, 0, NULL}, // Während Verdichterbetrieb
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3007, STR3007, 0, NULL}, // Im passiven Kühlbetrieb
-{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3010, STR3010, 0, NULL}, // Drehz max V'lator/Q'Pump
-
-// Kaskade
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3510, STR3510, 0, NULL}, // Führungsstrategie
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3530, STR3530, 0, NULL}, // Freigabeintegral Erz’folge
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3531, STR3531, 0, NULL}, // Rückstellintegral Erz’folge
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3532, STR3532, 0, NULL}, // Wiedereinschaltsperre
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3533, STR3533, 0, NULL}, // Zuschaltverzögerung
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3540, STR3540, 0, NULL}, // Auto Erz’folge Umschaltung
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3541, STR3541, 0, NULL}, // Auto Erz’folge Ausgrenzung
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3544, STR3544, 0, NULL}, // Führender Erzeuger
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3550, STR3550, 0, NULL}, // Anfahrentlast Kaskad'pumpe
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3560, STR3560, 0, NULL}, // Rücklaufsollwert Minimum
-{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3590, STR3590, 0, NULL}, // Temp’spreizung Minimum
-
-// Zusatzerzeuger
-{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3700, STR3700, 0, NULL}, // Freigabe unter Außentemp
-{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3701, STR3701, 0, NULL}, // Freigabe über Außentemp
-{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3705, STR3705, 0, NULL}, // Nachlaufzeit
-{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3720, STR3720, 0, NULL}, // Schaltintegral
-{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3722, STR3722, 0, NULL}, // Schaltdifferenz Aus
-{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3723, STR3723, 0, NULL}, // Sperrzeit
-
-// Solar
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3810, STR3810, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Temperaturdifferenz Ein
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3811, STR3811, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Temperaturdifferenz Aus
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3812, STR3812, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Ladetemp Min TWW-Speicher
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3813, STR3813, 0, NULL}, // Temp’diff EIN Puffer
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3814, STR3814, 0, NULL}, // Temp’diff AUS Puffer
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3815, STR3815, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Ladetemp Min Puffer
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3816, STR3816, 0, NULL}, // Temp'differenz EIN Sch'bad
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3817, STR3817, 0, NULL}, // Temp'differenz AUS Sch'bad
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3818, STR3818, 0, NULL}, // Ladetemp Min Schwimmbad
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3822, STR3822, 0, NULL}, // Ladevorrang Speicher
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3825, STR3825, 0, NULL}, // Ladezeit relativer Vorrang
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3826, STR3826, 0, NULL}, // Wartezeit relativer Vorrang
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3827, STR3827, 0, NULL}, // Wartezeit Parallelbetrieb
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3828, STR3828, 0, NULL}, // Verzögerung Sekundärpumpe
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3830, STR3830, 0, NULL}, // [min ] - Solar (nur wenn aktiviert) - Kollektorstartfunktion
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3831, STR3831, 0, NULL}, // [ sec ] - Solar (nur wenn aktiviert) - Mindestlaufzeit Kollek`pumpe
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3832, STR3832, 0, NULL}, // Kollektorstartfunktion Ein
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3833, STR3833, 0, NULL}, // Kollektorstartfunktion Aus
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3834, STR3834, 0, NULL}, // Kollektorstartfkt Gradient
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3840, STR3840, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Kollektor Frostschutz
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3850, STR3850, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Kollektorüberhitzschutz
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3860, STR3860, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Verdampfung Waermetaeger
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3870, STR3870, 0, NULL}, // Pumpendrehzahl Minimum
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3871, STR3871, 0, NULL}, // Pumpendrehzahl Maximum
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3880, STR3880, 0, NULL}, // Frostschutzmittel
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3881, STR3881, 0, NULL}, // Frost'mittel Konzentration
-{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3884, STR3884, 0, NULL}, // Pumpendurchfluss
-
-// Feststoffkessel
-{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4102, STR4102, 0, NULL}, // [0] - Feststoffkessel (nur wenn aktiviert) - Sperrt andere Erzeuger
-{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4110, STR4110, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Sollwert Minimum
-{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4130, STR4130, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Temperaturdifferenz Ein
-{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4131, STR4131, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Temperaturdifferenz Aus
-{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4133, STR4133, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Vergleichstempertatur
-{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4140, STR4140, 0, NULL}, // Pumpennachlaufzeit
-{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4141, STR4141, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Übertemperaturableitung
-
-// Pufferspeicher
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4708, STR4708, 0, NULL}, // Zwangsladungsollwert Kühlen
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4709, STR4709, 0, NULL}, // Zwangsladungsoll Heizen Min
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4710, STR4710, 0, NULL}, // Zwangsladungsoll Heizen Max
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4711, STR4711, 0, NULL}, // Zwangsladung Zeitpunkt
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4712, STR4712, 0, NULL}, // Zwangsladung Dauer Max
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4720, STR4720, 0, NULL}, // [0] - Pufferspeicher (nur wenn aktiviert) - Auto Erzeugersperre
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4721, STR4721, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Auto Erzeugersperre SD
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4722, STR4722, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Temp`diff Puffer/Heizkreis
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4724, STR4724, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Min Speichertemp Heizbetrieb
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4739, STR4739, 0, NULL}, // Schichtschutz
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4750, STR4750, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Ladetemperatur Maximum
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4755, STR4755, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Rückkühltemperatur
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4756, STR4756, 0, NULL}, // [-] - Pufferspeicher (nur wenn aktiviert) - Rückkühlung TWW/HK`s
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4757, STR4757, 0, NULL}, // [0] - Pufferspeicher (nur wenn aktiviert) - Rückkühlung Kollektor
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4760, STR4760, 0, NULL}, // Ladefühler Elektroeinsatz
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4761, STR4761, 0, NULL}, // Zwangsladung mit Elektro
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4783, STR4783, 0, NULL}, // [0] - Pufferspeicher (nur wenn aktiviert) - Mit Solareinbindung
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4790, STR4790, 0, NULL}, // Temp'diff EIN Rückl'umlenk
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4791, STR4791, 0, NULL}, // Temp'diff AUS Rückl'umlenk
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4795, STR4795, 0, NULL}, // Vergleichstemp Rückl'umlenk
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4796, STR4796, 0, NULL}, // Wirksinn Rücklaufumlenkung
-{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4810, STR4810, 0, NULL}, // Durchladung
-
-// Trinkwasserspeicher
-{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5010, STR5010, 0, NULL}, // Ladung
-{0x253d0720, CAT_TWSPEICHER, VT_TEMP, 5020, STR5020, 0, NULL}, // [°C ] - Trinkwasser-Speicher - Vorlaufsollwertüberhöhung
-{0x253D07C1, CAT_TWSPEICHER, VT_TEMP, 5021, STR5021, 0, NULL}, // [°C ] - Trinkwasser-Speicher - Umladeüberhöhung
-{0x253D087B, CAT_TWSPEICHER, VT_ENUM, 5022, STR5022, sizeof(ENUM5022), ENUM5022}, // [0] - Trinkwasser-Speicher - Ladeart
-{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5050, STR5050, 0, NULL}, // Ladetemperatur Maximum
-{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5055, STR5055, 0, NULL}, // Rückkühltemperatur
-{0x313D0713, CAT_TWSPEICHER, VT_ONOFF, 5056, STR5056, 0, NULL}, // [0] - Trinkwasser-Speicher - Rückkühlung Kessel/HK
-{0x313D0714, CAT_TWSPEICHER, VT_ENUM, 5057, STR5057, sizeof(ENUM5057), ENUM5057}, // [0] - Trinkwasser-Speicher - Rückkühlung Kollektor
-{0x253D0728, CAT_TWSPEICHER, VT_ENUM, 5060, STR5060, sizeof(ENUM5060), ENUM5060}, // [0] - Trinkwasser-Speicher - Elektroeinsatz Betriebsart
-{0x253D0688, CAT_TWSPEICHER, VT_ENUM, 5061, STR5061, sizeof(ENUM5061), ENUM5061}, // [0] - Trinkwasser-Speicher - Elektroeinsatz Freigabe
-{0x253D0687, CAT_TWSPEICHER, VT_ENUM, 5062, STR5062, sizeof(ENUM5062), ENUM5062}, // [0] - Trinkwasser-Speicher - Elektroeinsatz Regelung
-{0x253D08CB, CAT_TWSPEICHER, VT_ONOFF, 5085, STR5085, 0, NULL}, // [0] - Trinkwasser-Speicher - Übertemperaturabnahme
-{0x313D07C2, CAT_TWSPEICHER, VT_YESNO, 5090, STR5090, 0, NULL}, // [0] - Trinkwasser-Speicher - Mit Pufferspeicher
-{0x313D07C3, CAT_TWSPEICHER, VT_YESNO, 5092, STR5092, 0, NULL}, // [ - ] - Trinkwasser-Speicher - Mit Vorregler/Zubring`pumpe
-{0x253D0A11, CAT_TWSPEICHER, VT_YESNO, 5093, STR5093, 0, NULL}, // [-] - Trinkwasser-Speicher - Mit Solareinbindung
-{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5101, STR5101, 0, NULL}, // Pumpendrehzahl Minimum
-{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5102, STR5102, 0, NULL}, // Pumpendrehzahl Maximum
-{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5130, STR5130, 0, NULL}, // Umladestrategie
-{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5131, STR5131, 0, NULL}, // Vergleichstemp Umladung
-
-// Trinkwasser Durchl'erhitzer
-{CMD_UNKNOWN, CAT_DRUCHLERHITZER, VT_UNKNOWN, 5406, STR5406, 0, NULL}, // Min Sollw'diff zu Speich'temp
-{CMD_UNKNOWN, CAT_DRUCHLERHITZER, VT_UNKNOWN, 5530, STR5530, 0, NULL}, // Pumpendrehzahl Minimum
-{CMD_UNKNOWN, CAT_DRUCHLERHITZER, VT_UNKNOWN, 5544, STR5544, 0, NULL}, // Antrieb Laufzeit
-
-// Konfiguration
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5700, STR5700, 0, NULL}, // Voreinstellung
-{0x053d04c0, CAT_KONFIG, VT_ONOFF, 5710, STR5710, 0, NULL}, // [0] - Konfiguration - Heizkreis 1
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5711, STR5711, 0, NULL}, // Kühlkreis 1
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5712, STR5712, 0, NULL}, // Verwendung Mischer 1
-{0x063d04c0, CAT_KONFIG, VT_ONOFF, 5715, STR5715, 0, NULL}, // [0] - Konfiguration - Heizkreis2
-{0x313D071E, CAT_KONFIG, VT_ENUM, 5730, STR5730, sizeof(ENUM5730), ENUM5730}, // [0] - Konfiguration - Trinkwasser-Sensor B3
-{0x253D071C, CAT_KONFIG, VT_ENUM, 5731, STR5731, sizeof(ENUM5731), ENUM5731}, // [0] - Konfiguration - Trinkwasser-Stellglied Q3
-{0x053D0727, CAT_KONFIG, VT_ONOFF, 5736, STR5736, 0, NULL}, // [0] - Konfiguration - Trinkwasser Trennschaltung
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5770, STR5770, 0, NULL}, // Erzeugertyp
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5772, STR5772, 0, NULL}, // Brenner Vorlaufzeit
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5800, STR5800, 0, NULL}, // Wärmequelle
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5807, STR5807, 0, NULL}, // Kälteerzeugung
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5810, STR5810, 0, NULL}, // Spreizung HK bei TA –10 °C
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5840, STR5840, 0, NULL}, // Solarstellglied
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5841, STR5841, 0, NULL}, // Externer Solartauscher
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5870, STR5870, 0, NULL}, // Kombispeicher
-{0x053D0497, CAT_KONFIG, VT_ENUM, 5890, STR5890, sizeof(ENUM5890), ENUM5890}, // [-] - Konfiguration - Relaisausgang QX1
-{0x053D0498, CAT_KONFIG, VT_ENUM, 5891, STR5891, sizeof(ENUM5891), ENUM5891}, // [-] - Konfiguration - Relaisausgang QX2
-{0x053D0587, CAT_KONFIG, VT_ENUM, 5892, STR5892, sizeof(ENUM5892), ENUM5892}, // [-] - Konfiguration - Relaisausgang QX3
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5894, STR5894, 0, NULL}, // Relaisausgang QX4
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5895, STR5895, 0, NULL}, // Relaisausgang QX5
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5896, STR5896, 0, NULL}, // Relaisausgang QX6
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5908, STR5908, 0, NULL}, // Funktion Ausgang QX3-Mod
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5909, STR5909, 0, NULL}, // Funktion Ausgang QX4-Mod
-{0x053D0567, CAT_KONFIG, VT_ENUM, 5930, STR5930, sizeof(ENUM5930), ENUM5930}, // [-] - Konfiguration - Fühlereingang BX 1
-{0x053D0568, CAT_KONFIG, VT_ENUM, 5931, STR5931, sizeof(ENUM5931), ENUM5931}, // [-] - Konfiguration - Fühlereingang BX 2
-{0x053D07CA, CAT_KONFIG, VT_ENUM, 5932, STR5932, sizeof(ENUM5932), ENUM5932}, // [-] - Konfiguration - Fühlereingang BX 3
-{0x053D07CB, CAT_KONFIG, VT_ENUM, 5933, STR5933, sizeof(ENUM5933), ENUM5933}, // [-] - Konfiguration - Fühlereingang BX 4
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5934, STR5934, 0, NULL}, // Fühlereingang BX5
-{0x053D0807, CAT_KONFIG, VT_ENUM, 5950, STR5950, sizeof(ENUM5950), ENUM5950}, // [-] - Konfiguration - Funktion Eingang H1
-{0x053D0808, CAT_KONFIG, VT_ENUM, 5951, STR5951, sizeof(ENUM5951), ENUM5951}, // [0] - Konfiguration - Wirksinn Kontakt H1
-{0x293D0656, CAT_KONFIG, VT_TEMP, 5952, STR5952, 0, NULL}, // [°C ] - Konfiguration - Minimaler Vorlaufsollwert H1
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5953, STR5953, 0, NULL}, // Spannungswert 1 H1
-{0x053D079F, CAT_KONFIG, VT_TEMP, 5954, STR5954, 0, NULL}, // [°C ] - Konfiguration - Waermeanforderung 10V H1
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5955, STR5955, 0, NULL}, // Spannungswert 2 H1
-{0x053D05DC, CAT_KONFIG, VT_PRESSURE, 5956, STR5956, 0, NULL}, // [bar ] - Konfiguration - Druckwer 3.5V H1
-{0x073D0807, CAT_KONFIG, VT_ENUM, 5960, STR5960, sizeof(ENUM5960), ENUM5960}, // [-] - Konfiguration - Funktion Eingang H3
-{0x073D0808, CAT_KONFIG, VT_ENUM, 5961, STR5961, sizeof(ENUM5961), ENUM5961}, // [0] - Konfiguration - Wirksinn Kontakt H3
-{0x2B3D0656, CAT_KONFIG, VT_TEMP, 5962, STR5962, 0, NULL}, // [°C ] - Konfiguration - Minimaler Vorlaufsollwert H3
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5963, STR5963, 0, NULL}, // Spannungswert 1 H3
-{0x073D079F, CAT_KONFIG, VT_TEMP, 5964, STR5964, 0, NULL}, // [°C ] - Konfiguration - Waermeanforderung 10V H3
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5965, STR5965, 0, NULL}, // Spannungswert 2 H3
-{0x073D05DC, CAT_KONFIG, VT_PRESSURE, 5966, STR5966, 0, NULL}, // [bar ] - Konfiguration - Druckwer 3.5V H3
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5980, STR5980, 0, NULL}, // Funktion Eingang EX1
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5981, STR5981, 0, NULL}, // Wirksinn Eingang EX1
-{0x053D07CE, CAT_KONFIG, VT_ENUM, 5982, STR5982, sizeof(ENUM5982), ENUM5982}, // [0] - Konfiguration - Funktion Eingang EX2
-{0x053D07D1, CAT_KONFIG, VT_ENUM, 5983, STR5983, sizeof(ENUM5983), ENUM5983}, // [0] - Konfiguration - Wirksinn Eingang EX2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5984, STR5984, 0, NULL}, // Funktion Eingang EX3
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5985, STR5985, 0, NULL}, // Wirksinn Eingang EX3
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5986, STR5986, 0, NULL}, // Funktion Eingang EX4
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5987, STR5987, 0, NULL}, // Wirksinn Eingang EX4
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5988, STR5988, 0, NULL}, // Funktion Eingang EX5
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5990, STR5990, 0, NULL}, // Funktion Eingang EX6
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5992, STR5992, 0, NULL}, // Funktion Eingang EX7
-{0x053D07CF, CAT_KONFIG, VT_ENUM, 6014, STR6014, sizeof(ENUM6014), ENUM6014}, // [0] - Konfiguration - Funktion Mischergruppe 1
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6015, STR6015, 0, NULL}, // Funktion Mischergruppe 2
-{0x053D0788, CAT_KONFIG, VT_ENUM, 6020, STR6020, sizeof(ENUM6020), ENUM6020}, // [0] - Konfiguration - Funktion Erweiterungsmodul 1
-{0x053D0789, CAT_KONFIG, VT_ENUM, 6021, STR6021, sizeof(ENUM6021), ENUM6021}, // [0] - Konfiguration - Funktion Erweiterungsmodul 2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6030, STR6030, 0, NULL}, // Relaisausgang QX21
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6031, STR6031, 0, NULL}, // Relaisausgang QX22
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6032, STR6032, 0, NULL}, // Relaisausgang QX23
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6040, STR6040, 0, NULL}, // Fühlereingang BX21
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6041, STR6041, 0, NULL}, // Fühlereingang BX22
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6046, STR6046, 0, NULL}, // Funktion Eingang H2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6047, STR6047, 0, NULL}, // Wirksinn Kontakt H2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6048, STR6048, 0, NULL}, // Minimaler Vorlaufsollwert H2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6049, STR6049, 0, NULL}, // Spannungswert 1 H2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6050, STR6050, 0, NULL}, // Temperaturwert 10V H2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6051, STR6051, 0, NULL}, // Spannungswert 2 H2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6052, STR6052, 0, NULL}, // Funktionswert 2 H2
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6070, STR6070, 0, NULL}, // Funktion Ausgang UX
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6071, STR6071, 0, NULL}, // Signallogik Ausgang UX
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6072, STR6072, 0, NULL}, // Signal Ausgang UX
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6075, STR6075, 0, NULL}, // Temperaturwert 10V UX
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6097, STR6097, 0, NULL}, // Fühlertyp Kollektor
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6098, STR6098, 0, NULL}, // Korrektur Kollektorfühler
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6099, STR6099, 0, NULL}, // Korrektur Kollektorfühler 2
-{0x053D05F1, CAT_KONFIG, VT_TEMP, 6100, STR6100, 0, NULL}, // [°C ] - Konfiguration - korrektur Aussenfühler
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6101, STR6101, 0, NULL}, // Fühlertyp Abgastemperatur
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6102, STR6102, 0, NULL}, // Korrektur Abgastemp'fühler
-{0x053d0600, CAT_KONFIG, VT_HOURS_SHORT, 6110, STR6110, 0, NULL}, // [h ] - Konfiguration - Zeitkonstante Gebaeude
-{0x053d05fe, CAT_KONFIG, VT_ONOFF, 6120, STR6120, 0, NULL}, // [0] - Konfiguration - Anlagenfrostschutz
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6128, STR6128, 0, NULL}, // Wärm'anfo unter Außentemp
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6129, STR6129, 0, NULL}, // Wärm'anfo über Außentemp
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6130, STR6130, 0, NULL}, // H1 mit Pufferspeicher
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6131, STR6131, 0, NULL}, // Wärm'anfo bei Ökobetrieb
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6134, STR6134, 0, NULL}, // H2 mit Pufferspeicher
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6135, STR6135, 0, NULL}, // Luftentfeuchter
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6136, STR6136, 0, NULL}, // Luftentfeuchter Freigabe
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6137, STR6137, 0, NULL}, // Luftentfeuchter r. F. EIN
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6138, STR6138, 0, NULL}, // Luftentfeuchter r. F. SD
-{0x053D06AB, CAT_KONFIG, VT_YESNO, 6200, STR6200, 0, NULL}, // [0] - Konfiguration - Fühler Speichern
-{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6201, STR6201, 0, NULL}, // Fühler löschen
-{0x053D05D5, CAT_KONFIG, VT_YESNO, 6205, STR6205, 0, NULL}, // [-] - Konfiguration - Parameter zurücksetzen
-{0x053D0BD0, CAT_KONFIG, VT_DWORD, 6212, STR6212, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Erzeuger 1
-{0x053D0BD1, CAT_KONFIG, VT_DWORD, 6213, STR6213, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Erzeuger 2
-{0x053D0BD2, CAT_KONFIG, VT_DWORD, 6215, STR6215, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Speicher
-{0x053D0BD3, CAT_KONFIG, VT_DWORD, 6217, STR6217, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Heizkreise
-{0x053d000e, CAT_KONFIG, VT_FP1, 6220, STR6220, 0, NULL}, // [0] - Konfiguration - Software- Version LOGON B
-
-// LPB-System
-{0x053D00C9, CAT_LPB, VT_BYTE, 6600, STR6600, 0, NULL}, // [0] - LPB - Geraeteadresse
-{0x053D00CA, CAT_LPB, VT_BYTE, 6601, STR6601, 0, NULL}, // [0] - LPB - Segmentadresse
-{0x053D0071, CAT_LPB, VT_ENUM, 6604, STR6604, sizeof(ENUM6604), ENUM6604}, // [0] - LPB - Busspeisung Funktion
-{0x053D0072, CAT_LPB, VT_ONOFF, 6605, STR6605, 0, NULL}, // [0] - LPB - Busspeisung Status
-{0x053D006A, CAT_LPB, VT_YESNO, 6610, STR6610, 0, NULL}, // [0] - LPB - Anzeige Systemmeldungen
-{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6612, STR6612, 0, NULL}, // Alarmverzögerung
-{0x053D0839, CAT_LPB, VT_ENUM, 6620, STR6620, sizeof(ENUM6620), ENUM6620}, // [ - ] - LPB - Wirkbereich Umschaltungen
-{0x2D3D0611, CAT_LPB, VT_ENUM, 6621, STR6621, sizeof(ENUM6621), ENUM6621}, // [0] - LPB - Sommerumschaltung
-{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6623, STR6623, 0, NULL}, // Betriebsartumschaltung
-{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6624, STR6624, 0, NULL}, // Manuelle Erzeugersperre
-{0x253D074A, CAT_LPB, VT_ENUM, 6625, STR6625, sizeof(ENUM6625), ENUM6625}, // [0] - LPB - Trinkwasserzuordnung
-{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6627, STR6627, 0, NULL}, // Kälteanforderung
-{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6632, STR6632, 0, NULL}, // TA'grenze ext Erz beachten
-{0x053D006D, CAT_LPB, VT_ENUM, 6640, STR6640, sizeof(ENUM6640), ENUM6640}, // [0] - LPB - Uhrbetrieb
-// Codierung unklar: 15.01 -> HEIZ->DISP ANS 6650 Aussentemperatur Lieferant 00 F0 ???
-{0x053D009F, CAT_LPB, VT_LPBADDR, 6650, STR6650, 0, NULL}, // [0] - LPB - Aussentemperatur Lieferant
-
-//Fehler
-{0x053D05D6, CAT_FEHLER, VT_YESNO, 6710, STR6710, 0, NULL}, // [0] - Fehler - Reset Alarmrelais
-{CMD_UNKNOWN, CAT_FEHLER, VT_UNKNOWN, 6711, STR6711, 0, NULL}, // Reset Wärmepumpe
-{0x213D069D, CAT_FEHLER, VT_MINUTES_SHORT, 6740, STR6740, 0, NULL}, // [min ] - Fehler - Vorlauftemperatur 1 Alarm
-{0x223D069D, CAT_FEHLER, VT_MINUTES_SHORT, 6741, STR6741, 0, NULL}, // [min ] - Fehler - Vorlauftemperatur 2 Alarm
-{0x113D05DE, CAT_FEHLER, VT_MINUTES_SHORT, 6743, STR6743, 0, NULL}, // [min ] - Fehler - Kesseltemperatur Alarm
-{CMD_UNKNOWN, CAT_FEHLER, VT_UNKNOWN, 6745, STR6745, 0, NULL}, // Trinkwasserladung Alarm
-{CMD_UNKNOWN, CAT_FEHLER, VT_UNKNOWN, 6746, STR6746, 0, NULL}, // Vorlauftemp Kühlen 1 Alarm
-{0x053D06D3, CAT_FEHLER, VT_DATETIME, 6800, STR6800, 0, NULL}, // [ ] - Fehler - Historie 1 Datum/Zeit
-{0x053D0814, CAT_FEHLER, VT_ERRORCODE, 6801, STR6801, 0, NULL}, // [ ] - Fehler - Historie 1 Fehlercode
-{0x053D06D4, CAT_FEHLER, VT_DATETIME, 6802, STR6802, 0, NULL}, // [ ] - Fehler - Historie 2 Datum/Zeit
-{0x053D0815, CAT_FEHLER, VT_ERRORCODE, 6803, STR6803, 0, NULL}, // [ ] - Fehler - Historie 2 Fehlercode
-{0x053D06D5, CAT_FEHLER, VT_DATETIME, 6804, STR6804, 0, NULL}, // [ ] - Fehler - Historie 3 Datum/Zeit
-{0x053D0816, CAT_FEHLER, VT_ERRORCODE, 6805, STR6805, 0, NULL}, // [ ] - Fehler - Historie 3 Fehlercode
-{0x053D06D6, CAT_FEHLER, VT_DATETIME, 6806, STR6806, 0, NULL}, // [ ] - Fehler - Historie 4 Datum/Zeit
-{0x053D0817, CAT_FEHLER, VT_ERRORCODE, 6807, STR6807, 0, NULL}, // [ ] - Fehler - Historie 4 Fehlercode
-{0x053D06D7, CAT_FEHLER, VT_DATETIME, 6808, STR6808, 0, NULL}, // [ ] - Fehler - Historie 5 Datum/Zeit
-{0x053D0818, CAT_FEHLER, VT_ERRORCODE, 6809, STR6809, 0, NULL}, // [ ] - Fehler - Historie 5 Fehlercode
-{0x053D06D8, CAT_FEHLER, VT_DATETIME, 6810, STR6810, 0, NULL}, // [ ] - Fehler - Historie 6 Datum/Zeit
-{0x053D0819, CAT_FEHLER, VT_ERRORCODE, 6811, STR6811, 0, NULL}, // [ ] - Fehler - Historie 6 Fehlercode
-{0x053D06D9, CAT_FEHLER, VT_DATETIME, 6812, STR6812, 0, NULL}, // [ ] - Fehler - Historie 7 Datum/Zeit
-{0x053D081A, CAT_FEHLER, VT_ERRORCODE, 6813, STR6813, 0, NULL}, // [ ] - Fehler - Historie 7 Fehlercode
-{0x053D06DA, CAT_FEHLER, VT_DATETIME, 6814, STR6814, 0, NULL}, // [ ] - Fehler - Historie 8 Datum/Zeit
-{0x053D081B, CAT_FEHLER, VT_ERRORCODE, 6815, STR6815, 0, NULL}, // [ ] - Fehler - Historie 8 Fehlercode
-{0x053D06DB, CAT_FEHLER, VT_DATETIME, 6816, STR6816, 0, NULL}, // [ ] - Fehler - Historie 9 Datum/Zeit
-{0x053D081C, CAT_FEHLER, VT_ERRORCODE, 6817, STR6817, 0, NULL}, // [ ] - Fehler - Historie 9 Fehlercode
-{0x053D06DC, CAT_FEHLER, VT_DATETIME, 6818, STR6818, 0, NULL}, // [ ] - Fehler - Historie 10 Datum/Zeit
-{0x053D081D, CAT_FEHLER, VT_ERRORCODE, 6819, STR6819, 0, NULL}, // [ ] - Fehler - Historie 10 Fehlercode
-
-// Wartung/Sonderbetrieb
-{0x053d03f1, CAT_WARTUNG, VT_HOURS_WORD, 7040, STR7040, 0, NULL}, // [h ] - Wartung/Service - Brennerstunden Intervall
-{0x053d03f3, CAT_WARTUNG, VT_HOURS_WORD, 7041, STR7041, 0, NULL}, // [h ] - Wartung/Service - Brennerstunden seit Wartung
-{0x053D0C69, CAT_WARTUNG, VT_UINT, 7042, STR7042, 0, NULL}, // [0] - Wartung/Service - Brennerstarts Intervall
-{0x053D05E0, CAT_WARTUNG, VT_UINT, 7043, STR7043, 0, NULL}, // [0] - Wartung/Service - Brennerstarts seit Wartung
-{0x053d05e1, CAT_WARTUNG, VT_MONTHS, 7044, STR7044, 0, NULL}, // [Monate ] - Wartung/Service - Wartungsintervall
-{0x053d05e2, CAT_WARTUNG, VT_MONTHS, 7045, STR7045, 0, NULL}, // [Monate ] - Wartung/Service - Zeit seit Wartung
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7053, STR7053, 0, NULL}, // Abgastemperaturgrenze
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7054, STR7054, 0, NULL}, // Verzögerung Abgasmeldung
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7070, STR7070, 0, NULL}, // WP Zeitintervall
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7071, STR7071, 0, NULL}, // WP Zeit seit Wartung
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7072, STR7072, 0, NULL}, // Max Starts Verd1 / Betr’Std
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7073, STR7073, 0, NULL}, // Akt Starts Verd1 / Betr’Std
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7074, STR7074, 0, NULL}, // Max Starts Verd2 / Betr’Std
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7075, STR7075, 0, NULL}, // Akt Starts Verd2 / Betr’Std
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7076, STR7076, 0, NULL}, // Spreiz Kondens Max / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7077, STR7077, 0, NULL}, // Akt Spreiz Kondens Max / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7078, STR7078, 0, NULL}, // Spreiz Kondens Min / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7079, STR7079, 0, NULL}, // Akt Spreiz Kondens Min / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7080, STR7080, 0, NULL}, // Spreiz Verdampfer Max / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7081, STR7081, 0, NULL}, // Akt Spreiz Verdampfer Max / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7082, STR7082, 0, NULL}, // Spreiz Verdampfer Min / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7083, STR7083, 0, NULL}, // Akt Spreiz Verdampfer Min / Wo
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7090, STR7090, 0, NULL}, // TWW Speicher Zeitintervall
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7091, STR7091, 0, NULL}, // TWW Speicher seit Wartung
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7092, STR7092, 0, NULL}, // TWW Ladetemp WP Minimum
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7093, STR7093, 0, NULL}, // Akt TWW Ladetemperatur WP
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7119, STR7119, 0, NULL}, // Ökofunktion
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7120, STR7120, 0, NULL}, // Ökobetrieb
-{0x0d3d092a, CAT_WARTUNG, VT_ONOFF, 7130, STR7130, 0, NULL}, // [0] - Wartung/Service - Schornsteinfegerfunktion
-{0x053d0075, CAT_WARTUNG, VT_ONOFF, 7140, STR7140, 0, NULL}, // [0] - Wartung/Service - Handbetrieb
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7141, STR7141, 0, NULL}, // Notbetrieb
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7142, STR7142, 0, NULL}, // Notbetrieb Funktionsstart
-{0x053D0528, CAT_WARTUNG, VT_TEMP, 7150, STR7150, 0, NULL}, // [ °C ] - Wartung/Service - Simulation Aussentemperatur
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7152, STR7152, 0, NULL}, // Abtauen auslösen
-{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7160, STR7160, 0, NULL}, // Reset Begrenzungszeiten
-{0x053D06E8, CAT_WARTUNG, VT_STRING, 7170, STR7170, 0, NULL}, // [0] - Wartung/Service - Telefon Kundendienst
-
-// Ein-/Ausgangstest
-{0x053D0073, CAT_IOTEST, VT_ENUM, 7700, STR7700, sizeof(ENUM7700), ENUM7700}, // [0] - Ein-/Ausgangstest - Relaistest
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7705, STR7705, 0, NULL}, // Mod'sollwert QX3 Relaistest
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7708, STR7708, 0, NULL}, // Modulationssignal QX3
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7710, STR7710, 0, NULL}, // Ausgangstest UX
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7711, STR7711, 0, NULL}, // Spannungssignal UX
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7714, STR7714, 0, NULL}, // PWM-Signal P1
-{0x053D0470, CAT_IOTEST, VT_TEMP, 7730, STR7730, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Aussentemperatur B9
-{0x053D08C5, CAT_IOTEST, VT_TEMP, 7732, STR7732, 0, NULL}, // [°C ] - Ein-/Ausgangstest - vorlauftemperatur B1
-{0x053D08C6, CAT_IOTEST, VT_TEMP, 7734, STR7734, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Vorlauftemperatur B12
-{0x053D0462, CAT_IOTEST, VT_TEMP, 7750, STR7750, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Trinkwassertemperatur B3
-{0x053D0468, CAT_IOTEST, VT_TEMP, 7760, STR7760, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Kesseltemperatur B2
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7770, STR7770, 0, NULL}, // Vorlauftemperatur WP B21
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7771, STR7771, 0, NULL}, // Rücklauftemperatur WP B71
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7772, STR7772, 0, NULL}, // Heissgastemperatur B81
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7775, STR7775, 0, NULL}, // Quelle Eintrittstemp B91
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7777, STR7777, 0, NULL}, // Fühlertemperatur B92, B84
-{0x053D056B, CAT_IOTEST, VT_TEMP, 7820, STR7820, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX1
-{0x053D056C, CAT_IOTEST, VT_TEMP, 7821, STR7821, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX2
-{0x053D0791, CAT_IOTEST, VT_TEMP, 7822, STR7822, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX3
-{0x053D0792, CAT_IOTEST, VT_TEMP, 7823, STR7823, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX4
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7824, STR7824, 0, NULL}, // Fühlertemperatur BX5
-{0x053D0793, CAT_IOTEST, VT_TEMP, 7830, STR7830, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX21 Modul 1
-{0x053D0799, CAT_IOTEST, VT_TEMP, 7831, STR7831, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX22 Modul 1
-{0x053D079A, CAT_IOTEST, VT_TEMP, 7832, STR7832, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX21 Modul 2
-{0x053D079B, CAT_IOTEST, VT_TEMP, 7833, STR7833, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX22 Modul 2
-{0x053D082F, CAT_IOTEST, VT_VOLTAGE, 7840, STR7840, 0, NULL}, // [V ] - Ein-/Ausgangstest - Spannungssignal H1
-{0x053D0809, CAT_IOTEST, VT_CLOSEDOPEN, 7841, STR7841, 0, NULL}, // [0] - Ein-/Ausgangstest - Kontaktzustand H1
-{CMD_UNKNOWN, CAT_IOTEST, VT_VOLTAGE, 7845, STR7845, 0, NULL}, // [V ] - Ein-/Ausgangstest - Spannungssignal H2
-{CMD_UNKNOWN, CAT_IOTEST, VT_CLOSEDOPEN, 7846, STR7846, 0, NULL}, // [0] - Ein-/Ausgangstest - Kontaktzustand H2
-{0x073D082F, CAT_IOTEST, VT_VOLTAGE, 7854, STR7854, 0, NULL}, // Spannungssignal H3
-{0x073D0809, CAT_IOTEST, VT_CLOSEDOPEN, 7855, STR7855, 0, NULL}, // Kontaktzustand H3
-{0x053D03F6, CAT_IOTEST, VT_VOLTAGE, 7870, STR7870, 0, NULL}, // [V] - Ein-/Ausgangstest - Brennerstörung S3
-{0x053D03F5, CAT_IOTEST, VT_VOLTAGE, 7881, STR7881, 0, NULL}, // [V] - Ein-/Ausgangstest - 1. Brennerstufe E1
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7889, STR7889, 0, NULL}, // Niederdruckwächter E9
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7890, STR7890, 0, NULL}, // Hochdruckwächter E10
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7891, STR7891, 0, NULL}, // Wickl’schutz Verdicht 1 E11
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7911, STR7911, 0, NULL}, // Eingang EX 1
-{0x053D03FC, CAT_IOTEST, VT_VOLTAGE, 7912, STR7912, 0, NULL}, // [V] - Ein-/Ausgangstest - Eingang EX2
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7913, STR7913, 0, NULL}, // Eingang EX 3
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7914, STR7914, 0, NULL}, // Eingang EX 4
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7915, STR7915, 0, NULL}, // Eingang EX 5
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7916, STR7916, 0, NULL}, // Eingang EX 6
-{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7917, STR7917, 0, NULL}, // Eingang EX 7
-
-//Status
-{0x053d07a3, CAT_STATUS, VT_ENUM, 8000, STR8000, sizeof(ENUM8000), ENUM8000}, // [ ] - Status - Status Heizkreis 1
-{0x053d07a5, CAT_STATUS, VT_ENUM, 8001, STR8001, sizeof(ENUM8001), ENUM8001}, // [ ] - Status - Status Heizkreis 2
-{0x053D07A7, CAT_STATUS, VT_ENUM, 8002, STR8002, sizeof(ENUM8002), ENUM8002}, // [ ] - Status - Status Heizkreis P
-{0x053d07a1, CAT_STATUS, VT_ENUM, 8003, STR8003, sizeof(ENUM8003), ENUM8003}, // [] - Status - Status Trinkwasser
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8004, STR8004, 0, NULL}, // Status Kühlkreis 1
-{0x053d07a9, CAT_STATUS, VT_ENUM, 8005, STR8005, sizeof(ENUM8005), ENUM8005}, // [] - Status - Status Kessel
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8006, STR8006, 0, NULL}, // Status Wärmepumpe
-{0x053d07ad, CAT_STATUS, VT_ENUM, 8007, STR8007, sizeof(ENUM8007), ENUM8007}, // [] - Status - Status Solar
-{0x053D0A08, CAT_STATUS, VT_ENUM, 8008, STR8008, sizeof(ENUM8008), ENUM8008}, // [] - Status - Status Feststoffkessel
-{0x053D07AB, CAT_STATUS, VT_ENUM, 8010, STR8010, sizeof(ENUM8010), ENUM8010}, // [] - Status - Status Pufferspeicher
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8011, STR8011, 0, NULL}, // Status Schwimmbad
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8022, STR8022, 0, NULL}, // Status Zusatzerzeuger
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8050, STR8050, 0, NULL}, // Zeitstemper Statushistorie 1
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8051, STR8051, 0, NULL}, // Statuscode Statushistorie 1
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8052, STR8052, 0, NULL}, // Zeitstemper Statushistorie 2
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8053, STR8053, 0, NULL}, // Statuscode Statushistorie 2
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8054, STR8054, 0, NULL}, // Zeitstemper Statushistorie 3
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8055, STR8055, 0, NULL}, // Statuscode Statushistorie 3
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8056, STR8056, 0, NULL}, // Zeitstemper Statushistorie 4
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8057, STR8057, 0, NULL}, // Statuscode Statushistorie 4
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8058, STR8058, 0, NULL}, // Zeitstemper Statushistorie 5
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8059, STR8059, 0, NULL}, // Statuscode Statushistorie 5
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8060, STR8060, 0, NULL}, // Zeitstemper Statushistorie 6
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8061, STR8061, 0, NULL}, // Statuscode Statushistorie 6
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8062, STR8062, 0, NULL}, // Zeitstemper Statushistorie 7
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8063, STR8063, 0, NULL}, // Statuscode Statushistorie 7
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8064, STR8064, 0, NULL}, // Zeitstemper Statushistorie 8
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8065, STR8065, 0, NULL}, // Statuscode Statushistorie 8
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8066, STR8066, 0, NULL}, // Zeitstemper Statushistorie 9
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8067, STR8067, 0, NULL}, // Statuscode Statushistorie 10
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8068, STR8068, 0, NULL}, // Zeitstemper Statushistorie 10
-{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8069, STR8069, 0, NULL}, // Statuscode Statushistorie 10
-
-// Diagnose Kaskade
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8100, STR8100, 0, NULL}, // Priorität / Status Erzeuger 1
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8102, STR8102, 0, NULL}, // Priorität / Status Erzeuger 2
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8104, STR8104, 0, NULL}, // Priorität / Status Erzeuger 3
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8106, STR8106, 0, NULL}, // Priorität / Status Erzeuger 4
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8108, STR8108, 0, NULL}, // Priorität / Status Erzeuger 5
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8110, STR8110, 0, NULL}, // Priorität / Status Erzeuger 6
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8112, STR8112, 0, NULL}, // Priorität / Status Erzeuger 7
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8114, STR8114, 0, NULL}, // Priorität / Status Erzeuger 8
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8116, STR8116, 0, NULL}, // Priorität / Status Erzeuger 9
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8118, STR8118, 0, NULL}, // Priorität / Status Erzeuger 10
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8120, STR8120, 0, NULL}, // Priorität / Status Erzeuger 11
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8122, STR8122, 0, NULL}, // Priorität / Status Erzeuger 12
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8124, STR8124, 0, NULL}, // Priorität / Status Erzeuger 13
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8126, STR8126, 0, NULL}, // Priorität / Status Erzeuger 14
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8128, STR8128, 0, NULL}, // Priorität / Status Erzeuger 15
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8130, STR8130, 0, NULL}, // Priorität / Status Erzeuger 16
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8138, STR8138, 0, NULL}, // Kaskadenvorlauftemperatur
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8139, STR8139, 0, NULL}, // Kaskadenvorlaufsollwert
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8140, STR8140, 0, NULL}, // Kaskadenrücklauftemperatur
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8141, STR8141, 0, NULL}, // Kaskadenrücklaufsollwert
-{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8150, STR8150, 0, NULL}, // Erz'folge Umschalt aktuell
-
-
-//Diagnose Erzeuger
-{0x053D09A0, CAT_DIAG_ERZEUGER, VT_ONOFF, 8300, STR8300, 0, NULL}, // [0] - Diagnose Erzeuger - 1. Brennerstufe T2
-{0x053D09A1, CAT_DIAG_ERZEUGER, VT_ONOFF, 8301, STR8301, 0, NULL}, // [0] - Diagnose Erzeuger - 2. Brennerstufe T8
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8308, STR8308, 0, NULL}, // Drehzahl Kesselpumpe
-{0x0d3d0519, CAT_DIAG_ERZEUGER, VT_TEMP, 8310, STR8310, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kesseltemperatur
-{0x0d3d0923, CAT_DIAG_ERZEUGER, VT_TEMP, 8311, STR8311, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kesselsollwert
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8312, STR8312, 0, NULL}, // Kesselschaltpunkt
-{0x113d051a, CAT_DIAG_ERZEUGER, VT_TEMP, 8314, STR8314, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kesselrücklauftemperatur
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8315, STR8315, 0, NULL}, // Kesselrücklaufsollwert
-{0x053D051D, CAT_DIAG_ERZEUGER, VT_TEMP, 8316, STR8316, 0, NULL}, // [°C ] - Diagnose Erzeuger - Abgastemperatur
-{0x053D051C, CAT_DIAG_ERZEUGER, VT_TEMP, 8318, STR8318, 0, NULL}, // [°C ] - Diagnose Erzeuger - Abgastemperatur Maximum
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8326, STR8326, 0, NULL}, // Brennermodulation
-{0x0D3D093B, CAT_DIAG_ERZEUGER, VT_HOURS, 8330, STR8330, 0, NULL}, // [h ] - Diagnose Erzeuger - Betriebstunden 1.Stufe
-{0x053D08A5, CAT_DIAG_ERZEUGER, VT_DWORD, 8331, STR8331, 0, NULL}, // [0] - Diagnose Erzeuger - Startzaehler 1.Stufe
-{0x0D3D093D, CAT_DIAG_ERZEUGER, VT_HOURS, 8332, STR8332, 0, NULL}, // [h ] - Diagnose Erzeuger - Betriebsstunden 2. Stufe
-{0x053D08A6, CAT_DIAG_ERZEUGER, VT_DWORD, 8333, STR8333, 0, NULL}, // [0] - Diagnose Erzeuger - Startzaehler 2.Stufe
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8400, STR8400, 0, NULL}, // Verdichter 1 K1
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8401, STR8401, 0, NULL}, // Verdichter 2 K2
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8402, STR8402, 0, NULL}, // Elektroeinsatz 1 Vorlauf
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8403, STR8403, 0, NULL}, // Elektroeinsatz 2 Vorlauf
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8404, STR8404, 0, NULL}, // Quellenpu Q8 / Ventilat K19
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8405, STR8405, 0, NULL}, // Drehzahl Quellenpumpe
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8406, STR8406, 0, NULL}, // Konendastorpumpe Q9
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8410, STR8410, 0, NULL}, // Rücklauftemperatur WP
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8411, STR8411, 0, NULL}, // Sollwert WP
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8412, STR8412, 0, NULL}, // Vorlauftemperatur WP
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8415, STR8415, 0, NULL}, // Heissgastemperatur 1
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8416, STR8416, 0, NULL}, // Heissgastemperatur Max
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8417, STR8417, 0, NULL}, // Heissgastemperatur 2
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8420, STR8420, 0, NULL}, // Kältemitteltemperatur flüssig
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8425, STR8425, 0, NULL}, // Temp’spreizung Kondensator
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8426, STR8426, 0, NULL}, // Temp’spreizung Verdampfer
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8427, STR8427, 0, NULL}, // Quelle Eintrittstemperatur
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8428, STR8428, 0, NULL}, // Quelle Eintritt Min
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8429, STR8429, 0, NULL}, // Quelle Austrittstemperatur
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8430, STR8430, 0, NULL}, // Quelle Austritt Min
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8440, STR8440, 0, NULL}, // Rest Stufe 1 Stillst’zeit Min
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8441, STR8441, 0, NULL}, // Rest Stufe 2 Stillst’zeit Min
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8442, STR8442, 0, NULL}, // Rest Stufe 1 Laufzeit Min
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8443, STR8443, 0, NULL}, // Rest Stufe 2 Laufzeit Min
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8444, STR8444, 0, NULL}, // Restzeit Begr Quelle TempMin
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8446, STR8446, 0, NULL}, // Verdichterfolge
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8450, STR8450, 0, NULL}, // Betr’stunden Verdichter 1
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8451, STR8451, 0, NULL}, // Startzähler Verdichter 1
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8452, STR8452, 0, NULL}, // Betr’stunden Verdichter 2
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8453, STR8453, 0, NULL}, // Startzähler Verdichter 2
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8454, STR8454, 0, NULL}, // Sperrdauer WP
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8455, STR8455, 0, NULL}, // Zähler Anzahl Sperren WP
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8456, STR8456, 0, NULL}, // Betr’stunden Elektro Vorl
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8457, STR8457, 0, NULL}, // Startzähler Elektro Vorlauf
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8469, STR8469, 0, NULL}, // Drehzahl Ventilator
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8470, STR8470, 0, NULL}, // Ventilator K19
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8471, STR8471, 0, NULL}, // Prozessumkehrventil
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8475, STR8475, 0, NULL}, // Verdampfertemperatur
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8477, STR8477, 0, NULL}, // Temp'diff Abtauen Istwert
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8478, STR8478, 0, NULL}, // Temp'diff Abtauen Sollwert
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8480, STR8480, 0, NULL}, // Restzeit Abtausperrung
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8481, STR8481, 0, NULL}, // Restzeit Zwangsabtauen
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8482, STR8482, 0, NULL}, // Restzeit Abtaustabilisierung
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8485, STR8485, 0, NULL}, // Anzahl Abtauversuche
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8487, STR8487, 0, NULL}, // Status Abtauen WP
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8505, STR8505, 0, NULL}, // Drehzahl Kollektorpumpe 1
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8506, STR8506, 0, NULL}, // Drehzahl Solarpump ext.Tau
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8507, STR8507, 0, NULL}, // Drehzahl Solarpumpe Puffer
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8508, STR8508, 0, NULL}, // Drehzahl Solarpump Sch'bad
-{0x493d052a, CAT_DIAG_ERZEUGER, VT_TEMP, 8510, STR8510, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kollektortemperatur 1
-{0x493D053F, CAT_DIAG_ERZEUGER, VT_TEMP, 8511, STR8511, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kollektortemperatur 1 Max
-{0x493D0718, CAT_DIAG_ERZEUGER, VT_TEMP, 8512, STR8512, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kollektortemperatur 1Min
-{0x493D053B, CAT_DIAG_ERZEUGER, VT_TEMP, 8513, STR8513, 0, NULL}, // [°C ] - Diagnose Erzeuger - dT Kollektor 1/TWW
-{0x493D053C, CAT_DIAG_ERZEUGER, VT_TEMP, 8514, STR8514, 0, NULL}, // [°C ] - Diagnose Erzeuger - dt Kollektor 1/Puffer
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8515, STR8515, 0, NULL}, // dT Kollektor 1 / Schwimmbad
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8519, STR8519, 0, NULL}, // Solarvorlauftemperatur
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8520, STR8520, 0, NULL}, // Solarrücklauftemperatur
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8526, STR8526, 0, NULL}, // Tagesertrag Solarenergie
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8527, STR8527, 0, NULL}, // Gesamtertrag Solarenergie
-{0x493d0893, CAT_DIAG_ERZEUGER, VT_HOURS, 8530, STR8530, 0, NULL}, // [h ] - Diagnose Erzeuger - Betr`stunden Solarertrag
-{0x493D0717, CAT_DIAG_ERZEUGER, VT_HOURS, 8531, STR8531, 0, NULL}, // [h ] - Diagnose Erzeuger - Betr`stunden Kollektor`überhitz
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8543, STR8543, 0, NULL}, // Drehzahl Kollektorpumpe 2
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8547, STR8547, 0, NULL}, // Kollektortemperatur 2
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8548, STR8548, 0, NULL}, // Kollektortemperatur 2 Max
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8549, STR8549, 0, NULL}, // Kollektortemperatur 2 Min
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8550, STR8550, 0, NULL}, // dT Kollektor 2 / TWW
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8551, STR8551, 0, NULL}, // dT Kollektor 2 / Puffer
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8552, STR8552, 0, NULL}, // dT Kollektor 2 / Schwimmbad
-{0x513D052E, CAT_DIAG_ERZEUGER, VT_TEMP, 8560, STR8560, 0, NULL}, // [°C ] - Diagnose Erzeuger - Feststoffkesseltemperatur
-{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8570, STR8570, 0, NULL}, // Betr'std Feststoffkessel
-
-// Diagnose Verbraucher
-{0x053d0521, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8700, STR8700, 0, NULL}, // [°C ] - Diagnose Verbraucher - Aussentemperatur
-{0x053D056F, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8701, STR8701, 0, NULL}, // Außentemperatur Minimum
-{0x053D056E, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8702, STR8702, 0, NULL}, // Außentemperatur Maximum
-{0x053d05f0, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8703, STR8703, 0, NULL}, // [°C ] - Diagnose Verbraucher - Aussentemperatur gedaempft
-{0x053d05f2, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8704, STR8704, 0, NULL}, // [°C ] - Diagnose Verbraucher - Aussentemperatur gemischt
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8720, STR8720, 0, NULL}, // Relative Raumfeuchte
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8721, STR8721, 0, NULL}, // Raumtemperatur
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8722, STR8722, 0, NULL}, // Taupunkttemperatur
-{0x053D09A5, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8730, STR8730, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreispumpe Q2
-{0x053D09A6, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8731, STR8731, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Auf Y1
-{0x053D09A7, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8732, STR8732, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Zu Y2
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8735, STR8735, 0, NULL}, // Drehzahl Heizkreispumpe 1
-{0x2d3d051e, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8740, STR8740, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumtemperatur 1
-{0x2d3d0593, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8741, STR8741, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumsollwert 1
-{0x213d0518, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8743, STR8743, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlauftemperatur 1 Alarm
-{0x213d0667, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8744, STR8744, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert 1
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8751, STR8751, 0, NULL}, // Kühlkreispumpe Q24
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8752, STR8752, 0, NULL}, // Kühlkreismischer Auf Y23
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8753, STR8753, 0, NULL}, // Kühlkreismischer Zu Y24
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8754, STR8754, 0, NULL}, // Umlenkventil Kühlen Y21
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8756, STR8756, 0, NULL}, // Vorlauftemperatur Kühlen 1
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8757, STR8757, 0, NULL}, // Vorlaufsollwert Kühlen1
-{0x053D09A8, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8760, STR8760, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreispumpe Q6
-{0x053D09A9, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8761, STR8761, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Auf Y5
-{0x053D09AA, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8762, STR8762, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Zu Y6
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8765, STR8765, 0, NULL}, // Drehzahl Heizkreispumpe 2
-{0x2e3d051e, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8770, STR8770, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumtemperatur 2
-{0x2e3d0593, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8771, STR8771, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumsollwert 2
-{0x223d0518, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8773, STR8773, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlauftemperatur 2
-{0x223d0667, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8774, STR8774, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert 2
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8795, STR8795, 0, NULL}, // Drehzahl Heizkreispumpe P
-{0x2F3D051E, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8800, STR8800, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumtemperatur P
-{0x2F3D0593, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8801, STR8801, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumsollwert P
-{0x233D0667, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8803, STR8803, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsol wert P
-{0x053D09A3, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8820, STR8820, 0, NULL}, // [0] - Diagnose Verbraucher - Trinkwasserpumpe Q3
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8821, STR8821, 0, NULL}, // Elektroeinsatz TWW K6
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8825, STR8825, 0, NULL}, // Drehzahl Trinkwasserpumpe
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8826, STR8826, 0, NULL}, // Drehzahl TWW Zw'kreispumpe
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8827, STR8827, 0, NULL}, // Drehzahl Dl'erhitzerpumpe
-{0x313d052f, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8830, STR8830, 0, NULL}, // [°C ] - Diagnose Verbraucher - Trinkwassertemperatur 1
-{0x313d074b, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8831, STR8831, 0, NULL}, // [°C ] - Diagnose Verbraucher - Trinkwassersollwert
-{0x313d0530, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8832, STR8832, 0, NULL}, // [°C ] - Diagnose Verbraucher - Trinkwassertemperatur 2
-{0x253D077D, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8835, STR8835, 0, NULL}, // [°C ] - Diagnose Verbraucher - TWW Zirkulationstemperatur
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8836, STR8836, 0, NULL}, // TWW Ladetemperatur
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8840, STR8840, 0, NULL}, // Betr’stunden TWW-Pumpe
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8841, STR8841, 0, NULL}, // Startzähler TWW-Pumpe
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8842, STR8842, 0, NULL}, // Betr’stunden Elektro TWW
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8843, STR8843, 0, NULL}, // Startzähler Elektro TWW
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8850, STR8850, 0, NULL}, // TWW Vorreglertemperatur
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8851, STR8851, 0, NULL}, // TWW Vorreglersollwert
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8852, STR8852, 0, NULL}, // TWW Durchl'erhitzertemp
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8853, STR8853, 0, NULL}, // TWW Durchl'erhitzersollwert
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8900, STR8900, 0, NULL}, // Schwimmbadtemperatur
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8901, STR8901, 0, NULL}, // Schwimmbadsollwert
-{0x053D08C7, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8930, STR8930, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorreglertemperatur
-{0x053D08C8, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8931, STR8931, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorreglersollwert
-{0x053D051F, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8950, STR8950, 0, NULL}, // [°C ] - Diagnose Verbraucher - Schienenvorlauftemperatur
-{0x053D0783, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8951, STR8951, 0, NULL}, // [°C ] - Diagnose Verbraucher - Schienenvorlaufsollwert
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8952, STR8952, 0, NULL}, // Schienenrücklauftemperatur
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8957, STR8957, 0, NULL}, // Schienenvorl'sollwert Kälte
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8962, STR8962, 0, NULL}, // Leistungssollwert Schiene
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8970, STR8970, 0, NULL}, // Elektroeinsatz Puffer
-{0x053d0534, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8980, STR8980, 0, NULL}, // [°C ] - Diagnose Verbraucher - Pufferspeichertemperatur 1
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8981, STR8981, 0, NULL}, // Pufferspeichersollwert
-{0x053D0535, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8982, STR8982, 0, NULL}, // [°C ] - Diagnose Verbraucher - Pufferspeichertemperatur 2
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8983, STR8983, 0, NULL}, // Pufferspeichertemperatur 3
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8990, STR8990, 0, NULL}, // Betr’stunden Elektro Puffer
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8991, STR8991, 0, NULL}, // Startzähler Elektro Puffer
-{0x053D080C, CAT_DIAG_VERBRAUCHER, VT_TEMP, 9000, STR9000, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert H1
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_TEMP, 9001, STR9001, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert H2
-{0x073D080C, CAT_DIAG_VERBRAUCHER, VT_TEMP, 9004, STR9004, 0, NULL}, // Vorlaufsollwert H3
-{0x053D0805, CAT_DIAG_VERBRAUCHER, VT_PRESSURE_WORD, 9005, STR9005, 0, NULL}, // [bar ] - Diagnose Verbraucher - Wasserdruck H1
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_PRESSURE_WORD, 9006, STR9006, 0, NULL}, // [bar ] - Diagnose Verbraucher - Wasserdruck H2
-{0x073D0805, CAT_DIAG_VERBRAUCHER, VT_PRESSURE_WORD, 9009, STR9009, 0, NULL}, // [bar ] - Diagnose Verbraucher - Wasserdruck H3
-{0x053D09BA, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9031, STR9031, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX1
-{0x053D09BB, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9032, STR9032, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX2
-{0x053D09BC, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9033, STR9033, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX3
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9034, STR9034, 0, NULL}, // Relaisausgang QX4
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9035, STR9035, 0, NULL}, // Relaisausgang QX5
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9036, STR9036, 0, NULL}, // Relaisausgang QX6
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9037, STR9037, 0, NULL}, // Relaisausgang QX7
-{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9038, STR9038, 0, NULL}, // Relaisausgang QX8
-{0x053D09F6, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9050, STR9050, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX21 Modul 1
-{0x053D09F7, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9051, STR9051, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX22 Modul 1
-{0x053D09F8, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9052, STR9052, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX23 Modul 1
-{0x053D09F9, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9053, STR9053, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX21 Modul 2
-{0x053D09FA, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9054, STR9054, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX22 Modul 2
-{0x053D09FB, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9055, STR9055, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX23 Modul 2
-
-// Feuerungsautomat
-{0x2d3d3037, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9500, STR9500, 0, NULL}, // Vorlüftzeit
-{0x213d3038, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9502, STR9502, 0, NULL}, // Gebl'ansteuerung Vorlüftung
-{0x213d300f, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9504, STR9504, 0, NULL}, // Solldrehzahl Vorlüftung
-{0x0d3d3048, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9510, STR9510, 0, NULL}, // Gebl'ansteuerung Zündung
-{0x0d3d2fc9, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9512, STR9512, 0, NULL}, // Solldrehzahl Zündung
-{0x0d3d3049, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9520, STR9520, 0, NULL}, // Gebl'ansteuerung Betrieb. Min
-{0x0d3d304a, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9522, STR9522, 0, NULL}, // Gebl'ansteuerung Betrieb. Max
-{0x0d3d2fca, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9524, STR9524, 0, NULL}, // Solldrehzahl Betrieb Min
-{0x0d3d2fcb, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9527, STR9527, 0, NULL}, // Solldrehzahl Betrieb Max
-{0x2d3d304c, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9540, STR9540, 0, NULL}, // Nachlüftzeit
-{0x253d2fe8, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9560, STR9560, 0, NULL}, // Gebl'ansteuerung Durchlad
-{0x253d2fe9, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9563, STR9563, 0, NULL}, // Solldrehzahl Durchlasung
-
- /*** virtuelle Zeilen ***/
-{0x2d3d0215, CAT_USER_DEFINED, VT_TEMP, 10000, STR10000, 0, NULL}, // Raumtemperatur 1 (kann als INF geschickt werden)
-
-{CMD_END, CAT_UNKNOWN, VT_UNKNOWN,0,"", 0, NULL}
-};
-
-/* buffer to load PROGMEM values in RAM */
-#define BUFLEN 3500
-char buffer[BUFLEN];
-
-/* buffer to print output lines*/
-#define OUTBUF_LEN 300
-char outBuf[OUTBUF_LEN];
-byte outBufLen=0;
-
-void outBufclear(void){
- outBufLen=0;
- outBuf[0]='\0';
-}
-
-int dayofweek(uint8_t day, uint8_t month, uint16_t year)
-{
- /** Zeller's congruence for the Gregorian calendar. **/
- /** With 1=Monday, ... 5=Saturday, 7=Sunday **/
- if (month < 3) {
- month += 12;
- year--;
- }
- return (((13*month+3)/5 + day + year + year/4 - year/100 + year/400) % 7) + 1;
-}
-
-
-void setup() {
- Serial.begin(115200);
- Serial.println(F("READY"));
- Serial.print(F("free RAM:"));
- Serial.println(freeRam());
-
- // enable w5100 SPI
- pinMode(10,OUTPUT);
- digitalWrite(10,LOW);
-
- // disable SD Card
- pinMode(4,OUTPUT);
- digitalWrite(4,HIGH);
-
- // start the Ethernet connection and the server:
- Ethernet.begin(mac, ip);
- server.begin();
-}
-
-int findLine(uint16_t line, uint16_t start_idx, uint32_t *cmd){
- int found;
- int i;
- uint32_t c;
- uint16_t l;
-
- // search for the line in cmdtbl
- i=start_idx;
- found=0;
- do{
- c=pgm_read_dword(&cmdtbl[i].cmd);
- if(c==CMD_END) break;
- l=pgm_read_word(&cmdtbl[i].line);
- if(l==line){
- found=1;
- break;
- }
- if(l>line){
- break;
- }
- i++;
- }while(1);
-
- if(!found){
- return -1;
- }
- if(cmd!=NULL) *cmd=c;
- return i;
-}
-
-#define MAX_PARAM_LEN 22
-
-int set(uint16_t line,char *val, bool setcmd){
- byte msg[33];
- byte tx_msg[33];
- int i;
- uint32_t c;
- uint8_t param[MAX_PARAM_LEN]; // 33 -9 - 2
- uint8_t param_len;
-
- i=findLine(line,0,&c);
- if(i<0) return 0;
-
- // get type
- switch(pgm_read_byte(&cmdtbl[i].type)){
- case VT_TEMP:
- {
- uint16_t t=atof(val)*64.0;
- if(setcmd){
- param[0]=0x01;
- param[1]=(t >> 8);
- param[2]= t & 0xff;
- }else{ // INF message type (e.g. for room temperature)
- param[0]=(t >> 8);
- param[1]= t & 0xff;
- param[2]=0x00;
- }
- param_len=3;
- }
- break;
- case VT_PERCENT:
- {
- if(val[0]!='\0'){
- uint8_t t=atoi(val);
- param[0]=0x06; //enable
- param[1]=t;
- }else{
- param[0]=0x05; // disable
- param[1]=0x00;
- }
- param_len=2;
- }
- break;
- case VT_ENUM:
- case VT_ONOFF: // 1 = On
- case VT_CLOSEDOPEN: // 1 = geschlossen
- case VT_YESNO: // 1 = Ja
- case VT_WEEKDAY: // (1=Mo..7=So)
- {
- uint8_t t=atoi(val);
- param[0]=0x01;
- param[1]=t;
- param_len=2;
- }
- break;
- case VT_FP02: // (e.g. Kennlinie Steilheit)
- {
- uint16_t t=atof(val)*50.0;
- param[0]=0x01;
- param[1]=(t >> 8);
- param[2]= t & 0xff;
- param_len=3;
- }
- break;
- case VT_PRESSURE:
- {
- uint8_t t=atof(val)*10.0;
- param[0]=0x01;
- param[1]= t;
- param_len=2;
- }
- break;
- case VT_UINT: // (Brennerstarts Intervall/Brennerstarts seit Wartung)
- {
- if(val[0]!='\0'){
- uint16_t t=atoi(val);
- param[0]=0x06; //enable
- param[1]=(t >> 8);
- param[2]= t & 0xff;
- }else{
- param[0]=0x05; // disable
- param[1]=0x00;
- param[2]=0x00;
- }
- param_len=3;
- }
- break;
- case VT_MINUTES: // (HK1 - Einschaltoptimierung)
- {
- uint32_t t=atoi(val)*60;
- param[0]=0x01;
- param[1]=(t >> 24) & 0xff;
- param[2]=(t >> 16) & 0xff;
- param[3]=(t >> 8) & 0xff;
- param[4]= t & 0xff;
- param_len=5;
- }
- break;
- case VT_HOURS_WORD: // (Brennerstunden Intervall - nur durch 100 teilbare Werte)
- case VT_MINUTES_WORD: // (Legionellenfunktion Verweildauer)
- {
- if(val[0]!='\0'){
- uint16_t t=atoi(val);
- param[0]=0x06; //enable
- param[1]=(t >> 8) & 0xff;
- param[2]= t & 0xff;
- }else{
- param[0]=0x05; // disable
- param[1]=0x00;
- param[2]=0x00;
- }
- param_len=3;
- }
- break;
- case VT_MONTHS: //(Wartungsintervall)
- case VT_MINUTES_SHORT: // ( Fehler - Alarm)
- {
- if(val[0]!='\0'){
- uint8_t t=atoi(val);
- param[0]=0x06; //enable
- param[1]= t;
- }else{
- param[0]=0x05; // disable
- param[1]=0x00;
- }
- param_len=2;
- }
- break;
- case VT_DAYS: // (Legionellenfkt. Periodisch)
- case VT_HOURS_SHORT: // (Zeitkonstante Gebäude)
- {
- uint8_t t=atoi(val);
- param[0]=0x01; //enable
- param[1]= t;
- param_len=2;
- }
- break;
- case VT_HOUR_MINUTES: //TODO test it
- {
- if(val[0]!='\0'){
- uint8_t h=atoi(val);
- uint8_t m=0;
- while(*val!='\0' && *val!=':') val++;
- if(*val==':'){
- val++;
- m=atoi(val);
- }
- param[0]=0x06; //enable
- param[1]= h;
- param[2]= m;
- }else{
- param[0]=0x05; // disable
- param[1]=0x00;
- param[2]=0x00;
- }
- param_len=3;
- }
- break;
- case VT_DWORD:
- {
- if(val[0]!='\0'){
- uint32_t t=atoi(val);
- param[0]=0x06; //enable
- param[1]=(t >> 24) & 0xff;
- param[2]=(t >> 16) & 0xff;
- param[3]=(t >> 8) & 0xff;
- param[4]= t & 0xff;
- }else{
- param[0]=0x05; // disable
- param[1]=0x00;
- param[2]=0x00;
- param[3]=0x00;
- param[4]=0x00;
- }
- param_len=5;
- }
- break;
- case VT_BYTE: // TODO test it (LPB Geräteadresse / Segmentadresse)
- {
- uint8_t t=atoi(val);
- param[0]=0x01;
- param[1]=t;
- param_len=2;
- }
- break;
- case VT_STRING: // (Telefon Kundendienst)
- {
- strncpy((char *)param,val,MAX_PARAM_LEN);
- param[MAX_PARAM_LEN-1]='\0';
- param_len=strlen((char *)param)+1;
- }
- break;
- case VT_DATETIME: // TODO do we have to send INF or SET command?
- {
- //S0=dd.mm.yyyy_mm:hh:ss
- // date and time are transmitted as INF message by the display unit
- // DISP->ALL INF 0 Uhrzeit und Datum - Datum/Zeit: 30.01.2015 23:17:00
- // DC 8A 7F 14 02 05 00 00 6C 00 73 01 1E 05 17 11 00 00 A1 AB
- int d,m,y,min,hour,sec;
- if(6!=sscanf(val,"%d.%d.%d_%d:%d:%d",&d,&m,&y,&hour,&min,&sec))
- return 0;
-
- Serial.print("date time: ");
- Serial.print(d);
- Serial.print(".");
- Serial.print(m);
- Serial.print(".");
- Serial.print(y);
- Serial.print(" ");
- Serial.print(hour);
- Serial.print(":");
- Serial.print(min);
- Serial.print(":");
- Serial.println(sec);
-
- //outBufLen+=sprintf(outBuf+outBufLen,"%02d.%02d.%d %02d:%02d:%02d",msg[12],msg[11],msg[10]+1900,msg[14],msg[15],msg[16]);
- param[0]=0x01; //???
- param[1]=y-1900;
- param[2]=m;
- param[3]=d;
- param[4]=dayofweek(d,m,y);
- param[6]=hour;
- param[7]=min;
- param[8]=sec;
- param_len=9;
- }
- break;
- case VT_TIMEPROG: // TODO test it
- {
- //S502=05:00-22:00|xx:xx-xx:xx|xx:xx-xx:xx
- //DISP->HEIZ SET 502 Zeitprogramm Heizkreis 1 - Mi: 1. 05:00 - 22:00 2. --:-- - --:-- 3. --:-- - --:--
- //DC 8A 00 17 03 3D 05 0A 8E 05 00 16 00 80 00 00 00 80 00 00 00 08 98
- int h1s=0x80,m1s=0x00,h2s=0x80,m2s=0x00,h3s=0x80,m3s=0x00;
- int h1e=0x80,m1e=0x00,h2e=0x80,m2e=0x00,h3e=0x80,m3e=0x00;
- int ret;
- ret=sscanf(val,"%d:%d-%d:%d|%d:%d-%d:%d|%d:%d-%d:%d",&h1s,&m1s,&h1e,&m1e,&h2s,&m2s,&h2e,&m2e,&h3s,&m3s,&h3e,&m3e);
- // we need at least the first period
- if(ret<4)
- return 0;
- param[0]=h1s;
- param[1]=m1s;
- param[2]=h1e;
- param[3]=m1e;
-
- param[4]=h2s;
- param[5]=m2s;
- param[6]=h2e;
- param[7]=m2e;
-
- param[8]=h3s;
- param[9]=m3s;
- param[10]=h3e;
- param[11]=m3e;
- param_len=12;
- }
- break;
- case VT_VACATIONPROG:
- //DISP->HEIZ SET 3D0509C6 06 00 02 0A 00 00 00 00 17
- //outBufLen+=sprintf(outBuf+outBufLen,"%02d.%02d",msg[12],msg[11]);
- param[1]=0;
- param[2]=0;
- param[3]=0;
- param[4]=0;
- param[5]=0;
- param[6]=0;
- param[7]=0;
- param[8]=0x17; //?
- param_len=9;
- if(val[0]!='\0'){
- int d,m;
- if(2!=sscanf(val,"%d.%d.",&d,&m))
- return 0;
- param[0]=0x06;
- param[2]=m;
- param[3]=d;
- }else{
- param[0]=0x05;
- }
- break;
- case VT_SUMMERPERIOD: // TODO do we have to send INF or SET command?
- {
- // Sommerzeit scheint im DISP gehandelt zu werden
- // Bei Anzeige werden keine Werte abgefragt. Bei Änderung wird ein INF geschickt.
- // Sommerzeit Beginn 25.3. DISP->ALL INF 0500009E 00 FF 03 19 FF FF FF FF 16
- // Sommerzeit Ende 25.11. DISP->ALL INF 0500009D 00 FF 0B 19 FF FF FF FF 16
- int d,m;
- if(2!=sscanf(val,"%d.%d",&d,&m))
- return 0;
- param[0]=0;
- param[1]=0xff;
- param[2]=m;
- param[3]=d;
- param[4]=0xff;
- param[5]=0xff;
- param[6]=0xff;
- param[7]=0xff;
- param[8]=0x17; //?
- param_len=9;
- }
- break;
- case VT_HOURS: // (read only)
- case VT_VOLTAGE: // read only (Ein-/Ausgangstest)
- case VT_LPBADDR: // read only (LPB-System - Aussentemperaturlieferant)
- case VT_PRESSURE_WORD: // read only (Diagnose Verbraucher)
- case VT_FP1: // read only (SW-Version)
- case VT_ERRORCODE: // read only
- case VT_UNKNOWN:
- default:
- return 0;
- break;
- }
- Serial.print("setting line: ");
- Serial.print(line);
- Serial.print(" val: ");
- SerialPrintRAW(param,param_len);
- Serial.println();
-
- uint8_t t=setcmd?TYPE_SET:TYPE_INF;
-
- if(!bus.Send(t, c, msg, tx_msg, param, param_len, setcmd)){
- Serial.println("set failed");
- return 0;
- }
-
- if(verbose) printTelegram(tx_msg);
-
- // no answer fpr TYPE_INF
- if(t!=TYPE_SET) return 1;
-
- printTelegram(msg);
- if(msg[4]!=TYPE_ACK){
- Serial.println("set failed NACK");
- return 0;
- }
-
- return 1;
-}
-
-void query(uint16_t line_start, uint16_t line_end){
- byte msg[33];
- byte tx_msg[33];
- uint32_t c;
- uint16_t line;
- int i=0;
- int idx=0;
- int retry;
-
- client.println("");
- for(line=line_start;line<=line_end;line++){
- outBufclear();
- i=findLine(line,idx,&c);
-
- if(i>=0){
- idx=i;
- //Serial.println("found");
- if(c!=CMD_UNKNOWN){
- retry=QUERY_RETRIES;
- while(retry){
- if(bus.Send(TYPE_QUR, c, msg, tx_msg)){
-
- if(verbose) printTelegram(tx_msg);
-
- printTelegram(msg);
- break;
- }else{
- Serial.println("query failed");
- retry--;
- }
- }
- if(retry==0)
- outBufLen+=sprintf(outBuf+outBufLen,"%d query failed",line);
- }else{
- //Serial.println("unknown command");
- //if(line_start==line_end) outBufLen+=sprintf(outBuf+outBufLen,"%d unknown command",line);
- }
- }else{
- //Serial.println("line not found");
- //if(line_start==line_end) outBufLen+=sprintf(outBuf+outBufLen,"%d line not found",line);
- }
- if(outBufLen>0){
- client.println(outBuf);
- client.println(" ");
- }
- }
- client.println("
");
-}
-
-void loop() {
- byte msg[33];
- byte tx_msg[33];
- char c;
- const byte MaxArrayElement=252;
- char cLineBuffer[MaxArrayElement];
- byte bPlaceInBuffer;
-
- // listen for incoming messages
- if(verbose){
- if (bus.GetMessage(msg)) printTelegram(msg);
- }
-
- // listen for incoming clients
- client = server.available();
- if (client) {
- bPlaceInBuffer=0;
- while (client.connected()) {
- if (client.available()) {
- c = client.read();
- Serial.print(c);
-
- if ((c!='\n') && (c!='\r') && (bPlaceInBuffer");
- }
- webPrintFooter();
- break;
- }
- // list enum values
- if(p[1]=='E'){
- webPrintHeader();
- uint16_t line = atoi(&p[2]);
- int i=findLine(line,0,NULL);
- if(i>=0){
- // check type
- if(pgm_read_byte(&cmdtbl[i].type)==VT_ENUM){
- int enumstr_len=pgm_read_word(&cmdtbl[i].enumstr_len);
- memcpy_P(buffer, (char*)pgm_read_word(&(cmdtbl[i].enumstr)),enumstr_len);
- buffer[enumstr_len]=0;
-
- uint16_t val;
- uint16_t c=0;
- while(c");
-
- while(buffer[c]!=0) c++;
- c++;
- }
- }else{
- client.println(F("ERROR: wrong type"));
- }
- }else{
- client.println(F("ERROR: line not found"));
- }
- webPrintFooter();
- break;
- }
- // query reset value
- if(p[1]=='R'){
- uint32_t c;
- webPrintHeader();
- uint16_t line = atoi(&p[2]);
- int i=findLine(line,0,&c);
- if(i<0){
- client.println(F("ERROR: line not found"));
- }else{
- if(!bus.Send(TYPE_QRV, c, msg, tx_msg)){
- Serial.println("set failed");
- client.println(F("ERROR: set failed"));
- }else{
-
- if(verbose) printTelegram(tx_msg);
-
- printTelegram(msg);
- if(outBufLen>0){
- client.println(outBuf);
- client.println(" ");
- }
- }
- }
- webPrintFooter();
- break;
- }
- // print queries
- webPrintHeader();
- char* range;
- char* line_start;
- char* line_end;
- int start=-1;
- int end=-1;
- range = strtok(p,"/");
- while(range!=0){
- if(range[0]=='K'){
- uint8_t cat,search_cat;
- uint16_t line;
- int i;
- uint32_t c;
- i=0;
- start=-1;
- end=-1;
- search_cat=atoi(&range[1]);
- c=pgm_read_dword(&cmdtbl[i].cmd);
- while(c!=CMD_END){
- cat=pgm_read_byte(&cmdtbl[i].category);
- if(cat==search_cat){
- if(start<0){
- line=pgm_read_word(&cmdtbl[i].line);
- start=line;
- }
- }else{
- if(start>=0){
- line=pgm_read_word(&cmdtbl[i-1].line);
- end=line;
- break;
- }
- }
- i++;
- c=pgm_read_dword(&cmdtbl[i].cmd);
- }
- }else{
- // split range
- line_start=range;
- line_end=strchr(range,'-');
- if(line_end==NULL){
- line_end=line_start;
- }else{
- *line_end='\0';
- line_end++;
- }
- start=atoi(line_start);
- end=atoi(line_end);
- }
- query(start,end);
-
- range = strtok(NULL,"/");
- }
- webPrintFooter();
- break;
- }
- }
- // give the web browser time to receive the data
- delay(1);
- // close the connection:
- client.stop();
- }
-}
-
-int freeRam () {
- extern int __heap_start, *__brkval;
- int v;
- return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
-}
-
-void SerialPrintHex(byte val) {
- if (val < 16) Serial.print("0");
- Serial.print(val, HEX);
-}
-
-void SerialPrintHex32(uint32_t val) {
- if (val <= 0x0fffffff) Serial.print("0");
- if (val <= 0x00ffffff) Serial.print("0");
- if (val <= 0x000fffff) Serial.print("0");
- if (val <= 0x0000ffff) Serial.print("0");
- if (val <= 0x00000fff) Serial.print("0");
- if (val <= 0x000000ff) Serial.print("0");
- if (val <= 0x0000000f) Serial.print("0");
- Serial.print(val, HEX);
-}
-
-
-void SerialPrintData(byte* msg){
- int data_len=msg[3]-11;
- for(int i=0;i>4,(msg[10] & 0x0f)+1);
- }else{
- outBufLen+=sprintf(outBuf+outBufLen,"---");
- }
- Serial.print(p);
- }else{
- Serial.print(F(" VT_LPBADDR len !=2: "));
- SerialPrintData(msg);
- outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
- }
-}
-
-void printTelegram(byte* msg) {
- char gradC[]="°C";
- char perc[]="%";
-
- outBufclear();
-/*
-#if !DEBUG
- // suppress DE telegrams
- if(msg[0]==0xDE) return;
-
- // suppress QUERY telegrams
- if(msg[4]==TYPE_QUR) return;
-#endif
-*/
- // source
- SerialPrintAddr(msg[1]); // source
- Serial.print("->");
- SerialPrintAddr(msg[2]); // destination
- Serial.print(" ");
- // msg[3] contains the message length
- SerialPrintType(msg[4]); // type
- Serial.print(" ");
-
- uint32_t cmd;
- if(msg[4]==TYPE_QUR || msg[4]==TYPE_SET){ //QUERY and SET: byte 5 and 6 are in reversed order
- cmd=(uint32_t)msg[6]<<24 | (uint32_t)msg[5]<<16 | (uint32_t)msg[7] << 8 | (uint32_t)msg[8];
- }else{
- cmd=(uint32_t)msg[5]<<24 | (uint32_t)msg[6]<<16 | (uint32_t)msg[7] << 8 | (uint32_t)msg[8];
- }
-
- // search for the command in cmdtbl
- int i=0;
- int known=0;
- uint32_t c;
- c=pgm_read_dword(&cmdtbl[i].cmd);
- while(c!=CMD_END){
- if(c == cmd){
- known=1;
- break;
- }
- i++;
- c=pgm_read_dword(&cmdtbl[i].cmd);
- }
- if(!known){
- Serial.print(" ");
- SerialPrintHex32(cmd);
- Serial.print(" ");
- }else{
- uint16_t line=pgm_read_word(&cmdtbl[i].line);
- printLineNumber(line);
- Serial.print(" ");
- outBufLen+=sprintf(outBuf+outBufLen," ");
-
- // print category
- int cat=pgm_read_byte(&cmdtbl[i].category);
- int len=sizeof(ENUM_CAT);
- memcpy_P(buffer, &ENUM_CAT,len);
- buffer[len]=0;
- printENUM(buffer,len,cat,0);
- Serial.print(" - ");
- outBufLen+=sprintf(outBuf+outBufLen," - ");
-
- // print menue text
- strcpy_P(buffer, (char*)pgm_read_word(&(cmdtbl[i].desc)));
- char *p=outBuf+outBufLen;
- outBufLen+=sprintf(outBuf+outBufLen," %s: ",buffer);
- Serial.print(p);
- }
- // decode parameter
- int data_len=msg[3]-11;
- if(data_len < 0){
- Serial.print(F("len ERROR "));
- Serial.print(msg[3]);
- }else{
- if(data_len > 0){
- if(known){
- double dval;
- long lval;
-
- switch(pgm_read_byte(&cmdtbl[i].type)){
- case VT_DATETIME: // special
- printDateTime(msg,data_len);
- break;
- case VT_SUMMERPERIOD:
- case VT_VACATIONPROG:
- printDate(msg,data_len);
- break;
- case VT_TIMEPROG:
- prinTimeProg(msg,data_len);
- break;
- case VT_MINUTES_SHORT: //u8 min
- printBYTE(msg,data_len,"min");
- break;
- case VT_MINUTES_WORD: //u16 min
- printWORD(msg,data_len,"min");
- break;
- case VT_MINUTES: // u32 min
- printDWORD(msg,data_len,60,"min");
- break;
- case VT_HOURS_SHORT: // u8 h
- printBYTE(msg,data_len,"h");
- break;
- case VT_HOURS_WORD: // u16 h
- printWORD(msg,data_len,"h");
- break;
- case VT_HOURS: // u32 h
- printDWORD(msg,data_len,3600,"h");
- break;
- case VT_HOUR_MINUTES: // u8:u8
- printTime(msg,data_len);
- break;
- case VT_TEMP: // s16 / 64.0 - Wert als Temperatur interpretiert (RAW / 64)
- printFIXPOINT(msg,data_len,64.0,1,gradC);
- break;
- case VT_PRESSURE_WORD: // u16 / 10.0 bar
- printFIXPOINT(msg,data_len,10.0,1,"bar");
- break;
- case VT_PRESSURE: // u8 / 10.0 bar
- printFIXPOINT_BYTE(msg,data_len,10.0,1,"bar");
- break;
- case VT_FP02: // u16 / 50.0 - Wert als Festkommazahl mit 2/100 Schritten interpretiert (RAW / 50)
- printFIXPOINT(msg,data_len,50.0,2,NULL);
- break;
- case VT_FP1: // s16 / 10.0 Wert als Festkommazahl mit 1/10 Schritten interpretiert (RAW / 10)
- printFIXPOINT(msg,data_len,10.0,1,NULL);
- break;
- case VT_BYTE: // u8
- printBYTE(msg,data_len,NULL);
- break;
- case VT_ONOFF:
- printCHOICE(msg,data_len,"Aus","Ein");
- break;
- case VT_YESNO:
- printCHOICE(msg,data_len,"Nein","Ja");
- break;
- case VT_CLOSEDOPEN:
- printCHOICE(msg,data_len,"Offen","Geschlossen");
- break;
- case VT_DAYS: // u8 Tage
- printBYTE(msg,data_len,"Tage");
- break;
- case VT_MONTHS: // u8 Monate
- printBYTE(msg,data_len,"Monate");
- break;
- case VT_WEEKDAY: // enum
- if(data_len == 2){
- if(msg[9]==0){
- int len=sizeof(ENUM_WEEKDAY);
- memcpy_P(buffer, &ENUM_WEEKDAY,len);
- buffer[len]=0;
- printENUM(buffer,len,msg[10],0);
- }else{
- Serial.print(F("---"));
- outBufLen+=sprintf(outBuf+outBufLen,"---");
- }
- }else{
- Serial.print(F(" VT_WEEKDAY !=2: "));
- SerialPrintData(msg);
- outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
- }
- break;
- case VT_ENUM: // enum
- if(data_len == 2){
- if(msg[9]==0){
- if(pgm_read_word(&cmdtbl[i].enumstr)!=0){
- int len=pgm_read_word(&cmdtbl[i].enumstr_len);
- memcpy_P(buffer, (char*)pgm_read_word(&(cmdtbl[i].enumstr)),len);
- buffer[len]=0;
-
- printENUM(buffer,len,msg[10],1);
- }else{
- Serial.print(F("no enum str "));
- SerialPrintData(msg);
- outBufLen+=sprintf(outBuf+outBufLen,"no enum str");
- }
- }else{
- Serial.print(F("---"));
- outBufLen+=sprintf(outBuf+outBufLen,"---");
- }
- }else{
- Serial.print(F(" VT_ENUM len !=2: "));
- SerialPrintData(msg);
- outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
- }
- break;
- case VT_PERCENT: // u8 %
- printBYTE(msg,data_len,perc);
- break;
- case VT_DWORD: // s32
- printDWORD(msg,data_len,1,NULL);
- break;
- case VT_STRING: // string
- if(data_len > 0){
- if(msg[9]!=0){
- msg[9 + data_len]='\0'; // write terminating zero
- Serial.print((char*)&msg[9]);
- outBufLen+=sprintf(outBuf+outBufLen,"%s",(char*)&msg[9]);
- } else {
- Serial.print("-");
- outBufLen+=sprintf(outBuf+outBufLen,"-");
- }
- }else{
- Serial.print(F(" VT_STRING len ==0: "));
- SerialPrintData(msg);
- outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
- }
- break;
- case VT_ERRORCODE: // s16
- if(data_len == 3){
- if(msg[9]==0){
- long lval;
- lval=(long(msg[10])<<8)+long(msg[11]);
- int len=sizeof(ENUM_ERROR);
- memcpy_P(buffer, &ENUM_ERROR,len);
- buffer[len]=0;
- printENUM(buffer,len,lval,1);
- } else {
- Serial.print("---");
- outBufLen+=sprintf(outBuf+outBufLen,"---");
- }
- }else{
- Serial.print(F(" VT_ERRORCODE len ==0: "));
- SerialPrintData(msg);
- outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
- }
- break;
- case VT_UINT: // s16
- printWORD(msg,data_len,NULL);
- break;
- case VT_VOLTAGE: // u16 - 0.0 -> 00 00 (decoding unklar, da nur 0V gesehen)
- //printFIXPOINT_BYTE(msg,data_len,10.0,1,"Volt");
- printBYTE(msg,data_len,"Volt");
- break;
- case VT_LPBADDR: //decoding unklar 00 f0 -> 15.01
- printLPBAddr(msg,data_len);
- break;
- case VT_UNKNOWN:
- default:
- SerialPrintData(msg);
- outBufLen+=sprintf(outBuf+outBufLen,"unknown type");
- break;
- }
- }else{
- SerialPrintData(msg);
- //Serial.println();
- // SerialPrintRAW(msg,msg[3]);
- outBufLen+=sprintf(outBuf+outBufLen,"unknown command");
- }
- }
- }
- Serial.println();
- if(verbose){
- SerialPrintRAW(msg,msg[3]);
- Serial.println();
- }
-}
-
-void webPrintHeader(void){
- client.println(F("HTTP/1.1 200 OK"));
- client.println(F("Content-Type: text/html"));
- client.println();
- client.println(F(""));
- client.println(F(""));
- client.println(F(""));
- client.println(F(" "));
- client.println(F("BSB LAN-SERVER "));
- client.println(F(" "));
- client.println(F(""));
- client.println(F(""));
-}
-
-void webPrintFooter(void){
- client.println(F(""));
- client.println(F(""));
- client.println();
-
-}
-
-void webPrintSite() {
- webPrintHeader();
-
- client.println(F(""));
- client.print(F("BSB Web"));
- client.print(F(" ----------
"));
- client.print(F(" options:"));
- client.print(F("
"));
- client.print(F(" /K list available categories "));
- client.print(F(" /Kx query all values in category x "));
- client.print(F(" /x query value for line x "));
- client.print(F(" /x-y query all values from line x up to line y "));
- client.print(F(" /Sx=v set value v for line x and query the new value afterwards (empty string after = disables the value "));
- client.print(F(" /Ix=v send INF message for command in line x with value v "));
- client.print(F(" /Ex list enum values for line x "));
- client.print(F(" /Rx query reset value for line x "));
- client.print(F(" /Vn set verbosity level for serial output "));
- client.print(F("
"));
- client.print(F(" multiple queries are possible, e.g. /K0/710/8000-8999
"));
- webPrintFooter();
-}
From b3efba9d02ab47b393829ab3d84745a0a7629c74 Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:21:33 +0100
Subject: [PATCH 07/10] Delete README
---
BSB_lan/README | 129 -------------------------------------------------
1 file changed, 129 deletions(-)
delete mode 100644 BSB_lan/README
diff --git a/BSB_lan/README b/BSB_lan/README
deleted file mode 100644
index 189061dc..00000000
--- a/BSB_lan/README
+++ /dev/null
@@ -1,129 +0,0 @@
-BSB Boiler-System-Bus LAN Interface
-
-ATTENION:
- There is no waranty that this system will not damage your heating system!
-
-Author: Gero Schumacher (gero.schumacher@gmail.com)
- Based on the code and work from many other developers (see Info section below). Many thanks!
-
-License:
- You are free to use this software on your own risk. Please take care of the licenses of the used libraries and software.
-
-Info:
- http://www.mikrocontroller.net/topic/218643
- http://blog.dest-unreach.be/2012/12/14/reverse-engineering-the-elco-heating-protocol
- http://forum.fhem.de/index.php/topic,29762.0.html
- systemhandbuch_isr.pdf
-
-Host System:
- The software is designed to run on an arduino mega2560 board with ethernet shield.
- Because there are different pin assignments for different ethernet shields, you
- may have to connect the BSB adapter to different pins and to change the pin assigment
- in the software.
- The software is tested with the following components:
- - SainSmart MEGA2560 R3 Development Board
- - SainSmart Ethernet Schild Für Arduino UNO MEGA Duemilanove*Neu Version W5100*
- - BSB-Interface (see BSB_adapter.pdf)
- For this configuration pin A14 (68) ist used as RX and pin A15 (69) is used as TX:
-
- BSB bus(68,69);
-
-Target System:
- Tested with: Elco Straton oil fired condensing boiler.
- Communication should be possible with all systems that support the BSB interface.
- Missing command ids have to be added in the cmdtbl.
- Until now it is not clear to me, what the differences between the LPB and BSB protocols are. The physical specifications
- are the same. But may be they differe on the protocol level. Until now I have only connected the system to the BSB.
-
-Software:
- The software is intended to be build with the command line tool ino. If you want to use the arduino sdk you may have to change the
- folder structure.
-
-BEFORE BUILDING the software you have to adapt some parameters in BSB_lan.ino:
- - MAC address of your ethernet shield. It can be normally found on a label at the shield:
- byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEA };
- - Ethernet address
- IPAddress ip(192,168,178,88);
- - Ethernet port
- EthernetServer server(80);
- - Pin assigment of the BSB adapter
- BSB bus(68,69);
- - (optional) Activate the usage of the passkey functionality (see below)
- #define USE_PASSKEY 1
-
-Interface:
- A simple syntax description is content of the website displayed when the server is accessed by its simple URL withou any parameters.
- e.g. http://
- To protect the system for unwanted access you can enable the passkey feature (very simple and not really secure!).
- If the passkey feature is enabled (see below), the URL has to contain the defined passkey as first element
- e.g. http://// - to see the help
- The urls in the below examples have to be exented, if the passeky feature is turned on.
- All parameters are accessed by line numbers. A nearly complete description can be found in systemhandbuch_isr.pdf.
- Some lines are 'virtual', i.e. they were added to simplify the access to complex settings like time programms.
- The parameters are grouped in categories according to the submenu items when accessing your boiler system from the display.
-
- List all categories:
- http:///K
- This command does not communicate with the boiler system. It is a software internal feature.
-
-
- List all enum values for parameter x
- http:///E
- This command does not communicate with the boiler system. It is a software internal feature.
- The command is only available for parameters of the type VT_ENUM.
-
- Query all values from category x:
- http:///K
-
- Query value for line x
- http:///
-
- Query value for a range of lines (from line x up to line y)
- http:///-
-
- Multiple queries can be concatenated
- e.g. http:///K11/8000/8003/8005/8300/8301/8730-8732/8820
-
- Query for the reset value of parameter x
- http:///R
- In the display there is a reset option for some parameters. A reset is performed by asking the boiler for the reset value
- and setting it afterwards.
-
- Set value v for parameter x
- http:///S=
- Attention: This feature is not extensively tested. So be careful what are you doing and do it on your own risk.
- The format of the value depends on its type. Some parameters can be disabled. To set a parameter to 'disable', just send an empty value
- http:///S=
- The description of the value formats will be added here. Until then have a look at the source code (function set).
-
- Send INF message for parameter x with value v
- http:///I=
- Some values cannot be set directly. The heating system is informed by a TPYE_INF message. E.g. the room temperature
- e.g. http:///I10000=19.5 // room temperature is 19.5 degree.
-
- Set verbosity level n
- http:///V
- The default verbosity level is 0. When setting it to 1 the bus is monitored and all data is additionally printed in raw hex format.
- The verbose output only affects the serial console of the mega2560. The html output is kept unchanged.
-
-Open issues
- - Add more command ids to the table.
- Only the known command ids from the threads listed above and the testet boiler system (ELCO) are content of the table.
- Any user with a different boiler system can set the verbosity to 1 and decode the missing command ids simply by accessing the sytem via
- the display.
- Cause we want to provide a general working system for all boiler configurations working with BSB. Any help and feedback is appreciated!
-
- - Test and complete the set funcionality
- With the current implementation a lot of values can be already set. But there is still some testing needed and some parameter types have to be added.
-
- - Introduce valid ranges for parameters
- To make the access safer when setting values for parameters, the valid ranges should be added to the command table
-
- - Add read-only flag for parameters
- To make the access safer add a flag for parameters, that can be read only.
-
- - Test and maybe extend the system to work with LPB instead of BSB.
-
- - Decode DE telegrams. Maybe they contain some status information and we can use them without querying.
-
- - Add support of error messages send by the boiler system
From 103de17830944ebb53f3fe81463042b28a0f2f5e Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:21:46 +0100
Subject: [PATCH 08/10] Delete bsb_adapter.pdf
---
BSB_lan/bsb_adapter.pdf | Bin 5384 -> 0 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 BSB_lan/bsb_adapter.pdf
diff --git a/BSB_lan/bsb_adapter.pdf b/BSB_lan/bsb_adapter.pdf
deleted file mode 100644
index 4075054d3c6639508a02766b4e3b9a0dcfa402f8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5384
zcmb_gc|6ql|IdorY4dHREk}GJ&5)VT%$PCEGL9KX&cSpb*)j7mhB-7x&U8ppp*B{R
zvA+)
zD!0C@YrAH5JSE4;bLI6Hdh3l^jDM|uJ2hH9G3mcy+w0cAcr*9BG3$Msrq0|NyVLFJ
zYFAPddGSOr^3CXY?|b$A8mn@imt5%HX7;*O>G;&`T^Xt-@3Qx`&*zneA;%AtdJ>&Z
zTbo$pP(q)9Z8w{vw#|v|ei83g^Kk4Jt2y_h(v#%AiE~4W5^J}oUgKYUGcnY2Ew3V>
z8e8vhrb~J7mm$fo!%qe(M!I50S(7>T2XMs+H+%cehL=pfF7Mp->+`60KT0V0_s{zp
z){AvTBZ1Cd!O_27@2}WK<2r_*O$Jp}^g4BQ^~#zOuD!fp6<1v9oWIAR{lMj>$>WEf
z->s8qXv=AYg@;S%!VTe_^tYh|@oPuu}rW>WY5rDhtexhYOp5(+dJhRQf{VX1rK
zBH~^QHN^aw=ekn_jdc5bTxhp8>D5-Z7)>O##m*&7((bt0yO%C~blSd*XF2DM&3D0vJsFxzlZ2EQO%)>*O1n+k
z)iGPU8e+B5LPL6e)N|jE?=j=wSuW2(4Q;X@#iI*$*f}&wcb_Ga~8{722_#&jEg|&|gOfhNuYkiBCpRD(+cv}#U_OO|3fEM)LgMzt*!_F5UX>+b%PVOlD#^wS!
z?$WxAN2r+2i(JB1kQa?UpIkAQv!dC%z484elWZlWX3X8-E0gDKhAm{Mq1BT7oqb$Z
zTLWw#UO4`BcsEr!@?yBQvX6_Y%FumPN&J;p1v%s`@vCkUI&0^utn03+bp2to&aOLK
zzm~Cy$(TXo&|BM!4tqX!@eeGQCC3$c-AvlsTUu-5)`Fa)Dbghi&(Cp1d2%yl`ExEB
z4`&%8HUyzT*U8QM0=3}%-WTf47Hro&cYY6bx9+K5zPOW?Ak4%(TF)5JE=(Q9W|wLZ
zY#C2F@2UPPbl&y%Hke$|Q*DySvo(5wKCbIUjlW)7^Zd7VI#suv=<_v4H9a&o{U&se
zJ4bG_6(Vji$|0-wW$*EBkBanF%Ts<)+tHHv#i5*`pV3wQ_ctrUF}JrjEY#&`ysp?7
zpIKBk+RrNZYWJXeW}jC*J<@KGHEU1QlV{BRtiwNDKz^eRZEANEa;KGs+N^Et8#PmT
z=7)YF(%L$z-1*>b-T3880by5}t2ZW&pPjd{{|hTCQhj6j*?&e6Q-z
zwbZ1bDy94P-D2WyU|+ltSHfEQIv1Vtl>FRMpP^`$lUQY=
zsxX&d_Y9ZNtXAyT(P_WdbB9(uKQlYO^YfvTxtOUv{S_XA8LmNjxhF0xbKtKji4)d_
zX5w-Tg!284sr~T0*Q%YHf(nH0hX<32C~qQniCLp-o1L;73YQ$comu@5AHVx<^XNVm
zoq{^sy$2spIfZ7##9E)e-ta?7VS2Jl-c|38-XC>e_B5$>=B&*8*|BN9`&h04)JSMP
zwEg_5B}rZsTlE*Z=*7uxsT=mYsQAZP_ShRNuhRTFm?r9!5!ZXwFD*^HD(a8F
z>7Zx$xcF$ov!18@muuPUjruAVRFKl@s`^zk3~-fScgJw_$_@D3%FE8njxUSKzvJvA
z{ORhuR_EOrV)ec1?|w_$d3WfXuw+SAOR6vPhm9ty3cZRR#<;ZYG>(ruT(u*VS)oJ_
zrpMNf)^gG{7~6|>XIsG56US3F4`Td|M&nN1c@o_o6Rz#apA4+E@<_abv|m{lubxR{
zIrp*5Z?&J?L%arY;Mc)d;`trwF_m*FYd~2eYy^(X9
zw6B`*=55K;Ek^KX5QQ=EpuTddGq%iz`@>_hy4sO2p8g~W5pGi&ZcV9fc(kfJY*9^#
z-pCxQI_Iqq8@meLJYRQfVsm7~Ci(cFWo>(O)2X)|{E>4HbSmxF*7u&?;?+&ke%0D}
zaC~H>b$!=lZ|2nGaNZpqt5UIGRlh}6K2taN@q+Y1CBJLB-&NiI{^*qJ;8)hwq&LVB
z&8sV)FN4zFAd77VjH|JQQGt0w3*TAex~g3dJ>FYs8F4le{aRWyfz6$qY7XxZ47xOM
zFAN{UaMK&_TSr#iFlojntXd)o*igCa<-4@pER)LK`RIa4GG;@pv#!UfFY;HE=%u?GX%DE^->6h0F2ppw$L!88dAVxG&;E|tE&d1Q
zw)Y0#bg3A+uKIKzdC<_2GtgF)6R@Xu{Z|_6vmT4vo#!njSdWvp$ZnqUeks-c(tf8=
zb@QM<+oyl2UirL41J)bE6>EYAaUC4`Z*K=l6c5W}8_!aAkBP;Ofg~
zKa%#Y>$NBeJA1TP+0B@0k4lLfHvZoA`%B4XjXGBgEwU^PF6}xmqVBP)gg!5C_$j$Z
zeExli(7WAnLM8Urj)6vUPFp!`-}l_=zG-s
zsMl6G&S9mg`(LT$AWv5QhSm7=`qj4%K@
zrR-kCXhKBXSriFY3goH4n~Gne84-_~rICI|rL4#>1ZJ{%2<(P%`D{CJ1muSY+hhwe
zWKJUbqhK$w3}95q0uR_Eh)4#RDiAE7BT}(k!a<|}+cG6$jyEFng8}-5U=|V~1A_Ju
zGDq(j*%=83F_0!Gw0ofd+J))h9VnDS3Y0uen)Od%VFon=Wxzpb+CwP>yYRVE$PcCP
z-wWjr0S$76N`}r&E8FgBkpwAOvI$qzQzL3=8=pxzzs?NyYJJ
zU70S04}n2_w6(#_^~1LdfkXgSXY0$-IwFkC2}NX3Aj0E|tk5Hs)o6&%wL-5ayW!o!
z=twZ%DN2HPN4c{&QK1|QF4~%gvb1J{vP7^E>@aN5^hb~sLZlokeY%&cgT8_xf*K(V
z6N3Ce5ki4TN{z5WPm55&T0w@<&@_uI)C#@9jS0!bVnHZh1`%-_D+xW`&l^
z`CKYO=CIAk2nEZ*vq@M20SUt5!GjGV1esDy%`6bJAmoF&uut6lgFUbT44Q&CfE5+A
z9#_smBvxogrYqzaESAb<>_ZkfJQ)qo9{->63gqVRqW}^*8wN|jLv;gn8x+X^lY>UY
z6Tn%CSR$T9Bv4H)sAS@5Jb{YGTf%?h1jz@Ybnp=jK8pVX(N8!(5fw{Vpd@HKdxkB<
zlX8L)p`s2zZ2(8`cp`8Hq?pGx#RuW>fipf#E1H$FgcVu)Bwqh?1leJ3ZvTG_g+fJ<
zEBL4kF-I;0Lvjt{zbT=AI_q4{M~B1Y62Wx8a5*p{Koq`7LE;I(V=jjpB$f!-pxW7C
zVFEDA6ionwDn-*Q!KREa6CkwdZnPE1W)=dzqPwU9wuonij=*w}Ahui}L(|}3u@HfI
zh(ru4IvEZ@5E1y31h(_G3;3|+iaBtgG%x^6@-Xmk3J&CYCV2urZDuiT2L9dj-=ub$
z1cn31GW>D$&`{7n^!#&*exJAC0JY(d`-L1Tq0nr2Tsie+BZA
V%GeUwbTUX56avc7(B8uV^?$FKGgtrs
From f467a2e2c355e9080499fe837bfebc59ea52bc99 Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:21:56 +0100
Subject: [PATCH 09/10] Delete ino.ini
---
BSB_lan/ino.ini | 11 -----------
1 file changed, 11 deletions(-)
delete mode 100644 BSB_lan/ino.ini
diff --git a/BSB_lan/ino.ini b/BSB_lan/ino.ini
deleted file mode 100644
index c69cf89f..00000000
--- a/BSB_lan/ino.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-
-[build]
-board-model = mega2560
-
-[upload]
-board-model = mega2560
-serial-port = /dev/ttyACM0
-
-[serial]
-serial-port = /dev/ttyACM0
-baud-rate = 115200
From 9cfb34163ace349ec31565e91c8f68018ed795cb Mon Sep 17 00:00:00 2001
From: fredlcore
Date: Tue, 20 Dec 2016 00:22:49 +0100
Subject: [PATCH 10/10] Add files via upload
---
BSB_lan/BSB_lan/BSB_lan.ino | 4114 +++++++++++++++++++
BSB_lan/BSB_lan/README | 151 +
BSB_lan/BSB_lan/bsb_adapter.pdf | Bin 0 -> 5384 bytes
BSB_lan/libraries/BSB/BSBSoftwareSerial.cpp | 512 +++
BSB_lan/libraries/BSB/BSBSoftwareSerial.h | 119 +
BSB_lan/libraries/BSB/bsb.cpp | 228 +
BSB_lan/libraries/BSB/bsb.h | 54 +
BSB_lan/libraries/BSB/keywords.txt | 27 +
8 files changed, 5205 insertions(+)
create mode 100644 BSB_lan/BSB_lan/BSB_lan.ino
create mode 100644 BSB_lan/BSB_lan/README
create mode 100644 BSB_lan/BSB_lan/bsb_adapter.pdf
create mode 100644 BSB_lan/libraries/BSB/BSBSoftwareSerial.cpp
create mode 100644 BSB_lan/libraries/BSB/BSBSoftwareSerial.h
create mode 100644 BSB_lan/libraries/BSB/bsb.cpp
create mode 100644 BSB_lan/libraries/BSB/bsb.h
create mode 100644 BSB_lan/libraries/BSB/keywords.txt
diff --git a/BSB_lan/BSB_lan/BSB_lan.ino b/BSB_lan/BSB_lan/BSB_lan.ino
new file mode 100644
index 00000000..bf4aabca
--- /dev/null
+++ b/BSB_lan/BSB_lan/BSB_lan.ino
@@ -0,0 +1,4114 @@
+/*
+ * BSB Boiler-System-Bus LAN Interface
+ *
+ * ATTENION:
+ * There is no waranty that this system will not damage your heating system!
+ *
+ * Author: Gero Schumacher (gero.schumacher@gmail.com)
+ * (based on the code and work from many other developers. Many thanks!)
+ *
+ * see README file for more information
+ *
+ * Version:
+ * 0.1 - 21.01.2015 - initial version
+ * 0.5 - 02.02.2015
+ * 0.6 - 02.02.2015
+ *
+ * Changelog:
+ * version 0.6
+ * - renamed SoftwareSerial to BSBSoftwareSerial
+ * - changed folder structure to enable simple build with arduino sdk
+ * version 0.5
+ * - bugfixes
+ * - added documentation (README)
+ * - added passkey feature
+ * - added R feature (query reset value)
+ * - added E feature (list enum values)
+ * - added setter for almost all value types
+ * - fixed indentation
+ * - added V feature to set verbosity for serial output
+ * - set baudrate to 115200 for serial output
+ * - redirecting favicon request
+ * - added some images of the BSB adapter
+ *
+ */
+
+#include
+#include "BSBSoftwareSerial.h"
+#include "bsb.h"
+
+#include
+#include
+#include
+#include
+
+// if set to 1, all messages on the bus are printed to the serial interface
+byte verbose = 0;
+
+// if enabled the URL has to contain the defined passkey as first element
+// e.g.
+// http://192.168.178.88/1234/ - to see the help
+// http://192.168.178.88/1234/K - to list all categories
+#define USE_PASSKEY 0
+
+#define PASSKEY "1234"
+
+// defines the number of retries for the qery command
+#define QUERY_RETRIES 3
+
+// Adjust the following settings!
+
+// Enter a MAC address and IP address for your controller below.
+// The IP address will be dependent on your local network:
+byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEA };
+
+// Initialize the Ethernet server library
+// with the IP address and port you want to use
+// (port 80 is default for HTTP):
+IPAddress ip(192,168,178,88);
+EthernetServer server(80);
+EthernetClient client;
+
+// Software Serial needs special pins for RX: 10-13, 50-53, 62(A8)-69(A15)
+// W5100 ethernet shield uses the following pins: 10, 50-53
+BSB bus(68,69);
+
+/****************************************************/
+/* DEFINITIONS and TYPEDEFS */
+/****************************************************/
+
+/* telegram types */
+#define TYPE_INF 0x02
+#define TYPE_SET 0x03
+#define TYPE_ACK 0x04
+#define TYPE_NACK 0x05
+#define TYPE_QUR 0x06
+#define TYPE_ANS 0x07
+#define TYPE_ERR 0x08
+#define TYPE_QRV 0x0F // query reset value
+#define TYPE_ARV 0x10 // anser reset value
+
+/* telegram addresses */
+#define ADDR_HEIZ 0x00
+#define ADDR_RGT1 0x06
+#define ADDR_RGT2 0x07
+#define ADDR_DISP 0x0A
+#define ADDR_ALL 0x7F
+
+/* special command ids */
+#define CMD_UNKNOWN 0x00000000u
+#define CMD_END 0xffffffffu
+
+typedef enum{
+ CAT_DATUMZEIT,
+ CAT_BEDIENEINHEIT,
+ CAT_FUNK,
+ CAT_ZEITPROG_HK1,
+ CAT_ZEITPROG_HK2,
+ CAT_ZEITPROG_HKP,
+ CAT_ZEITPROG_TWW,
+ CAT_ZEITPROG_5,
+ CAT_FERIEN_HK1,
+ CAT_FERIEN_HK2,
+ CAT_FERIEN_HKP,
+ CAT_HK1,
+ CAT_KUEHL1,
+ CAT_HK2,
+ CAT_HKP,
+ CAT_TW,
+ CAT_HXPUMPE,
+ CAT_SCHWIMMBAD,
+ CAT_VORREGLERPUMPE,
+ CAT_KESSEL,
+ CAT_WAERMEPUMPE,
+ CAT_KASKADE,
+ CAT_ZUSATZERZEUGER,
+ CAT_SOLAR,
+ CAT_FESTSTOFFKESSEL,
+ CAT_PUFFERSPEICHER,
+ CAT_TWSPEICHER,
+ CAT_DRUCHLERHITZER,
+ CAT_KONFIG,
+ CAT_LPB,
+ CAT_FEHLER,
+ CAT_WARTUNG,
+ CAT_IOTEST,
+ CAT_STATUS,
+ CAT_DIAG_KASKADE,
+ CAT_DIAG_ERZEUGER,
+ CAT_DIAG_VERBRAUCHER,
+ CAT_FEUERUNGSAUTOMAT,
+ CAT_USER_DEFINED,
+ CAT_UNKNOWN
+}category_t;
+
+/* Parameter types */
+typedef enum{
+ VT_TEMP, // 3 Byte - 1 enable / value/64
+ VT_FP1, // 3 Byte - 1 enable / value/10
+ VT_FP02, // 3 Byte - 1 enable / value/50
+ VT_UINT, // 3 Byte - 1 enable / value
+ VT_ERRORCODE, // 3 Byte - 1 enable / value
+ VT_ONOFF, // 2 Byte - 1 enable / 0=Aus 1=An (auch 0xff=An)
+ VT_YESNO, // 2 Byte - 1 enable / 0=Nein 1=Ja (auch 0xff=Ja)
+ VT_CLOSEDOPEN, // 2 Byte - 1 enable / 0=Offen 1=Geschlossen
+ VT_MINUTES, // 5 Byte - 1 enable / seconds/60
+ VT_MINUTES_WORD, // 3 Byte - 1 enable / minutes
+ VT_MINUTES_SHORT, // 2 Byte - 1 enable / minutes
+ VT_HOURS, // 5 Byte - 1 enable / seconds/3600
+ VT_HOURS_WORD, // 3 Byte - 1 enable / hours
+ VT_HOURS_SHORT, // 2 Byte - 1 enable / hours
+ VT_HOUR_MINUTES, // 3 Byte - 1 enable / h m
+ VT_DAYS, // 2 Byte - 1 enable / day
+ VT_MONTHS, // 2 Byte - 1 enable / months
+ VT_DATETIME, // 9 Byte - 1 enable / year+1900 month day weekday hour min sec
+ VT_TIMEPROG, // 12 Byte - 1_ein 1_aus 2_ein 2_aus 3_ein 3_aus (jeweils SS:MM)
+ VT_VACATIONPROG, // 9 Byte - 1 enable / byte 2/3 month/year
+ VT_SUMMERPERIOD, // 9 Byte - 1 enable / byte 2/3 month/year
+ VT_WEEKDAY, // 2 Byte - 1 enable / weekday (1=Mo..7=So)
+ VT_PERCENT, // 2 Byte - 1 enable / percent
+ VT_PRESSURE, // 2 Byte - 1 enable bar/10.0
+ VT_PRESSURE_WORD, // 3 Byte - 1 enable / bar/10.0
+ VT_VOLTAGE, // 2 Byte - 1 enable / volt (???) unklar, da nur 0.0V verfügbar
+ VT_DWORD, // 5 Byte - 1 enable / value
+ VT_BYTE, // 2 Byte - 1 enable / value
+ VT_STRING, // x Byte - 1 enable / string
+ VT_ENUM, // 2 Byte - 1 enable / value
+ VT_LPBADDR, // 2 Byte - 1 enable / adr/seg
+ VT_UNKNOWN
+}vt_type_t;
+
+typedef struct {
+ uint32_t cmd;
+ uint8_t category;
+ uint8_t type;
+ uint16_t line;
+ const char *desc;
+ uint16_t enumstr_len;
+ const char *enumstr;
+} cmd_t;
+
+/****************************************************/
+/* PROGMEM TABLES and STRINGS */
+/****************************************************/
+//Kategorien
+const char ENUM_CAT[] PROGMEM = {
+"\x00 Uhrzeit und Datum\0"
+"\x01 Bedieneinheit\0"
+"\x02 Funk\0"
+"\x03 Zeitprogramm Heizkreis 1\0"
+"\x04 Zeitprogramm Heizkreis 2\0"
+"\x05 Zeitprogramm 3/HKP\0"
+"\x06 Zeitprogramm 4/TWW\0"
+"\x07 Zeitprogramm 5\0"
+"\x08 Ferien Heizkreis 1\0"
+"\x09 Ferien Heizkreis 2\0"
+"\x0a Ferien Heizkreis P\0"
+"\x0b Heizkreis 1\0"
+"\x0c Kühlkreis 1\0"
+"\x0d Heizkreis 2\0"
+"\x0e Heizkreis 3/P\0"
+"\x0f Trinkwasser\0"
+"\x10 Hx-Pumpe\0"
+"\x11 Schwimmbad\0"
+"\x12 Vorregler/Zubringerpumpe\0"
+"\x13 Kessel\0"
+"\x14 Wärmepumpe\0"
+"\x15 Kaskade\0"
+"\x16 Zusatzerzeuger\0"
+"\x17 Solar\0"
+"\x18 Feststoffkessel\0"
+"\x19 Pufferspeicher\0"
+"\x1a Trinkwasserspeicher\0"
+"\x1b Trinkwasser Durchl'erhitzer\0"
+"\x1c Konfiguration\0"
+"\x1d LPB-System\0"
+"\x1e Fehler\0"
+"\x1f Wartung/Sonderbetrieb\0"
+"\x20 Ein-/Ausgangstest\0"
+"\x21 Status\0"
+"\x22 Diagnose Kaskade\0"
+"\x23 Diagnose Erzeuger\0"
+"\x24 Diagnose Verbraucher\0"
+"\x25 Feuerungsautomat\0"
+"\x26 Benutzerdefiniert\0"
+"\x27 unbekannte Kategorie\0"
+};
+
+
+ /* Menue Strings */
+const char STR0[] PROGMEM = "Datum/Zeit";
+const char STR1[] PROGMEM = "Stunden/Minuten";
+const char STR2[] PROGMEM = "Tag/Monat";
+const char STR3[] PROGMEM = "Jahr";
+const char STR5[] PROGMEM = "Sommerzeitbeginn Tag/Monat";
+const char STR6[] PROGMEM = "Sommerzeitende Tag/Monat";
+const char STR20[] PROGMEM = "Sprachauswahl";
+const char STR22[] PROGMEM = "Info";
+const char STR23[] PROGMEM = "Fehleranzeige";
+const char STR25[] PROGMEM = "Anzeigekontrast";
+const char STR26[] PROGMEM = "Sperre Bedienung";
+const char STR27[] PROGMEM = "Sperre Programmierung";
+const char STR28[] PROGMEM = "Bedieneinheit Direktverstellung";
+const char STR30[] PROGMEM = "Bedieneinheit Grundeinstellung sichern";
+const char STR31[] PROGMEM = "Bedieneinheit Grundeinstellung aktivieren";
+const char STR40[] PROGMEM = "Einsatz als";
+const char STR42[] PROGMEM = "Zurodnung Raumgerät 1";
+const char STR44[] PROGMEM = "Bedienung HK 2";
+const char STR46[] PROGMEM = "Bedienung HK P";
+const char STR48[] PROGMEM = "Wirkung Präsenztaste";
+const char STR54[] PROGMEM = "Korrektur Raumfühler";
+const char STR70[] PROGMEM = "Geräte-Version Bedienteil";
+const char STR120[] PROGMEM = "Binding";
+const char STR121[] PROGMEM = "Testmode";
+const char STR130[] PROGMEM = "Raumgerät 1 Status ";
+const char STR131[] PROGMEM = "Raumgerät 2 Status ";
+const char STR132[] PROGMEM = "Raumgerät P Status ";
+const char STR133[] PROGMEM = "Außenfühler P Status ";
+const char STR134[] PROGMEM = "Repeater P Status ";
+const char STR135[] PROGMEM = "Bedieneinheit 1 Status ";
+const char STR136[] PROGMEM = "Bedieneinheit 2 Status ";
+const char STR137[] PROGMEM = "Bedieneinheit P Status ";
+const char STR138[] PROGMEM = "Servicegerät Status ";
+const char STR140[] PROGMEM = "Alle Geräte löschen";
+/*
+const char STR500[] PROGMEM = "Vorwahl";
+const char STR501[] PROGMEM = "Mo-So: 1. Phase Ein";
+const char STR502[] PROGMEM = "Mo-So: 1. Phase Aus";
+const char STR503[] PROGMEM = "Mo-So: 2. Phase Ein";
+const char STR504[] PROGMEM = "Mo-So: 2. Phase Aus";
+const char STR505[] PROGMEM = "Mo-So: 3. Phase Ein";
+const char STR506[] PROGMEM = "Mo-So: 3. Phase Aus";
+*/
+const char STR500[] PROGMEM = "Mo";
+const char STR501[] PROGMEM = "Di";
+const char STR502[] PROGMEM = "Mi";
+const char STR503[] PROGMEM = "Do";
+const char STR504[] PROGMEM = "Fr";
+const char STR505[] PROGMEM = "Sa";
+const char STR506[] PROGMEM = "So";
+
+const char STR516[] PROGMEM = "Standardwerte";
+const char STR520[] PROGMEM = "Vorwahl";
+const char STR521[] PROGMEM = "Mo-So: 1. Phase Ein";
+const char STR522[] PROGMEM = "Mo-So: 1. Phase Aus";
+const char STR523[] PROGMEM = "Mo-So: 2. Phase Ein";
+const char STR524[] PROGMEM = "Mo-So: 2. Phase Aus";
+const char STR525[] PROGMEM = "Mo-So: 3. Phase Ein";
+const char STR526[] PROGMEM = "Mo-So: 3. Phase Aus";
+const char STR536[] PROGMEM = "Standardwerte";
+const char STR540[] PROGMEM = "Vorwahl";
+const char STR541[] PROGMEM = "Mo-So: 1. Phase Ein";
+const char STR542[] PROGMEM = "Mo-So: 1. Phase Aus";
+const char STR543[] PROGMEM = "Mo-So: 2. Phase Ein";
+const char STR544[] PROGMEM = "Mo-So: 2. Phase Aus";
+const char STR545[] PROGMEM = "Mo-So: 3. Phase Ein";
+const char STR546[] PROGMEM = "Mo-So: 3. Phase Aus";
+const char STR556[] PROGMEM = "Standardwerte";
+const char STR560[] PROGMEM = "Vorwahl";
+const char STR561[] PROGMEM = "Mo-So: 1. Phase Ein";
+const char STR562[] PROGMEM = "Mo-So: 1. Phase Aus";
+const char STR563[] PROGMEM = "Mo-So: 2. Phase Ein";
+const char STR564[] PROGMEM = "Mo-So: 2. Phase Aus";
+const char STR565[] PROGMEM = "Mo-So: 3. Phase Ein";
+const char STR566[] PROGMEM = "Mo-So: 3. Phase Aus";
+const char STR576[] PROGMEM = "Standardwerte";
+const char STR600[] PROGMEM = "Vorwahl";
+const char STR601[] PROGMEM = "Mo-So: 1. Phase Ein";
+const char STR602[] PROGMEM = "Mo-So: 1. Phase Aus";
+const char STR603[] PROGMEM = "Mo-So: 2. Phase Ein";
+const char STR604[] PROGMEM = "Mo-So: 2. Phase Aus";
+const char STR605[] PROGMEM = "Mo-So: 3. Phase Ein";
+const char STR606[] PROGMEM = "Mo-So: 3. Phase Aus";
+const char STR616[] PROGMEM = "Standardwerte";
+
+/* Die Zeilennummern 632-682 entsprechen nicht den Zeilennummern im Bedienteil, sondern wurden künstlich hinzugefügt*/
+const char STR632[] PROGMEM = "Periode 1 Beginn Tag/Monat";
+const char STR633[] PROGMEM = "Periode 1 Ende Tag/Monat";
+const char STR634[] PROGMEM = "Periode 2 Beginn Tag/Monat";
+const char STR635[] PROGMEM = "Periode 2 Ende Tag/Monat";
+const char STR636[] PROGMEM = "Periode 3 Beginn Tag/Monat";
+const char STR637[] PROGMEM = "Periode 3 Ende Tag/Monat";
+const char STR638[] PROGMEM = "Periode 4 Beginn Tag/Monat";
+const char STR639[] PROGMEM = "Periode 4 Ende Tag/Monat";
+const char STR640[] PROGMEM = "Periode 5 Beginn Tag/Monat";
+const char STR641[] PROGMEM = "Periode 5 Ende Tag/Monat";
+const char STR642[] PROGMEM = "Periode 6 Beginn Tag/Monat";
+const char STR643[] PROGMEM = "Periode 6 Ende Tag/Monat";
+const char STR644[] PROGMEM = "Periode 7 Beginn Tag/Monat";
+const char STR645[] PROGMEM = "Periode 7 Ende Tag/Monat";
+const char STR646[] PROGMEM = "Periode 8 Beginn Tag/Monat";
+const char STR647[] PROGMEM = "Periode 8 Ende Tag/Monat";
+const char STR648[] PROGMEM = "Betriebsniveau";
+
+#define STR649 STR632
+#define STR650 STR633
+#define STR651 STR634
+#define STR652 STR635
+#define STR653 STR636
+#define STR654 STR637
+#define STR655 STR638
+#define STR656 STR639
+#define STR657 STR640
+#define STR658 STR641
+#define STR659 STR642
+#define STR660 STR643
+#define STR661 STR644
+#define STR662 STR645
+#define STR663 STR646
+#define STR664 STR647
+#define STR665 STR648
+
+#define STR666 STR632
+#define STR667 STR633
+#define STR668 STR634
+#define STR669 STR635
+#define STR670 STR636
+#define STR671 STR637
+#define STR672 STR638
+#define STR673 STR639
+#define STR674 STR640
+#define STR675 STR641
+#define STR676 STR642
+#define STR677 STR643
+#define STR678 STR644
+#define STR679 STR645
+#define STR680 STR646
+#define STR681 STR647
+#define STR682 STR648
+
+/*
+const char STR641[] PROGMEM = "Vorwahl";
+const char STR642[] PROGMEM = "Beginn Tag/Monat";
+const char STR643[] PROGMEM = "Ende Tag/Monat";
+const char STR648[] PROGMEM = "Betriebsniveau";
+const char STR651[] PROGMEM = "Vorwahl";
+const char STR652[] PROGMEM = "Beginn Tag/Monat";
+const char STR653[] PROGMEM = "Ende Tag/Monat";
+const char STR658[] PROGMEM = "Betriebsniveau";
+const char STR661[] PROGMEM = "Vorwahl";
+const char STR662[] PROGMEM = "Beginn Tag/Monat";
+const char STR663[] PROGMEM = "Ende Tag/Monat";
+const char STR668[] PROGMEM = "Betriebsniveau";
+*/
+
+const char STR700[] PROGMEM = "Betriebsart";
+const char STR710[] PROGMEM = "Komfortsollwert";
+const char STR711[] PROGMEM = "Komfortsollwert Maximum";
+const char STR712[] PROGMEM = "Reduziertsollwert";
+const char STR714[] PROGMEM = "Frostschutzsollwert";
+const char STR720[] PROGMEM = "Kennlinie Steilheit";
+const char STR721[] PROGMEM = "Kennlinie Verschiebung";
+const char STR726[] PROGMEM = "Kennlinie Adaption";
+const char STR730[] PROGMEM = "Sommer-/ Winterheizgrenze";
+const char STR732[] PROGMEM = "Tagesheizgrenze";
+const char STR740[] PROGMEM = "Vorlaufsollwert Minimum";
+const char STR741[] PROGMEM = "Vorlaufsollwert Maximum";
+const char STR750[] PROGMEM = "Raumeinfluss";
+const char STR760[] PROGMEM = "Raumtemperaturbegrenzung";
+const char STR770[] PROGMEM = "Schnellaufheizung";
+const char STR780[] PROGMEM = "Schnellabsenkung";
+const char STR790[] PROGMEM = "Einschalt-Optimierung Max.";
+const char STR791[] PROGMEM = "Ausschalt-Optimierung Max.";
+const char STR800[] PROGMEM = "Reduziert-Anhebung Begin";
+const char STR801[] PROGMEM = "Reduziert-Anhebung Ende";
+const char STR820[] PROGMEM = "Überhitzschutz Pumpenkreis";
+const char STR830[] PROGMEM = "Mischerüberhöhung";
+const char STR850[] PROGMEM = "Estrichfunktion";
+const char STR851[] PROGMEM = "Estrich sollwert manuell";
+const char STR861[] PROGMEM = "Übertemperaturabnahme";
+const char STR870[] PROGMEM = "Mit Pufferspeicher";
+const char STR872[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
+const char STR882[] PROGMEM = "Pumpendrehzahl Minimum";
+const char STR883[] PROGMEM = "Pumpendrehzahl Maximum";
+const char STR900[] PROGMEM = "Betriebsartumschaltung";
+const char STR901[] PROGMEM = "Betriebsart";
+const char STR902[] PROGMEM = "Komfortsollwert";
+const char STR907[] PROGMEM = "Freigabe";
+const char STR908[] PROGMEM = "Vorlaufsollwert bei TA 25 °C";
+const char STR909[] PROGMEM = "Vorlaufsollwert bei TA 35 °C";
+const char STR912[] PROGMEM = "Kühlgrenze bei TA";
+const char STR913[] PROGMEM = "Sperrdauer nach Heizende";
+const char STR918[] PROGMEM = "Sommerkomp Beginn bei TA";
+const char STR919[] PROGMEM = "Sommerkomp Ende bei TA";
+const char STR920[] PROGMEM = "Sommerkomp Sollw’anhebung";
+const char STR923[] PROGMEM = "Vorlaufsollwert Min bei TA 25 °C";
+const char STR924[] PROGMEM = "Vorlaufsollwert Min bei TA 35 °C";
+const char STR928[] PROGMEM = "Raumeinfluss";
+const char STR932[] PROGMEM = "Raumtemperaturbegrenzung";
+const char STR938[] PROGMEM = "Mischerunterkühlung";
+const char STR939[] PROGMEM = "Antrieb Typ";
+const char STR940[] PROGMEM = "Schaltdifferenz 2-Punkt";
+const char STR941[] PROGMEM = "Antrieb Laufzeit";
+const char STR945[] PROGMEM = "Mischventil im Heizbetrieb";
+const char STR946[] PROGMEM = "Sperrdauer Taupunktwächt";
+const char STR947[] PROGMEM = "Vorlaufsollw’anhebung Hygro";
+const char STR948[] PROGMEM = "Vorl'anhebung Beginn bei r. F.";
+const char STR950[] PROGMEM = "Vorlauftemp'diff Taupunkt";
+const char STR962[] PROGMEM = "Mit Pufferspeicher";
+const char STR963[] PROGMEM = "Mit Vorregler/Zubring'pumpe";
+const char STR969[] PROGMEM = "Betriebsartumschaltung";
+const char STR1010[] PROGMEM = "Komfortsollwert";
+const char STR1011[] PROGMEM = "Komfortsollwert Maximum";
+const char STR1012[] PROGMEM = "Reduziertsollwert";
+const char STR1014[] PROGMEM = "Frostschutzsollwert";
+const char STR1020[] PROGMEM = "Kennlinie Steilheit";
+const char STR1021[] PROGMEM = "Kennlinie Verschiebung";
+const char STR1026[] PROGMEM = "Kennlinie Adaption";
+const char STR1030[] PROGMEM = "Sommer-/ Winterheizgrenze";
+const char STR1032[] PROGMEM = "Tagesheizgrenze";
+const char STR1040[] PROGMEM = "Vorlaufsollwert Minimum";
+const char STR1041[] PROGMEM = "Vorlaufsollwert Maximum";
+const char STR1050[] PROGMEM = "Raumeinfluss";
+const char STR1060[] PROGMEM = "Raumtemperaturbegrenzung";
+const char STR1070[] PROGMEM = "Schnellaufheizung";
+const char STR1080[] PROGMEM = "Schnellabsenkung";
+const char STR1090[] PROGMEM = "Einschalt-Optimierung Max.";
+const char STR1091[] PROGMEM = "Ausschalt-Optimierung Max.";
+const char STR1100[] PROGMEM = "Reduziert-Anhebung Begin";
+const char STR1101[] PROGMEM = "Reduziert-Anhebung Ende";
+const char STR1120[] PROGMEM = "Überhitzschutz Pumpenkreis";
+const char STR1130[] PROGMEM = "Mischerüberhöhung";
+const char STR1132[] PROGMEM = "Antrieb Typ";
+const char STR1133[] PROGMEM = "Schaltdiffernez 2-Punkt";
+const char STR1150[] PROGMEM = "Estrichfunktion";
+const char STR1151[] PROGMEM = "Estrich sollwert manuell";
+const char STR1156[] PROGMEM = "Estrich Tag aktuell";
+const char STR1157[] PROGMEM = "Estrich Tag erfüllt";
+const char STR1161[] PROGMEM = "Übertemperaturabnahme";
+const char STR1170[] PROGMEM = "Mit Pufferspeicher";
+const char STR1172[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
+const char STR1182[] PROGMEM = "Pumpendrehzahl Minimum";
+const char STR1183[] PROGMEM = "Pumpendrehzahl Maximum";
+const char STR1200[] PROGMEM = "Betriebsartumschaltung";
+const char STR1300[] PROGMEM = "Betriebsart";
+const char STR1310[] PROGMEM = "Komfortsollwert";
+const char STR1312[] PROGMEM = "Reduziertsollwert";
+const char STR1314[] PROGMEM = "Frostschutzsollwert";
+const char STR1320[] PROGMEM = "Kennlinie Steilheit";
+const char STR1321[] PROGMEM = "Kennlinie Verschiebung";
+const char STR1326[] PROGMEM = "Kennlinie Adaption";
+const char STR1330[] PROGMEM = "Sommer-/ Winterheizgrenze";
+const char STR1332[] PROGMEM = "Tagesheizgrenze";
+const char STR1340[] PROGMEM = "Vorlaufsollwert Minimum";
+const char STR1341[] PROGMEM = "Vorlaufsollwert Maximum";
+const char STR1350[] PROGMEM = "Raumeinfluss";
+const char STR1360[] PROGMEM = "Raumtemperaturbegrenzung";
+const char STR1370[] PROGMEM = "Schnellaufheizung";
+const char STR1380[] PROGMEM = "Schnellabsenkung";
+const char STR1390[] PROGMEM = "Einschalt-Optimierung Max.";
+const char STR1391[] PROGMEM = "Ausschalt-Optimierung Max.";
+const char STR1400[] PROGMEM = "Reduziert-Anhebung Begin";
+const char STR1401[] PROGMEM = "Reduziert-Anhebung Ende";
+const char STR1420[] PROGMEM = "Überhitzschutz Pumpenkreis";
+const char STR1430[] PROGMEM = "Mischerüberhöhung";
+const char STR1450[] PROGMEM = "Estrichfunktion";
+const char STR1451[] PROGMEM = "Estrich sollwert manuell";
+const char STR1455[] PROGMEM = "Estrich Sollwert aktuell";
+const char STR1456[] PROGMEM = "Estrich Tag aktuell";
+const char STR1457[] PROGMEM = "Estrich Tag erfüllt";
+const char STR1461[] PROGMEM = "Übertemperaturabnahme";
+const char STR1470[] PROGMEM = "Mit Pufferspeicher";
+const char STR1472[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
+const char STR1482[] PROGMEM = "Pumpendrehzahl Minimum";
+const char STR1483[] PROGMEM = "Pumpendrehzahl Maximum";
+const char STR1500[] PROGMEM = "Betriebsartumschaltung";
+const char STR1600[] PROGMEM = "Trinkwasserbetrieb";
+const char STR1610[] PROGMEM = "Nennsollwert";
+const char STR1612[] PROGMEM = "Reduziertsollwert";
+const char STR1620[] PROGMEM = "Freigabe";
+const char STR1630[] PROGMEM = "Ladevorgang";
+const char STR1640[] PROGMEM = "Legionellenfunktion";
+const char STR1641[] PROGMEM = "Legionellenfkt. Periodisch";
+const char STR1642[] PROGMEM = "Legionellenfkt. Wochentag";
+const char STR1644[] PROGMEM = "Legionellenfkt. Zeitpunkt";
+const char STR1645[] PROGMEM = "Legionellenfkt. Sollwert";
+const char STR1646[] PROGMEM = "Legionellenfkt. Verweildauer";
+const char STR1647[] PROGMEM = "Legionellenfkt. Zirk`pumpe";
+const char STR1660[] PROGMEM = "Zirkulationspumpe Freigabe";
+const char STR1661[] PROGMEM = "Zirk`pumpe Taktbetrieb";
+const char STR1663[] PROGMEM = "Zirkulations Sollwert";
+const char STR2008[] PROGMEM = "H1 TWW-Ladevorrang";
+const char STR2010[] PROGMEM = "H1 Übertemperaturabnahme";
+const char STR2012[] PROGMEM = "H1 mit Pufferspeicher";
+const char STR2014[] PROGMEM = "H1 Vorregler/Zubring`pumpe";
+const char STR2015[] PROGMEM = "H1 Kälteanforderung";
+const char STR2033[] PROGMEM = "H2 TWW-Ladevorrang ";
+const char STR2035[] PROGMEM = "H2 Übertemperaturabnahme ";
+const char STR2037[] PROGMEM = "H2 mit Pufferspeicher ";
+const char STR2039[] PROGMEM = "H2 Vorregler / Zubring'pumpe ";
+const char STR2040[] PROGMEM = "H2 Kälteanforderung";
+const char STR2044[] PROGMEM = "H3 TWW-Ladevorrang";
+const char STR2046[] PROGMEM = "H3 Übertemperaturabnahme";
+const char STR2048[] PROGMEM = "H3 mit Pufferspeicher";
+const char STR2050[] PROGMEM = "H3 Vorregler/Zubring`pumpe";
+const char STR2051[] PROGMEM = "H3 Kälteanforderung";
+const char STR2055[] PROGMEM = "Sollwert Solarbeheizung ";
+const char STR2056[] PROGMEM = "Sollwert Erzeugerbeheizung ";
+const char STR2065[] PROGMEM = "Ladevorrang Solar ";
+const char STR2070[] PROGMEM = "Schwimmbadtemp Maximum";
+const char STR2080[] PROGMEM = "Mit Solareinbindung";
+const char STR2150[] PROGMEM = "Vorregler/Zubringerpumpe";
+const char STR2203[] PROGMEM = "Freigabe unter Außentemp";
+const char STR2205[] PROGMEM = "Bei Ökobetrieb";
+const char STR2208[] PROGMEM = "Durchladung Pufferspeicher";
+const char STR2210[] PROGMEM = "Sollwert Minimum";
+const char STR2212[] PROGMEM = "Sollwert maximum";
+const char STR2220[] PROGMEM = "Freigabeintegral Stufe 2";
+const char STR2221[] PROGMEM = "Rückstellintegral Stufe 2";
+const char STR2270[] PROGMEM = "Rücklaufsollwert Minimum";
+const char STR2291[] PROGMEM = "Steuerung Bypasspumpe";
+const char STR2330[] PROGMEM = "Leistung Nenn";
+const char STR2331[] PROGMEM = "Leistung Grundstufe";
+const char STR2340[] PROGMEM = "Auto Erz’folge 2 x 1 Kaskade";
+const char STR2800[] PROGMEM = "Frostschutz Kondens’pumpe";
+const char STR2801[] PROGMEM = "Steuerung Kondens’pumpe";
+const char STR2802[] PROGMEM = "Vorlaufzeit Kondens’pumpe";
+const char STR2803[] PROGMEM = "Nachlaufzeit Kondens’pumpe";
+const char STR2805[] PROGMEM = "Soll Temp’Spreizung Kond";
+const char STR2806[] PROGMEM = "Max Abweich Spreiz Kondens";
+const char STR2815[] PROGMEM = "Quellentemp Min Wasser";
+const char STR2816[] PROGMEM = "Quellentemp Min Sole";
+const char STR2817[] PROGMEM = "Schaltdiff Quellenschutz";
+const char STR2818[] PROGMEM = "Erhöhung Quellenschutztemp";
+const char STR2819[] PROGMEM = "Vorlaufzeit Quelle";
+const char STR2820[] PROGMEM = "Nachlaufzeit Quelle";
+const char STR2821[] PROGMEM = "Quellen-Anlaufzeit Maximum";
+const char STR2822[] PROGMEM = "Zeit Begr Quelletemp Min";
+const char STR2840[] PROGMEM = "Schaltdiff Rücklauftemp";
+const char STR2841[] PROGMEM = "Verd'laufzeit min einhalten";
+const char STR2842[] PROGMEM = "Verdichterlaufzeit Minimum";
+const char STR2843[] PROGMEM = "Verdichtersillstandszeit Min";
+const char STR2844[] PROGMEM = "Ausschalttemp. max";
+const char STR2845[] PROGMEM = "Reduktion Ausschaltemp Max";
+const char STR2846[] PROGMEM = "Heissgastemp Max";
+const char STR2852[] PROGMEM = "ND-Verzögerung beim Start";
+const char STR2880[] PROGMEM = "Verwendung Elektro-Vorlauf";
+const char STR2881[] PROGMEM = "Sperrzeit Elektro-Vorlauf ";
+const char STR2882[] PROGMEM = "Freigabeintegr. Elektro-Vorl ";
+const char STR2883[] PROGMEM = "Rückstellintegr. Elektro-Vorl ";
+const char STR2884[] PROGMEM = "Freig Elektro-Vorl unter TA ";
+const char STR2886[] PROGMEM = "Kompensation Wärmedefizit";
+const char STR2893[] PROGMEM = "Anzahl TWW-Ladeversuche ";
+const char STR2894[] PROGMEM = "Verzögerung Drehstr'fehler ";
+const char STR2895[] PROGMEM = "Verzögerung Ström'wächter ";
+const char STR2910[] PROGMEM = "Freigabe oberhalb TA ";
+const char STR2911[] PROGMEM = "Für Pufferzwangsladung";
+const char STR2912[] PROGMEM = "Durchladung Pufferspeicher";
+const char STR2951[] PROGMEM = "Abtaufreigabe unterhalb TA ";
+const char STR2952[] PROGMEM = "Schaltdifferenz Abtauen ";
+const char STR2954[] PROGMEM = "Verdampfertemp Abtau-Ende ";
+const char STR2963[] PROGMEM = "Dauer bis Zwangsabtauen ";
+const char STR2964[] PROGMEM = "Abtaudauer Maximal ";
+const char STR2965[] PROGMEM = "Abtropfdauer Verdampfer ";
+const char STR2966[] PROGMEM = "Abkühldauer Verdampfer ";
+const char STR3002[] PROGMEM = "Quellentemp min Kühlbetrieb ";
+const char STR3006[] PROGMEM = "Während Verdichterbetrieb";
+const char STR3007[] PROGMEM = "Im passiven Kühlbetrieb";
+const char STR3010[] PROGMEM = "Drehz max V'lator/Q'Pump ";
+const char STR3510[] PROGMEM = "Führungsstrategie";
+const char STR3530[] PROGMEM = "Freigabeintegral Erz’folge";
+const char STR3531[] PROGMEM = "Rückstellintegral Erz’folge";
+const char STR3532[] PROGMEM = "Wiedereinschaltsperre";
+const char STR3533[] PROGMEM = "Zuschaltverzögerung";
+const char STR3540[] PROGMEM = "Auto Erz’folge Umschaltung";
+const char STR3541[] PROGMEM = "Auto Erz’folge Ausgrenzung";
+const char STR3544[] PROGMEM = "Führender Erzeuger";
+const char STR3550[] PROGMEM = "Anfahrentlast Kaskad'pumpe";
+const char STR3560[] PROGMEM = "Rücklaufsollwert Minimum";
+const char STR3590[] PROGMEM = "Temp’spreizung Minimum";
+const char STR3700[] PROGMEM = "Freigabe unter Außentemp";
+const char STR3701[] PROGMEM = "Freigabe über Außentemp";
+const char STR3705[] PROGMEM = "Nachlaufzeit";
+const char STR3720[] PROGMEM = "Schaltintegral";
+const char STR3722[] PROGMEM = "Schaltdifferenz Aus";
+const char STR3723[] PROGMEM = "Sperrzeit";
+const char STR3810[] PROGMEM = "Temperaturdifferenz Ein";
+const char STR3811[] PROGMEM = "Temperaturdifferenz Aus";
+const char STR3812[] PROGMEM = "Ladetemp Min TWW-Speicher";
+const char STR3813[] PROGMEM = "Temp’diff EIN Puffer";
+const char STR3814[] PROGMEM = "Temp’diff AUS Puffer";
+const char STR3815[] PROGMEM = "Ladetemp Min Puffer";
+const char STR3816[] PROGMEM = "Temp'differenz EIN Sch'bad";
+const char STR3817[] PROGMEM = "Temp'differenz AUS Sch'bad";
+const char STR3818[] PROGMEM = "Ladetemp Min Schwimmbad";
+const char STR3822[] PROGMEM = "Ladevorrang Speicher";
+const char STR3825[] PROGMEM = "Ladezeit relativer Vorrang";
+const char STR3826[] PROGMEM = "Wartezeit relativer Vorrang";
+const char STR3827[] PROGMEM = "Wartezeit Parallelbetrieb";
+const char STR3828[] PROGMEM = "Verzögerung Sekundärpumpe";
+const char STR3830[] PROGMEM = "Kollektorstartfunktion";
+const char STR3831[] PROGMEM = "Mindestlaufzeit Kollek`pumpe";
+const char STR3832[] PROGMEM = "Kollektorstartfunktion Ein";
+const char STR3833[] PROGMEM = "Kollektorstartfunktion Aus";
+const char STR3834[] PROGMEM = "Kollektorstartfkt Gradient";
+const char STR3840[] PROGMEM = "Kollektor Frostschutz";
+const char STR3850[] PROGMEM = "Kollektorüberhitzschutz";
+const char STR3860[] PROGMEM = "Verdampfung Wärmeträger";
+const char STR3870[] PROGMEM = "Pumpendrehzahl Minimum";
+const char STR3871[] PROGMEM = "Pumpendrehzahl Maximum";
+const char STR3880[] PROGMEM = "Frostschutzmittel";
+const char STR3881[] PROGMEM = "Frost'mittel Konzentration";
+const char STR3884[] PROGMEM = "Pumpendurchfluss";
+const char STR4102[] PROGMEM = "Sperrt andere Erzeuger";
+const char STR4110[] PROGMEM = "Sollwert Minimum";
+const char STR4130[] PROGMEM = "Temperaturdifferenz Ein";
+const char STR4131[] PROGMEM = "Temperaturdifferenz Aus";
+const char STR4133[] PROGMEM = "Vergleichstempertatur";
+const char STR4140[] PROGMEM = "Pumpennachlaufzeit";
+const char STR4141[] PROGMEM = "Übertemperaturableitung";
+const char STR4708[] PROGMEM = "Zwangsladungsollwert Kühlen";
+const char STR4709[] PROGMEM = "Zwangsladungsoll Heizen Min";
+const char STR4710[] PROGMEM = "Zwangsladungsoll Heizen Max";
+const char STR4711[] PROGMEM = "Zwangsladung Zeitpunkt";
+const char STR4712[] PROGMEM = "Zwangsladung Dauer Max";
+const char STR4720[] PROGMEM = "Auto Erzeugersperre";
+const char STR4721[] PROGMEM = "Auto Erzeugersperre SD";
+const char STR4722[] PROGMEM = "Temp`diff Puffer/Heizkreis";
+const char STR4724[] PROGMEM = "Min Speichertemp Heizbetrieb";
+const char STR4739[] PROGMEM = "Schichtschutz";
+const char STR4750[] PROGMEM = "Ladetemperatur Maximum";
+const char STR4755[] PROGMEM = "Rückkühltemperatur";
+const char STR4756[] PROGMEM = "Rückkühlung TWW/HK`s";
+const char STR4757[] PROGMEM = "Rückkühlung Kollektor";
+const char STR4760[] PROGMEM = "Ladefühler Elektroeinsatz";
+const char STR4761[] PROGMEM = "Zwangsladung mit Elektro";
+const char STR4783[] PROGMEM = "Mit Solareinbindung";
+const char STR4790[] PROGMEM = "Temp'diff EIN Rückl'umlenk";
+const char STR4791[] PROGMEM = "Temp'diff AUS Rückl'umlenk";
+const char STR4795[] PROGMEM = "Vergleichstemp Rückl'umlenk";
+const char STR4796[] PROGMEM = "Wirksinn Rücklaufumlenkung";
+const char STR4810[] PROGMEM = "Durchladung";
+const char STR5010[] PROGMEM = "Ladung";
+const char STR5020[] PROGMEM = "Vorlaufsollwertüberhöhung";
+const char STR5021[] PROGMEM = "Umladeüberhöhung";
+const char STR5022[] PROGMEM = "Ladeart";
+const char STR5050[] PROGMEM = "Ladetemperatur Maximum";
+const char STR5055[] PROGMEM = "Rückkühltemperatur";
+const char STR5056[] PROGMEM = "Rückkühlung Kessel/HK";
+const char STR5057[] PROGMEM = "Rückkühlung Kollektor";
+const char STR5060[] PROGMEM = "Elektroeinsatz Betriebsart";
+const char STR5061[] PROGMEM = "Elektroeinsatz Freigabe";
+const char STR5062[] PROGMEM = "Elektroeinsatz Regelung";
+const char STR5085[] PROGMEM = "Übertemperaturabnahme";
+const char STR5090[] PROGMEM = "Mit Pufferspeicher";
+const char STR5092[] PROGMEM = "Mit Vorregler/Zubring`pumpe";
+const char STR5093[] PROGMEM = "Mit Solareinbindung";
+const char STR5101[] PROGMEM = "Pumpendrehzahl Minimum";
+const char STR5102[] PROGMEM = "Pumpendrehzahl Maximum";
+const char STR5130[] PROGMEM = "Umladestrategie";
+const char STR5131[] PROGMEM = "Vergleichstemp Umladung";
+const char STR5406[] PROGMEM = "Min Sollw'diff zu Speich'temp ";
+const char STR5530[] PROGMEM = "Pumpendrehzahl Minimum ";
+const char STR5544[] PROGMEM = "Antrieb Laufzeit ";
+const char STR5700[] PROGMEM = "Voreinstellung";
+const char STR5710[] PROGMEM = "Heizkreis 1";
+const char STR5711[] PROGMEM = "Kühlkreis 1 ";
+const char STR5712[] PROGMEM = "Verwendung Mischer 1";
+const char STR5715[] PROGMEM = "Heizkreis2";
+const char STR5730[] PROGMEM = "Trinkwasser-Sensor B3";
+const char STR5731[] PROGMEM = "Trinkwasser-Stellglied Q3";
+const char STR5736[] PROGMEM = "Trinkwasser Trennschaltung";
+const char STR5770[] PROGMEM = "Erzeugertyp";
+const char STR5772[] PROGMEM = "Brenner Vorlaufzeit";
+const char STR5800[] PROGMEM = "Wärmequelle";
+const char STR5807[] PROGMEM = "Kälteerzeugung";
+const char STR5810[] PROGMEM = "Spreizung HK bei TA –10 °C";
+const char STR5840[] PROGMEM = "Solarstellglied";
+const char STR5841[] PROGMEM = "Externer Solartauscher";
+const char STR5870[] PROGMEM = "Kombispeicher";
+const char STR5890[] PROGMEM = "Relaisausgang QX1";
+const char STR5891[] PROGMEM = "Relaisausgang QX2";
+const char STR5892[] PROGMEM = "Relaisausgang QX3";
+const char STR5894[] PROGMEM = "Relaisausgang QX4";
+const char STR5895[] PROGMEM = "Relaisausgang QX5";
+const char STR5896[] PROGMEM = "Relaisausgang QX6";
+const char STR5908[] PROGMEM = "Funktion Ausgang QX3-Mod";
+const char STR5909[] PROGMEM = "Funktion Ausgang QX4-Mod";
+const char STR5930[] PROGMEM = "Fühlereingang BX 1";
+const char STR5931[] PROGMEM = "Fühlereingang BX 2";
+const char STR5932[] PROGMEM = "Fühlereingang BX 3";
+const char STR5933[] PROGMEM = "Fühlereingang BX 4";
+const char STR5934[] PROGMEM = "Fühlereingang BX5";
+const char STR5950[] PROGMEM = "Funktion Eingang H1";
+const char STR5951[] PROGMEM = "Wirksinn Kontakt H1";
+const char STR5952[] PROGMEM = "Minimaler Vorlaufsollwert H1";
+const char STR5953[] PROGMEM = "Spannungswert 1 H1";
+const char STR5954[] PROGMEM = "Wärmeanforderung 10V H1";
+const char STR5955[] PROGMEM = "Spannungswert 2 H1";
+const char STR5956[] PROGMEM = "Druckwert 3.5V H1";
+const char STR5960[] PROGMEM = "Funktion Eingang H3";
+const char STR5961[] PROGMEM = "Wirksinn Kontakt H3";
+const char STR5962[] PROGMEM = "Minimaler Vorlaufsollwert H3";
+const char STR5963[] PROGMEM = "Spannungswert 1 H3";
+const char STR5964[] PROGMEM = "Wärmeanforderung 10V H3";
+const char STR5965[] PROGMEM = "Spannungswert 2 H3";
+const char STR5966[] PROGMEM = "Druckwert 3.5V H3";
+const char STR5980[] PROGMEM = "Funktion Eingang EX1";
+const char STR5981[] PROGMEM = "Wirksinn Eingang EX1";
+const char STR5982[] PROGMEM = "Funktion Eingang EX2";
+const char STR5983[] PROGMEM = "Wirksinn Eingang EX2";
+const char STR5984[] PROGMEM = "Funktion Eingang EX3";
+const char STR5985[] PROGMEM = "Wirksinn Eingang EX3";
+const char STR5986[] PROGMEM = "Funktion Eingang EX4";
+const char STR5987[] PROGMEM = "Wirksinn Eingang EX4";
+const char STR5988[] PROGMEM = "Funktion Eingang EX5";
+const char STR5990[] PROGMEM = "Funktion Eingang EX6";
+const char STR5992[] PROGMEM = "Funktion Eingang EX7";
+const char STR6014[] PROGMEM = "Funktion Mischergruppe 1";
+const char STR6015[] PROGMEM = "Funktion Mischergruppe 2";
+const char STR6020[] PROGMEM = "Funktion Erweiterungsmodul 1";
+const char STR6021[] PROGMEM = "Funktion Erweiterungsmodul 2";
+const char STR6030[] PROGMEM = "Relaisausgang QX21";
+const char STR6031[] PROGMEM = "Relaisausgang QX22";
+const char STR6032[] PROGMEM = "Relaisausgang QX23";
+const char STR6040[] PROGMEM = "Fühlereingang BX21";
+const char STR6041[] PROGMEM = "Fühlereingang BX22";
+const char STR6046[] PROGMEM = "Funktion Eingang H2";
+const char STR6047[] PROGMEM = "Wirksinn Kontakt H2";
+const char STR6048[] PROGMEM = "Minimaler Vorlaufsollwert H2";
+const char STR6049[] PROGMEM = "Spannungswert 1 H2";
+const char STR6050[] PROGMEM = "Temperaturwert 10V H2";
+const char STR6051[] PROGMEM = "Spannungswert 2 H2";
+const char STR6052[] PROGMEM = "Funktionswert 2 H2";
+const char STR6070[] PROGMEM = "Funktion Ausgang UX";
+const char STR6071[] PROGMEM = "Signallogik Ausgang UX";
+const char STR6072[] PROGMEM = "Signal Ausgang UX";
+const char STR6075[] PROGMEM = "Temperaturwert 10V UX";
+const char STR6097[] PROGMEM = "Fühlertyp Kollektor";
+const char STR6098[] PROGMEM = "Korrektur Kollektorfühler";
+const char STR6099[] PROGMEM = "Korrektur Kollektorfühler 2";
+const char STR6100[] PROGMEM = "korrektur Aussenfühler";
+const char STR6101[] PROGMEM = "Fühlertyp Abgastemperatur";
+const char STR6102[] PROGMEM = "Korrektur Abgastemp'fühler";
+const char STR6110[] PROGMEM = "Zeitkonstante Gebäude";
+const char STR6120[] PROGMEM = "Anlagenfrostschutz";
+const char STR6128[] PROGMEM = "Wärm'anfo unter Außentemp";
+const char STR6129[] PROGMEM = "Wärm'anfo über Außentemp";
+const char STR6130[] PROGMEM = "H1 mit Pufferspeicher";
+const char STR6131[] PROGMEM = "Wärm'anfo bei Ökobetrieb";
+const char STR6134[] PROGMEM = "H2 mit Pufferspeicher";
+const char STR6135[] PROGMEM = "Luftentfeuchter";
+const char STR6136[] PROGMEM = "Luftentfeuchter Freigabe";
+const char STR6137[] PROGMEM = "Luftentfeuchter r. F. EIN";
+const char STR6138[] PROGMEM = "Luftentfeuchter r. F. SD";
+const char STR6200[] PROGMEM = "Fühler Speichern";
+const char STR6201[] PROGMEM = "Fühler löschen";
+const char STR6205[] PROGMEM = "Parameter zurücksetzen";
+const char STR6212[] PROGMEM = "Kontrollbnummer Erzeuger 1";
+const char STR6213[] PROGMEM = "Kontrollbnummer Erzeuger 2";
+const char STR6215[] PROGMEM = "Kontrollnummer Speicher";
+const char STR6217[] PROGMEM = "Kontrollnummer Heizkreise";
+const char STR6220[] PROGMEM = "Software- Version LOGON B";
+const char STR6600[] PROGMEM = "Geräteadresse";
+const char STR6601[] PROGMEM = "Segmentadresse";
+const char STR6604[] PROGMEM = "Busspeisung Funktion";
+const char STR6605[] PROGMEM = "Busspeisung Status";
+const char STR6610[] PROGMEM = "Anzeige Systemmeldungen";
+const char STR6612[] PROGMEM = "Alarmverzögerung";
+const char STR6620[] PROGMEM = "Wirkbereich Umschaltungen";
+const char STR6621[] PROGMEM = "Sommerumschaltung";
+const char STR6623[] PROGMEM = "Betriebsartumschaltung";
+const char STR6624[] PROGMEM = "Manuelle Erzeugersperre";
+const char STR6625[] PROGMEM = "Trinkwasserzuordnung";
+const char STR6627[] PROGMEM = "Kälteanforderung";
+const char STR6632[] PROGMEM = "TA'grenze ext Erz beachten";
+const char STR6640[] PROGMEM = "Uhrbetrieb";
+const char STR6650[] PROGMEM = "Aussentemperatur Lieferant";
+const char STR6710[] PROGMEM = "Reset Alarmrelais";
+const char STR6711[] PROGMEM = "Reset Wärmepumpe";
+const char STR6740[] PROGMEM = "Vorlauftemperatur 1 Alarm";
+const char STR6741[] PROGMEM = "Vorlauftemperatur 2 Alarm";
+const char STR6743[] PROGMEM = "Kesseltemperatur Alarm";
+const char STR6745[] PROGMEM = "Trinkwasserladung Alarm ";
+const char STR6746[] PROGMEM = "Vorlauftemp Kühlen 1 Alarm ";
+const char STR6800[] PROGMEM = "Historie 1 Datum/Zeit";
+const char STR6801[] PROGMEM = "Historie 1 Fehlercode";
+const char STR6802[] PROGMEM = "Historie 2 Datum/Zeit";
+const char STR6803[] PROGMEM = "Historie 2 Fehlercode";
+const char STR6804[] PROGMEM = "Historie 3 Datum/Zeit";
+const char STR6805[] PROGMEM = "Historie 3 Fehlercode";
+const char STR6806[] PROGMEM = "Historie 4 Datum/Zeit";
+const char STR6807[] PROGMEM = "Historie 4 Fehlercode";
+const char STR6808[] PROGMEM = "Historie 5 Datum/Zeit";
+const char STR6809[] PROGMEM = "Historie 5 Fehlercode";
+const char STR6810[] PROGMEM = "Historie 6 Datum/Zeit";
+const char STR6811[] PROGMEM = "Historie 6 Fehlercode";
+const char STR6812[] PROGMEM = "Historie 7 Datum/Zeit";
+const char STR6813[] PROGMEM = "Historie 7 Fehlercode";
+const char STR6814[] PROGMEM = "Historie 8 Datum/Zeit";
+const char STR6815[] PROGMEM = "Historie 8 Fehlercode";
+const char STR6816[] PROGMEM = "Historie 9 Datum/Zeit";
+const char STR6817[] PROGMEM = "Historie 9 Fehlercode";
+const char STR6818[] PROGMEM = "Historie 10 Datum/Zeit";
+const char STR6819[] PROGMEM = "Historie 10 Fehlercode";
+const char STR7040[] PROGMEM = "Brennerstunden Intervall";
+const char STR7041[] PROGMEM = "Brennerstunden seit Wartung";
+const char STR7042[] PROGMEM = "Brennerstarts Intervall";
+const char STR7043[] PROGMEM = "Brennerstarts seit Wartung";
+const char STR7044[] PROGMEM = "Wartungsintervall";
+const char STR7045[] PROGMEM = "Zeit seit Wartung";
+const char STR7053[] PROGMEM = "Abgastemperaturgrenze ";
+const char STR7054[] PROGMEM = "Verzögerung Abgasmeldung ";
+const char STR7070[] PROGMEM = "WP Zeitintervall ";
+const char STR7071[] PROGMEM = "WP Zeit seit Wartung ";
+const char STR7072[] PROGMEM = "Max Starts Verd1 / Betr’Std ";
+const char STR7073[] PROGMEM = "Akt Starts Verd1 / Betr’Std ";
+const char STR7074[] PROGMEM = "Max Starts Verd2 / Betr’Std ";
+const char STR7075[] PROGMEM = "Akt Starts Verd2 / Betr’Std ";
+const char STR7076[] PROGMEM = "Spreiz Kondens Max / Wo";
+const char STR7077[] PROGMEM = "Akt Spreiz Kondens Max / Wo";
+const char STR7078[] PROGMEM = "Spreiz Kondens Min / Wo";
+const char STR7079[] PROGMEM = "Akt Spreiz Kondens Min / Wo";
+const char STR7080[] PROGMEM = "Spreiz Verdampfer Max / Wo";
+const char STR7081[] PROGMEM = "Akt Spreiz Verdampfer Max / Wo";
+const char STR7082[] PROGMEM = "Spreiz Verdampfer Min / Wo";
+const char STR7083[] PROGMEM = "Akt Spreiz Verdampfer Min / Wo";
+const char STR7090[] PROGMEM = "TWW Speicher Zeitintervall";
+const char STR7091[] PROGMEM = "TWW Speicher seit Wartung";
+const char STR7092[] PROGMEM = "TWW Ladetemp WP Minimum";
+const char STR7093[] PROGMEM = "Akt TWW Ladetemperatur WP";
+const char STR7119[] PROGMEM = "Ökofunktion";
+const char STR7120[] PROGMEM = "Ökobetrieb";
+const char STR7130[] PROGMEM = "Schornsteinfegerfunktion";
+const char STR7140[] PROGMEM = "Handbetrieb";
+const char STR7141[] PROGMEM = "Notbetrieb";
+const char STR7142[] PROGMEM = "Notbetrieb Funktionsstart";
+const char STR7150[] PROGMEM = "Simulation Aussentemperatur";
+const char STR7152[] PROGMEM = "Abtauen auslösen";
+const char STR7160[] PROGMEM = "Reset Begrenzungszeiten";
+const char STR7170[] PROGMEM = "Telefon Kundendienst";
+const char STR7700[] PROGMEM = "Relaistest";
+const char STR7705[] PROGMEM = "Mod'sollwert QX3 Relaistest";
+const char STR7708[] PROGMEM = "Modulationssignal QX3";
+const char STR7710[] PROGMEM = "Ausgangstest UX";
+const char STR7711[] PROGMEM = "Spannungssignal UX";
+const char STR7714[] PROGMEM = "PWM-Signal P1";
+const char STR7730[] PROGMEM = "Aussentemperatur B9";
+const char STR7732[] PROGMEM = "Vorlauftemperatur B1";
+const char STR7734[] PROGMEM = "Vorlauftemperatur B12";
+const char STR7750[] PROGMEM = "Trinkwassertemperatur B3";
+const char STR7760[] PROGMEM = "Kesseltemperatur B2";
+const char STR7770[] PROGMEM = "Vorlauftemperatur WP B21";
+const char STR7771[] PROGMEM = "Rücklauftemperatur WP B71";
+const char STR7772[] PROGMEM = "Heissgastemperatur B81";
+const char STR7775[] PROGMEM = "Quelle Eintrittstemp B91";
+const char STR7777[] PROGMEM = "Fühlertemperatur B92, B84";
+const char STR7820[] PROGMEM = "Fühlertemperatur BX1";
+const char STR7821[] PROGMEM = "Fühlertemperatur BX2";
+const char STR7822[] PROGMEM = "Fühlertemperatur BX3";
+const char STR7823[] PROGMEM = "Fühlertemperatur BX4";
+const char STR7824[] PROGMEM = "Fühlertemperatur BX5";
+const char STR7830[] PROGMEM = "Fühlertemp. BX21 Modul 1";
+const char STR7831[] PROGMEM = "Fühlertemp. BX22 Modul 1";
+const char STR7832[] PROGMEM = "Fühlertemp. BX21 Modul 2";
+const char STR7833[] PROGMEM = "Fühlertemp. BX22 Modul 2";
+const char STR7840[] PROGMEM = "Spannungssignal H1";
+const char STR7841[] PROGMEM = "Kontaktzustand H1";
+const char STR7845[] PROGMEM = "Spannungssignal H2";
+const char STR7846[] PROGMEM = "Kontaktzustand H2";
+const char STR7854[] PROGMEM = "Spannungssignal H3";
+const char STR7855[] PROGMEM = "Kontaktzustand H3";
+const char STR7870[] PROGMEM = "Brennerstörung S3";
+const char STR7881[] PROGMEM = "1. Brennerstufe E1";
+const char STR7889[] PROGMEM = "Niederdruckwächter E9";
+const char STR7890[] PROGMEM = "Hochdruckwächter E10";
+const char STR7891[] PROGMEM = "Wickl’schutz Verdicht 1 E11";
+const char STR7911[] PROGMEM = "Eingang EX 1";
+const char STR7912[] PROGMEM = "Eingang EX2";
+const char STR7913[] PROGMEM = "Eingang EX 3";
+const char STR7914[] PROGMEM = "Eingang EX 4";
+const char STR7915[] PROGMEM = "Eingang EX 5";
+const char STR7916[] PROGMEM = "Eingang EX 6";
+const char STR7917[] PROGMEM = "Eingang EX 7";
+const char STR8000[] PROGMEM = "Status Heizkreis 1";
+const char STR8001[] PROGMEM = "Status Heizkreis 2";
+const char STR8002[] PROGMEM = "Status Heizkreis P";
+const char STR8003[] PROGMEM = "Status Trinkwasser";
+const char STR8004[] PROGMEM = "Status Kühlkreis 1";
+const char STR8005[] PROGMEM = "Status Kessel";
+const char STR8006[] PROGMEM = "Status Wärmepumpe";
+const char STR8007[] PROGMEM = "Status Solar";
+const char STR8008[] PROGMEM = "Status Feststoffkessel";
+const char STR8010[] PROGMEM = "Status Pufferspeicher";
+const char STR8011[] PROGMEM = "Status Schwimmbad";
+const char STR8022[] PROGMEM = "Status Zusatzerzeuger";
+const char STR8050[] PROGMEM = "Zeitstemper Statushistorie 1";
+const char STR8051[] PROGMEM = "Statuscode Statushistorie 1";
+const char STR8052[] PROGMEM = "Zeitstemper Statushistorie 2";
+const char STR8053[] PROGMEM = "Statuscode Statushistorie 2";
+const char STR8054[] PROGMEM = "Zeitstemper Statushistorie 3";
+const char STR8055[] PROGMEM = "Statuscode Statushistorie 3";
+const char STR8056[] PROGMEM = "Zeitstemper Statushistorie 4";
+const char STR8057[] PROGMEM = "Statuscode Statushistorie 4";
+const char STR8058[] PROGMEM = "Zeitstemper Statushistorie 5";
+const char STR8059[] PROGMEM = "Statuscode Statushistorie 5";
+const char STR8060[] PROGMEM = "Zeitstemper Statushistorie 6";
+const char STR8061[] PROGMEM = "Statuscode Statushistorie 6";
+const char STR8062[] PROGMEM = "Zeitstemper Statushistorie 7";
+const char STR8063[] PROGMEM = "Statuscode Statushistorie 7";
+const char STR8064[] PROGMEM = "Zeitstemper Statushistorie 8 ";
+const char STR8065[] PROGMEM = "Statuscode Statushistorie 8 ";
+const char STR8066[] PROGMEM = "Zeitstemper Statushistorie 9 ";
+const char STR8067[] PROGMEM = "Statuscode Statushistorie 10 ";
+const char STR8068[] PROGMEM = "Zeitstemper Statushistorie 10 ";
+const char STR8069[] PROGMEM = "Statuscode Statushistorie 10 ";
+const char STR8100[] PROGMEM = "Priorität / Status Erzeuger 1 ";
+const char STR8102[] PROGMEM = "Priorität / Status Erzeuger 2 ";
+const char STR8104[] PROGMEM = "Priorität / Status Erzeuger 3 ";
+const char STR8106[] PROGMEM = "Priorität / Status Erzeuger 4 ";
+const char STR8108[] PROGMEM = "Priorität / Status Erzeuger 5 ";
+const char STR8110[] PROGMEM = "Priorität / Status Erzeuger 6 ";
+const char STR8112[] PROGMEM = "Priorität / Status Erzeuger 7 ";
+const char STR8114[] PROGMEM = "Priorität / Status Erzeuger 8 ";
+const char STR8116[] PROGMEM = "Priorität / Status Erzeuger 9 ";
+const char STR8118[] PROGMEM = "Priorität / Status Erzeuger 10 ";
+const char STR8120[] PROGMEM = "Priorität / Status Erzeuger 11 ";
+const char STR8122[] PROGMEM = "Priorität / Status Erzeuger 12 ";
+const char STR8124[] PROGMEM = "Priorität / Status Erzeuger 13 ";
+const char STR8126[] PROGMEM = "Priorität / Status Erzeuger 14 ";
+const char STR8128[] PROGMEM = "Priorität / Status Erzeuger 15 ";
+const char STR8130[] PROGMEM = "Priorität / Status Erzeuger 16 ";
+const char STR8138[] PROGMEM = "Kaskadenvorlauftemperatur ";
+const char STR8139[] PROGMEM = "Kaskadenvorlaufsollwert ";
+const char STR8140[] PROGMEM = "Kaskadenrücklauftemperatur ";
+const char STR8141[] PROGMEM = "Kaskadenrücklaufsollwert ";
+const char STR8150[] PROGMEM = "Erz'folge Umschalt aktuell ";
+const char STR8300[] PROGMEM = "1. Brennerstufe T2";
+const char STR8301[] PROGMEM = "2. Brennerstufe T8";
+const char STR8308[] PROGMEM = "Drehzahl Kesselpumpe ";
+const char STR8310[] PROGMEM = "Kesseltemperatur";
+const char STR8311[] PROGMEM = "Kesselsollwert";
+const char STR8312[] PROGMEM = "Kesselschaltpunkt ";
+const char STR8314[] PROGMEM = "Kesselrücklauftemperatur";
+const char STR8315[] PROGMEM = "Kesselrücklaufsollwert ";
+const char STR8316[] PROGMEM = "Abgastemperatur";
+const char STR8318[] PROGMEM = "Abgastemperatur Maximum";
+const char STR8326[] PROGMEM = "Brennermodulation ";
+const char STR8330[] PROGMEM = "Betriebsstunden 1.Stufe";
+const char STR8331[] PROGMEM = "Startzähler 1.Stufe";
+const char STR8332[] PROGMEM = "Betriebsstunden 2.Stufe";
+const char STR8333[] PROGMEM = "Startzähler 2.Stufe";
+const char STR8400[] PROGMEM = "Verdichter 1 K1";
+const char STR8401[] PROGMEM = "Verdichter 2 K2";
+const char STR8402[] PROGMEM = "Elektroeinsatz 1 Vorlauf";
+const char STR8403[] PROGMEM = "Elektroeinsatz 2 Vorlauf";
+const char STR8404[] PROGMEM = "Quellenpu Q8 / Ventilat K19";
+const char STR8405[] PROGMEM = "Drehzahl Quellenpumpe";
+const char STR8406[] PROGMEM = "Konendastorpumpe Q9";
+const char STR8410[] PROGMEM = "Rücklauftemperatur WP";
+const char STR8411[] PROGMEM = "Sollwert WP";
+const char STR8412[] PROGMEM = "Vorlauftemperatur WP";
+const char STR8415[] PROGMEM = "Heissgastemperatur 1";
+const char STR8416[] PROGMEM = "Heissgastemperatur Max";
+const char STR8417[] PROGMEM = "Heissgastemperatur 2";
+const char STR8420[] PROGMEM = "Kältemitteltemperatur flüssig";
+const char STR8425[] PROGMEM = "Temp’spreizung Kondensator";
+const char STR8426[] PROGMEM = "Temp’spreizung Verdampfer";
+const char STR8427[] PROGMEM = "Quelle Eintrittstemperatur";
+const char STR8428[] PROGMEM = "Quelle Eintritt Min";
+const char STR8429[] PROGMEM = "Quelle Austrittstemperatur";
+const char STR8430[] PROGMEM = "Quelle Austritt Min";
+const char STR8440[] PROGMEM = "Rest Stufe 1 Stillst’zeit Min";
+const char STR8441[] PROGMEM = "Rest Stufe 2 Stillst’zeit Min";
+const char STR8442[] PROGMEM = "Rest Stufe 1 Laufzeit Min";
+const char STR8443[] PROGMEM = "Rest Stufe 2 Laufzeit Min";
+const char STR8444[] PROGMEM = "Restzeit Begr Quelle TempMin";
+const char STR8446[] PROGMEM = "Verdichterfolge";
+const char STR8450[] PROGMEM = "Betr’stunden Verdichter 1";
+const char STR8451[] PROGMEM = "Startzähler Verdichter 1";
+const char STR8452[] PROGMEM = "Betr’stunden Verdichter 2";
+const char STR8453[] PROGMEM = "Startzähler Verdichter 2";
+const char STR8454[] PROGMEM = "Sperrdauer WP";
+const char STR8455[] PROGMEM = "Zähler Anzahl Sperren WP";
+const char STR8456[] PROGMEM = "Betr’stunden Elektro Vorl";
+const char STR8457[] PROGMEM = "Startzähler Elektro Vorlauf";
+const char STR8469[] PROGMEM = "Drehzahl Ventilator";
+const char STR8470[] PROGMEM = "Ventilator K19";
+const char STR8471[] PROGMEM = "Prozessumkehrventil";
+const char STR8475[] PROGMEM = "Verdampfertemperatur";
+const char STR8477[] PROGMEM = "Temp'diff Abtauen Istwert";
+const char STR8478[] PROGMEM = "Temp'diff Abtauen Sollwert";
+const char STR8480[] PROGMEM = "Restzeit Abtausperrung";
+const char STR8481[] PROGMEM = "Restzeit Zwangsabtauen";
+const char STR8482[] PROGMEM = "Restzeit Abtaustabilisierung";
+const char STR8485[] PROGMEM = "Anzahl Abtauversuche";
+const char STR8487[] PROGMEM = "Status Abtauen WP";
+const char STR8505[] PROGMEM = "Drehzahl Kollektorpumpe 1";
+const char STR8506[] PROGMEM = "Drehzahl Solarpump ext.Tau ";
+const char STR8507[] PROGMEM = "Drehzahl Solarpumpe Puffer ";
+const char STR8508[] PROGMEM = "Drehzahl Solarpump Sch'bad ";
+const char STR8510[] PROGMEM = "Kollektortemperatur 1";
+const char STR8511[] PROGMEM = "Kollektortemperatur 1 Max";
+const char STR8512[] PROGMEM = "Kollektortemperatur 1 Min";
+const char STR8513[] PROGMEM = "dT Kollektor 1/TWW";
+const char STR8514[] PROGMEM = "dt Kollektor 1/Puffer";
+const char STR8515[] PROGMEM = "dT Kollektor 1 / Schwimmbad ";
+const char STR8519[] PROGMEM = "Solarvorlauftemperatur ";
+const char STR8520[] PROGMEM = "Solarrücklauftemperatur ";
+const char STR8526[] PROGMEM = "Tagesertrag Solarenergie ";
+const char STR8527[] PROGMEM = "Gesamtertrag Solarenergie ";
+const char STR8530[] PROGMEM = "Betr`stunden Solarertrag";
+const char STR8531[] PROGMEM = "Betr`stunden Kollektor`überhitz";
+const char STR8543[] PROGMEM = "Drehzahl Kollektorpumpe 2 ";
+const char STR8547[] PROGMEM = "Kollektortemperatur 2 ";
+const char STR8548[] PROGMEM = "Kollektortemperatur 2 Max ";
+const char STR8549[] PROGMEM = "Kollektortemperatur 2 Min ";
+const char STR8550[] PROGMEM = "dT Kollektor 2 / TWW ";
+const char STR8551[] PROGMEM = "dT Kollektor 2 / Puffer ";
+const char STR8552[] PROGMEM = "dT Kollektor 2 / Schwimmbad ";
+const char STR8560[] PROGMEM = "Feststoffkesseltemperatur";
+const char STR8570[] PROGMEM = "Betr'std Feststoffkessel ";
+const char STR8700[] PROGMEM = "Aussentemperatur";
+const char STR8701[] PROGMEM = "Außentemperatur Minimum";
+const char STR8702[] PROGMEM = "Außentemperatur Maximum";
+const char STR8703[] PROGMEM = "Aussentemperatur gedämpft";
+const char STR8704[] PROGMEM = "Aussentemperatur gemischt";
+const char STR8720[] PROGMEM = "Relative Raumfeuchte";
+const char STR8721[] PROGMEM = "Raumtemperatur";
+const char STR8722[] PROGMEM = "Taupunkttemperatur";
+const char STR8730[] PROGMEM = "Heizkreispumpe Q2";
+const char STR8731[] PROGMEM = "Heizkreismischer Auf Y1";
+const char STR8732[] PROGMEM = "Heizkreismischer Zu Y2";
+const char STR8735[] PROGMEM = "Drehzahl Heizkreispumpe 1";
+const char STR8740[] PROGMEM = "Raumtemperatur 1";
+const char STR8741[] PROGMEM = "Raumsollwert 1";
+const char STR8743[] PROGMEM = "Vorlauftemperatur 1";
+const char STR8744[] PROGMEM = "Vorlaufsollwert 1";
+const char STR8751[] PROGMEM = "Kühlkreispumpe Q24";
+const char STR8752[] PROGMEM = "Kühlkreismischer Auf Y23";
+const char STR8753[] PROGMEM = "Kühlkreismischer Zu Y24";
+const char STR8754[] PROGMEM = "Umlenkventil Kühlen Y21";
+const char STR8756[] PROGMEM = "Vorlauftemperatur Kühlen 1";
+const char STR8757[] PROGMEM = "Vorlaufsollwert Kühlen1";
+const char STR8760[] PROGMEM = "Heizkreispumpe 2";
+const char STR8761[] PROGMEM = "Heizkreismischer 2 Auf";
+const char STR8762[] PROGMEM = "Heizkreismischer 2 Zu";
+const char STR8765[] PROGMEM = "Drehzahl Heizkreispumpe 2";
+const char STR8770[] PROGMEM = "Raumtemperatur 2";
+const char STR8771[] PROGMEM = "Raumsollwert 2";
+const char STR8773[] PROGMEM = "Vorlauftemperatur 2";
+const char STR8774[] PROGMEM = "Vorlaufsollwert 2";
+const char STR8795[] PROGMEM = " Drehzahl Heizkreispumpe P";
+const char STR8800[] PROGMEM = "Raumtemperatur P";
+const char STR8801[] PROGMEM = "Raumsollwert P";
+const char STR8803[] PROGMEM = "Vorlaufsollwert P";
+const char STR8820[] PROGMEM = "Trinkwasserpumpe Q3";
+const char STR8821[] PROGMEM = "Elektroeinsatz TWW K6";
+const char STR8825[] PROGMEM = "Drehzahl Trinkwasserpumpe";
+const char STR8826[] PROGMEM = "Drehzahl TWW Zw'kreispumpe";
+const char STR8827[] PROGMEM = "Drehzahl Dl'erhitzerpumpe";
+const char STR8830[] PROGMEM = "Trinkwassertemperatur 1";
+const char STR8831[] PROGMEM = "Trinkwassersollwert";
+const char STR8832[] PROGMEM = "Trinkwassertemperatur 2";
+const char STR8835[] PROGMEM = "TWW Zirkulationstemperatur";
+const char STR8836[] PROGMEM = "TWW Ladetemperatur";
+const char STR8840[] PROGMEM = "Betr’stunden TWW-Pumpe";
+const char STR8841[] PROGMEM = "Startzähler TWW-Pumpe";
+const char STR8842[] PROGMEM = "Betr’stunden Elektro TWW";
+const char STR8843[] PROGMEM = "Startzähler Elektro TWW";
+const char STR8850[] PROGMEM = "TWW Vorreglertemperatur";
+const char STR8851[] PROGMEM = "TWW Vorreglersollwert";
+const char STR8852[] PROGMEM = "TWW Durchl'erhitzertemp";
+const char STR8853[] PROGMEM = "TWW Durchl'erhitzersollwert";
+const char STR8900[] PROGMEM = "Schwimmbadtemperatur";
+const char STR8901[] PROGMEM = "Schwimmbadsollwert";
+const char STR8930[] PROGMEM = "Vorreglertemperatur";
+const char STR8931[] PROGMEM = "Vorreglersollwert";
+const char STR8950[] PROGMEM = "Schienenvorlauftemperatur";
+const char STR8951[] PROGMEM = "Schienenvorlaufsollwert";
+const char STR8952[] PROGMEM = "Schienenrücklauftemperatur";
+const char STR8957[] PROGMEM = "Schienenvorl'sollwert Kälte";
+const char STR8962[] PROGMEM = "Leistungssollwert Schiene";
+const char STR8970[] PROGMEM = "Elektroeinsatz Puffer";
+const char STR8980[] PROGMEM = "Pufferspeichertemperatur 1";
+const char STR8981[] PROGMEM = "Pufferspeichersollwert";
+const char STR8982[] PROGMEM = "Pufferspeichertemperatur 2";
+const char STR8983[] PROGMEM = "Pufferspeichertemperatur 3";
+const char STR8990[] PROGMEM = "Betr’stunden Elektro Puffer";
+const char STR8991[] PROGMEM = "Startzähler Elektro Puffer";
+const char STR9000[] PROGMEM = "Vorlaufsollwert H1";
+const char STR9001[] PROGMEM = "Vorlaufsollwert H2";
+const char STR9004[] PROGMEM = "Vorlaufsollwert H3";
+const char STR9005[] PROGMEM = "Wasserdruck H1";
+const char STR9006[] PROGMEM = "Wasserdruck H2";
+const char STR9009[] PROGMEM = "Wasserdruck H3";
+const char STR9031[] PROGMEM = "Relaisausgang QX1";
+const char STR9032[] PROGMEM = "Relaisausgang QX2";
+const char STR9033[] PROGMEM = "Relaisausgang QX3";
+const char STR9034[] PROGMEM = "Relaisausgang QX4";
+const char STR9035[] PROGMEM = "Relaisausgang QX5";
+const char STR9036[] PROGMEM = "Relaisausgang QX6";
+const char STR9037[] PROGMEM = "Relaisausgang QX7";
+const char STR9038[] PROGMEM = "Relaisausgang QX8";
+const char STR9050[] PROGMEM = "Relaisausgang QX21 Modul 1";
+const char STR9051[] PROGMEM = "Relaisausgang QX22 Modul 1";
+const char STR9052[] PROGMEM = "Relaisausgang QX23 Modul 1";
+const char STR9053[] PROGMEM = "Relaisausgang QX21 Modul 2";
+const char STR9054[] PROGMEM = "Relaisausgang QX22 Modul 2";
+const char STR9055[] PROGMEM = "Relaisausgang QX23 Modul 2";
+const char STR9500[] PROGMEM = "Vorlüftzeit";
+const char STR9502[] PROGMEM = "Gebl'ansteuerung Vorlüftung";
+const char STR9504[] PROGMEM = "Solldrehzahl Vorlüftung";
+const char STR9510[] PROGMEM = "Gebl'ansteuerung Zündung";
+const char STR9512[] PROGMEM = "Solldrehzahl Zündung";
+const char STR9520[] PROGMEM = "Gebl'ansteuerung Betrieb. Min";
+const char STR9522[] PROGMEM = "Gebl'ansteuerung Betrieb. Max";
+const char STR9524[] PROGMEM = "Solldrehzahl Betrieb Min";
+const char STR9527[] PROGMEM = "Solldrehzahl Betrieb Max";
+const char STR9540[] PROGMEM = "Nachlüftzeit";
+const char STR9560[] PROGMEM = "Gebl'ansteuerung Durchlad";
+const char STR9563[] PROGMEM = "Solldrehzahl Durchlasung";
+
+const char STR10000[] PROGMEM = "Raumtemperatur 1";
+
+/* ENUM tables */
+/*
+const char ENUM648[] PROGMEM = {"\x00 Frostschutz\0\x01 Reduziert"};
+#define ENUM658 ENUM648
+#define ENUM668 ENUM648
+*/
+const char ENUM648[] PROGMEM = {"\x00 Frostschutz\0\x01 Reduziert"};
+#define ENUM665 ENUM648
+#define ENUM682 ENUM648
+
+const char ENUM700[] PROGMEM = {"\x00 Schutzbetrieb\0\x01 Automatik\0\x02 Reduziert\0\x03 Komfort"};
+
+const char ENUM780[] PROGMEM = {"\x00 Aus\0\x01 Bis Reduziertsollwert\0\x02 Bis Frostschutzsollwert"};
+const char ENUM850[] PROGMEM = {"\x00 Aus\0\x01 Funktionsheizen\0\x02 Belegreifheizen\0\x03 Funktions-/Belegreifheizen\0\x04 Beleg-/Funktionsheizen\0\x05 Manuell"};
+const char ENUM861[] PROGMEM = {"\x00 Aus\0\x01 Heizbetrieb\0\x02 Immer"};
+const char ENUM900[] PROGMEM = {"\x00 Keine\0\x01 Schutzbetrieb\0\x02 Reduziert\0\x03 Komfort\0\x04 Automatik"};
+
+#define ENUM1080 ENUM780
+#define ENUM1150 ENUM850
+#define ENUM1161 ENUM861
+#define ENUM1200 ENUM900
+const char ENUM1620[] PROGMEM = {"\x00 24h/Tag\0\x01 Zeitprogramme Heizkreise\0\x02 Zeitprogramm 4/TWW"};
+const char ENUM1630[] PROGMEM = {"\x00 Absolut\0\x01 Gleitend\0\x02 Kein\0\x03 MK gleitend PK absolut\0\x04 Aus"};
+const char ENUM1640[] PROGMEM = {"\x00 Aus\0\x01 Periodisch\0\x02 Fixer Wochentag"};
+const char ENUM1660[] PROGMEM = {"\x01 Zeitprogramm 3/HKP\0\x02 Trinkwasser Freigabe\0\x03 Zeitprogramm 4/TWW\0\x04 Zeitprogramm 5"};
+const char ENUM5022[] PROGMEM = {"\x01 Mit B3\0\x02 Mit B3/B31\0\x03 Mit B3, Legio B3/31"};
+const char ENUM5057[] PROGMEM = {"\x00 Aus\0\x01 Sommer\0\x02 Immer"};
+const char ENUM5060[] PROGMEM = {"\x01 Ersatz\0\x02 Sommer\0\x03 Immer"};
+const char ENUM5061[] PROGMEM = {"\x01 24H/Tag\0\x02 Trinkwasser Freigabe\0\x03 Zeitprogramm 4/TWW"};
+const char ENUM5062[] PROGMEM = {"\x01 Externer Thermostat\0\x02 Trinkwasserfühler"};
+const char ENUM5730[] PROGMEM = {"\x00 Fühler\0\x01 Thermostat"};
+const char ENUM5731[] PROGMEM = {"\x00 kein\0\x01 Ladepumpe\0\x02 Umlenkventil"};
+
+const char ENUM5890[] PROGMEM = {
+"\x00 Kein\0"
+"\x01 Zirkulationspumpe Q4\0"
+"\x02 Elektroeinsatz TWW K6\0"
+"\x03 Kollektorpumpe Q5\0"
+"\x04 H1-Pumpe Q15\0"
+"\x05 Kesselpumpe Q1\0"
+"\x06 Bypasspumpe Q12\0"
+"\x07 Alarmausgang K10\0"
+"\x08 2.Pumpenstufe HK1 Q21\0"
+"\x09 2.Pumpenstufe HK2 Q22\0"
+"\x0a 2.Pumpenstufe HKP Q32\0"
+"\x0b Heizkreispumpe HKP Q20\0"
+"\x0c H2-Pumpe Q18\0"
+"\x0d Zubringerpumpe Q14\0"
+"\x0e Erzeugersperrventil Y4\0"
+"\x0f Feststoffkesselpumpe Q10\0"
+"\x10 Zeitprogramm 5 K13\0"
+"\x11 Pufferrücklaufventil Y15\0"
+"\x12 Solarpumpe ext. Tauscher K9\0"
+"\x13 Solarstellglied Puffer K8\0"
+"\x14 Solarstellglied Schw'bad K18\0"
+"\x15 Kollektorpumpe 2 Q16\0"
+"\x16 H3-Pumpe Q19\0"
+"\x17 Abgasrelais K17\0"
+"\x19 Kaskadenpumpe Q25\0"
+"\x1a Speicherumladepumpe Q11\0"
+"\x1b TWW Durchmischpumpe Q35\0"
+"\x1c TWW Zwisch'kreispumpe Q33\0"
+"\x1d Wärmeanforderung K27"};
+
+
+#define ENUM5891 ENUM5890
+#define ENUM5892 ENUM5890
+
+const char ENUM5930[] PROGMEM = {
+"\x00 Kein\0"
+"\x01 Trinkwasserfühler B31\0"
+"\x02 Kollektorfühler B6\0"
+"\x04 TWW Zirkulationsfühler B39\0"
+"\x05 Pufferspeicherfühler B4\0"
+"\x06 Pufferspeicherfühler B41\0"
+"\x07 Abgastemperaturfühler B8\0"
+"\x08 Schienenvorlauffühler B10\0"
+"\x09 Feststoffkesselfühler B22\0"
+"\x0a TWW Ladefühler B36\0"
+"\x0b Pufferspeicherfühler B42\0"
+"\x0c Schienenrücklauffühler B73\0"
+"\x0d Kaskadenrücklauffühler B70\0"
+"\x0e Schwimmbadfühler B13\0"
+"\x0f Kollektorfühler 2 B61\0"
+"\x10 Solarvorlauffühler B63\0"
+"\x11 Solarrücklauffühler B64"};
+
+#define ENUM5931 ENUM5930
+#define ENUM5932 ENUM5930
+#define ENUM5933 ENUM5930
+
+const char ENUM5950[] PROGMEM = {
+"\x01 BA-Umschaltung HK's + TWW\0"
+"\x02 BA-Umschaltung HK's\0"
+"\x03 BA-Umschaltung HK1\0"
+"\x04 BA-Umschaltung HK2\0"
+"\x05 BA-Umschaltung HKP\0"
+"\x06 Erzeugersperre\0"
+"\x07 Fehler- / Alarmmeldung\0"
+"\x08 Minimaler Vorlaufsollwert\0"
+"\x09 Übertemperaturableitung\0"
+"\x0a Freigabe Schwimmbad\0"
+"\x0d Wärmeanforderung 10V\0"
+"\x0e Druckmessung 10V"};
+
+const char ENUM5951[] PROGMEM = {"\x00 Ruhekontakt\0\x01 Arbeitskontakt"};
+#define ENUM5960 ENUM5950
+#define ENUM5961 ENUM5951
+const char ENUM5982[] PROGMEM = {
+"\x01 Zähler 2.Brennerstufe\0"
+"\x02 Erzeugersperre\0"
+"\x03 Fehler- / Alarmmeldung\0"
+"\x04 STB Fehlermeldung\0"
+"\x05 Übertemperaturableitung"};
+
+#define ENUM5983 ENUM5951
+
+const char ENUM6014[] PROGMEM = {
+"\x01 Heizkreis 1\0"
+"\x03 Vorregler / Zubringerpumpe\0"
+"\x04 Trinkwasser Vorregler\0"
+"\x05 Trinkwasser Durchl'erhitzer\0"
+"\x06 Rücklaufregler Kaskade"};
+
+const char ENUM6020[] PROGMEM = {
+"\x00 Keine Funktion\0"
+"\x01 Multifunktional\0"
+"\x02 Heizkreis 2\0"
+"\x03 Rücklaufregler\0"
+"\x04 Solar Trinkwasser\0"
+"\x05 Vorregler / Zubringerpumpe\0"
+"\x06 Trinkwasser Vorregler\0"
+"\x07 Trinkwasser Durchl'erhitzer\0"
+"\x08 Rücklaufregler Kaskade"};
+
+#define ENUM6021 ENUM6020
+
+const char ENUM6604[] PROGMEM = {
+"\x00 Aus\0"
+"\x01 Automatisch"
+};
+
+const char ENUM6620[] PROGMEM = {
+"\x00 Segment\0"
+"\x01 System"
+};
+
+const char ENUM6621[] PROGMEM = {
+"\x00 Lokal\0"
+"\x01 Zentral"
+};
+
+const char ENUM6625[] PROGMEM = {
+"\x00 Lokale Heizkreise\0"
+"\x01 Alle Heizkreise im Segment\0"
+"\x02 Alle Heizkreise im System"
+};
+
+const char ENUM6640[] PROGMEM = {
+"\x00 Autonom\0"
+"\x01 Slave ohne Fernverstellung\0"
+"\x02 Slave mit Fernverstellung\0"
+"\x03 Master"
+};
+
+const char ENUM7700[] PROGMEM = {
+"\x00 Kein Test\0"
+"\x01 Alles aus\0"
+"\x02 ---\0"
+"\x03 ---\0"
+"\x04 Trinkwasserpumpe Q3\0"
+"\x05 Heizkreispumpe Q2\0"
+"\x06 Heizkreismischer Auf Y1\0"
+"\x07 Heizkreismischer Zu Y2\0"
+"\x08 Heizkreispumpe Q6\0"
+"\x09 Heizkreismischer Auf Y5\0"
+"\x0a Heizkreismischer Zu Y6\0"
+"\x0b Relaisausgang QX1\0"
+"\x0c Relaisausgang QX2\0"
+"\x0d Relaisausgang QX3\0"
+"\x0e Relaisausgang QX4\0"
+"\x0f Relaisausgang QX21 Modul 1\0"
+"\x10 Relaisausgang QX22 Modul 1\0"
+"\x11 Relaisausgang QX23 Modul 1\0"
+"\x12 Relaisausgang QX21 Modul 2\0"
+"\x13 Relaisausgang QX22 Modul 2\0"
+"\x14 Relaisausgang QX23 Modul 2"
+};
+
+//Status Heizkreis
+const char ENUM8000[] PROGMEM = {
+"\x00 ---\0"
+"\x03 Wächter angesprochen\0"
+"\x04 Handbetrieb aktiv\0"
+"\x11 Nachlauf aktiv\0"
+"\x16 Anlagenfrostschutz aktiv\0"
+"\x17 Frostschutz aktiv\0"
+"\x18 Aus\0"
+"\x38 Überhitzschutz aktiv\0"
+"\x65 Raumfrostschutz aktiv\0"
+"\x66 Estrichfunktion aktiv\0"
+"\x67 Eingeschränkt, Kesselschutz\0"
+"\x68 Eingeschränkt, TWW-Vorrang\0"
+"\x69 Eingeschränkt, Puffer\0"
+"\x6a Heizbetrieb eingeschränkt\0"
+"\x6b Zwangsabnahme Puffer\0"
+"\x6c Zwangsabnahme TWW\0"
+"\x6d Zwangsabnahme Erzeuger\0"
+"\x6e Zwangsabnahme\0"
+"\x6f Einschaltopt + Schnellaufheiz\0"
+"\x70 Einschaltoptimierung\0"
+"\x71 Schnellaufheizung\0"
+"\x72 Heizbetrieb Komfort\0"
+"\x73 Ausschaltoptimierung\0"
+"\x74 Heizbetrieb Reduziert\0"
+"\x75 Vorlauffrostschutz aktiv\0"
+"\x76 Sommerbetrieb\0"
+"\x77 Tages-Eco aktiv\0"
+"\x78 Absenkung Reduziert\0"
+"\x79 Absenkung Frostschutz\0"
+"\x7a Raumtemp’begrenzung"};
+
+#define ENUM8001 ENUM8000
+#define ENUM8002 ENUM8000
+
+
+//Status Trinkwasser
+const char ENUM8003[] PROGMEM = {
+"\x00 ---\0"
+"\x03 Wächter angesprochen\0"
+"\x04 Handbetrieb aktiv\0"
+"\x11 Nachlauf aktiv\0"
+"\x18 Frostschutz aktiv\0"
+"\x19 Aus\0"
+"\x35 Rückkühlung aktiv\0"
+"\x42 Ladung Elektroeinsatz\0"
+"\x43 Zwangsladung aktiv\0"
+"\x45 Ladung aktiv\0"
+"\x46 Geladen, Max Speichertemp\0"
+"\x47 Geladen, Max Ladetemp\0"
+"\x4b Geladen\0"
+"\x4d Rückkühlung via Kollektor\0"
+"\x4e Rückkühlung via Erz / Hk's\0"
+"\x4f Entladeschutz aktiv\0"
+"\x50 Ladezeitbegrenzung aktiv\0"
+"\x51 Ladung gesperrt\0"
+"\x52 Ladesperre aktiv\0"
+"\x53 Zwang, Max Speichertemp\0"
+"\x54 Zwang, Max Ladetemperatur\0"
+"\x55 Zwang, Legionellensollwert\0"
+"\x56 Zwang, Nennsollwert\0"
+"\x57 Ladung Elektro, Leg’sollwert\0"
+"\x58 Ladung Elektro, Nennsollwert\0"
+"\x59 Ladung Elektro, Red’sollwert\0"
+"\x5a Ladung Elektro, Fros’sollwert\0"
+"\x5b Elektroeinsatz freigegeben\0"
+"\x5c Push, Legionellensollwert\0"
+"\x5d Push, Nennsollwert\0"
+"\x5e Push aktiv\0"
+"\x5f Ladung, Legionellensollwert\0"
+"\x60 Ladung, Nennsollwert\0"
+"\x61 Ladung, Reduziertsollwert\0"
+"\x62 Geladen, Legio’temperatur\0"
+"\x63 Geladen, Nenntemperatur\0"
+"\x64 Geladen, Reduz’temperatur\0"
+"\xc7 Zapfbetrieb\0"
+"\xc8 Bereit\0"
+"\xc9 Bereitschaftsladung"
+};
+
+//Status Kessel
+const char ENUM8005[] PROGMEM = {
+"\x00 ---\0"
+"\x01 STB angesprochen\0"
+"\x02 Störung\0"
+"\x03 Wächter angesprochen\0"
+"\x04 Handbetrieb aktiv\0"
+"\x05 Schornsteinfegerfkt, Vollast\0"
+"\x06 Schornsteinfegerfkt, Teillast\0"
+"\x07 Schornsteinfegerfkt aktiv\0"
+"\x08 Gesperrt, Manuell\0"
+"\x09 Gesperrt, Automatisch\0"
+"\x0a Gesperrt\0"
+"\x0b Anfahrentlastung\0"
+"\x0c Anfahrentlastung, Teillast\0"
+"\x0d Rückl’begrenzung\0"
+"\x0e Rückl’begrenzung, Teillast\0"
+"\x11 Nachlauf aktiv\0"
+"\x12 In Betrieb\0"
+"\x13 Freigegeben\0"
+"\x14 Minimalbegrenzung\0"
+"\x15 Minimalbegrenzung, Teillast\0"
+"\x16 Minimalbegrenzung aktiv\0"
+"\x17 Anlagenfrostschutz aktiv\0"
+"\x18 Frostschutz aktiv\0"
+"\x19 Aus\0"
+"\x3b Ladung Pufferspeicher\0"
+"\x7b STB Test aktiv\0"
+"\xa6 In Betrieb für Heizkreis\0"
+"\xa7 In Teillastbetrieb für HK\0"
+"\xa8 In Betrieb für Trinkwasser\0"
+"\xa9 In Teillastbetrieb für TWW\0"
+"\xaa In Betrieb für HK, TWW\0"
+"\xab In Teillastbetrieb für HK, TWW\0"
+"\xac Gesperrt, Feststoffkessel\0"
+"\xad Freigegeben für HK, TWW\0"
+"\xae Freigeben für TWW\0"
+"\xaf Freigegeben für HK\0"
+"\xb0 Gesperrt, Außentemperatur\0"
+"\xc6 Gesperrt, Ökobetrieb"};
+
+//Status Solar
+const char ENUM8007[] PROGMEM = {
+"\x00 ---\0"
+"\x04 Handbetrieb aktiv\0"
+"\x02 Störung\0"
+"\x34 Kollektorfrostschutz aktiv\0"
+"\x35 Rückkühlung aktiv\0"
+"\x36 Max Speichertemp erreicht\0"
+"\x37 Verdampfungsschutz aktiv\0"
+"\x38 Überhitzschutz aktiv\0"
+"\x39 Max Ladetemp erreicht\0"
+"\x3a Ladung Trinkwasser\0"
+"\x3b Ladung Pufferspeicher\0"
+"\x3c Ladung Schwimmbad\0"
+"\x3d Min Ladetemp nicht erreicht\0"
+"\x3e Temp’differenz ungenügend\0"
+"\x3f Einstrahlung ungenügend\0"
+"\x97 Lad'ng TWW + Puffer + Sch'bad\0"
+"\x98 Ladung Trinkwasser + Puffer\0"
+"\x99 Ladung Trinkwasser + Sch'bad\0"
+"\x9a Ladung Puffer + Schwimmbad"
+};
+
+
+//Status Feststoffkessel
+const char ENUM8008[] PROGMEM = {
+"\x00 ---\0"
+"\x04 Handbetrieb aktiv\0"
+"\x02 Störung\0"
+"\x08 Gesperrt, Manuell\0"
+"\x09 Gesperrt, Automatisch\0"
+"\x0a Gesperrt\0"
+"\x0b Anfahrentlastung\0"
+"\x0c Anfahrentlastung, Teillast\0"
+"\x0d Rücklaufbegrenzung\0"
+"\x0e Rücklaufbegrenzung, Teillast\0"
+"\x11 Nachlauf aktiv\0"
+"\x12 In Betrieb\0"
+"\x13 Freigegeben\0"
+"\x14 Minimalbegrenzung\0"
+"\x15 Minimalbegrenzung, Teillast\0"
+"\x16 Minimalbegrenzung aktiv\0"
+"\x17 Anlagenfrostschutz aktiv\0"
+"\x18 Frostschutz aktiv\0"
+"\x19 Aus\0"
+"\x38 Überhitzschutz aktiv\0"
+"\x8d Kesselfrostschutz aktiv\0"
+"\xa3 Anfeuerungshilfe aktiv\0"
+"\xa6 In Betrieb für Heizkreis\0"
+"\xa7 In Teillastbetrieb für HK\0"
+"\xa8 In Betrieb für Trinkwasser\0"
+"\xa9 In Teillastbetrieb für TWW\0"
+"\xaa In Betrieb für HK, TWW\0"
+"\xab In Teillastbetrieb für HK, TWW"
+};
+
+//Status Pufferspeicher
+const char ENUM8010[] PROGMEM = {
+"\x00 ---\0"
+"\x18 Frostschutz aktiv\0"
+"\x33 Keine Wärmeanforderung\0"
+"\x35 Rückkühlung aktiv\0"
+"\x40 Ladung Elektro, Notbetrieb\0"
+"\x41 Ladung Elektro, Quell’schutz\0"
+"\x42 Ladung Elektroeinsatz\0"
+"\x43 Zwangsladung aktiv\0"
+"\x44 Teilladung aktiv\0"
+"\x45 Ladung aktiv\0"
+"\x46 Geladen, Max Speichertemp\0"
+"\x47 Geladen, Max Ladetemp\0"
+"\x48 Geladen, Zwanglad Solltemp\0"
+"\x49 Geladen, Solltemperatur\0"
+"\x4a Teilgeladen, Solltemperatur\0"
+"\x4b Geladen\0"
+"\x4c Kalt\0"
+"\x4d Rückkühlung via Kollektor\0"
+"\x51 Ladung gesperrt\0"
+"\x68 Eingeschränkt, TWW-Vorrang\0"
+"\x7c Ladung eingeschränkt\0"
+"\x83 Ladung Elektro, Abtauen\0"
+"\x87 Sperrdauer nach Heizen\0"
+"\x8e Rückkühlung via TWW / Hk’s\0"
+"\x8f Geladen, Min Ladetemp\0"
+"\x93 Warm\0"
+"\xa4 Ladung Elektro, Zwang\0"
+"\xa5 Ladung Elektro, Ersatz\0"
+"\xca Frostschutz Kühlen aktiv\0"
+"\xcb Durchladung aktiv"
+};
+
+/* SPECIAL ENUM tables */
+//Fehlercodes
+const char ENUM_ERROR[] PROGMEM = {
+"\x00 kein Fehler\0"
+"\x0a Außentemperatur Fühlerfehler\0"
+"\x14 Kesseltemperatur 1 Fühlerfehler\0"
+"\x19 Feststoffkesseltemperatur (Holz) Fühlerfehler\0"
+"\x1a Gemeinsame Vorlauftemperatur Fühlerfehler\0"
+"\x1c Rauch- / Abgastemperatur Fühlerfehler\0"
+"\x1e Vorlauftemperatur 1 Fühlerfehler\0"
+"\x1f Vorlauftemperatur 1 Kühlen Fühlerfehler\0"
+"\x20 Vorlauftemperatur 2 Fühlerfehler\0"
+"\x26 Vorlauftemperatur Vorregler Fühlerfehler\0"
+"\x28 Rücklauftemperatur 1 Fühlerfehler\0"
+"\x2e Rücklauftemperatur Kaskade Fühlerfehler\0"
+"\x2f Gemeinsame Rücklauftemperatur Fühlerfehler\0"
+"\x32 Trinkwassertemperatur 1 Fühlerfehler\0"
+"\x34 Trinkwassertemperatur 2 Fühlerfehler\0"
+"\x36 TWW-Vorregler Fühlerfehler\0"
+"\x39 TWW-Zirkulationstemperatur Fühlerfehler\0"
+"\x3c Raumtemperatur 1 Fühlerfehler\0"
+"\x41 Raumtemperatur 2 Fühlerfehler\0"
+"\x44 Raumtemperatur 3 Fühlerfehler\0"
+"\x46 Pufferspeichertemperatur 1 Fühlerfehler\0"
+"\x47 Pufferspeichertemperatur 2 Fühlerfehler\0"
+"\x48 Pufferspeichertemperatur 3 Fühlerfehler\0"
+"\x49 Kollektortemperatur 1 Fühlerfehler\0"
+"\x4a Kollektortemperatur 2 Fühlerfehler\0"
+"\x51 LPB-Kurzschluss\0"
+"\x52 LPB-Adresskollision\0"
+"\x53 BSB-Draht Kurzschluss\0"
+"\x54 BSB-Adresskollision\0"
+"\x55 BSB-Funk Kommunikationsfehler\0"
+"\x62 Erweiterungsmodul 1 Fehler (Sammelfehler)\0"
+"\x63 Erweiterungsmodul 2 Fehler (Sammelfehler)\0"
+"\x64 Zwei Uhrzeitmaster (LPB)\0"
+"\x66 Uhrzeitmaster ohne Gangreserve (LPB)\0"
+"\x69 Wartungsmeldung\0"
+"\x6d Kesseltemperatur Überwachung\0"
+"\x6e STB Störabschaltung\0"
+"\x75 Obere Druckgrenze (überschritten)\0"
+"\x76 Kritische untere Druckgrenze (unterschritten)\0"
+"\x79 Vorlauftemperatur 1 (Hk1) Überwachung\0"
+"\x7a Vorlauftemperatur 2 (Hk2) Überwachung\0"
+"\x7e Trinkwasser-Ladeüberwachung\0"
+"\x7f Legionellentemperatur nicht erreicht\0"
+"\x83 Brennerstörung\0"
+"\x92 Konfigurationsfehler Sammelmeldung\0"
+"\xab Alarmkontakt 1 (H1) aktiv\0"
+"\xac Alarmkontakt 2 (H2) aktiv\0"
+"\xad Alarmkontakt 3 (EX2 / 230 VAC) aktiv\0"
+"\xae Alarmkontakt 4 (H3) aktiv\0"
+"\xb0 Obere Druckgrenze 2 (überschritten)\0"
+"\xb1 Kritische untere Druckgrenze 2 (unterschritten)\0"
+"\xb2 Temperaturwächter Heizkreis 1\0"
+"\xb3 Temperaturwächter Heizkreis 2\0"
+"\xcf Störung Kühlkreis\0"
+"\xd9 Fühler- / Sensorfehler Sammelmeldung\0"
+"\xd9 Fühler- / Sensorfehler Sammelmeldung\0"
+"\xda Drucküberwachung Sammelmeldung\0"
+"\xf1 Vorlauffühler Solar Fühlerfehler\0"
+"\xf2 Rücklauffühler Solar Fühlerfehler\0"
+"\xf3 Schwimmbadtemperatur Fühlerfehler\0"
+"\x1\x40 TWW Ladetemperatur Fühlerfehler\0"
+"\x1\x41 Durchl’erhitzer Zapftemperatur Fühlerfehler\0"
+"\x1\x42 Obere Druckgrenze 3 (überschritten)\0"
+"\x1\x43 Kritische untere Druckgrenze 3 (unterschritten)\0"
+"\x1\x44 BX gleiche Fühler\0"
+"\x1\x45 BX/Erweiterungsmodul gleiche Fühler\0"
+"\x1\x46 BX/Mischergruppe gleiche Fühler\0"
+"\x1\x47 Erweiterungsmodul gleiche Funktion\0"
+"\x1\x48 Mischergruppe gleiche Funktion\0"
+"\x1\x49 Erweit’modul / Mischergruppe gleiche Funktion\0"
+"\x1\x4a Fühler BX1 keine Funktion\0"
+"\x1\x4b Fühler BX2 keine Funktion\0"
+"\x1\x4c Fühler BX3 keine Funktion\0"
+"\x1\x4d Fühler BX4 keine Funktion\0"
+"\x1\x4e Fühler BX5 keine Funktion\0"
+"\x1\x4f Fühler BX21 keine Funktion\0"
+"\x1\x50 Fühler BX22 keine Funktion\0"
+"\x1\x51 Fühler BX1 keine Funktion\0"
+"\x1\x52 Fühler BX12 keine Funktion\0"
+"\x1\x53 Kollektorpumpe Q5 fehlt\0"
+"\x1\x54 Kollektorpumpe Q16 fehlt\0"
+"\x1\x55 Kollektorfühler B6 fehlt\0"
+"\x1\x56 Solar TWW-Fühler B31 fehlt\0"
+"\x1\x57 Solareinbindung fehlt\0"
+"\x1\x58 Solarstellglied Puffer K8 fehlt\0"
+"\x1\x59 Solarstellglied Schwimmbad K18 fehlt\0"
+"\x1\x5a Feststoffkesselpumpe Q10 fehlt\0"
+"\x1\x5b Feststoffkessel Vergleichsfühler fehlt\0"
+"\x1\x5c Feststoffkessel Adressfehler\0"
+"\x1\x5d Pufferrücklaufventil Y15 fehlt\0"
+"\x1\x5e Pufferspeicher Adressfehler\0"
+"\x1\x5f Vorregler / Zubringerpumpe Adressfehler\0"
+"\x1\x60 Hydraulische Weiche Adressfehler\0"
+"\x1\x61 Kaskadenfühler B10 fehlt\0"
+"\x1\x65 Vorlauftemperatur Kühlkreis 1 Überwachung\0"
+"\x1\x6e Raumtemperatur Hx Fühlerfehler\0"
+"\x1\x6f Relative Raumfeuchte Hx Fühlerfehler"
+};
+
+// Wartungs-Codes
+const char ENUM_WARTUNG[] PROGMEM = {
+"\x01 Brennerbetriebsstunden überschritten\0"
+"\x02 Brennerstarts überschritten\0"
+"\x03 Wartungsintervall überschritten\0"
+"\x05 Wasserdruck Heizkreis zu niedrig (Untere Druckgrenze 1 unterschritten)\0"
+"\x12 Wasserdruck 2 Heizkreis zu niedrig (Untere Druckgrenze 2 unterschritten)\0"
+"\x0a Batterie Außenfühler wechseln\0"
+"\x15 Maximale Abgastemperatur überschritten\0"
+"\x16 Wasserdruck 3 Heizkreis zu niedrig (Untere Druckgrenze 3 unterschritten)"
+};
+
+// Sonderbetriebs-Codes
+const char ENUM_SONDERBETRIEB[] PROGMEM = {
+"\x1\x2d Handbetrieb\0"
+"\x1\x2e STB-Test\0"
+"\x1\x2f Schornsteinfegerfkt\0"
+"\x1\x35 Simulation Außentemp\0"
+"\x1\x36 Alternativenerg"
+};
+
+// Sonderbetriebs-Codes
+const char ENUM_WEEKDAY[] PROGMEM = {
+"\x01 Montag\0"
+"\x02 Dienstag\0"
+"\x03 Mittwoch\0"
+"\x04 Donnerstag\0"
+"\x05 Freitag\0"
+"\x06 Samstag\0"
+"\x07 Sonntag"
+};
+
+/*
+ * Bei der Änderung des Komfortsollwertes durch einfaches Drehen des Rades werden scheinbar die Grenzwerte abgefragt:
+HEIZ->DISP ANS 710 11 - Heizkreis 1 - Komfortsollwert 20.00 °C
+HEIZ->DISP ANS 2D3D05A5 00 08 C0 (35.0°C)
+DC 80 0A 0E 07 2D 3D 05 A5 00 08 C0 3F 7B
+HEIZ->DISP ANS 712 11 - Heizkreis 1 - Reduziertsollwert 15.00 °C
+*/
+
+/*global command table */
+PROGMEM const cmd_t cmdtbl[]={
+// Uhrzeit und Datum
+{0x0500006C, CAT_DATUMZEIT, VT_DATETIME, 0, STR0, 0, NULL}, // [ ] - Uhrzeit und Datum
+{CMD_UNKNOWN, CAT_DATUMZEIT, VT_UNKNOWN, 1, STR1, 0, NULL}, // [hh:mm ] - Uhrzeit und Datum - Stunden/Minuten
+{CMD_UNKNOWN, CAT_DATUMZEIT, VT_UNKNOWN, 2, STR2, 0, NULL}, // [tt:MM ] - Uhrzeit und Datum - Tag/Monat
+{CMD_UNKNOWN, CAT_DATUMZEIT, VT_UNKNOWN, 3, STR3, 0, NULL}, // [jjjj ] - Uhrzeit und Datum - Jahr
+// Sommerzeit scheint im DISP gehandelt zu werden
+// Bei Anzeige werden keine Werte abgefragt. Bei Änderung wird ein INF geschickt.
+// Sommerzeit Beginn 25.3. DISP->ALL INF 0500009E 00 FF 03 19 FF FF FF FF 16
+// Sommerzeit Ende 25.11. DISP->ALL INF 0500009D 00 FF 0B 19 FF FF FF FF 16
+{0x0500009E, CAT_DATUMZEIT, VT_SUMMERPERIOD, 5, STR5, 0, NULL}, // [tt:MM ] - Uhrzeit und Datum - Sommerzeitbeginn Tag/Monat
+{0x0500009D, CAT_DATUMZEIT, VT_SUMMERPERIOD, 6, STR6, 0, NULL}, // [tt.MM ] - Uhrzeit und Datum - Sommerzeitende Tag/Monat
+
+// nur Bedienteil -> keine Kommunikation über BSB
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 20, STR20, 0, NULL}, // [0] - Bedieneinheit - Sprachauswahl
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 22, STR22, 0, NULL}, // [0] - Bedieneinheit - Info
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 23, STR23, 0, NULL}, // Fehleranzeige
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 25, STR25, 0, NULL}, // Anzeigekontrast
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 26, STR26, 0, NULL}, // [0] - Bedieneinheit - Sperre Bedienung
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 27, STR27, 0, NULL}, // [0] - Bedieneinheit - Sperre Programmierung
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 28, STR28, 0, NULL}, // [0] - Bedieneinheit - Bedieneinheit Direktverstellung
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 30, STR30, 0, NULL}, // Bedieneinheit Grundeinstellung sichern
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 31, STR31, 0, NULL}, // Bedieneinheit Grundeinstellung aktivieren
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 40, STR40, 0, NULL}, // Einsatz als
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 42, STR42, 0, NULL}, // Zurodnung Raumgerät 1
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 44, STR44, 0, NULL}, // [0] - Bedieneinheit - Bedienung HK 2
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 46, STR46, 0, NULL}, // [0] - Bedieneinheit - Bedienung HK P
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 48, STR48, 0, NULL}, // Wirkung Präsenztaste
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 54, STR54, 0, NULL}, // Korrektur Raumfühler
+{CMD_UNKNOWN, CAT_BEDIENEINHEIT, VT_UNKNOWN, 70, STR70, 0, NULL}, // [0] - Bedieneinheit - Geraete-Version Bedienteil
+
+// Funk
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 120, STR120, 0, NULL}, // Binding
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 121, STR121, 0, NULL}, // Testmode
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 130, STR130, 0, NULL}, // Raumgerät 1 Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 131, STR131, 0, NULL}, // Raumgerät 2 Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 132, STR132, 0, NULL}, // Raumgerät P Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 133, STR133, 0, NULL}, // Außenfühler P Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 134, STR134, 0, NULL}, // Repeater P Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 135, STR135, 0, NULL}, // Bedieneinheit 1 Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 136, STR136, 0, NULL}, // Bedieneinheit 2 Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 137, STR137, 0, NULL}, // Bedieneinheit P Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 138, STR138, 0, NULL}, // Servicegerät Status
+{CMD_UNKNOWN, CAT_FUNK, VT_UNKNOWN, 140, STR140, 0, NULL}, // Alle Geräte löschen
+
+// Zeitprogramm Heizkreis 1
+// HEIZ->DISP ANS 500 Vorwahl 05 00 15 00 98 00 18 00 98 00 18 00
+// set Mo 1. Heizphase 05:10 -> DISP->HEIZ SET 3D050A8C 05 0A 15 00 80 00 00 00 80 00 00 00
+// set Mo 1. Heizphase 05:00 -> DISP->HEIZ SET 3D050A8C 05 00 15 00 80 00 00 00 80 00 00 00
+/*
+ Für jeden Wochentag können 3 Phasen gesetzt werden. Die Kombinationen Mo-Fr, Mo-So, Sa - So werden nur auf dem Bedienteil angezeigt.
+ 8C = Mo .. 92 = So
+*/
+/* virtuelle Zeilen*/
+{0x053d0a8c, CAT_ZEITPROG_HK1, VT_TIMEPROG, 500, STR500, 0, NULL}, // [0] - Zeitprogramm Heizkreis 1 - Vorwahl
+{0x053d0a8d, CAT_ZEITPROG_HK1, VT_TIMEPROG, 501, STR501, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 1. Phase Ein
+{0x053d0a8e, CAT_ZEITPROG_HK1, VT_TIMEPROG, 502, STR502, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 1. Phase Aus
+{0x053d0a8f, CAT_ZEITPROG_HK1, VT_TIMEPROG, 503, STR503, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 2. Phase Ein
+{0x053d0a90, CAT_ZEITPROG_HK1, VT_TIMEPROG, 504, STR504, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 2. Phase Aus
+{0x053d0a91, CAT_ZEITPROG_HK1, VT_TIMEPROG, 505, STR505, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 3. Phase Ein
+{0x053d0a92, CAT_ZEITPROG_HK1, VT_TIMEPROG, 506, STR506, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 1 - Mo-So: 3. Phase Aus
+{0x053d05b2, CAT_ZEITPROG_HK1, VT_YESNO, 516, STR516, 0, NULL}, // [0] - Zeitprogramm Heizkreis 1 - Standardwerte
+
+// Zeitprogramm Heizkreis 2
+/* virtuelle Zeilen*/
+{0x063d0a8c, CAT_ZEITPROG_HK2, VT_TIMEPROG, 520, STR520, 0, NULL}, // [0] - Zeitprogramm Heizkreis 2 - Vorwahl
+{0x063d0a8d, CAT_ZEITPROG_HK2, VT_TIMEPROG, 521, STR521, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 1. Phase Ein
+{0x063d0a8e, CAT_ZEITPROG_HK2, VT_TIMEPROG, 522, STR522, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 1. Phase Aus
+{0x063d0a8f, CAT_ZEITPROG_HK2, VT_TIMEPROG, 523, STR523, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 2. Phase Ein
+{0x063d0a90, CAT_ZEITPROG_HK2, VT_TIMEPROG, 524, STR524, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 2. Phase Aus
+{0x063d0a91, CAT_ZEITPROG_HK2, VT_TIMEPROG, 525, STR525, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 3. Phase Ein
+{0x063d0a92, CAT_ZEITPROG_HK2, VT_TIMEPROG, 526, STR526, 0, NULL}, // [hh:mm ] - Zeitprogramm Heizkreis 2 - Mo-So: 3. Phase Aus
+{0x063d05b2, CAT_ZEITPROG_HK2, VT_YESNO, 536, STR536, 0, NULL}, // [0] - Zeitprogramm Heizkreis 2 - Standardwerte
+
+// Zeitprogramm 3/HKP
+/* virtuelle Zeilen*/
+{0x073d0a8c, CAT_ZEITPROG_HKP, VT_TIMEPROG, 540, STR540, 0, NULL}, // [0] - Zeitprogramm 3 HKP - Vorwahl
+{0x073d0a8d, CAT_ZEITPROG_HKP, VT_TIMEPROG, 541, STR541, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 1. Phase Ein
+{0x073d0a8e, CAT_ZEITPROG_HKP, VT_TIMEPROG, 542, STR542, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 1. Phase Aus
+{0x073d0a8f, CAT_ZEITPROG_HKP, VT_TIMEPROG, 543, STR543, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 2. Phase Ein
+{0x073d0a90, CAT_ZEITPROG_HKP, VT_TIMEPROG, 544, STR544, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 2. Phase Aus
+{0x073d0a91, CAT_ZEITPROG_HKP, VT_TIMEPROG, 545, STR545, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 3. Phase Ein
+{0x073d0a92, CAT_ZEITPROG_HKP, VT_TIMEPROG, 546, STR546, 0, NULL}, // [hh:mm ] - Zeitprogramm 3 HKP - Mo-So: 3. Phase Aus
+{0x073d05b2, CAT_ZEITPROG_HKP, VT_YESNO, 556, STR556, 0, NULL}, // [0] - Zeitprogramm 3 HKP - Standardwerte
+
+// Zeitprogramm 4/TWW
+{0x053d0aa0, CAT_ZEITPROG_TWW, VT_TIMEPROG, 560, STR560, 0, NULL}, // [0] - Zeitprogramm 4 TWW - Vorwahl
+{0x053d0aa1, CAT_ZEITPROG_TWW, VT_TIMEPROG, 561, STR561, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 1. Phase Ein
+{0x053d0aa2, CAT_ZEITPROG_TWW, VT_TIMEPROG, 562, STR562, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 1. Phase Aus
+{0x053d0aa3, CAT_ZEITPROG_TWW, VT_TIMEPROG, 563, STR563, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 2. Phase Ein
+{0x053d0aa4, CAT_ZEITPROG_TWW, VT_TIMEPROG, 564, STR564, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 2. Phase Aus
+{0x053d0aa5, CAT_ZEITPROG_TWW, VT_TIMEPROG, 565, STR565, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 3. Phase Ein
+{0x053d0aa6, CAT_ZEITPROG_TWW, VT_TIMEPROG, 566, STR566, 0, NULL}, // [hh:mm ] - Zeitprogramm 4 TWW - Mo-So: 3. Phase Aus
+{0x053d05b3, CAT_ZEITPROG_TWW, VT_YESNO, 576, STR576, 0, NULL}, // [0] - Zeitprogramm 4 TWW - Standardwerte
+
+// Zeitprogramm 5
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 600, STR600, 0, NULL}, // [0] - Zeitprogramm 5 - Vorwahl
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 601, STR601, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 1. Phase Ein
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 602, STR602, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 1. Phase Aus
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 603, STR603, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 2. Phase Ein
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 604, STR604, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 2. Phase Aus
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 605, STR605, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 3. Phase Ein
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_TIMEPROG, 606, STR606, 0, NULL}, // [hh:mm ] - Zeitprogramm 5 - Mo-So: 3. Phase Aus
+{CMD_UNKNOWN, CAT_ZEITPROG_5, VT_YESNO, 616, STR616, 0, NULL}, // [0] - Zeitprogramm 5 - Standardwerte
+
+/*
+ Es gibt 8 Perioden c4..d3 (jeweils Beginn/Ende).
+ Zeile 641 dient nur zur Vorwahl der Perioden auf dem Bedienteil.
+ Die Parameter scheinen VT_DATETIME ähnlich zu sein.
+ 1. Byte:
+ Bei RX 00=enabled 01=disabled
+ Bei TX 06=enable 05=disable
+ byte 3 Monat
+ byte 4 Tag
+ byte 17=0x17
+ alle anderen Bytes sind 0
+ z.B.:
+ DISP->HEIZ SET 3D0509C6 06 00 02 0A 00 00 00 00 17
+ Periode 2 Ende: DC 80 0A 14 07 05 3D 09 C6 01 00 01 01 00 00 00 00 17 0C 38
+*/
+// Ferien Heizkreis 1
+/* virtuelle Zeilen*/
+{0x053d09c4, CAT_FERIEN_HK1, VT_VACATIONPROG, 632, STR632, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 1 Beginn Tag/Monat
+{0x053d09c5, CAT_FERIEN_HK1, VT_VACATIONPROG, 633, STR633, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 1 Ende Tag/Monat
+{0x053d09c6, CAT_FERIEN_HK1, VT_VACATIONPROG, 634, STR634, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 2 Beginn Tag/Monat
+{0x053d09c7, CAT_FERIEN_HK1, VT_VACATIONPROG, 635, STR635, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 2 Ende Tag/Monat
+{0x053d09c8, CAT_FERIEN_HK1, VT_VACATIONPROG, 636, STR636, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 3 Beginn Tag/Monat
+{0x053d09c9, CAT_FERIEN_HK1, VT_VACATIONPROG, 637, STR637, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 3 Ende Tag/Monat
+{0x053d09ca, CAT_FERIEN_HK1, VT_VACATIONPROG, 638, STR638, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 4 Beginn Tag/Monat
+{0x053d09cb, CAT_FERIEN_HK1, VT_VACATIONPROG, 639, STR639, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 4 Ende Tag/Monat
+{0x053d09cc, CAT_FERIEN_HK1, VT_VACATIONPROG, 640, STR640, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 5 Beginn Tag/Monat
+{0x053d09cd, CAT_FERIEN_HK1, VT_VACATIONPROG, 641, STR641, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 5 Ende Tag/Monat
+{0x053d09ce, CAT_FERIEN_HK1, VT_VACATIONPROG, 642, STR642, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 6 Beginn Tag/Monat
+{0x053d09cf, CAT_FERIEN_HK1, VT_VACATIONPROG, 643, STR643, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 6 Ende Tag/Monat
+{0x053d09d0, CAT_FERIEN_HK1, VT_VACATIONPROG, 644, STR644, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 7 Beginn Tag/Monat
+{0x053d09d1, CAT_FERIEN_HK1, VT_VACATIONPROG, 645, STR645, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 7 Ende Tag/Monat
+{0x053d09d2, CAT_FERIEN_HK1, VT_VACATIONPROG, 646, STR646, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 8 Beginn Tag/Monat
+{0x053d09d3, CAT_FERIEN_HK1, VT_VACATIONPROG, 647, STR647, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Periode 8 Ende Tag/Monat
+{0x2d3d04c2, CAT_FERIEN_HK1, VT_ENUM, 648, STR648, sizeof(ENUM648), ENUM648}, // [0] - Ferienheizkreis 1 - Betriebsniveau
+// Ferien Heizkreis 2
+/* virtuelle Zeilen*/
+{0x063d09c4, CAT_FERIEN_HK2, VT_VACATIONPROG, 649, STR649, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 1 Beginn Tag/Monat
+{0x063d09c5, CAT_FERIEN_HK2, VT_VACATIONPROG, 650, STR650, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 1 Ende Tag/Monat
+{0x063d09c6, CAT_FERIEN_HK2, VT_VACATIONPROG, 651, STR651, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 2 Beginn Tag/Monat
+{0x063d09c7, CAT_FERIEN_HK2, VT_VACATIONPROG, 652, STR652, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 2 Ende Tag/Monat
+{0x063d09c8, CAT_FERIEN_HK2, VT_VACATIONPROG, 653, STR653, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 3 Beginn Tag/Monat
+{0x063d09c9, CAT_FERIEN_HK2, VT_VACATIONPROG, 654, STR654, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 3 Ende Tag/Monat
+{0x063d09ca, CAT_FERIEN_HK2, VT_VACATIONPROG, 655, STR655, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 4 Beginn Tag/Monat
+{0x063d09cb, CAT_FERIEN_HK2, VT_VACATIONPROG, 656, STR656, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 4 Ende Tag/Monat
+{0x063d09cc, CAT_FERIEN_HK2, VT_VACATIONPROG, 657, STR657, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 5 Beginn Tag/Monat
+{0x063d09cd, CAT_FERIEN_HK2, VT_VACATIONPROG, 658, STR658, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 5 Ende Tag/Monat
+{0x063d09ce, CAT_FERIEN_HK2, VT_VACATIONPROG, 659, STR659, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 6 Beginn Tag/Monat
+{0x063d09cf, CAT_FERIEN_HK2, VT_VACATIONPROG, 660, STR660, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 6 Ende Tag/Monat
+{0x063d09d0, CAT_FERIEN_HK2, VT_VACATIONPROG, 661, STR661, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 7 Beginn Tag/Monat
+{0x063d09d1, CAT_FERIEN_HK2, VT_VACATIONPROG, 662, STR662, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 7 Ende Tag/Monat
+{0x063d09d2, CAT_FERIEN_HK2, VT_VACATIONPROG, 663, STR663, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 8 Beginn Tag/Monat
+{0x063d09d3, CAT_FERIEN_HK2, VT_VACATIONPROG, 664, STR664, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 - Periode 8 Ende Tag/Monat
+{0x2e3d04c2, CAT_FERIEN_HK2, VT_ENUM, 665, STR665, sizeof(ENUM665), ENUM665}, // [0] - Ferienheizkreis 2 - Betriebsniveau
+// Ferien Heizkreis P
+/* virtuelle Zeilen*/
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 666, STR666, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 1 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 667, STR667, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 1 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 668, STR668, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 2 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 669, STR669, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 2 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 670, STR670, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 3 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 671, STR671, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 3 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 672, STR672, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 4 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 673, STR673, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 4 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 674, STR674, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 5 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 675, STR675, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 5 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 676, STR676, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 6 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 677, STR677, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 6 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 678, STR678, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 7 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 679, STR679, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 7 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 680, STR680, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 8 Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_VACATIONPROG, 681, STR681, 0, NULL}, // [tt.MM ] - Ferienheizkreis P - Periode 8 Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_ENUM, 682, STR682, sizeof(ENUM682), ENUM682}, // [0] - Ferienheizkreis P - Betriebsniveau
+/*
+{CMD_UNKNOWN, CAT_FERIEN_HK1, VT_UNKNOWN, 641, STR641, 0, NULL}, // [0] - Ferienheizkreis 1 - Vorwahl
+{0x053d09c4, CAT_FERIEN_HK1, VT_VACATIONPROG, 642, STR642, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Beginn Tag/Monat
+{0x053d09c5, CAT_FERIEN_HK1, VT_UNKNOWN, 643, STR643, 0, NULL}, // [tt.MM ] - Ferienheizkreis 1 - Ende Tag/Monat
+{0x2d3d04c2, CAT_FERIEN_HK1, VT_ENUM, 648, STR648, sizeof(ENUM648), ENUM648}, // [0] - Ferienheizkreis 1 - Betriebsniveau
+
+// Ferien Heizkreis 2
+{CMD_UNKNOWN, CAT_FERIEN_HK2, VT_UNKNOWN, 651, STR651, 0, NULL}, // [0] - Ferienheizkreis 2 (nur wenn aktiviert) - Vorwahl
+{0x063d09c4, CAT_FERIEN_HK2, VT_UNKNOWN, 652, STR652, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 (nur wenn aktiviert) - Beginn Tag/Monat
+{0x063d09c5, CAT_FERIEN_HK2, VT_UNKNOWN, 653, STR653, 0, NULL}, // [tt.MM ] - Ferienheizkreis 2 (nur wenn aktiviert) - Ende Tag/Monat
+{0x2e3d04c2, CAT_FERIEN_HK2, VT_UNKNOWN, 658, STR658, sizeof(ENUM658), ENUM658}, // [0] - Ferienheizkreis 2 (nur wenn aktiviert) - Betriebsniveau
+
+// Ferien Heizkreis P
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 661, STR661, 0, NULL}, // [0] - Ferienheizkreis P (nur wenn aktiviert) - Vorwahl
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 662, STR662, 0, NULL}, // [tt.MM ] - Ferienheizkreis P (nur wenn aktiviert) - Beginn Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 663, STR663, 0, NULL}, // [tt.MM ] - Ferienheizkreis P (nur wenn aktiviert) - Ende Tag/Monat
+{CMD_UNKNOWN, CAT_FERIEN_HKP, VT_UNKNOWN, 668, STR668, sizeof(ENUM668), ENUM668}, // [0] - Ferienheizkreis P (nur wenn aktiviert) - Betriebsniveau
+*/
+
+// Heizkreis 1
+{0x2D3D0574, CAT_HK1, VT_ENUM, 700, STR700, sizeof(ENUM700), ENUM700}, // [-] - Heizkreis 1 - Betriebsart ***(virtuelle Zeile)***
+{0x2d3d058e, CAT_HK1, VT_TEMP, 710, STR710, 0, NULL}, // [°C ] - Heizkreis 1 - Komfortsollwert
+//HEIZ->DISP ANS 2D3D05A5 00 08 C0 (35.0°C)
+// line not in menue!
+/* virtuelle Zeile*/
+{0x2D3D05A5, CAT_HK1, VT_TEMP, 711, STR711, 0, NULL}, // [°C ] - Heizkreis 1 - Komfortsollwert Max
+{0x2d3d0590, CAT_HK1, VT_TEMP, 712, STR712, 0, NULL}, // [°C ] - Heizkreis 1 - Reduziertsollwert
+{0x2d3d0592, CAT_HK1, VT_TEMP, 714, STR714, 0, NULL}, // [°C ] - Heizkreis 1 - Frostschutzsollwert
+{0x2d3d05f6, CAT_HK1, VT_FP02, 720, STR720, 0, NULL}, // [0] - Heizkreis 1 - Kennlinie Steilheit
+{0x2d3d0610, CAT_HK1, VT_TEMP, 721, STR721, 0, NULL}, // [°C ] - Heizkreis 1 - Kennlinie Verschiebung
+{0x2d3d060b, CAT_HK1, VT_ONOFF, 726, STR726, 0, NULL}, // [] - Heizkreis 1 - Kennlinie Adaption
+{0x2d3d05fd, CAT_HK1, VT_TEMP, 730, STR730, 0, NULL}, // [°C ] - Heizkreis 1 - Sommer-/ Winterheizgrenze
+{0x2d3d0640, CAT_HK1, VT_TEMP, 732, STR732, 0, NULL}, // [°C ] - Heizkreis 1 - Tagesheizgrenze
+{0x213d0663, CAT_HK1, VT_TEMP, 740, STR740, 0, NULL}, // [°C ] - Heizkreis 1 - Vorlaufsollwert Minimum
+{0x213d0662, CAT_HK1, VT_TEMP, 741, STR741, 0, NULL}, // [°C ] - Heizkreis 1 - Vorlaufsollwert Maximum
+{0x2d3d0603, CAT_HK1, VT_PERCENT, 750, STR750, 0, NULL}, // [% ] - Heizkreis 1 - Raumeinfluss
+{0x2d3d0614, CAT_HK1, VT_TEMP, 760, STR760, 0, NULL}, // [°C ] - Heizkreis 1 - Raumtemperaturbegrenzung
+{0x2d3d0602, CAT_HK1, VT_TEMP, 770, STR770, 0, NULL}, // [°C ] - Heizkreis 1 - Schnellaufheizung
+{0x2d3d05e8, CAT_HK1, VT_ENUM, 780, STR780, sizeof(ENUM780), ENUM780}, // [-] - Heizkreis 1 - Schnellabsenkung
+{0x2d3d0607, CAT_HK1, VT_MINUTES, 790, STR790, 0, NULL}, // [Min ] - Heizkreis 1 - Einschalt-Optimierung Max.
+{0x2d3d0609, CAT_HK1, VT_MINUTES, 791, STR791, 0, NULL}, // [Min ] - Heizkreis 1 - Ausschalt-Optimierung Max.
+{0x2d3d059e, CAT_HK1, VT_TEMP, 800, STR800, 0, NULL}, // [°C ] - Heizkreis 1 - Reduziert-Anhebung Begin
+{0x2d3d059d, CAT_HK1, VT_TEMP, 801, STR801, 0, NULL}, // [°C ] - Heizkreis 1 - Reduziert-Anhebung Ende
+{0x213D0674, CAT_HK1, VT_ONOFF, 820, STR820, 0, NULL}, // [ - ] - Heizkreis 1 - Überhitzschutz Pumpenkreis
+{0x213D065D, CAT_HK1, VT_TEMP, 830, STR830, 0, NULL}, // [°C ] - Heizkreis 1 - Mischerüberhöhung
+{0x2d3d067b, CAT_HK1, VT_ENUM, 850, STR850, sizeof(ENUM850), ENUM850}, // [-] - Heizkreis 1 - Estrichfunktion
+{0x2d3d068a, CAT_HK1, VT_TEMP, 851, STR851, 0, NULL}, // [°C ] - Heizkreis 1 - Estrich sollwert manuell
+{0x213D08C9, CAT_HK1, VT_ENUM, 861, STR861, sizeof(ENUM861), ENUM861}, // [0] - Heizkreis 1 - Übertemperaturabnahme
+{0x2D3D07C4, CAT_HK1, VT_YESNO, 870, STR870, 0, NULL}, // [0] - Heizkreis 1 - Mit Pufferspeicher
+{0x2D3D07C5, CAT_HK1, VT_YESNO, 872, STR872, 0, NULL}, // [0] - Heizkreis 1 - Mit Vorregler/Zubring`pumpe
+{CMD_UNKNOWN, CAT_HK1, VT_UNKNOWN, 882, STR882, 0, NULL}, // Pumpendrehzahl Minimum
+{CMD_UNKNOWN, CAT_HK1, VT_UNKNOWN, 883, STR883, 0, NULL}, // Pumpendrehzahl Maximum
+{0x053D07BE, CAT_HK1, VT_ENUM, 900, STR900, sizeof(ENUM900), ENUM900}, // [0] - Heizkreis 1 - Betriebsartumschaltung
+
+// Kühlkreis 1
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 901, STR901, 0, NULL}, // Betriebsart
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 902, STR902, 0, NULL}, // Komfortsollwert
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 907, STR907, 0, NULL}, // Freigabe
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 908, STR908, 0, NULL}, // Vorlaufsollwert bei TA 25 °C
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 909, STR909, 0, NULL}, // Vorlaufsollwert bei TA 35 °C
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 912, STR912, 0, NULL}, // Kühlgrenze bei TA
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 913, STR913, 0, NULL}, // Sperrdauer nach Heizende
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 918, STR918, 0, NULL}, // Sommerkomp Beginn bei TA
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 919, STR919, 0, NULL}, // Sommerkomp Ende bei TA
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 920, STR920, 0, NULL}, // Sommerkomp Sollw’anhebung
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 923, STR923, 0, NULL}, // Vorlaufsollwert Min bei TA 25 °C
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 924, STR924, 0, NULL}, // Vorlaufsollwert Min bei TA 35 °C
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 928, STR928, 0, NULL}, // Raumeinfluss
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 932, STR932, 0, NULL}, // Raumtemperaturbegrenzung
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 938, STR938, 0, NULL}, // Mischerunterkühlung
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 939, STR939, 0, NULL}, // Antrieb Typ
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 940, STR940, 0, NULL}, // Schaltdifferenz 2-Punkt
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 941, STR941, 0, NULL}, // Antrieb Laufzeit
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 945, STR945, 0, NULL}, // Mischventil im Heizbetrieb
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 946, STR946, 0, NULL}, // Sperrdauer Taupunktwächt
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 947, STR947, 0, NULL}, // Vorlaufsollw’anhebung Hygro
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 948, STR948, 0, NULL}, // Vorl'anhebung Beginn bei r. F.
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 950, STR950, 0, NULL}, // Vorlauftemp'diff Taupunkt
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 962, STR962, 0, NULL}, // Mit Pufferspeicher
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 963, STR963, 0, NULL}, // Mit Vorregler/Zubring'pumpe
+{CMD_UNKNOWN, CAT_KUEHL1, VT_UNKNOWN, 969, STR969, 0, NULL}, // Betriebsartumschaltung
+
+// Heizkreis 2
+{0x2e3d058e, CAT_HK2, VT_TEMP, 1010, STR1010, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Komfortsollwert
+// line not in menue!
+/* virtuelle Zeile*/
+{0x2E3D05A5, CAT_HK2, VT_TEMP, 1011, STR1011, 0, NULL}, // [°C ] - Heizkreis 1 - Komfortsollwert Max
+{0x2e3d0590, CAT_HK2, VT_TEMP, 1012, STR1012, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Reduziertsollwert
+{0x2e3d0592, CAT_HK2, VT_TEMP, 1014, STR1014, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Frostschutzsollwert
+{0x2e3d05f6, CAT_HK2, VT_FP02, 1020, STR1020, 0, NULL}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Kennlinie Steilheit
+{0x2e3d0610, CAT_HK2, VT_TEMP, 1021, STR1021, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Kennlinie Verschiebung
+{0x2e3d060b, CAT_HK2, VT_ONOFF, 1026, STR1026, 0, NULL}, // [] - Heizkreis 2 (nur wenn aktiviert) - Kennlinie Adaption
+{0x2e3d05fd, CAT_HK2, VT_TEMP, 1030, STR1030, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Sommer-/ Winterheizgrenze
+{0x2e3d0640, CAT_HK2, VT_TEMP, 1032, STR1032, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Tagesheizgrenze
+{0x223d0663, CAT_HK2, VT_TEMP, 1040, STR1040, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Vorlaufsollwert Minimum
+{0x223d0662, CAT_HK2, VT_TEMP, 1041, STR1041, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Vorlaufsollwert Maximum
+{0x2e3d0603, CAT_HK2, VT_PERCENT, 1050, STR1050, 0, NULL}, // [% ] - Heizkreis 2 (nur wenn aktiviert) - Raumeinfluss
+{0x2e3d0614, CAT_HK2, VT_TEMP, 1060, STR1060, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Raumtemperaturbegrenzung
+{0x2e3d0602, CAT_HK2, VT_TEMP, 1070, STR1070, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Schnellaufheizung
+{0x2e3d05e8, CAT_HK2, VT_ENUM, 1080, STR1080, sizeof(ENUM1080), ENUM1080}, // [-] - Heizkreis 2 (nur wenn aktiviert) - Schnellabsenkung
+{0x2e3d0607, CAT_HK2, VT_MINUTES, 1090, STR1090, 0, NULL}, // [min] - Heizkreis 2 (nur wenn aktiviert) - Einschalt-Optimierung Max.
+{0x2e3d0609, CAT_HK2, VT_MINUTES, 1091, STR1091, 0, NULL}, // [min] - Heizkreis 2 (nur wenn aktiviert) - Ausschalt-Optimierung Max.
+{0x2e3d059e, CAT_HK2, VT_TEMP, 1100, STR1100, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Reduziert-Anhebung Begin
+{0x2e3d059d, CAT_HK2, VT_TEMP, 1101, STR1101, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Reduziert-Anhebung Ende
+{CMD_UNKNOWN, CAT_HK2, VT_ONOFF, 1120, STR1120, 0, NULL}, // [ - ] - Heizkreis 2 (nur wenn aktiviert) - Überhitzschutz Pumpenkreis
+{0x223d065d, CAT_HK2, VT_TEMP, 1130, STR1130, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Mischerüberhöhung
+{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1132, STR1132, 0, NULL}, // Antrieb Typ
+{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1133, STR1133, 0, NULL}, // Schaltdiffernez 2-Punkt
+{0x2e3d067b, CAT_HK2, VT_ENUM, 1150, STR1150, sizeof(ENUM1150), ENUM1150}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Estrichfunktion
+{0x2e3d068a, CAT_HK2, VT_TEMP, 1151, STR1151, 0, NULL}, // [°C ] - Heizkreis 2 (nur wenn aktiviert) - Estrich sollwert manuell
+{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1156, STR1156, 0, NULL}, // Estrich Tag aktuell
+{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1157, STR1157, 0, NULL}, // Estrich Tag erfüllt
+{CMD_UNKNOWN, CAT_HK2, VT_ENUM, 1161, STR1161, sizeof(ENUM1161), ENUM1161}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Übertemperaturabnahme
+{CMD_UNKNOWN, CAT_HK2, VT_YESNO, 1170, STR1170, 0, NULL}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Mit Pufferspeicher
+{CMD_UNKNOWN, CAT_HK2, VT_YESNO, 1172, STR1172, 0, NULL}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Mit Vorregler/Zubring`pumpe
+{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1182, STR1182, 0, NULL}, // Pumpendrehzahl Minimum
+{CMD_UNKNOWN, CAT_HK2, VT_UNKNOWN, 1183, STR1183, 0, NULL}, // Pumpendrehzahl Maximum
+{CMD_UNKNOWN, CAT_HK2, VT_ENUM, 1200, STR1200, sizeof(ENUM1200), ENUM1200}, // [0] - Heizkreis 2 (nur wenn aktiviert) - Betriebsartumschaltung
+
+// Heizkreis 3/P
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1300, STR1300, 0, NULL}, // Betriebsart
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1310, STR1310, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Komfortsollwert
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1312, STR1312, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Reduziertsollwert
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1314, STR1314, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Frostschutzsollwert
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1320, STR1320, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Kennlinie Steilheit
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1321, STR1321, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Kennlinie Verschiebung
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1326, STR1326, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Kennlinie Adaption
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1330, STR1330, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Sommer-/ Winterheizgrenze
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1332, STR1332, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Tagesheizgrenze
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1340, STR1340, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Vorlaufsollwert Minimum
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1341, STR1341, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Vorlaufsollwert Maximum
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1350, STR1350, 0, NULL}, // [% ] - Heizkreis 3/P (nur wenn aktiviert) - Raumeinfluss
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1360, STR1360, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Raumtemperaturbegrenzung
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1370, STR1370, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Schnellaufheizung
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1380, STR1380, 0, NULL}, // [-] - Heizkreis 3/P (nur wenn aktiviert) - Schnellabsenkung
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1390, STR1390, 0, NULL}, // [min] - Heizkreis 3/P (nur wenn aktiviert) - Einschalt-Optimierung Max.
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1391, STR1391, 0, NULL}, // [min] - Heizkreis 3/P (nur wenn aktiviert) - Ausschalt-Optimierung Max.
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1400, STR1400, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Reduziert-Anhebung Begin
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1401, STR1401, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Reduziert-Anhebung Ende
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1420, STR1420, 0, NULL}, // [ - ] - Heizkreis 3/P (nur wenn aktiviert) - Überhitzschutz Pumpenkreis
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1430, STR1430, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Mischerüberhöhung
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1450, STR1450, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Estrichfunktion
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1451, STR1451, 0, NULL}, // [°C ] - Heizkreis 3/P (nur wenn aktiviert) - Estrich sollwert manuell
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1455, STR1455, 0, NULL}, // Estrich Sollwert aktuell
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1456, STR1456, 0, NULL}, // Estrich Tag aktuell
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1457, STR1457, 0, NULL}, // Estrich Tag erfüllt
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1461, STR1461, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Übertemperaturabnahme
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1470, STR1470, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Mit Pufferspeicher
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1472, STR1472, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Mit Vorregler/Zubring`pumpe
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1482, STR1482, 0, NULL}, // Pumpendrehzahl Minimum
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1483, STR1483, 0, NULL}, // Pumpendrehzahl Maximum
+{CMD_UNKNOWN, CAT_HKP, VT_UNKNOWN, 1500, STR1500, 0, NULL}, // [0] - Heizkreis 3/P (nur wenn aktiviert) - Betriebsartumschaltung
+
+// Trinkwasser
+{0x313D0571, CAT_TW, VT_YESNO, 1600, STR1600, 0, NULL}, // [-] - Trinkwasser - Trinkwasserbetrieb Ein/Aus ***(virtuelle Zeile)***
+{0x313d06b9, CAT_TW, VT_TEMP, 1610, STR1610, 0, NULL}, // [°C ] - Trinkwasser - Nennsollwert
+{0x313d06ba, CAT_TW, VT_TEMP, 1612, STR1612, 0, NULL}, // [°C ] - Trinkwasser - Reduziertsollwert
+{0x253d0722, CAT_TW, VT_ENUM, 1620, STR1620, sizeof(ENUM1620), ENUM1620}, // [0] - Trinkwasser - Freigabe
+{0x313D0721, CAT_TW, VT_ENUM, 1630, STR1630, sizeof(ENUM1630), ENUM1630}, // [0] - Trinkwasser - Ladevorgang
+{0x313d0759, CAT_TW, VT_ENUM, 1640, STR1640, sizeof(ENUM1640), ENUM1640}, // [0] - Trinkwasser - Legionellenfunktion
+{0x313d0738, CAT_TW, VT_DAYS, 1641, STR1641, 0, NULL}, // [Tage ] - Trinkwasser - Legionellenfkt. Periodisch
+{0x313d075e, CAT_TW, VT_WEEKDAY, 1642, STR1642, 0, NULL}, // [0] - Trinkwasser - Legionellenfkt. Wochentag
+{0x313d075a, CAT_TW, VT_HOUR_MINUTES, 1644, STR1644, 0, NULL}, // [hh:mm ] - Trinkwasser - Legionellenfkt. Zeitpunkt
+{0x313d06bc, CAT_TW, VT_TEMP, 1645, STR1645, 0, NULL}, // [°C ] - Trinkwasser - Legionellenfkt. Sollwert
+{0x313d0496, CAT_TW, VT_MINUTES_WORD, 1646, STR1646, 0, NULL}, // [min] - Trinkwasser - Legionellenfkt. Verweildauer
+{0x313d08ab, CAT_TW, VT_ONOFF, 1647, STR1647, 0, NULL}, // [0] - Trinkwasser - Legionellenfkt. Zirk`pumpe
+{0x253d072e, CAT_TW, VT_ENUM, 1660, STR1660, sizeof(ENUM1660), ENUM1660}, // [0] - Trinkwasser - Zirkulationspumpe Freigabe
+{0x253d0689, CAT_TW, VT_ONOFF, 1661, STR1661, 0, NULL}, // [0] - Trinkwasser - Zirk`pumpe Taktbetrieb
+{0x253D077E, CAT_TW, VT_TEMP, 1663, STR1663, 0, NULL}, // [°C ] - Trinkwasser - Zirkulations Sollwert
+
+// Hx-Pumpe
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2008, STR2008, 0, NULL}, // H1 TWW-Ladevorrang
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2010, STR2010, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H1 Übertemperaturabnahme
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2012, STR2012, 0, NULL}, // [-] - H1/H3-Pumpe (nur wenn aktiviert) - H1 mit Pufferspeicher
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2014, STR2014, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H1 Vorregler/Zubring`pumpe
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2015, STR2015, 0, NULL}, // H1 Kälteanforderung
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2033, STR2033, 0, NULL}, // H2 TWW-Ladevorrang
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2035, STR2035, 0, NULL}, // H2 Übertemperaturabnahme
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2037, STR2037, 0, NULL}, // H2 mit Pufferspeicher
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2039, STR2039, 0, NULL}, // H2 Vorregler / Zubring'pumpe
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2040, STR2040, 0, NULL}, // H2 Kälteanforderung
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2044, STR2044, 0, NULL}, // H3 TWW-Ladevorrang
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2046, STR2046, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H3 Übertemperaturabnahme
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2048, STR2048, 0, NULL}, // [-] - H1/H3-Pumpe (nur wenn aktiviert) - H3 mit Pufferspeicher
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2050, STR2050, 0, NULL}, // [ - ] - H1/H3-Pumpe (nur wenn aktiviert) - H3 Vorregler/Zubring`pumpe
+{CMD_UNKNOWN, CAT_HXPUMPE, VT_UNKNOWN, 2051, STR2051, 0, NULL}, // H3 Kälteanforderung
+
+// Schwimmbad
+{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2055, STR2055, 0, NULL}, // Sollwert Solarbeheizung
+{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2056, STR2056, 0, NULL}, // Sollwert Erzeugerbeheizung
+{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2065, STR2065, 0, NULL}, // Ladevorrang Solar
+{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2070, STR2070, 0, NULL}, // Schwimmbadtemp Maximum
+{CMD_UNKNOWN, CAT_SCHWIMMBAD, VT_UNKNOWN, 2080, STR2080, 0, NULL}, // Mit Solareinbindung
+
+// Vorregler/Zubringerpumpe
+{CMD_UNKNOWN, CAT_VORREGLERPUMPE, VT_UNKNOWN, 2150, STR2150, 0, NULL}, // Vorregler/Zubringerpumpe
+
+// Kessel
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2203, STR2203, 0, NULL}, // Freigabe unter Außentemp
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2205, STR2205, 0, NULL}, // Bei Ökobetrieb
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2208, STR2208, 0, NULL}, // Durchladung Pufferspeicher
+{0x0d3d092c, CAT_KESSEL, VT_TEMP, 2210, STR2210, 0, NULL}, // [°C ] - Kessel - Sollwert Minimum
+{0x0d3d092b, CAT_KESSEL, VT_TEMP, 2212, STR2212, 0, NULL}, // [°C ] - Kessel - Sollwert maximum
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2220, STR2220, 0, NULL}, // Freigabeintegral Stufe 2
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2221, STR2221, 0, NULL}, // Rückstellintegral Stufe 2
+{0x0d3d08eb, CAT_KESSEL, VT_TEMP, 2270, STR2270, 0, NULL}, // [°C ] - Kessel - Rücklaufsollwert Minimum
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2291, STR2291, 0, NULL}, // Steuerung Bypasspumpe
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2330, STR2330, 0, NULL}, // Leistung Nenn
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2331, STR2331, 0, NULL}, // Leistung Grundstufe
+{CMD_UNKNOWN, CAT_KESSEL, VT_UNKNOWN, 2340, STR2340, 0, NULL}, // Auto Erz’folge 2 x 1 Kaskade
+
+// Wärmpumpe
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2800, STR2800, 0, NULL}, // Frostschutz Kondens’pumpe
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2801, STR2801, 0, NULL}, // Steuerung Kondens’pumpe
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2802, STR2802, 0, NULL}, // Vorlaufzeit Kondens’pumpe
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2803, STR2803, 0, NULL}, // Nachlaufzeit Kondens’pumpe
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2805, STR2805, 0, NULL}, // Soll Temp’Spreizung Kond
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2806, STR2806, 0, NULL}, // Max Abweich Spreiz Kondens
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2815, STR2815, 0, NULL}, // Quellentemp Min Wasser
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2816, STR2816, 0, NULL}, // Quellentemp Min Sole
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2817, STR2817, 0, NULL}, // Schaltdiff Quellenschutz
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2818, STR2818, 0, NULL}, // Erhöhung Quellenschutztemp
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2819, STR2819, 0, NULL}, // Vorlaufzeit Quelle
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2820, STR2820, 0, NULL}, // Nachlaufzeit Quelle
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2821, STR2821, 0, NULL}, // Quellen-Anlaufzeit Maximum
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2822, STR2822, 0, NULL}, // Zeit Begr Quelletemp Min
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2840, STR2840, 0, NULL}, // Schaltdiff Rücklauftemp
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2841, STR2841, 0, NULL}, // Verd'laufzeit min einhalten
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2842, STR2842, 0, NULL}, // Verdichterlaufzeit Minimum
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2843, STR2843, 0, NULL}, // Verdichtersillstandszeit Min
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2844, STR2844, 0, NULL}, // Ausschalttemp. max
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2845, STR2845, 0, NULL}, // Reduktion Ausschaltemp Max
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2846, STR2846, 0, NULL}, // Heissgastemp Max
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2852, STR2852, 0, NULL}, // ND-Verzögerung beim Start
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2880, STR2880, 0, NULL}, // Verwendung Elektro-Vorlauf
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2881, STR2881, 0, NULL}, // Sperrzeit Elektro-Vorlauf
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2882, STR2882, 0, NULL}, // Freigabeintegr. Elektro-Vorl
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2883, STR2883, 0, NULL}, // Rückstellintegr. Elektro-Vorl
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2884, STR2884, 0, NULL}, // Freig Elektro-Vorl unter TA
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2886, STR2886, 0, NULL}, // Kompensation Wärmedefizit
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2893, STR2893, 0, NULL}, // Anzahl TWW-Ladeversuche
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2894, STR2894, 0, NULL}, // Verzögerung Drehstr'fehler
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2895, STR2895, 0, NULL}, // Verzögerung Ström'wächter
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2910, STR2910, 0, NULL}, // Freigabe oberhalb TA
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2911, STR2911, 0, NULL}, // Für Pufferzwangsladung
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2912, STR2912, 0, NULL}, // Durchladung Pufferspeicher
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2951, STR2951, 0, NULL}, // Abtaufreigabe unterhalb TA
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2952, STR2952, 0, NULL}, // Schaltdifferenz Abtauen
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2954, STR2954, 0, NULL}, // Verdampfertemp Abtau-Ende
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2963, STR2963, 0, NULL}, // Dauer bis Zwangsabtauen
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2964, STR2964, 0, NULL}, // Abtaudauer Maximal
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2965, STR2965, 0, NULL}, // Abtropfdauer Verdampfer
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 2966, STR2966, 0, NULL}, // Abkühldauer Verdampfer
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3002, STR3002, 0, NULL}, // Quellentemp min Kühlbetrieb
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3006, STR3006, 0, NULL}, // Während Verdichterbetrieb
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3007, STR3007, 0, NULL}, // Im passiven Kühlbetrieb
+{CMD_UNKNOWN, CAT_WAERMEPUMPE, VT_UNKNOWN, 3010, STR3010, 0, NULL}, // Drehz max V'lator/Q'Pump
+
+// Kaskade
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3510, STR3510, 0, NULL}, // Führungsstrategie
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3530, STR3530, 0, NULL}, // Freigabeintegral Erz’folge
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3531, STR3531, 0, NULL}, // Rückstellintegral Erz’folge
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3532, STR3532, 0, NULL}, // Wiedereinschaltsperre
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3533, STR3533, 0, NULL}, // Zuschaltverzögerung
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3540, STR3540, 0, NULL}, // Auto Erz’folge Umschaltung
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3541, STR3541, 0, NULL}, // Auto Erz’folge Ausgrenzung
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3544, STR3544, 0, NULL}, // Führender Erzeuger
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3550, STR3550, 0, NULL}, // Anfahrentlast Kaskad'pumpe
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3560, STR3560, 0, NULL}, // Rücklaufsollwert Minimum
+{CMD_UNKNOWN, CAT_KASKADE, VT_UNKNOWN, 3590, STR3590, 0, NULL}, // Temp’spreizung Minimum
+
+// Zusatzerzeuger
+{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3700, STR3700, 0, NULL}, // Freigabe unter Außentemp
+{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3701, STR3701, 0, NULL}, // Freigabe über Außentemp
+{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3705, STR3705, 0, NULL}, // Nachlaufzeit
+{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3720, STR3720, 0, NULL}, // Schaltintegral
+{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3722, STR3722, 0, NULL}, // Schaltdifferenz Aus
+{CMD_UNKNOWN, CAT_ZUSATZERZEUGER, VT_UNKNOWN, 3723, STR3723, 0, NULL}, // Sperrzeit
+
+// Solar
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3810, STR3810, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Temperaturdifferenz Ein
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3811, STR3811, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Temperaturdifferenz Aus
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3812, STR3812, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Ladetemp Min TWW-Speicher
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3813, STR3813, 0, NULL}, // Temp’diff EIN Puffer
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3814, STR3814, 0, NULL}, // Temp’diff AUS Puffer
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3815, STR3815, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Ladetemp Min Puffer
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3816, STR3816, 0, NULL}, // Temp'differenz EIN Sch'bad
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3817, STR3817, 0, NULL}, // Temp'differenz AUS Sch'bad
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3818, STR3818, 0, NULL}, // Ladetemp Min Schwimmbad
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3822, STR3822, 0, NULL}, // Ladevorrang Speicher
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3825, STR3825, 0, NULL}, // Ladezeit relativer Vorrang
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3826, STR3826, 0, NULL}, // Wartezeit relativer Vorrang
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3827, STR3827, 0, NULL}, // Wartezeit Parallelbetrieb
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3828, STR3828, 0, NULL}, // Verzögerung Sekundärpumpe
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3830, STR3830, 0, NULL}, // [min ] - Solar (nur wenn aktiviert) - Kollektorstartfunktion
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3831, STR3831, 0, NULL}, // [ sec ] - Solar (nur wenn aktiviert) - Mindestlaufzeit Kollek`pumpe
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3832, STR3832, 0, NULL}, // Kollektorstartfunktion Ein
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3833, STR3833, 0, NULL}, // Kollektorstartfunktion Aus
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3834, STR3834, 0, NULL}, // Kollektorstartfkt Gradient
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3840, STR3840, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Kollektor Frostschutz
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3850, STR3850, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Kollektorüberhitzschutz
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3860, STR3860, 0, NULL}, // [°C ] - Solar (nur wenn aktiviert) - Verdampfung Waermetaeger
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3870, STR3870, 0, NULL}, // Pumpendrehzahl Minimum
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3871, STR3871, 0, NULL}, // Pumpendrehzahl Maximum
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3880, STR3880, 0, NULL}, // Frostschutzmittel
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3881, STR3881, 0, NULL}, // Frost'mittel Konzentration
+{CMD_UNKNOWN, CAT_SOLAR, VT_UNKNOWN, 3884, STR3884, 0, NULL}, // Pumpendurchfluss
+
+// Feststoffkessel
+{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4102, STR4102, 0, NULL}, // [0] - Feststoffkessel (nur wenn aktiviert) - Sperrt andere Erzeuger
+{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4110, STR4110, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Sollwert Minimum
+{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4130, STR4130, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Temperaturdifferenz Ein
+{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4131, STR4131, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Temperaturdifferenz Aus
+{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4133, STR4133, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Vergleichstempertatur
+{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4140, STR4140, 0, NULL}, // Pumpennachlaufzeit
+{CMD_UNKNOWN, CAT_FESTSTOFFKESSEL, VT_UNKNOWN, 4141, STR4141, 0, NULL}, // [°C ] - Feststoffkessel (nur wenn aktiviert) - Übertemperaturableitung
+
+// Pufferspeicher
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4708, STR4708, 0, NULL}, // Zwangsladungsollwert Kühlen
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4709, STR4709, 0, NULL}, // Zwangsladungsoll Heizen Min
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4710, STR4710, 0, NULL}, // Zwangsladungsoll Heizen Max
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4711, STR4711, 0, NULL}, // Zwangsladung Zeitpunkt
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4712, STR4712, 0, NULL}, // Zwangsladung Dauer Max
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4720, STR4720, 0, NULL}, // [0] - Pufferspeicher (nur wenn aktiviert) - Auto Erzeugersperre
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4721, STR4721, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Auto Erzeugersperre SD
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4722, STR4722, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Temp`diff Puffer/Heizkreis
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4724, STR4724, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Min Speichertemp Heizbetrieb
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4739, STR4739, 0, NULL}, // Schichtschutz
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4750, STR4750, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Ladetemperatur Maximum
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4755, STR4755, 0, NULL}, // [°C ] - Pufferspeicher (nur wenn aktiviert) - Rückkühltemperatur
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4756, STR4756, 0, NULL}, // [-] - Pufferspeicher (nur wenn aktiviert) - Rückkühlung TWW/HK`s
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4757, STR4757, 0, NULL}, // [0] - Pufferspeicher (nur wenn aktiviert) - Rückkühlung Kollektor
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4760, STR4760, 0, NULL}, // Ladefühler Elektroeinsatz
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4761, STR4761, 0, NULL}, // Zwangsladung mit Elektro
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4783, STR4783, 0, NULL}, // [0] - Pufferspeicher (nur wenn aktiviert) - Mit Solareinbindung
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4790, STR4790, 0, NULL}, // Temp'diff EIN Rückl'umlenk
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4791, STR4791, 0, NULL}, // Temp'diff AUS Rückl'umlenk
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4795, STR4795, 0, NULL}, // Vergleichstemp Rückl'umlenk
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4796, STR4796, 0, NULL}, // Wirksinn Rücklaufumlenkung
+{CMD_UNKNOWN, CAT_PUFFERSPEICHER, VT_UNKNOWN, 4810, STR4810, 0, NULL}, // Durchladung
+
+// Trinkwasserspeicher
+{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5010, STR5010, 0, NULL}, // Ladung
+{0x253d0720, CAT_TWSPEICHER, VT_TEMP, 5020, STR5020, 0, NULL}, // [°C ] - Trinkwasser-Speicher - Vorlaufsollwertüberhöhung
+{0x253D07C1, CAT_TWSPEICHER, VT_TEMP, 5021, STR5021, 0, NULL}, // [°C ] - Trinkwasser-Speicher - Umladeüberhöhung
+{0x253D087B, CAT_TWSPEICHER, VT_ENUM, 5022, STR5022, sizeof(ENUM5022), ENUM5022}, // [0] - Trinkwasser-Speicher - Ladeart
+{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5050, STR5050, 0, NULL}, // Ladetemperatur Maximum
+{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5055, STR5055, 0, NULL}, // Rückkühltemperatur
+{0x313D0713, CAT_TWSPEICHER, VT_ONOFF, 5056, STR5056, 0, NULL}, // [0] - Trinkwasser-Speicher - Rückkühlung Kessel/HK
+{0x313D0714, CAT_TWSPEICHER, VT_ENUM, 5057, STR5057, sizeof(ENUM5057), ENUM5057}, // [0] - Trinkwasser-Speicher - Rückkühlung Kollektor
+{0x253D0728, CAT_TWSPEICHER, VT_ENUM, 5060, STR5060, sizeof(ENUM5060), ENUM5060}, // [0] - Trinkwasser-Speicher - Elektroeinsatz Betriebsart
+{0x253D0688, CAT_TWSPEICHER, VT_ENUM, 5061, STR5061, sizeof(ENUM5061), ENUM5061}, // [0] - Trinkwasser-Speicher - Elektroeinsatz Freigabe
+{0x253D0687, CAT_TWSPEICHER, VT_ENUM, 5062, STR5062, sizeof(ENUM5062), ENUM5062}, // [0] - Trinkwasser-Speicher - Elektroeinsatz Regelung
+{0x253D08CB, CAT_TWSPEICHER, VT_ONOFF, 5085, STR5085, 0, NULL}, // [0] - Trinkwasser-Speicher - Übertemperaturabnahme
+{0x313D07C2, CAT_TWSPEICHER, VT_YESNO, 5090, STR5090, 0, NULL}, // [0] - Trinkwasser-Speicher - Mit Pufferspeicher
+{0x313D07C3, CAT_TWSPEICHER, VT_YESNO, 5092, STR5092, 0, NULL}, // [ - ] - Trinkwasser-Speicher - Mit Vorregler/Zubring`pumpe
+{0x253D0A11, CAT_TWSPEICHER, VT_YESNO, 5093, STR5093, 0, NULL}, // [-] - Trinkwasser-Speicher - Mit Solareinbindung
+{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5101, STR5101, 0, NULL}, // Pumpendrehzahl Minimum
+{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5102, STR5102, 0, NULL}, // Pumpendrehzahl Maximum
+{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5130, STR5130, 0, NULL}, // Umladestrategie
+{CMD_UNKNOWN, CAT_TWSPEICHER, VT_UNKNOWN, 5131, STR5131, 0, NULL}, // Vergleichstemp Umladung
+
+// Trinkwasser Durchl'erhitzer
+{CMD_UNKNOWN, CAT_DRUCHLERHITZER, VT_UNKNOWN, 5406, STR5406, 0, NULL}, // Min Sollw'diff zu Speich'temp
+{CMD_UNKNOWN, CAT_DRUCHLERHITZER, VT_UNKNOWN, 5530, STR5530, 0, NULL}, // Pumpendrehzahl Minimum
+{CMD_UNKNOWN, CAT_DRUCHLERHITZER, VT_UNKNOWN, 5544, STR5544, 0, NULL}, // Antrieb Laufzeit
+
+// Konfiguration
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5700, STR5700, 0, NULL}, // Voreinstellung
+{0x053d04c0, CAT_KONFIG, VT_ONOFF, 5710, STR5710, 0, NULL}, // [0] - Konfiguration - Heizkreis 1
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5711, STR5711, 0, NULL}, // Kühlkreis 1
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5712, STR5712, 0, NULL}, // Verwendung Mischer 1
+{0x063d04c0, CAT_KONFIG, VT_ONOFF, 5715, STR5715, 0, NULL}, // [0] - Konfiguration - Heizkreis2
+{0x313D071E, CAT_KONFIG, VT_ENUM, 5730, STR5730, sizeof(ENUM5730), ENUM5730}, // [0] - Konfiguration - Trinkwasser-Sensor B3
+{0x253D071C, CAT_KONFIG, VT_ENUM, 5731, STR5731, sizeof(ENUM5731), ENUM5731}, // [0] - Konfiguration - Trinkwasser-Stellglied Q3
+{0x053D0727, CAT_KONFIG, VT_ONOFF, 5736, STR5736, 0, NULL}, // [0] - Konfiguration - Trinkwasser Trennschaltung
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5770, STR5770, 0, NULL}, // Erzeugertyp
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5772, STR5772, 0, NULL}, // Brenner Vorlaufzeit
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5800, STR5800, 0, NULL}, // Wärmequelle
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5807, STR5807, 0, NULL}, // Kälteerzeugung
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5810, STR5810, 0, NULL}, // Spreizung HK bei TA –10 °C
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5840, STR5840, 0, NULL}, // Solarstellglied
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5841, STR5841, 0, NULL}, // Externer Solartauscher
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5870, STR5870, 0, NULL}, // Kombispeicher
+{0x053D0497, CAT_KONFIG, VT_ENUM, 5890, STR5890, sizeof(ENUM5890), ENUM5890}, // [-] - Konfiguration - Relaisausgang QX1
+{0x053D0498, CAT_KONFIG, VT_ENUM, 5891, STR5891, sizeof(ENUM5891), ENUM5891}, // [-] - Konfiguration - Relaisausgang QX2
+{0x053D0587, CAT_KONFIG, VT_ENUM, 5892, STR5892, sizeof(ENUM5892), ENUM5892}, // [-] - Konfiguration - Relaisausgang QX3
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5894, STR5894, 0, NULL}, // Relaisausgang QX4
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5895, STR5895, 0, NULL}, // Relaisausgang QX5
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5896, STR5896, 0, NULL}, // Relaisausgang QX6
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5908, STR5908, 0, NULL}, // Funktion Ausgang QX3-Mod
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5909, STR5909, 0, NULL}, // Funktion Ausgang QX4-Mod
+{0x053D0567, CAT_KONFIG, VT_ENUM, 5930, STR5930, sizeof(ENUM5930), ENUM5930}, // [-] - Konfiguration - Fühlereingang BX 1
+{0x053D0568, CAT_KONFIG, VT_ENUM, 5931, STR5931, sizeof(ENUM5931), ENUM5931}, // [-] - Konfiguration - Fühlereingang BX 2
+{0x053D07CA, CAT_KONFIG, VT_ENUM, 5932, STR5932, sizeof(ENUM5932), ENUM5932}, // [-] - Konfiguration - Fühlereingang BX 3
+{0x053D07CB, CAT_KONFIG, VT_ENUM, 5933, STR5933, sizeof(ENUM5933), ENUM5933}, // [-] - Konfiguration - Fühlereingang BX 4
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5934, STR5934, 0, NULL}, // Fühlereingang BX5
+{0x053D0807, CAT_KONFIG, VT_ENUM, 5950, STR5950, sizeof(ENUM5950), ENUM5950}, // [-] - Konfiguration - Funktion Eingang H1
+{0x053D0808, CAT_KONFIG, VT_ENUM, 5951, STR5951, sizeof(ENUM5951), ENUM5951}, // [0] - Konfiguration - Wirksinn Kontakt H1
+{0x293D0656, CAT_KONFIG, VT_TEMP, 5952, STR5952, 0, NULL}, // [°C ] - Konfiguration - Minimaler Vorlaufsollwert H1
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5953, STR5953, 0, NULL}, // Spannungswert 1 H1
+{0x053D079F, CAT_KONFIG, VT_TEMP, 5954, STR5954, 0, NULL}, // [°C ] - Konfiguration - Waermeanforderung 10V H1
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5955, STR5955, 0, NULL}, // Spannungswert 2 H1
+{0x053D05DC, CAT_KONFIG, VT_PRESSURE, 5956, STR5956, 0, NULL}, // [bar ] - Konfiguration - Druckwer 3.5V H1
+{0x073D0807, CAT_KONFIG, VT_ENUM, 5960, STR5960, sizeof(ENUM5960), ENUM5960}, // [-] - Konfiguration - Funktion Eingang H3
+{0x073D0808, CAT_KONFIG, VT_ENUM, 5961, STR5961, sizeof(ENUM5961), ENUM5961}, // [0] - Konfiguration - Wirksinn Kontakt H3
+{0x2B3D0656, CAT_KONFIG, VT_TEMP, 5962, STR5962, 0, NULL}, // [°C ] - Konfiguration - Minimaler Vorlaufsollwert H3
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5963, STR5963, 0, NULL}, // Spannungswert 1 H3
+{0x073D079F, CAT_KONFIG, VT_TEMP, 5964, STR5964, 0, NULL}, // [°C ] - Konfiguration - Waermeanforderung 10V H3
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5965, STR5965, 0, NULL}, // Spannungswert 2 H3
+{0x073D05DC, CAT_KONFIG, VT_PRESSURE, 5966, STR5966, 0, NULL}, // [bar ] - Konfiguration - Druckwer 3.5V H3
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5980, STR5980, 0, NULL}, // Funktion Eingang EX1
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5981, STR5981, 0, NULL}, // Wirksinn Eingang EX1
+{0x053D07CE, CAT_KONFIG, VT_ENUM, 5982, STR5982, sizeof(ENUM5982), ENUM5982}, // [0] - Konfiguration - Funktion Eingang EX2
+{0x053D07D1, CAT_KONFIG, VT_ENUM, 5983, STR5983, sizeof(ENUM5983), ENUM5983}, // [0] - Konfiguration - Wirksinn Eingang EX2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5984, STR5984, 0, NULL}, // Funktion Eingang EX3
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5985, STR5985, 0, NULL}, // Wirksinn Eingang EX3
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5986, STR5986, 0, NULL}, // Funktion Eingang EX4
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5987, STR5987, 0, NULL}, // Wirksinn Eingang EX4
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5988, STR5988, 0, NULL}, // Funktion Eingang EX5
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5990, STR5990, 0, NULL}, // Funktion Eingang EX6
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 5992, STR5992, 0, NULL}, // Funktion Eingang EX7
+{0x053D07CF, CAT_KONFIG, VT_ENUM, 6014, STR6014, sizeof(ENUM6014), ENUM6014}, // [0] - Konfiguration - Funktion Mischergruppe 1
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6015, STR6015, 0, NULL}, // Funktion Mischergruppe 2
+{0x053D0788, CAT_KONFIG, VT_ENUM, 6020, STR6020, sizeof(ENUM6020), ENUM6020}, // [0] - Konfiguration - Funktion Erweiterungsmodul 1
+{0x053D0789, CAT_KONFIG, VT_ENUM, 6021, STR6021, sizeof(ENUM6021), ENUM6021}, // [0] - Konfiguration - Funktion Erweiterungsmodul 2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6030, STR6030, 0, NULL}, // Relaisausgang QX21
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6031, STR6031, 0, NULL}, // Relaisausgang QX22
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6032, STR6032, 0, NULL}, // Relaisausgang QX23
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6040, STR6040, 0, NULL}, // Fühlereingang BX21
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6041, STR6041, 0, NULL}, // Fühlereingang BX22
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6046, STR6046, 0, NULL}, // Funktion Eingang H2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6047, STR6047, 0, NULL}, // Wirksinn Kontakt H2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6048, STR6048, 0, NULL}, // Minimaler Vorlaufsollwert H2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6049, STR6049, 0, NULL}, // Spannungswert 1 H2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6050, STR6050, 0, NULL}, // Temperaturwert 10V H2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6051, STR6051, 0, NULL}, // Spannungswert 2 H2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6052, STR6052, 0, NULL}, // Funktionswert 2 H2
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6070, STR6070, 0, NULL}, // Funktion Ausgang UX
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6071, STR6071, 0, NULL}, // Signallogik Ausgang UX
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6072, STR6072, 0, NULL}, // Signal Ausgang UX
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6075, STR6075, 0, NULL}, // Temperaturwert 10V UX
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6097, STR6097, 0, NULL}, // Fühlertyp Kollektor
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6098, STR6098, 0, NULL}, // Korrektur Kollektorfühler
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6099, STR6099, 0, NULL}, // Korrektur Kollektorfühler 2
+{0x053D05F1, CAT_KONFIG, VT_TEMP, 6100, STR6100, 0, NULL}, // [°C ] - Konfiguration - korrektur Aussenfühler
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6101, STR6101, 0, NULL}, // Fühlertyp Abgastemperatur
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6102, STR6102, 0, NULL}, // Korrektur Abgastemp'fühler
+{0x053d0600, CAT_KONFIG, VT_HOURS_SHORT, 6110, STR6110, 0, NULL}, // [h ] - Konfiguration - Zeitkonstante Gebaeude
+{0x053d05fe, CAT_KONFIG, VT_ONOFF, 6120, STR6120, 0, NULL}, // [0] - Konfiguration - Anlagenfrostschutz
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6128, STR6128, 0, NULL}, // Wärm'anfo unter Außentemp
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6129, STR6129, 0, NULL}, // Wärm'anfo über Außentemp
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6130, STR6130, 0, NULL}, // H1 mit Pufferspeicher
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6131, STR6131, 0, NULL}, // Wärm'anfo bei Ökobetrieb
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6134, STR6134, 0, NULL}, // H2 mit Pufferspeicher
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6135, STR6135, 0, NULL}, // Luftentfeuchter
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6136, STR6136, 0, NULL}, // Luftentfeuchter Freigabe
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6137, STR6137, 0, NULL}, // Luftentfeuchter r. F. EIN
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6138, STR6138, 0, NULL}, // Luftentfeuchter r. F. SD
+{0x053D06AB, CAT_KONFIG, VT_YESNO, 6200, STR6200, 0, NULL}, // [0] - Konfiguration - Fühler Speichern
+{CMD_UNKNOWN, CAT_KONFIG, VT_UNKNOWN, 6201, STR6201, 0, NULL}, // Fühler löschen
+{0x053D05D5, CAT_KONFIG, VT_YESNO, 6205, STR6205, 0, NULL}, // [-] - Konfiguration - Parameter zurücksetzen
+{0x053D0BD0, CAT_KONFIG, VT_DWORD, 6212, STR6212, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Erzeuger 1
+{0x053D0BD1, CAT_KONFIG, VT_DWORD, 6213, STR6213, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Erzeuger 2
+{0x053D0BD2, CAT_KONFIG, VT_DWORD, 6215, STR6215, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Speicher
+{0x053D0BD3, CAT_KONFIG, VT_DWORD, 6217, STR6217, 0, NULL}, // [0] - Konfiguration - Kontrollnummer Heizkreise
+{0x053d000e, CAT_KONFIG, VT_FP1, 6220, STR6220, 0, NULL}, // [0] - Konfiguration - Software- Version LOGON B
+
+// LPB-System
+{0x053D00C9, CAT_LPB, VT_BYTE, 6600, STR6600, 0, NULL}, // [0] - LPB - Geraeteadresse
+{0x053D00CA, CAT_LPB, VT_BYTE, 6601, STR6601, 0, NULL}, // [0] - LPB - Segmentadresse
+{0x053D0071, CAT_LPB, VT_ENUM, 6604, STR6604, sizeof(ENUM6604), ENUM6604}, // [0] - LPB - Busspeisung Funktion
+{0x053D0072, CAT_LPB, VT_ONOFF, 6605, STR6605, 0, NULL}, // [0] - LPB - Busspeisung Status
+{0x053D006A, CAT_LPB, VT_YESNO, 6610, STR6610, 0, NULL}, // [0] - LPB - Anzeige Systemmeldungen
+{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6612, STR6612, 0, NULL}, // Alarmverzögerung
+{0x053D0839, CAT_LPB, VT_ENUM, 6620, STR6620, sizeof(ENUM6620), ENUM6620}, // [ - ] - LPB - Wirkbereich Umschaltungen
+{0x2D3D0611, CAT_LPB, VT_ENUM, 6621, STR6621, sizeof(ENUM6621), ENUM6621}, // [0] - LPB - Sommerumschaltung
+{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6623, STR6623, 0, NULL}, // Betriebsartumschaltung
+{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6624, STR6624, 0, NULL}, // Manuelle Erzeugersperre
+{0x253D074A, CAT_LPB, VT_ENUM, 6625, STR6625, sizeof(ENUM6625), ENUM6625}, // [0] - LPB - Trinkwasserzuordnung
+{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6627, STR6627, 0, NULL}, // Kälteanforderung
+{CMD_UNKNOWN, CAT_LPB, VT_UNKNOWN, 6632, STR6632, 0, NULL}, // TA'grenze ext Erz beachten
+{0x053D006D, CAT_LPB, VT_ENUM, 6640, STR6640, sizeof(ENUM6640), ENUM6640}, // [0] - LPB - Uhrbetrieb
+// Codierung unklar: 15.01 -> HEIZ->DISP ANS 6650 Aussentemperatur Lieferant 00 F0 ???
+{0x053D009F, CAT_LPB, VT_LPBADDR, 6650, STR6650, 0, NULL}, // [0] - LPB - Aussentemperatur Lieferant
+
+//Fehler
+{0x053D05D6, CAT_FEHLER, VT_YESNO, 6710, STR6710, 0, NULL}, // [0] - Fehler - Reset Alarmrelais
+{CMD_UNKNOWN, CAT_FEHLER, VT_UNKNOWN, 6711, STR6711, 0, NULL}, // Reset Wärmepumpe
+{0x213D069D, CAT_FEHLER, VT_MINUTES_SHORT, 6740, STR6740, 0, NULL}, // [min ] - Fehler - Vorlauftemperatur 1 Alarm
+{0x223D069D, CAT_FEHLER, VT_MINUTES_SHORT, 6741, STR6741, 0, NULL}, // [min ] - Fehler - Vorlauftemperatur 2 Alarm
+{0x113D05DE, CAT_FEHLER, VT_MINUTES_SHORT, 6743, STR6743, 0, NULL}, // [min ] - Fehler - Kesseltemperatur Alarm
+{CMD_UNKNOWN, CAT_FEHLER, VT_UNKNOWN, 6745, STR6745, 0, NULL}, // Trinkwasserladung Alarm
+{CMD_UNKNOWN, CAT_FEHLER, VT_UNKNOWN, 6746, STR6746, 0, NULL}, // Vorlauftemp Kühlen 1 Alarm
+{0x053D06D3, CAT_FEHLER, VT_DATETIME, 6800, STR6800, 0, NULL}, // [ ] - Fehler - Historie 1 Datum/Zeit
+{0x053D0814, CAT_FEHLER, VT_ERRORCODE, 6801, STR6801, 0, NULL}, // [ ] - Fehler - Historie 1 Fehlercode
+{0x053D06D4, CAT_FEHLER, VT_DATETIME, 6802, STR6802, 0, NULL}, // [ ] - Fehler - Historie 2 Datum/Zeit
+{0x053D0815, CAT_FEHLER, VT_ERRORCODE, 6803, STR6803, 0, NULL}, // [ ] - Fehler - Historie 2 Fehlercode
+{0x053D06D5, CAT_FEHLER, VT_DATETIME, 6804, STR6804, 0, NULL}, // [ ] - Fehler - Historie 3 Datum/Zeit
+{0x053D0816, CAT_FEHLER, VT_ERRORCODE, 6805, STR6805, 0, NULL}, // [ ] - Fehler - Historie 3 Fehlercode
+{0x053D06D6, CAT_FEHLER, VT_DATETIME, 6806, STR6806, 0, NULL}, // [ ] - Fehler - Historie 4 Datum/Zeit
+{0x053D0817, CAT_FEHLER, VT_ERRORCODE, 6807, STR6807, 0, NULL}, // [ ] - Fehler - Historie 4 Fehlercode
+{0x053D06D7, CAT_FEHLER, VT_DATETIME, 6808, STR6808, 0, NULL}, // [ ] - Fehler - Historie 5 Datum/Zeit
+{0x053D0818, CAT_FEHLER, VT_ERRORCODE, 6809, STR6809, 0, NULL}, // [ ] - Fehler - Historie 5 Fehlercode
+{0x053D06D8, CAT_FEHLER, VT_DATETIME, 6810, STR6810, 0, NULL}, // [ ] - Fehler - Historie 6 Datum/Zeit
+{0x053D0819, CAT_FEHLER, VT_ERRORCODE, 6811, STR6811, 0, NULL}, // [ ] - Fehler - Historie 6 Fehlercode
+{0x053D06D9, CAT_FEHLER, VT_DATETIME, 6812, STR6812, 0, NULL}, // [ ] - Fehler - Historie 7 Datum/Zeit
+{0x053D081A, CAT_FEHLER, VT_ERRORCODE, 6813, STR6813, 0, NULL}, // [ ] - Fehler - Historie 7 Fehlercode
+{0x053D06DA, CAT_FEHLER, VT_DATETIME, 6814, STR6814, 0, NULL}, // [ ] - Fehler - Historie 8 Datum/Zeit
+{0x053D081B, CAT_FEHLER, VT_ERRORCODE, 6815, STR6815, 0, NULL}, // [ ] - Fehler - Historie 8 Fehlercode
+{0x053D06DB, CAT_FEHLER, VT_DATETIME, 6816, STR6816, 0, NULL}, // [ ] - Fehler - Historie 9 Datum/Zeit
+{0x053D081C, CAT_FEHLER, VT_ERRORCODE, 6817, STR6817, 0, NULL}, // [ ] - Fehler - Historie 9 Fehlercode
+{0x053D06DC, CAT_FEHLER, VT_DATETIME, 6818, STR6818, 0, NULL}, // [ ] - Fehler - Historie 10 Datum/Zeit
+{0x053D081D, CAT_FEHLER, VT_ERRORCODE, 6819, STR6819, 0, NULL}, // [ ] - Fehler - Historie 10 Fehlercode
+
+// Wartung/Sonderbetrieb
+{0x053d03f1, CAT_WARTUNG, VT_HOURS_WORD, 7040, STR7040, 0, NULL}, // [h ] - Wartung/Service - Brennerstunden Intervall
+{0x053d03f3, CAT_WARTUNG, VT_HOURS_WORD, 7041, STR7041, 0, NULL}, // [h ] - Wartung/Service - Brennerstunden seit Wartung
+{0x053D0C69, CAT_WARTUNG, VT_UINT, 7042, STR7042, 0, NULL}, // [0] - Wartung/Service - Brennerstarts Intervall
+{0x053D05E0, CAT_WARTUNG, VT_UINT, 7043, STR7043, 0, NULL}, // [0] - Wartung/Service - Brennerstarts seit Wartung
+{0x053d05e1, CAT_WARTUNG, VT_MONTHS, 7044, STR7044, 0, NULL}, // [Monate ] - Wartung/Service - Wartungsintervall
+{0x053d05e2, CAT_WARTUNG, VT_MONTHS, 7045, STR7045, 0, NULL}, // [Monate ] - Wartung/Service - Zeit seit Wartung
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7053, STR7053, 0, NULL}, // Abgastemperaturgrenze
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7054, STR7054, 0, NULL}, // Verzögerung Abgasmeldung
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7070, STR7070, 0, NULL}, // WP Zeitintervall
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7071, STR7071, 0, NULL}, // WP Zeit seit Wartung
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7072, STR7072, 0, NULL}, // Max Starts Verd1 / Betr’Std
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7073, STR7073, 0, NULL}, // Akt Starts Verd1 / Betr’Std
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7074, STR7074, 0, NULL}, // Max Starts Verd2 / Betr’Std
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7075, STR7075, 0, NULL}, // Akt Starts Verd2 / Betr’Std
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7076, STR7076, 0, NULL}, // Spreiz Kondens Max / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7077, STR7077, 0, NULL}, // Akt Spreiz Kondens Max / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7078, STR7078, 0, NULL}, // Spreiz Kondens Min / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7079, STR7079, 0, NULL}, // Akt Spreiz Kondens Min / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7080, STR7080, 0, NULL}, // Spreiz Verdampfer Max / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7081, STR7081, 0, NULL}, // Akt Spreiz Verdampfer Max / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7082, STR7082, 0, NULL}, // Spreiz Verdampfer Min / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7083, STR7083, 0, NULL}, // Akt Spreiz Verdampfer Min / Wo
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7090, STR7090, 0, NULL}, // TWW Speicher Zeitintervall
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7091, STR7091, 0, NULL}, // TWW Speicher seit Wartung
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7092, STR7092, 0, NULL}, // TWW Ladetemp WP Minimum
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7093, STR7093, 0, NULL}, // Akt TWW Ladetemperatur WP
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7119, STR7119, 0, NULL}, // Ökofunktion
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7120, STR7120, 0, NULL}, // Ökobetrieb
+{0x0d3d092a, CAT_WARTUNG, VT_ONOFF, 7130, STR7130, 0, NULL}, // [0] - Wartung/Service - Schornsteinfegerfunktion
+{0x053d0075, CAT_WARTUNG, VT_ONOFF, 7140, STR7140, 0, NULL}, // [0] - Wartung/Service - Handbetrieb
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7141, STR7141, 0, NULL}, // Notbetrieb
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7142, STR7142, 0, NULL}, // Notbetrieb Funktionsstart
+{0x053D0528, CAT_WARTUNG, VT_TEMP, 7150, STR7150, 0, NULL}, // [ °C ] - Wartung/Service - Simulation Aussentemperatur
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7152, STR7152, 0, NULL}, // Abtauen auslösen
+{CMD_UNKNOWN, CAT_WARTUNG, VT_UNKNOWN, 7160, STR7160, 0, NULL}, // Reset Begrenzungszeiten
+{0x053D06E8, CAT_WARTUNG, VT_STRING, 7170, STR7170, 0, NULL}, // [0] - Wartung/Service - Telefon Kundendienst
+
+// Ein-/Ausgangstest
+{0x053D0073, CAT_IOTEST, VT_ENUM, 7700, STR7700, sizeof(ENUM7700), ENUM7700}, // [0] - Ein-/Ausgangstest - Relaistest
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7705, STR7705, 0, NULL}, // Mod'sollwert QX3 Relaistest
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7708, STR7708, 0, NULL}, // Modulationssignal QX3
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7710, STR7710, 0, NULL}, // Ausgangstest UX
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7711, STR7711, 0, NULL}, // Spannungssignal UX
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7714, STR7714, 0, NULL}, // PWM-Signal P1
+{0x053D0470, CAT_IOTEST, VT_TEMP, 7730, STR7730, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Aussentemperatur B9
+{0x053D08C5, CAT_IOTEST, VT_TEMP, 7732, STR7732, 0, NULL}, // [°C ] - Ein-/Ausgangstest - vorlauftemperatur B1
+{0x053D08C6, CAT_IOTEST, VT_TEMP, 7734, STR7734, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Vorlauftemperatur B12
+{0x053D0462, CAT_IOTEST, VT_TEMP, 7750, STR7750, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Trinkwassertemperatur B3
+{0x053D0468, CAT_IOTEST, VT_TEMP, 7760, STR7760, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Kesseltemperatur B2
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7770, STR7770, 0, NULL}, // Vorlauftemperatur WP B21
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7771, STR7771, 0, NULL}, // Rücklauftemperatur WP B71
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7772, STR7772, 0, NULL}, // Heissgastemperatur B81
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7775, STR7775, 0, NULL}, // Quelle Eintrittstemp B91
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7777, STR7777, 0, NULL}, // Fühlertemperatur B92, B84
+{0x053D056B, CAT_IOTEST, VT_TEMP, 7820, STR7820, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX1
+{0x053D056C, CAT_IOTEST, VT_TEMP, 7821, STR7821, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX2
+{0x053D0791, CAT_IOTEST, VT_TEMP, 7822, STR7822, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX3
+{0x053D0792, CAT_IOTEST, VT_TEMP, 7823, STR7823, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemperatur BX4
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7824, STR7824, 0, NULL}, // Fühlertemperatur BX5
+{0x053D0793, CAT_IOTEST, VT_TEMP, 7830, STR7830, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX21 Modul 1
+{0x053D0799, CAT_IOTEST, VT_TEMP, 7831, STR7831, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX22 Modul 1
+{0x053D079A, CAT_IOTEST, VT_TEMP, 7832, STR7832, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX21 Modul 2
+{0x053D079B, CAT_IOTEST, VT_TEMP, 7833, STR7833, 0, NULL}, // [°C ] - Ein-/Ausgangstest - Fühlertemp. BX22 Modul 2
+{0x053D082F, CAT_IOTEST, VT_VOLTAGE, 7840, STR7840, 0, NULL}, // [V ] - Ein-/Ausgangstest - Spannungssignal H1
+{0x053D0809, CAT_IOTEST, VT_CLOSEDOPEN, 7841, STR7841, 0, NULL}, // [0] - Ein-/Ausgangstest - Kontaktzustand H1
+{CMD_UNKNOWN, CAT_IOTEST, VT_VOLTAGE, 7845, STR7845, 0, NULL}, // [V ] - Ein-/Ausgangstest - Spannungssignal H2
+{CMD_UNKNOWN, CAT_IOTEST, VT_CLOSEDOPEN, 7846, STR7846, 0, NULL}, // [0] - Ein-/Ausgangstest - Kontaktzustand H2
+{0x073D082F, CAT_IOTEST, VT_VOLTAGE, 7854, STR7854, 0, NULL}, // Spannungssignal H3
+{0x073D0809, CAT_IOTEST, VT_CLOSEDOPEN, 7855, STR7855, 0, NULL}, // Kontaktzustand H3
+{0x053D03F6, CAT_IOTEST, VT_VOLTAGE, 7870, STR7870, 0, NULL}, // [V] - Ein-/Ausgangstest - Brennerstörung S3
+{0x053D03F5, CAT_IOTEST, VT_VOLTAGE, 7881, STR7881, 0, NULL}, // [V] - Ein-/Ausgangstest - 1. Brennerstufe E1
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7889, STR7889, 0, NULL}, // Niederdruckwächter E9
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7890, STR7890, 0, NULL}, // Hochdruckwächter E10
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7891, STR7891, 0, NULL}, // Wickl’schutz Verdicht 1 E11
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7911, STR7911, 0, NULL}, // Eingang EX 1
+{0x053D03FC, CAT_IOTEST, VT_VOLTAGE, 7912, STR7912, 0, NULL}, // [V] - Ein-/Ausgangstest - Eingang EX2
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7913, STR7913, 0, NULL}, // Eingang EX 3
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7914, STR7914, 0, NULL}, // Eingang EX 4
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7915, STR7915, 0, NULL}, // Eingang EX 5
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7916, STR7916, 0, NULL}, // Eingang EX 6
+{CMD_UNKNOWN, CAT_IOTEST, VT_UNKNOWN, 7917, STR7917, 0, NULL}, // Eingang EX 7
+
+//Status
+{0x053d07a3, CAT_STATUS, VT_ENUM, 8000, STR8000, sizeof(ENUM8000), ENUM8000}, // [ ] - Status - Status Heizkreis 1
+{0x053d07a5, CAT_STATUS, VT_ENUM, 8001, STR8001, sizeof(ENUM8001), ENUM8001}, // [ ] - Status - Status Heizkreis 2
+{0x053D07A7, CAT_STATUS, VT_ENUM, 8002, STR8002, sizeof(ENUM8002), ENUM8002}, // [ ] - Status - Status Heizkreis P
+{0x053d07a1, CAT_STATUS, VT_ENUM, 8003, STR8003, sizeof(ENUM8003), ENUM8003}, // [] - Status - Status Trinkwasser
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8004, STR8004, 0, NULL}, // Status Kühlkreis 1
+{0x053d07a9, CAT_STATUS, VT_ENUM, 8005, STR8005, sizeof(ENUM8005), ENUM8005}, // [] - Status - Status Kessel
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8006, STR8006, 0, NULL}, // Status Wärmepumpe
+{0x053d07ad, CAT_STATUS, VT_ENUM, 8007, STR8007, sizeof(ENUM8007), ENUM8007}, // [] - Status - Status Solar
+{0x053D0A08, CAT_STATUS, VT_ENUM, 8008, STR8008, sizeof(ENUM8008), ENUM8008}, // [] - Status - Status Feststoffkessel
+{0x053D07AB, CAT_STATUS, VT_ENUM, 8010, STR8010, sizeof(ENUM8010), ENUM8010}, // [] - Status - Status Pufferspeicher
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8011, STR8011, 0, NULL}, // Status Schwimmbad
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8022, STR8022, 0, NULL}, // Status Zusatzerzeuger
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8050, STR8050, 0, NULL}, // Zeitstemper Statushistorie 1
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8051, STR8051, 0, NULL}, // Statuscode Statushistorie 1
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8052, STR8052, 0, NULL}, // Zeitstemper Statushistorie 2
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8053, STR8053, 0, NULL}, // Statuscode Statushistorie 2
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8054, STR8054, 0, NULL}, // Zeitstemper Statushistorie 3
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8055, STR8055, 0, NULL}, // Statuscode Statushistorie 3
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8056, STR8056, 0, NULL}, // Zeitstemper Statushistorie 4
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8057, STR8057, 0, NULL}, // Statuscode Statushistorie 4
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8058, STR8058, 0, NULL}, // Zeitstemper Statushistorie 5
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8059, STR8059, 0, NULL}, // Statuscode Statushistorie 5
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8060, STR8060, 0, NULL}, // Zeitstemper Statushistorie 6
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8061, STR8061, 0, NULL}, // Statuscode Statushistorie 6
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8062, STR8062, 0, NULL}, // Zeitstemper Statushistorie 7
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8063, STR8063, 0, NULL}, // Statuscode Statushistorie 7
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8064, STR8064, 0, NULL}, // Zeitstemper Statushistorie 8
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8065, STR8065, 0, NULL}, // Statuscode Statushistorie 8
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8066, STR8066, 0, NULL}, // Zeitstemper Statushistorie 9
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8067, STR8067, 0, NULL}, // Statuscode Statushistorie 10
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8068, STR8068, 0, NULL}, // Zeitstemper Statushistorie 10
+{CMD_UNKNOWN, CAT_STATUS, VT_UNKNOWN, 8069, STR8069, 0, NULL}, // Statuscode Statushistorie 10
+
+// Diagnose Kaskade
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8100, STR8100, 0, NULL}, // Priorität / Status Erzeuger 1
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8102, STR8102, 0, NULL}, // Priorität / Status Erzeuger 2
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8104, STR8104, 0, NULL}, // Priorität / Status Erzeuger 3
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8106, STR8106, 0, NULL}, // Priorität / Status Erzeuger 4
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8108, STR8108, 0, NULL}, // Priorität / Status Erzeuger 5
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8110, STR8110, 0, NULL}, // Priorität / Status Erzeuger 6
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8112, STR8112, 0, NULL}, // Priorität / Status Erzeuger 7
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8114, STR8114, 0, NULL}, // Priorität / Status Erzeuger 8
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8116, STR8116, 0, NULL}, // Priorität / Status Erzeuger 9
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8118, STR8118, 0, NULL}, // Priorität / Status Erzeuger 10
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8120, STR8120, 0, NULL}, // Priorität / Status Erzeuger 11
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8122, STR8122, 0, NULL}, // Priorität / Status Erzeuger 12
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8124, STR8124, 0, NULL}, // Priorität / Status Erzeuger 13
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8126, STR8126, 0, NULL}, // Priorität / Status Erzeuger 14
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8128, STR8128, 0, NULL}, // Priorität / Status Erzeuger 15
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8130, STR8130, 0, NULL}, // Priorität / Status Erzeuger 16
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8138, STR8138, 0, NULL}, // Kaskadenvorlauftemperatur
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8139, STR8139, 0, NULL}, // Kaskadenvorlaufsollwert
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8140, STR8140, 0, NULL}, // Kaskadenrücklauftemperatur
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8141, STR8141, 0, NULL}, // Kaskadenrücklaufsollwert
+{CMD_UNKNOWN, CAT_DIAG_KASKADE, VT_UNKNOWN, 8150, STR8150, 0, NULL}, // Erz'folge Umschalt aktuell
+
+
+//Diagnose Erzeuger
+{0x053D09A0, CAT_DIAG_ERZEUGER, VT_ONOFF, 8300, STR8300, 0, NULL}, // [0] - Diagnose Erzeuger - 1. Brennerstufe T2
+{0x053D09A1, CAT_DIAG_ERZEUGER, VT_ONOFF, 8301, STR8301, 0, NULL}, // [0] - Diagnose Erzeuger - 2. Brennerstufe T8
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8308, STR8308, 0, NULL}, // Drehzahl Kesselpumpe
+{0x0d3d0519, CAT_DIAG_ERZEUGER, VT_TEMP, 8310, STR8310, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kesseltemperatur
+{0x0d3d0923, CAT_DIAG_ERZEUGER, VT_TEMP, 8311, STR8311, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kesselsollwert
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8312, STR8312, 0, NULL}, // Kesselschaltpunkt
+{0x113d051a, CAT_DIAG_ERZEUGER, VT_TEMP, 8314, STR8314, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kesselrücklauftemperatur
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8315, STR8315, 0, NULL}, // Kesselrücklaufsollwert
+{0x053D051D, CAT_DIAG_ERZEUGER, VT_TEMP, 8316, STR8316, 0, NULL}, // [°C ] - Diagnose Erzeuger - Abgastemperatur
+{0x053D051C, CAT_DIAG_ERZEUGER, VT_TEMP, 8318, STR8318, 0, NULL}, // [°C ] - Diagnose Erzeuger - Abgastemperatur Maximum
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8326, STR8326, 0, NULL}, // Brennermodulation
+{0x0D3D093B, CAT_DIAG_ERZEUGER, VT_HOURS, 8330, STR8330, 0, NULL}, // [h ] - Diagnose Erzeuger - Betriebstunden 1.Stufe
+{0x053D08A5, CAT_DIAG_ERZEUGER, VT_DWORD, 8331, STR8331, 0, NULL}, // [0] - Diagnose Erzeuger - Startzaehler 1.Stufe
+{0x0D3D093D, CAT_DIAG_ERZEUGER, VT_HOURS, 8332, STR8332, 0, NULL}, // [h ] - Diagnose Erzeuger - Betriebsstunden 2. Stufe
+{0x053D08A6, CAT_DIAG_ERZEUGER, VT_DWORD, 8333, STR8333, 0, NULL}, // [0] - Diagnose Erzeuger - Startzaehler 2.Stufe
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8400, STR8400, 0, NULL}, // Verdichter 1 K1
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8401, STR8401, 0, NULL}, // Verdichter 2 K2
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8402, STR8402, 0, NULL}, // Elektroeinsatz 1 Vorlauf
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8403, STR8403, 0, NULL}, // Elektroeinsatz 2 Vorlauf
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8404, STR8404, 0, NULL}, // Quellenpu Q8 / Ventilat K19
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8405, STR8405, 0, NULL}, // Drehzahl Quellenpumpe
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8406, STR8406, 0, NULL}, // Konendastorpumpe Q9
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8410, STR8410, 0, NULL}, // Rücklauftemperatur WP
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8411, STR8411, 0, NULL}, // Sollwert WP
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8412, STR8412, 0, NULL}, // Vorlauftemperatur WP
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8415, STR8415, 0, NULL}, // Heissgastemperatur 1
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8416, STR8416, 0, NULL}, // Heissgastemperatur Max
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8417, STR8417, 0, NULL}, // Heissgastemperatur 2
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8420, STR8420, 0, NULL}, // Kältemitteltemperatur flüssig
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8425, STR8425, 0, NULL}, // Temp’spreizung Kondensator
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8426, STR8426, 0, NULL}, // Temp’spreizung Verdampfer
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8427, STR8427, 0, NULL}, // Quelle Eintrittstemperatur
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8428, STR8428, 0, NULL}, // Quelle Eintritt Min
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8429, STR8429, 0, NULL}, // Quelle Austrittstemperatur
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8430, STR8430, 0, NULL}, // Quelle Austritt Min
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8440, STR8440, 0, NULL}, // Rest Stufe 1 Stillst’zeit Min
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8441, STR8441, 0, NULL}, // Rest Stufe 2 Stillst’zeit Min
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8442, STR8442, 0, NULL}, // Rest Stufe 1 Laufzeit Min
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8443, STR8443, 0, NULL}, // Rest Stufe 2 Laufzeit Min
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8444, STR8444, 0, NULL}, // Restzeit Begr Quelle TempMin
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8446, STR8446, 0, NULL}, // Verdichterfolge
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8450, STR8450, 0, NULL}, // Betr’stunden Verdichter 1
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8451, STR8451, 0, NULL}, // Startzähler Verdichter 1
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8452, STR8452, 0, NULL}, // Betr’stunden Verdichter 2
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8453, STR8453, 0, NULL}, // Startzähler Verdichter 2
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8454, STR8454, 0, NULL}, // Sperrdauer WP
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8455, STR8455, 0, NULL}, // Zähler Anzahl Sperren WP
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8456, STR8456, 0, NULL}, // Betr’stunden Elektro Vorl
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8457, STR8457, 0, NULL}, // Startzähler Elektro Vorlauf
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8469, STR8469, 0, NULL}, // Drehzahl Ventilator
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8470, STR8470, 0, NULL}, // Ventilator K19
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8471, STR8471, 0, NULL}, // Prozessumkehrventil
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8475, STR8475, 0, NULL}, // Verdampfertemperatur
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8477, STR8477, 0, NULL}, // Temp'diff Abtauen Istwert
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8478, STR8478, 0, NULL}, // Temp'diff Abtauen Sollwert
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8480, STR8480, 0, NULL}, // Restzeit Abtausperrung
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8481, STR8481, 0, NULL}, // Restzeit Zwangsabtauen
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8482, STR8482, 0, NULL}, // Restzeit Abtaustabilisierung
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8485, STR8485, 0, NULL}, // Anzahl Abtauversuche
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8487, STR8487, 0, NULL}, // Status Abtauen WP
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8505, STR8505, 0, NULL}, // Drehzahl Kollektorpumpe 1
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8506, STR8506, 0, NULL}, // Drehzahl Solarpump ext.Tau
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8507, STR8507, 0, NULL}, // Drehzahl Solarpumpe Puffer
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8508, STR8508, 0, NULL}, // Drehzahl Solarpump Sch'bad
+{0x493d052a, CAT_DIAG_ERZEUGER, VT_TEMP, 8510, STR8510, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kollektortemperatur 1
+{0x493D053F, CAT_DIAG_ERZEUGER, VT_TEMP, 8511, STR8511, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kollektortemperatur 1 Max
+{0x493D0718, CAT_DIAG_ERZEUGER, VT_TEMP, 8512, STR8512, 0, NULL}, // [°C ] - Diagnose Erzeuger - Kollektortemperatur 1Min
+{0x493D053B, CAT_DIAG_ERZEUGER, VT_TEMP, 8513, STR8513, 0, NULL}, // [°C ] - Diagnose Erzeuger - dT Kollektor 1/TWW
+{0x493D053C, CAT_DIAG_ERZEUGER, VT_TEMP, 8514, STR8514, 0, NULL}, // [°C ] - Diagnose Erzeuger - dt Kollektor 1/Puffer
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8515, STR8515, 0, NULL}, // dT Kollektor 1 / Schwimmbad
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8519, STR8519, 0, NULL}, // Solarvorlauftemperatur
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8520, STR8520, 0, NULL}, // Solarrücklauftemperatur
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8526, STR8526, 0, NULL}, // Tagesertrag Solarenergie
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8527, STR8527, 0, NULL}, // Gesamtertrag Solarenergie
+{0x493d0893, CAT_DIAG_ERZEUGER, VT_HOURS, 8530, STR8530, 0, NULL}, // [h ] - Diagnose Erzeuger - Betr`stunden Solarertrag
+{0x493D0717, CAT_DIAG_ERZEUGER, VT_HOURS, 8531, STR8531, 0, NULL}, // [h ] - Diagnose Erzeuger - Betr`stunden Kollektor`überhitz
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8543, STR8543, 0, NULL}, // Drehzahl Kollektorpumpe 2
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8547, STR8547, 0, NULL}, // Kollektortemperatur 2
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8548, STR8548, 0, NULL}, // Kollektortemperatur 2 Max
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8549, STR8549, 0, NULL}, // Kollektortemperatur 2 Min
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8550, STR8550, 0, NULL}, // dT Kollektor 2 / TWW
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8551, STR8551, 0, NULL}, // dT Kollektor 2 / Puffer
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8552, STR8552, 0, NULL}, // dT Kollektor 2 / Schwimmbad
+{0x513D052E, CAT_DIAG_ERZEUGER, VT_TEMP, 8560, STR8560, 0, NULL}, // [°C ] - Diagnose Erzeuger - Feststoffkesseltemperatur
+{CMD_UNKNOWN, CAT_DIAG_ERZEUGER, VT_UNKNOWN, 8570, STR8570, 0, NULL}, // Betr'std Feststoffkessel
+
+// Diagnose Verbraucher
+{0x053d0521, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8700, STR8700, 0, NULL}, // [°C ] - Diagnose Verbraucher - Aussentemperatur
+{0x053D056F, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8701, STR8701, 0, NULL}, // Außentemperatur Minimum
+{0x053D056E, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8702, STR8702, 0, NULL}, // Außentemperatur Maximum
+{0x053d05f0, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8703, STR8703, 0, NULL}, // [°C ] - Diagnose Verbraucher - Aussentemperatur gedaempft
+{0x053d05f2, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8704, STR8704, 0, NULL}, // [°C ] - Diagnose Verbraucher - Aussentemperatur gemischt
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8720, STR8720, 0, NULL}, // Relative Raumfeuchte
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8721, STR8721, 0, NULL}, // Raumtemperatur
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8722, STR8722, 0, NULL}, // Taupunkttemperatur
+{0x053D09A5, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8730, STR8730, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreispumpe Q2
+{0x053D09A6, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8731, STR8731, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Auf Y1
+{0x053D09A7, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8732, STR8732, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Zu Y2
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8735, STR8735, 0, NULL}, // Drehzahl Heizkreispumpe 1
+{0x2d3d051e, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8740, STR8740, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumtemperatur 1
+{0x2d3d0593, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8741, STR8741, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumsollwert 1
+{0x213d0518, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8743, STR8743, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlauftemperatur 1 Alarm
+{0x213d0667, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8744, STR8744, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert 1
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8751, STR8751, 0, NULL}, // Kühlkreispumpe Q24
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8752, STR8752, 0, NULL}, // Kühlkreismischer Auf Y23
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8753, STR8753, 0, NULL}, // Kühlkreismischer Zu Y24
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8754, STR8754, 0, NULL}, // Umlenkventil Kühlen Y21
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8756, STR8756, 0, NULL}, // Vorlauftemperatur Kühlen 1
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8757, STR8757, 0, NULL}, // Vorlaufsollwert Kühlen1
+{0x053D09A8, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8760, STR8760, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreispumpe Q6
+{0x053D09A9, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8761, STR8761, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Auf Y5
+{0x053D09AA, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8762, STR8762, 0, NULL}, // [0] - Diagnose Verbraucher - Heizkreismischer Zu Y6
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8765, STR8765, 0, NULL}, // Drehzahl Heizkreispumpe 2
+{0x2e3d051e, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8770, STR8770, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumtemperatur 2
+{0x2e3d0593, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8771, STR8771, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumsollwert 2
+{0x223d0518, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8773, STR8773, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlauftemperatur 2
+{0x223d0667, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8774, STR8774, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert 2
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8795, STR8795, 0, NULL}, // Drehzahl Heizkreispumpe P
+{0x2F3D051E, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8800, STR8800, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumtemperatur P
+{0x2F3D0593, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8801, STR8801, 0, NULL}, // [°C ] - Diagnose Verbraucher - Raumsollwert P
+{0x233D0667, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8803, STR8803, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsol wert P
+{0x053D09A3, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 8820, STR8820, 0, NULL}, // [0] - Diagnose Verbraucher - Trinkwasserpumpe Q3
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8821, STR8821, 0, NULL}, // Elektroeinsatz TWW K6
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8825, STR8825, 0, NULL}, // Drehzahl Trinkwasserpumpe
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8826, STR8826, 0, NULL}, // Drehzahl TWW Zw'kreispumpe
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8827, STR8827, 0, NULL}, // Drehzahl Dl'erhitzerpumpe
+{0x313d052f, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8830, STR8830, 0, NULL}, // [°C ] - Diagnose Verbraucher - Trinkwassertemperatur 1
+{0x313d074b, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8831, STR8831, 0, NULL}, // [°C ] - Diagnose Verbraucher - Trinkwassersollwert
+{0x313d0530, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8832, STR8832, 0, NULL}, // [°C ] - Diagnose Verbraucher - Trinkwassertemperatur 2
+{0x253D077D, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8835, STR8835, 0, NULL}, // [°C ] - Diagnose Verbraucher - TWW Zirkulationstemperatur
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8836, STR8836, 0, NULL}, // TWW Ladetemperatur
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8840, STR8840, 0, NULL}, // Betr’stunden TWW-Pumpe
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8841, STR8841, 0, NULL}, // Startzähler TWW-Pumpe
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8842, STR8842, 0, NULL}, // Betr’stunden Elektro TWW
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8843, STR8843, 0, NULL}, // Startzähler Elektro TWW
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8850, STR8850, 0, NULL}, // TWW Vorreglertemperatur
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8851, STR8851, 0, NULL}, // TWW Vorreglersollwert
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8852, STR8852, 0, NULL}, // TWW Durchl'erhitzertemp
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8853, STR8853, 0, NULL}, // TWW Durchl'erhitzersollwert
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8900, STR8900, 0, NULL}, // Schwimmbadtemperatur
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8901, STR8901, 0, NULL}, // Schwimmbadsollwert
+{0x053D08C7, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8930, STR8930, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorreglertemperatur
+{0x053D08C8, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8931, STR8931, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorreglersollwert
+{0x053D051F, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8950, STR8950, 0, NULL}, // [°C ] - Diagnose Verbraucher - Schienenvorlauftemperatur
+{0x053D0783, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8951, STR8951, 0, NULL}, // [°C ] - Diagnose Verbraucher - Schienenvorlaufsollwert
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8952, STR8952, 0, NULL}, // Schienenrücklauftemperatur
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8957, STR8957, 0, NULL}, // Schienenvorl'sollwert Kälte
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8962, STR8962, 0, NULL}, // Leistungssollwert Schiene
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8970, STR8970, 0, NULL}, // Elektroeinsatz Puffer
+{0x053d0534, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8980, STR8980, 0, NULL}, // [°C ] - Diagnose Verbraucher - Pufferspeichertemperatur 1
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8981, STR8981, 0, NULL}, // Pufferspeichersollwert
+{0x053D0535, CAT_DIAG_VERBRAUCHER, VT_TEMP, 8982, STR8982, 0, NULL}, // [°C ] - Diagnose Verbraucher - Pufferspeichertemperatur 2
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8983, STR8983, 0, NULL}, // Pufferspeichertemperatur 3
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8990, STR8990, 0, NULL}, // Betr’stunden Elektro Puffer
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 8991, STR8991, 0, NULL}, // Startzähler Elektro Puffer
+{0x053D080C, CAT_DIAG_VERBRAUCHER, VT_TEMP, 9000, STR9000, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert H1
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_TEMP, 9001, STR9001, 0, NULL}, // [°C ] - Diagnose Verbraucher - Vorlaufsollwert H2
+{0x073D080C, CAT_DIAG_VERBRAUCHER, VT_TEMP, 9004, STR9004, 0, NULL}, // Vorlaufsollwert H3
+{0x053D0805, CAT_DIAG_VERBRAUCHER, VT_PRESSURE_WORD, 9005, STR9005, 0, NULL}, // [bar ] - Diagnose Verbraucher - Wasserdruck H1
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_PRESSURE_WORD, 9006, STR9006, 0, NULL}, // [bar ] - Diagnose Verbraucher - Wasserdruck H2
+{0x073D0805, CAT_DIAG_VERBRAUCHER, VT_PRESSURE_WORD, 9009, STR9009, 0, NULL}, // [bar ] - Diagnose Verbraucher - Wasserdruck H3
+{0x053D09BA, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9031, STR9031, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX1
+{0x053D09BB, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9032, STR9032, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX2
+{0x053D09BC, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9033, STR9033, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX3
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9034, STR9034, 0, NULL}, // Relaisausgang QX4
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9035, STR9035, 0, NULL}, // Relaisausgang QX5
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9036, STR9036, 0, NULL}, // Relaisausgang QX6
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9037, STR9037, 0, NULL}, // Relaisausgang QX7
+{CMD_UNKNOWN, CAT_DIAG_VERBRAUCHER, VT_UNKNOWN, 9038, STR9038, 0, NULL}, // Relaisausgang QX8
+{0x053D09F6, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9050, STR9050, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX21 Modul 1
+{0x053D09F7, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9051, STR9051, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX22 Modul 1
+{0x053D09F8, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9052, STR9052, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX23 Modul 1
+{0x053D09F9, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9053, STR9053, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX21 Modul 2
+{0x053D09FA, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9054, STR9054, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX22 Modul 2
+{0x053D09FB, CAT_DIAG_VERBRAUCHER, VT_ONOFF, 9055, STR9055, 0, NULL}, // [0] - Diagnose Verbraucher - Relaisausgang QX23 Modul 2
+
+// Feuerungsautomat
+{0x2d3d3037, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9500, STR9500, 0, NULL}, // Vorlüftzeit
+{0x213d3038, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9502, STR9502, 0, NULL}, // Gebl'ansteuerung Vorlüftung
+{0x213d300f, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9504, STR9504, 0, NULL}, // Solldrehzahl Vorlüftung
+{0x0d3d3048, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9510, STR9510, 0, NULL}, // Gebl'ansteuerung Zündung
+{0x0d3d2fc9, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9512, STR9512, 0, NULL}, // Solldrehzahl Zündung
+{0x0d3d3049, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9520, STR9520, 0, NULL}, // Gebl'ansteuerung Betrieb. Min
+{0x0d3d304a, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9522, STR9522, 0, NULL}, // Gebl'ansteuerung Betrieb. Max
+{0x0d3d2fca, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9524, STR9524, 0, NULL}, // Solldrehzahl Betrieb Min
+{0x0d3d2fcb, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9527, STR9527, 0, NULL}, // Solldrehzahl Betrieb Max
+{0x2d3d304c, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9540, STR9540, 0, NULL}, // Nachlüftzeit
+{0x253d2fe8, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9560, STR9560, 0, NULL}, // Gebl'ansteuerung Durchlad
+{0x253d2fe9, CAT_FEUERUNGSAUTOMAT, VT_UNKNOWN, 9563, STR9563, 0, NULL}, // Solldrehzahl Durchlasung
+
+ /*** virtuelle Zeilen ***/
+{0x2d3d0215, CAT_USER_DEFINED, VT_TEMP, 10000, STR10000, 0, NULL}, // Raumtemperatur 1 (kann als INF geschickt werden)
+
+{CMD_END, CAT_UNKNOWN, VT_UNKNOWN,0,"", 0, NULL}
+};
+
+/* buffer to load PROGMEM values in RAM */
+#define BUFLEN 3500
+char buffer[BUFLEN];
+
+/* buffer to print output lines*/
+#define OUTBUF_LEN 300
+char outBuf[OUTBUF_LEN];
+byte outBufLen=0;
+
+void outBufclear(void){
+ outBufLen=0;
+ outBuf[0]='\0';
+}
+
+int dayofweek(uint8_t day, uint8_t month, uint16_t year)
+{
+ /** Zeller's congruence for the Gregorian calendar. **/
+ /** With 1=Monday, ... 5=Saturday, 7=Sunday **/
+ if (month < 3) {
+ month += 12;
+ year--;
+ }
+ return (((13*month+3)/5 + day + year + year/4 - year/100 + year/400) % 7) + 1;
+}
+
+
+void setup() {
+ Serial.begin(115200);
+ Serial.println(F("READY"));
+ Serial.print(F("free RAM:"));
+ Serial.println(freeRam());
+
+ // enable w5100 SPI
+ pinMode(10,OUTPUT);
+ digitalWrite(10,LOW);
+
+ // disable SD Card
+ pinMode(4,OUTPUT);
+ digitalWrite(4,HIGH);
+
+ // start the Ethernet connection and the server:
+ Ethernet.begin(mac, ip);
+ server.begin();
+}
+
+int findLine(uint16_t line, uint16_t start_idx, uint32_t *cmd){
+ int found;
+ int i;
+ uint32_t c;
+ uint16_t l;
+
+ // search for the line in cmdtbl
+ i=start_idx;
+ found=0;
+ do{
+ c=pgm_read_dword(&cmdtbl[i].cmd);
+ if(c==CMD_END) break;
+ l=pgm_read_word(&cmdtbl[i].line);
+ if(l==line){
+ found=1;
+ break;
+ }
+ if(l>line){
+ break;
+ }
+ i++;
+ }while(1);
+
+ if(!found){
+ return -1;
+ }
+ if(cmd!=NULL) *cmd=c;
+ return i;
+}
+
+#define MAX_PARAM_LEN 22
+
+int set(uint16_t line,char *val, bool setcmd){
+ byte msg[33];
+ byte tx_msg[33];
+ int i;
+ uint32_t c;
+ uint8_t param[MAX_PARAM_LEN]; // 33 -9 - 2
+ uint8_t param_len;
+
+ i=findLine(line,0,&c);
+ if(i<0) return 0;
+
+ // get type
+ switch(pgm_read_byte(&cmdtbl[i].type)){
+ case VT_TEMP:
+ {
+ uint16_t t=atof(val)*64.0;
+ if(setcmd){
+ param[0]=0x01;
+ param[1]=(t >> 8);
+ param[2]= t & 0xff;
+ }else{ // INF message type (e.g. for room temperature)
+ param[0]=(t >> 8);
+ param[1]= t & 0xff;
+ param[2]=0x00;
+ }
+ param_len=3;
+ }
+ break;
+ case VT_PERCENT:
+ {
+ if(val[0]!='\0'){
+ uint8_t t=atoi(val);
+ param[0]=0x06; //enable
+ param[1]=t;
+ }else{
+ param[0]=0x05; // disable
+ param[1]=0x00;
+ }
+ param_len=2;
+ }
+ break;
+ case VT_ENUM:
+ case VT_ONOFF: // 1 = On
+ case VT_CLOSEDOPEN: // 1 = geschlossen
+ case VT_YESNO: // 1 = Ja
+ case VT_WEEKDAY: // (1=Mo..7=So)
+ {
+ uint8_t t=atoi(val);
+ param[0]=0x01;
+ param[1]=t;
+ param_len=2;
+ }
+ break;
+ case VT_FP02: // (e.g. Kennlinie Steilheit)
+ {
+ uint16_t t=atof(val)*50.0;
+ param[0]=0x01;
+ param[1]=(t >> 8);
+ param[2]= t & 0xff;
+ param_len=3;
+ }
+ break;
+ case VT_PRESSURE:
+ {
+ uint8_t t=atof(val)*10.0;
+ param[0]=0x01;
+ param[1]= t;
+ param_len=2;
+ }
+ break;
+ case VT_UINT: // (Brennerstarts Intervall/Brennerstarts seit Wartung)
+ {
+ if(val[0]!='\0'){
+ uint16_t t=atoi(val);
+ param[0]=0x06; //enable
+ param[1]=(t >> 8);
+ param[2]= t & 0xff;
+ }else{
+ param[0]=0x05; // disable
+ param[1]=0x00;
+ param[2]=0x00;
+ }
+ param_len=3;
+ }
+ break;
+ case VT_MINUTES: // (HK1 - Einschaltoptimierung)
+ {
+ uint32_t t=atoi(val)*60;
+ param[0]=0x01;
+ param[1]=(t >> 24) & 0xff;
+ param[2]=(t >> 16) & 0xff;
+ param[3]=(t >> 8) & 0xff;
+ param[4]= t & 0xff;
+ param_len=5;
+ }
+ break;
+ case VT_HOURS_WORD: // (Brennerstunden Intervall - nur durch 100 teilbare Werte)
+ case VT_MINUTES_WORD: // (Legionellenfunktion Verweildauer)
+ {
+ if(val[0]!='\0'){
+ uint16_t t=atoi(val);
+ param[0]=0x06; //enable
+ param[1]=(t >> 8) & 0xff;
+ param[2]= t & 0xff;
+ }else{
+ param[0]=0x05; // disable
+ param[1]=0x00;
+ param[2]=0x00;
+ }
+ param_len=3;
+ }
+ break;
+ case VT_MONTHS: //(Wartungsintervall)
+ case VT_MINUTES_SHORT: // ( Fehler - Alarm)
+ {
+ if(val[0]!='\0'){
+ uint8_t t=atoi(val);
+ param[0]=0x06; //enable
+ param[1]= t;
+ }else{
+ param[0]=0x05; // disable
+ param[1]=0x00;
+ }
+ param_len=2;
+ }
+ break;
+ case VT_DAYS: // (Legionellenfkt. Periodisch)
+ case VT_HOURS_SHORT: // (Zeitkonstante Gebäude)
+ {
+ uint8_t t=atoi(val);
+ param[0]=0x01; //enable
+ param[1]= t;
+ param_len=2;
+ }
+ break;
+ case VT_HOUR_MINUTES: //TODO test it
+ {
+ if(val[0]!='\0'){
+ uint8_t h=atoi(val);
+ uint8_t m=0;
+ while(*val!='\0' && *val!=':') val++;
+ if(*val==':'){
+ val++;
+ m=atoi(val);
+ }
+ param[0]=0x06; //enable
+ param[1]= h;
+ param[2]= m;
+ }else{
+ param[0]=0x05; // disable
+ param[1]=0x00;
+ param[2]=0x00;
+ }
+ param_len=3;
+ }
+ break;
+ case VT_DWORD:
+ {
+ if(val[0]!='\0'){
+ uint32_t t=atoi(val);
+ param[0]=0x06; //enable
+ param[1]=(t >> 24) & 0xff;
+ param[2]=(t >> 16) & 0xff;
+ param[3]=(t >> 8) & 0xff;
+ param[4]= t & 0xff;
+ }else{
+ param[0]=0x05; // disable
+ param[1]=0x00;
+ param[2]=0x00;
+ param[3]=0x00;
+ param[4]=0x00;
+ }
+ param_len=5;
+ }
+ break;
+ case VT_BYTE: // TODO test it (LPB Geräteadresse / Segmentadresse)
+ {
+ uint8_t t=atoi(val);
+ param[0]=0x01;
+ param[1]=t;
+ param_len=2;
+ }
+ break;
+ case VT_STRING: // (Telefon Kundendienst)
+ {
+ strncpy((char *)param,val,MAX_PARAM_LEN);
+ param[MAX_PARAM_LEN-1]='\0';
+ param_len=strlen((char *)param)+1;
+ }
+ break;
+ case VT_DATETIME: // TODO do we have to send INF or SET command?
+ {
+ //S0=dd.mm.yyyy_mm:hh:ss
+ // date and time are transmitted as INF message by the display unit
+ // DISP->ALL INF 0 Uhrzeit und Datum - Datum/Zeit: 30.01.2015 23:17:00
+ // DC 8A 7F 14 02 05 00 00 6C 00 73 01 1E 05 17 11 00 00 A1 AB
+ int d,m,y,min,hour,sec;
+ if(6!=sscanf(val,"%d.%d.%d_%d:%d:%d",&d,&m,&y,&hour,&min,&sec))
+ return 0;
+
+ Serial.print("date time: ");
+ Serial.print(d);
+ Serial.print(".");
+ Serial.print(m);
+ Serial.print(".");
+ Serial.print(y);
+ Serial.print(" ");
+ Serial.print(hour);
+ Serial.print(":");
+ Serial.print(min);
+ Serial.print(":");
+ Serial.println(sec);
+
+ //outBufLen+=sprintf(outBuf+outBufLen,"%02d.%02d.%d %02d:%02d:%02d",msg[12],msg[11],msg[10]+1900,msg[14],msg[15],msg[16]);
+ param[0]=0x01; //???
+ param[1]=y-1900;
+ param[2]=m;
+ param[3]=d;
+ param[4]=dayofweek(d,m,y);
+ param[6]=hour;
+ param[7]=min;
+ param[8]=sec;
+ param_len=9;
+ }
+ break;
+ case VT_TIMEPROG: // TODO test it
+ {
+ //S502=05:00-22:00|xx:xx-xx:xx|xx:xx-xx:xx
+ //DISP->HEIZ SET 502 Zeitprogramm Heizkreis 1 - Mi: 1. 05:00 - 22:00 2. --:-- - --:-- 3. --:-- - --:--
+ //DC 8A 00 17 03 3D 05 0A 8E 05 00 16 00 80 00 00 00 80 00 00 00 08 98
+ int h1s=0x80,m1s=0x00,h2s=0x80,m2s=0x00,h3s=0x80,m3s=0x00;
+ int h1e=0x80,m1e=0x00,h2e=0x80,m2e=0x00,h3e=0x80,m3e=0x00;
+ int ret;
+ ret=sscanf(val,"%d:%d-%d:%d|%d:%d-%d:%d|%d:%d-%d:%d",&h1s,&m1s,&h1e,&m1e,&h2s,&m2s,&h2e,&m2e,&h3s,&m3s,&h3e,&m3e);
+ // we need at least the first period
+ if(ret<4)
+ return 0;
+ param[0]=h1s;
+ param[1]=m1s;
+ param[2]=h1e;
+ param[3]=m1e;
+
+ param[4]=h2s;
+ param[5]=m2s;
+ param[6]=h2e;
+ param[7]=m2e;
+
+ param[8]=h3s;
+ param[9]=m3s;
+ param[10]=h3e;
+ param[11]=m3e;
+ param_len=12;
+ }
+ break;
+ case VT_VACATIONPROG:
+ //DISP->HEIZ SET 3D0509C6 06 00 02 0A 00 00 00 00 17
+ //outBufLen+=sprintf(outBuf+outBufLen,"%02d.%02d",msg[12],msg[11]);
+ param[1]=0;
+ param[2]=0;
+ param[3]=0;
+ param[4]=0;
+ param[5]=0;
+ param[6]=0;
+ param[7]=0;
+ param[8]=0x17; //?
+ param_len=9;
+ if(val[0]!='\0'){
+ int d,m;
+ if(2!=sscanf(val,"%d.%d.",&d,&m))
+ return 0;
+ param[0]=0x06;
+ param[2]=m;
+ param[3]=d;
+ }else{
+ param[0]=0x05;
+ }
+ break;
+ case VT_SUMMERPERIOD: // TODO do we have to send INF or SET command?
+ {
+ // Sommerzeit scheint im DISP gehandelt zu werden
+ // Bei Anzeige werden keine Werte abgefragt. Bei Änderung wird ein INF geschickt.
+ // Sommerzeit Beginn 25.3. DISP->ALL INF 0500009E 00 FF 03 19 FF FF FF FF 16
+ // Sommerzeit Ende 25.11. DISP->ALL INF 0500009D 00 FF 0B 19 FF FF FF FF 16
+ int d,m;
+ if(2!=sscanf(val,"%d.%d",&d,&m))
+ return 0;
+ param[0]=0;
+ param[1]=0xff;
+ param[2]=m;
+ param[3]=d;
+ param[4]=0xff;
+ param[5]=0xff;
+ param[6]=0xff;
+ param[7]=0xff;
+ param[8]=0x17; //?
+ param_len=9;
+ }
+ break;
+ case VT_HOURS: // (read only)
+ case VT_VOLTAGE: // read only (Ein-/Ausgangstest)
+ case VT_LPBADDR: // read only (LPB-System - Aussentemperaturlieferant)
+ case VT_PRESSURE_WORD: // read only (Diagnose Verbraucher)
+ case VT_FP1: // read only (SW-Version)
+ case VT_ERRORCODE: // read only
+ case VT_UNKNOWN:
+ default:
+ return 0;
+ break;
+ }
+ Serial.print("setting line: ");
+ Serial.print(line);
+ Serial.print(" val: ");
+ SerialPrintRAW(param,param_len);
+ Serial.println();
+
+ uint8_t t=setcmd?TYPE_SET:TYPE_INF;
+
+ if(!bus.Send(t, c, msg, tx_msg, param, param_len, setcmd)){
+ Serial.println("set failed");
+ return 0;
+ }
+
+ if(verbose) printTelegram(tx_msg);
+
+ // no answer fpr TYPE_INF
+ if(t!=TYPE_SET) return 1;
+
+ printTelegram(msg);
+ if(msg[4]!=TYPE_ACK){
+ Serial.println("set failed NACK");
+ return 0;
+ }
+
+ return 1;
+}
+
+void query(uint16_t line_start, uint16_t line_end){
+ byte msg[33];
+ byte tx_msg[33];
+ uint32_t c;
+ uint16_t line;
+ int i=0;
+ int idx=0;
+ int retry;
+
+ client.println("");
+ for(line=line_start;line<=line_end;line++){
+ outBufclear();
+ i=findLine(line,idx,&c);
+
+ if(i>=0){
+ idx=i;
+ //Serial.println("found");
+ if(c!=CMD_UNKNOWN){
+ retry=QUERY_RETRIES;
+ while(retry){
+ if(bus.Send(TYPE_QUR, c, msg, tx_msg)){
+
+ if(verbose) printTelegram(tx_msg);
+
+ printTelegram(msg);
+ break;
+ }else{
+ Serial.println("query failed");
+ retry--;
+ }
+ }
+ if(retry==0)
+ outBufLen+=sprintf(outBuf+outBufLen,"%d query failed",line);
+ }else{
+ //Serial.println("unknown command");
+ //if(line_start==line_end) outBufLen+=sprintf(outBuf+outBufLen,"%d unknown command",line);
+ }
+ }else{
+ //Serial.println("line not found");
+ //if(line_start==line_end) outBufLen+=sprintf(outBuf+outBufLen,"%d line not found",line);
+ }
+ if(outBufLen>0){
+ client.println(outBuf);
+ client.println(" ");
+ }
+ }
+ client.println("
");
+}
+
+void loop() {
+ byte msg[33];
+ byte tx_msg[33];
+ char c;
+ const byte MaxArrayElement=252;
+ char cLineBuffer[MaxArrayElement];
+ byte bPlaceInBuffer;
+
+ // listen for incoming messages
+ if(verbose){
+ if (bus.GetMessage(msg)) printTelegram(msg);
+ }
+
+ // listen for incoming clients
+ client = server.available();
+ if (client) {
+ bPlaceInBuffer=0;
+ while (client.connected()) {
+ if (client.available()) {
+ c = client.read();
+ Serial.print(c);
+
+ if ((c!='\n') && (c!='\r') && (bPlaceInBuffer");
+ }
+ webPrintFooter();
+ break;
+ }
+ // list enum values
+ if(p[1]=='E'){
+ webPrintHeader();
+ uint16_t line = atoi(&p[2]);
+ int i=findLine(line,0,NULL);
+ if(i>=0){
+ // check type
+ if(pgm_read_byte(&cmdtbl[i].type)==VT_ENUM){
+ int enumstr_len=pgm_read_word(&cmdtbl[i].enumstr_len);
+ memcpy_P(buffer, (char*)pgm_read_word(&(cmdtbl[i].enumstr)),enumstr_len);
+ buffer[enumstr_len]=0;
+
+ uint16_t val;
+ uint16_t c=0;
+ while(c");
+
+ while(buffer[c]!=0) c++;
+ c++;
+ }
+ }else{
+ client.println(F("ERROR: wrong type"));
+ }
+ }else{
+ client.println(F("ERROR: line not found"));
+ }
+ webPrintFooter();
+ break;
+ }
+ // query reset value
+ if(p[1]=='R'){
+ uint32_t c;
+ webPrintHeader();
+ uint16_t line = atoi(&p[2]);
+ int i=findLine(line,0,&c);
+ if(i<0){
+ client.println(F("ERROR: line not found"));
+ }else{
+ if(!bus.Send(TYPE_QRV, c, msg, tx_msg)){
+ Serial.println("set failed");
+ client.println(F("ERROR: set failed"));
+ }else{
+
+ if(verbose) printTelegram(tx_msg);
+
+ printTelegram(msg);
+ if(outBufLen>0){
+ client.println(outBuf);
+ client.println(" ");
+ }
+ }
+ }
+ webPrintFooter();
+ break;
+ }
+ // print queries
+ webPrintHeader();
+ char* range;
+ char* line_start;
+ char* line_end;
+ int start=-1;
+ int end=-1;
+ range = strtok(p,"/");
+ while(range!=0){
+ if(range[0]=='K'){
+ uint8_t cat,search_cat;
+ uint16_t line;
+ int i;
+ uint32_t c;
+ i=0;
+ start=-1;
+ end=-1;
+ search_cat=atoi(&range[1]);
+ c=pgm_read_dword(&cmdtbl[i].cmd);
+ while(c!=CMD_END){
+ cat=pgm_read_byte(&cmdtbl[i].category);
+ if(cat==search_cat){
+ if(start<0){
+ line=pgm_read_word(&cmdtbl[i].line);
+ start=line;
+ }
+ }else{
+ if(start>=0){
+ line=pgm_read_word(&cmdtbl[i-1].line);
+ end=line;
+ break;
+ }
+ }
+ i++;
+ c=pgm_read_dword(&cmdtbl[i].cmd);
+ }
+ }else{
+ // split range
+ line_start=range;
+ line_end=strchr(range,'-');
+ if(line_end==NULL){
+ line_end=line_start;
+ }else{
+ *line_end='\0';
+ line_end++;
+ }
+ start=atoi(line_start);
+ end=atoi(line_end);
+ }
+ query(start,end);
+
+ range = strtok(NULL,"/");
+ }
+ webPrintFooter();
+ break;
+ }
+ }
+ // give the web browser time to receive the data
+ delay(1);
+ // close the connection:
+ client.stop();
+ }
+}
+
+int freeRam () {
+ extern int __heap_start, *__brkval;
+ int v;
+ return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
+}
+
+void SerialPrintHex(byte val) {
+ if (val < 16) Serial.print("0");
+ Serial.print(val, HEX);
+}
+
+void SerialPrintHex32(uint32_t val) {
+ if (val <= 0x0fffffff) Serial.print("0");
+ if (val <= 0x00ffffff) Serial.print("0");
+ if (val <= 0x000fffff) Serial.print("0");
+ if (val <= 0x0000ffff) Serial.print("0");
+ if (val <= 0x00000fff) Serial.print("0");
+ if (val <= 0x000000ff) Serial.print("0");
+ if (val <= 0x0000000f) Serial.print("0");
+ Serial.print(val, HEX);
+}
+
+
+void SerialPrintData(byte* msg){
+ int data_len=msg[3]-11;
+ for(int i=0;i>4,(msg[10] & 0x0f)+1);
+ }else{
+ outBufLen+=sprintf(outBuf+outBufLen,"---");
+ }
+ Serial.print(p);
+ }else{
+ Serial.print(F(" VT_LPBADDR len !=2: "));
+ SerialPrintData(msg);
+ outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
+ }
+}
+
+void printTelegram(byte* msg) {
+ char gradC[]="°C";
+ char perc[]="%";
+
+ outBufclear();
+/*
+#if !DEBUG
+ // suppress DE telegrams
+ if(msg[0]==0xDE) return;
+
+ // suppress QUERY telegrams
+ if(msg[4]==TYPE_QUR) return;
+#endif
+*/
+ // source
+ SerialPrintAddr(msg[1]); // source
+ Serial.print("->");
+ SerialPrintAddr(msg[2]); // destination
+ Serial.print(" ");
+ // msg[3] contains the message length
+ SerialPrintType(msg[4]); // type
+ Serial.print(" ");
+
+ uint32_t cmd;
+ if(msg[4]==TYPE_QUR || msg[4]==TYPE_SET){ //QUERY and SET: byte 5 and 6 are in reversed order
+ cmd=(uint32_t)msg[6]<<24 | (uint32_t)msg[5]<<16 | (uint32_t)msg[7] << 8 | (uint32_t)msg[8];
+ }else{
+ cmd=(uint32_t)msg[5]<<24 | (uint32_t)msg[6]<<16 | (uint32_t)msg[7] << 8 | (uint32_t)msg[8];
+ }
+
+ // search for the command in cmdtbl
+ int i=0;
+ int known=0;
+ uint32_t c;
+ c=pgm_read_dword(&cmdtbl[i].cmd);
+ while(c!=CMD_END){
+ if(c == cmd){
+ known=1;
+ break;
+ }
+ i++;
+ c=pgm_read_dword(&cmdtbl[i].cmd);
+ }
+ if(!known){
+ Serial.print(" ");
+ SerialPrintHex32(cmd);
+ Serial.print(" ");
+ }else{
+ uint16_t line=pgm_read_word(&cmdtbl[i].line);
+ printLineNumber(line);
+ Serial.print(" ");
+ outBufLen+=sprintf(outBuf+outBufLen," ");
+
+ // print category
+ int cat=pgm_read_byte(&cmdtbl[i].category);
+ int len=sizeof(ENUM_CAT);
+ memcpy_P(buffer, &ENUM_CAT,len);
+ buffer[len]=0;
+ printENUM(buffer,len,cat,0);
+ Serial.print(" - ");
+ outBufLen+=sprintf(outBuf+outBufLen," - ");
+
+ // print menue text
+ strcpy_P(buffer, (char*)pgm_read_word(&(cmdtbl[i].desc)));
+ char *p=outBuf+outBufLen;
+ outBufLen+=sprintf(outBuf+outBufLen," %s: ",buffer);
+ Serial.print(p);
+ }
+ // decode parameter
+ int data_len=msg[3]-11;
+ if(data_len < 0){
+ Serial.print(F("len ERROR "));
+ Serial.print(msg[3]);
+ }else{
+ if(data_len > 0){
+ if(known){
+ double dval;
+ long lval;
+
+ switch(pgm_read_byte(&cmdtbl[i].type)){
+ case VT_DATETIME: // special
+ printDateTime(msg,data_len);
+ break;
+ case VT_SUMMERPERIOD:
+ case VT_VACATIONPROG:
+ printDate(msg,data_len);
+ break;
+ case VT_TIMEPROG:
+ prinTimeProg(msg,data_len);
+ break;
+ case VT_MINUTES_SHORT: //u8 min
+ printBYTE(msg,data_len,"min");
+ break;
+ case VT_MINUTES_WORD: //u16 min
+ printWORD(msg,data_len,"min");
+ break;
+ case VT_MINUTES: // u32 min
+ printDWORD(msg,data_len,60,"min");
+ break;
+ case VT_HOURS_SHORT: // u8 h
+ printBYTE(msg,data_len,"h");
+ break;
+ case VT_HOURS_WORD: // u16 h
+ printWORD(msg,data_len,"h");
+ break;
+ case VT_HOURS: // u32 h
+ printDWORD(msg,data_len,3600,"h");
+ break;
+ case VT_HOUR_MINUTES: // u8:u8
+ printTime(msg,data_len);
+ break;
+ case VT_TEMP: // s16 / 64.0 - Wert als Temperatur interpretiert (RAW / 64)
+ printFIXPOINT(msg,data_len,64.0,1,gradC);
+ break;
+ case VT_PRESSURE_WORD: // u16 / 10.0 bar
+ printFIXPOINT(msg,data_len,10.0,1,"bar");
+ break;
+ case VT_PRESSURE: // u8 / 10.0 bar
+ printFIXPOINT_BYTE(msg,data_len,10.0,1,"bar");
+ break;
+ case VT_FP02: // u16 / 50.0 - Wert als Festkommazahl mit 2/100 Schritten interpretiert (RAW / 50)
+ printFIXPOINT(msg,data_len,50.0,2,NULL);
+ break;
+ case VT_FP1: // s16 / 10.0 Wert als Festkommazahl mit 1/10 Schritten interpretiert (RAW / 10)
+ printFIXPOINT(msg,data_len,10.0,1,NULL);
+ break;
+ case VT_BYTE: // u8
+ printBYTE(msg,data_len,NULL);
+ break;
+ case VT_ONOFF:
+ printCHOICE(msg,data_len,"Aus","Ein");
+ break;
+ case VT_YESNO:
+ printCHOICE(msg,data_len,"Nein","Ja");
+ break;
+ case VT_CLOSEDOPEN:
+ printCHOICE(msg,data_len,"Offen","Geschlossen");
+ break;
+ case VT_DAYS: // u8 Tage
+ printBYTE(msg,data_len,"Tage");
+ break;
+ case VT_MONTHS: // u8 Monate
+ printBYTE(msg,data_len,"Monate");
+ break;
+ case VT_WEEKDAY: // enum
+ if(data_len == 2){
+ if(msg[9]==0){
+ int len=sizeof(ENUM_WEEKDAY);
+ memcpy_P(buffer, &ENUM_WEEKDAY,len);
+ buffer[len]=0;
+ printENUM(buffer,len,msg[10],0);
+ }else{
+ Serial.print(F("---"));
+ outBufLen+=sprintf(outBuf+outBufLen,"---");
+ }
+ }else{
+ Serial.print(F(" VT_WEEKDAY !=2: "));
+ SerialPrintData(msg);
+ outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
+ }
+ break;
+ case VT_ENUM: // enum
+ if(data_len == 2){
+ if(msg[9]==0){
+ if(pgm_read_word(&cmdtbl[i].enumstr)!=0){
+ int len=pgm_read_word(&cmdtbl[i].enumstr_len);
+ memcpy_P(buffer, (char*)pgm_read_word(&(cmdtbl[i].enumstr)),len);
+ buffer[len]=0;
+
+ printENUM(buffer,len,msg[10],1);
+ }else{
+ Serial.print(F("no enum str "));
+ SerialPrintData(msg);
+ outBufLen+=sprintf(outBuf+outBufLen,"no enum str");
+ }
+ }else{
+ Serial.print(F("---"));
+ outBufLen+=sprintf(outBuf+outBufLen,"---");
+ }
+ }else{
+ Serial.print(F(" VT_ENUM len !=2: "));
+ SerialPrintData(msg);
+ outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
+ }
+ break;
+ case VT_PERCENT: // u8 %
+ printBYTE(msg,data_len,perc);
+ break;
+ case VT_DWORD: // s32
+ printDWORD(msg,data_len,1,NULL);
+ break;
+ case VT_STRING: // string
+ if(data_len > 0){
+ if(msg[9]!=0){
+ msg[9 + data_len]='\0'; // write terminating zero
+ Serial.print((char*)&msg[9]);
+ outBufLen+=sprintf(outBuf+outBufLen,"%s",(char*)&msg[9]);
+ } else {
+ Serial.print("-");
+ outBufLen+=sprintf(outBuf+outBufLen,"-");
+ }
+ }else{
+ Serial.print(F(" VT_STRING len ==0: "));
+ SerialPrintData(msg);
+ outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
+ }
+ break;
+ case VT_ERRORCODE: // s16
+ if(data_len == 3){
+ if(msg[9]==0){
+ long lval;
+ lval=(long(msg[10])<<8)+long(msg[11]);
+ int len=sizeof(ENUM_ERROR);
+ memcpy_P(buffer, &ENUM_ERROR,len);
+ buffer[len]=0;
+ printENUM(buffer,len,lval,1);
+ } else {
+ Serial.print("---");
+ outBufLen+=sprintf(outBuf+outBufLen,"---");
+ }
+ }else{
+ Serial.print(F(" VT_ERRORCODE len ==0: "));
+ SerialPrintData(msg);
+ outBufLen+=sprintf(outBuf+outBufLen,"decoding error");
+ }
+ break;
+ case VT_UINT: // s16
+ printWORD(msg,data_len,NULL);
+ break;
+ case VT_VOLTAGE: // u16 - 0.0 -> 00 00 (decoding unklar, da nur 0V gesehen)
+ //printFIXPOINT_BYTE(msg,data_len,10.0,1,"Volt");
+ printBYTE(msg,data_len,"Volt");
+ break;
+ case VT_LPBADDR: //decoding unklar 00 f0 -> 15.01
+ printLPBAddr(msg,data_len);
+ break;
+ case VT_UNKNOWN:
+ default:
+ SerialPrintData(msg);
+ outBufLen+=sprintf(outBuf+outBufLen,"unknown type");
+ break;
+ }
+ }else{
+ SerialPrintData(msg);
+ //Serial.println();
+ // SerialPrintRAW(msg,msg[3]);
+ outBufLen+=sprintf(outBuf+outBufLen,"unknown command");
+ }
+ }
+ }
+ Serial.println();
+ if(verbose){
+ SerialPrintRAW(msg,msg[3]);
+ Serial.println();
+ }
+}
+
+void webPrintHeader(void){
+ client.println(F("HTTP/1.1 200 OK"));
+ client.println(F("Content-Type: text/html"));
+ client.println();
+ client.println(F(""));
+ client.println(F(""));
+ client.println(F(""));
+ client.println(F(" "));
+ client.println(F("BSB LAN-SERVER "));
+ client.println(F(" "));
+ client.println(F(""));
+ client.println(F(""));
+}
+
+void webPrintFooter(void){
+ client.println(F(""));
+ client.println(F(""));
+ client.println();
+
+}
+
+void webPrintSite() {
+ webPrintHeader();
+
+ client.println(F(""));
+ client.print(F("BSB Web"));
+ client.print(F(" ----------
"));
+ client.print(F(" options:"));
+ client.print(F("
"));
+ client.print(F(" /K list available categories "));
+ client.print(F(" /Kx query all values in category x "));
+ client.print(F(" /x query value for line x "));
+ client.print(F(" /x-y query all values from line x up to line y "));
+ client.print(F(" /Sx=v set value v for line x and query the new value afterwards (empty string after = disables the value "));
+ client.print(F(" /Ix=v send INF message for command in line x with value v "));
+ client.print(F(" /Ex list enum values for line x "));
+ client.print(F(" /Rx query reset value for line x "));
+ client.print(F(" /Vn set verbosity level for serial output "));
+ client.print(F("
"));
+ client.print(F(" multiple queries are possible, e.g. /K0/710/8000-8999"));
+ webPrintFooter();
+}
diff --git a/BSB_lan/BSB_lan/README b/BSB_lan/BSB_lan/README
new file mode 100644
index 00000000..ff9084bc
--- /dev/null
+++ b/BSB_lan/BSB_lan/README
@@ -0,0 +1,151 @@
+BSB Boiler-System-Bus LAN Interface
+
+ATTENION:
+ There is no waranty that this system will not damage your heating system!
+
+Author: Gero Schumacher (gero.schumacher@gmail.com)
+ Based on the code and work from many other developers (see Info section below). Many thanks!
+
+License:
+ You are free to use this software on your own risk. Please take care of the licenses of the used libraries and software.
+
+Info:
+ http://www.mikrocontroller.net/topic/218643
+ http://blog.dest-unreach.be/2012/12/14/reverse-engineering-the-elco-heating-protocol
+ http://forum.fhem.de/index.php/topic,29762.0.html
+ systemhandbuch_isr.pdf
+
+Host System:
+ The software is designed to run on an arduino mega2560 board with ethernet shield.
+ Because there are different pin assignments for different ethernet shields, you
+ may have to connect the BSB adapter to different pins and to change the pin assigment
+ in the software.
+ The software is tested with the following components:
+ - SainSmart MEGA2560 R3 Development Board
+ - SainSmart Ethernet Schild Für Arduino UNO MEGA Duemilanove*Neu Version W5100*
+ - BSB-Interface (see BSB_adapter.pdf)
+ For this configuration pin A14 (68) ist used as RX and pin A15 (69) is used as TX:
+
+ BSB bus(68,69);
+
+Target System:
+ Tested with: Elco Straton oil fired condensing boiler.
+ Communication should be possible with all systems that support the BSB interface.
+ Missing command ids have to be added in the cmdtbl.
+ Until now it is not clear to me, what the differences between the LPB and BSB protocols are. The physical specifications
+ are the same. But may be they differe on the protocol level. Until now I have only connected the system to the BSB.
+
+BEFORE BUILDING the software you have to adapt some parameters in BSB_lan.ino:
+ - MAC address of your ethernet shield. It can be normally found on a label at the shield:
+ byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEA };
+ - Ethernet address
+ IPAddress ip(192,168,178,88);
+ - Ethernet port
+ EthernetServer server(80);
+ - Pin assigment of the BSB adapter
+ BSB bus(68,69);
+ - (optional) Activate the usage of the passkey functionality (see below)
+ #define USE_PASSKEY 1
+ - (optional) BSB address (default is 0x06=RGT1, but can be overwritten in the bus initialization)
+ BSB bus(68,69,);
+
+Interface:
+ A simple syntax description is content of the website displayed when the server is accessed by its simple URL withou any parameters.
+ e.g. http://
+ To protect the system for unwanted access you can enable the passkey feature (very simple and not really secure!).
+ If the passkey feature is enabled (see below), the URL has to contain the defined passkey as first element
+ e.g. http://// - to see the help
+ The urls in the below examples have to be exented, if the passeky feature is turned on.
+ All parameters are accessed by line numbers. A nearly complete description can be found in systemhandbuch_isr.pdf.
+ Some lines are 'virtual', i.e. they were added to simplify the access to complex settings like time programms.
+ The parameters are grouped in categories according to the submenu items when accessing your boiler system from the display.
+
+ List all categories:
+ http:///K
+ This command does not communicate with the boiler system. It is a software internal feature.
+
+
+ List all enum values for parameter x
+ http:///E
+ This command does not communicate with the boiler system. It is a software internal feature.
+ The command is only available for parameters of the type VT_ENUM.
+
+ Query all values from category x:
+ http:///K
+
+ Query value for line x
+ http:///
+
+ Query value for a range of lines (from line x up to line y)
+ http:///-
+
+ Multiple queries can be concatenated
+ e.g. http:///K11/8000/8003/8005/8300/8301/8730-8732/8820
+
+ Query for the reset value of parameter x
+ http:///R
+ In the display there is a reset option for some parameters. A reset is performed by asking the boiler for the reset value
+ and setting it afterwards.
+
+ Set value v for parameter x
+ http:///S=
+ Attention: This feature is not extensively tested. So be careful what are you doing and do it on your own risk.
+ The format of the value depends on its type. Some parameters can be disabled. To set a parameter to 'disable', just send an empty value
+ http:///S=
+ The description of the value formats will be added here. Until then have a look at the source code (function set).
+
+ Send INF message for parameter x with value v
+ http:///I=
+ Some values cannot be set directly. The heating system is informed by a TPYE_INF message. E.g. the room temperature
+ e.g. http:///I10000=19.5 // room temperature is 19.5 degree.
+
+ Set verbosity level n
+ http:///V
+ The default verbosity level is 0. When setting it to 1 the bus is monitored and all data is additionally printed in raw hex format.
+ The verbose output only affects the serial console of the mega2560. The html output is kept unchanged.
+
+Open issues
+ - Add more command ids to the table.
+ Only the known command ids from the threads listed above and the testet boiler system (ELCO) are content of the table.
+ Any user with a different boiler system can set the verbosity to 1 and decode the missing command ids simply by accessing the sytem via
+ the display.
+ Cause we want to provide a general working system for all boiler configurations working with BSB. Any help and feedback is appreciated!
+
+ - Test and complete the set funcionality
+ With the current implementation a lot of values can be already set. But there is still some testing needed and some parameter types have to be added.
+
+ - Introduce valid ranges for parameters
+ To make the access safer when setting values for parameters, the valid ranges should be added to the command table
+
+ - Add read-only flag for parameters
+ To make the access safer add a flag for parameters, that can be read only.
+
+ - Test and maybe extend the system to work with LPB instead of BSB.
+
+ - Decode DE telegrams. Maybe they contain some status information and we can use them without querying.
+
+ - Add support of error messages send by the boiler system
+
+
+
+Extension: TODO
+
+ Room temperature sensor simulation:
+
+ affected parameters
+ - 710 - HK1 - Komfortsollwert
+ - 750 - HK1 - Raumeinfluss
+ - 700 - HK1 - Betriebsart (0=Schutzbetrieb, 1=Automatik, 2=Reduziert, 3=Komfort)
+ - INF 10000=Raumtemperatur
+ - 8740 Diagnose Verbraucher - Raumtemperatur 1
+ - 8741 Diagnose Verbraucher - Raumsollwert 1
+
+ To simulate a room temperature sensor the temperature has to be sent in a regular interval (<10min).
+ Additionally the boiler can be switched off, when no heating is requested.
+ When using the PID20 module from fhem, we can try the following approach:
+ - loop over all PID20 devices
+ - skip all devices which are not the state processing
+ - skip all devices with an actuation less than 10 percent
+ - get the max desired temperature for all not skipped devices
+ - get the greatest difference from desired and measured temperature for all not skipped devices
+ - calculate a virtual min measured temperature using this difference
diff --git a/BSB_lan/BSB_lan/bsb_adapter.pdf b/BSB_lan/BSB_lan/bsb_adapter.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..4075054d3c6639508a02766b4e3b9a0dcfa402f8
GIT binary patch
literal 5384
zcmb_gc|6ql|IdorY4dHREk}GJ&5)VT%$PCEGL9KX&cSpb*)j7mhB-7x&U8ppp*B{R
zvA+)
zD!0C@YrAH5JSE4;bLI6Hdh3l^jDM|uJ2hH9G3mcy+w0cAcr*9BG3$Msrq0|NyVLFJ
zYFAPddGSOr^3CXY?|b$A8mn@imt5%HX7;*O>G;&`T^Xt-@3Qx`&*zneA;%AtdJ>&Z
zTbo$pP(q)9Z8w{vw#|v|ei83g^Kk4Jt2y_h(v#%AiE~4W5^J}oUgKYUGcnY2Ew3V>
z8e8vhrb~J7mm$fo!%qe(M!I50S(7>T2XMs+H+%cehL=pfF7Mp->+`60KT0V0_s{zp
z){AvTBZ1Cd!O_27@2}WK<2r_*O$Jp}^g4BQ^~#zOuD!fp6<1v9oWIAR{lMj>$>WEf
z->s8qXv=AYg@;S%!VTe_^tYh|@oPuu}rW>WY5rDhtexhYOp5(+dJhRQf{VX1rK
zBH~^QHN^aw=ekn_jdc5bTxhp8>D5-Z7)>O##m*&7((bt0yO%C~blSd*XF2DM&3D0vJsFxzlZ2EQO%)>*O1n+k
z)iGPU8e+B5LPL6e)N|jE?=j=wSuW2(4Q;X@#iI*$*f}&wcb_Ga~8{722_#&jEg|&|gOfhNuYkiBCpRD(+cv}#U_OO|3fEM)LgMzt*!_F5UX>+b%PVOlD#^wS!
z?$WxAN2r+2i(JB1kQa?UpIkAQv!dC%z484elWZlWX3X8-E0gDKhAm{Mq1BT7oqb$Z
zTLWw#UO4`BcsEr!@?yBQvX6_Y%FumPN&J;p1v%s`@vCkUI&0^utn03+bp2to&aOLK
zzm~Cy$(TXo&|BM!4tqX!@eeGQCC3$c-AvlsTUu-5)`Fa)Dbghi&(Cp1d2%yl`ExEB
z4`&%8HUyzT*U8QM0=3}%-WTf47Hro&cYY6bx9+K5zPOW?Ak4%(TF)5JE=(Q9W|wLZ
zY#C2F@2UPPbl&y%Hke$|Q*DySvo(5wKCbIUjlW)7^Zd7VI#suv=<_v4H9a&o{U&se
zJ4bG_6(Vji$|0-wW$*EBkBanF%Ts<)+tHHv#i5*`pV3wQ_ctrUF}JrjEY#&`ysp?7
zpIKBk+RrNZYWJXeW}jC*J<@KGHEU1QlV{BRtiwNDKz^eRZEANEa;KGs+N^Et8#PmT
z=7)YF(%L$z-1*>b-T3880by5}t2ZW&pPjd{{|hTCQhj6j*?&e6Q-z
zwbZ1bDy94P-D2WyU|+ltSHfEQIv1Vtl>FRMpP^`$lUQY=
zsxX&d_Y9ZNtXAyT(P_WdbB9(uKQlYO^YfvTxtOUv{S_XA8LmNjxhF0xbKtKji4)d_
zX5w-Tg!284sr~T0*Q%YHf(nH0hX<32C~qQniCLp-o1L;73YQ$comu@5AHVx<^XNVm
zoq{^sy$2spIfZ7##9E)e-ta?7VS2Jl-c|38-XC>e_B5$>=B&*8*|BN9`&h04)JSMP
zwEg_5B}rZsTlE*Z=*7uxsT=mYsQAZP_ShRNuhRTFm?r9!5!ZXwFD*^HD(a8F
z>7Zx$xcF$ov!18@muuPUjruAVRFKl@s`^zk3~-fScgJw_$_@D3%FE8njxUSKzvJvA
z{ORhuR_EOrV)ec1?|w_$d3WfXuw+SAOR6vPhm9ty3cZRR#<;ZYG>(ruT(u*VS)oJ_
zrpMNf)^gG{7~6|>XIsG56US3F4`Td|M&nN1c@o_o6Rz#apA4+E@<_abv|m{lubxR{
zIrp*5Z?&J?L%arY;Mc)d;`trwF_m*FYd~2eYy^(X9
zw6B`*=55K;Ek^KX5QQ=EpuTddGq%iz`@>_hy4sO2p8g~W5pGi&ZcV9fc(kfJY*9^#
z-pCxQI_Iqq8@meLJYRQfVsm7~Ci(cFWo>(O)2X)|{E>4HbSmxF*7u&?;?+&ke%0D}
zaC~H>b$!=lZ|2nGaNZpqt5UIGRlh}6K2taN@q+Y1CBJLB-&NiI{^*qJ;8)hwq&LVB
z&8sV)FN4zFAd77VjH|JQQGt0w3*TAex~g3dJ>FYs8F4le{aRWyfz6$qY7XxZ47xOM
zFAN{UaMK&_TSr#iFlojntXd)o*igCa<-4@pER)LK`RIa4GG;@pv#!UfFY;HE=%u?GX%DE^->6h0F2ppw$L!88dAVxG&;E|tE&d1Q
zw)Y0#bg3A+uKIKzdC<_2GtgF)6R@Xu{Z|_6vmT4vo#!njSdWvp$ZnqUeks-c(tf8=
zb@QM<+oyl2UirL41J)bE6>EYAaUC4`Z*K=l6c5W}8_!aAkBP;Ofg~
zKa%#Y>$NBeJA1TP+0B@0k4lLfHvZoA`%B4XjXGBgEwU^PF6}xmqVBP)gg!5C_$j$Z
zeExli(7WAnLM8Urj)6vUPFp!`-}l_=zG-s
zsMl6G&S9mg`(LT$AWv5QhSm7=`qj4%K@
zrR-kCXhKBXSriFY3goH4n~Gne84-_~rICI|rL4#>1ZJ{%2<(P%`D{CJ1muSY+hhwe
zWKJUbqhK$w3}95q0uR_Eh)4#RDiAE7BT}(k!a<|}+cG6$jyEFng8}-5U=|V~1A_Ju
zGDq(j*%=83F_0!Gw0ofd+J))h9VnDS3Y0uen)Od%VFon=Wxzpb+CwP>yYRVE$PcCP
z-wWjr0S$76N`}r&E8FgBkpwAOvI$qzQzL3=8=pxzzs?NyYJJ
zU70S04}n2_w6(#_^~1LdfkXgSXY0$-IwFkC2}NX3Aj0E|tk5Hs)o6&%wL-5ayW!o!
z=twZ%DN2HPN4c{&QK1|QF4~%gvb1J{vP7^E>@aN5^hb~sLZlokeY%&cgT8_xf*K(V
z6N3Ce5ki4TN{z5WPm55&T0w@<&@_uI)C#@9jS0!bVnHZh1`%-_D+xW`&l^
z`CKYO=CIAk2nEZ*vq@M20SUt5!GjGV1esDy%`6bJAmoF&uut6lgFUbT44Q&CfE5+A
z9#_smBvxogrYqzaESAb<>_ZkfJQ)qo9{->63gqVRqW}^*8wN|jLv;gn8x+X^lY>UY
z6Tn%CSR$T9Bv4H)sAS@5Jb{YGTf%?h1jz@Ybnp=jK8pVX(N8!(5fw{Vpd@HKdxkB<
zlX8L)p`s2zZ2(8`cp`8Hq?pGx#RuW>fipf#E1H$FgcVu)Bwqh?1leJ3ZvTG_g+fJ<
zEBL4kF-I;0Lvjt{zbT=AI_q4{M~B1Y62Wx8a5*p{Koq`7LE;I(V=jjpB$f!-pxW7C
zVFEDA6ionwDn-*Q!KREa6CkwdZnPE1W)=dzqPwU9wuonij=*w}Ahui}L(|}3u@HfI
zh(ru4IvEZ@5E1y31h(_G3;3|+iaBtgG%x^6@-Xmk3J&CYCV2urZDuiT2L9dj-=ub$
z1cn31GW>D$&`{7n^!#&*exJAC0JY(d`-L1Tq0nr2Tsie+BZA
V%GeUwbTUX56avc7(B8uV^?$FKGgtrs
literal 0
HcmV?d00001
diff --git a/BSB_lan/libraries/BSB/BSBSoftwareSerial.cpp b/BSB_lan/libraries/BSB/BSBSoftwareSerial.cpp
new file mode 100644
index 00000000..09b9862e
--- /dev/null
+++ b/BSB_lan/libraries/BSB/BSBSoftwareSerial.cpp
@@ -0,0 +1,512 @@
+/*
+SoftwareSerial.cpp (formerly NewSoftSerial.cpp) -
+Multi-instance software serial library for Arduino/Wiring
+-- Interrupt-driven receive and other improvements by ladyada
+ (http://ladyada.net)
+-- Tuning, circular buffer, derivation from class Print/Stream,
+ multi-instance support, porting to 8MHz processors,
+ various optimizations, PROGMEM delay tables, inverse logic and
+ direct port writing by Mikal Hart (http://www.arduiniana.org)
+-- Pin change interrupt macros by Paul Stoffregen (http://www.pjrc.com)
+-- 20MHz processor support by Garrett Mace (http://www.macetech.com)
+-- ATmega1280/2560 support by Brett Hagman (http://www.roguerobotics.com/)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+The latest version of this library can always be found at
+http://arduiniana.org.
+*/
+
+// When set, _DEBUG co-opts pins 11 and 13 for debugging with an
+// oscilloscope or logic analyzer. Beware: it also slightly modifies
+// the bit times, so don't rely on it too much at high baud rates
+#define _DEBUG 0
+#define _DEBUG_PIN1 11
+#define _DEBUG_PIN2 13
+//
+// Includes
+//
+#include
+#include
+#include "Arduino.h"
+#include "BSBSoftwareSerial.h"
+//
+// Lookup table
+//
+typedef struct _DELAY_TABLE
+{
+ long baud;
+ unsigned short rx_delay_centering;
+ unsigned short rx_delay_intrabit;
+ unsigned short rx_delay_stopbit;
+ unsigned short tx_delay;
+} DELAY_TABLE;
+
+#if F_CPU == 16000000
+
+static const DELAY_TABLE PROGMEM table[] =
+{
+ // baud rxcenter rxintra rxstop tx
+ { 115200, 1, 17, 17, 12, },
+ { 57600, 10, 37, 37, 33, },
+ { 38400, 25, 57, 57, 54, },
+ { 31250, 31, 70, 70, 68, },
+ { 28800, 34, 77, 77, 74, },
+ { 19200, 54, 117, 117, 114, },
+ { 14400, 74, 156, 156, 153, },
+ { 9600, 114, 236, 236, 233, },
+ { 4800, 233, 474, 474, 471, },
+ { 2400, 471, 950, 950, 947, },
+ { 1200, 947, 1902, 1902, 1899, },
+ { 300, 3804, 7617, 7617, 7614, },
+};
+
+const int XMIT_START_ADJUSTMENT = 5;
+
+#elif F_CPU == 8000000
+
+static const DELAY_TABLE table[] PROGMEM =
+{
+ // baud rxcenter rxintra rxstop tx
+ { 115200, 1, 5, 5, 3, },
+ { 57600, 1, 15, 15, 13, },
+ { 38400, 2, 25, 26, 23, },
+ { 31250, 7, 32, 33, 29, },
+ { 28800, 11, 35, 35, 32, },
+ { 19200, 20, 55, 55, 52, },
+ { 14400, 30, 75, 75, 72, },
+ { 9600, 50, 114, 114, 112, },
+ { 4800, 110, 233, 233, 230, },
+ { 2400, 229, 472, 472, 469, },
+ { 1200, 467, 948, 948, 945, },
+ { 300, 1895, 3805, 3805, 3802, },
+};
+
+const int XMIT_START_ADJUSTMENT = 4;
+
+#elif F_CPU == 20000000
+
+// 20MHz support courtesy of the good people at macegr.com.
+// Thanks, Garrett!
+
+static const DELAY_TABLE PROGMEM table[] =
+{
+ // baud rxcenter rxintra rxstop tx
+ { 115200, 3, 21, 21, 18, },
+ { 57600, 20, 43, 43, 41, },
+ { 38400, 37, 73, 73, 70, },
+ { 31250, 45, 89, 89, 88, },
+ { 28800, 46, 98, 98, 95, },
+ { 19200, 71, 148, 148, 145, },
+ { 14400, 96, 197, 197, 194, },
+ { 9600, 146, 297, 297, 294, },
+ { 4800, 296, 595, 595, 592, },
+ { 2400, 592, 1189, 1189, 1186, },
+ { 1200, 1187, 2379, 2379, 2376, },
+ { 300, 4759, 9523, 9523, 9520, },
+};
+
+const int XMIT_START_ADJUSTMENT = 6;
+
+#else
+
+#error This version of BSBSoftwareSerial supports only 20, 16 and 8MHz processors
+
+#endif
+
+//
+// Statics
+//
+BSBSoftwareSerial *BSBSoftwareSerial::active_object = 0;
+char BSBSoftwareSerial::_receive_buffer[_SS_MAX_RX_BUFF];
+volatile uint8_t BSBSoftwareSerial::_receive_buffer_tail = 0;
+volatile uint8_t BSBSoftwareSerial::_receive_buffer_head = 0;
+
+//
+// Debugging
+//
+// This function generates a brief pulse
+// for debugging or measuring on an oscilloscope.
+inline void DebugPulse(uint8_t pin, uint8_t count)
+{
+#if _DEBUG
+ volatile uint8_t *pport = portOutputRegister(digitalPinToPort(pin));
+
+ uint8_t val = *pport;
+ while (count--)
+ {
+ *pport = val | digitalPinToBitMask(pin);
+ *pport = val;
+ }
+#endif
+}
+
+//
+// Private methods
+//
+
+/* static */
+inline void BSBSoftwareSerial::tunedDelay(uint16_t delay) {
+ uint8_t tmp=0;
+
+ asm volatile("sbiw %0, 0x01 \n\t"
+ "ldi %1, 0xFF \n\t"
+ "cpi %A0, 0xFF \n\t"
+ "cpc %B0, %1 \n\t"
+ "brne .-10 \n\t"
+ : "+r" (delay), "+a" (tmp)
+ : "0" (delay)
+ );
+}
+
+// This function sets the current object as the "listening"
+// one and returns true if it replaces another
+bool BSBSoftwareSerial::listen()
+{
+ if (active_object != this)
+ {
+ _buffer_overflow = false;
+ uint8_t oldSREG = SREG;
+ cli();
+ _receive_buffer_head = _receive_buffer_tail = 0;
+ active_object = this;
+ SREG = oldSREG;
+ return true;
+ }
+
+ return false;
+}
+
+//
+// The receive routine called by the interrupt handler
+//
+void BSBSoftwareSerial::recv()
+{
+
+#if GCC_VERSION < 40302
+// Work-around for avr-gcc 4.3.0 OSX version bug
+// Preserve the registers that the compiler misses
+// (courtesy of Arduino forum user *etracer*)
+ asm volatile(
+ "push r18 \n\t"
+ "push r19 \n\t"
+ "push r20 \n\t"
+ "push r21 \n\t"
+ "push r22 \n\t"
+ "push r23 \n\t"
+ "push r26 \n\t"
+ "push r27 \n\t"
+ ::);
+#endif
+
+ uint8_t d = 0;
+
+ // If RX line is high, then we don't see any start bit
+ // so interrupt is probably not for us
+ if (_inverse_logic ? rx_pin_read() : !rx_pin_read())
+ {
+ // Wait approximately 1/2 of a bit width to "center" the sample
+ tunedDelay(_rx_delay_centering);
+ DebugPulse(_DEBUG_PIN2, 1);
+
+ // Read each of the 8 bits
+ for (uint8_t i=0x1; i; i <<= 1)
+ {
+ tunedDelay(_rx_delay_intrabit);
+ DebugPulse(_DEBUG_PIN2, 1);
+ uint8_t noti = ~i;
+ if (rx_pin_read())
+ d |= i;
+ else // else clause added to ensure function timing is ~balanced
+ d &= noti;
+ }
+
+ // skip the stop bit
+ tunedDelay(_rx_delay_stopbit *2);
+ DebugPulse(_DEBUG_PIN2, 1);
+
+ if (_inverse_logic)
+ d = ~d;
+
+ // if buffer full, set the overflow flag and return
+ if ((_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF != _receive_buffer_head)
+ {
+ // save new data in buffer: tail points to where byte goes
+ _receive_buffer[_receive_buffer_tail] = d; // save new byte
+ _receive_buffer_tail = (_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF;
+ }
+ else
+ {
+#if _DEBUG // for scope: pulse pin as overflow indictator
+ DebugPulse(_DEBUG_PIN1, 1);
+#endif
+ _buffer_overflow = true;
+ }
+ }
+
+#if GCC_VERSION < 40302
+// Work-around for avr-gcc 4.3.0 OSX version bug
+// Restore the registers that the compiler misses
+ asm volatile(
+ "pop r27 \n\t"
+ "pop r26 \n\t"
+ "pop r23 \n\t"
+ "pop r22 \n\t"
+ "pop r21 \n\t"
+ "pop r20 \n\t"
+ "pop r19 \n\t"
+ "pop r18 \n\t"
+ ::);
+#endif
+}
+
+void BSBSoftwareSerial::tx_pin_write(uint8_t pin_state)
+{
+ if (pin_state == LOW)
+ *_transmitPortRegister &= ~_transmitBitMask;
+ else
+ *_transmitPortRegister |= _transmitBitMask;
+}
+
+uint8_t BSBSoftwareSerial::rx_pin_read()
+{
+ return *_receivePortRegister & _receiveBitMask;
+}
+
+//
+// Interrupt handling
+//
+
+/* static */
+inline void BSBSoftwareSerial::handle_interrupt()
+{
+ if (active_object)
+ {
+ active_object->recv();
+ }
+}
+
+#if defined(PCINT0_vect)
+ISR(PCINT0_vect)
+{
+ BSBSoftwareSerial::handle_interrupt();
+}
+#endif
+
+#if defined(PCINT1_vect)
+ISR(PCINT1_vect)
+{
+ BSBSoftwareSerial::handle_interrupt();
+}
+#endif
+
+#if defined(PCINT2_vect)
+ISR(PCINT2_vect)
+{
+ BSBSoftwareSerial::handle_interrupt();
+}
+#endif
+
+#if defined(PCINT3_vect)
+ISR(PCINT3_vect)
+{
+ BSBSoftwareSerial::handle_interrupt();
+}
+#endif
+
+//
+// Constructor
+//
+BSBSoftwareSerial::BSBSoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */) :
+ _rx_delay_centering(0),
+ _rx_delay_intrabit(0),
+ _rx_delay_stopbit(0),
+ _tx_delay(0),
+ _buffer_overflow(false),
+ _inverse_logic(inverse_logic)
+{
+ setTX(transmitPin);
+ setRX(receivePin);
+}
+
+//
+// Destructor
+//
+BSBSoftwareSerial::~BSBSoftwareSerial()
+{
+ end();
+}
+
+void BSBSoftwareSerial::setTX(uint8_t tx)
+{
+ pinMode(tx, OUTPUT);
+ digitalWrite(tx, LOW);
+ _transmitBitMask = digitalPinToBitMask(tx);
+ uint8_t port = digitalPinToPort(tx);
+ _transmitPortRegister = portOutputRegister(port);
+}
+
+void BSBSoftwareSerial::setRX(uint8_t rx)
+{
+ pinMode(rx, INPUT);
+ if (!_inverse_logic)
+ digitalWrite(rx, HIGH); // pullup for normal logic!
+ _receivePin = rx;
+ _receiveBitMask = digitalPinToBitMask(rx);
+ uint8_t port = digitalPinToPort(rx);
+ _receivePortRegister = portInputRegister(port);
+}
+
+//
+// Public methods
+//
+
+void BSBSoftwareSerial::begin(long speed)
+{
+ _rx_delay_centering = _rx_delay_intrabit = _rx_delay_stopbit = _tx_delay = 0;
+
+ for (unsigned i=0; i>= 1)
+ if (b & t) p++;
+
+ for (byte mask = 0x01; mask; mask <<= 1)
+ {
+ if (b & mask) // choose bit
+ tx_pin_write(LOW); // send 1
+ else
+ tx_pin_write(HIGH); // send 0
+
+ tunedDelay(_tx_delay);
+ }
+
+ // parity
+ if (p & 0x01)
+ tx_pin_write(HIGH); // send 0
+ else
+ tx_pin_write(LOW); // send 1
+ tunedDelay(_tx_delay);
+
+ // Stop bit
+ tx_pin_write(LOW); // send 1
+ tunedDelay(_tx_delay);
+
+ tx_pin_write(LOW); // restore pin to natural state
+
+ SREG = oldSREG; // turn interrupts back on
+
+ return 1;
+}
+
+void BSBSoftwareSerial::flush()
+{
+ if (!isListening())
+ return;
+
+ uint8_t oldSREG = SREG;
+ cli();
+ _receive_buffer_head = _receive_buffer_tail = 0;
+ SREG = oldSREG;
+}
+
+int BSBSoftwareSerial::peek()
+{
+ if (!isListening())
+ return -1;
+
+ // Empty buffer?
+ if (_receive_buffer_head == _receive_buffer_tail)
+ return -1;
+
+ // Read from "head"
+ return _receive_buffer[_receive_buffer_head];
+}
diff --git a/BSB_lan/libraries/BSB/BSBSoftwareSerial.h b/BSB_lan/libraries/BSB/BSBSoftwareSerial.h
new file mode 100644
index 00000000..14bc7473
--- /dev/null
+++ b/BSB_lan/libraries/BSB/BSBSoftwareSerial.h
@@ -0,0 +1,119 @@
+/*
+SoftwareSerial.h (formerly NewSoftSerial.h) -
+Multi-instance software serial library for Arduino/Wiring
+-- Interrupt-driven receive and other improvements by ladyada
+ (http://ladyada.net)
+-- Tuning, circular buffer, derivation from class Print/Stream,
+ multi-instance support, porting to 8MHz processors,
+ various optimizations, PROGMEM delay tables, inverse logic and
+ direct port writing by Mikal Hart (http://www.arduiniana.org)
+-- Pin change interrupt macros by Paul Stoffregen (http://www.pjrc.com)
+-- 20MHz processor support by Garrett Mace (http://www.macetech.com)
+-- ATmega1280/2560 support by Brett Hagman (http://www.roguerobotics.com/)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+The latest version of this library can always be found at
+http://arduiniana.org.
+*/
+
+#ifndef BSBSoftwareSerial_h
+#define BSBSoftwareSerial_h
+
+#include
+#include
+
+//Now the library is compatible both with Arduino <=0023 and Arduino >=100
+#if defined(ARDUINO) && ARDUINO >= 100
+#include "Arduino.h"
+#else
+#include "WProgram.h"
+#endif
+
+/******************************************************************************
+* Definitions
+******************************************************************************/
+
+#define _SS_MAX_RX_BUFF 48 // RX buffer size
+#ifndef GCC_VERSION
+#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#endif
+
+class BSBSoftwareSerial : public Stream
+{
+private:
+ // per object data
+ uint8_t _receivePin;
+ uint8_t _receiveBitMask;
+ volatile uint8_t *_receivePortRegister;
+ uint8_t _transmitBitMask;
+ volatile uint8_t *_transmitPortRegister;
+
+ uint16_t _rx_delay_centering;
+ uint16_t _rx_delay_intrabit;
+ uint16_t _rx_delay_stopbit;
+ uint16_t _tx_delay;
+
+ uint16_t _buffer_overflow:1;
+ uint16_t _inverse_logic:1;
+
+ // static data
+ static char _receive_buffer[_SS_MAX_RX_BUFF];
+ static volatile uint8_t _receive_buffer_tail;
+ static volatile uint8_t _receive_buffer_head;
+ static BSBSoftwareSerial *active_object;
+
+ // private methods
+ void recv();
+ void tx_pin_write(uint8_t pin_state);
+ void setTX(uint8_t transmitPin);
+ void setRX(uint8_t receivePin);
+
+ // private static method for timing
+ static inline void tunedDelay(uint16_t delay);
+
+public:
+ // public methods
+ BSBSoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false);
+ ~BSBSoftwareSerial();
+ void begin(long speed);
+ bool listen();
+ void end();
+ uint8_t rx_pin_read();
+ bool isListening() { return this == active_object; }
+ bool overflow() { bool ret = _buffer_overflow; _buffer_overflow = false; return ret; }
+ int peek();
+
+ virtual size_t write(byte b);
+ virtual int read();
+ virtual int available();
+ virtual void flush();
+
+ using Print::write;
+
+ // public only for easy access by interrupt handlers
+ static inline void handle_interrupt();
+};
+
+// Arduino 0012 workaround
+#undef int
+#undef char
+#undef long
+#undef byte
+#undef float
+#undef abs
+#undef round
+
+#endif
diff --git a/BSB_lan/libraries/BSB/bsb.cpp b/BSB_lan/libraries/BSB/bsb.cpp
new file mode 100644
index 00000000..3115ec4e
--- /dev/null
+++ b/BSB_lan/libraries/BSB/bsb.cpp
@@ -0,0 +1,228 @@
+#if defined(ARDUINO) && ARDUINO >= 100
+#include "Arduino.h"
+#else
+#include "WProgram.h"
+#endif
+
+#include "bsb.h"
+
+#define DEBUG_LL 0
+
+// Constructor
+BSB::BSB(uint8_t rx, uint8_t tx, uint8_t addr) {
+ serial = new BSBSoftwareSerial(rx, tx, true);
+
+ serial->begin(4800);
+ serial->listen();
+ myAddr=addr;
+}
+
+// Dumps a message to Serial
+void BSB::print(byte* msg) {
+ //if (msg[0] != 0xDC) return;
+ byte len = msg[3];
+ //if (len > 30) return;
+ byte data = 0;
+
+ for (; len > 0; len--) {
+ data = msg[msg[3]-len];
+ if (data < 16) Serial.print("0");
+ Serial.print(data, HEX);
+ Serial.print(" ");
+ }
+ Serial.println();
+}
+
+
+// Receives a message and stores it to buffer
+bool BSB::GetMessage(byte* msg) {
+ byte i=0,timeout;
+ byte read;
+
+ while (serial->available() > 0) {
+ // Read serial data...
+ read = serial->read() ^ 0xFF;
+
+#if DEBUG_LL
+ Serial.println();
+ if(read<16){
+ Serial.print("0");
+ }
+ Serial.print(read, HEX);
+ Serial.print(" ");
+#endif
+
+ // ... until SOF detected (= 0xDC)
+ if (read == 0xDC || read == 0xDE) {
+ // Restore otherwise dropped SOF indicator
+ msg[i++] = read;
+
+ // Delay for more data
+ delay(1);
+
+ // read the rest of the message
+ while (serial->available() > 0) {
+ read = serial->read() ^ 0xFF;
+ msg[i++] = read;
+#if DEBUG_LL
+ if(read<16){
+ Serial.print("0");
+ }
+ Serial.print(read, HEX);
+ Serial.print(" ");
+#endif
+ // Break if message seems to be completely received (i==msg.length)
+ if (i > 3){
+ if ( msg[3] > 32 ) // check for maximum message length
+ break;
+ if (i >= msg[3])
+ break;
+ }
+ // Delay until we got next byte
+ if (serial->available() == 0) {
+ timeout = 30;
+ while ((timeout > 0) && (serial->available() == 0)){
+ delayMicroseconds(15);
+ timeout--;
+ }
+ }
+
+ // Break if next byte signals next message (0x23 ^ 0xFF == 0xDC)
+ // if((serial->peek() == 0x23)) break;
+ // DO NOT break because some messages contain a 0xDC
+ }
+
+ // We should have read the message completly. Now check and return
+ if (i == msg[3]) {
+ // Seems to have received all data
+ if (CRC(msg, i) == 0) return true;
+ else return false;
+ }
+ else {
+ // Length error
+ return false;
+ }
+ }
+ }
+
+ // We got no data so:
+ return false;
+}
+
+// Generates CCITT XMODEM CRC from message
+uint16_t BSB::CRC (byte* buffer, uint8_t length) {
+ uint16_t crc = 0, i;
+
+ for (i = 0; i < length; i++) {
+ crc = _crc_xmodem_update(crc, buffer[i]);
+ }
+
+ // Complete message returns 0x00
+ // Message w/o last 2 bytes (CRC) returns last 2 bytes (CRC)
+ return crc;
+}
+
+// Low-Level sending of message to bus
+inline void BSB::_send(byte* msg) {
+// Nun - Ein Teilnehmer will senden :
+ byte i;
+ byte data;
+ byte len = msg[3];
+ msg[0] = 0xDC;
+ msg[1] = myAddr | 0x80;
+ msg[2] = 0x00;
+
+ {
+ uint16_t crc = CRC (msg, len -2);
+ msg[len -2] = (crc >> 8);
+ msg[len -1] = (crc & 0xFF);
+ }
+#if DEBUG_LL
+ print(msg);
+#endif
+ /*
+Er wartet 10/4800 Sek ab, lauscht und schaut ob der Bus in dieser Zeit
+von jemand anderem benutzt wird. Sprich ob der Bus in dieser Zeit mal
+auf 0 runtergezogen wurde. Wenn ja - mit den warten neu anfangen.
+*/
+
+retry:
+ {
+ //i=3;
+ unsigned long timeout = millis() + 3;//((1/480)*1000);
+ while (millis() < timeout) {
+ if ( serial->rx_pin_read()) // inverse logic
+ {
+ goto retry;
+ }
+ }
+ }
+ //Serial.println("bus free");
+
+/*
+Wenn nicht wird das erste Bit gesendet. ( Startbit )
+
+Jedes gesendete Bit wird ( wegen Bus ) ja sofort auf der Empfangsleitung
+wieder ankommen. Man schaut nach, ob das gesendetet Bit mit dem
+empfangenen Bit übereinstimmt.
+Wenn ich eine "0" sende - also den Bus auf High lasse, dann will ich
+sehen, dass der Bus weiterhin auf High ist. Sollte ein anderer
+Teilnehmer in dieser Zeit eine "1" senden - also den Bus herunterziehen,
+dann höre ich sofort auf mit dem Senden und fange oben wieder an.
+Danach folgen nach gleichem Muster die folgenden Bits, Bit 7..0, Parity
+und Stop Bit.
+*/
+
+ cli();
+ for (i=0; i < msg[3]; i++) {
+ data = msg[i] ^ 0xFF;
+ if (serial->write(data) != 1) {
+ // Collision
+ sei();
+ goto retry;
+ }
+ }
+ sei();
+}
+
+bool BSB::Send(uint8_t type, uint32_t cmd, byte* rx_msg, byte* tx_msg, byte* param, byte param_len, bool wait_for_reply) {
+ byte i;
+
+ // first two bytes are swapped
+ byte A2 = (cmd & 0xff000000) >> 24;
+ byte A1 = (cmd & 0x00ff0000) >> 16;
+ byte A3 = (cmd & 0x0000ff00) >> 8;
+ byte A4 = (cmd & 0x000000ff);
+
+ tx_msg[3] = param_len + 11;
+ tx_msg[4] = type;
+ // Adress
+ tx_msg[5] = A1;
+ tx_msg[6] = A2;
+ tx_msg[7] = A3;
+ tx_msg[8] = A4;
+
+ // Value
+ for (i=0; i < param_len; i++)
+ tx_msg[9+i] = param[i];
+
+ _send(tx_msg);
+
+ if(!wait_for_reply) return true;
+
+ i=15;
+
+ unsigned long timeout = millis() + 1000;
+ while ((i > 0) && (millis() < timeout)) {
+ if (GetMessage(rx_msg)) {
+ i--;
+ if ((rx_msg[2] == myAddr) && (rx_msg[5] == A2) && (rx_msg[6] == A1) && (rx_msg[7] == A3) && (rx_msg[8] == A4)) {
+ return true;
+ }
+ }
+ else {
+ delayMicroseconds(205);
+ }
+ }
+ return false;
+}
diff --git a/BSB_lan/libraries/BSB/bsb.h b/BSB_lan/libraries/BSB/bsb.h
new file mode 100644
index 00000000..ee66f217
--- /dev/null
+++ b/BSB_lan/libraries/BSB/bsb.h
@@ -0,0 +1,54 @@
+#ifndef __BSB_H__
+#define __BSB_H__
+
+//Now the library is compatible both with Arduino <=0023 and Arduino >=100
+#if defined(ARDUINO) && ARDUINO >= 100
+#include "Arduino.h"
+#else
+#include "WProgram.h"
+#endif
+
+#include "BSBSoftwareSerial.h"
+#include "util/crc16.h"
+
+// See this page for further details:
+// http://www.mikrocontroller.net/topic/218643
+/*
+typedef struct
+{
+ byte SOF;
+
+ byte SRC;
+ byte RCV;
+
+ byte LEN;
+
+ byte TYP;
+
+ byte ADR_1;
+ byte ADR_2;
+ byte ADR_3;
+ byte ADR_4;
+
+ byte DATA[3];
+} BSB_MESSAGE;
+*/
+
+class BSB
+{
+public:
+ BSB(uint8_t rx, uint8_t tx, uint8_t addr=0x06 );
+ bool GetMessage(byte* msg);
+ void print(byte* msg);
+
+ bool Send(uint8_t type, uint32_t cmd, byte* rx_msg, byte* tx_msg, byte* param=NULL, byte param_len=0, bool wait_for_reply=true);
+
+private:
+ uint8_t myAddr;
+ inline void _send(byte* msg);
+ uint16_t CRC (byte* buffer, uint8_t length);
+
+ BSBSoftwareSerial* serial;
+};
+
+#endif
diff --git a/BSB_lan/libraries/BSB/keywords.txt b/BSB_lan/libraries/BSB/keywords.txt
new file mode 100644
index 00000000..90d4c152
--- /dev/null
+++ b/BSB_lan/libraries/BSB/keywords.txt
@@ -0,0 +1,27 @@
+#######################################
+# Syntax Coloring Map for NewSoftSerial
+#######################################
+
+#######################################
+# Datatypes (KEYWORD1)
+#######################################
+
+NewSoftSerial KEYWORD1
+
+#######################################
+# Methods and Functions (KEYWORD2)
+#######################################
+
+begin KEYWORD2
+end KEYWORD2
+read KEYWORD2
+available KEYWORD2
+isListening KEYWORD2
+overflow KEYWORD2
+flush KEYWORD2
+listen KEYWORD2
+
+#######################################
+# Constants (LITERAL1)
+#######################################
+