Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Einloggen auf Webseite und bedienen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Einloggen auf Webseite und bedienen

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      Int17 last edited by Int17

      Der Heizungsanbieter Wolf bietet seinen Kunden ein Portalzugang an, wo man die Daten (Benutzer & Fachmann) der Heizung anschauen und Parameter verändern kann. Hierzu gibt es im iobroker einen entsprechenden Adapter, der diese Daten lesen kann. Daten aus dem Fachmann-Menü werden leider nur aktualisiert, wenn man diese im Portal aufruft. Somit liest der Adapter solange alte Werte, bis man sich eingeloggt hat und das entsprechende Fachmann-Menü aufgerufen hat.
      Ich habe zwar dieses Problem bei Wolf gemeldet, denke aber nicht, dass man reagieren wird.
      Daher suche ich nach einer Lösung, dieses händische Vorgehen zu automatisieren. Das Script müsste sich:

      1. Anmelden auf https://www.wolf-smartset.com/
        klu_001.jpg

      2. Die Anlage öffnen:
        klu_002.jpg

      3. Das Fachmannkennwort (1111) eingeben:
        klu_003.jpg

      4. Nochmal unter Fachmann Heizgerät wählen:
        klu_004.jpg

      5. und hier Parameter HG wählen:
        klu_005.jpg

      klu_006.jpg

      Bei meiner Suche bin ich auf eine mögliche Lösung per request gestoßen, die abgeändert so aussieht, wobei new Buffer mittlerweile deprecated ist
      31e33726-8eaa-46ca-b932-1119d20a575e-grafik.png

      function loginto() {
          var request = require('request'),
              username = "xxxxxxx",
              password = "xxxxxx",
              url = 'https://www.wolf-smartset.com/',
              auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
      
          request({
                  url : url,
                  headers : {'Authorization' : auth}
              },
      
              function (error, response, body) {
                      log('error: ' + error);
                      log('response: ' + JSON.stringify(response));
                      log('body: ' + body);
              }
          );
      }
      loginto();
      

      Hier scheitere ich schon, weil die Webseite Cookies erlaubt haben will:
      klu_007.jpg

      Könnte bitte einer mit mehr Ahnung als ich (>0) bewerten, ob das überhaupt per request machbar ist und wenn ja, mich beim Script unterstützen. Die Zugangsdaten (Leseberechtigung) sind im Script zu finden.
      Die Nutzung des direkten Link https://www.wolf-smartset.com/index.html#/system/42321/Heizgerät/2 wird nicht zugelassen.

      Codierknecht OliverIO 4 Replies Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @Int17 last edited by

        @int17 sagte in Einloggen auf Webseite und bedienen:

        Hier scheitere ich schon, weil die Webseite Cookies erlaubt haben will

        Ich würde das nicht mehr mit "request" sondern mit "axios" machen.

        const axios = require('axios');
        axios.defaults.withCredentials = true; // force axios to use cookies
        axios.defaults.timeout = 5000; // set timeout for any request to 5 seconds
        
        1 Reply Last reply Reply Quote 1
        • Codierknecht
          Codierknecht Developer Most Active @Int17 last edited by

          @int17 sagte in Einloggen auf Webseite und bedienen:

          Ich habe zwar dieses Problem bei Wolf gemeldet, denke aber nicht, dass man reagieren wird.

          Hast Du denen etwas von einem ioBroker-Adapter erzählt?
          Würde mich dann jedenfalls nicht wundern, wenn der Adapter bald gar nicht mehr funktioniert, weil der Hersteller da zusätzliche Hürden einbaut oder z.B. bestimmte User-Agent komplett aussperrt.
          Machen die ganz gerne ...

          Der erste Weg sollte fast immer über ein Issue beim Adapter führen.

          Homoran I 2 Replies Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @Codierknecht last edited by Homoran

            @codierknecht sagte in Einloggen auf Webseite und bedienen:

            Würde mich dann jedenfalls nicht wundern, wenn der Adapter bald gar nicht mehr funktioniert, weil der Hersteller da zusätzliche Hürden einbaut oder z.B. bestimmte User-Agent komplett aussperrt.
            Machen die ganz gerne ...

            Der Adapter wurde damals in Zusammenarbeit mit Wolf entwickelt.
            Wenn ich das noch richtig im Kopf habe, hatte Wolf sogar einen Preis ausgeschrieben.

            https://forum.iobroker.net/post/305

            Codierknecht 1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @Homoran last edited by

              @homoran
              Das nenne ich mal richtig cool 👍

              Hab' nix gesagt. Bin schon wieder weg ...

              1 Reply Last reply Reply Quote 0
              • I
                Int17 @Codierknecht last edited by Int17

                @codierknecht
                Wir haben festgestellt, dass die Fachmannebene nur per Portal aktualisiert wird. Siehe Diskussion.
                Daher kann der Adapter gar nichts machen, da er nur die Daten lesen kann, die im das Portal zur Verfügung stellt.

                Codierknecht mcm1957 2 Replies Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @Int17 last edited by

                  @int17
                  OK, verstanden. Diese Diskussion kannte ich nicht.

                  Versuch mal, Deinen http-request mit axios abzusetzen.
                  Die Library "request" wird afaik nicht mehr weiterentwickelt.

                  1 Reply Last reply Reply Quote 1
                  • mcm1957
                    mcm1957 @Int17 last edited by

                    @int17 said in Einloggen auf Webseite und bedienen:

                    @codierknecht
                    Wir haben festgestellt, dass die Fachmannebene nur per Portal aktualisiert wird. Siehe Diskussion.
                    Daher kann der Adapter gar nichts machen, da er nur die Daten lesen kann, die im das Portal zur Verfügung stellt.

                    Das stimmt nur zu 50%.
                    WENN ein Einloggen mit Skript was bringt, dann kann das der Adapter genauso machen.
                    Nur als Randanmerkung.
                    Natürlich ist es sinnvoll, das Einloggen per Skript mal zu testen - wie es gehen könnte und obs was bringt. Dann aber bitte ale Feedback in eine Issue des Adapters gießen.

                    1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @Int17 last edited by OliverIO

                      @int17

                      die bibliotheken nutzen eigentlich alle nur die einfachen requests ohne schnickschnack. manche funktionen sind zwar mit drin, andere können erweitert werden.

                      speziell zu cookies. wenn man request/axios nutzt, dann können die browser cookies verwendet werden, bei node ist das automatisch erst mal nicht der fall, daher musst du die cookies selbst verwalten und empfangene cookies beim nächsten request auch wieder mitsenden.
                      hier ein beispiel. schau mal npm ob es für axios auch eine zusatzbibliothek gibt, die das für dich macht. axios/withCredentials funktioniert nur im browser, nicht unter node

                      https://www.npmjs.com/search?q=axios cookie

                      https://stackoverflow.com/questions/66219323/setting-a-cookie-from-a-previous-request-when-using-axios-in-a-lambda-function

                      anmerkung, ja requestjs ist deprecated. request hat allerdings die option jar eingebaut, die genau das macht.

                      1 Reply Last reply Reply Quote 0
                      • OliverIO
                        OliverIO @Int17 last edited by

                        @int17 sagte in Einloggen auf Webseite und bedienen:

                        wobei new Buffer mittlerweile deprecated ist

                        Die Lösung steht aber im Textfeld direkt mit dabei

                        use Buffer.from

                        @codierknecht sagte in Einloggen auf Webseite und bedienen:

                        axios.defaults.withCredentials = true;

                        das funktioniert nur wenn man axios im browser verwendet.
                        da wird der cookiespeicher des browsers verwendet.
                        Unter node geht das nicht. da benötigt man entweder eigenverwaltung oder ein cookiejar bibliothek

                        1 Reply Last reply Reply Quote 0
                        • I
                          Int17 last edited by

                          Wie geschrieben, ist Java absolutes Neuland für mich. Hoffte, dass jemand ein Beispiel hat, dass ich abändern/verwenden kann. Daher hatte ich die Credentials auch veröffentlich, falls jemand das selber probieren will.
                          Bei Durchforsten habe ich dieses Beispiel gefunden.
                          @mcm57 : Da hast du natürlich Recht, dass der Adapter das sinnvollerweise machen sollte.

                          OliverIO 1 Reply Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @Int17 last edited by OliverIO

                            @int17
                            deswegen schreibst du ja hier und wir antworten.
                            allerdings musst du deine Probleme konkret benennen.
                            Evtl löst es auch jemand für dich, aber im zweifel wirst du dich selbst durchbeissen müssen und viel lesen.

                            du hattest ja bereits eine Anfangslösung.
                            zum Thema buffer hatte ich dir geantwortet
                            zum Thema cookies, habe ich dir auch einen Hinweis gegeben.
                            ob du jetzt das "veraltete" request, bei der die cookieverwaltung eingebaut ist, nutzt
                            oder das neuere axios mit evtl zusätzlichen bibliotheken bleibt dir überlassen.
                            wenn dein kenntnisstand nicht so ist, würde ich dir request empfehlen.

                            1. nutzt das iobroker selbst noch
                            2. das ist eine ausgereifte bibliothek, sie nutzt halt callbacks, aber kann man durchaus benutzen
                            3. deine cookiebehandlung ist direkt eingebaut, du musst nur eine option auf true setzen
                            4. es gibt wirklich viele beispiele zu request
                            5. dokumentation mit beispiel mit aktivierten cookies, link für die markierung dürfte in chrome direkt funktionieren: https://github.com/request/request#examples:~:text=To use a custom cookie jar (instead of request’s global cookie jar)%2C set jar to an instance of request.jar() (either in defaults or options)

                            Für weitere Probleme frage hier gerne nach mit möglichst genauer Problembeschreibung.

                            Die einzelnen Requests entlang des einloggens und woher die angezeigten Daten kommen kann man ganz gut über die Web Developer Tools nachvollziehen. Im Browser F12 drücken

                            I 1 Reply Last reply Reply Quote 0
                            • I
                              Int17 @OliverIO last edited by

                              @oliverio Ok, danke.

                              I 1 Reply Last reply Reply Quote 0
                              • I
                                Int17 @Int17 last edited by Int17

                                Wie eingangs schon beschrieben, habe ich von Java Script keine Ahnung. Aus dem Bekanntenkreis konnte ich aber einem Webentwickler das Problem vorstellen. Der hat sich das angeschaut und erstmal festgestellt, dass die Wolf Smartset Seite ebenfalls die selbe API nutzt, um an die Daten zu kommen. Dann hat er mir ein Phyton Script gebaut, dass mit Selenium und Chrome als Browser, die gleichen Eingaben machen kann, als wenn man selber die Seite besuchen würde. Startet man das Py-Script, so wird nach einer kurzen Verweilzeit (time.sleep(15)) auf der Fachman/Heizung-Seite, der Verdichterwert aktualisiert und der iobroker Adapter bekommt das natürlich auch mit. Per Cron jetzt das Script in Intervallen zu starten bringt keinen Erfolg.

                                # -*- coding: utf-8 -*-
                                
                                import time
                                from selenium import webdriver
                                from selenium.common.exceptions import StaleElementReferenceException
                                from selenium.webdriver.common.by import By
                                from selenium.webdriver.chrome.options import Options
                                from selenium.webdriver.support.ui import WebDriverWait
                                from selenium.webdriver.support import expected_conditions as EC
                                
                                def safe_click(driver, by, value, timeout=10):
                                    try:
                                        element = WebDriverWait(driver, timeout).until(
                                            EC.element_to_be_clickable((by, value))
                                        )
                                        element.click()
                                    except StaleElementReferenceException:
                                        print("StaleElementReferenceException: Element nicht mehr im DOM. Wiederholen...")
                                        safe_click(driver, by, value, timeout)
                                
                                driver = webdriver.Chrome()
                                # eigener Token
                                driver.get("https://www.wolf-smartset.com/idsrv/Account/Login?ReturnUrl=%2Fidsrv%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dsmartset.web%26redirect_uri%3Dhttps%253A%252F%252Fwww.wolf-smartset.com%252Fsignin-callback.html%26response_type%3Dcode%26scope%3Dopenid%2520profile%2520api%2520role%26state%3Ddae24383364a6d5a44acb10197%26code_challenge%3DtxZ8TioCs_luMaLCqFVg7l2GKRt5aNFRT0BvLg%26code_challenge_method%3DS256%26response_mode%3Dquery%26lang%3Dde-DE")
                                
                                
                                driver.implicitly_wait(5)
                                # Benutzername
                                input_field = driver.find_element(by=By.ID, value="Input_Username")
                                input_field.send_keys("iobroker_klu")
                                # Kennwort 
                                password_field = driver.find_element(by=By.ID, value="Input_Password")
                                password_field.send_keys("<passwort>")
                                
                                safe_click(driver, By.CSS_SELECTOR, ".login-button")
                                safe_click(driver, By.ID, "link")
                                safe_click(driver, By.CSS_SELECTOR, ".k-grid-Öffnen")
                                safe_click(driver, By.CSS_SELECTOR, "#open-system-menu .k-last")
                                
                                driver.implicitly_wait(5)
                                expert_login = driver.find_element(by=By.ID, value="expert-login-view-passwd")
                                # Fachmann Passwort
                                expert_login.send_keys("1111")
                                
                                safe_click(driver, By.CSS_SELECTOR, "#expert-login-view [type=submit]")
                                
                                safe_click(driver, By.CSS_SELECTOR, "#open-system-menu_mn_active")
                                safe_click(driver, By.CSS_SELECTOR, "#open-system-menu_mn_active a")
                                
                                time.sleep(15)
                                
                                driver.quit()
                                

                                Ich verfolge dieses Problem nicht mehr, da sich mit ism7mqtt ein lokale und somit bessere Lösung ergeben hat. Falls das jemand unter Linux nachbauen will.

                                OliverIO 1 Reply Last reply Reply Quote 0
                                • OliverIO
                                  OliverIO @Int17 last edited by

                                  @int17

                                  Schluckt halt ne Menge Ressourcen, da versteckt ein kompletter Browser gestartet wird.
                                  Aber wenn es funkzioniert

                                  I 1 Reply Last reply Reply Quote 0
                                  • I
                                    Int17 @OliverIO last edited by Int17

                                    @oliverio
                                    Ja, da hast du natürlich Recht.
                                    Aber das Wolf das Problem lösen wird, sehe ich im Moment nicht. da die letzte Reaktion vom Support das war:
                                    Wir können Ihnen leider keine Auskunft geben da wir diese Funktion über Externe Anbindungsmöglichkeiten nicht vertreten.
                                    Zudem ist diese Lösung lokal und man ist von nichts abhängig.

                                    M 1 Reply Last reply Reply Quote 0
                                    • M
                                      musicowl @Int17 last edited by

                                      @int17

                                      @mimquadrat: Bist Du noch bei Wolf? Oder hast Du die Firma oder Rolle verlassen und bist raus ;-)? Wir bräuchten Deine Hilfe :-)!

                                      Viele Grüße,

                                      musicowl

                                      I 1 Reply Last reply Reply Quote 0
                                      • I
                                        Int17 @musicowl last edited by

                                        @musicowl
                                        18.12.23 Abschließende Aussage von Wolf
                                        ##>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                                        wie bereits erwähnt bitten wir keine Unterstützung von IoBroker dies ist eine 3 Anbietersoftware mit welcher wir in keiner Verbindung stehen und daher
                                        keine Unterstützung bitten.

                                        Ebenso wissen wir nicht wer hinter dem Namen mimquadrat steckt und ob besagt Person wirklich bei Wolf arbeitet / gearbeitet hat.

                                        Mit freundlichen Grüßen

                                        Mathies Jung
                                        K u n d e n s e r v i c e W O L F G m b H
                                        ##<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

                                        W 1 Reply Last reply Reply Quote 0
                                        • W
                                          Wch @Int17 last edited by

                                          Moin @all ✌🏼

                                          Seit 3tagen wird nun auch keinen Wärmemenge mehr zur Smartset-
                                          App übertragen. Weder Fachmann noch auf normaler Ebene. Statistik ebenfalls negativ.
                                          Hat noch jemand das gleiche Problem?
                                          Nach Neustart der Heizung werden die Werte einmalig hochgeladen, aber nicht mehr aktualisiert. Wat is denn da bloß los bei denen 🫣

                                          Grüße
                                          Tom

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          965
                                          Online

                                          31.7k
                                          Users

                                          79.8k
                                          Topics

                                          1.3m
                                          Posts

                                          7
                                          19
                                          989
                                          Loading More Posts
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          The ioBroker Community 2014-2023
                                          logo