Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Skript] Atlantic Wärmepumpe über Cozytouch abfragen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    315

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

[Skript] Atlantic Wärmepumpe über Cozytouch abfragen

Geplant Angeheftet Gesperrt Verschoben JavaScript
107 Beiträge 17 Kommentatoren 20.3k Aufrufe 18 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • O oxident

    @t-maas Würdest Du die auch (gegen Aufpreis natürlich) fertig bestücken?

    T Offline
    T Offline
    t.maas
    schrieb am zuletzt editiert von
    #86

    @oxident ja das kann ich machen......esp musst du dir selber besorgen,alle anderen Sachen habe ich noch.
    Ich löte dir einen Sockel für den ESP auf die Platine dann brauchst du den nur aufstecken.
    ich möchte dann 25€ dafür haben.

    1 Antwort Letzte Antwort
    1
    • T t.maas

      Guten Morgen,ich habe es tatsächlich geschaft,Platine zusammengelötet,Software instaliert und alles angeschlossen.
      Alles funktioniert bestens,Daten werden im HA angezeigt und das tolle an der Sache ist das man den Heizstab seperat ansteuern kann,ich hab noch 2 Platinen über,wer bedarf hat dem versende ich für 8€ so ein Teil

      HerbertH Offline
      HerbertH Offline
      Herbert
      schrieb am zuletzt editiert von
      #87

      @t-maas
      super, dass das läuft. Was hast du denn für eine Anlage?
      Vielleicht kannst du das ja auf github dem Entwickler sagen, dann kann er das in die Liste mit kompatiblen Geräten aufnehmen.
      ... da gibt es übrigens gerade wieder ein Update...

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        Sputnik24
        schrieb am zuletzt editiert von
        #88

        @oxident
        Danke für das Update des Scripts. Ich bekomme allerdings folgende Fehlermeldung:

        script.js.Home.BwwPCloud: Fehler bei getTokenAPI(): AxiosError: Request failed with status code 500

        O 2 Antworten Letzte Antwort
        0
        • S Sputnik24

          @oxident
          Danke für das Update des Scripts. Ich bekomme allerdings folgende Fehlermeldung:

          script.js.Home.BwwPCloud: Fehler bei getTokenAPI(): AxiosError: Request failed with status code 500

          O Offline
          O Offline
          oxident
          schrieb am zuletzt editiert von
          #89

          @sputnik24 Ja, ich leider auch. Die haben leider irgendwas geändert und im Moment funktionieren daher manche Abfragen nicht. Temperatur lesen/setzen sollte aber noch klappen.

          Muss dafür mal die neue App wieder mitsniffen und die neuen "Codes" finden ;-)

          1 Antwort Letzte Antwort
          1
          • S Sputnik24

            @oxident
            Danke für das Update des Scripts. Ich bekomme allerdings folgende Fehlermeldung:

            script.js.Home.BwwPCloud: Fehler bei getTokenAPI(): AxiosError: Request failed with status code 500

            O Offline
            O Offline
            oxident
            schrieb am zuletzt editiert von
            #90

            @sputnik24... ich sehe gerade, der Wasserverbrauch wird auch in der Cozytouch-App nicht mehr angezeigt. Vielleicht liegt es doch an deren Server. Mal abwarten!

            1 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              t.maas
              schrieb am zuletzt editiert von
              #91

              @herbert Moin ist eine Atlantic V4 die ist schon auf seiner Liste

              @herbert said in [Skript] Atlantic Wärmepumpe über Cozytouch abfragen:

              @t-maas
              super, dass das läuft. Was hast du denn für eine Anlage?
              Vielleicht kannst du das ja auf github dem Entwickler sagen, dann kann er das in die Liste mit kompatiblen Geräten aufnehmen.
              ... da gibt es übrigens gerade wieder ein Update...

              Moin ist eine Atlantic V4 die ist schon auf seiner Liste

              1 Antwort Letzte Antwort
              0
              • J Offline
                J Offline
                jaskome
                schrieb am zuletzt editiert von
                #92

                @oxident ich habe erst jetzt die cozytouch bridge gekauft und eingerichtet, allerdings bekomme ich nicht wirklich brauchbare Werte. Unter DHWP Actuator habe ich verschiedene states wie io.HeatPumpOperatingTimeState und io.DHWModeState usw. aber keine Werte wie Wassertemperatur. Ich habe auch die response debugged. Also da stehen wirklich nur die Werte über die im Skript iteriert wird um states anzulegen und zu setzen. Wie kriege ich die Wassertemperatur? Die Lufttemperatur am Auslass wäre auch toll. Die lässt sich wahrscheinlich aber nicht abrufen.
                Danke im voraus

                O 1 Antwort Letzte Antwort
                0
                • J jaskome

                  @oxident ich habe erst jetzt die cozytouch bridge gekauft und eingerichtet, allerdings bekomme ich nicht wirklich brauchbare Werte. Unter DHWP Actuator habe ich verschiedene states wie io.HeatPumpOperatingTimeState und io.DHWModeState usw. aber keine Werte wie Wassertemperatur. Ich habe auch die response debugged. Also da stehen wirklich nur die Werte über die im Skript iteriert wird um states anzulegen und zu setzen. Wie kriege ich die Wassertemperatur? Die Lufttemperatur am Auslass wäre auch toll. Die lässt sich wahrscheinlich aber nicht abrufen.
                  Danke im voraus

                  O Offline
                  O Offline
                  oxident
                  schrieb am zuletzt editiert von oxident
                  #93

                  @jaskome Im Moment basteln die da seit Wochen schon am Server herum und vieles klappt derzeit nicht (Wasserverbrauch und Boost z.B.)

                  Die Wassertemperatur sollte aber im DHWP Actuator-Ordner sichtbar sein!

                  Bei mir ist es irgendwas mit "MiddleWaterTemperature".

                  Luftauslass wird leider nicht übertragen.

                  J 1 Antwort Letzte Antwort
                  0
                  • O oxident

                    @jaskome Im Moment basteln die da seit Wochen schon am Server herum und vieles klappt derzeit nicht (Wasserverbrauch und Boost z.B.)

                    Die Wassertemperatur sollte aber im DHWP Actuator-Ordner sichtbar sein!

                    Bei mir ist es irgendwas mit "MiddleWaterTemperature".

                    Luftauslass wird leider nicht übertragen.

                    J Offline
                    J Offline
                    jung87
                    schrieb am zuletzt editiert von
                    #94

                    @oxident Hallo, habt ihr Momentan auch Probleme soll Werte über den IO Brocker zu ändern. Bekomme die ist Werte wie WW Temp usw noch angezeigt, aber kann nicht mehr ändern bzw. kann den Heizstab nicht mehr einschalten.
                    Habe auch noch ein Fehler im Log script.js.Warmwasser.Brauchwasserwärmepumpe: Fehler bei getTokenAPI(): AxiosError: Request failed with status code 503

                    Kann mir sagen, was man hier machen kann?

                    Gruß

                    O K 2 Antworten Letzte Antwort
                    0
                    • J jung87

                      @oxident Hallo, habt ihr Momentan auch Probleme soll Werte über den IO Brocker zu ändern. Bekomme die ist Werte wie WW Temp usw noch angezeigt, aber kann nicht mehr ändern bzw. kann den Heizstab nicht mehr einschalten.
                      Habe auch noch ein Fehler im Log script.js.Warmwasser.Brauchwasserwärmepumpe: Fehler bei getTokenAPI(): AxiosError: Request failed with status code 503

                      Kann mir sagen, was man hier machen kann?

                      Gruß

                      O Offline
                      O Offline
                      oxident
                      schrieb am zuletzt editiert von
                      #95

                      @jung87 Ja, leider ist das schon seit einiger Zeit sehr wackelig. Ich dachte erst, die lösen das kurzfristig, aber es scheint ein größeres Problem zu sein.
                      Kann auch sein, dass sie dabei sind, "externe Abfrager" aktiv herauszuschmeißen. Wieder so ein nerviges "Katz & Maus"-Spiel.

                      Tut mir leid, da wird man derzeit nix machen können.

                      1 Antwort Letzte Antwort
                      0
                      • J Offline
                        J Offline
                        j.Zimmermann
                        schrieb am zuletzt editiert von
                        #96

                        Heute wurde meine Evo2 mit 2.Wärmetauscher installiert.
                        Dazu hatte ich mir die Thermor Bridge 2 Cozytouch bei ManoMano für 94,93,- bestellt und war total verblüfft, das fast nichts gesteuert werden kann.
                        Vor Frust "github" und "Austria Evo2" gegoogelt und hier gelandet.
                        Respekt und danke für das sehr ausgiebige Script. Lief auf Anhieb und gibt die wichtigsten Daten aus und dadurch bleibt die Cozytouch doch noch hier.
                        Und wenn die Cosytouch noch mehr beschnitten wird wird die Hardware-Github-Lösung realisiert.
                        Vielen Dank für dein Engagement - Daumen hoch

                        O 1 Antwort Letzte Antwort
                        0
                        • J j.Zimmermann

                          Heute wurde meine Evo2 mit 2.Wärmetauscher installiert.
                          Dazu hatte ich mir die Thermor Bridge 2 Cozytouch bei ManoMano für 94,93,- bestellt und war total verblüfft, das fast nichts gesteuert werden kann.
                          Vor Frust "github" und "Austria Evo2" gegoogelt und hier gelandet.
                          Respekt und danke für das sehr ausgiebige Script. Lief auf Anhieb und gibt die wichtigsten Daten aus und dadurch bleibt die Cozytouch doch noch hier.
                          Und wenn die Cosytouch noch mehr beschnitten wird wird die Hardware-Github-Lösung realisiert.
                          Vielen Dank für dein Engagement - Daumen hoch

                          O Offline
                          O Offline
                          oxident
                          schrieb am zuletzt editiert von
                          #97

                          @j-zimmermann Danke für die Blumen ;-)
                          Ich kann aber wirklich jedem raten, sich das AquaMQTT-Board anzuschauen. Läuft wirklich super und ist dadurch auch zukunftssicher.

                          Wenn ich mir anschaue, wie krass die Cozytouch-Abfragen mittlerweile sind kann ich nur noch mit dem Kopf schütteln.

                          R 1 Antwort Letzte Antwort
                          0
                          • J Offline
                            J Offline
                            j.Zimmermann
                            schrieb am zuletzt editiert von j.Zimmermann
                            #98

                            Platinen erhalten und bestückt. AquaMQTT läuft bei mir im ioBroker.
                            Habe noch 4 Platinen übrig. Waren aber über 29€ inkl.Porto
                            Wenn jemand Bedarf hat, bitte per PN anschreiben.
                            LG Jörg

                            O M 2 Antworten Letzte Antwort
                            1
                            • J j.Zimmermann

                              Platinen erhalten und bestückt. AquaMQTT läuft bei mir im ioBroker.
                              Habe noch 4 Platinen übrig. Waren aber über 29€ inkl.Porto
                              Wenn jemand Bedarf hat, bitte per PN anschreiben.
                              LG Jörg

                              O Offline
                              O Offline
                              oxident
                              schrieb am zuletzt editiert von
                              #99

                              Kleiner Hinweis an alle nochmal: Passt beim OTA-Update darauf auf, die SSID wieder zu setzen. Sonst muss man die BWWP erst wieder aufschrauben.

                              Hat mir ein Bekannter erzählt :blush:

                              1 Antwort Letzte Antwort
                              0
                              • O oxident

                                WICHTIG: Derzeit gibt es große Probleme beim Server von Cozytouch. Ich weiß nicht, ob das Skript noch weiterentwickelt wird.
                                Daher rate ich allen, sich https://github.com/tspopp/AquaMQTT anzuschauen. Ist cloudfrei und läuft super!

                                Hallo!

                                Ich habe eine Skript geschrieben, welches die Werte einer Atlantic / Austria Email Brauchwasserwärmepumpe abfragt. Leider habe ich keine Möglichkeit gefunden, direkt mit der Wärmepumpe zu kommunizieren (io-homecontrol -> wie Velux KLF).

                                Daher klappt es nur in Verbindung mit der offiziellen Cozytouch-Bridge des Herstellers. Das Skript simuliert mehr oder weniger die App dieser Bridge.

                                Leider ist das alles sehr "verwurschtelt" da die Abfrage recht komplex ist, aber ich erhalte schon brauchbare Ergebnisse.

                                Bitte im nachfolgenden Skript Eure Zugangsdaten aus der App eintragen und einfach mal testen.

                                Folgendes müsstet Ihr anpassen:
                                username / password
                                dpRoot: Hier wird der Gerätebaum erstellt
                                dpSetTemp: Dies ist der DP mit dem ihr die Zieltemperatur vorgebt (also bitte selber anlegen)

                                Beim ersten Aufruf wird es noch Warnungen hageln. Das legt sich dann aber.

                                Da die Datenpunkte größtenteils generisch angelegt werden müsst ihr euch mal etwas durchkämpfen und brauchbare Details für euch selber herausfinden.

                                Oder aber hier nachfragen ;-)

                                UPDATE 25.05.2024: Axios anstelle Request verwenden - dadurch keine Warnungen mehr im Log

                                UPDATE 16.04.2024: Der Datenpunkt für die WW-Solltemperatur (standardmäßig 0_userdata.0.WW-Waermepumpe.WarmwasserSoll) wurde nicht angelegt.

                                UPDATE 28.10.2023: Es werden jetzt manche Datenpunkte auch mit den richtigen Einheiten angelegt. Das klappt aber leider nur, wenn die Datenpunkte noch nicht vorhanden sind. Im Zweifelsfall also bitte alle DP löschen und das Skript neustarten.

                                Bugs/Hinweise:

                                • Der für viele sicherlich interessante Datenpunkt core:V40WaterVolumeEstimationState (geschätzter Gesamtverbrauch Warmwasser in Liter) läuft bei 65536 über, d.h. er fängt dann wieder bei 0 an. Dies kann man aber abfangen, in dem man SourceAnalytix zur Auswertung mit Reset-Erkennung verwendet.
                                • Die PV-Überschussfunktion, also das manuelle Starten und Stoppen der Wärmepumpe, kann derzeit nicht via Skript gesteuert werden. Hier behelfe ich mir mit einem Shelly an dem SGReady-Kontakt. Der Heizstab kann jedoch mit dem Datenpunkt DHWBoostFull gesteuert werden.
                                • Für den aktuellen Stromverbrauch sind die DP io:PowerHeatElectricalState und io:PowerHeatPumpState interessant. Sie liefern den aktuellen Verbrauch in Watt. Der DP core:ElectricEnergyConsumptionState hingegen liefert den Gesamtverbrauch in Wh.
                                const dpRoot = "0_userdata.0.Atlantic";
                                const dpSetTemp = "0_userdata.0.WW-Waermepumpe.WarmwasserSoll";
                                const interval = 120; //sec
                                
                                
                                const username = "eMail-Adresse";
                                const password = "KENNWORT";
                                
                                // ------------- AB HIER NICHTS ÄNDERN ---------------- //
                                // v2.0 - Migration von Request zu Axios
                                // v1.0 - erstes Release
                                
                                const client_id = "ZThEMW5BM2h2djF0bmMxTXBvQTdHNXVENDZBYTo3aktaS1N3ZlVJNGRvaDdqRWZJVWRzR2VHNWth";
                                const client_id_api = "alkxU3pBcnYwdWk3cW91OVVGTHRyOFVTNmUwYTpjWkFmYVlMNzVfYTlfcThlMGI4Unk4akU4eWdh"; // Wasserverbrauch (Token)
                                const scope = "openid";
                                const grant_type = "password";
                                const token_url = "https://apis.groupe-atlantic.com/token";
                                const jwt_url = "https://apis.groupe-atlantic.com/magellan/accounts/jwt";
                                const overkiz_url = "https://ha110-1.overkiz.com/enduser-mobile-web/enduserAPI/";
                                
                                const atlantic_url = "https://apigam.groupe-atlantic.com:8243"; // Wasserverbrauch (über JWT)
                                
                                var access_token = "";
                                var access_token_api = ""; // Wasserverbrauch
                                var refresh_token = "";
                                
                                var id_token = "";
                                var token_type = "";
                                var expires_in = -1;
                                
                                var jwt = "";
                                var jwt_overkiz = "";
                                var session_cookie = "";
                                
                                var tokenRefreshTimer;
                                
                                var DHWP_URL = "";
                                
                                const axios = require('axios');
                                
                                function getToken() {
                                 
                                        createState(dpRoot + ".info.connection", 
                                                    false, 
                                                    {read: true, write: false,  type: "boolean", role: "indicator", def: false});
                                
                                
                                        axios.post(token_url, {
                                            scope: scope,
                                            username: "GA-PRIVATEPERSON/" + username,
                                            password: password,
                                            grant_type: grant_type
                                        }, {
                                            headers: { 
                                                "Authorization" : "Basic " + client_id,
                                                "Content-Type": "application/x-www-form-urlencoded"
                                                },
                                        })
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    var jsonObject = response.data;
                                                    access_token = jsonObject.access_token;
                                                    refresh_token = jsonObject.refresh_token;
                                                    id_token = jsonObject.id_token;
                                                    expires_in = parseInt(jsonObject.expires_in);
                                                    session_cookie = "";
                                                    jwt = "";
                                                    //log(access_token);
                                                    getJWT(); // -------->
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getToken(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getToken(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                        
                                        
                                 
                                }
                                
                                function getTokenApi() {
                                        // Wasserverbrauch
                                        axios.post(atlantic_url + "/token", {
                                            grant_type: "client_credentials"
                                        }, {
                                            headers: { 
                                                "Authorization" : "Basic " +  client_id_api,
                                                "Content-Type": "application/x-www-form-urlencoded"
                                                },
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    var jsonObject = response.data;
                                                    access_token_api = jsonObject.access_token;
                                                    getJWTOverkiz(); // -------->
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getTokenAPI(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getTokenAPI(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                }
                                
                                function getJWT() {
                                
                                        axios.get(jwt_url, {
                                            headers: { 
                                                "Authorization" : "Bearer " + access_token,
                                                "Content-Type": "application/json"
                                                },
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    //log(response);
                                                    jwt = response.data.replace('"', '');
                                                    //log(jwt);
                                                    getSessionCookie(); // ------>
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getJWT(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getJWT(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                 
                                }
                                
                                function getSessionCookie() {
                                        axios.post(overkiz_url + "login", {
                                            'jwt': jwt
                                            }, {
                                            headers: { 
                                                "charset": "UTF-8",
                                                "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0",
                                                "Content-Type": "application/x-www-form-urlencoded"
                                                },
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                
                                                    session_cookie = response.headers["set-cookie"][0];
                                                    //log(session_cookie);
                                                    session_cookie = session_cookie.substring(session_cookie.indexOf("JSESSIONID")+11);
                                                    session_cookie = session_cookie.substring(0, session_cookie.indexOf(";"));
                                
                                                    
                                
                                                    if(session_cookie!="") {
                                                        refreshStates(); // -------->
                                                    } else {
                                                        // Error!
                                                        log("Fehler bei getSessionCookie() - Cookie leer");
                                                        access_token = "";
                                                        refresh_token = "";
                                                        id_token = "";
                                                        expires_in = -1;
                                                        jwt = "";
                                                        session_cookie = "";
                                                    }
                                                    
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getSessionCookie(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getSessionCookie(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                    
                                       
                                        
                                 
                                }
                                
                                function refreshStates() {
                                
                                    axios.post(overkiz_url + "setup/devices/states/refresh", 
                                        null, 
                                        {
                                            headers: { 
                                                'Cookie': "JSESSIONID=" + session_cookie,
                                                "Content-Type": "application/json",
                                                "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                            }
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    getSetup(); // -------->
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getTokenAPI(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getTokenAPI(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                
                                
                                    
                                 
                                }
                                
                                function getSetup() {
                                 
                                        axios.get(overkiz_url + "setup", {
                                            headers: { 
                                                "Cookie" : "JSESSIONID=" + session_cookie,
                                                "Content-Type": "application/json"
                                                },
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    //log(response.data);
                                                    //log("getSetup ok");
                                                    if(getState(dpRoot + ".debug").val) setState(dpRoot + ".rawJson", response.data, true);
                                                    enumStates(response.data); 
                                                    getTokenApi(); // ------>
                                
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getSetup(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getSetup(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                    
                                       
                                 
                                }
                                
                                function enumStates(devTree) {
                                    
                                    
                                
                                    for(var iDev = 0; iDev < devTree["devices"].length; iDev++) {
                                        
                                        createState(dpRoot + "." + iDev, {name: devTree["devices"][iDev].label, type: "channel"});
                                
                                        createState(dpRoot + "." + iDev + ".enabled", 
                                                    devTree["devices"][iDev].enabled, 
                                                    {read: true, write: false,  type: "boolean", role: "state", name: devTree["devices"][iDev].label + " enabled", def: false});
                                        setState(dpRoot + "." + iDev + ".enabled", devTree["devices"][iDev].enabled, true);
                                
                                        createState(dpRoot + "." + iDev + ".available", 
                                                    devTree["devices"][iDev].available, 
                                                    {read: true, write: false,  type: "boolean", role: "state", name: devTree["devices"][iDev].label + " available", def: false});
                                        setState(dpRoot + "." + iDev + ".available", devTree["devices"][iDev].available, true);
                                
                                        createState(dpRoot + "." + iDev + ".oid", 
                                                    devTree["devices"][iDev].oid, 
                                                    {read: true, write: false,  type: "string", role: "state", name: devTree["devices"][iDev].label + " oid", def: ""});
                                        setState(dpRoot + "." + iDev + ".oid", devTree["devices"][iDev].oid, true);
                                
                                        createState(dpRoot + "." + iDev + ".url", 
                                                    devTree["devices"][iDev].deviceURL, 
                                                    {read: true, write: false,  type: "string", role: "state", name: devTree["devices"][iDev].label + " URL", def: ""});
                                        setState(dpRoot + "." + iDev + ".url", devTree["devices"][iDev].deviceURL, true);
                                
                                        createState(dpRoot + "." + iDev + ".uiClass", 
                                                    devTree["devices"][iDev].uiClass, 
                                                    {read: true, write: false,  type: "string", role: "state", name: devTree["devices"][iDev].label + " uiClass", def: ""});
                                        setState(dpRoot + "." + iDev + ".uiClass", devTree["devices"][iDev].uiClass, true);
                                
                                        if(devTree["devices"][iDev].uiClass=="WaterHeatingSystem") {
                                            DHWP_URL = devTree["devices"][iDev].deviceURL;
                                        }
                                
                                        
                                        
                                        if (typeof devTree["devices"][iDev].states != "undefined") {
                                            createState(dpRoot + "." + iDev + ".states", {type: "channel"});
                                
                                            for(var iDevState = 0; iDevState < devTree["devices"][iDev].states.length; iDevState++) {
                                
                                                if((devTree["devices"][iDev].states[iDevState].type == "1") || (devTree["devices"][iDev].states[iDevState].type == "2") || (devTree["devices"][iDev].states[iDevState].type == "3")) {
                                                    createDHWPstate(dpRoot + "." + iDev + ".states." + devTree["devices"][iDev].states[iDevState].name, devTree["devices"][iDev].states[iDevState].value, devTree["devices"][iDev].states[iDevState].type);
                                                    setState(dpRoot + "." + iDev + ".states." + devTree["devices"][iDev].states[iDevState].name, devTree["devices"][iDev].states[iDevState].value, true);
                                                }
                                
                                
                                            }
                                        }
                                        
                                
                                    }
                                     setState(dpRoot + ".info.connection", true, true);
                                     
                                }
                                
                                function getJWTOverkiz() {
                                        axios.post(overkiz_url + "enduser/jwt/createToken", 
                                        null, 
                                        {
                                            headers: { 
                                                'Cookie': "JSESSIONID=" + session_cookie,
                                                "Content-Type": "application/json",
                                                "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                            }
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    jwt_overkiz = response.data.jwt;
                                                    if(jwt_overkiz!="") {
                                                        //log("jwt overkiz ok");
                                                        getWaterConsumption();
                                                        // -------->
                                                    } else {
                                                        // Error!
                                                        access_token = "";
                                                        refresh_token = "";
                                                        id_token = "";
                                                        expires_in = -1;
                                                        jwt = "";
                                                        session_cookie = "";
                                                        jwt_overkiz = "";
                                                    }
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getJWTOverkiz(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getJWTOverkiz(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                    
                                 
                                }
                                
                                function getWaterConsumption() {
                                
                                        axios.post(atlantic_url + "/gam/wcfservice/devicedhwrest/GetWaterConsumption", 
                                        {
                                            'frequency': 1,
                                            'deviceURL': DHWP_URL.replace("/", "\/"),
                                            'jwtToken': jwt_overkiz
                                        }, 
                                        {
                                            headers: { 
                                                "Content-Type": "application/json",
                                                "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0",
                                                "Authorization" : "Bearer " + access_token_api,
                                                "Locale": "de_DE",
                                                //"UniqId": "648C91F2-CA6E-4870-AB47-40FF4A3C1D12",
                                                "UniqId": CreateGuid(),
                                                "Gfcuid": 3005,
                                                "Userid": username,
                                                "Platform": "ios 3.5.1 (3)"
                                            }
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    createState(dpRoot + ".consumption.current", 
                                                        response.data.waterConsumptionDetail[response.data.waterConsumptionDetail.length-1].litersConsumed, 
                                                        {read: true, write: false,  type: "number", role: "state", name: " Water consumption today", unit: "l", def: 0});
                                                    setState(dpRoot + ".consumption.current", response.data.waterConsumptionDetail[response.data.waterConsumptionDetail.length-1].litersConsumed, true);
                                
                                                    createState(dpRoot + ".consumption.previous", 
                                                        response.data.waterConsumptionDetail[response.data.waterConsumptionDetail.length-2].litersConsumed, 
                                                        {read: true, write: false,  type: "number", role: "state", name: " Water consumption yesterday", unit: "l", def: 0});
                                                    setState(dpRoot + ".consumption.previous", response.data.waterConsumptionDetail[response.data.waterConsumptionDetail.length-2].litersConsumed, true);
                                                        
                                                        if(!getState(dpSetTemp).ack) {
                                                            setTemperature(getState(dpSetTemp).val);
                                                        }
                                
                                                        if(!getState(dpRoot + ".DHWMode").ack) {
                                                            setDHWMode();
                                                        }
                                
                                
                                                        if(!getState(dpRoot + ".DHWSchedule").ack) {
                                                            setDHWSchedule();
                                                        }
                                
                                                        if(getState(dpRoot + ".fetchHistory").val) {
                                                            getHistory();
                                                        }
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getWaterConsumption(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getWaterConsumption(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                 
                                }
                                
                                function setTemperature(setTemp) {
                                        axios.post(overkiz_url + "exec/apply",
                                            {
                                                "label" : "Cozytouch iOS: 3.5.1 (3)",
                                                "actions" : [
                                                {
                                                    "commands" : [
                                                        {
                                                        "name" : "setTargetTemperature",
                                                        "parameters" : [
                                                            setTemp
                                                        ]
                                                        }
                                                    ],
                                                "deviceURL" : DHWP_URL.replace("/", "\/")
                                                }
                                                ]
                                            }, 
                                            {
                                                headers: { 
                                                    "Cookie" : "JSESSIONID=" + session_cookie,
                                                    "Content-Type": "application/json",
                                                    "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                }
                                            })
                                    
                                            .then(function (response) {
                                                    if(response.status==200) {
                                                        if(response.data.execId!="") {
                                                            setState(dpSetTemp, setTemp, true);
                                                        } else {
                                                            // Error!
                                                            log("Fehler bei setTemperature()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                            
                                                        }
                                                    } else {
                                                         // Error!
                                                            log("Fehler bei setTemperature()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                    }
                                                })
                                                .catch(function (error) {
                                                        // Error!
                                                        log("Fehler bei setTemperature()");
                                                        access_token = "";
                                                        refresh_token = "";
                                                        id_token = "";
                                                        expires_in = -1;
                                                        jwt = "";
                                                        session_cookie = "";
                                                        jwt_overkiz = "";
                                                });
                                }
                                
                                function setDHWMode() {
                                 
                                    /*
                                    "autoMode",
                                	"manualEcoActive",
                                	"manualEcoInactive"
                                    */
                                
                                    axios.post(overkiz_url + "exec/apply",
                                            {
                                                "label" : "Cozytouch iOS: 3.5.1 (3)",
                                                "actions" : [
                                                {
                                                    "commands" : [
                                                        {
                                                        "name" : "setDHWMode",
                                                        "parameters" : [
                                                            getState(dpRoot + ".DHWMode").val
                                                        ]
                                                        }
                                                    ],
                                                "deviceURL" : DHWP_URL.replace("/", "\/")
                                                }
                                                ]
                                            }, 
                                            {
                                                headers: { 
                                                    "Cookie" : "JSESSIONID=" + session_cookie,
                                                    "Content-Type": "application/json",
                                                    "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                }
                                            })
                                    
                                            .then(function (response) {
                                                    if(response.status==200) {
                                                        if(response.data.execId!="") {
                                                            setState(dpRoot + ".DHWMode", getState(dpRoot + ".DHWMode").val, true);
                                                        } else {
                                                            // Error!
                                                            log("Fehler bei setDHWMode()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                            
                                                        }
                                                    } else {
                                                         // Error!
                                                            log("Fehler bei setDHWMode()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                    }
                                                })
                                                .catch(function (error) {
                                                            log("Fehler bei setDHWMode()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                });
                                 
                                }
                                
                                function setDHWSchedule() {
                                 
                                    /*
                                    "pac24h_elec24h",
                                	"pacProg_elecProg"
                                    */
                                
                                    axios.post(overkiz_url + "exec/apply",
                                            {
                                                "label" : "Cozytouch iOS: 3.5.1 (3)",
                                                "actions" : [
                                                {
                                                    "commands" : [
                                                        {
                                                        "name" : "setOperatingRange",
                                                        "parameters" : [
                                                            getState(dpRoot + ".DHWSchedule").val
                                                        ]
                                                        }
                                                    ],
                                                "deviceURL" : DHWP_URL.replace("/", "\/")
                                                }
                                                ]
                                            }, 
                                            {
                                                headers: { 
                                                    "Cookie" : "JSESSIONID=" + session_cookie,
                                                    "Content-Type": "application/json",
                                                    "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                }
                                            })
                                    
                                            .then(function (response) {
                                                    if(response.status==200) {
                                                        if(response.data.execId!="") {
                                                            setState(dpRoot + ".DHWSchedule", getState(dpRoot + ".DHWSchedule").val, true);
                                                        } else {
                                                            // Error!
                                                            log("Fehler bei setDHWSchedule()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                            
                                                        }
                                                    } else {
                                                         // Error!
                                                            log("Fehler bei setDHWSchedule()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                    }
                                                })
                                                .catch(function (error) {
                                                            // Error!
                                                            log("Fehler bei setDHWSchedule()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                });
                                 
                                }
                                
                                function setDHWBooster() {
                                
                                        var boostDuration = 0;
                                
                                        if(getState(dpRoot + ".DHWBoostFull").val) {
                                            boostDuration = 2;
                                        }
                                        else {
                                            setOperatingMode(false, false);
                                            return; 
                                        }
                                
                                        axios.post(overkiz_url + "exec/apply",
                                            {
                                                "label" : "Cozytouch iOS: 3.5.1 (3)",
                                                "actions" : [
                                                {
                                                    "commands" : [
                                                        {
                                                        "name" : "setBoostModeDuration",
                                                        "parameters" : [
                                                            boostDuration
                                                        ]
                                                        }
                                                    ],
                                                "deviceURL" : DHWP_URL.replace("/", "\/")
                                                }
                                                ]
                                            }, 
                                            {
                                                headers: { 
                                                    "Cookie" : "JSESSIONID=" + session_cookie,
                                                    "Content-Type": "application/json",
                                                    "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                }
                                            })
                                    
                                            .then(function (response) {
                                                    if(response.status==200) {
                                                        if(response.data.execId!="") {
                                                            sleep(3000);
                                                            setOperatingMode(true, false);
                                                            
                                                            sleep(3000);
                                                            refreshBooster();
                                                            // -------->
                                                        } else {
                                                            // Error!
                                                            log("Fehler bei setDHWBooster()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                            
                                                        }
                                                    } else {
                                                         // Error!
                                                            log("Fehler bei setDHWBooster()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                    }
                                                })
                                                .catch(function (error) {
                                                            // Error!
                                                            log("Fehler bei setDHWBooster()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                });
                                 
                                }
                                
                                function refreshBooster() {
                                 
                                        
                                        axios.post(overkiz_url + "exec/apply",
                                            {
                                                "label" : "Cozytouch iOS: 3.5.1 (3)",
                                                "actions" : [
                                                {
                                                    "commands" : [
                                                        {
                                                        "name" : "refreshBoostModeDuration",
                                                        "parameters" : []
                                                        }
                                                    ],
                                                "deviceURL" : DHWP_URL.replace("/", "\/")
                                                }
                                                ]
                                            }, 
                                            {
                                                headers: { 
                                                    "Cookie" : "JSESSIONID=" + session_cookie,
                                                    "Content-Type": "application/json",
                                                    "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                }
                                            })
                                
                                       .then(function (response) {
                                                    if(response.status==200) {
                                                        if(response.data.execId!="") {
                                                            
                                                            // -------->
                                                        } else {
                                                            // Error!
                                                            log("Fehler bei refreshBooster()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                            
                                                        }
                                                    } else {
                                                         // Error!
                                                            log("Fehler bei refreshBooster()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                    }
                                                })
                                                .catch(function (error) {
                                                            // Error!
                                                            log("Fehler bei refreshBooster()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                });
                                 
                                }
                                
                                
                                function setOperatingMode(relaunch, absence) {
                                 
                                    
                                        
                                        
                                        var sRelaunch;
                                        var sAbsence;
                                
                                        if(relaunch) {
                                            sRelaunch = "on";
                                        } else {
                                            sRelaunch = "off";
                                        }
                                
                                        if(absence) {
                                            sAbsence = "on";
                                        } else {
                                            sAbsence = "off";
                                        }
                                        
                                        axios.post(overkiz_url + "exec/apply",
                                            {
                                                "label" : "Cozytouch iOS: 3.5.1 (3)",
                                                "actions" : [
                                                {
                                                    "commands" : [
                                                        {
                                                        "name" : "setCurrentOperatingMode",
                                                        "parameters" : [
                                                            {
                                                                "relaunch": sRelaunch,
                                							    "absence": sAbsence
                                                            }
                                                        ]
                                                        }
                                                    ],
                                                "deviceURL" : DHWP_URL.replace("/", "\/")
                                                }
                                                ]
                                            }, 
                                            {
                                                headers: { 
                                                    "Cookie" : "JSESSIONID=" + session_cookie,
                                                    "Content-Type": "application/json",
                                                    "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                }
                                            })
                                
                                       .then(function (response) {
                                                    if(response.status==200) {
                                                        if(response.data.execId!="") {
                                                            setState(dpRoot + ".DHWBoostFull", getState(dpRoot + ".DHWBoostFull").val, true);
                                                            sleep(3000);
                                                            refreshBooster();
                                                            // -------->
                                                        } else {
                                                            // Error!
                                                            log("Fehler bei setOperatingMode()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                            
                                                        }
                                                    } else {
                                                         // Error!
                                                            log("Fehler bei setOperatingMode()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                    }
                                                })
                                                .catch(function (error) {
                                                            // Error!
                                                            log("Fehler bei setOperatingMode()");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                });
                                 
                                }
                                
                                
                                function execOverkizCmd(cmd) {
                                 
                                    
                                        
                                        axios.post(overkiz_url + "exec/apply",
                                            {
                                                "label" : "Cozytouch iOS: 3.5.1 (3)",
                                                "actions" : [
                                                {
                                                    "commands" : [
                                                        {
                                                        "name" : cmd
                                                        }
                                                    ],
                                                "deviceURL" : DHWP_URL.replace("/", "\/")
                                                }
                                                ]
                                            }, 
                                            {
                                                headers: { 
                                                    "Cookie" : "JSESSIONID=" + session_cookie,
                                                    "Content-Type": "application/json",
                                                    "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                }
                                            })
                                
                                       .then(function (response) {
                                                    if(response.status==200) {
                                                        if(response.data.execId!="") {
                                                            if(cmd=="refreshWaterConsumption") getWaterConsumption(); // ------>
                                                        } else {
                                                            // Error!
                                                            log("Fehler bei execOverkizCmd(" + cmd + ")");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                            
                                                        }
                                                    } else {
                                                         // Error!
                                                            log("Fehler bei execOverkizCmd(" + cmd + ")");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                    }
                                                })
                                                .catch(function (error) {
                                                            // Error!
                                                            log("Fehler bei execOverkizCmd(" + cmd + ")");
                                                            access_token = "";
                                                            refresh_token = "";
                                                            id_token = "";
                                                            expires_in = -1;
                                                            jwt = "";
                                                            session_cookie = "";
                                                            jwt_overkiz = "";
                                                });
                                 
                                }
                                
                                function getHistory() {
                                 
                                        axios.get(overkiz_url + "history", {
                                            headers: { 
                                                "Cookie" : "JSESSIONID=" + session_cookie,
                                                "Content-Type": "application/json",
                                                "User-Agent": "Cozytouch/3 CFNetwork/1335.0.3 Darwin/21.6.0"
                                                },
                                        })
                                
                                            .then(function (response) {
                                                if(response.status==200) {
                                                    setState(dpRoot + ".HistoryJson", response.data, true);
                                                    setState(dpRoot + ".fetchHistory", false, true);
                                                } else {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getHistory(): " + response.status);
                                                    setState(dpRoot + ".info.connection", false, true);
                                                }
                                            })
                                            .catch(function (error) {
                                                    // Error!
                                                    access_token = "";
                                                    refresh_token = "";
                                                    id_token = "";
                                                    expires_in = -1;
                                                    jwt = "";
                                                    session_cookie = "";
                                                    log("Fehler bei getHistory(): " + error);
                                                    setState(dpRoot + ".info.connection", false, true);
                                            });
                                 
                                }
                                
                                function CreateGuid() {  
                                   function _p8(s) {  
                                      var p = (Math.random().toString(16)+"000000000").substr(2,8);  
                                      return s ? "-" + p.substr(0,4) + "-" + p.substr(4,4) : p ;  
                                   }  
                                   return _p8() + _p8(true) + _p8(true) + _p8();  
                                }
                                
                                function createDHWPstate(name, value, valType) {
                                    var stateSuffix = "";
                                
                                    
                                    // bekannte Attribute behandeln:
                                    if(name.endsWith("RSSILevelState")) {
                                        stateSuffix = "db";
                                    } else if (name.endsWith("TemperatureState")) {
                                        stateSuffix = "°C";
                                    } else if (name.endsWith("PowerHeatElectricalState")) {
                                        stateSuffix = "W";
                                    } else if (name.endsWith("PowerHeatPumpState")) {
                                        stateSuffix = "W";
                                    } else if (name.endsWith("V40WaterVolumeEstimationState")) {
                                        // Wasserbrauch insgesamt -> Überlauf bei 65536!
                                        stateSuffix = "l";
                                    }
                                    else if (name.endsWith("ElectricEnergyConsumptionState")) {
                                        // Stromverbrauch insgesamt
                                        stateSuffix = "Wh";
                                    }
                                
                                
                                    
                                    
                                
                                    switch (valType) {
                                        case 1:
                                            //console.log("1 " + name);
                                            if(existsObject(name)) {
                                
                                            } else {
                                                createState(name, value, {read: true, write: false,  type: "number", role: "state", name: name, unit: stateSuffix, def: 0});
                                            }
                                            break;
                                
                                        case 2:
                                            //console.log("2 " + name);
                                            if(existsObject(name)) {
                                
                                            } else {
                                                createState(name, value, {read: true, write: false,  type: "number", role: "state", name: name, unit: stateSuffix, def: 0});
                                            }
                                            break;
                                
                                        case 3:
                                            //console.log("3 " + name);
                                            if(existsObject(name)) {
                                
                                            } else {
                                                createState(name, value, {read: true, write: false,  type: "string", role: "state", name: name, unit: stateSuffix, def: ""});
                                            }
                                            break;
                                    }
                                
                                
                                
                                }
                                
                                
                                // --------------------------------------------------------------
                                
                                createState(dpRoot + ".fetchHistory", false, {
                                        name: dpRoot + ".fetchHistory",
                                        type: 'boolean',
                                        role: 'state',
                                        desc: 'Befehlsverlauf einmalig abrufen'
                                    });
                                
                                createState(dpRoot + ".forceUpdate", false, {
                                        name: dpRoot + ".forceUpdate",
                                        type: 'boolean',
                                        role: 'state',
                                        desc: 'erzwungenes einmaliges Aktualisieren der Werte'
                                    });
                                
                                createState(dpRoot + ".HistoryJson", "", {
                                        name: "History (JSON)",
                                        type: 'string',
                                        role: 'state',
                                        desc: 'Befehlsverlauf'
                                    });
                                
                                createState(dpRoot + ".DHWMode", "", {
                                        name: "DHW Operating mode",
                                        type: 'string',
                                        role: 'state',
                                        "states": {
                                            "autoMode": "Auto",
                                            "manualEcoActive": "ECO aktiv",
                                            "manualEcoInactive": "ECO inaktiv"
                                        },
                                        desc: 'Betriebsmodus'
                                    });
                                
                                createState(dpRoot + ".DHWSchedule", "", {
                                        name: "DHW Schedule",
                                        type: 'string',
                                        role: 'state',
                                        "states": {
                                            "pacProg_elecProg": "Zeitplanung",
                                            "pac24h_elec24h": "dauerhaft"
                                        },
                                        desc: 'Zeitplanung'
                                    });
                                
                                createState(dpRoot + ".DHWBoostFull", "", {
                                        name: "DHW Boost",
                                        type: 'boolean',
                                        role: 'state',
                                        desc: 'Heizstab zuschalten'
                                    });
                                
                                createState(dpRoot + ".debug", "", {
                                        name: "debug",
                                        type: 'boolean',
                                        role: 'state',
                                        desc: 'Serverantwort protokollieren'
                                    });
                                
                                createState(dpRoot + ".rawJSON", "", {
                                        name: "rawJSON",
                                        type: 'string',
                                        role: 'state',
                                        desc: 'Serverantwort'
                                    });
                                
                                createState(dpSetTemp, "", {
                                        name: "WW-Solltemperatur",
                                        type: 'number',
                                        role: 'state',
                                        unit: '°C',
                                        desc: 'Solltemperatur der Wärmepumpe'
                                    });
                                
                                setState(dpSetTemp, getState(dpSetTemp), true);
                                
                                getToken();
                                
                                tokenRefreshTimer = setInterval(async function () {
                                    // Token verfällt nach 60min
                                    access_token = "";
                                    access_token_api = "";
                                
                                    refresh_token = "";
                                    id_token = "";
                                    expires_in = -1;
                                    jwt = "";
                                    jwt_overkiz = "";
                                    session_cookie = "";
                                
                                    //log("Token nach Intervall verworfen.")
                                    getToken();
                                }, 600000);
                                
                                schedule('*/' + interval + ' * * * * *', function () {
                                    // regelmäßig Token und Zustand abfragen
                                    // access_token = ""; // Workaround...
                                    
                                    if(access_token != "") {
                                        getJWT();
                                    } else {
                                        getToken();
                                    }
                                    
                                });
                                
                                on({id: dpRoot + ".fetchHistory", change: 'ne'}, function(obj) {
                                    if(getState(dpRoot + ".fetchHistory").val) {
                                        if(session_cookie != "") {
                                            getHistory();
                                        }
                                    }
                                });
                                
                                on({id: dpRoot + ".forceUpdate", change: 'ne'}, function(obj) {
                                    if(getState(dpRoot + ".forceUpdate").val) {
                                        if(session_cookie != "") {
                                            execOverkizCmd("refreshMiddleWaterTemperature");
                                            execOverkizCmd("refreshDHWCapacity");
                                            execOverkizCmd("refreshWaterConsumption");
                                            
                                
                                            setState(dpRoot + ".forceUpdate", false);
                                        }
                                    }
                                });
                                
                                on({id: dpRoot + ".DHWMode", change: 'ne', ack: false}, function(obj) {
                                    
                                        if(session_cookie != "") {
                                            setDHWMode();
                                        }
                                    
                                    
                                });
                                
                                on({id: dpRoot + ".DHWSchedule", change: 'ne', ack: false}, function(obj) {
                                    
                                        if(session_cookie != "") {
                                            setDHWSchedule();
                                        }
                                    
                                    
                                });
                                
                                on({id: dpRoot + ".DHWBoostFull", change: 'ne', ack: false}, function(obj) {
                                    
                                        if(session_cookie != "") {
                                            setDHWBooster();
                                        }
                                    
                                    
                                });
                                
                                K Offline
                                K Offline
                                kombjuder
                                schrieb am zuletzt editiert von
                                #100

                                @oxident Kann jemand einem absoluten Anfänger mit IObroker sagen wie ich das Script einbinden muss?
                                Sorry, meine PC-Kenntnisse stammen aus einer Zeit als ein Komputer 3 kB Ram hatte.

                                1 Antwort Letzte Antwort
                                1
                                • J jung87

                                  @oxident Hallo, habt ihr Momentan auch Probleme soll Werte über den IO Brocker zu ändern. Bekomme die ist Werte wie WW Temp usw noch angezeigt, aber kann nicht mehr ändern bzw. kann den Heizstab nicht mehr einschalten.
                                  Habe auch noch ein Fehler im Log script.js.Warmwasser.Brauchwasserwärmepumpe: Fehler bei getTokenAPI(): AxiosError: Request failed with status code 503

                                  Kann mir sagen, was man hier machen kann?

                                  Gruß

                                  K Offline
                                  K Offline
                                  kombjuder
                                  schrieb am zuletzt editiert von
                                  #101

                                  @jung87 Ich habe den Fehler aktuell auch.
                                  Gibt's da eine Lösung oder bleibt nur warten?

                                  HerbertH 1 Antwort Letzte Antwort
                                  0
                                  • K kombjuder

                                    @jung87 Ich habe den Fehler aktuell auch.
                                    Gibt's da eine Lösung oder bleibt nur warten?

                                    HerbertH Offline
                                    HerbertH Offline
                                    Herbert
                                    schrieb am zuletzt editiert von
                                    #102

                                    @kombjuder
                                    Wenn du das aquamqtt Tool meinst, dann muss man die eigenen mqtt Daten und WLAN Daten in die Datei
                                    AquaMQTT/include/config/ExampleConfiguration.h
                                    eingeben und du dann selbst compilieren und hochladen.
                                    Das ganze ist eigentlich mehr für Home Assistent geeignet, aber es spricht eigentlich mit jedem mqtt Broker, also auch iobroker.

                                    K 1 Antwort Letzte Antwort
                                    0
                                    • HerbertH Herbert

                                      @kombjuder
                                      Wenn du das aquamqtt Tool meinst, dann muss man die eigenen mqtt Daten und WLAN Daten in die Datei
                                      AquaMQTT/include/config/ExampleConfiguration.h
                                      eingeben und du dann selbst compilieren und hochladen.
                                      Das ganze ist eigentlich mehr für Home Assistent geeignet, aber es spricht eigentlich mit jedem mqtt Broker, also auch iobroker.

                                      K Offline
                                      K Offline
                                      kombjuder
                                      schrieb am zuletzt editiert von
                                      #103

                                      @herbert Nein, ich meine das hier vorgestellte Script. Da werden die Daten aus der Cloud gelesen.

                                      1 Antwort Letzte Antwort
                                      0
                                      • O Offline
                                        O Offline
                                        oxident
                                        schrieb am zuletzt editiert von
                                        #104

                                        @kombjuder Sorry, mir ist derzeit keine Lösung bekannt. Mit der App scheint es wieder zu klappen, aber die haben den Code jetzt so dermaßen verkompliziert dass da im Moment niemand mehr durchsteigt.

                                        Hinzu kommt leider auch, dass ich jetzt AquaMQTT nutze und das Skript selber daher wohl nicht mehr weiterentwickeln kann.

                                        1 Antwort Letzte Antwort
                                        0
                                        • J j.Zimmermann

                                          Platinen erhalten und bestückt. AquaMQTT läuft bei mir im ioBroker.
                                          Habe noch 4 Platinen übrig. Waren aber über 29€ inkl.Porto
                                          Wenn jemand Bedarf hat, bitte per PN anschreiben.
                                          LG Jörg

                                          M Offline
                                          M Offline
                                          msch81
                                          schrieb am zuletzt editiert von
                                          #105

                                          @j-zimmermann
                                          Hallo,
                                          ich hätte Interesse an einer AquaMQTT, hast Du noch eine abzugeben?

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          517

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe