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. Visualisierung
  4. Bayrol Webportal

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Bayrol Webportal

Geplant Angeheftet Gesperrt Verschoben Visualisierung
100 Beiträge 14 Kommentatoren 16.4k Aufrufe 13 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.
  • NWHN Offline
    NWHN Offline
    NWH
    schrieb am zuletzt editiert von NWH
    #73

    @oliverio
    So ich depp, habe den falschen login eingegeben.

    jetzt ist er Richtig, allerdings kommt jetzt das.
    Er meckert jetzt mit "reading1"

    javascript.0	23:45:06.327	error	script.js.common.Pool.Byrol: TypeError: Cannot read properties of null (reading '1')
    javascript.0	23:45:06.327	error	at extractValues (script.js.common.Pool.Byrol:119:26)
    javascript.0	23:45:06.327	error	at getData (script.js.common.Pool.Byrol:99:13)
    javascript.0	23:45:06.327	error	at main (script.js.common.Pool.Byrol:19:14)
    

    Das kommt zuvor noch

    javascript.0	23:50:10.271	info	Stopping script script.js.common.Pool.Byrol
    javascript.0	23:52:46.677	info	Start JavaScript script.js.common.Pool.Byrol (Javascript/js)
    javascript.0	23:52:46.687	info	script.js.common.Pool.Byrol: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
    javascript.0	23:52:47.669	info	script.js.common.Pool.Byrol: <div><div class="gapp_"></div><div class="tab_data_link" onclick="document.location.href='device.php?c=26081'"><div class="gstat_warning"></div><div class="tab_box stat_warning"><span>pH&nbsp;[pH]</span><h1>7.20</h1></div><div class="tab_box stat_warning"><span>mV&nbsp;[mV]</span><h1>860</h1></div><div class="tab_box stat_warning"><span>T1&nbsp;[°C]</span><h1>27.1</h1></div><div class="tab_box "></div><div class="tab_info"><span>DGGB18461B23</span></br><span>PoolManager Chlor (Cl)</span></br><span>v221216-M1 (7.8.3)</span></br><span><a href="device.php?c=26081">Direct access</a></div></div></div>
    

    aber morgen weiter...

    OliverIOO 1 Antwort Letzte Antwort
    0
    • NWHN NWH

      @oliverio
      So ich depp, habe den falschen login eingegeben.

      jetzt ist er Richtig, allerdings kommt jetzt das.
      Er meckert jetzt mit "reading1"

      javascript.0	23:45:06.327	error	script.js.common.Pool.Byrol: TypeError: Cannot read properties of null (reading '1')
      javascript.0	23:45:06.327	error	at extractValues (script.js.common.Pool.Byrol:119:26)
      javascript.0	23:45:06.327	error	at getData (script.js.common.Pool.Byrol:99:13)
      javascript.0	23:45:06.327	error	at main (script.js.common.Pool.Byrol:19:14)
      

      Das kommt zuvor noch

      javascript.0	23:50:10.271	info	Stopping script script.js.common.Pool.Byrol
      javascript.0	23:52:46.677	info	Start JavaScript script.js.common.Pool.Byrol (Javascript/js)
      javascript.0	23:52:46.687	info	script.js.common.Pool.Byrol: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
      javascript.0	23:52:47.669	info	script.js.common.Pool.Byrol: <div><div class="gapp_"></div><div class="tab_data_link" onclick="document.location.href='device.php?c=26081'"><div class="gstat_warning"></div><div class="tab_box stat_warning"><span>pH&nbsp;[pH]</span><h1>7.20</h1></div><div class="tab_box stat_warning"><span>mV&nbsp;[mV]</span><h1>860</h1></div><div class="tab_box stat_warning"><span>T1&nbsp;[°C]</span><h1>27.1</h1></div><div class="tab_box "></div><div class="tab_info"><span>DGGB18461B23</span></br><span>PoolManager Chlor (Cl)</span></br><span>v221216-M1 (7.8.3)</span></br><span><a href="device.php?c=26081">Direct access</a></div></div></div>
      

      aber morgen weiter...

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #74

      @nwh

      das ist nicht die letzte version des scripts

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      NWHN 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @nwh

        das ist nicht die letzte version des scripts

        NWHN Offline
        NWHN Offline
        NWH
        schrieb am zuletzt editiert von NWH
        #75

        @oliverio Guten Morgen

        Das ist die letzte Version:

        javascript.0	07:31:23.019	error	script.js.common.Pool.Byrol: TypeError: Cannot read properties of null (reading '1')
        javascript.0	07:31:23.019	error	at extractValues (script.js.common.Pool.Byrol:115:26)
        javascript.0	07:31:23.019	error	at getData (script.js.common.Pool.Byrol:96:13)
        javascript.0	07:31:23.019	error	at main (script.js.common.Pool.Byrol:19:14)
        

        Das wären noch die Meldungen vom debug:

        
        javascript.0
        2024-06-25 07:29:45.191	error	at main (script.js.common.Pool.Byrol:19:14)
        javascript.0
        2024-06-25 07:29:45.191	error	at processTicksAndRejections (node:internal/process/task_queues:95:5
        javascript.0
        2024-06-25 07:29:45.191	error	at getData (script.js.common.Pool.Byrol:96:13)
        javascript.0
        2024-06-25 07:29:45.191	error	at extractValues (script.js.common.Pool.Byrol:115:26)
        javascript.0
        2024-06-25 07:29:45.191	error	script.js.common.Pool.Byrol: TypeError: Cannot read properties of null (reading '1')
        javascript.0
        2024-06-25 07:29:43.819	info	script.js.common.Pool.Byrol: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
        javascript.0
        2024-06-25 07:29:43.810	info	Start JavaScript script.js.common.Pool.Byrol (Javascript/js)
        
        1 Antwort Letzte Antwort
        0
        • Q Offline
          Q Offline
          qwertz
          schrieb am zuletzt editiert von
          #76

          Hat einer von den Skriptbastlern github und kann das Script dort einstellen ?
          Das ist ja unnötig Ärger hier.

          OliverIOO 1 Antwort Letzte Antwort
          0
          • Q qwertz

            Hat einer von den Skriptbastlern github und kann das Script dort einstellen ?
            Das ist ja unnötig Ärger hier.

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #77

            @qwertz

            https://github.com/oweitman/diverse-iobroker-scripts/tree/main/bayrol

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            NWHN Q 2 Antworten Letzte Antwort
            0
            • OliverIOO OliverIO

              @qwertz

              https://github.com/oweitman/diverse-iobroker-scripts/tree/main/bayrol

              NWHN Offline
              NWHN Offline
              NWH
              schrieb am zuletzt editiert von
              #78

              @oliverio
              Jetzt funktioniert es :)

              OliverIOO 1 Antwort Letzte Antwort
              0
              • NWHN NWH

                @oliverio
                Jetzt funktioniert es :)

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von
                #79

                @nwh

                wenn ihr wollt, könnt ihr eure Erfahrungen hier auch nochmal schreiben

                https://forum.iobroker.net/topic/73975/problem-mit-backslash-im-codeblock

                scheint sich bisher nix getan zu haben

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                P 1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @nwh

                  wenn ihr wollt, könnt ihr eure Erfahrungen hier auch nochmal schreiben

                  https://forum.iobroker.net/topic/73975/problem-mit-backslash-im-codeblock

                  scheint sich bisher nix getan zu haben

                  P Offline
                  P Offline
                  psrelax
                  schrieb am zuletzt editiert von
                  #80

                  @oliverio

                  Ich habe diesen Thread hier völlig aus den Augen verloren und bin heute erst wieder darauf gestoßen.
                  Vielen Dank für die Mühe, das Script zu programmieren.

                  Ich habe es gleich ausprobiert. Es funktioniert bisher einwandfrei.
                  Die Werte wollte ich schon lange haben :-)
                  Vielen Dank dafür!!!!

                  1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

                    @qwertz

                    https://github.com/oweitman/diverse-iobroker-scripts/tree/main/bayrol

                    Q Offline
                    Q Offline
                    qwertz
                    schrieb am zuletzt editiert von
                    #81

                    @oliverio Perfekt ! Danke ! Habe meine TXT weiter oben gelöscht und auf github verwiesen.

                    H 1 Antwort Letzte Antwort
                    0
                    • Q qwertz

                      @oliverio Perfekt ! Danke ! Habe meine TXT weiter oben gelöscht und auf github verwiesen.

                      H Offline
                      H Offline
                      hab83
                      schrieb am zuletzt editiert von hab83
                      #82

                      Hallo,

                      ich habe das Problem, dass Nachts nach Zwangstrennung meines Providers das Script einen Fehler ausgibt und danach nicht mehr läuft. Muss dann händisch das Script einmal stoppen und starten.
                      Kann man irgendwie diesen Fehler abfangen, damit das Script weiterläuft?
                      Folgende Fehlermeldung wird ausgegeben:

                      javascript.0	2024-07-13 15:41:06.119	error	at processTicksAndRejections (node:internal/process/task_queues:95:5)
                      javascript.0	2024-07-13 15:41:06.118	error	at getData (script.js.Bayrol:102:13)
                      javascript.0	2024-07-13 15:41:06.118	error	at extractValues (script.js.Bayrol:129:26)
                      javascript.0	2024-07-13 15:41:06.118	error	script.js.Bayrol: TypeError: Cannot read properties of null (reading '1')
                      

                      Edit:
                      Habe es jetzt mit einer try-catch Anweisung in der Funktion extractValues gelöst

                      M 1 Antwort Letzte Antwort
                      0
                      • H hab83

                        Hallo,

                        ich habe das Problem, dass Nachts nach Zwangstrennung meines Providers das Script einen Fehler ausgibt und danach nicht mehr läuft. Muss dann händisch das Script einmal stoppen und starten.
                        Kann man irgendwie diesen Fehler abfangen, damit das Script weiterläuft?
                        Folgende Fehlermeldung wird ausgegeben:

                        javascript.0	2024-07-13 15:41:06.119	error	at processTicksAndRejections (node:internal/process/task_queues:95:5)
                        javascript.0	2024-07-13 15:41:06.118	error	at getData (script.js.Bayrol:102:13)
                        javascript.0	2024-07-13 15:41:06.118	error	at extractValues (script.js.Bayrol:129:26)
                        javascript.0	2024-07-13 15:41:06.118	error	script.js.Bayrol: TypeError: Cannot read properties of null (reading '1')
                        

                        Edit:
                        Habe es jetzt mit einer try-catch Anweisung in der Funktion extractValues gelöst

                        M Offline
                        M Offline
                        mameier1234
                        schrieb am zuletzt editiert von
                        #83

                        @hab83
                        Bei mir war aktuell auch diese Meldung und seit gestern hat das Script gar keine Daten mehr abgerufen.

                        Dann habe ich in einem Browser mal die URL aus dem Script https://www.bayrol-poolaccess.de/webview/index.php direkt aufgerufen.. Da war ein Hinweis für Portugal und Frankreich, dass es ein Update gibt. Einmal die Checkbox "nicht mehr Anzeigen" bestätigt.. seitdem kommen wieder daten.

                        Grüße,

                        Martin

                        OliverIOO 1 Antwort Letzte Antwort
                        0
                        • M mameier1234

                          @hab83
                          Bei mir war aktuell auch diese Meldung und seit gestern hat das Script gar keine Daten mehr abgerufen.

                          Dann habe ich in einem Browser mal die URL aus dem Script https://www.bayrol-poolaccess.de/webview/index.php direkt aufgerufen.. Da war ein Hinweis für Portugal und Frankreich, dass es ein Update gibt. Einmal die Checkbox "nicht mehr Anzeigen" bestätigt.. seitdem kommen wieder daten.

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #84

                          @mameier1234

                          Ja, das ist das problematische beim scrapen.
                          Sobald sich der bildschirmaufbau nur minimal änder ist das Risiko da das es nicht mehr funktioniert

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            SegaPro
                            schrieb am zuletzt editiert von
                            #85

                            Hallo zusammen,

                            danke für die tolle Arbeit. Ich habe das Script nun ein paar Tage eingesetzt und war sehr zufrieden.

                            Ich hatte nur das Problem, dass manchmal einfach keine Daten mehr kamen und ich das Script ca. 1 x am Tag neu starten musste. Am Internet kann es nicht liegen, denn ich habe keine Zwangstrennungen.

                            Ich hatte dann noch die Idee, dass es ja irgendwie sinnvoll wäre, wenn man die Abfrage ein bisschen an die Pumpenlaufzeit anpasst. Wenn diese nämlich nicht läuft, dann sind die Werte ja ohnehin verfälscht.

                            Daher jetzt eine Anpassung des Scripts, welches das Abfrageintervall nach dem Status der Filterpumpe richtet - zudem hoffe ich, dass damit auch die "Hänger" besser werden.

                            Und da ich ein ehrlicher Mensch bin: Ich kann nur sehr wenig JavaScript - das Script habe nicht ich gemacht, sondern es ist ein Produkt einer KI. Ich habe das originale Script verwendet und der KI halt noch mitgeteilt, was meine Probleme sind und wie ich es gerne hätte.

                            Ohne die tolle Vorarbeit hier wäre das nicht möglich gewesen, weil ich der KI sonst niemals hätte sagen können, was ich eigentlich will. Dafür ein großes Dankeschön!!!

                            In Zeile "91" müsst ihr noch den Datenpunkt zur Abfrage des Zustandes der Pumpe eintragen. Bei mir ist es ein openknx-Pfad. Zur besseren Auffindbarkeit, habe ich "openknx.blabla" geschrieben. Und natürlich oben eure Logindaten nicht vergessen.

                            const fetch = require('node-fetch');
                            
                            let user = "USERNAME (Mailadresse)";
                            let password = "PASSWORT";
                            let dpPH = "0_userdata.0.bayrol.ph";
                            let dpMV = "0_userdata.0.bayrol.mv";
                            let dpCC = "0_userdata.0.bayrol.cc";
                            let requesttimeRunning = 30 * 1000; // 30 Sekunden
                            let requesttimeIdle = 15 * 60 * 1000; // 15 Minuten
                            
                            const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                            
                            let intervalID;
                            
                            async function main() {
                                console.log('Starte das Bayrol-Datenabfrage-Skript...');
                                let sessionid = await getSession();
                                let cid = await login(user, password, sessionid);
                            
                                if (cid) {
                                    console.log('Prüfe den Status der Filterpumpe...');
                                    checkFilterPumpStatus(sessionid, cid);
                                }
                            }
                            
                            async function getSession() {
                                try {
                                    const response = await fetch("https://www.bayrol-poolaccess.de/webview/index.php", {
                                        headers: {
                                            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                            "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                            "cache-control": "no-cache",
                                            "pragma": "no-cache",
                                            "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                            "sec-ch-ua-mobile": "?0",
                                            "sec-ch-ua-platform": "\"Windows\"",
                                            "sec-fetch-dest": "document",
                                            "sec-fetch-mode": "navigate",
                                            "sec-fetch-site": "none",
                                            "sec-fetch-user": "?1",
                                            "upgrade-insecure-requests": "1",
                                            "User-Agent": useragent
                                        },
                                        method: "GET"
                                    });
                                    let headers = await response.headers;
                                    console.log(`Session-ID erhalten: ${getSessionId(headers.get("set-cookie"))}`);
                                    return getSessionId(headers.get("set-cookie"));
                                } catch (error) {
                                    console.error(`Fehler beim Abrufen der Session-ID: ${error.message}`);
                                }
                            }
                            
                            async function login(user, password, sessionid) {
                                try {
                                    let body = `username=${encodeURIComponent(user)}&password=${encodeURIComponent(password)}&login=Anmelden`;
                                    const response = await fetch("https://www.bayrol-poolaccess.de/webview/p/login.php?r=reg", {
                                        headers: {
                                            "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                            "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                            "cache-control": "no-cache",
                                            "content-type": "application/x-www-form-urlencoded",
                                            "pragma": "no-cache",
                                            "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                            "sec-ch-ua-mobile": "?0",
                                            "sec-ch-ua-platform": "\"Windows\"",
                                            "sec-fetch-dest": "document",
                                            "sec-fetch-mode": "navigate",
                                            "sec-fetch-site": "same-origin",
                                            "sec-fetch-user": "?1",
                                            "upgrade-insecure-requests": "1",
                                            "cookie": `PHPSESSID=${sessionid}`,
                                            "Referer": "https://www.bayrol-poolaccess.de/webview/p/login.php",
                                            "Referrer-Policy": "strict-origin-when-cross-origin",
                                            "User-Agent": useragent
                                        },
                                        body: body,
                                        method: "POST"
                                    });
                                    let text = await response.text();
                                    console.log(`CID erhalten: ${getCID(text)}`);
                                    return getCID(text);
                                } catch (error) {
                                    console.error(`Fehler beim Login: ${error.message}`);
                                }
                            }
                            
                            async function checkFilterPumpStatus(sessionid, cid) {
                                try {
                                    // Hier prüfen wir den Status der Filterpumpe
                                    const filterPumpStatus = getState('openknx.blabla').val;
                                    console.log(`Status der Filterpumpe: ${filterPumpStatus}`);
                            
                                    if (filterPumpStatus) {
                                        console.log('Filterpumpe läuft. Abfrageintervall auf 30 Sekunden gesetzt.');
                                        if (intervalID) clearInterval(intervalID);
                                        intervalID = setInterval(() => getData(sessionid, cid), requesttimeRunning);
                                    } else {
                                        console.log('Filterpumpe nicht aktiv. Abfrageintervall auf 15 Minuten gesetzt.');
                                        if (intervalID) clearInterval(intervalID);
                                        intervalID = setInterval(() => {
                                            checkFilterPumpStatus(sessionid, cid); // Erneut den Status prüfen
                                        }, requesttimeIdle);
                                    }
                                } catch (error) {
                                    console.error(`Fehler beim Prüfen des Filterpumpenstatus: ${error.message}`);
                                }
                            }
                            
                            async function getData(sessionid, cid) {
                                try {
                                    const response = await fetch(`https://www.bayrol-poolaccess.de/webview/getdata.php?cid=${cid}`, {
                                        headers: {
                                            "accept": "*/*",
                                            "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                            "cache-control": "no-cache",
                                            "pragma": "no-cache",
                                            "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                            "sec-ch-ua-mobile": "?0",
                                            "sec-ch-ua-platform": "\"Windows\"",
                                            "sec-fetch-dest": "empty",
                                            "sec-fetch-mode": "cors",
                                            "sec-fetch-site": "same-origin",
                                            "x-requested-with": "XMLHttpRequest",
                                            "cookie": `PHPSESSID=${sessionid}`,
                                            "Referer": "https://www.bayrol-poolaccess.de/webview/p/plants.php",
                                            "Referrer-Policy": "strict-origin-when-cross-origin",
                                            "User-Agent": useragent
                                        },
                                        method: "GET"
                                    });
                                    let text = await response.text();
                                    let data = extractValues(text);
                                    writeData(data);
                                    console.log(`Daten erfolgreich abgerufen: ${JSON.stringify(data)}`);
                                } catch (error) {
                                    console.error(`Fehler beim Abrufen der Daten: ${error.message}`);
                                }
                            }
                            
                            function writeData(obj) {
                                try {
                                    setState(dpCC, parseFloat(obj.CC));
                                    setState(dpMV, parseFloat(obj.MV));
                                    setState(dpPH, parseFloat(obj.PH));
                                } catch (error) {
                                    console.error(`Fehler beim Schreiben der Daten: ${error.message}`);
                                }
                            }
                            
                            function extractValues(text) {
                                const regexPH = /\[pH\]<\/span><h1>([\d\.]+)<\/h1>/gm;
                                const regexMV = /\[mV\]<\/span><h1>([\d\.]+)<\/h1>/gm;
                                const regexCC = /\[°C\]<\/span><h1>([\d\.]+)<\/h1>/gm;
                                let data = {
                                    PH: (regexPH.exec(text) || [])[1] || 0,
                                    MV: (regexMV.exec(text) || [])[1] || 0,
                                    CC: (regexCC.exec(text) || [])[1] || 0,
                                };
                                return data;
                            }
                            
                            function getSessionId(setcookie) {
                                const match = setcookie.match(/PHPSESSID=([^;]+)/);
                                return match ? match[1] : '';
                            }
                            
                            function getCID(html) {
                                const match = html.match(/var clients = \[(\d+)\];/);
                                return match ? match[1] : null;
                            }
                            
                            // Start des Scripts
                            main();
                            
                            

                            Ich hoffe, es hilft dem einen oder anderen. :)

                            OliverIOO 1 Antwort Letzte Antwort
                            0
                            • S SegaPro

                              Hallo zusammen,

                              danke für die tolle Arbeit. Ich habe das Script nun ein paar Tage eingesetzt und war sehr zufrieden.

                              Ich hatte nur das Problem, dass manchmal einfach keine Daten mehr kamen und ich das Script ca. 1 x am Tag neu starten musste. Am Internet kann es nicht liegen, denn ich habe keine Zwangstrennungen.

                              Ich hatte dann noch die Idee, dass es ja irgendwie sinnvoll wäre, wenn man die Abfrage ein bisschen an die Pumpenlaufzeit anpasst. Wenn diese nämlich nicht läuft, dann sind die Werte ja ohnehin verfälscht.

                              Daher jetzt eine Anpassung des Scripts, welches das Abfrageintervall nach dem Status der Filterpumpe richtet - zudem hoffe ich, dass damit auch die "Hänger" besser werden.

                              Und da ich ein ehrlicher Mensch bin: Ich kann nur sehr wenig JavaScript - das Script habe nicht ich gemacht, sondern es ist ein Produkt einer KI. Ich habe das originale Script verwendet und der KI halt noch mitgeteilt, was meine Probleme sind und wie ich es gerne hätte.

                              Ohne die tolle Vorarbeit hier wäre das nicht möglich gewesen, weil ich der KI sonst niemals hätte sagen können, was ich eigentlich will. Dafür ein großes Dankeschön!!!

                              In Zeile "91" müsst ihr noch den Datenpunkt zur Abfrage des Zustandes der Pumpe eintragen. Bei mir ist es ein openknx-Pfad. Zur besseren Auffindbarkeit, habe ich "openknx.blabla" geschrieben. Und natürlich oben eure Logindaten nicht vergessen.

                              const fetch = require('node-fetch');
                              
                              let user = "USERNAME (Mailadresse)";
                              let password = "PASSWORT";
                              let dpPH = "0_userdata.0.bayrol.ph";
                              let dpMV = "0_userdata.0.bayrol.mv";
                              let dpCC = "0_userdata.0.bayrol.cc";
                              let requesttimeRunning = 30 * 1000; // 30 Sekunden
                              let requesttimeIdle = 15 * 60 * 1000; // 15 Minuten
                              
                              const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
                              
                              let intervalID;
                              
                              async function main() {
                                  console.log('Starte das Bayrol-Datenabfrage-Skript...');
                                  let sessionid = await getSession();
                                  let cid = await login(user, password, sessionid);
                              
                                  if (cid) {
                                      console.log('Prüfe den Status der Filterpumpe...');
                                      checkFilterPumpStatus(sessionid, cid);
                                  }
                              }
                              
                              async function getSession() {
                                  try {
                                      const response = await fetch("https://www.bayrol-poolaccess.de/webview/index.php", {
                                          headers: {
                                              "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                              "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                              "cache-control": "no-cache",
                                              "pragma": "no-cache",
                                              "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                              "sec-ch-ua-mobile": "?0",
                                              "sec-ch-ua-platform": "\"Windows\"",
                                              "sec-fetch-dest": "document",
                                              "sec-fetch-mode": "navigate",
                                              "sec-fetch-site": "none",
                                              "sec-fetch-user": "?1",
                                              "upgrade-insecure-requests": "1",
                                              "User-Agent": useragent
                                          },
                                          method: "GET"
                                      });
                                      let headers = await response.headers;
                                      console.log(`Session-ID erhalten: ${getSessionId(headers.get("set-cookie"))}`);
                                      return getSessionId(headers.get("set-cookie"));
                                  } catch (error) {
                                      console.error(`Fehler beim Abrufen der Session-ID: ${error.message}`);
                                  }
                              }
                              
                              async function login(user, password, sessionid) {
                                  try {
                                      let body = `username=${encodeURIComponent(user)}&password=${encodeURIComponent(password)}&login=Anmelden`;
                                      const response = await fetch("https://www.bayrol-poolaccess.de/webview/p/login.php?r=reg", {
                                          headers: {
                                              "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                                              "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                              "cache-control": "no-cache",
                                              "content-type": "application/x-www-form-urlencoded",
                                              "pragma": "no-cache",
                                              "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                              "sec-ch-ua-mobile": "?0",
                                              "sec-ch-ua-platform": "\"Windows\"",
                                              "sec-fetch-dest": "document",
                                              "sec-fetch-mode": "navigate",
                                              "sec-fetch-site": "same-origin",
                                              "sec-fetch-user": "?1",
                                              "upgrade-insecure-requests": "1",
                                              "cookie": `PHPSESSID=${sessionid}`,
                                              "Referer": "https://www.bayrol-poolaccess.de/webview/p/login.php",
                                              "Referrer-Policy": "strict-origin-when-cross-origin",
                                              "User-Agent": useragent
                                          },
                                          body: body,
                                          method: "POST"
                                      });
                                      let text = await response.text();
                                      console.log(`CID erhalten: ${getCID(text)}`);
                                      return getCID(text);
                                  } catch (error) {
                                      console.error(`Fehler beim Login: ${error.message}`);
                                  }
                              }
                              
                              async function checkFilterPumpStatus(sessionid, cid) {
                                  try {
                                      // Hier prüfen wir den Status der Filterpumpe
                                      const filterPumpStatus = getState('openknx.blabla').val;
                                      console.log(`Status der Filterpumpe: ${filterPumpStatus}`);
                              
                                      if (filterPumpStatus) {
                                          console.log('Filterpumpe läuft. Abfrageintervall auf 30 Sekunden gesetzt.');
                                          if (intervalID) clearInterval(intervalID);
                                          intervalID = setInterval(() => getData(sessionid, cid), requesttimeRunning);
                                      } else {
                                          console.log('Filterpumpe nicht aktiv. Abfrageintervall auf 15 Minuten gesetzt.');
                                          if (intervalID) clearInterval(intervalID);
                                          intervalID = setInterval(() => {
                                              checkFilterPumpStatus(sessionid, cid); // Erneut den Status prüfen
                                          }, requesttimeIdle);
                                      }
                                  } catch (error) {
                                      console.error(`Fehler beim Prüfen des Filterpumpenstatus: ${error.message}`);
                                  }
                              }
                              
                              async function getData(sessionid, cid) {
                                  try {
                                      const response = await fetch(`https://www.bayrol-poolaccess.de/webview/getdata.php?cid=${cid}`, {
                                          headers: {
                                              "accept": "*/*",
                                              "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                              "cache-control": "no-cache",
                                              "pragma": "no-cache",
                                              "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                                              "sec-ch-ua-mobile": "?0",
                                              "sec-ch-ua-platform": "\"Windows\"",
                                              "sec-fetch-dest": "empty",
                                              "sec-fetch-mode": "cors",
                                              "sec-fetch-site": "same-origin",
                                              "x-requested-with": "XMLHttpRequest",
                                              "cookie": `PHPSESSID=${sessionid}`,
                                              "Referer": "https://www.bayrol-poolaccess.de/webview/p/plants.php",
                                              "Referrer-Policy": "strict-origin-when-cross-origin",
                                              "User-Agent": useragent
                                          },
                                          method: "GET"
                                      });
                                      let text = await response.text();
                                      let data = extractValues(text);
                                      writeData(data);
                                      console.log(`Daten erfolgreich abgerufen: ${JSON.stringify(data)}`);
                                  } catch (error) {
                                      console.error(`Fehler beim Abrufen der Daten: ${error.message}`);
                                  }
                              }
                              
                              function writeData(obj) {
                                  try {
                                      setState(dpCC, parseFloat(obj.CC));
                                      setState(dpMV, parseFloat(obj.MV));
                                      setState(dpPH, parseFloat(obj.PH));
                                  } catch (error) {
                                      console.error(`Fehler beim Schreiben der Daten: ${error.message}`);
                                  }
                              }
                              
                              function extractValues(text) {
                                  const regexPH = /\[pH\]<\/span><h1>([\d\.]+)<\/h1>/gm;
                                  const regexMV = /\[mV\]<\/span><h1>([\d\.]+)<\/h1>/gm;
                                  const regexCC = /\[°C\]<\/span><h1>([\d\.]+)<\/h1>/gm;
                                  let data = {
                                      PH: (regexPH.exec(text) || [])[1] || 0,
                                      MV: (regexMV.exec(text) || [])[1] || 0,
                                      CC: (regexCC.exec(text) || [])[1] || 0,
                                  };
                                  return data;
                              }
                              
                              function getSessionId(setcookie) {
                                  const match = setcookie.match(/PHPSESSID=([^;]+)/);
                                  return match ? match[1] : '';
                              }
                              
                              function getCID(html) {
                                  const match = html.match(/var clients = \[(\d+)\];/);
                                  return match ? match[1] : null;
                              }
                              
                              // Start des Scripts
                              main();
                              
                              

                              Ich hoffe, es hilft dem einen oder anderen. :)

                              OliverIOO Offline
                              OliverIOO Offline
                              OliverIO
                              schrieb am zuletzt editiert von
                              #86

                              @segapro

                              in zeile 174 siehst du main()
                              das ruft die eigentliche funktion auf.
                              wenn du sonst nix machst, führt das skript alles genau einmal aus
                              und ist dann beendet.

                              um es nur zu bestimmten zeiten oder rythmus auszuführen
                              musst du das main innerhalb einer schedule funktion aufrufen
                              https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#schedule
                              mit schedule kannst du dann als pattern die zeitpunkte definieren.
                              wenn dann noch ein pumpenstatus dazukommt, dann da mit if auch noch den datenpunk abfragen und mit dem gewünschten status abgleichen.

                              im link siehst du ein einfaches beispiel.
                              wenn du nicht weiterkommst, dann kannst du hier nochmal fragen

                              Meine Adapter und Widgets
                              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                              Links im Profil

                              S 1 Antwort Letzte Antwort
                              0
                              • OliverIOO OliverIO

                                @segapro

                                in zeile 174 siehst du main()
                                das ruft die eigentliche funktion auf.
                                wenn du sonst nix machst, führt das skript alles genau einmal aus
                                und ist dann beendet.

                                um es nur zu bestimmten zeiten oder rythmus auszuführen
                                musst du das main innerhalb einer schedule funktion aufrufen
                                https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#schedule
                                mit schedule kannst du dann als pattern die zeitpunkte definieren.
                                wenn dann noch ein pumpenstatus dazukommt, dann da mit if auch noch den datenpunk abfragen und mit dem gewünschten status abgleichen.

                                im link siehst du ein einfaches beispiel.
                                wenn du nicht weiterkommst, dann kannst du hier nochmal fragen

                                S Offline
                                S Offline
                                SegaPro
                                schrieb am zuletzt editiert von
                                #87

                                @oliverio
                                Das wundert mich jetzt ein bisschen, denn ich habe es nun seit einigen Stunden erfolgreich laufen.

                                Also ich zweifele keinesfalls deine Einwände an - du bist mir um Welten überlegen - und Dein Einwand ist sogar duch mich nachvollziehbar.

                                Allerdings läuft das Script:

                                javascript.0	18:11:14.976	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"732","CC":"50.0"}
                                javascript.0	18:11:44.974	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"732","CC":"50.0"}
                                javascript.0	18:12:14.975	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"730","CC":"50.0"}
                                javascript.0	18:12:44.976	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"730","CC":"50.0"}
                                javascript.0	18:13:15.091	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"730","CC":"50.0"}
                                

                                Pünktlich alle 30 Sekunden wird abgerufen.

                                Einen Temperaturfühler habe ich nicht - daher stehen da 50°C

                                Viele Grüße

                                OliverIOO 1 Antwort Letzte Antwort
                                0
                                • S SegaPro

                                  @oliverio
                                  Das wundert mich jetzt ein bisschen, denn ich habe es nun seit einigen Stunden erfolgreich laufen.

                                  Also ich zweifele keinesfalls deine Einwände an - du bist mir um Welten überlegen - und Dein Einwand ist sogar duch mich nachvollziehbar.

                                  Allerdings läuft das Script:

                                  javascript.0	18:11:14.976	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"732","CC":"50.0"}
                                  javascript.0	18:11:44.974	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"732","CC":"50.0"}
                                  javascript.0	18:12:14.975	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"730","CC":"50.0"}
                                  javascript.0	18:12:44.976	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"730","CC":"50.0"}
                                  javascript.0	18:13:15.091	info	script.js.Pool.Bayrol: Daten erfolgreich abgerufen: {"PH":"7.4","MV":"730","CC":"50.0"}
                                  

                                  Pünktlich alle 30 Sekunden wird abgerufen.

                                  Einen Temperaturfühler habe ich nicht - daher stehen da 50°C

                                  Viele Grüße

                                  OliverIOO Offline
                                  OliverIOO Offline
                                  OliverIO
                                  schrieb am zuletzt editiert von
                                  #88

                                  @segapro
                                  ja,
                                  da in der Mitte ist ja ein Intervall
                                  Die Zeiten sind eigentlich okay. Wenn das Gerät nicht immer antwortet, könntest du die Zeiten mal etwas vergrößern.
                                  ansonsten sieht doch alles gut aus?

                                  Meine Adapter und Widgets
                                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                  Links im Profil

                                  H 1 Antwort Letzte Antwort
                                  0
                                  • OliverIOO OliverIO

                                    @segapro
                                    ja,
                                    da in der Mitte ist ja ein Intervall
                                    Die Zeiten sind eigentlich okay. Wenn das Gerät nicht immer antwortet, könntest du die Zeiten mal etwas vergrößern.
                                    ansonsten sieht doch alles gut aus?

                                    H Offline
                                    H Offline
                                    Habedere
                                    schrieb am zuletzt editiert von
                                    #89

                                    Hallo,
                                    hat jemand schon mal die Abfrage lokal über die iP versucht?
                                    Versuche auch meine Bayrol Relax Power (ohne Umwege) in iObroker zu bekommen.

                                    Mfg

                                    Q 1 Antwort Letzte Antwort
                                    0
                                    • H Habedere

                                      Hallo,
                                      hat jemand schon mal die Abfrage lokal über die iP versucht?
                                      Versuche auch meine Bayrol Relax Power (ohne Umwege) in iObroker zu bekommen.

                                      Mfg

                                      Q Offline
                                      Q Offline
                                      qwertz
                                      schrieb am zuletzt editiert von
                                      #90

                                      @habedere Ich habe die Bayrol automatic ph/cl. Ich wüsste nicht, dass die eine lokale API hat. Deine Bayrol Relax Power ist jedoch ein gänzlich anderes Gerät.

                                      H 1 Antwort Letzte Antwort
                                      0
                                      • Q qwertz

                                        @habedere Ich habe die Bayrol automatic ph/cl. Ich wüsste nicht, dass die eine lokale API hat. Deine Bayrol Relax Power ist jedoch ein gänzlich anderes Gerät.

                                        H Offline
                                        H Offline
                                        Habedere
                                        schrieb am zuletzt editiert von
                                        #91

                                        @qwertz
                                        Wusste ich auch nicht - klappt aber…

                                        844d6355-bd36-4f96-8bc2-0f97194a5608-image.png

                                        Q 1 Antwort Letzte Antwort
                                        0
                                        • H Habedere

                                          @qwertz
                                          Wusste ich auch nicht - klappt aber…

                                          844d6355-bd36-4f96-8bc2-0f97194a5608-image.png

                                          Q Offline
                                          Q Offline
                                          qwertz
                                          schrieb am zuletzt editiert von
                                          #92

                                          @habedere wie ist denn die url dieser seite ?

                                          OliverIOO Q H 3 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          790

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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