#########################################################################
# $Id: 98_vitoconnect.pm 31397 2026-06-26 22:50:20Z stefanru $
# fhem Modul für Viessmann API. Based on investigation of "thetrueavatar"
# (https://github.com/thetrueavatar/Viessmann-Api)
#
# This file is part of fhem.
#
# Fhem is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# Fhem 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with fhem. If not, see .
#
# https://wiki.fhem.de/wiki/DevelopmentModuleAPI
# https://forum.fhem.de/index.php/topic,93664.0.html
# https://www.viessmann-community.com/t5/Announcements/Important-adjustment-in-IoT-features-Split-heating-circuits-and/td-p/281527
# https://forum.fhem.de/index.php/topic,93664.msg1257651.html#msg1257651
# https://www.viessmann-community.com/t5/Getting-started-programming-with/Syntax-for-setting-a-value/td-p/374222
# https://forum.fhem.de/index.php?msg=1326376
sub vitoconnect_Initialize; # Modul initialisieren und Namen zusätzlicher Funktionen bekannt geben
sub vitoconnect_Define; # wird beim 'define' eines Gerätes aufgerufen
sub vitoconnect_Undef; # wird beim Löschen einer Geräteinstanz aufgerufen
sub vitoconnect_Get; # Implementierung get-Befehle
sub vitoconnect_Set; # Implementierung set-Befehle
sub vitoconnect_Set_New; # Implementierung set-Befehle New dynamisch auf raw readings
sub vitoconnect_Set_SVN; # Implementierung set-Befehle SVN
sub vitoconnect_Set_Roger; # Implementierung set-Befehle Roger
sub vitoconnect_Attr; # Attribute setzen/ändern/löschen
sub vitoconnect_GetUpdate; # Abfrage aller Werte starten
sub vitoconnect_getCode; # Werte für: Access-Token, Install-ID, Gateway anfragen
sub vitoconnect_getCodeCallback; # Rückgabe: Access-Token, Install-ID, Gateway von vitoconnect_getCode Anfrage
sub vitoconnect_getAccessToken; # Access & Refresh-Token holen
sub vitoconnect_getAccessTokenCallback; # Access & Refresh-Token speichern, Antwort auf: vitoconnect_getAccessToken
sub vitoconnect_getRefresh; # neuen Access-Token anfragen
sub vitoconnect_getRefreshCallback; # neuen Access-Token speichern
sub vitoconnect_getGw; # Abfrage Gateway-Serial
sub vitoconnect_getGwCallback; # Gateway-Serial speichern, Anwort von Abfrage Gateway-Serial
sub vitoconnect_getInstallation; # Abfrage Install-ID
sub vitoconnect_getInstallationCallback;# Install-ID speichern, Antwort von Abfrage Install-ID
sub vitoconnect_getInstallationFeatures; # Abruf Installation Features
sub vitoconnect_getInstallationFeaturesCallback;# Installation Features speichern
sub vitoconnect_getDevice; # Abfrage Device-ID
sub vitoconnect_getDeviceCallback; # Device-ID speichern, Anwort von Abfrage Device-ID
sub vitoconnect_getFeatures; # Abruf GW Features
sub vitoconnect_getFeaturesCallback; # gw_features speichern
sub vitoconnect_errorHandling; # Errors bearbeiten für alle Calls
sub vitoconnect_getResource; # API call for all Gateways
sub vitoconnect_getResourceCallback; # Get all API readings
sub vitoconnect_getPowerLast; # Write the power reading of the full last day to the DB
sub vitoconnect_actionTimerWrapper; # Send call to API with timer
sub vitoconnect_action; # Send call to API
sub vitoconnect_FW_detailFn; # Paint SVG
sub vitoconnect_fmt_fallback; # Get numbers for SVG
sub vitoconnect_GetHtml; # Return html for ftui
sub vitoconnect_mapCodeText; # Resolve Message/Error code for OneBase not in API
sub vitoconnect_mapSeverityPrefix; # Resolve Severity for OneBase not in API
sub vitoconnect_getErrorCode; # Resolve Error code
sub vitoconnect_incrementApiCallsToday; # API-Call-Counter mit Tageswechsel
sub vitoconnect_calcAccountUsage; # Summe apiCallsToday ueber alle Devices eines Accounts
sub vitoconnect_StoreKeyValue; # Werte verschlüsselt speichern
sub vitoconnect_ReadKeyValue; # verschlüsselte Werte auslesen
sub vitoconnect_DeleteKeyValue; # verschlüsselte Werte löschen
package main;
use strict;
use warnings;
use Time::HiRes qw(gettimeofday);
use JSON;
#use JSON::XS qw( decode_json ); #Could be faster, but caused error for Schlimbo PERL WARNING: Prototype mismatch: sub main::decode_json ($;$$) vs ($) at /usr/local/lib/perl5/5.36.3/Exporter.pm line 63.
use HttpUtils;
use Encode qw(decode encode);
use Data::Dumper;
use Path::Tiny;
use DateTime;
use Time::Piece;
use Time::Seconds;
use utf8; # test
eval "use FHEM::Meta;1" or my $modMetaAbsent = 1; ## no critic 'eval'
use FHEM::SynoModules::SMUtils qw (
moduleVersion
); # Hilfsroutinen Modul
my %vNotesIntern = (
"1.1.9" => "28.06.2026 Neues Reading apiQuotaUsedPercentLastDay - zeigt im Nachhinein wie nah man gestern am 1450/Tag-Limit war. Bei Multi-Device basiert auf apiCallsLastDayAccount, sonst auf apiCallsLastDay.",
"1.1.8" => "28.06.2026 Neues Reading apiCallsLastDayAccount fuer Multi-Device-Symmetrie zu apiCallsTodayAccount (Summe der gestrigen Calls ueber alle Devices mit gleichem apiKey). Live-berechnet, kann in den ersten Minuten nach Mitternacht kurz inkonsistent sein.",
"1.1.7" => "26.06.2026 24h-Cleanup laeuft jetzt fuer alle Listen-Typen (errors/info/status/service/unknown), auch wenn Type aktuell leer ist. Behebt Stale-Eintraege in unknown.list aus Stride-Bug-Zeit. Leere Liste leert das Reading sauber.",
"1.1.6" => "26.06.2026 Neue Readings: apiQuotaUsedPercent (vom 1450er-Tageslimit der Viessmann-API), apiCallsTodayAccount (Summe ueber alle Devices mit gleichem apiKey, nur bei Multi-Device). Warnlog bei Quota >= 80%.",
"1.1.5" => "26.06.2026 Neue Features: apiCallsToday/apiCallsLastDay Counter, currentError Reading (aktive F-Codes aus errors.raw). Anchor-Toter-Code in getResourceCallback entfernt. Forward-Declarations getInstallationFeatures ergaenzt.",
"1.1.4" => "26.06.2026 Code-Bereinigung: Praezedenz-Bug in errorHandling, decode_json undef-Schutz in action, my-if Severity-Scope, Sprache-Default EN, toter getPowerLast-Block entfernt, Object-Type Ref-Schutz, Grammatik 429-Meldung",
"1.1.3" => "04.06.2026 [RB-FIX-01] Parsing-Stride 4->6 in getErrorCode korrigiert; [RB-FIX-02] BlockingGet-Cache verhindert FHEM-Freeze; [RB-FIX-03] ReadFn toter Code entfernt",
"1.1.2" => "04.05.2026 Fix schedule setter: support both API format and reading format, stop retry on VALIDATION_ERROR",
"1.1.1" => "25.02.2026 Small fixes",
"1.1.0" => "24.02.2026 Small adaptions to SVG",
"1.0.9" => "17.02.2026 Special SVG handling for vitocal 200S",
"1.0.8" => "06.02.2026 SVG mapping with alternative readings",
"1.0.7" => "03.02.2026 HTML for ftui",
"1.0.6" => "30.01.2026 Messages and SVG Kaeltegreislauf",
"1.0.5" => "05.01.2026 Auth and token requests changed to V3 API",
"1.0.4" => "04.01.2026 Log response body in case off access token error",
"1.0.3" => "11.12.2025 asSingleValue fixed – this time for real",
"1.0.2" => "08.12.2025 Power reading asSingleValue finally fixed",
"1.0.1" => "29.11.2025 fix power reading logging",
"1.0.0" => "28.11.2025 power reading fixed again",
"0.9.9" => "28.11.2025 EOL from v1 API on 17.11.2025 changed to v2",
"0.9.8" => "28.11.2025 power reading fixed",
"0.9.7" => "02.11.2025 order of lists fixed",
"0.9.6" => "31.10.2025 One Base Message lists and translations",
"0.9.5" => "15.10.2025 Fix duplicate timer in case of password update (getCode)",
"0.9.4" => "15.10.2025 More logging for timers",
"0.9.3" => "15.10.2025 URL to dev portal updated",
"0.9.2" => "15.09.2025 Fix Not a HASH reference at ./FHEM/98_vitoconnect.pm line 3818 when set action error",
"0.9.1" => "11.09.2025 In case of set action when token is expired get new token and try again",
"0.9.0" => "09.03.2025 New api and iam URL (viessmann-climatesolutions.com)",
"0.8.7" => "09.03.2025 Fix return value when using SVN or Roger",
"0.8.6" => "24.02.2025 Adapt schedule data before sending",
"0.8.5" => "24.02.2025 fix error when calling setter from FHEMWEB",
"0.8.4" => "24.02.2025 also order mode, start, end, position in schedule",
"0.8.3" => "23.02.2025 fix order of days for type schedule readings",
"0.8.2" => "22.02.2025 improved State reading in case of unknown error",
"0.8.1" => "20.02.2025 replace U+FFFD (unknown character with [VUC] see https://forum.fhem.de/index.php?msg=1334504, also fill reason in error case from extended payload",
"0.8.0" => "18.02.2025 enhanced error mapping now also language dependent, closing of file_handles, removed JSON::XS",
"0.7.8" => "17.02.2025 fixed undef warning thanks cnkru",
"0.7.7" => "17.02.2025 introduced clearMappedErrors",
"0.7.6" => "17.02.2025 removed usage of html libraries",
"0.7.5" => "16.02.2025 Get mapped error codes and store them in readings",
"0.7.4" => "16.02.2025 Removed Unknow attr vitoconnect, small bugfix DeleteKeyValue",
"0.7.3" => "16.02.2025 Write *.err file in case of error. Fixed DeleteKeyValue thanks Schlimbo",
"0.7.2" => "07.02.2025 Attr logging improved",
"0.7.1" => "07.02.2025 Code cleanups",
"0.7.0" => "06.02.2025 vitoconnect_installationID checked now for at least length 2, see https://forum.fhem.de/index.php?msg=1333072, error handling when setting attributs automatic introduced",
"0.6.3" => "04.02.2025 Small bug fixes, removed warnings",
"0.6.2" => "28.01.2025 Very small bugfixes ",
"0.6.1" => "28.01.2025 Rework of module documentation",
"0.6.0" => "23.01.2025 Total rebuild of initialization and gw handling. In case of more than one installation or gw you have to set it via".
"selectDevice in the set of the device. The attributes vitoconnect_serial and vitoconnect_installationID will be populated".
"handling of getting installation and serial changed. StoredValues are now deleted. Other fixes and developments",
"0.5.0" => "02.01.2025 Added attribute installationID, in case you use two installations, see https://forum.fhem.de/index.php?msg=1329165",
"0.4.2" => "31.12.2024 Small fix for Vitoladens 300C, heating.circuits.0.operating.programs.comfort",
"0.4.1" => "30.12.2024 Bug fixes, fixed Releasenotes, changed debugging texts and messages in Set_New",
"0.4.0" => "28.12.2024 Fixed setNew to work again automatically in case of one serial in gateways,".
"for more than one serial you have to define the serial you want to use",
"0.3.2" => "27.12.2024 Set in case of activate and deactivate request the active value of the reading",
"0.3.1" => "19.12.2024 New attribute vitoconnect_disable_raw_readings",
"0.3.0" => "18.12.2024 Fix setter new for cases where more than one gateway is actively pulled in 2 devices.",
"0.2.1" => "16.12.2024 German and English texts in UI",
"0.2.0" => "14.12.2024 FVersion introduced, a bit of code beautifying".
"sort keys per reading to ensure power readings are in the right order, day before dayvalue",
"0.1.1" => "12.12.2024 In case of more than one Gateway only allow Set_New if serial is provided. ".
"Get Object and Hash in Array readings. E.g. device.messages.errors.raw. ".
"In case of expired token (every hour) do not do uncessary gateway calls, just get the new token. ".
"This will safe API calls and reduce the API overhead. ",
"0.1.0" => "12.12.2024 first release with Version. "
);
# PKCE-Parameter, kein OAuth-Client-Secret im klassischen Sinn trotz Variablennamen.
# Identischer String fuer code_challenge (in getCode) und code_verifier (in getAccessToken),
# entspricht Viessmanns offizieller Getting-Started-Anleitung
# (https://documentation.viessmann.com/static/getting-started). Viessmann validiert nur
# dass beide Strings gleich sind - sogar "abc" wuerde laut Forum funktionieren.
my $client_secret = "2e21faa1-db2c-4d0b-a10f-575fd372bc8c-575fd372bc8c";
my $callback_uri = "http://localhost:4200/";
my $apiBaseURL = "https://api.viessmann-climatesolutions.com";
my $iamBaseURL = "https://iam.viessmann-climatesolutions.com";
my $equipmentURL = "$apiBaseURL/iot/v2/equipment/";
my $featureURL = "$apiBaseURL/iot/v2/features/";
my $authorizeURL = "$iamBaseURL/idp/v3/authorize";
my $tokenURL = "$iamBaseURL/idp/v3/token";
my $errorURL_V3 = "$apiBaseURL/service-documents/v3/error-database";
# Tageslimit der Viessmann IoT-API.
# Quelle: requestCountLimit-Feld im 429-RATE_LIMIT_EXCEEDED-Response der API
# und Q&A-Sticky von CustomerCareMichael (Viessmann) im Developer-Forum:
# https://community.viessmann.de/t5/Konnektivitaet/Q-amp-A-Viessmann-API/m-p/127660
# Hinweis: Viessmann nutzt ein Sliding-Window; clientseitig approximieren wir
# das mit einem Tageszaehler (0-Uhr-Reset). Wert ist hartkodiert weil offiziell
# in der API-Response selbst dokumentiert.
my $API_DAILY_LIMIT = 1450;
# [RB-FIX-02] Modul-globaler Cache für Error-Code-Texte.
# Verhindert wiederholte HttpUtils_BlockingGet-Aufrufe für dieselben Codes.
# Der Cache bleibt für die gesamte Laufzeit des FHEM-Prozesses erhalten.
# Schlüssel: Viessmann-Code (z.B. "S.134"), Wert: Beschreibungstext
my %vitoconnect_errorcode_cache;
my $RequestListMapping; # Über das Attribut Mapping definierte Readings zum überschreiben der RequestList
my %translations; # Über das Attribut translations definierte Readings zum überschreiben der RequestList
# Meldungs / Fehler Mapping für One Base geräte
my %viessmann_code_text = (
# Status codes (S-codes) - typically operational states
# Heating and Cooling Operations
'S.1' => 'Netzspannung eingeschaltet',
'S.10' => 'Standby - Bereitschaftsmodus',
'S.11' => 'Kompressor läuft - Heizbetrieb',
'S.12' => 'Kompressor läuft - Kühlbetrieb',
'S.13' => 'Abtauung aktiv',
'S.14' => 'Notbetrieb/Störung',
'S.15' => 'Verdichter-Anlaufverzögerung',
# Temperature Management
'S.20' => 'Vorlauftemperatur zu hoch',
'S.21' => 'Vorlauftemperatur zu niedrig',
'S.22' => 'Rücklauftemperatur zu hoch',
'S.23' => 'Rücklauftemperatur zu niedrig',
'S.24' => 'Außentemperatur zu niedrig',
'S.25' => 'Außentemperatur zu hoch',
# Pump Operations
'S.30' => 'Umwälzpumpe läuft',
'S.31' => 'Umwälzpumpe aus',
'S.32' => 'Pumpe Heizkreis 1 läuft',
'S.33' => 'Pumpe Heizkreis 2 läuft',
'S.34' => 'Ladepumpe läuft',
'S.35' => 'Zirkulationspumpe läuft',
# Heat Generator
'S.40' => 'Wärmepumpe läuft',
'S.41' => 'Zusatzheizung aktiv',
'S.42' => 'Elektrische Zusatzheizung aktiv',
'S.43' => 'Bivalente Heizung aktiv',
# Hot Water
'S.50' => 'Warmwasserbereitung',
'S.51' => 'Warmwasser-Nachladung',
'S.52' => 'Legionellenschutz aktiv',
'S.53' => 'Warmwasser-Zirkulation',
# Additional Status Codes from PDF
'S.60' => 'Sommerbetrieb aktiv (Sparfunktion Aussentemperatur)',
'S.61' => 'Abtauung laeuft',
'S.62' => 'Abtauung beendet',
'S.63' => 'Verdampfer-Abtauung',
'S.70' => 'Testbetrieb',
'S.71' => 'Relaistest',
'S.72' => 'Sensortest',
'S.74' => 'Heizunterdrueckung Heizen bei Trinkwassererwaermung durch Sonnenkollektoren',
'S.75' => 'Zirkulationspumpe aktiv',
'S.80' => 'Kommunikation OK',
'S.81' => 'Kommunikation gestoert',
'S.82' => 'Bus-Kommunikation aktiv',
'S.88' => 'Solarkreispumpe aktiv',
'S.89' => 'Sonnenkollektoren in Stagnation',
'S.90' => 'EVU-Sperre aktiv',
'S.91' => 'Smart Grid aktiv',
'S.92' => 'PV-Ueberschuss-Nutzung',
'S.100' => 'Heizen - Normalbetrieb',
'S.101' => 'Heizen - Reduzierter Betrieb',
'S.102' => 'Heizen - Komfortbetrieb',
'S.103' => 'Heizen - Eco-Betrieb',
'S.104' => 'Heizen - Partybetrieb',
'S.105' => 'Heizen - Urlaubsbetrieb',
'S.110' => 'Kuehlen - Normalbetrieb',
'S.111' => 'Kuehlen - Reduzierter Betrieb',
'S.112' => 'Initialisierung 4/3-Wege-Ventil',
'S.113' => '4/3-Wege-Ventil schaltet in Richtung Trinkwassererwaermung',
'S.114' => '4/3-Wege-Ventil schaltet in Richtung Heiz-/Kuehlkreis 1',
'S.115' => '4/3-Wege-Ventil in Position Trinkwassererwaermung',
'S.116' => '4/3-Wege-Ventil in Position Heiz-/Kuehlkreis 1',
'S.117' => '4/3-Wege-Ventil in Position Heiz-/Kuehlkreis 2',
'S.118' => '4/3-Wege-Ventil in Position Integrierter Pufferspeicher',
'S.119' => 'Verdichter-Mindestlaufzeit',
'S.120' => 'Smart Grid: Normalbetrieb aktiv',
'S.121' => 'Smart Grid: Empfohlener Betrieb aktiv',
'S.122' => 'Smart Grid: Erzwungener Betrieb aktiv',
'S.123' => 'Waermepumpe aus',
'S.124' => 'Waermepumpe Vorlaufphase',
'S.125' => 'Waermepumpe im Heizbetrieb',
'S.126' => 'Waermepumpe im Kuehlbetrieb',
'S.127' => 'Waermepumpe: Abtauen vorbereiten',
'S.128' => 'Waermepumpe im Abtaubetrieb',
'S.129' => 'Waermepumpe Nachlaufphase',
'S.130' => 'Heizwasser-Durchlauferhitzer ausgeschaltet',
'S.131' => 'Heizwasser-Durchlauferhitzer: Stufe 1 aktiv',
'S.132' => 'Heizwasser-Durchlauferhitzer: Stufe 2 aktiv',
'S.133' => 'Heizwasser-Durchlauferhitzer: Stufe 3 aktiv',
'S.134' => '4/3-Wege-Ventil Leerlauf',
'S.135' => '4/3-Wege-Ventil Abtauen',
'S.136' => '4/3-Wege-Ventil Raumbeheizung/Raumkuehlung',
'S.137' => 'Heizbetrieb in Anlaufphase',
'S.138' => 'Heizbetrieb aktiv',
'S.139' => 'Heizbetrieb inaktiv',
'S.141' => 'Trinkwassererwaermung aktiv',
'S.142' => 'Trinkwassererwaermung inaktiv',
'S.143' => 'Kuehlbetrieb angefordert',
'S.144' => 'Kuehlbetrieb aktiv',
'S.145' => 'Kuehlbetrieb inaktiv',
'S.146' => 'Abtauen angefordert',
'S.147' => 'Waermebereitstellung fuer Abtauen aktiv',
'S.148' => 'Abtauen ueber Waermepumpe aktiv',
'S.149' => 'Abtauen ueber Waermepumpe inaktiv',
'S.153' => 'Regelung im Standby',
'S.160' => 'Lueftung - Stufe 1',
'S.161' => 'Befuellung aktiv',
'S.162' => 'Entlueftung aktiv',
'S.163' => 'Waermepumpe: Systemstatus inaktiv',
'S.164' => 'Waermepumpe: Systemstatus Wartung Standby',
'S.165' => 'Waermepumpe: Systemstatus Regelung',
'S.167' => 'Aktorentest aktiv',
'S.168' => 'Lueftungsbypass offen',
'S.170' => 'Systemcheck laeuft',
'S.171' => 'Initialisierung',
'S.172' => 'Software-Update',
'S.176' => 'Waermepumpenregelung: Abtauen angefordert',
'S.180' => 'Betriebsstundenzaehler',
'S.181' => 'Passiver Frostschutz Heiz-/Kuehlkreis 1 eingeschaltet',
'S.182' => 'Passiver Frostschutz Heiz-/Kuehlkreis 2 eingeschaltet',
'S.183' => 'Passiver Frostschutz Heiz-/Kuehlkreis 3 eingeschaltet',
'S.184' => 'Passiver Frostschutz Heiz-/Kuehlkreis 4 eingeschaltet',
'S.185' => 'Passiver Frostschutz Heizwasser-Durchlauferhitzer eingeschaltet',
'S.186' => 'Passiver Frostschutz Speicher-Wassererwärmer eingeschaltet',
'S.187' => 'Passiver Frostschutz Waermepumpe eingeschaltet',
'S.188' => 'Passiver Frostschutz externer Heiz-/Kuehlwasser-Pufferspeicher eingeschaltet',
'S.189' => 'Passiver Frostschutz externer Heizwasser-Pufferspeicher eingeschaltet',
'S.190' => 'Passiver Frostschutz externer Kuehlwasser-Pufferspeicher eingeschaltet',
'S.191' => 'Filter reinigen',
'S.192' => 'Wartung faellig',
'S.193' => 'Anforderung externer Waermeerzeuger ueber potenzialfreien Schaltkontakt',
'S.195' => 'Smart Grid: EVU-Sperre aktiv',
'S.196' => 'EVU-Sperre aktiv',
'S.197' => 'Waermeanforderung Heiz-/Kuehlkreis 1',
'S.198' => 'Kuehlanforderung Heiz-/Kuehlkreis 1',
'S.199' => 'Waermeanforderung Heiz-/Kuehlkreis 2',
'S.205' => 'Anforderung externer Heizwasser-Pufferspeicher',
'S.206' => 'Anforderung externer Kuehlwasser-Pufferspeicher',
'S.207' => 'Anforderung Trinkwassererwaermung',
'S.208' => 'Erwaermung integrierter Pufferspeicher aktiv',
'S.209' => 'Abbruch Befuellfunktion',
'S.210' => 'Abbruch Entlueftungsfunktion',
'S.211' => 'Befuellvorgang abgeschlossen',
'S.212' => 'Entlueftungsvorgang abgeschlossen',
'S.213' => 'Inbetriebnahme-Assistent aktiv',
'S.214' => 'Abbruch Inbetriebnahme',
'S.215' => 'Inbetriebnahme abgeschlossen',
'S.216' => 'Aktorentest aktiv',
'S.217' => 'Heizwasser-Durchlauferhitzer: Stufe 1 inaktiv',
'S.218' => 'Heizwasser-Durchlauferhitzer: Stufe 2 inaktiv',
'S.219' => 'Heizwasser-Durchlauferhitzer: Stufe 3 inaktiv',
'S.220' => 'Kaeltekreis ausgeschaltet',
'S.221' => 'Kaeltekreis Startphase Heizbetrieb',
'S.222' => 'Kaeltekreis Startphase Kuehlbetrieb',
'S.223' => 'Kaeltekreis Startphase Abtaubetrieb',
'S.224' => 'Kaeltekreis im Heizbetrieb',
'S.225' => 'Kaeltekreis im Kuehlbetrieb',
'S.226' => 'Kaeltekreis im Abtaubetrieb im Betriebsprogramm Frostschutz',
'S.227' => 'Kaeltekreis im Abtaubetrieb bei Regelbetrieb',
'S.228' => 'Kaeltekreis Abschaltsignal',
'S.229' => 'Kaeltekreisregler im Uebergang von Heizbetrieb zu Kuehlbetrieb',
'S.230' => 'Kaeltekreisregler im Uebergang von Kuehlbetrieb zu Heizbetrieb',
'S.231' => 'Kaeltekreisregler im Uebergang von Abtaubetrieb zu Heizbetrieb',
'S.240' => 'Kaeltekreisregler im Standby',
'S.392' => 'Kaeltekreisregler im Uebergang von Heizbetrieb zu Abtaubetrieb',
'S.393' => 'Aktiver Frostschutz Heiz-/Kuehlkreis 1 eingeschaltet',
'S.394' => 'Aktiver Frostschutz Heiz-/Kuehlkreis 2 eingeschaltet',
'S.395' => 'Aktiver Frostschutz Heiz-/Kuehlkreis 3 eingeschaltet',
'S.396' => 'Aktiver Frostschutz Heiz-/Kuehlkreis 4 eingeschaltet',
'S.397' => 'Aktiver Frostschutz Heizwasser-Durchlauferhitzer eingeschaltet',
'S.398' => 'Aktiver Frostschutz Speicher-Wassererwärmer eingeschaltet',
'S.399' => 'Aktiver Frostschutz Waermepumpe eingeschaltet',
'S.400' => 'Aktiver Frostschutz externer Heiz-/Kuehlwasser-Pufferspeicher eingeschaltet',
'S.401' => 'Aktiver Frostschutz externer Heizwasser-Pufferspeicher eingeschaltet',
'S.402' => 'Aktiver Frostschutz externer Kuehlwasser-Pufferspeicher eingeschaltet',
# Quelle: vieventlog (mschneider82)
'S.427' => 'Leistungsbegrenzung durch den Netzbetreiber nach § 14a EnWG',
# Missing codes from PDF
'S.140' => 'Trinkwassererwaermung angefordert',
'S.150' => 'Abtauen ueber Heiz-/Kuehlkreis 1 oder externen Heizwasser-Pufferspeicher (falls vorhanden) in Vorbereitung',
'S.151' => 'Abtauen ueber Heiz-/Kuehlkreis 1 oder externen Heizwasser-Pufferspeicher (falls vorhanden) aktiv',
'S.152' => 'Abtauen ueber Heiz-/Kuehlkreis 1 oder externen Heizwasser-Pufferspeicher (falls vorhanden) inaktiv',
'S.200' => 'Kuehlanforderung Heiz-/Kuehlkreis 2',
'S.201' => 'Waermeanforderung Heiz-/Kuehlkreis 3',
'S.202' => 'Kuehlanforderung Heiz-/Kuehlkreis 3',
'S.203' => 'Waermeanforderung Heiz-/Kuehlkreis 4',
'S.204' => 'Kuehlanforderung Heiz-/Kuehlkreis 4',
# Maintenance codes (P-codes) - maintenance messages
'P.1' => 'Wartung nach Zeitintervall steht bevor',
'P.4' => 'Heizwasser nachfuellen',
'P.8' => 'Wartung nach Betriebsstunden steht bevor',
'P.34' => 'Wartung Heizwasserfilter',
'P.35' => 'Zeitintervall für Filterwechsel ist abgelaufen',
# Alert codes (A-codes) - warning messages
'A.2' => 'Frostschutzgrenze unterschritten',
'A.11' => 'Anlagendruck zu niedrig',
'A.12' => 'Batterie im Elektronikmodul HPMU',
'A.27' => 'Batterie geringer Ladezustand',
'A.16' => 'Mindestvolumenstrom unterschritten',
'A.17' => 'Erhöhte Trinkwasserhygiene',
'A.19' => 'Temperaturwächter hat ausgelöst',
'A.21' => 'Hydraulischer Anlagendruck',
'A.62' => 'PWM-Signal Heizkreispumpe Heiz-/Kühlkreis 1',
'A.63' => 'PWM-Signal Heizkreispumpe Heiz-/Kühlkreis 2',
'A.65' => 'Heizkreispumpe Heiz-/Kühlkreis 2 läuft trocken',
'A.66' => 'Heizkreispumpe Heiz-/Kühlkreis 1 läuft nicht',
'A.68' => 'Heizkreispumpe Heiz-/Kühlkreis 2 läuft nicht',
'A.70' => 'Filter im Kugelhahn Außeneinheit',
'A.71' => 'Überstrom am Verdichter',
'A.72' => 'Strom Leistungsfaktor-Korrekturfilter',
'A.73' => 'Frequenzabweichung Verdichterdrehzahl',
'A.74' => 'Druckverlust im Sekundärkreis',
'A.75' => 'Druckspitzen im Sekundärkreis',
'A.80' => 'Ventilator blockiert',
'A.81' => 'Unzureichende Wärmeübertragung Verdampfer',
'A.82' => 'Fehler Drucksensor CAN-BUS-Teilnehmer',
'A.83' => 'Signal Speichertemperatursensor fehlerhaft',
'A.84' => 'Signal Rücklauftemperatursensor Sekundärkreis',
'A.85' => 'Signal Vorlauftemperatursensor Sekundärkreis',
'A.86' => 'Signal Vorlauftemperatursensor Heiz-/Kühlkreis 1',
'A.87' => 'Signal Vorlauftemperatursensor Heiz-/Kühlkreis 2',
'A.91' => 'Kältekreis vorübergehend aus',
'A.93' => 'Heißgasdruck nicht plausibel',
'A.94' => 'Sauggasdruck nicht plausibel',
'A.96' => 'Luft im Sekundärkreis',
'A.99' => 'Vorlauftemperatur Sekundärkreis zu niedrig',
'A.100' => 'Einstellungen gelöscht',
'A.101' => 'Heißgastemperatur nicht plausibel',
'A.102' => 'Sauggastemperatur nicht plausibel',
'A.109' => 'Kesseltemperatur-Istwert zu niedrig',
'A.110' => 'Temperatur externer Wärmeerzeuger 1',
'A.111' => 'Temperatur externer Wärmeerzeuger 2',
'A.130' => 'Warnschwelle Einsatzgrenzen für Kühlbetrieb unterschritten',
'A.152' => 'Überlastschutz Wallbox nicht aktiv',
'A.153' => 'Kein PV-optimiertes Laden',
'A.159' => 'Werkseitige Einstellung Inverter',
'A.162' => 'Inverter Überspannung Zwischenkreis',
'A.163' => 'Überspannung im Zwischenkreis Inverter',
'A.164' => 'Gleichspannung im Zwischenkreis Inverter',
'A.174' => 'Innenraumtemperatur zu hoch',
# Information codes (I-codes) - informational messages
'I.9' => 'Estrichtrocknung aktiv',
'I.10' => 'Laufzeitbegrenzung Trinkwassererwaermung',
'I.56' => 'Extern Anfordern aktiv',
'I.57' => 'Extern Sperren aktiv',
'I.63' => 'Kuehlkreis nicht bereit',
'I.70' => 'Inverter: Laststrom im Zwischenkreis Inverter zu hoch (Ueberstrom)',
'I.71' => 'Inverter: Netzspannung zu hoch, Verdichter temporaer aus',
'I.72' => 'Inverter: Netzspannung zu niedrig, Verdichter temporaer aus',
'I.73' => 'Inverter: Gleichspannung im Zwischenkreis Inverter zu hoch (Ueberspannung)',
'I.74' => 'Inverter: Gleichspannung im Zwischenkreis Inverter zu niedrig (Unterspannung), Verdichter temporaer aus',
'I.75' => 'Inverter: Temperatur am internen Leistungsmodul zu hoch, Verdichter temporaer aus',
'I.76' => 'Inverter: Zu hohe Temperatur im Leistungsfaktor-Korrekturfilter (PFC), Verdichter temporaer aus',
'I.77' => 'Inverter: Zu hoher Strom im Leistungsfaktor-Korrekturfilter (PFC), Verdichter temporaer aus',
'I.78' => 'Inverter: Leistungsreduzierung durch Inverter bei zu hoher Leistungsanforderung (Derating)',
'I.79' => 'Inverter: Leistungsreduzierung durch Inverter bei zu hoher Leistungsanforderung des Verdichters (Derating)',
'I.80' => 'Inverter: Leistungsbegrenzung durch Inverter bei zu hoher Leistungsanforderung des Verdichters (Feldschwaechebetrieb)',
'I.81' => 'Inverter: Leistungsreduzierung durch Inverter bei zu hoher Temperatur am internen Leistungsmodul (Derating)',
'I.82' => 'Inverter: Leistungsreduzierung durch Inverter bei zu hoher Temperatur am Leistungsfaktor-Korrekturfilter (Derating)',
'I.83' => '4/3-Wege-Ventil: Mindestvolumenstrom erreicht',
'I.84' => '4/3-Wege-Ventil: Min. Ruecklauftemperatur erreicht',
'I.85' => 'Kontrollierte Regelniederdruckabschaltung Kaeltekreis',
'I.86' => 'Kontrollierte Regelhochdruckabschaltung Kaeltekreis',
'I.89' => 'Uhrzeit vorgestellt (Sommerzeit)',
'I.90' => 'Uhrzeit zurueckgestellt (Winterzeit)',
'I.92' => 'Energiebilanz zurueckgesetzt',
'I.94' => 'Wartung in 30 Tagen fällig',
'I.95' => 'Filterwechsel in 14 Tagen fällig',
'I.96' => 'Unbekannte Folge-Waermepumpe (weiteres Viessmann Geraet)',
'I.98' => 'Neue Folge-Waermepumpe (weiteres Viessmann Geraet) wurde erkannt',
'I.99' => 'Zieltemperatur Hygienefunktion erreicht',
'I.100' => 'Max. Verfluessigungsdruck erreicht',
'I.101' => 'Min. Verdampfungsdruck fuer Heizbetrieb erreicht',
'I.102' => 'Min. Verdampfungsdruck fuer Kuehlbetrieb erreicht',
'I.103' => 'Max. Verdampfungsdruck erreicht',
'I.104' => 'Max. Heissgastemperatur erreicht',
'I.105' => 'Max. Laufzeit untere Verdampfungstemperatur erreicht',
'I.106' => 'Max. Druckdifferenz Verdichter erreicht',
'I.107' => 'Max. Verfluessigungstemperatur erreicht',
'I.108' => 'Max. Drehmoment Verdichter erreicht',
'I.109' => 'Max. Verdampfungstemperatur Verdichter erreicht',
'I.110' => 'Min. Druckverhaeltnis Verdichter erreicht',
'I.111' => 'Min. Verdampfungstemperatur Verdichter erreicht',
'I.112' => 'Min. Austrittstemperatur am Verfluessiger erreicht',
'I.113' => 'Smart Grid: Erzwungene Abschaltung aktiv',
'I.114' => 'Smart Grid: Normalbetrieb aktiv',
'I.115' => 'Smart Grid: Empfohlene Einschaltung aktiv',
'I.116' => 'Smart Grid: Erzwungene Einschaltung aktiv',
'I.117' => 'Energie-Management-System aktiv',
'I.118' => 'Fussbodentemperaturbegrenzer Heiz-/Kuehlkreis 1 aktiv',
'I.119' => 'Fussbodentemperaturbegrenzer Heiz-/Kuehlkreis 2 aktiv',
'I.120' => 'Geraeuschreduzierter Betrieb Waermepumpe aktiv',
'I.121' => 'Feuchteanbauschalter Heiz-/Kuehlkreis 1 aktiv',
'I.122' => 'Feuchteanbauschalter Heiz-/Kuehlkreis 2 aktiv',
'I.123' => 'Max. Ruecklauftemperatur Kaeltekreis erreicht',
'I.124' => 'Min. Ruecklauftemperatur Kaeltekreis erreicht',
'I.125' => 'Max. Lufteintrittstemperatur Kaeltekreis erreicht',
'I.126' => 'Min. Lufteintrittstemperatur Kaeltekreis erreicht',
'I.127' => 'Max. Druckdifferenz fuer Verdichterstart erreicht',
'I.128' => 'Min. Oelsumpftemperatur erreicht',
'I.129' => 'Kaeltekreisumkehr: Druckunterschied zu gering',
'I.130' => 'Startphase Waermepumpe: Zeitueberschreitung',
'I.131' => 'Min. Verdampfungstemperatur erreicht',
'I.132' => 'Neustart Waermepumpenregelung',
'I.133' => 'Reset der Elektronikmodule durch Neustart',
'I.134' => 'Abtauen aktiv im Betriebsprogramm Frostschutz',
'I.135' => 'Abtauen aktiv im Regelbetrieb',
'I.142' => 'Min. Laufzeit Verdichter unterschritten',
'I.143' => 'EVU-Sperre aktiv',
'I.144' => 'Frequenzabweichungen bei Spannungsversorgung des EVU',
'I.145' => 'Leistungsueberschreitung Ausseneinheit',
'I.146' => 'Ueberhitzung Verdampfer Kuehlbetrieb',
'I.147' => 'Ueberhitzung Verfluessiger Heizbetrieb',
'I.148' => 'Ueberhitzung Verdampfer Heizbetrieb',
'I.149' => 'Waermeanforderung waehrend Abtaubetrieb',
'I.150' => 'Anforderung Abtauen waehrend Regelbetrieb',
'I.151' => 'Betriebsgrenze Fluessiggas temperatur Verfluessiger erreicht',
'I.152' => 'Betriebsgrenze Niederdruck erreicht',
'I.155' => 'Estrichtrocknung durch Anwender abgebrochen',
'I.156' => 'Warnschwelle Wasser-Volumenstrom Abtaubetrieb erreicht',
'I.157' => 'Erforderliche Heissgastemperatur fuer Heizbetrieb ueberschritten',
'I.158' => 'Erforderliche Heissgastemperatur fuer Kuehlbetrieb ueberschritten',
'I.159' => 'Erhoehte Innenraumtemperatur in Ausseneinheit',
'I.163' => 'Strombegrenzung der Wallbox aktiv: Leistung der Photovoltaikanlage zu gering',
'I.168' => 'Waermepumpe ist als Fuehrungs-Waermepumpe konfiguriert',
'I.169' => 'Waermepumpe ist als Folge-Waermepumpe konfiguriert',
'I.170' => 'Durch eine Stoerung uebernimmt eine Folge-Waermepumpe voruebergehend die Aufgabe der Fuehrungs-Waermepumpe',
'I.171' => 'Inverter: Software-Update laeuft, Inverter aus',
'I.173' => 'Inverter: Ausgangsstrom zu hoch, reduzierte Verdichterdrehzahl',
'I.174' => 'Inverter: Leistung fuer Verdichter wird voruebergehend reduziert, reduzierte Verdichterdrehzahl',
'I.175' => 'Verdichter startet nicht: Umgebungstemperatur ist niedriger als zulaessige Betriebstemperatur fuer Verdichter, Verdichter temporaer aus',
'I.176' => 'Verdichter mit reduzierter Leistung: Umgebungstemperatur ist hoeher als zulaessige Betriebstemperatur fuer Verdichter',
'I.182' => 'Verdichter ueberlastet: Normales Regelverhalten',
# Fault codes (F-codes) - actual errors
# Sensor Faults
'F.01' => 'Außentemperatursensor defekt',
'F.02' => 'Vorlauftemperatursensor 1 defekt',
'F.03' => 'Speichertemperatursensor defekt',
'F.04' => 'Rücklauftemperatursensor defekt',
'F.05' => 'Abgastemperatursensor defekt',
'F.10' => 'Kurzschluss Außentemperatursensor',
'F.11' => 'Kurzschluss Vorlauftemperatursensor',
'F.12' => 'Kurzschluss Speichertemperatursensor',
'F.13' => 'Kurzschluss Rücklauftemperatursensor',
# Pressure and Flow
'F.20' => 'Wasserdruck zu niedrig',
'F.21' => 'Wasserdruck zu hoch',
'F.22' => 'Kein Durchfluss',
'F.23' => 'Durchfluss zu gering',
# Heat Pump Specific
'F.454' => 'Kältekreis gesperrt',
'F.472' => 'Fernbedienung nicht erreichbar',
'F.518' => 'Keine Kommunikation mit Energiezähler',
'F.519' => 'Betrieb mit internen Sollwerten',
'F.542' => 'Mischer schließt',
'F.543' => 'Mischer öffnet',
'F.685' => 'HPMU Kommunikationsfehler',
'F.686' => 'HPMU Modul defekt',
'F.687' => 'HPMU Verbindungsfehler',
'F.770' => 'Frostschutz aktiviert',
'F.771' => 'Passiver Frostschutz',
'F.764' => 'Weiterer CAN-BUS-Teilnehmer meldet eine Störung',
'F.788' => 'Kältekreis startet nicht',
'F.791' => 'Ausfall Heizwasser-Durchlauferhitzer Phase 1',
'F.792' => 'Ausfall Heizwasser-Durchlauferhitzer Phase 2',
'F.793' => 'Ausfall Heizwasser-Durchlauferhitzer Phase 3',
'F.1078' => 'Wiederholt zu geringer Volumenstrom bei Verdichteranlauf',
# Zusätzliche Wärmepumpen-Fehlercodes (F-Codes)
'F.33' => 'Unterbrechung Lufteintrittstemperatursensor – Kältekreis aus',
'F.34' => 'Kurzschluss Lufteintrittstemperatursensor – Kältekreis aus',
'F.74' => 'Hydraulischer Anlagendruck zu niedrig – Wärmepumpe ausschalten',
'F.111' => 'Unterbrechung Flüssiggastemperatursensor (Heizen) – Kältekreis aus',
'F.112' => 'Kurzschluss Flüssiggastemperatursensor (Heizen) – Kältekreis aus',
'F.117' => 'Unterbrechung Sauggastemperatursensor Verdampfer – Kältekreis aus',
'F.118' => 'Kurzschluss Sauggastemperatursensor Verdampfer – Kältekreis aus',
'F.121' => 'Kommunikationsfehler Wechselrichter Inverter – Kältekreis aus',
'F.123' => 'Unterbrechung Flüssiggastemperatursensor Verflüssiger',
'F.124' => 'Kurzschluss Flüssiggastemperatursensor Verflüssiger',
'F.160' => 'Kommunikationsstörung CAN-BUS',
'F.425' => 'Zeitsynchronisation fehlgeschlagen – Batterie HPMU ersetzen',
'F.430' => 'Kommunikationsfehler Gateway – Betrieb mit internen Sollwerten',
'F.846' => 'Inverter Verdichterdrehfeld gegenläufig – Kältekreis aus',
'F.1008'=> 'Anzahl unterstützter Geräte an Hauptsteuergerät überschritten',
'F.1009'=> 'Fehler elektrische Verdichterheizung Wärmepumpe',
'F.1010'=> 'Störung Wasserdrucksensor',
'F.1011'=> 'Störung Hochdrucksensor Kältekreis',
'F.1012'=> 'Störung Niederdrucksensor Kältekreis',
);
# Feste Readings, orignal Verhalten des Moduls, können über RequestListMapping oder translations überschrieben werden.
# letzte SVN Version vor meinen Änderungen am 2024-11-16 oder letzte Version von Roger vom 8. November (https://forum.fhem.de/index.php?msg=1292441)
my $RequestListSvn = {
"heating.boiler.serial.value" => "Kessel_Seriennummer",
"heating.boiler.temperature.value" => "Kessel_Solltemperatur",
"heating.boiler.sensors.temperature.commonSupply.status" =>
"Kessel_Common_Supply",
"heating.boiler.sensors.temperature.commonSupply.unit" =>
"Kessel_Common_Supply_Temperatur/Einheit",
"heating.boiler.sensors.temperature.commonSupply.value" =>
"Kessel_Common_Supply_Temperatur",
"heating.boiler.sensors.temperature.main.status" => "Kessel_Status",
"heating.boiler.sensors.temperature.main.unit" =>
"Kesseltemperatur/Einheit",
"heating.boiler.sensors.temperature.main.value" => "Kesseltemperatur",
"heating.boiler.temperature.unit" => "Kesseltemperatur/Einheit",
"heating.burner.active" => "Brenner_aktiv",
"heating.burner.automatic.status" => "Brenner_Status",
"heating.burner.automatic.errorCode" => "Brenner_Fehlercode",
"heating.burner.current.power.value" => "Brenner_Leistung",
"heating.burner.modulation.value" => "Brenner_Modulation",
"heating.burner.statistics.hours" => "Brenner_Betriebsstunden",
"heating.burner.statistics.starts" => "Brenner_Starts",
"heating.burners.0.active" => "Brenner_1_aktiv",
"heating.burners.0.modulation.unit" => "Brenner_1_Modulation/Einheit",
"heating.burners.0.modulation.value" => "Brenner_1_Modulation",
"heating.burners.0.statistics.hours" => "Brenner_1_Betriebsstunden",
"heating.burners.0.statistics.starts" => "Brenner_1_Starts",
"heating.circuits.enabled" => "Aktive_Heizkreise",
"heating.circuits.0.active" => "HK1-aktiv",
"heating.circuits.0.type" => "HK1-Typ",
"heating.circuits.0.circulation.pump.status" => "HK1-Zirkulationspumpe",
"heating.circuits.0.circulation.schedule.active" =>
"HK1-Zeitsteuerung_Zirkulation_aktiv",
"heating.circuits.0.circulation.schedule.entries" =>
"HK1-Zeitsteuerung_Zirkulation",
"heating.circuits.0.frostprotection.status" => "HK1-Frostschutz_Status",
"heating.circuits.0.geofencing.active" => "HK1-Geofencing",
"heating.circuits.0.geofencing.status" => "HK1-Geofencing_Status",
"heating.circuits.0.heating.curve.shift" => "HK1-Heizkurve-Niveau",
"heating.circuits.0.heating.curve.slope" => "HK1-Heizkurve-Steigung",
"heating.circuits.0.heating.schedule.active" =>
"HK1-Zeitsteuerung_Heizung_aktiv",
"heating.circuits.0.heating.schedule.entries" =>
"HK1-Zeitsteuerung_Heizung",
"heating.circuits.0.name" => "HK1-Name",
"heating.circuits.0.operating.modes.active.value" => "HK1-Betriebsart",
"heating.circuits.0.operating.modes.dhw.active" => "HK1-WW_aktiv",
"heating.circuits.0.operating.modes.dhwAndHeating.active" =>
"HK1-WW_und_Heizen_aktiv",
"heating.circuits.0.operating.modes.dhwAndHeatingCooling.active" =>
"HK1-WW_und_Heizen_Kuehlen_aktiv",
"heating.circuits.0.operating.modes.forcedNormal.active" =>
"HK1-Solltemperatur_erzwungen",
"heating.circuits.0.operating.modes.forcedReduced.active" =>
"HK1-Reduzierte_Temperatur_erzwungen",
"heating.circuits.0.operating.modes.heating.active" => "HK1-heizen_aktiv",
"heating.circuits.0.operating.modes.normalStandby.active" =>
"HK1-Normal_Standby_aktiv",
"heating.circuits.0.operating.modes.standby.active" => "HK1-Standby_aktiv",
"heating.circuits.0.operating.programs.active.value" =>
"HK1-Programmstatus",
"heating.circuits.0.operating.programs.comfort.active" =>
"HK1-Solltemperatur_comfort_aktiv",
"heating.circuits.0.operating.programs.comfort.demand" =>
"HK1-Solltemperatur_comfort_Anforderung",
"heating.circuits.0.operating.programs.comfort.temperature" =>
"HK1-Solltemperatur_comfort",
"heating.circuits.0.operating.programs.eco.active" =>
"HK1-Solltemperatur_eco_aktiv",
"heating.circuits.0.operating.programs.eco.temperature" =>
"HK1-Solltemperatur_eco",
"heating.circuits.0.operating.programs.external.active" =>
"HK1-External_aktiv",
"heating.circuits.0.operating.programs.external.temperature" =>
"HK1-External_Temperatur",
"heating.circuits.0.operating.programs.fixed.active" => "HK1-Fixed_aktiv",
"heating.circuits.0.operating.programs.forcedLastFromSchedule.active" =>
"HK1-forcedLastFromSchedule_aktiv",
"heating.circuits.0.operating.programs.holidayAtHome.active" =>
"HK1-HolidayAtHome_aktiv",
"heating.circuits.0.operating.programs.holidayAtHome.end" =>
"HK1-HolidayAtHome_Ende",
"heating.circuits.0.operating.programs.holidayAtHome.start" =>
"HK1-HolidayAtHome_Start",
"heating.circuits.0.operating.programs.holiday.active" =>
"HK1-Urlaub_aktiv",
"heating.circuits.0.operating.programs.holiday.start" => "HK1-Urlaub_Start",
"heating.circuits.0.operating.programs.holiday.end" => "HK1-Urlaub_Ende",
"heating.circuits.0.operating.programs.normal.active" =>
"HK1-Solltemperatur_aktiv",
"heating.circuits.0.operating.programs.normal.demand" =>
"HK1-Solltemperatur_Anforderung",
"heating.circuits.0.operating.programs.normal.temperature" =>
"HK1-Solltemperatur_normal",
"heating.circuits.0.operating.programs.reduced.active" =>
"HK1-Solltemperatur_reduziert_aktiv",
"heating.circuits.0.operating.programs.reduced.demand" =>
"HK1-Solltemperatur_reduziert_Anforderung",
"heating.circuits.0.operating.programs.reduced.temperature" =>
"HK1-Solltemperatur_reduziert",
"heating.circuits.0.operating.programs.summerEco.active" =>
"HK1-Solltemperatur_SummerEco_aktiv",
"heating.circuits.0.operating.programs.standby.active" =>
"HK1-Standby_aktiv",
"heating.circuits.0.zone.mode.active" => "HK1-ZoneMode_aktive",
"heating.circuits.0.sensors.temperature.room.status" => "HK1-Raum_Status",
"heating.circuits.0.sensors.temperature.room.value" =>
"HK1-Raum_Temperatur",
"heating.circuits.0.sensors.temperature.supply.status" =>
"HK1-Vorlauftemperatur_aktiv",
"heating.circuits.0.sensors.temperature.supply.unit" =>
"HK1-Vorlauftemperatur/Einheit",
"heating.circuits.0.sensors.temperature.supply.value" =>
"HK1-Vorlauftemperatur",
"heating.circuits.0.zone.mode.active" => "HK1-ZoneMode_aktive",
"heating.circuits.1.active" => "HK2-aktiv",
"heating.circuits.1.type" => "HK2-Typ",
"heating.circuits.1.circulation.pump.status" => "HK2-Zirkulationspumpe",
"heating.circuits.1.circulation.schedule.active" =>
"HK2-Zeitsteuerung_Zirkulation_aktiv",
"heating.circuits.1.circulation.schedule.entries" =>
"HK2-Zeitsteuerung_Zirkulation",
"heating.circuits.1.frostprotection.status" => "HK2-Frostschutz_Status",
"heating.circuits.1.geofencing.active" => "HK2-Geofencing",
"heating.circuits.1.geofencing.status" => "HK2-Geofencing_Status",
"heating.circuits.1.heating.curve.shift" => "HK2-Heizkurve-Niveau",
"heating.circuits.1.heating.curve.slope" => "HK2-Heizkurve-Steigung",
"heating.circuits.1.heating.schedule.active" =>
"HK2-Zeitsteuerung_Heizung_aktiv",
"heating.circuits.1.heating.schedule.entries" =>
"HK2-Zeitsteuerung_Heizung",
"heating.circuits.1.name" => "HK2-Name",
"heating.circuits.1.operating.modes.active.value" => "HK2-Betriebsart",
"heating.circuits.1.operating.modes.dhw.active" => "HK2-WW_aktiv",
"heating.circuits.1.operating.modes.dhwAndHeating.active" =>
"HK2-WW_und_Heizen_aktiv",
"heating.circuits.1.operating.modes.dhwAndHeatingCooling.active" =>
"HK2-WW_und_Heizen_Kuehlen_aktiv",
"heating.circuits.1.operating.modes.forcedNormal.active" =>
"HK2-Solltemperatur_erzwungen",
"heating.circuits.1.operating.modes.forcedReduced.active" =>
"HK2-Reduzierte_Temperatur_erzwungen",
"heating.circuits.1.operating.modes.heating.active" => "HK2-heizen_aktiv",
"heating.circuits.1.operating.modes.normalStandby.active" =>
"HK2-Normal_Standby_aktiv",
"heating.circuits.1.operating.modes.standby.active" => "HK2-Standby_aktiv",
"heating.circuits.1.operating.programs.active.value" =>
"HK2-Programmstatus",
"heating.circuits.1.operating.programs.comfort.active" =>
"HK2-Solltemperatur_comfort_aktiv",
"heating.circuits.1.operating.programs.comfort.demand" =>
"HK2-Solltemperatur_comfort_Anforderung",
"heating.circuits.1.operating.programs.comfort.temperature" =>
"HK2-Solltemperatur_comfort",
"heating.circuits.1.operating.programs.eco.active" =>
"HK2-Solltemperatur_eco_aktiv",
"heating.circuits.1.operating.programs.eco.temperature" =>
"HK2-Solltemperatur_eco",
"heating.circuits.1.operating.programs.external.active" =>
"HK2-External_aktiv",
"heating.circuits.1.operating.programs.external.temperature" =>
"HK2-External_Temperatur",
"heating.circuits.1.operating.programs.fixed.active" => "HK2-Fixed_aktiv",
"heating.circuits.1.operating.programs.forcedLastFromSchedule.active" =>
"HK2-forcedLastFromSchedule_aktiv",
"heating.circuits.1.operating.programs.holidayAtHome.active" =>
"HK2-HolidayAtHome_aktiv",
"heating.circuits.1.operating.programs.holidayAtHome.end" =>
"HK2-HolidayAtHome_Ende",
"heating.circuits.1.operating.programs.holidayAtHome.start" =>
"HK2-HolidayAtHome_Start",
"heating.circuits.1.operating.programs.holiday.active" =>
"HK2-Urlaub_aktiv",
"heating.circuits.1.operating.programs.holiday.start" => "HK2-Urlaub_Start",
"heating.circuits.1.operating.programs.holiday.end" => "HK2-Urlaub_Ende",
"heating.circuits.1.operating.programs.normal.active" =>
"HK2-Solltemperatur_aktiv",
"heating.circuits.1.operating.programs.normal.demand" =>
"HK2-Solltemperatur_Anforderung",
"heating.circuits.1.operating.programs.normal.temperature" =>
"HK2-Solltemperatur_normal",
"heating.circuits.1.operating.programs.reduced.active" =>
"HK2-Solltemperatur_reduziert_aktiv",
"heating.circuits.1.operating.programs.reduced.demand" =>
"HK2-Solltemperatur_reduziert_Anforderung",
"heating.circuits.1.operating.programs.reduced.temperature" =>
"HK2-Solltemperatur_reduziert",
"heating.circuits.1.operating.programs.summerEco.active" =>
"HK2-Solltemperatur_SummerEco_aktiv",
"heating.circuits.1.operating.programs.standby.active" =>
"HK2-Standby_aktiv",
"heating.circuits.1.sensors.temperature.room.status" => "HK2-Raum_Status",
"heating.circuits.1.sensors.temperature.room.value" =>
"HK2-Raum_Temperatur",
"heating.circuits.1.sensors.temperature.supply.status" =>
"HK2-Vorlauftemperatur_aktiv",
"heating.circuits.1.sensors.temperature.supply.unit" =>
"HK2-Vorlauftemperatur/Einheit",
"heating.circuits.1.sensors.temperature.supply.value" =>
"HK2-Vorlauftemperatur",
"heating.circuits.1.zone.mode.active" => "HK2-ZoneMode_aktive",
"heating.circuits.2.active" => "HK3-aktiv",
"heating.circuits.2.type" => "HK3-Typ",
"heating.circuits.2.circulation.pump.status" => "HK3-Zirkulationspumpe",
"heating.circuits.2.circulation.schedule.active" =>
"HK3-Zeitsteuerung_Zirkulation_aktiv",
"heating.circuits.2.circulation.schedule.entries" =>
"HK3-Zeitsteuerung_Zirkulation",
"heating.circuits.2.frostprotection.status" => "HK3-Frostschutz_Status",
"heating.circuits.2.geofencing.active" => "HK3-Geofencing",
"heating.circuits.2.geofencing.status" => "HK3-Geofencing_Status",
"heating.circuits.2.heating.curve.shift" => "HK3-Heizkurve-Niveau",
"heating.circuits.2.heating.curve.slope" => "HK3-Heizkurve-Steigung",
"heating.circuits.2.heating.schedule.active" =>
"HK3-Zeitsteuerung_Heizung_aktiv",
"heating.circuits.2.heating.schedule.entries" =>
"HK3-Zeitsteuerung_Heizung",
"heating.circuits.2.name" => "HK3-Name",
"heating.circuits.2.operating.modes.active.value" => "HK3-Betriebsart",
"heating.circuits.2.operating.modes.dhw.active" => "HK3-WW_aktiv",
"heating.circuits.2.operating.modes.dhwAndHeating.active" =>
"HK3-WW_und_Heizen_aktiv",
"heating.circuits.2.operating.modes.dhwAndHeatingCooling.active" =>
"HK3-WW_und_Heizen_Kuehlen_aktiv",
"heating.circuits.2.operating.modes.forcedNormal.active" =>
"HK3-Solltemperatur_erzwungen",
"heating.circuits.2.operating.modes.forcedReduced.active" =>
"HK3-Reduzierte_Temperatur_erzwungen",
"heating.circuits.2.operating.modes.heating.active" => "HK3-heizen_aktiv",
"heating.circuits.2.operating.modes.normalStandby.active" =>
"HK3-Normal_Standby_aktiv",
"heating.circuits.2.operating.modes.standby.active" => "HK3-Standby_aktiv",
"heating.circuits.2.operating.programs.active.value" =>
"HK3-Programmstatus",
"heating.circuits.2.operating.programs.comfort.active" =>
"HK3-Solltemperatur_comfort_aktiv",
"heating.circuits.2.operating.programs.comfort.demand" =>
"HK3-Solltemperatur_comfort_Anforderung",
"heating.circuits.2.operating.programs.comfort.temperature" =>
"HK3-Solltemperatur_comfort",
"heating.circuits.2.operating.programs.eco.active" =>
"HK3-Solltemperatur_eco_aktiv",
"heating.circuits.2.operating.programs.eco.temperature" =>
"HK3-Solltemperatur_eco",
"heating.circuits.2.operating.programs.external.active" =>
"HK3-External_aktiv",
"heating.circuits.2.operating.programs.external.temperature" =>
"HK3-External_Temperatur",
"heating.circuits.2.operating.programs.fixed.active" => "HK3-Fixed_aktiv",
"heating.circuits.2.operating.programs.forcedLastFromSchedule.active" =>
"HK3-forcedLastFromSchedule_aktiv",
"heating.circuits.2.operating.programs.holidayAtHome.active" =>
"HK3-HolidayAtHome_aktiv",
"heating.circuits.2.operating.programs.holidayAtHome.end" =>
"HK3-HolidayAtHome_Ende",
"heating.circuits.2.operating.programs.holidayAtHome.start" =>
"HK3-HolidayAtHome_Start",
"heating.circuits.2.operating.programs.holiday.active" =>
"HK3-Urlaub_aktiv",
"heating.circuits.2.operating.programs.holiday.start" => "HK3-Urlaub_Start",
"heating.circuits.2.operating.programs.holiday.end" => "HK3-Urlaub_Ende",
"heating.circuits.2.operating.programs.normal.active" =>
"HK3-Solltemperatur_aktiv",
"heating.circuits.2.operating.programs.normal.demand" =>
"HK3-Solltemperatur_Anforderung",
"heating.circuits.2.operating.programs.normal.temperature" =>
"HK3-Solltemperatur_normal",
"heating.circuits.2.operating.programs.reduced.active" =>
"HK3-Solltemperatur_reduziert_aktiv",
"heating.circuits.2.operating.programs.reduced.demand" =>
"HK3-Solltemperatur_reduziert_Anforderung",
"heating.circuits.2.operating.programs.reduced.temperature" =>
"HK3-Solltemperatur_reduziert",
"heating.circuits.2.operating.programs.summerEco.active" =>
"HK3-Solltemperatur_SummerEco_aktiv",
"heating.circuits.2.operating.programs.standby.active" =>
"HK3-Standby_aktiv",
"heating.circuits.2.sensors.temperature.room.status" => "HK3-Raum_Status",
"heating.circuits.2.sensors.temperature.room.value" =>
"HK3-Raum_Temperatur",
"heating.circuits.2.sensors.temperature.supply.status" =>
"HK3-Vorlauftemperatur_aktiv",
"heating.circuits.2.sensors.temperature.supply.unit" =>
"HK3-Vorlauftemperatur/Einheit",
"heating.circuits.2.sensors.temperature.supply.value" =>
"HK3-Vorlauftemperatur",
"heating.circuits.2.zone.mode.active" => "HK2-ZoneMode_aktive",
"heating.circuits.3.geofencing.active" => "HK4-Geofencing",
"heating.circuits.3.geofencing.status" => "HK4-Geofencing_Status",
"heating.circuits.3.operating.programs.summerEco.active" =>
"HK4-Solltemperatur_SummerEco_aktiv",
"heating.circuits.3.zone.mode.active" => "HK4-ZoneMode_aktive",
"heating.compressor.active" => "Kompressor_aktiv",
"heating.configuration.multiFamilyHouse.active" => "Mehrfamilenhaus_aktiv",
"heating.configuration.regulation.mode" => "Regulationmode",
"heating.controller.serial.value" => "Controller_Seriennummer",
"heating.device.time.offset.value" => "Device_Time_Offset",
"heating.dhw.active" => "WW-aktiv",
"heating.dhw.status" => "WW-Status",
"heating.dhw.charging.active" => "WW-Aufladung",
"heating.dhw.charging.level.bottom" => "WW-Speichertemperatur_unten",
"heating.dhw.charging.level.middle" => "WW-Speichertemperatur_mitte",
"heating.dhw.charging.level.top" => "WW-Speichertemperatur_oben",
"heating.dhw.charging.level.value" => "WW-Speicherladung",
"heating.dhw.oneTimeCharge.active" => "WW-einmaliges_Aufladen",
"heating.dhw.pumps.circulation.schedule.active" =>
"WW-Zirkulationspumpe_Zeitsteuerung_aktiv",
"heating.dhw.pumps.circulation.schedule.entries" =>
"WW-Zirkulationspumpe_Zeitplan",
"heating.dhw.pumps.circulation.status" => "WW-Zirkulationspumpe_Status",
"heating.dhw.pumps.primary.status" => "WW-Zirkulationspumpe_primaer",
"heating.dhw.sensors.temperature.outlet.status" =>
"WW-Sensoren_Auslauf_Status",
"heating.dhw.sensors.temperature.outlet.unit" =>
"WW-Sensoren_Auslauf_Wert/Einheit",
"heating.dhw.sensors.temperature.outlet.value" =>
"WW-Sensoren_Auslauf_Wert",
"heating.dhw.temperature.main.value" => "WW-Haupttemperatur",
"heating.dhw.temperature.hysteresis.value" => "WW-Hysterese",
"heating.dhw.temperature.temp2.value" => "WW-Temperatur_2",
"heating.dhw.sensors.temperature.hotWaterStorage.status" =>
"WW-Temperatur_aktiv",
"heating.dhw.sensors.temperature.hotWaterStorage.unit" =>
"WW-Isttemperatur/Einheit",
"heating.dhw.sensors.temperature.hotWaterStorage.value" =>
"WW-Isttemperatur",
"heating.dhw.temperature.value" => "WW-Solltemperatur",
"heating.dhw.schedule.active" => "WW-zeitgesteuert_aktiv",
"heating.dhw.schedule.entries" => "WW-Zeitplan",
"heating.errors.active.entries" => "Fehlereintraege_aktive",
"heating.errors.history.entries" => "Fehlereintraege_Historie",
"heating.flue.sensors.temperature.main.status" => "Abgassensor_Status",
"heating.flue.sensors.temperature.main.unit" =>
"Abgassensor_Temperatur/Einheit",
"heating.flue.sensors.temperature.main.value" => "Abgassensor_Temperatur",
"heating.fuelCell.operating.modes.active.value" => "Brennstoffzelle_Mode",
"heating.fuelCell.operating.modes.ecological.active" =>
"Brennstoffzelle_Mode_Ecological",
"heating.fuelCell.operating.modes.economical.active" =>
"Brennstoffzelle_Mode_Economical",
"heating.fuelCell.operating.modes.heatControlled.active" =>
"Brennstoffzelle_wärmegesteuert",
"heating.fuelCell.operating.modes.maintenance.active" =>
"Brennstoffzelle_Wartung",
"heating.fuelCell.operating.modes.standby.active" =>
"Brennstoffzelle_Standby",
"heating.fuelCell.operating.phase.value" => "Brennstoffzelle_Phase",
"heating.fuelCell.power.production.day" =>
"Brennstoffzelle_Stromproduktion/Tag",
"heating.fuelCell.power.production.month" =>
"Brennstoffzelle_Stromproduktion/Monat",
"heating.fuelCell.power.production.unit" =>
"Brennstoffzelle_Stromproduktion/Einheit",
"heating.fuelCell.power.production.week" =>
"Brennstoffzelle_Stromproduktion/Woche",
"heating.fuelCell.power.production.year" =>
"Brennstoffzelle_Stromproduktion/Jahr",
"heating.fuelCell.sensors.temperature.return.status" =>
"Brennstoffzelle_Temperatur_Ruecklauf_Status",
"heating.fuelCell.sensors.temperature.return.unit" =>
"Brennstoffzelle_Temperatur_Ruecklauf/Einheit",
"heating.fuelCell.sensors.temperature.return.value" =>
"Brennstoffzelle_Temperatur_Ruecklauf",
"heating.fuelCell.sensors.temperature.supply.status" =>
"Brennstoffzelle_Temperatur_Vorlauf_Status",
"heating.fuelCell.sensors.temperature.supply.unit" =>
"Brennstoffzelle_Temperatur_Vorlauf/Einheit",
"heating.fuelCell.sensors.temperature.supply.value" =>
"Brennstoffzelle_Temperatur_Vorlauf",
"heating.fuelCell.statistics.availabilityRate" =>
"Brennstoffzelle_Statistic_Verfügbarkeit",
"heating.fuelCell.statistics.insertions" =>
"Brennstoffzelle_Statistic_Einschub",
"heating.fuelCell.statistics.operationHours" =>
"Brennstoffzelle_Statistic_Bestriebsstunden",
"heating.fuelCell.statistics.productionHours" =>
"Brennstoffzelle_Statistic_Produktionsstunden",
"heating.fuelCell.statistics.productionStarts" =>
"Brennstoffzelle_Statistic_Produktionsstarts",
"heating.gas.consumption.dhw.day" => "Gasverbrauch_WW/Tag",
"heating.gas.consumption.dhw.week" => "Gasverbrauch_WW/Woche",
"heating.gas.consumption.dhw.month" => "Gasverbrauch_WW/Monat",
"heating.gas.consumption.dhw.year" => "Gasverbrauch_WW/Jahr",
"heating.gas.consumption.dhw.dayValueReadAt" =>
"Gasverbrauch_WW/Tag_gelesen_am",
"heating.gas.consumption.dhw.weekValueReadAt" =>
"Gasverbrauch_WW/Woche_gelesen_am",
"heating.gas.consumption.dhw.monthValueReadAt" =>
"Gasverbrauch_WW/Monat_gelesen_am",
"heating.gas.consumption.dhw.yearValueReadAt" =>
"Gasverbrauch_WW/Jahr_gelesen_am",
"heating.gas.consumption.dhw.unit" => "Gasverbrauch_WW/Einheit",
"heating.gas.consumption.heating.day" => "Gasverbrauch_Heizung/Tag",
"heating.gas.consumption.heating.week" => "Gasverbrauch_Heizung/Woche",
"heating.gas.consumption.heating.month" => "Gasverbrauch_Heizung/Monat",
"heating.gas.consumption.heating.year" => "Gasverbrauch_Heizung/Jahr",
"heating.gas.consumption.heating.dayValueReadAt" =>
"Gasverbrauch_Heizung/Tag_gelesen_am",
"heating.gas.consumption.heating.weekValueReadAt" =>
"Gasverbrauch_Heizung/Woche_gelesen_am",
"heating.gas.consumption.heating.monthValueReadAt" =>
"Gasverbrauch_Heizung/Monat_gelesen_am",
"heating.gas.consumption.heating.yearValueReadAt" =>
"Gasverbrauch_Heizung/Jahr_gelesen_am",
"heating.gas.consumption.heating.unit" => "Gasverbrauch_Heizung/Einheit",
"heating.gas.consumption.total.day" => "Gasverbrauch_Total/Tag",
"heating.gas.consumption.total.month" => "Gasverbrauch_Total/Monat",
"heating.gas.consumption.total.unit" => "Gasverbrauch_Total/Einheit",
"heating.gas.consumption.total.week" => "Gasverbrauch_Total/Woche",
"heating.gas.consumption.total.year" => "Gasverbrauch_Total/Jahr",
"heating.gas.consumption.total.dayValueReadAt" =>
"Gasverbrauch_Total/Tag_gelesen_am",
"heating.gas.consumption.total.monthValueReadAt" =>
"Gasverbrauch_Total/Woche_gelesen_am",
"heating.gas.consumption.total.weekValueReadAt" =>
"Gasverbrauch_Total/Woche_gelesen_am",
"heating.gas.consumption.total.yearValueReadAt" =>
"Gasverbrauch_Total/Jahr_gelesen_am",
"heating.gas.consumption.fuelCell.day" =>
"Gasverbrauch_Brennstoffzelle/Tag",
"heating.gas.consumption.fuelCell.week" =>
"Gasverbrauch_Brennstoffzelle/Woche",
"heating.gas.consumption.fuelCell.month" =>
"Gasverbrauch_Brennstoffzelle/Monat",
"heating.gas.consumption.fuelCell.year" =>
"Gasverbrauch_Brennstoffzelle/Jahr",
"heating.gas.consumption.fuelCell.unit" =>
"Gasverbrauch_Brennstoffzelle/Einheit",
"heating.heat.production.day" => "Wärmeproduktion/Tag",
"heating.heat.production.month" => "Wärmeproduktion/Woche",
"heating.heat.production.unit" => "Wärmeproduktion/Einheit",
"heating.heat.production.week" => "Wärmeproduktion/Woche",
"heating.heat.production.year" => "Wärmeproduktion/Jahr",
"heating.operating.programs.holiday.active" => "Urlaub_aktiv",
"heating.operating.programs.holiday.end" => "Urlaub_Ende",
"heating.operating.programs.holiday.start" => "Urlaub_Start",
"heating.operating.programs.holidayAtHome.active" => "holidayAtHome_aktiv",
"heating.operating.programs.holidayAtHome.end" => "holidayAtHome_Ende",
"heating.operating.programs.holidayAtHome.start" => "holidayAtHome_Start",
"heating.power.consumption.day" => "Stromverbrauch/Tag",
"heating.power.consumption.month" => "Stromverbrauch/Monat",
"heating.power.consumption.week" => "Stromverbrauch/Woche",
"heating.power.consumption.year" => "Stromverbrauch/Jahr",
"heating.power.consumption.unit" => "Stromverbrauch/Einheit",
"heating.power.consumption.dhw.day" => "Stromverbrauch_WW/Tag",
"heating.power.consumption.dhw.month" => "Stromverbrauch_WW/Monat",
"heating.power.consumption.dhw.week" => "Stromverbrauch_WW/Woche",
"heating.power.consumption.dhw.year" => "Stromverbrauch_WW/Jahr",
"heating.power.consumption.dhw.unit" => "Stromverbrauch_WW/Einheit",
"heating.power.consumption.heating.day" => "Stromverbrauch_Heizung/Tag",
"heating.power.consumption.heating.month" => "Stromverbrauch_Heizung/Monat",
"heating.power.consumption.heating.week" => "Stromverbrauch_Heizung/Woche",
"heating.power.consumption.heating.year" => "Stromverbrauch_Heizung/Jahr",
"heating.power.consumption.heating.unit" =>
"Stromverbrauch_Heizung/Einheit",
"heating.power.consumption.total.day" => "Stromverbrauch_Total/Tag",
"heating.power.consumption.total.month" => "Stromverbrauch_Total/Monat",
"heating.power.consumption.total.week" => "Stromverbrauch_Total/Woche",
"heating.power.consumption.total.year" => "Stromverbrauch_Total/Jahr",
"heating.power.consumption.total.dayValueReadAt" =>
"Stromverbrauch_Total/Tag_gelesen_am",
"heating.power.consumption.total.monthValueReadAt" =>
"Stromverbrauch_Total/Monat_gelesen_am",
"heating.power.consumption.total.weekValueReadAt" =>
"Stromverbrauch_Total/Woche_gelesen_am",
"heating.power.consumption.total.yearValueReadAt" =>
"Stromverbrauch_Total/Jahr_gelesen_am",
"heating.power.consumption.total.unit" => "Stromverbrauch_Total/Einheit",
"heating.power.production.current.status" =>
"Stromproduktion_aktueller_Status",
"heating.power.production.current.value" => "Stromproduktion",
"heating.power.production.demandCoverage.current.unit" =>
"Stromproduktion_Bedarfsabdeckung/Einheit",
"heating.power.production.demandCoverage.current.value" =>
"Stromproduktion_Bedarfsabdeckung",
"heating.power.production.demandCoverage.total.day" =>
"Stromproduktion_Bedarfsabdeckung_total/Tag",
"heating.power.production.demandCoverage.total.month" =>
"Stromproduktion_Bedarfsabdeckung_total/Monat",
"heating.power.production.demandCoverage.total.unit" =>
"Stromproduktion_Bedarfsabdeckung_total/Einheit",
"heating.power.production.demandCoverage.total.week" =>
"Stromproduktion_Bedarfsabdeckung_total/Woche",
"heating.power.production.demandCoverage.total.year" =>
"Stromproduktion_Bedarfsabdeckung_total/Jahr",
"heating.power.production.day" => "Stromproduktion_Total/Tag",
"heating.power.production.month" => "Stromproduktion_Total/Monat",
"heating.power.production.productionCoverage.current.unit" =>
"Stromproduktion_Produktionsabdeckung/Einheit",
"heating.power.production.productionCoverage.current.value" =>
"Stromproduktion_Produktionsabdeckung",
"heating.power.production.productionCoverage.total.day" =>
"Stromproduktion_Produktionsabdeckung_Total/Tag",
"heating.power.production.productionCoverage.total.month" =>
"Stromproduktion_Produktionsabdeckung_Total/Monat",
"heating.power.production.productionCoverage.total.unit" =>
"Stromproduktion_Produktionsabdeckung_Total/Einheit",
"heating.power.production.productionCoverage.total.week" =>
"Stromproduktion_Produktionsabdeckung_Total/Woche",
"heating.power.production.productionCoverage.total.year" =>
"Stromproduktion_Produktionsabdeckung_Total/Jahr",
"heating.power.production.unit" => "Stromproduktion_Total/Einheit",
"heating.power.production.week" => "Stromproduktion_Total/Woche",
"heating.power.production.year" => "Stromproduktion_Total/Jahr",
"heating.power.purchase.current.unit" => "Stromkauf/Einheit",
"heating.power.purchase.current.value" => "Stromkauf",
"heating.power.sold.current.unit" => "Stromverkauf/Einheit",
"heating.power.sold.current.value" => "Stromverkauf",
"heating.power.sold.day" => "Stromverkauf/Tag",
"heating.power.sold.month" => "Stromverkauf/Monat",
"heating.power.sold.unit" => "Stromverkauf/Einheit",
"heating.power.sold.week" => "Stromverkauf/Woche",
"heating.power.sold.year" => "Stromverkauf/Jahr",
"heating.sensors.pressure.supply.status" => "Drucksensor_Vorlauf_Status",
"heating.sensors.pressure.supply.unit" => "Drucksensor_Vorlauf/Einheit",
"heating.sensors.pressure.supply.value" => "Drucksensor_Vorlauf",
"heating.sensors.power.output.status" => "Sensor_Stromproduktion_Status",
"heating.sensors.power.output.value" => "Sensor_Stromproduktion",
"heating.sensors.temperature.outside.status" => "Aussen_Status",
"heating.sensors.temperature.outside.statusWired" => "Aussen_StatusWired",
"heating.sensors.temperature.outside.statusWireless" =>
"Aussen_StatusWireless",
"heating.sensors.temperature.outside.unit" => "Aussentemperatur/Einheit",
"heating.sensors.temperature.outside.value" => "Aussentemperatur",
"heating.service.timeBased.serviceDue" => "Service_faellig",
"heating.service.timeBased.serviceIntervalMonths" =>
"Service_Intervall_Monate",
"heating.service.timeBased.activeMonthSinceLastService" =>
"Service_Monate_aktiv_seit_letzten_Service",
"heating.service.timeBased.lastService" => "Service_Letzter",
"heating.service.burnerBased.serviceDue" =>
"Service_fällig_brennerbasiert",
"heating.service.burnerBased.serviceIntervalBurnerHours" =>
"Service_Intervall_Betriebsstunden",
"heating.service.burnerBased.activeBurnerHoursSinceLastService" =>
"Service_Betriebsstunden_seit_letzten",
"heating.service.burnerBased.lastService" =>
"Service_Letzter_brennerbasiert",
"heating.solar.active" => "Solar_aktiv",
"heating.solar.pumps.circuit.status" => "Solar_Pumpe_Status",
"heating.solar.rechargeSuppression.status" =>
"Solar_Aufladeunterdrueckung_Status",
"heating.solar.sensors.power.status" => "Solar_Sensor_Power_Status",
"heating.solar.sensors.power.value" => "Solar_Sensor_Power",
"heating.solar.sensors.temperature.collector.status" =>
"Solar_Sensor_Temperatur_Kollektor_Status",
"heating.solar.sensors.temperature.collector.value" =>
"Solar_Sensor_Temperatur_Kollektor",
"heating.solar.sensors.temperature.dhw.status" =>
"Solar_Sensor_Temperatur_WW_Status",
"heating.solar.sensors.temperature.dhw.value" =>
"Solar_Sensor_Temperatur_WW",
"heating.solar.statistics.hours" => "Solar_Sensor_Statistik_Stunden",
"heating.solar.power.cumulativeProduced.value" =>
"Solarproduktion_Gesamtertrag",
"heating.solar.power.production.month" => "Solarproduktion/Monat",
"heating.solar.power.production.day" => "Solarproduktion/Tag",
"heating.solar.power.production.unit" => "Solarproduktion/Einheit",
"heating.solar.power.production.week" => "Solarproduktion/Woche",
"heating.solar.power.production.year" => "Solarproduktion/Jahr"
};
my $RequestListRoger = {
"device.serial.value" => "Seriennummer",
"device.messages.errors.raw.entries" => "Fehlermeldungen",
"heating.boiler.serial.value" => "Kessel_Seriennummer",
"heating.boiler.temperature.value" => "Kessel_Solltemp__C",
"heating.boiler.sensors.temperature.commonSupply.status" => "Kessel_Common_Supply",
"heating.boiler.sensors.temperature.commonSupply.unit" => "Kessel_Common_Supply_Temp_Einheit",
"heating.boiler.sensors.temperature.commonSupply.value" => "Kessel_Common_Supply_Temp__C",
"heating.boiler.sensors.temperature.main.status" => "Kessel_Status",
"heating.boiler.sensors.temperature.main.value" => "Kessel_Temp__C",
"heating.boiler.sensors.temperature.main.unit" => "Kessel_Temp_Einheit",
"heating.boiler.temperature.unit" => "Kesseltemp_Einheit",
"heating.device.time.offset.value" => "Device_Time_Offset",
"heating.sensors.temperature.outside.status" => "Aussen_Status",
"heating.sensors.temperature.outside.unit" => "Temp_aussen_Einheit",
"heating.sensors.temperature.outside.value" => "Temp_aussen__C",
"heating.burners.0.active" => "Brenner_1_aktiv",
"heating.burners.0.statistics.starts" => "Brenner_1_Starts",
"heating.burners.0.statistics.hours" => "Brenner_1_Betriebsstunden__h",
"heating.burners.0.modulation.value" => "Brenner_1_Modulation__Prz",
"heating.burners.0.modulation.unit" => "Brenner_1_Modulation_Einheit",
"heating.burner.active" => "Brenner_aktiv",
"heating.burner.automatic.status" => "Brenner_Status",
"heating.burner.automatic.errorCode" => "Brenner_Fehlercode",
"heating.burner.current.power.value" => "Brenner_Leistung",
"heating.burner.modulation.value" => "Brenner_Modulation",
"heating.burner.statistics.hours" => "Brenner_Betriebsstunden__h",
"heating.burner.statistics.starts" => "Brenner_Starts",
"heating.sensors.volumetricFlow.allengra.status" => "Heiz_Volumenstrom_Status",
"heating.sensors.volumetricFlow.allengra.value" => "Heiz_Volumenstrom__l/h",
"heating.circuits.enabled" => "aktive_Heizkreise",
"heating.circuits.0.name" => "HK1_Name",
"heating.circuits.0.operating.modes.active.value" => "HK1_Betriebsart",
"heating.circuits.0.active" => "HK1_aktiv",
"heating.circuits.0.type" => "HK1_Typ",
"heating.circuits.0.circulation.pump.status" => "HK1_Zirkulationspumpe",
"heating.circuits.0.circulation.schedule.active" => "HK1_Zeitsteuerung_Zirkulation_aktiv",
"heating.circuits.0.circulation.schedule.entries" => "HK1_Zeitsteuerung_Zirkulation",
"heating.circuits.0.frostprotection.status" => "HK1_Frostschutz_Status",
"heating.circuits.0.geofencing.active" => "HK1_Geofencing",
"heating.circuits.0.geofencing.status" => "HK1_Geofencing_Status",
"heating.circuits.0.heating.curve.shift" => "HK1_Heizkurve_Niveau",
"heating.circuits.0.heating.curve.slope" => "HK1_Heizkurve_Steigung",
"heating.circuits.0.heating.schedule.active" => "HK1_Zeitsteuerung_Heizung_aktiv",
"heating.circuits.0.heating.schedule.entries" => "HK1_Zeitsteuerung_Heizung",
"heating.circuits.0.operating.modes.dhwAndHeatingCooling.active" => "HK1_WW_und_Heizen_Kuehlen_aktiv",
"heating.circuits.0.operating.modes.forcedNormal.active" => "HK1_Soll_Temp_erzwungen",
"heating.circuits.0.operating.modes.forcedReduced.active" => "HK1_Reduzierte_Temp_erzwungen",
"heating.circuits.0.operating.modes.heating.active" => "HK1_heizen_aktiv",
"heating.circuits.0.operating.modes.normalStandby.active" => "HK1_Normal_Standby_aktiv",
"heating.circuits.0.operating.modes.standby.active" => "HK1_Standby_aktiv",
"heating.circuits.0.operating.programs.active.value" => "HK1_Programmstatus",
"heating.circuits.0.operating.programs.comfort.active" => "HK1_Soll_Temp_comfort_aktiv",
"heating.circuits.0.operating.programs.comfort.demand" => "HK1_Soll_Temp_comfort_Anforderung",
"heating.circuits.0.operating.programs.comfort.temperature" => "HK1_Soll_Temp_comfort__C",
"heating.circuits.0.operating.programs.eco.active" => "HK1_Soll_Temp_eco_aktiv",
"heating.circuits.0.operating.programs.eco.temperature" => "HK1_Soll_Temp_eco__C",
"heating.circuits.0.operating.programs.external.active" => "HK1_External_aktiv",
"heating.circuits.0.operating.programs.external.temperature" => "HK1_External_Temp",
"heating.circuits.0.operating.programs.fixed.active" => "HK1_Fixed_aktiv",
"heating.circuits.0.operating.programs.forcedLastFromSchedule.active" => "HK1_forcedLastFromSchedule_aktiv",
"heating.circuits.0.operating.programs.holidayAtHome.active" => "HK1_HolidayAtHome_aktiv",
"heating.circuits.0.operating.programs.holidayAtHome.end" => "HK1_HolidayAtHome_Ende",
"heating.circuits.0.operating.programs.holidayAtHome.start" => "HK1_HolidayAtHome_Start",
"heating.circuits.0.operating.programs.holiday.active" => "HK1_Urlaub_aktiv",
"heating.circuits.0.operating.programs.holiday.start" => "HK1_Urlaub_Start_Zeit",
"heating.circuits.0.operating.programs.holiday.end" => "HK1_Urlaub_Ende_Zeit",
"heating.circuits.0.operating.programs.normal.active" => "HK1_Soll_Temp_aktiv",
"heating.circuits.0.operating.programs.normal.demand" => "HK1_Soll_Temp_Anforderung",
"heating.circuits.0.operating.programs.normal.temperature" => "HK1_Soll_Temp_normal",
"heating.circuits.0.operating.programs.reduced.active" => "HK1_Soll_Temp_reduziert_aktiv",
"heating.circuits.0.operating.programs.reduced.demand" => "HK1_Soll_Temp_reduziert_Anforderung",
"heating.circuits.0.operating.programs.reduced.temperature" => "HK1_Soll_Temp_reduziert",
"heating.circuits.0.operating.programs.summerEco.active" => "HK1_Soll_Temp_SummerEco_aktiv",
"heating.circuits.0.operating.programs.standby.active" => "HK1_Standby_aktiv",
"heating.circuits.0.zone.mode.active" => "HK1_ZoneMode_aktive",
"heating.circuits.0.sensors.temperature.room.status" => "HK1_Raum_Status",
"heating.circuits.0.sensors.temperature.room.value" => "HK1_Raum_Temp",
"heating.circuits.0.sensors.temperature.supply.status" => "HK1_Vorlauf_Temp_Status",
"heating.circuits.0.sensors.temperature.supply.unit" => "HK1_Vorlauf_Temp_Einheit",
"heating.circuits.0.sensors.temperature.supply.value" => "HK1_Vorlauf_Temp__C",
"heating.circuits.0.zone.mode.active" => "HK1_ZoneMode_aktive",
"heating.dhw.operating.modes.active.value" => "WW_Betriebsart",
"heating.dhw.operating.modes.balanced.active" => "WW_Betriebsart_balanced",
"heating.dhw.operating.modes.off.active" => "WW_Betriebsart_off",
"heating.dhw.temperature.main.value" => "WW_Temp_Soll__C",
"heating.dhw.sensors.temperature.hotWaterStorage.value" => "WW_Temp_Ist__C",
"heating.dhw.sensors.temperature.hotWaterStorage.unit" => "WW_Temp_Ist_Einheit",
"heating.dhw.oneTimeCharge.active" => "WW_einmaliges_Aufladen",
"heating.dhw.sensors.temperature.dhwCylinder.value" => "WW_Temp__C",
"heating.dhw.sensors.temperature.dhwCylinder.status" => "WW_Temp_Status",
"heating.dhw.hygiene.active" => "WW_Hygiene_laeft",
"heating.dhw.hygiene.enabled" => "WW_Hygiene_enabled",
"heating.dhw.hygiene.trigger.startHour" => "WW_Hygiene_Start__hh",
"heating.dhw.hygiene.trigger.startMinute" => "WW_Hygiene_Start__mm",
"heating.dhw.hygiene.trigger.weekdays" => "WW_Hygiene_Start__dd",
"heating.dhw.temperature.hygiene.value" => "WW_Hygiene_Temp__C",
"heating.dhw.pumps.circulation.schedule.active" => "WW_Zirkulationspumpe_Zeitsteuerung_aktiv",
"heating.dhw.pumps.circulation.schedule.entries" => "WW_Zirkulationspumpe_Zeitplan",
"heating.dhw.pumps.circulation.status" => "WW_Zirkulationspumpe_Status",
"heating.dhw.pumps.primary.status" => "WW_Zirkulationspumpe_primaer",
"heating.dhw.sensors.temperature.outlet.status" => "WW_Sensoren_Auslauf_Status",
"heating.dhw.sensors.temperature.outlet.unit" => "WW_Sensoren_Auslauf_Wert_Einheit",
"heating.dhw.sensors.temperature.outlet.value" => "WW_Sensoren_Auslauf_Wert",
"heating.dhw.temperature.hysteresis.value" => "WW_Hysterese",
"heating.dhw.sensors.temperature.hotWaterStorage.status" => "WW_Temp_aktiv",
# "heating.dhw.temperature.value" => "WW_Solltemp__C",
"heating.dhw.schedule.active" => "WW_zeitgesteuert_aktiv",
"heating.dhw.schedule.entries" => "WW_Zeitplan",
"heating.dhw.temperature.temp2.value" => "WW_Temp2__C",
"heating.gas.consumption.summary.dhw.currentDay" => "Gas_WW_Day__m3",
"heating.gas.consumption.summary.dhw.lastSevenDays" => "Gas_WW_7dLast__m3",
"heating.gas.consumption.summary.dhw.currentMonth" => "Gas_WW_Month__m3",
"heating.gas.consumption.summary.dhw.lastMonth" => "Gas_WW_MonthLast__m3",
"heating.gas.consumption.summary.dhw.currentYear" => "Gas_WW_Year__m3",
"heating.gas.consumption.summary.dhw.lastYear" => "Gas_WW_YearLast__m3",
"heating.gas.consumption.summary.heating.currentDay" => "Gas_Day__m3",
"heating.gas.consumption.summary.heating.lastSevenDays" => "Gas_7dLast__m3",
"heating.gas.consumption.summary.heating.currentMonth" => "Gas_Month__m3",
"heating.gas.consumption.summary.heating.lastMonth" => "Gas_MonthLast__m3",
"heating.gas.consumption.summary.heating.currentYear" => "Gas_Year__m3",
"heating.gas.consumption.summary.heating.lastYear" => "Gas_YearLast__m3",
"heating.gas.consumption.dhw.day" => "Gas_WW_Tage__m3",
"heating.gas.consumption.dhw.dayValueReadAt" => "Gas_WW_Tage_Zeit",
"heating.gas.consumption.dhw.week" => "Gas_WW_Wochen__m3",
"heating.gas.consumption.dhw.weekValueReadAt" => "Gas_WW_Wochen_Zeit",
"heating.gas.consumption.dhw.month" => "Gas_WW_Monate__m3",
"heating.gas.consumption.dhw.monthValueReadAt" => "Gas_WW_Monate_Zeit",
"heating.gas.consumption.dhw.year" => "Gas_WW_Jahre__m3",
"heating.gas.consumption.dhw.yearValueReadAt" => "Gas_WW_Jahre_Zeit",
"heating.gas.consumption.dhw.unit" => "Gas_WW_Einheit",
"heating.gas.consumption.heating.day" => "Gas_Heiz_Tage__m3",
"heating.gas.consumption.heating.dayValueReadAt" => "Gas_Heiz_Tage_Zeit",
"heating.gas.consumption.heating.week" => "Gas_Heiz_Wochen__m3",
"heating.gas.consumption.heating.weekValueReadAt" => "Gas_Heiz_Wochen_Zeit",
"heating.gas.consumption.heating.month" => "Gas_Heiz_Monate__m3",
"heating.gas.consumption.heating.monthValueReadAt" => "Gas_Heiz_Monate_Zeit",
"heating.gas.consumption.heating.year" => "Gas_Heiz_Jahre__m3",
"heating.gas.consumption.heating.yearValueReadAt" => "Gas_Heiz_Jahre_Zeit",
"heating.gas.consumption.heating.unit" => "Gas_Heiz_Einheit",
"heating.gas.consumption.total.day" => "Gas_Total_Tage__m3",
"heating.gas.consumption.total.dayValueReadAt" => "Gas_Total_Tage_Zeit",
"heating.gas.consumption.total.week" => "Gas_Total_Wochen__m3",
"heating.gas.consumption.total.weekValueReadAt" => "Gas_Total_Wochen_Zeit",
"heating.gas.consumption.total.month" => "Gas_Total_Monate__m3",
"heating.gas.consumption.total.monthValueReadAt" => "Gas_Total_Monate_Zeit",
"heating.gas.consumption.total.year" => "Gas_Total_Jahre__m3",
"heating.gas.consumption.total.yearValueReadAt" => "Gas_Total_Jahre_Zeit",
"heating.gas.consumption.total.unit" => "Gas_Total_Einheit",
"heating.power.consumption.summary.dhw.currentDay" => "Strom_WW_Day__kWh",
"heating.power.consumption.summary.dhw.lastSevenDays" => "Strom_WW_7dLast__kWh",
"heating.power.consumption.summary.dhw.currentMonth" => "Strom_WW_Month__kWh",
"heating.power.consumption.summary.dhw.lastMonth" => "Strom_WW_MonthLast__kWh",
"heating.power.consumption.summary.dhw.currentYear" => "Strom_WW_Year__kWh",
"heating.power.consumption.summary.dhw.lastYear" => "Strom_WW_YearLast__kWh",
"heating.power.consumption.summary.heating.currentDay" => "Strom_Heiz_Day__kWh",
"heating.power.consumption.summary.heating.lastSevenDays" => "Strom_Heiz_7dLast__kWh",
"heating.power.consumption.summary.heating.currentMonth" => "Strom_Heiz_Month__kWh",
"heating.power.consumption.summary.heating.lastMonth" => "Strom_Heiz_MonthLast__kWh",
"heating.power.consumption.summary.heating.currentYear" => "Strom_Heiz_Year__kWh",
"heating.power.consumption.summary.heating.lastYear" => "Strom_Heiz_YearLast__kWh",
"heating.circuits.3.heating.curve.shift" => "HK4_Heizkurve_Niveau",
"heating.circuits.3.heating.curve.slope" => "HK4_Heizkurve_Steigung",
"heating.circuits.3.geofencing.active" => "HK4_Geofencing",
"heating.circuits.3.geofencing.status" => "HK4_Geofencing_Status",
"heating.circuits.3.operating.programs.summerEco.active" => "HK4_Solltemperatur_SummerEco_aktiv",
"heating.circuits.3.zone.mode.active" => "HK4_ZoneMode_aktive",
"heating.circuits.1.active" => "HK2_aktiv",
"heating.circuits.1.type" => "HK2_Typ",
"heating.circuits.1.circulation.pump.status" => "HK2_Zirkulationspumpe",
"heating.circuits.1.circulation.schedule.active" => "HK2_Zeitsteuerung_Zirkulation_aktiv",
"heating.circuits.1.circulation.schedule.entries" => "HK2_Zeitsteuerung_Zirkulation",
"heating.circuits.1.frostprotection.status" => "HK2_Frostschutz_Status",
"heating.circuits.1.geofencing.active" => "HK2_Geofencing",
"heating.circuits.1.geofencing.status" => "HK2_Geofencing_Status",
"heating.circuits.1.heating.curve.shift" => "HK2_Heizkurve_Niveau",
"heating.circuits.1.heating.curve.slope" => "HK2_Heizkurve_Steigung",
"heating.circuits.1.heating.schedule.active" => "HK2_Zeitsteuerung_Heizung_aktiv",
"heating.circuits.1.heating.schedule.entries" => "HK2_Zeitsteuerung_Heizung",
"heating.circuits.1.name" => "HK2_Name",
"heating.circuits.1.operating.modes.active.value" => "HK2_Betriebsart",
"heating.circuits.1.operating.modes.dhw.active" => "HK2_WW_aktiv",
"heating.circuits.1.operating.modes.dhwAndHeating.active" => "HK2_WW_und_Heizen_aktiv",
"heating.circuits.1.operating.modes.dhwAndHeatingCooling.active" => "HK2_WW_und_Heizen_Kuehlen_aktiv",
"heating.circuits.1.operating.modes.forcedNormal.active" => "HK2_Solltemperatur_erzwungen",
"heating.circuits.1.operating.modes.forcedReduced.active" => "HK2_Reduzierte_Temperatur_erzwungen",
"heating.circuits.1.operating.modes.heating.active" => "HK2_heizen_aktiv",
"heating.circuits.1.operating.modes.normalStandby.active" => "HK2_Normal_Standby_aktiv",
"heating.circuits.1.operating.modes.standby.active" => "HK2_Standby_aktiv",
"heating.circuits.1.operating.programs.active.value" => "HK2_Programmstatus",
"heating.circuits.1.operating.programs.comfort.active" => "HK2_Solltemperatur_comfort_aktiv",
"heating.circuits.1.operating.programs.comfort.demand" =>
"HK2-Solltemperatur_comfort_Anforderung",
"heating.circuits.1.operating.programs.comfort.temperature" =>
"HK2-Solltemperatur_comfort",
"heating.circuits.1.operating.programs.eco.active" =>
"HK2-Solltemperatur_eco_aktiv",
"heating.circuits.1.operating.programs.eco.temperature" =>
"HK2-Solltemperatur_eco",
"heating.circuits.1.operating.programs.external.active" =>
"HK2-External_aktiv",
"heating.circuits.1.operating.programs.external.temperature" =>
"HK2-External_Temperatur",
"heating.circuits.1.operating.programs.fixed.active" => "HK2-Fixed_aktiv",
"heating.circuits.1.operating.programs.forcedLastFromSchedule.active" =>
"HK2-forcedLastFromSchedule_aktiv",
"heating.circuits.1.operating.programs.holidayAtHome.active" =>
"HK2-HolidayAtHome_aktiv",
"heating.circuits.1.operating.programs.holidayAtHome.end" => "HK2-HolidayAtHome_Ende",
"heating.circuits.1.operating.programs.holidayAtHome.start" => "HK2-HolidayAtHome_Start",
"heating.circuits.1.operating.programs.holiday.active" => "HK2_Urlaub_aktiv",
"heating.circuits.1.operating.programs.holiday.start" => "HK2_Urlaub_Start_Zeit",
"heating.circuits.1.operating.programs.holiday.end" => "HK2_Urlaub_Ende_Zeit",
"heating.circuits.1.operating.programs.normal.active" =>
"HK2-Solltemperatur_aktiv",
"heating.circuits.1.operating.programs.normal.demand" =>
"HK2-Solltemperatur_Anforderung",
"heating.circuits.1.operating.programs.normal.temperature" =>
"HK2-Solltemperatur_normal",
"heating.circuits.1.operating.programs.reduced.active" =>
"HK2-Solltemperatur_reduziert_aktiv",
"heating.circuits.1.operating.programs.reduced.demand" =>
"HK2-Solltemperatur_reduziert_Anforderung",
"heating.circuits.1.operating.programs.reduced.temperature" =>
"HK2-Solltemperatur_reduziert",
"heating.circuits.1.operating.programs.summerEco.active" =>
"HK2-Solltemperatur_SummerEco_aktiv",
"heating.circuits.1.operating.programs.standby.active" =>
"HK2-Standby_aktiv",
"heating.circuits.1.sensors.temperature.room.status" => "HK2-Raum_Status",
"heating.circuits.1.sensors.temperature.room.value" =>
"HK2-Raum_Temperatur",
"heating.circuits.1.sensors.temperature.supply.status" =>
"HK2-Vorlauftemperatur_aktiv",
"heating.circuits.1.sensors.temperature.supply.unit" =>
"HK2-Vorlauftemperatur_Einheit",
"heating.circuits.1.sensors.temperature.supply.value" =>
"HK2-Vorlauftemperatur",
"heating.circuits.1.zone.mode.active" => "HK2-ZoneMode_aktive",
"heating.circuits.2.active" => "HK3_aktiv",
"heating.circuits.2.type" => "HK3_Typ",
"heating.circuits.2.circulation.pump.status" => "HK3_Zirkulationspumpe",
"heating.circuits.2.circulation.schedule.active" =>"HK3_Zeitsteuerung_Zirkulation_aktiv",
"heating.circuits.2.circulation.schedule.entries" =>"HK3_Zeitsteuerung_Zirkulation",
"heating.circuits.2.frostprotection.status" => "HK3_Frostschutz_Status",
"heating.circuits.2.geofencing.active" => "HK3_Geofencing",
"heating.circuits.2.geofencing.status" => "HK3_Geofencing_Status",
"heating.circuits.2.heating.curve.shift" => "HK3_Heizkurve_Niveau",
"heating.circuits.2.heating.curve.slope" => "HK3_Heizkurve_Steigung",
"heating.circuits.2.heating.schedule.active" => "HK3-Zeitsteuerung_Heizung_aktiv",
"heating.circuits.2.heating.schedule.entries" => "HK3_Zeitsteuerung_Heizung",
"heating.circuits.2.name" => "HK3_Name",
"heating.circuits.2.operating.modes.active.value" => "HK3_Betriebsart",
"heating.circuits.2.operating.modes.dhw.active" => "HK3_WW_aktiv",
"heating.circuits.2.operating.modes.dhwAndHeating.active" => "HK3_WW_und_Heizen_aktiv",
"heating.circuits.2.operating.modes.dhwAndHeatingCooling.active" => "HK3-WW_und_Heizen_Kuehlen_aktiv",
"heating.circuits.2.operating.modes.forcedNormal.active" => "HK3-Solltemperatur_erzwungen",
"heating.circuits.2.operating.modes.forcedReduced.active" => "HK3-Reduzierte_Temperatur_erzwungen",
"heating.circuits.2.operating.modes.heating.active" => "HK3-heizen_aktiv",
"heating.circuits.2.operating.modes.normalStandby.active" => "HK3-Normal_Standby_aktiv",
"heating.circuits.2.operating.modes.standby.active" => "HK3-Standby_aktiv",
"heating.circuits.2.operating.programs.active.value" => "HK3-Programmstatus",
"heating.circuits.2.operating.programs.comfort.active" => "HK3-Solltemperatur_comfort_aktiv",
"heating.circuits.2.operating.programs.comfort.demand" => "HK3-Solltemperatur_comfort_Anforderung",
"heating.circuits.2.operating.programs.comfort.temperature" => "HK3-Solltemperatur_comfort",
"heating.circuits.2.operating.programs.eco.active" => "HK3-Solltemperatur_eco_aktiv",
"heating.circuits.2.operating.programs.eco.temperature" => "HK3-Solltemperatur_eco",
"heating.circuits.2.operating.programs.external.active" => "HK3-External_aktiv",
"heating.circuits.2.operating.programs.external.temperature" => "HK3-External_Temperatur",
"heating.circuits.2.operating.programs.fixed.active" => "HK3-Fixed_aktiv",
"heating.circuits.2.operating.programs.forcedLastFromSchedule.active" => "HK3-forcedLastFromSchedule_aktiv",
"heating.circuits.2.operating.programs.holidayAtHome.active" => "HK3-HolidayAtHome_aktiv",
"heating.circuits.2.operating.programs.holidayAtHome.end" => "HK3-HolidayAtHome_Ende",
"heating.circuits.2.operating.programs.holidayAtHome.start" => "HK3-HolidayAtHome_Start",
"heating.circuits.2.operating.programs.holiday.active" => "HK3_Urlaub_aktiv",
"heating.circuits.2.operating.programs.holiday.start" => "HK3_Urlaub_Start_Zeit",
"heating.circuits.2.operating.programs.holiday.end" => "HK3_Urlaub_Ende_Zeit",
"heating.circuits.2.operating.programs.normal.active" =>
"HK3-Solltemperatur_aktiv",
"heating.circuits.2.operating.programs.normal.demand" =>
"HK3-Solltemperatur_Anforderung",
"heating.circuits.2.operating.programs.normal.temperature" =>
"HK3-Solltemperatur_normal",
"heating.circuits.2.operating.programs.reduced.active" =>
"HK3-Solltemperatur_reduziert_aktiv",
"heating.circuits.2.operating.programs.reduced.demand" =>
"HK3-Solltemperatur_reduziert_Anforderung",
"heating.circuits.2.operating.programs.reduced.temperature" =>
"HK3-Solltemperatur_reduziert",
"heating.circuits.2.operating.programs.summerEco.active" =>
"HK3-Solltemperatur_SummerEco_aktiv",
"heating.circuits.2.operating.programs.standby.active" =>
"HK3-Standby_aktiv",
"heating.circuits.2.sensors.temperature.room.status" => "HK3-Raum_Status",
"heating.circuits.2.sensors.temperature.room.value" =>
"HK3-Raum_Temperatur",
"heating.circuits.2.sensors.temperature.supply.status" =>
"HK3-Vorlauftemperatur_aktiv",
"heating.circuits.2.sensors.temperature.supply.unit" =>
"HK3-Vorlauftemperatur_Einheit",
"heating.circuits.2.sensors.temperature.supply.value" => "HK3-Vorlauftemperatur",
"heating.circuits.2.zone.mode.active" => "HK2-ZoneMode_aktive",
"heating.compressor.active" => "Kompressor_aktiv",
"heating.configuration.multiFamilyHouse.active" => "Mehrfamilenhaus_aktiv",
"heating.configuration.regulation.mode" => "Regulationmode",
"heating.controller.serial.value" => "Controller_Seriennummer",
"heating.dhw.active" => "WW_aktiv",
"heating.dhw.status" => "WW_Status",
"heating.dhw.charging.active" => "WW_Aufladung",
"heating.dhw.charging.level.bottom" => "WW_Speichertemperatur_unten",
"heating.dhw.charging.level.middle" => "WW_Speichertemperatur_mitte",
"heating.dhw.charging.level.top" => "WW_Speichertemperatur_oben",
"heating.dhw.charging.level.value" => "WW_Speicherladung",
"heating.errors.active.entries" => "Fehlereintraege_aktive",
"heating.errors.history.entries" => "Fehlereintraege_Historie",
"heating.flue.sensors.temperature.main.status" => "Abgassensor_Status",
"heating.flue.sensors.temperature.main.unit" => "Abgassensor_Temperatur_Einheit",
"heating.flue.sensors.temperature.main.value" => "Abgassensor_Temperatur",
"heating.fuelCell.operating.modes.active.value" => "Brennstoffzelle_Mode",
"heating.fuelCell.operating.modes.ecological.active" => "Brennstoffzelle_Mode_Ecological",
"heating.fuelCell.operating.modes.economical.active" => "Brennstoffzelle_Mode_Economical",
"heating.fuelCell.operating.modes.heatControlled.active" => "Brennstoffzelle_wärmegesteuert",
"heating.fuelCell.operating.modes.maintenance.active" => "Brennstoffzelle_Wartung",
"heating.fuelCell.operating.modes.standby.active" => "Brennstoffzelle_Standby",
"heating.fuelCell.operating.phase.value" => "Brennstoffzelle_Phase",
"heating.fuelCell.power.production.day" => "Brennstoffzelle_Stromproduktion/Tag",
"heating.fuelCell.power.production.month" => "Brennstoffzelle_Stromproduktion/Monat",
"heating.fuelCell.power.production.unit" => "Brennstoffzelle_Stromproduktion_Einheit",
"heating.fuelCell.power.production.week" => "Brennstoffzelle_Stromproduktion/Woche",
"heating.fuelCell.power.production.year" => "Brennstoffzelle_Stromproduktion/Jahr",
"heating.fuelCell.sensors.temperature.return.status" => "Brennstoffzelle_Temperatur_Ruecklauf_Status",
"heating.fuelCell.sensors.temperature.return.unit" => "Brennstoffzelle_Temperatur_Ruecklauf_Einheit",
"heating.fuelCell.sensors.temperature.return.value" => "Brennstoffzelle_Temperatur_Ruecklauf",
"heating.fuelCell.sensors.temperature.supply.status" => "Brennstoffzelle_Temperatur_Vorlauf_Status",
"heating.fuelCell.sensors.temperature.supply.unit" => "Brennstoffzelle_Temperatur_Vorlauf_Einheit",
"heating.fuelCell.sensors.temperature.supply.value" => "Brennstoffzelle_Temperatur_Vorlauf",
"heating.fuelCell.statistics.availabilityRate" => "Brennstoffzelle_Statistic_Verfügbarkeit",
"heating.fuelCell.statistics.insertions" => "Brennstoffzelle_Statistic_Einschub",
"heating.fuelCell.statistics.operationHours" => "Brennstoffzelle_Statistic_Bestriebsstunden",
"heating.fuelCell.statistics.productionHours" => "Brennstoffzelle_Statistic_Produktionsstunden",
"heating.fuelCell.statistics.productionStarts" => "Brennstoffzelle_Statistic_Produktionsstarts",
"heating.gas.consumption.fuelCell.day" => "Gas_Brennstoffzelle/Tag",
"heating.gas.consumption.fuelCell.week" => "Gas_Brennstoffzelle/Woche",
"heating.gas.consumption.fuelCell.month" => "Gas_Brennstoffzelle/Monat",
"heating.gas.consumption.fuelCell.year" => "Gas_Brennstoffzelle/Jahr",
"heating.gas.consumption.fuelCell.unit" => "Gas_Brennstoffzelle/Einheit",
"heating.heat.production.day" => "Wärmeproduktion/Tag",
"heating.heat.production.month" => "Wärmeproduktion/Woche",
"heating.heat.production.unit" => "Wärmeproduktion/Einheit",
"heating.heat.production.week" => "Wärmeproduktion/Woche",
"heating.heat.production.year" => "Wärmeproduktion/Jahr",
"heating.operating.programs.holiday.active" => "Urlaub_aktiv",
"heating.operating.programs.holiday.end" => "Urlaub_Ende_Zeit",
"heating.operating.programs.holiday.start" => "Urlaub_Start_Zeit",
"heating.operating.programs.holidayAtHome.active" => "HolidayAtHome_aktiv",
"heating.operating.programs.holidayAtHome.end" => "HolidayAtHome_Ende",
"heating.operating.programs.holidayAtHome.start" => "HolidayAtHome_Start",
"heating.power.consumption.day" => "Stromverbrauch_Tag",
"heating.power.consumption.month" => "Stromverbrauch_Monat",
"heating.power.consumption.week" => "Stromverbrauch_Woche",
"heating.power.consumption.year" => "Stromverbrauch_Jahr",
"heating.power.consumption.unit" => "Stromverbrauch_Einheit",
"heating.power.consumption.dhw.day" => "Strom_WW_Tage",
"heating.power.consumption.dhw.dayValueReadAt" => "Strom_WW_Tage_Zeit",
"heating.power.consumption.dhw.week" => "Strom_WW_Wochen",
"heating.power.consumption.dhw.weekValueReadAt" => "Strom_WW_Wochen_Zeit",
"heating.power.consumption.dhw.month" => "Strom_WW_Monate",
"heating.power.consumption.dhw.monthValueReadAt" => "Strom_WW_Monate_Zeit",
"heating.power.consumption.dhw.year" => "Strom_WW_Jahre",
"heating.power.consumption.dhw.yearValueReadAt" => "Strom_WW_Jahre_Zeit",
"heating.power.consumption.dhw.unit" => "Strom_WW_Einheit",
"heating.power.consumption.heating.day" => "Strom_Heizung_Tage__kWh",
"heating.power.consumption.heating.dayValueReadAt" => "Strom_Heizung_Tage_Zeit",
"heating.power.consumption.heating.week" => "Strom_Heizung_Wochen__kWh",
"heating.power.consumption.heating.weekValueReadAt" => "Strom_Heizung_Wochen_Zeit",
"heating.power.consumption.heating.month" => "Strom_Heizung_Monate__kWh",
"heating.power.consumption.heating.monthValueReadAt"=> "Strom_Heizung_Monate_Zeit",
"heating.power.consumption.heating.year" => "Strom_Heizung_Jahre__kWh",
"heating.power.consumption.heating.yearValueReadAt" => "Strom_Heizung_Jahre_Zeit",
"heating.power.consumption.heating.unit" => "Strom_Heizung_Einheit",
"heating.power.consumption.total.day" => "Strom_Total_Tage__kWh",
"heating.power.consumption.total.dayValueReadAt" => "Strom_Total_Tage_Zeit",
"heating.power.consumption.total.week" => "Strom_Total_Wochen__kWh",
"heating.power.consumption.total.weekValueReadAt" => "Strom_Total_Wochen_Zeit",
"heating.power.consumption.total.month" => "Strom_Total_Monate__kWh",
"heating.power.consumption.total.monthValueReadAt" => "Strom_Total_Monate_Zeit",
"heating.power.consumption.total.year" => "Strom_Total_Jahre__kWh",
"heating.power.consumption.total.yearValueReadAt" => "Strom_Total_Jahre_Zeit",
"heating.power.consumption.total.unit" => "Strom_Total_Einheit",
"heating.power.production.current.status" => "Stromproduktion_aktueller_Status",
"heating.power.production.current.value" => "Stromproduktion",
"heating.power.production.demandCoverage.current.unit" => "Stromproduktion_Bedarfsabdeckung/Einheit",
"heating.power.production.demandCoverage.current.value" => "Stromproduktion_Bedarfsabdeckung",
"heating.power.production.demandCoverage.total.day" => "Stromproduktion_Bedarfsabdeckung_total/Tag",
"heating.power.production.demandCoverage.total.month" => "Stromproduktion_Bedarfsabdeckung_total/Monat",
"heating.power.production.demandCoverage.total.unit" => "Stromproduktion_Bedarfsabdeckung_total/Einheit",
"heating.power.production.demandCoverage.total.week" => "Stromproduktion_Bedarfsabdeckung_total/Woche",
"heating.power.production.demandCoverage.total.year" => "Stromproduktion_Bedarfsabdeckung_total/Jahr",
"heating.power.production.day" => "Stromproduktion_Total/Tag",
"heating.power.production.month" => "Stromproduktion_Total/Monat",
"heating.power.production.productionCoverage.current.unit" =>
"Stromproduktion_Produktionsabdeckung/Einheit",
"heating.power.production.productionCoverage.current.value" =>
"Stromproduktion_Produktionsabdeckung",
"heating.power.production.productionCoverage.total.day" =>
"Stromproduktion_Produktionsabdeckung_Total/Tag",
"heating.power.production.productionCoverage.total.month" =>
"Stromproduktion_Produktionsabdeckung_Total/Monat",
"heating.power.production.productionCoverage.total.unit" =>
"Stromproduktion_Produktionsabdeckung_Total/Einheit",
"heating.power.production.productionCoverage.total.week" =>
"Stromproduktion_Produktionsabdeckung_Total/Woche",
"heating.power.production.productionCoverage.total.year" =>
"Stromproduktion_Produktionsabdeckung_Total/Jahr",
"heating.power.production.unit" => "Stromproduktion_Total/Einheit",
"heating.power.production.week" => "Stromproduktion_Total/Woche",
"heating.power.production.year" => "Stromproduktion_Total/Jahr",
"heating.power.purchase.current.unit" => "Stromkauf/Einheit",
"heating.power.purchase.current.value" => "Stromkauf",
"heating.power.sold.current.unit" => "Stromverkauf/Einheit",
"heating.power.sold.current.value" => "Stromverkauf",
"heating.power.sold.day" => "Stromverkauf/Tag",
"heating.power.sold.month" => "Stromverkauf/Monat",
"heating.power.sold.unit" => "Stromverkauf/Einheit",
"heating.power.sold.week" => "Stromverkauf/Woche",
"heating.power.sold.year" => "Stromverkauf/Jahr",
"heating.sensors.pressure.supply.status" => "Drucksensor_Vorlauf_Status",
"heating.sensors.pressure.supply.unit" => "Drucksensor_Vorlauf/Einheit",
"heating.sensors.pressure.supply.value" => "Drucksensor_Vorlauf",
"heating.sensors.power.output.status" => "Sensor_Stromproduktion_Status",
"heating.sensors.power.output.value" => "Sensor_Stromproduktion",
"heating.sensors.temperature.outside.statusWired" => "Aussen_StatusWired",
"heating.sensors.temperature.outside.statusWireless" =>
"Aussen_StatusWireless",
"heating.service.timeBased.serviceDue" => "Service_faellig",
"heating.service.timeBased.serviceIntervalMonths" =>
"Service_Intervall_Monate",
"heating.service.timeBased.activeMonthSinceLastService" =>
"Service_Monate_aktiv_seit_letzten_Service",
"heating.service.timeBased.lastService" => "Service_Letzter",
"heating.service.burnerBased.serviceDue" =>
"Service_fällig_brennerbasiert",
"heating.service.burnerBased.serviceIntervalBurnerHours" =>
"Service_Intervall_Betriebsstunden",
"heating.service.burnerBased.activeBurnerHoursSinceLastService" =>
"Service_Betriebsstunden_seit_letzten",
"heating.service.burnerBased.lastService" =>
"Service_Letzter_brennerbasiert",
"heating.solar.active" => "Solar_aktiv",
"heating.solar.pumps.circuit.status" => "Solar_Pumpe_Status",
"heating.solar.rechargeSuppression.status" =>
"Solar_Aufladeunterdrueckung_Status",
"heating.solar.sensors.power.status" => "Solar_Sensor_Power_Status",
"heating.solar.sensors.power.value" => "Solar_Sensor_Power",
"heating.solar.sensors.temperature.collector.status" =>
"Solar_Sensor_Temperatur_Kollektor_Status",
"heating.solar.sensors.temperature.collector.value" =>
"Solar_Sensor_Temperatur_Kollektor",
"heating.solar.sensors.temperature.dhw.status" =>
"Solar_Sensor_Temperatur_WW_Status",
"heating.solar.sensors.temperature.dhw.value" =>
"Solar_Sensor_Temperatur_WW",
"heating.solar.statistics.hours" => "Solar_Sensor_Statistik_Stunden",
"heating.solar.power.cumulativeProduced.value" =>
"Solarproduktion_Gesamtertrag",
"heating.solar.power.production.month" => "Solarproduktion/Monat",
"heating.solar.power.production.day" => "Solarproduktion/Tag",
"heating.solar.power.production.unit" => "Solarproduktion/Einheit",
"heating.solar.power.production.week" => "Solarproduktion/Woche",
"heating.solar.power.production.year" => "Solarproduktion/Jahr"
};
#SVG for Kältkreislauf
our $vitoconnect_svg_kaeltekreislauf = q{
};
#####################################################################################################################
# Modul initialisieren und Namen zusätzlicher Funktionen bekannt geben
#####################################################################################################################
sub vitoconnect_Initialize {
my ($hash) = @_;
$hash->{DefFn} = \&vitoconnect_Define; # wird beim 'define' eines Gerätes aufgerufen
$hash->{UndefFn} = \&vitoconnect_Undef; # # wird beim Löschen einer Geräteinstanz aufgerufen
$hash->{DeleteFn} = \&vitoconnect_DeleteKeyValue;
$hash->{SetFn} = \&vitoconnect_Set; # set-Befehle
$hash->{GetFn} = \&vitoconnect_Get; # get-Befehle
$hash->{AttrFn} = \&vitoconnect_Attr; # Attribute setzen/ändern/löschen
# [RB-FIX-03] $hash->{ReadFn} = \&vitoconnect_Read; ENTFERNT.
# vitoconnect_Read existiert nicht und ReadFn wird für reine HTTP-Module
# nie aufgerufen (kein Filehandle $hash->{FD}). Toter Code.
$hash->{FW_detailFn} = \&vitoconnect_FW_detailFn;
#$hash->{FW_summaryFn} = \&vitoconnect_FW_detailFn;
$hash->{AttrList} =
"disable:0,1 "
. "vitoconnect_mappings:textField-long "
. "vitoconnect_translations:textField-long "
. "vitoconnect_mapping_roger:0,1 "
. "vitoconnect_raw_readings:0,1 " # Liefert nur die raw readings und verhindert das mappen wenn gesetzt
. "vitoconnect_disable_raw_readings:0,1 " # Wird ein mapping verwendet können die weiteren RAW Readings ausgeblendet werden
. "vitoconnect_gw_readings:0,1 " # Schreibt die GW readings als Reading ins Device
. "vitoconnect_actions_active:0,1 "
. "vitoconnect_device:0,1 " # Hier kann Device 0 oder 1 angesprochen worden, default ist 0 und ich habe keinen GW mit Device 1
. "vitoconnect_serial:textField-long " # Legt fest welcher Gateway abgefragt werden soll, wenn nicht gesetzt werden alle abgefragt
. "vitoconnect_installationID:textField-long " # Legt fest welche Installation abgefragt werden soll, muss zur serial passen
. "vitoconnect_timeout:selectnumbers,10,1.0,30,0,lin "
. "vitoconnect_showKaeltekreislauf:0,1 "
. $readingFnAttributes;
eval { FHEM::Meta::InitMod( __FILE__, $hash ) }; ## no critic 'eval'
return;
}
#####################################################################################################################
# wird beim 'define' eines Gerätes aufgerufen
#####################################################################################################################
sub vitoconnect_Define {
my ( $hash, $def ) = @_;
my $name = $hash->{NAME};
my $type = $hash->{TYPE};
my $params = {
hash => $hash,
name => $name,
type => $type,
notes => \%vNotesIntern,
useAPI => 0,
useSMUtils => 1,
useErrCodes => 0,
useCTZ => 0,
};
use version 0.77; our $VERSION = moduleVersion ($params); # Versionsinformationen setzen
delete $params->{hash};
my @param = split( '[ \t]+', $def );
if ( int(@param) < 5 ) {
return "too few parameters: "
. "define vitoconnect ";
}
$hash->{user} = $param[2];
$hash->{intervall} = $param[4];
$hash->{counter} = 0;
$hash->{timeout} = 15;
$hash->{".access_token"} = "";
$hash->{devices} = [];
$hash->{"Redirect_URI"} = $callback_uri;
my $isiwebpasswd = vitoconnect_ReadKeyValue($hash,"passwd"); # verschlüsseltes Kennwort auslesen
if ($isiwebpasswd eq "") { # Kennwort (noch) nicht gespeichert
my $err = vitoconnect_StoreKeyValue($hash,"passwd",$param[3]); # Kennwort verschlüsselt speichern
return $err if ($err);
}
else { # Kennwort schon gespeichert
Log3($name,3,$name." - Passwort war bereits gespeichert");
}
$hash->{apiKey} = vitoconnect_ReadKeyValue($hash,"apiKey"); # verschlüsselten apiKey auslesen
RemoveInternalTimer($hash); # Timer löschen, z.b. bei intervall change
InternalTimer(gettimeofday() + 10,"vitoconnect_GetUpdate",$hash); # nach 10s
return;
}
#####################################################################################################################
# wird beim Löschen einer Geräteinstanz aufgerufen
#####################################################################################################################
sub vitoconnect_Undef {
my ($hash,$arg ) = @_; # Übergabe-Parameter
RemoveInternalTimer($hash); # Timer löschen
return;
}
#####################################################################################################################
# Getter
#####################################################################################################################
sub vitoconnect_Get {
my ($hash,$name,$opt,@args ) = @_; # Übergabe-Parameter
return "get ".$name." needs at least one argument" unless (defined($opt) );
if ($opt =~ /^(html|ftui)$/) {
return vitoconnect_GetHtml($hash, @args);
}
elsif ($opt eq 'Select...') {
return "Select the action you want from the Drop-Down list";
}
my $getlist = "Unknown argument $opt, choose one of ".
"Select...:noArg ".
"html:noArg "
;
return $getlist;
}
#####################################################################################################################
# Html für ftui
#####################################################################################################################
sub vitoconnect_GetHtml {
my ($hash) = @_;
my $name = $hash->{NAME};
my $ret = "";
$ret .= vitoconnect_FW_detailFn("WEB", $name, "", {});
$ret .= "";
# SVG responsive machen
$ret =~ s/