Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Aqualink Pool Automation in iobroker integrieren

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Aqualink Pool Automation in iobroker integrieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Hexagon @Qlink last edited by Hexagon

      @qlink

      Besten Dank für die Info.
      Anhand dieser konnte ich per Javascript die Pool-Daten auslesen und im iobroker als object ablegen. Danach habe ich mit weiteren scripts die entsprechenden Daten ausgefiltert und diese ebenfalls in ein Object abgelegt.

      const axios = require('axios');
      // Daten für die POST-Anfrage
      const daten = {
          api_key: "EOOEMOW4YR6QNB11",
          email: "xxxxxxxxxxxx",
          password: "xxxxxxxxxxxx"
      };
      // Erste Anfrage zur Authentifizierung
      axios.post('https://prod.zodiac-io.com/users/v1/login', daten, {
          headers: {
              'Host': 'prod.zodiac-io.com',
              'accept': 'application/json',
              'Content-Type': 'application/json',
              'accept-encoding': 'gzip',
              'user-agent': 'okhttp/3.12.0'
          }
      }).then((response) => {
          setState('javascript.0.iAquaLink.IdToken', JSON.stringify(response.data), true);
          console.log('Daten erfolgreich in ioBroker gespeichert.');
          // Extrahieren des idTokens
          let jsonObject = response.data;
          let idToken = jsonObject.userPoolOAuth.IdToken;
          if (idToken) {
              console.log("idToken extrahiert:", idToken);
              setState('javascript.0.iAquaLink.IdToken_clean', idToken, true);
              // Zweite Anfrage unter Verwendung des idTokens
              const options = {
                  method: 'GET',
                  url: 'https://prod.zodiac-io.com/devices/v1/serialnumberxxxxxx/shadow',
                  headers: {
                      'Host': 'prod.zodiac-io.com',
                      'accept': 'application/json',
                      'authorization': idToken,
                      'accept-encoding': 'gzip',
                      'user-agent': 'okhttp/3.12.0'
                  }
              };
              return axios.request(options);
          } else {
              throw new Error("Kein idToken gefunden!");
          }
      }).then(response => {
          console.log(response.data);
          setState('0_userdata.0.Pool.Pooldata', response.data, true);
      }).catch(error => {
          console.error('Fehler:', error);
      });
      
      Negalein 1 Reply Last reply Reply Quote 0
      • Negalein
        Negalein Global Moderator @Hexagon last edited by

        @hexagon

        Hallo

        welchen Typ benötigen diese DP?

        javascript.0.iAquaLink.IdToken
        javascript.0.iAquaLink.IdToken_clean
        0_userdata.0.Pool.Pooldata

        H 1 Reply Last reply Reply Quote 0
        • H
          Hexagon @Negalein last edited by

          @negalein

          Alle DPs => Typ: "String" und Rolle: "State"
          Am besten alle DP in 0_userdata.0.xxxx vorab anlegen.

          Negalein 1 Reply Last reply Reply Quote 0
          • Negalein
            Negalein Global Moderator @Hexagon last edited by

            @hexagon

            ich bekomm einen Fehler.
            Ist nicht ersichtlich woher.

            javascript.0	14:59:13.580	info	Start JavaScript script.js.Pool.iAqualink (Javascript/js)
            javascript.0	14:59:13.589	info	registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
            javascript.0	14:59:14.322	error	Fehler:
            
            H 1 Reply Last reply Reply Quote 0
            • H
              Hexagon @Negalein last edited by

              @negalein

              Zeile 29: Richtige bzw. eigene Serien Nr. verwendet ?

              Negalein 1 Reply Last reply Reply Quote 0
              • Negalein
                Negalein Global Moderator @Hexagon last edited by

                @hexagon sagte in Aqualink Pool Automation in iobroker integrieren:

                Zeile 29: Richtige bzw. eigene Serien Nr. verwendet ?

                ahhhhh, übersehn

                jetzt kommen Daten, aber mit Warn.

                DP werden befüllt

                javascript.0	15:35:55.780	info	Start JavaScript script.js.Pool.iAqualink (Javascript/js)
                javascript.0	15:35:55.789	info	registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                javascript.0	15:35:56.600	info	Daten erfolgreich in ioBroker gespeichert.
                javascript.0	15:35:56.600	info	idToken extrahiert:
                javascript.0	15:35:56.886	info	
                {
                  state: {
                    reported: {
                      aws: [Object],
                      vr: 'V85E4',
                      vr_esp: 'V85E4',
                      equipment: [Object],
                      schedules: [Object]
                    }
                  },
                  deviceId: 'JT22008430',
                  ts: 1747056956
                }
                javascript.0	15:35:56.889	warn    at script.js.Pool.iAqualink:45:5
                
                H 1 Reply Last reply Reply Quote 0
                • H
                  Hexagon @Negalein last edited by Hexagon

                  @negalein

                  ok prima, jetzt kannst du mit entsprechenden Filterungen weitere Datenpunkte befüllen, je nachdem was du benötigst:

                  Beispiel für ORP Werte:

                  // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                  let sourceObject = "0_userdata.0.Pool.Pooldata";
                  // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                  let targetObject = "0_userdata.0.Pool.Pooldata_ORP";
                  // JSON-String aus ioBroker-Objekt abrufen
                  getState(sourceObject, function (err, state) {
                      if (err || !state || !state.val) {
                          console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                          return;
                      }
                      try {
                          // JSON-String in ein Objekt konvertieren
                          let jsonObject = JSON.parse(state.val);
                          
                          // `sns_2` extrahieren
                          let sns_2 = jsonObject.state.reported.equipment.swc_0.sns_2.value;
                          if (sns_2) {
                              console.log("sns_2 extrahiert:", sns_2);
                              // sns_2 in das neue ioBroker-Objekt speichern
                              setState(targetObject, sns_2, true);
                          } else {
                              console.log("Kein sns_2 gefunden!");
                          }
                      } catch (error) {
                          console.log("Fehler beim Parsen des JSON-Strings:", error);
                      }
                  });
                  
                  
                  Negalein 1 Reply Last reply Reply Quote 0
                  • Negalein
                    Negalein Global Moderator @Hexagon last edited by

                    @hexagon sagte in Aqualink Pool Automation in iobroker integrieren:

                    ok prima, jetzt kannst du mit entsprechenden Filterungen weitere Datenpunkte befüllen, je nachdem was du benötigst:

                    Danke

                    hast du auch noch für pH, Chlorination und Temp?

                    H 1 Reply Last reply Reply Quote 0
                    • H
                      Hexagon @Negalein last edited by Hexagon

                      @negalein

                      ORP Wert entspricht bereits dem Chlorinator

                      Für PH Wert ist es genau das gleiche nur der Sensor 1 => sns_1:
                      Die Kommastelle kannst du dann mit dem VIS Editor entsprechend setzen.

                      // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                      let sourceObject = "0_userdata.0.Pool.Pooldata";
                      // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                      let targetObject = "0_userdata.0.Pool.Pooldata_PH";
                      // JSON-String aus ioBroker-Objekt abrufen
                      getState(sourceObject, function (err, state) {
                          if (err || !state || !state.val) {
                              console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                              return;
                          }
                          try {
                              // JSON-String in ein Objekt konvertieren
                              let jsonObject = JSON.parse(state.val);
                              
                              // `sns_1` extrahieren
                              let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value;
                              if (sns_1) {
                                  console.log("sns_1 extrahiert:", sns_1);
                                  // sns_1 in das neue ioBroker-Objekt speichern
                                  setState(targetObject, sns_1, true);
                              } else {
                                  console.log("Kein sns_1 gefunden!");
                              }
                          } catch (error) {
                              console.log("Fehler beim Parsen des JSON-Strings:", error);
                          }
                      });
                      

                      Nach diesem Muster kannst du dir auch die Temp Werte bauen.

                      Negalein 1 Reply Last reply Reply Quote 0
                      • Negalein
                        Negalein Global Moderator @Hexagon last edited by

                        @hexagon sagte in Aqualink Pool Automation in iobroker integrieren:

                        ORP Wert entspricht bereits dem Chlorinator

                        schaut in der App so aus
                        166845d5-78e8-42a5-939f-3e2c67a6a0d2-image.png

                        Meinte Salzelektrolysegerät (Pumpe)

                        sns_3 ist dann die Temp?

                        oder wie finde ich das raus?

                        H 1 Reply Last reply Reply Quote 0
                        • H
                          Hexagon @Negalein last edited by Hexagon

                          @negalein

                          Schau dir die Werte im DP Pooldata an:
                          0_userdata.0.Pool.Pooldata

                          Dort sollten alle Daten ersichtlich sein:

                          Beispiel Temperatur:

                          "sns_3": {
                                      "sensor_type": "Water temp",
                                      "state": 1,
                                      "value": 25
                          
                          Negalein 3 Replies Last reply Reply Quote 0
                          • Negalein
                            Negalein Global Moderator @Hexagon last edited by

                            @hexagon sagte in Aqualink Pool Automation in iobroker integrieren:

                            Dort sollten alle Daten ersichtlich sein:

                            ahhh, ich war blind. hab nur die ersten paar zeilen gesehn.

                            und die gewünschten pack ich alle in das Script von dir?

                            1 Reply Last reply Reply Quote 0
                            • Negalein
                              Negalein Global Moderator @Hexagon last edited by

                              @hexagon

                              die Pumpe scheint so auf:

                                        "filter_pump": {
                                          "state": 1,
                                          "type": 1
                                        },
                              

                              Binde ich die dann so ein?

                              // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                              let sourceObject = "0_userdata.0.Pool.Pooldata";
                              // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                              let targetObject = "0_userdata.0.Pool.Pooldata_Pumpe";
                              // JSON-String aus ioBroker-Objekt abrufen
                              getState(sourceObject, function (err, state) {
                                  if (err || !state || !state.val) {
                                      console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                      return;
                                  }
                                  try {
                                      // JSON-String in ein Objekt konvertieren
                                      let jsonObject = JSON.parse(state.val);
                                      
                                      // `sns_2` extrahieren
                                      let sns_2 = jsonObject.state.reported.equipment.swc_0.filter_pump.value;
                                      if (sns_2) {
                                          console.log("sns_2 extrahiert:", filter_pump);
                                          // sns_2 in das neue ioBroker-Objekt speichern
                                          setState(targetObject, filter_pump, true);
                                      } else {
                                          console.log("Kein filter_pump gefunden!");
                                      }
                                  } catch (error) {
                                      console.log("Fehler beim Parsen des JSON-Strings:", error);
                                  }
                              });
                              

                              Und alle 4 in 1 Script?

                              const axios = require('axios');
                              // Daten für die POST-Anfrage
                              const daten = {
                                  api_key: "EOOEMOW4YR6QNB11",
                                  email: "xxxxxxxx@xxxxxx.xx",
                                  password: "xxxxxxxxxxx"
                              };
                              // Erste Anfrage zur Authentifizierung
                              axios.post('https://prod.zodiac-io.com/users/v1/login', daten, {
                                  headers: {
                                      'Host': 'prod.zodiac-io.com',
                                      'accept': 'application/json',
                                      'Content-Type': 'application/json',
                                      'accept-encoding': 'gzip',
                                      'user-agent': 'okhttp/3.12.0'
                                  }
                              }).then((response) => {
                                  setState('0_userdata.0.iAquaLink.IdToken', JSON.stringify(response.data), true);
                                  console.log('Daten erfolgreich in ioBroker gespeichert.');
                                  // Extrahieren des idTokens
                                  let jsonObject = response.data;
                                  let idToken = jsonObject.userPoolOAuth.IdToken;
                                  if (idToken) {
                                      console.log("idToken extrahiert:", idToken);
                                      setState('0_userdata.0.iAquaLink.IdToken_clean', idToken, true);
                                      // Zweite Anfrage unter Verwendung des idTokens
                                      const options = {
                                          method: 'GET',
                                          url: 'https://prod.zodiac-io.com/devices/v1/JT22005060/shadow',
                                          headers: {
                                              'Host': 'prod.zodiac-io.com',
                                              'accept': 'application/json',
                                              'authorization': idToken,
                                              'accept-encoding': 'gzip',
                                              'user-agent': 'okhttp/3.12.0'
                                          }
                                      };
                                      return axios.request(options);
                                  } else {
                                      throw new Error("Kein idToken gefunden!");
                                  }
                              }).then(response => {
                                  console.log(response.data);
                                  setState('0_userdata.0.iAquaLink.Pooldata', response.data, true);
                              }).catch(error => {
                                  console.error('Fehler:', error);
                              });
                              
                              // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                              let sourceObject = "0_userdata.0.Pool.Pooldata";
                              // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                              let targetObject = "0_userdata.0.Pool.Pooldata_PH";
                              // JSON-String aus ioBroker-Objekt abrufen
                              getState(sourceObject, function (err, state) {
                                  if (err || !state || !state.val) {
                                      console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                      return;
                                  }
                                  try {
                                      // JSON-String in ein Objekt konvertieren
                                      let jsonObject = JSON.parse(state.val);
                                      
                                      // `sns_1` extrahieren
                                      let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value;
                                      if (sns_1) {
                                          console.log("sns_1 extrahiert:", sns_1);
                                          // sns_1 in das neue ioBroker-Objekt speichern
                                          setState(targetObject, sns_1, true);
                                      } else {
                                          console.log("Kein sns_1 gefunden!");
                                      }
                                  } catch (error) {
                                      console.log("Fehler beim Parsen des JSON-Strings:", error);
                                  }
                              });
                              
                              // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                              let sourceObject = "0_userdata.0.Pool.Pooldata";
                              // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                              let targetObject = "0_userdata.0.Pool.Pooldata_ORP";
                              // JSON-String aus ioBroker-Objekt abrufen
                              getState(sourceObject, function (err, state) {
                                  if (err || !state || !state.val) {
                                      console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                      return;
                                  }
                                  try {
                                      // JSON-String in ein Objekt konvertieren
                                      let jsonObject = JSON.parse(state.val);
                                      
                                      // `sns_2` extrahieren
                                      let sns_2 = jsonObject.state.reported.equipment.swc_0.sns_2.value;
                                      if (sns_2) {
                                          console.log("sns_2 extrahiert:", sns_2);
                                          // sns_2 in das neue ioBroker-Objekt speichern
                                          setState(targetObject, sns_2, true);
                                      } else {
                                          console.log("Kein sns_2 gefunden!");
                                      }
                                  } catch (error) {
                                      console.log("Fehler beim Parsen des JSON-Strings:", error);
                                  }
                              });
                               
                              // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                              let sourceObject = "0_userdata.0.Pool.Pooldata";
                              // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                              let targetObject = "0_userdata.0.Pool.Pooldata_Pumpe";
                              // JSON-String aus ioBroker-Objekt abrufen
                              getState(sourceObject, function (err, state) {
                                  if (err || !state || !state.val) {
                                      console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                      return;
                                  }
                                  try {
                                      // JSON-String in ein Objekt konvertieren
                                      let jsonObject = JSON.parse(state.val);
                                      
                                      // `sns_2` extrahieren
                                      let sns_2 = jsonObject.state.reported.equipment.swc_0.filter_pump.value;
                                      if (sns_2) {
                                          console.log("sns_2 extrahiert:", filter_pump);
                                          // sns_2 in das neue ioBroker-Objekt speichern
                                          setState(targetObject, filter_pump, true);
                                      } else {
                                          console.log("Kein filter_pump gefunden!");
                                      }
                                  } catch (error) {
                                      console.log("Fehler beim Parsen des JSON-Strings:", error);
                                  }
                              });
                              
                              1 Reply Last reply Reply Quote 0
                              • Negalein
                                Negalein Global Moderator @Hexagon last edited by

                                @hexagon

                                Guten Morgen

                                hab einen Fehler.
                                Kannst du bitte mal drüberschaun?

                                javascript.0	08:51:34.699	info	Start JavaScript script.js.Pool.iAqualink (Javascript/js)
                                javascript.0	08:51:34.700	error script.js.Pool.iAqualink compile failed: at script.js.Pool.iAqualink:79
                                
                                const axios = require('axios');
                                // Daten für die POST-Anfrage
                                const daten = {
                                    api_key: "EOOEMOW4YR6QNB11",
                                    email: "xxxxxxxxx@xxxxxxx.at",
                                    password: "xxxxxxxxx"
                                };
                                // Erste Anfrage zur Authentifizierung
                                axios.post('https://prod.zodiac-io.com/users/v1/login', daten, {
                                    headers: {
                                        'Host': 'prod.zodiac-io.com',
                                        'accept': 'application/json',
                                        'Content-Type': 'application/json',
                                        'accept-encoding': 'gzip',
                                        'user-agent': 'okhttp/3.12.0'
                                    }
                                }).then((response) => {
                                    setState('0_userdata.0.iAquaLink.IdToken', JSON.stringify(response.data), true);
                                    console.log('Daten erfolgreich in ioBroker gespeichert.');
                                    // Extrahieren des idTokens
                                    let jsonObject = response.data;
                                    let idToken = jsonObject.userPoolOAuth.IdToken;
                                    if (idToken) {
                                        console.log("idToken extrahiert:", idToken);
                                        setState('0_userdata.0.iAquaLink.IdToken_clean', idToken, true);
                                        // Zweite Anfrage unter Verwendung des idTokens
                                        const options = {
                                            method: 'GET',
                                            url: 'https://prod.zodiac-io.com/devices/v1/JT22005060/shadow',
                                            headers: {
                                                'Host': 'prod.zodiac-io.com',
                                                'accept': 'application/json',
                                                'authorization': idToken,
                                                'accept-encoding': 'gzip',
                                                'user-agent': 'okhttp/3.12.0'
                                            }
                                        };
                                        return axios.request(options);
                                    } else {
                                        throw new Error("Kein idToken gefunden!");
                                    }
                                }).then(response => {
                                    console.log(response.data);
                                    setState('0_userdata.0.iAquaLink.Pooldata', response.data, true);
                                }).catch(error => {
                                    console.error('Fehler:', error);
                                });
                                
                                // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                                let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                                let targetObject = "0_userdata.0.iAquaLink.Pooldata_PH";
                                // JSON-String aus ioBroker-Objekt abrufen
                                getState(sourceObject, function (err, state) {
                                    if (err || !state || !state.val) {
                                        console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                        return;
                                    }
                                    try {
                                        // JSON-String in ein Objekt konvertieren
                                        let jsonObject = JSON.parse(state.val);
                                        
                                        // `sns_1` extrahieren
                                        let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value;
                                        if (sns_1) {
                                            console.log("sns_1 extrahiert:", sns_1);
                                            // sns_1 in das neue ioBroker-Objekt speichern
                                            setState(targetObject, sns_1, true);
                                        } else {
                                            console.log("Kein sns_1 gefunden!");
                                        }
                                    } catch (error) {
                                        console.log("Fehler beim Parsen des JSON-Strings:", error);
                                    }
                                });
                                
                                // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                                let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                                let targetObject = "0_userdata.0.iAquaLink.Pooldata_ORP";
                                // JSON-String aus ioBroker-Objekt abrufen
                                getState(sourceObject, function (err, state) {
                                    if (err || !state || !state.val) {
                                        console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                        return;
                                    }
                                    try {
                                        // JSON-String in ein Objekt konvertieren
                                        let jsonObject = JSON.parse(state.val);
                                        
                                        // `sns_2` extrahieren
                                        let sns_2 = jsonObject.state.reported.equipment.swc_0.sns_2.value;
                                        if (sns_2) {
                                            console.log("sns_2 extrahiert:", sns_2);
                                            // sns_2 in das neue ioBroker-Objekt speichern
                                            setState(targetObject, sns_2, true);
                                        } else {
                                            console.log("Kein sns_2 gefunden!");
                                        }
                                    } catch (error) {
                                        console.log("Fehler beim Parsen des JSON-Strings:", error);
                                    }
                                });
                                 
                                // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                                let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                                let targetObject = "0_userdata.0.iAquaLink.Pooldata_Pumpe";
                                // JSON-String aus ioBroker-Objekt abrufen
                                getState(sourceObject, function (err, state) {
                                    if (err || !state || !state.val) {
                                        console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                        return;
                                    }
                                    try {
                                        // JSON-String in ein Objekt konvertieren
                                        let jsonObject = JSON.parse(state.val);
                                        
                                        // `sns_2` extrahieren
                                        let sns_2 = jsonObject.state.reported.equipment.swc_0.filter_pump.value;
                                        if (sns_2) {
                                            console.log("sns_2 extrahiert:", filter_pump);
                                            // sns_2 in das neue ioBroker-Objekt speichern
                                            setState(targetObject, filter_pump, true);
                                        } else {
                                            console.log("Kein filter_pump gefunden!");
                                        }
                                    } catch (error) {
                                        console.log("Fehler beim Parsen des JSON-Strings:", error);
                                    }
                                });
                                 
                                
                                
                                H 1 Reply Last reply Reply Quote 0
                                • H
                                  Hexagon @Negalein last edited by

                                  @negalein

                                  Der Pfad in Zeile 120 stimmt nicht.
                                  Es gibt unter filter_pump kein "value" sondern nur "state" oder "type"

                                  Zudem hast du im Rest vom script alles auf "sns_2" belassen. sns_2 verwendest du bereits für ORP. Du willst aber jetzt den Status der Pumpe auslesen. Also => sns_2 in filter_pump umbenennen.

                                  Negalein 1 Reply Last reply Reply Quote 0
                                  • Negalein
                                    Negalein Global Moderator @Hexagon last edited by

                                    @hexagon sagte in Aqualink Pool Automation in iobroker integrieren:

                                    Es gibt unter filter_pump kein "value" sondern nur "state" oder "type"

                                    Danke

                                    muss ich dann let filter_pump = jsonObject.state.reported.equipment.swc_0.filter_pump.state; verwenden, um zu sehen, ob die Pumpe läuft?

                                    H 1 Reply Last reply Reply Quote 0
                                    • H
                                      Hexagon @Negalein last edited by

                                      @negalein

                                      genau, und darunter ebenfalls alles noch umbenennen wo sns_2 auftaucht.

                                      Negalein 1 Reply Last reply Reply Quote 1
                                      • Negalein
                                        Negalein Global Moderator @Hexagon last edited by Negalein

                                        @hexagon sagte in Aqualink Pool Automation in iobroker integrieren:

                                        genau, und darunter ebenfalls alles noch umbenennen wo sns_2 auftaucht.

                                        es kommt noch immer der Error

                                        javascript.0	15:35:21.966	info	Start JavaScript script.js.Pool.iAqualink (Javascript/js)
                                        javascript.0	15:35:21.967	error	script.js.Pool.iAqualink compile failed: at script.js.Pool.iAqualink:79
                                        
                                        const axios = require('axios');
                                        // Daten für die POST-Anfrage
                                        const daten = {
                                            api_key: "EOOEMOW4YR6QNB11",
                                            email: "mail",
                                            password: "pwd"
                                        };
                                        // Erste Anfrage zur Authentifizierung
                                        axios.post('https://prod.zodiac-io.com/users/v1/login', daten, {
                                            headers: {
                                                'Host': 'prod.zodiac-io.com',
                                                'accept': 'application/json',
                                                'Content-Type': 'application/json',
                                                'accept-encoding': 'gzip',
                                                'user-agent': 'okhttp/3.12.0'
                                            }
                                        }).then((response) => {
                                            setState('0_userdata.0.iAquaLink.IdToken', JSON.stringify(response.data), true);
                                            console.log('Daten erfolgreich in ioBroker gespeichert.');
                                            // Extrahieren des idTokens
                                            let jsonObject = response.data;
                                            let idToken = jsonObject.userPoolOAuth.IdToken;
                                            if (idToken) {
                                                console.log("idToken extrahiert:", idToken);
                                                setState('0_userdata.0.iAquaLink.IdToken_clean', idToken, true);
                                                // Zweite Anfrage unter Verwendung des idTokens
                                                const options = {
                                                    method: 'GET',
                                                    url: 'https://prod.zodiac-io.com/devices/v1/JT22008430/shadow',
                                                    headers: {
                                                        'Host': 'prod.zodiac-io.com',
                                                        'accept': 'application/json',
                                                        'authorization': idToken,
                                                        'accept-encoding': 'gzip',
                                                        'user-agent': 'okhttp/3.12.0'
                                                    }
                                                };
                                                return axios.request(options);
                                            } else {
                                                throw new Error("Kein idToken gefunden!");
                                            }
                                        }).then(response => {
                                            console.log(response.data);
                                            setState('0_userdata.0.iAquaLink.Pooldata', response.data, true);
                                        }).catch(error => {
                                            console.error('Fehler:', error);
                                        });
                                        
                                        // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                                        let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                        // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                                        let targetObject = "0_userdata.0.iAquaLink.Pooldata_PH";
                                        // JSON-String aus ioBroker-Objekt abrufen
                                        getState(sourceObject, function (err, state) {
                                            if (err || !state || !state.val) {
                                                console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                                return;
                                            }
                                            try {
                                                // JSON-String in ein Objekt konvertieren
                                                let jsonObject = JSON.parse(state.val);
                                                
                                                // `sns_1` extrahieren
                                                let sns_1 = jsonObject.state.reported.equipment.swc_0.sns_1.value;
                                                if (sns_1) {
                                                    console.log("sns_1 extrahiert:", sns_1);
                                                    // sns_1 in das neue ioBroker-Objekt speichern
                                                    setState(targetObject, sns_1, true);
                                                } else {
                                                    console.log("Kein sns_1 gefunden!");
                                                }
                                            } catch (error) {
                                                console.log("Fehler beim Parsen des JSON-Strings:", error);
                                            }
                                        });
                                        
                                        // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                                        let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                        // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                                        let targetObject = "0_userdata.0.iAquaLink.Pooldata_ORP";
                                        // JSON-String aus ioBroker-Objekt abrufen
                                        getState(sourceObject, function (err, state) {
                                            if (err || !state || !state.val) {
                                                console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                                return;
                                            }
                                            try {
                                                // JSON-String in ein Objekt konvertieren
                                                let jsonObject = JSON.parse(state.val);
                                                
                                                // `sns_2` extrahieren
                                                let sns_2 = jsonObject.state.reported.equipment.swc_0.sns_2.value;
                                                if (sns_2) {
                                                    console.log("sns_2 extrahiert:", sns_2);
                                                    // sns_2 in das neue ioBroker-Objekt speichern
                                                    setState(targetObject, sns_2, true);
                                                } else {
                                                    console.log("Kein sns_2 gefunden!");
                                                }
                                            } catch (error) {
                                                console.log("Fehler beim Parsen des JSON-Strings:", error);
                                            }
                                        });
                                         
                                        // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                                        let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                        // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                                        let targetObject = "0_userdata.0.iAquaLink.Pooldata_Pumpe";
                                        // JSON-String aus ioBroker-Objekt abrufen
                                        getState(sourceObject, function (err, state) {
                                            if (err || !state || !state.val) {
                                                console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                                return;
                                            }
                                            try {
                                                // JSON-String in ein Objekt konvertieren
                                                let jsonObject = JSON.parse(state.val);
                                                
                                                // `filter_pump` extrahieren
                                                let filter_pump = jsonObject.state.reported.equipment.swc_0.filter_pump.value;
                                                if (filter_pump) {
                                                    console.log("filter_pump extrahiert:", filter_pump);
                                                    // filter_pump in das neue ioBroker-Objekt speichern
                                                    setState(targetObject, filter_pump, true);
                                                } else {
                                                    console.log("Kein filter_pump gefunden!");
                                                }
                                            } catch (error) {
                                                console.log("Fehler beim Parsen des JSON-Strings:", error);
                                            }
                                        });
                                         
                                        // Name des Quell-Objekts im ioBroker, das den JSON-String enthält
                                        let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                        // Name des Ziel-Objekts, in das das idToken gespeichert werden soll
                                        let targetObject = "0_userdata.0.iAquaLink.Pooldata_Temp";
                                        // JSON-String aus ioBroker-Objekt abrufen
                                        getState(sourceObject, function (err, state) {
                                            if (err || !state || !state.val) {
                                                console.log("Fehler beim Abrufen des JSON-Strings oder Objekt ist leer.");
                                                return;
                                            }
                                            try {
                                                // JSON-String in ein Objekt konvertieren
                                                let jsonObject = JSON.parse(state.val);
                                                
                                                // `Water temp` extrahieren
                                                let Water temp = jsonObject.state.reported.equipment.swc_0.Water temp.value;
                                                if (Water temp) {
                                                    console.log("Water temp extrahiert:", Water temp);
                                                    // Water temp in das neue ioBroker-Objekt speichern
                                                    setState(targetObject, Water temp, true);
                                                } else {
                                                    console.log("Kein Water temp gefunden!");
                                                }
                                            } catch (error) {
                                                console.log("Fehler beim Parsen des JSON-Strings:", error);
                                            }
                                        });
                                        

                                        EDIT: das steht im ioB Log

                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	at processImmediate (node:internal/timers:485:21)
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/main.js:1732:17)
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	at /opt/iobroker/node_modules/iobroker.javascript/main.js:2322:17
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:2224:37)
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1956:21)
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	at new Script (node:vm:117:7)
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	SyntaxError: Identifier 'sourceObject' has already been declared
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	^
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	let sourceObject = "0_userdata.0.iAquaLink.Pooldata";
                                        
                                        javascript.0
                                        2025-05-13 15:39:33.464	error	script.js.Pool.iAqualink compile failed: at script.js.Pool.iAqualink:79
                                        

                                        muss da zwischen Token und sns Abfrage eine Pause rein?

                                        Negalein 1 Reply Last reply Reply Quote 0
                                        • Negalein
                                          Negalein Global Moderator @Negalein last edited by

                                          @Hexagon

                                          kannst du dir das noch anschaun?

                                          @negalein sagte in Aqualink Pool Automation in iobroker integrieren:

                                          es kommt noch immer der Error

                                          @negalein sagte in Aqualink Pool Automation in iobroker integrieren:

                                          muss da zwischen Token und sns Abfrage eine Pause rein?

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          559
                                          Online

                                          31.6k
                                          Users

                                          79.6k
                                          Topics

                                          1.3m
                                          Posts

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