Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. Bayrol Webportal

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    285

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Bayrol Webportal

Scheduled Pinned Locked Moved Visualisierung
100 Posts 14 Posters 18.2k Views 13 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • OliverIOO OliverIO

    @oliverio

    seltsam.
    habe jetzt die textdatei selbst mal getestet und da sind fehler drin.
    hier jetzt eine version die klappen müsste

    bayrol.txt

    NWHN Offline
    NWHN Offline
    NWH
    wrote on last edited by
    #69

    @oliverio leider nein.
    4328cae2-2be8-41c6-80f4-53258c1f71e2-image.png

    So sehen die besagten Zeilen aus.

    OliverIOO 1 Reply Last reply
    0
    • NWHN NWH

      @oliverio leider nein.
      4328cae2-2be8-41c6-80f4-53258c1f71e2-image.png

      So sehen die besagten Zeilen aus.

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      wrote on last edited by
      #70

      @nwh

      neuer versuch
      bayrol.txt

      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 Reply Last reply
      0
      • OliverIOO OliverIO

        @nwh

        neuer versuch
        bayrol.txt

        NWHN Offline
        NWHN Offline
        NWH
        wrote on last edited by
        #71

        @oliverio hat wieder nicht funktioniert.

        Wenn ich die Zeilen so abändere

        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;
        

        dann kommt nurmehr der Fehler.

        javascript.0	23:21:12.867	error	script.js.common.Pool.Byrol compile failed: at script.js.common.Pool.Byrol:109
        
        OliverIOO 1 Reply Last reply
        0
        • NWHN NWH

          @oliverio hat wieder nicht funktioniert.

          Wenn ich die Zeilen so abändere

          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;
          

          dann kommt nurmehr der Fehler.

          javascript.0	23:21:12.867	error	script.js.common.Pool.Byrol compile failed: at script.js.common.Pool.Byrol:109
          
          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          wrote on last edited by OliverIO
          #72

          @nwh
          du sollst nix abändern. du sollst nur deine login daten im skript eintragen

          ansonsten komm ich nicht mehr weiter.
          mit den anderen login-daten funktioniert es

          ich selbst hab bayrol nicht

          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 Reply Last reply
          0
          • NWHN Offline
            NWHN Offline
            NWH
            wrote on last edited by 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 Reply Last reply
            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
              wrote on last edited by
              #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 Reply Last reply
              0
              • OliverIOO OliverIO

                @nwh

                das ist nicht die letzte version des scripts

                NWHN Offline
                NWHN Offline
                NWH
                wrote on last edited by 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 Reply Last reply
                0
                • Q Offline
                  Q Offline
                  qwertz
                  wrote on last edited by
                  #76

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

                  OliverIOO 1 Reply Last reply
                  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
                    wrote on last edited by
                    #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 Replies Last reply
                    0
                    • OliverIOO OliverIO

                      @qwertz

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

                      NWHN Offline
                      NWHN Offline
                      NWH
                      wrote on last edited by
                      #78

                      @oliverio
                      Jetzt funktioniert es :)

                      OliverIOO 1 Reply Last reply
                      0
                      • NWHN NWH

                        @oliverio
                        Jetzt funktioniert es :)

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        wrote on last edited by
                        #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 Reply Last reply
                        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
                          wrote on last edited by
                          #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 Reply Last reply
                          0
                          • OliverIOO OliverIO

                            @qwertz

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

                            Q Offline
                            Q Offline
                            qwertz
                            wrote on last edited by
                            #81

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

                            H 1 Reply Last reply
                            0
                            • Q qwertz

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

                              H Offline
                              H Offline
                              hab83
                              wrote on last edited by 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 Reply Last reply
                              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
                                wrote on last edited by
                                #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 Reply Last reply
                                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
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  0
                                  • S Offline
                                    S Offline
                                    SegaPro
                                    wrote on last edited by
                                    #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 Reply Last reply
                                    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
                                      wrote on last edited by
                                      #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 Reply Last reply
                                      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
                                        wrote on last edited by
                                        #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 Reply Last reply
                                        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
                                          wrote on last edited by
                                          #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 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          577

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe