Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Aqualink Pool Automation in iobroker integrieren

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    431

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    359

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    960

Aqualink Pool Automation in iobroker integrieren

Geplant Angeheftet Gesperrt Verschoben Entwicklung
38 Beiträge 9 Kommentatoren 5.0k Aufrufe 6 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • arteckA arteck

    @negalein sagte in Aqualink Pool Automation in iobroker integrieren:

    Könntest du mir dabei behilflich sein?

    währe dann bei mir Jugend forscht..

    NegaleinN Offline
    NegaleinN Offline
    Negalein
    Global Moderator
    schrieb am zuletzt editiert von
    #16

    @arteck sagte in Aqualink Pool Automation in iobroker integrieren:

    währe dann bei mir Jugend forscht..

    Ah ok, ich dachte du hast auch eine Zodiac-Anlage.
    Werde mal weitersuchen.
    Merci

    ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
    ° Node.js Fixer ---> iob nodejs-update
    ° Fixer ---> iob fix

    arteckA 1 Antwort Letzte Antwort
    0
    • NegaleinN Negalein

      @arteck sagte in Aqualink Pool Automation in iobroker integrieren:

      währe dann bei mir Jugend forscht..

      Ah ok, ich dachte du hast auch eine Zodiac-Anlage.
      Werde mal weitersuchen.
      Merci

      arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      schrieb am zuletzt editiert von
      #17

      @negalein sagte in Aqualink Pool Automation in iobroker integrieren:

      Ah ok, ich dachte du hast auch eine Zodiac-Anlage.

      nee leider nein.. sry

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      1 Antwort Letzte Antwort
      0
      • Q Offline
        Q Offline
        Qlink
        schrieb am zuletzt editiert von Qlink
        #18

        @Negalein @stealthdux

        Meine alte Zodiac TriExpert hat diese Saison das Zeitliche gesegnet.

        Läuft bei einem von euch beiden die Integration der Zodiac Exo IQ in iobroker ?
        Falls ja, ist das stabil und für den Dauerbetrieb/Automatisierungen verwendbar ?

        Ihr würdet mir damit bei der Kaufentscheidung sehr helfen.

        Danke.

        Beste Grüße

        1 Antwort Letzte Antwort
        0
        • Q Offline
          Q Offline
          Qlink
          schrieb am zuletzt editiert von Qlink
          #19

          Im Nodered Forum hat jemand einen Flow gepostet mit dem es anscheinend auch funktionieren sollte die Daten der Zodiac Exo IQ auszulesen:

          Hier ist der Flow:

          e49a802f-ffad-441d-a4a6-6d7ad4547cb0-image.png

          [
              {
                  "id": "6c519c18faf10a1e",
                  "type": "tab",
                  "label": "Zodiac Exo",
                  "disabled": false,
                  "info": "",
                  "env": []
              },
              {
                  "id": "1e47a52e3f1755e1",
                  "type": "inject",
                  "z": "6c519c18faf10a1e",
                  "name": "Every hour",
                  "repeat": "3540",
                  "crontab": "",
                  "once": true,
                  "onceDelay": "60",
                  "topic": "",
                  "payload": "",
                  "payloadType": "date",
                  "x": 130,
                  "y": 60,
                  "wires": [
                      [
                          "6808aab954fc8b01"
                      ]
                  ]
              },
              {
                  "id": "7849f0c750568181",
                  "type": "http request",
                  "z": "6c519c18faf10a1e",
                  "name": "",
                  "method": "use",
                  "ret": "obj",
                  "paytoqs": "ignore",
                  "url": "",
                  "tls": "",
                  "persist": false,
                  "proxy": "",
                  "authType": "",
                  "senderr": false,
                  "x": 610,
                  "y": 60,
                  "wires": [
                      [
                          "18bf3f43ad2e6aa4"
                      ]
                  ]
              },
              {
                  "id": "18bf3f43ad2e6aa4",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "IDToken",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.userPoolOAuth.IdToken",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 840,
                  "y": 60,
                  "wires": [
                      [
                          "ea244732498b9412"
                      ]
                  ]
              },
              {
                  "id": "6808aab954fc8b01",
                  "type": "function",
                  "z": "6c519c18faf10a1e",
                  "name": "Format Post Request",
                  "func": "msg.method = 'POST';\nmsg.headers = {};\nmsg.headers['Host'] = 'prod.zodiac-io.com';\nmsg.headers['accept'] = 'application/json';\nmsg.headers['content-type'] = 'application/json';\nmsg.headers['accept-encoding'] = '*';\nmsg.headers['user-agent'] = 'okhttp/3.12.0';\nmsg.url = 'https://prod.zodiac-io.com/users/v1/login';\nmsg.payload = '{\"api_key\":\"yourapikeyhere\", \"email\":\"youremail@address.com\", \"password\":\"youriAqualinkpassword\"}';\nreturn msg;",
                  "outputs": 1,
                  "timeout": "",
                  "noerr": 0,
                  "initialize": "",
                  "finalize": "",
                  "libs": [],
                  "x": 380,
                  "y": 60,
                  "wires": [
                      [
                          "7849f0c750568181"
                      ]
                  ]
              },
              {
                  "id": "ea244732498b9412",
                  "type": "function",
                  "z": "6c519c18faf10a1e",
                  "name": "Set variable IDToken",
                  "func": "global.set(\"IDToken\",msg.payload);\nreturn msg;",
                  "outputs": 1,
                  "noerr": 0,
                  "initialize": "",
                  "finalize": "",
                  "libs": [],
                  "x": 1080,
                  "y": 60,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "dcd9bc84914a71f6",
                  "type": "http request",
                  "z": "6c519c18faf10a1e",
                  "name": "Chlorinator",
                  "method": "use",
                  "ret": "obj",
                  "paytoqs": "ignore",
                  "url": "",
                  "tls": "",
                  "persist": false,
                  "proxy": "",
                  "authType": "",
                  "senderr": false,
                  "x": 610,
                  "y": 380,
                  "wires": [
                      [
                          "02b59259a14e8461",
                          "b8075e9783a1eb4f",
                          "f0bb9145a81ce74a",
                          "eba07f6046f035d6",
                          "4ac01fee0ba334b1",
                          "018a8ddf5da0b1f2",
                          "9c4298d655076b55"
                      ]
                  ]
              },
              {
                  "id": "9df6c312e595c863",
                  "type": "function",
                  "z": "6c519c18faf10a1e",
                  "name": "Format Get Request",
                  "func": "let bearer = global.get(\"IDToken\");\nmsg.method = 'GET';\nmsg.headers = {};\nmsg.headers['Host'] = 'prod.zodiac-io.com';\nmsg.headers['accept'] = 'application/json';\nmsg.headers['authorization'] = bearer;\nmsg.headers['accept-encoding'] = '*';\nmsg.headers['user-agent'] = 'okhttp/3.12.0';\nmsg.url = 'https://prod.zodiac-io.com/devices/v1/yourDeviceIDhere/shadow';\nreturn msg;",
                  "outputs": 1,
                  "timeout": "",
                  "noerr": 0,
                  "initialize": "",
                  "finalize": "",
                  "libs": [],
                  "x": 380,
                  "y": 380,
                  "wires": [
                      [
                          "dcd9bc84914a71f6"
                      ]
                  ]
              },
              {
                  "id": "a56824124abf6deb",
                  "type": "inject",
                  "z": "6c519c18faf10a1e",
                  "name": "Every 10 mins",
                  "props": [
                      {
                          "p": "payload"
                      },
                      {
                          "p": "topic",
                          "vt": "str"
                      }
                  ],
                  "repeat": "600",
                  "crontab": "",
                  "once": true,
                  "onceDelay": "300",
                  "topic": "",
                  "payloadType": "date",
                  "x": 140,
                  "y": 380,
                  "wires": [
                      [
                          "9df6c312e595c863"
                      ]
                  ]
              },
              {
                  "id": "02b59259a14e8461",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "ORP",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.state.reported.equipment.swc_0.sns_2.value",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 830,
                  "y": 300,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "b8075e9783a1eb4f",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "pH",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.state.reported.equipment.swc_0.sns_1.value",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 830,
                  "y": 140,
                  "wires": [
                      [
                          "0e3f2e3e62511c3a"
                      ]
                  ]
              },
              {
                  "id": "f0bb9145a81ce74a",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "Filter Temp",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.state.reported.equipment.swc_0.sns_3.value",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 850,
                  "y": 460,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "0e3f2e3e62511c3a",
                  "type": "range",
                  "z": "6c519c18faf10a1e",
                  "minin": "0",
                  "maxin": "10",
                  "minout": "0",
                  "maxout": "1",
                  "action": "scale",
                  "round": false,
                  "property": "payload",
                  "name": "Divide by 10",
                  "x": 1050,
                  "y": 140,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "eba07f6046f035d6",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "ORP Setpoint",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.state.reported.equipment.swc_0.orp_sp",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 860,
                  "y": 380,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "4ac01fee0ba334b1",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "pH Setpoint",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.state.reported.equipment.swc_0.ph_sp",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 850,
                  "y": 220,
                  "wires": [
                      [
                          "874e523fa6c7da37"
                      ]
                  ]
              },
              {
                  "id": "874e523fa6c7da37",
                  "type": "range",
                  "z": "6c519c18faf10a1e",
                  "minin": "0",
                  "maxin": "10",
                  "minout": "0",
                  "maxout": "1",
                  "action": "scale",
                  "round": false,
                  "property": "payload",
                  "name": "Divide by 10",
                  "x": 1050,
                  "y": 220,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "018a8ddf5da0b1f2",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "Zodiac Error Code",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.state.reported.equipment.swc_0.error_code",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 870,
                  "y": 540,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "9c4298d655076b55",
                  "type": "change",
                  "z": "6c519c18faf10a1e",
                  "name": "Low Setting",
                  "rules": [
                      {
                          "t": "move",
                          "p": "payload.state.reported.equipment.swc_0.low",
                          "pt": "msg",
                          "to": "payload",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 850,
                  "y": 620,
                  "wires": [
                      []
                  ]
              }
          ]
          

          und hier die Anleitung dazu:

          Note that in the Function node (Format Post Request) preceeding the first HTTP Request , you will require three bits of info -

          API Key (generic for all users) - EOOEMOW4YR6QNB11
          Email
          Password

          In the Function node (Format Get Request) preceeding the Device, you will need 'yourDeviceIDhere' where specified. It's the serial number of the device and looks something like -

          JT19000123
          or
          JX19100123

          The post you originally linked to has the curl commands necessary to pull the DeviceID. They might also be physically printed on the device somewhere but I haven't looked.

          PULL DEVICE ID:

          The steps required to login to iAqualink are as follows (note the api_key is the same for all users)

          curl  -X POST -H "Host:prod.zodiac-io.com" -H "accept:application/json" -H "content-type:application/json" -H "accept-encoding:gzip" -H "user-agent:okhttp/3.12.0" -d '{"api_key":"EOOEMOW4YR6QNB11", "email":"XXXX@XXXX", "password":"XXXXXX"}' "https://prod.zodiac-io.com/users/v1/login"
          

          The iAqualink server returns a page of data (X's blank out personal data) -

          {
              "username": "XXXXXXXXXXXXXXXXXX",
              "email": "XXXXXXXXXXX@gmail.com",
              "first_name": "XXX",
              "last_name": "XXXXXX",
              "address": "XXX\n, XXX, XX, au, XXX",
              "address_1": "XXXXXXXXXXX",
              "address_2": null,
              "city": "XXXXXXXXXXX",
              "state": "XX",
              "country": "au",
              "postal_code": "XXXX",
              "id": "XXXXXX",
              "authentication_token": "XXXXXXXXXXXXXXXXXXXX",
              "session_id": "XXXXXXXXXXXXXXXXXXXX",
              "created_at": "2019-12-09T03:12:57.000Z",
              "updated_at": "2019-12-09T03:12:57.000Z",
              "time_zone": "Australia/XXXXXX",
              "phone": "XXXXXXXXXX",
              "opt_in_1": "1",
              "opt_in_2": "0",
              "role": "customer",
              "cognitoPool": {
                  "appClientId": "XXXXXXXXXXXXXXXXXXXXX",
                  "poolId": "us-east-1_XXXXXXXXX",
                  "region": "us-east-1"
              },
              "credentials": {
                  "AccessKeyId": "XXXXXXXXXXXXXXXXXXXX",
                  "SecretKey": "XXXXXXXXXXXXXXXXXXXXXX",
                  "SessionToken": "XXXXXX.............XXXXXXXX",
                  "Expiration": "2020-04-26T05:24:59.000Z",
                  "IdentityId": "us-east-1:XXXXXXXXXXXXXXXX"
              },
              "userPoolOAuth": {
                  "AccessToken": "XXXXXXX...............XXXXXXX",
                  "ExpiresIn": 3600,
                  "TokenType": "Bearer",
                  "RefreshToken": "XXXXXX..........XXXXXXXXX",
                  "IdToken": "XXXXXXXXXX.........XXXXXXXXXXX"
              
          }
          

          The important fields in the preceeding data block are -

          "id": (a 6 digit number that remains the same across logins),

          "authentication_token": (a 20 character field that remains the same across logins),

          "IdToken": (a 1740 character field that expires in 3600 seconds).

          Armed with this data, a second command will elicit the device serial numbers registered to the user's account (user_id = id from block above) -

          curl 'https://support.iaqualink.com/devices.json?api_key=EOOEMOW4YR6QNB07&authentication_token=XXXXXXXXXXXXXXXXXXXX&user_id=XXXXXX' -H "Host:support.iaqualink.com" -H "accept:application/json" -H "user-agent:okhttp/3.12.0" -H "content-type:application/json"
          

          This is the returned data block for the two devices I have (a chlorinator and a heat pump) -

          [
          {
          "id":"XXXXXX",
          "serial_number":"XXXXXXXXXX",
          "created_at":"2020-01-07T09:41:41.000Z",
          "updated_at":"2020-01-07T09:41:41.000Z",
          "name":"Z400 iQ TD7",
          "device_type":"hpm",
          "owner_id":null,
          "updating":false,
          "firmware_version":null,
          "target_firmware_version":null,
          "update_firmware_start_at":null,
          "last_activity_at":null
          },
          {
          "id":"XXXXXX",
          "serial_number":"XXXXXXXXXX",
          "created_at":"2019-12-09T03:18:18.000Z",
          "updated_at":"2019-12-09T03:18:18.000Z",
          "name":"eXO-Pro iQ",
          "device_type":"exo",
          "owner_id":null,
          "updating":false,
          "firmware_version":null,
          "target_firmware_version":null,
          "update_firmware_start_at":null,
          "last_activity_at":null
          }
          ]
          

          INFORMATION RETRIEVAL AND CONTROL

          With the DEVICE_SERIAL_NUMBER ("serial_number" in the block above), and ID_TOKEN ("IdToken" from the first block of data) the next GET command can be populated to retrieve the pH and ORP values for the chlorinator -

          curl -X GET -H "Host:prod.zodiac-io.com" -H "accept:application/json" -H "authorization:ID_TOKEN" -H "accept-encoding:gzip" -H "user-agent:okhttp/3.12.0" "https://prod.zodiac-io.com/devices/v1/DEVICE_SERIAL_NUMBER/shadow"
          

          Control of the chlorinator production (On/Off) can done using a POST command ("production" to be set to 0 or 1) -

          curl -X POST -H "Host:prod.zodiac-io.com" -H "accept:application/json" -H "authorization:ID_TOKEN" -H "content-type:application/json; charset=UTF-8" -H "content-length:62" -H "accept-encoding:gzip" -H "user-agent:okhttp/3.12.0" -d '{"state":{"desired":{"equipment":{"swc_0":{"production":0}}}}}' "https://prod.zodiac-io.com/devices/v1/DEVICE_SERIAL_NUMBER/shadow"
          

          I have the DEVICE_SERIAL_NUMBER for the components in my system (this value is fixed).
          I now need a mechanism to record the variable ID_TOKEN and subsequently plug this into the commands above.

          Kann das eventuell mal jemand testen, der eine Zodiac Exo im Einsatz hat ?

          H 1 Antwort Letzte Antwort
          0
          • Q Qlink

            Im Nodered Forum hat jemand einen Flow gepostet mit dem es anscheinend auch funktionieren sollte die Daten der Zodiac Exo IQ auszulesen:

            Hier ist der Flow:

            e49a802f-ffad-441d-a4a6-6d7ad4547cb0-image.png

            [
                {
                    "id": "6c519c18faf10a1e",
                    "type": "tab",
                    "label": "Zodiac Exo",
                    "disabled": false,
                    "info": "",
                    "env": []
                },
                {
                    "id": "1e47a52e3f1755e1",
                    "type": "inject",
                    "z": "6c519c18faf10a1e",
                    "name": "Every hour",
                    "repeat": "3540",
                    "crontab": "",
                    "once": true,
                    "onceDelay": "60",
                    "topic": "",
                    "payload": "",
                    "payloadType": "date",
                    "x": 130,
                    "y": 60,
                    "wires": [
                        [
                            "6808aab954fc8b01"
                        ]
                    ]
                },
                {
                    "id": "7849f0c750568181",
                    "type": "http request",
                    "z": "6c519c18faf10a1e",
                    "name": "",
                    "method": "use",
                    "ret": "obj",
                    "paytoqs": "ignore",
                    "url": "",
                    "tls": "",
                    "persist": false,
                    "proxy": "",
                    "authType": "",
                    "senderr": false,
                    "x": 610,
                    "y": 60,
                    "wires": [
                        [
                            "18bf3f43ad2e6aa4"
                        ]
                    ]
                },
                {
                    "id": "18bf3f43ad2e6aa4",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "IDToken",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.userPoolOAuth.IdToken",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 840,
                    "y": 60,
                    "wires": [
                        [
                            "ea244732498b9412"
                        ]
                    ]
                },
                {
                    "id": "6808aab954fc8b01",
                    "type": "function",
                    "z": "6c519c18faf10a1e",
                    "name": "Format Post Request",
                    "func": "msg.method = 'POST';\nmsg.headers = {};\nmsg.headers['Host'] = 'prod.zodiac-io.com';\nmsg.headers['accept'] = 'application/json';\nmsg.headers['content-type'] = 'application/json';\nmsg.headers['accept-encoding'] = '*';\nmsg.headers['user-agent'] = 'okhttp/3.12.0';\nmsg.url = 'https://prod.zodiac-io.com/users/v1/login';\nmsg.payload = '{\"api_key\":\"yourapikeyhere\", \"email\":\"youremail@address.com\", \"password\":\"youriAqualinkpassword\"}';\nreturn msg;",
                    "outputs": 1,
                    "timeout": "",
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 380,
                    "y": 60,
                    "wires": [
                        [
                            "7849f0c750568181"
                        ]
                    ]
                },
                {
                    "id": "ea244732498b9412",
                    "type": "function",
                    "z": "6c519c18faf10a1e",
                    "name": "Set variable IDToken",
                    "func": "global.set(\"IDToken\",msg.payload);\nreturn msg;",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 1080,
                    "y": 60,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "dcd9bc84914a71f6",
                    "type": "http request",
                    "z": "6c519c18faf10a1e",
                    "name": "Chlorinator",
                    "method": "use",
                    "ret": "obj",
                    "paytoqs": "ignore",
                    "url": "",
                    "tls": "",
                    "persist": false,
                    "proxy": "",
                    "authType": "",
                    "senderr": false,
                    "x": 610,
                    "y": 380,
                    "wires": [
                        [
                            "02b59259a14e8461",
                            "b8075e9783a1eb4f",
                            "f0bb9145a81ce74a",
                            "eba07f6046f035d6",
                            "4ac01fee0ba334b1",
                            "018a8ddf5da0b1f2",
                            "9c4298d655076b55"
                        ]
                    ]
                },
                {
                    "id": "9df6c312e595c863",
                    "type": "function",
                    "z": "6c519c18faf10a1e",
                    "name": "Format Get Request",
                    "func": "let bearer = global.get(\"IDToken\");\nmsg.method = 'GET';\nmsg.headers = {};\nmsg.headers['Host'] = 'prod.zodiac-io.com';\nmsg.headers['accept'] = 'application/json';\nmsg.headers['authorization'] = bearer;\nmsg.headers['accept-encoding'] = '*';\nmsg.headers['user-agent'] = 'okhttp/3.12.0';\nmsg.url = 'https://prod.zodiac-io.com/devices/v1/yourDeviceIDhere/shadow';\nreturn msg;",
                    "outputs": 1,
                    "timeout": "",
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 380,
                    "y": 380,
                    "wires": [
                        [
                            "dcd9bc84914a71f6"
                        ]
                    ]
                },
                {
                    "id": "a56824124abf6deb",
                    "type": "inject",
                    "z": "6c519c18faf10a1e",
                    "name": "Every 10 mins",
                    "props": [
                        {
                            "p": "payload"
                        },
                        {
                            "p": "topic",
                            "vt": "str"
                        }
                    ],
                    "repeat": "600",
                    "crontab": "",
                    "once": true,
                    "onceDelay": "300",
                    "topic": "",
                    "payloadType": "date",
                    "x": 140,
                    "y": 380,
                    "wires": [
                        [
                            "9df6c312e595c863"
                        ]
                    ]
                },
                {
                    "id": "02b59259a14e8461",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "ORP",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.state.reported.equipment.swc_0.sns_2.value",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 830,
                    "y": 300,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "b8075e9783a1eb4f",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "pH",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.state.reported.equipment.swc_0.sns_1.value",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 830,
                    "y": 140,
                    "wires": [
                        [
                            "0e3f2e3e62511c3a"
                        ]
                    ]
                },
                {
                    "id": "f0bb9145a81ce74a",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "Filter Temp",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.state.reported.equipment.swc_0.sns_3.value",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 850,
                    "y": 460,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "0e3f2e3e62511c3a",
                    "type": "range",
                    "z": "6c519c18faf10a1e",
                    "minin": "0",
                    "maxin": "10",
                    "minout": "0",
                    "maxout": "1",
                    "action": "scale",
                    "round": false,
                    "property": "payload",
                    "name": "Divide by 10",
                    "x": 1050,
                    "y": 140,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "eba07f6046f035d6",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "ORP Setpoint",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.state.reported.equipment.swc_0.orp_sp",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 860,
                    "y": 380,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "4ac01fee0ba334b1",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "pH Setpoint",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.state.reported.equipment.swc_0.ph_sp",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 850,
                    "y": 220,
                    "wires": [
                        [
                            "874e523fa6c7da37"
                        ]
                    ]
                },
                {
                    "id": "874e523fa6c7da37",
                    "type": "range",
                    "z": "6c519c18faf10a1e",
                    "minin": "0",
                    "maxin": "10",
                    "minout": "0",
                    "maxout": "1",
                    "action": "scale",
                    "round": false,
                    "property": "payload",
                    "name": "Divide by 10",
                    "x": 1050,
                    "y": 220,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "018a8ddf5da0b1f2",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "Zodiac Error Code",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.state.reported.equipment.swc_0.error_code",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 870,
                    "y": 540,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "9c4298d655076b55",
                    "type": "change",
                    "z": "6c519c18faf10a1e",
                    "name": "Low Setting",
                    "rules": [
                        {
                            "t": "move",
                            "p": "payload.state.reported.equipment.swc_0.low",
                            "pt": "msg",
                            "to": "payload",
                            "tot": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 850,
                    "y": 620,
                    "wires": [
                        []
                    ]
                }
            ]
            

            und hier die Anleitung dazu:

            Note that in the Function node (Format Post Request) preceeding the first HTTP Request , you will require three bits of info -

            API Key (generic for all users) - EOOEMOW4YR6QNB11
            Email
            Password

            In the Function node (Format Get Request) preceeding the Device, you will need 'yourDeviceIDhere' where specified. It's the serial number of the device and looks something like -

            JT19000123
            or
            JX19100123

            The post you originally linked to has the curl commands necessary to pull the DeviceID. They might also be physically printed on the device somewhere but I haven't looked.

            PULL DEVICE ID:

            The steps required to login to iAqualink are as follows (note the api_key is the same for all users)

            curl  -X POST -H "Host:prod.zodiac-io.com" -H "accept:application/json" -H "content-type:application/json" -H "accept-encoding:gzip" -H "user-agent:okhttp/3.12.0" -d '{"api_key":"EOOEMOW4YR6QNB11", "email":"XXXX@XXXX", "password":"XXXXXX"}' "https://prod.zodiac-io.com/users/v1/login"
            

            The iAqualink server returns a page of data (X's blank out personal data) -

            {
                "username": "XXXXXXXXXXXXXXXXXX",
                "email": "XXXXXXXXXXX@gmail.com",
                "first_name": "XXX",
                "last_name": "XXXXXX",
                "address": "XXX\n, XXX, XX, au, XXX",
                "address_1": "XXXXXXXXXXX",
                "address_2": null,
                "city": "XXXXXXXXXXX",
                "state": "XX",
                "country": "au",
                "postal_code": "XXXX",
                "id": "XXXXXX",
                "authentication_token": "XXXXXXXXXXXXXXXXXXXX",
                "session_id": "XXXXXXXXXXXXXXXXXXXX",
                "created_at": "2019-12-09T03:12:57.000Z",
                "updated_at": "2019-12-09T03:12:57.000Z",
                "time_zone": "Australia/XXXXXX",
                "phone": "XXXXXXXXXX",
                "opt_in_1": "1",
                "opt_in_2": "0",
                "role": "customer",
                "cognitoPool": {
                    "appClientId": "XXXXXXXXXXXXXXXXXXXXX",
                    "poolId": "us-east-1_XXXXXXXXX",
                    "region": "us-east-1"
                },
                "credentials": {
                    "AccessKeyId": "XXXXXXXXXXXXXXXXXXXX",
                    "SecretKey": "XXXXXXXXXXXXXXXXXXXXXX",
                    "SessionToken": "XXXXXX.............XXXXXXXX",
                    "Expiration": "2020-04-26T05:24:59.000Z",
                    "IdentityId": "us-east-1:XXXXXXXXXXXXXXXX"
                },
                "userPoolOAuth": {
                    "AccessToken": "XXXXXXX...............XXXXXXX",
                    "ExpiresIn": 3600,
                    "TokenType": "Bearer",
                    "RefreshToken": "XXXXXX..........XXXXXXXXX",
                    "IdToken": "XXXXXXXXXX.........XXXXXXXXXXX"
                
            }
            

            The important fields in the preceeding data block are -

            "id": (a 6 digit number that remains the same across logins),

            "authentication_token": (a 20 character field that remains the same across logins),

            "IdToken": (a 1740 character field that expires in 3600 seconds).

            Armed with this data, a second command will elicit the device serial numbers registered to the user's account (user_id = id from block above) -

            curl 'https://support.iaqualink.com/devices.json?api_key=EOOEMOW4YR6QNB07&authentication_token=XXXXXXXXXXXXXXXXXXXX&user_id=XXXXXX' -H "Host:support.iaqualink.com" -H "accept:application/json" -H "user-agent:okhttp/3.12.0" -H "content-type:application/json"
            

            This is the returned data block for the two devices I have (a chlorinator and a heat pump) -

            [
            {
            "id":"XXXXXX",
            "serial_number":"XXXXXXXXXX",
            "created_at":"2020-01-07T09:41:41.000Z",
            "updated_at":"2020-01-07T09:41:41.000Z",
            "name":"Z400 iQ TD7",
            "device_type":"hpm",
            "owner_id":null,
            "updating":false,
            "firmware_version":null,
            "target_firmware_version":null,
            "update_firmware_start_at":null,
            "last_activity_at":null
            },
            {
            "id":"XXXXXX",
            "serial_number":"XXXXXXXXXX",
            "created_at":"2019-12-09T03:18:18.000Z",
            "updated_at":"2019-12-09T03:18:18.000Z",
            "name":"eXO-Pro iQ",
            "device_type":"exo",
            "owner_id":null,
            "updating":false,
            "firmware_version":null,
            "target_firmware_version":null,
            "update_firmware_start_at":null,
            "last_activity_at":null
            }
            ]
            

            INFORMATION RETRIEVAL AND CONTROL

            With the DEVICE_SERIAL_NUMBER ("serial_number" in the block above), and ID_TOKEN ("IdToken" from the first block of data) the next GET command can be populated to retrieve the pH and ORP values for the chlorinator -

            curl -X GET -H "Host:prod.zodiac-io.com" -H "accept:application/json" -H "authorization:ID_TOKEN" -H "accept-encoding:gzip" -H "user-agent:okhttp/3.12.0" "https://prod.zodiac-io.com/devices/v1/DEVICE_SERIAL_NUMBER/shadow"
            

            Control of the chlorinator production (On/Off) can done using a POST command ("production" to be set to 0 or 1) -

            curl -X POST -H "Host:prod.zodiac-io.com" -H "accept:application/json" -H "authorization:ID_TOKEN" -H "content-type:application/json; charset=UTF-8" -H "content-length:62" -H "accept-encoding:gzip" -H "user-agent:okhttp/3.12.0" -d '{"state":{"desired":{"equipment":{"swc_0":{"production":0}}}}}' "https://prod.zodiac-io.com/devices/v1/DEVICE_SERIAL_NUMBER/shadow"
            

            I have the DEVICE_SERIAL_NUMBER for the components in my system (this value is fixed).
            I now need a mechanism to record the variable ID_TOKEN and subsequently plug this into the commands above.

            Kann das eventuell mal jemand testen, der eine Zodiac Exo im Einsatz hat ?

            H Offline
            H Offline
            Hexagon
            schrieb am zuletzt editiert von Hexagon
            #20

            @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);
            });
            
            NegaleinN 1 Antwort Letzte Antwort
            0
            • H 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);
              });
              
              NegaleinN Offline
              NegaleinN Offline
              Negalein
              Global Moderator
              schrieb am zuletzt editiert von
              #21

              @hexagon

              Hallo

              welchen Typ benötigen diese DP?

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

              ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
              ° Node.js Fixer ---> iob nodejs-update
              ° Fixer ---> iob fix

              H 1 Antwort Letzte Antwort
              0
              • NegaleinN Negalein

                @hexagon

                Hallo

                welchen Typ benötigen diese DP?

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

                H Offline
                H Offline
                Hexagon
                schrieb am zuletzt editiert von
                #22

                @negalein

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

                NegaleinN 1 Antwort Letzte Antwort
                0
                • H Hexagon

                  @negalein

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

                  NegaleinN Offline
                  NegaleinN Offline
                  Negalein
                  Global Moderator
                  schrieb am zuletzt editiert von
                  #23

                  @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:
                  

                  ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                  ° Node.js Fixer ---> iob nodejs-update
                  ° Fixer ---> iob fix

                  H 1 Antwort Letzte Antwort
                  0
                  • NegaleinN Negalein

                    @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 Offline
                    H Offline
                    Hexagon
                    schrieb am zuletzt editiert von
                    #24

                    @negalein

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

                    NegaleinN 1 Antwort Letzte Antwort
                    0
                    • H Hexagon

                      @negalein

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

                      NegaleinN Offline
                      NegaleinN Offline
                      Negalein
                      Global Moderator
                      schrieb am zuletzt editiert von
                      #25

                      @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
                      

                      ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                      ° Node.js Fixer ---> iob nodejs-update
                      ° Fixer ---> iob fix

                      H 1 Antwort Letzte Antwort
                      0
                      • NegaleinN Negalein

                        @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 Offline
                        H Offline
                        Hexagon
                        schrieb am zuletzt editiert von Hexagon
                        #26

                        @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);
                            }
                        });
                        
                        
                        NegaleinN 1 Antwort Letzte Antwort
                        0
                        • H 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);
                              }
                          });
                          
                          
                          NegaleinN Offline
                          NegaleinN Offline
                          Negalein
                          Global Moderator
                          schrieb am zuletzt editiert von
                          #27

                          @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?

                          ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                          ° Node.js Fixer ---> iob nodejs-update
                          ° Fixer ---> iob fix

                          H 1 Antwort Letzte Antwort
                          0
                          • NegaleinN Negalein

                            @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 Offline
                            H Offline
                            Hexagon
                            schrieb am zuletzt editiert von Hexagon
                            #28

                            @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.

                            NegaleinN 1 Antwort Letzte Antwort
                            0
                            • H 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.

                              NegaleinN Offline
                              NegaleinN Offline
                              Negalein
                              Global Moderator
                              schrieb am zuletzt editiert von
                              #29

                              @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?

                              ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                              ° Node.js Fixer ---> iob nodejs-update
                              ° Fixer ---> iob fix

                              H 1 Antwort Letzte Antwort
                              0
                              • NegaleinN Negalein

                                @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 Offline
                                H Offline
                                Hexagon
                                schrieb am zuletzt editiert von Hexagon
                                #30

                                @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
                                
                                NegaleinN 3 Antworten Letzte Antwort
                                0
                                • H 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
                                  
                                  NegaleinN Offline
                                  NegaleinN Offline
                                  Negalein
                                  Global Moderator
                                  schrieb am zuletzt editiert von
                                  #31

                                  @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?

                                  ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                                  ° Node.js Fixer ---> iob nodejs-update
                                  ° Fixer ---> iob fix

                                  1 Antwort Letzte Antwort
                                  0
                                  • H 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
                                    
                                    NegaleinN Offline
                                    NegaleinN Offline
                                    Negalein
                                    Global Moderator
                                    schrieb am zuletzt editiert von
                                    #32

                                    @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);
                                        }
                                    });
                                    

                                    ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                                    ° Node.js Fixer ---> iob nodejs-update
                                    ° Fixer ---> iob fix

                                    1 Antwort Letzte Antwort
                                    0
                                    • H 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
                                      
                                      NegaleinN Offline
                                      NegaleinN Offline
                                      Negalein
                                      Global Moderator
                                      schrieb am zuletzt editiert von
                                      #33

                                      @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);
                                          }
                                      });
                                       
                                      
                                      

                                      ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                                      ° Node.js Fixer ---> iob nodejs-update
                                      ° Fixer ---> iob fix

                                      H 1 Antwort Letzte Antwort
                                      0
                                      • NegaleinN Negalein

                                        @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 Offline
                                        H Offline
                                        Hexagon
                                        schrieb am zuletzt editiert von
                                        #34

                                        @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.

                                        NegaleinN 1 Antwort Letzte Antwort
                                        0
                                        • H Hexagon

                                          @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.

                                          NegaleinN Offline
                                          NegaleinN Offline
                                          Negalein
                                          Global Moderator
                                          schrieb am zuletzt editiert von
                                          #35

                                          @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?

                                          ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                                          ° Node.js Fixer ---> iob nodejs-update
                                          ° Fixer ---> iob fix

                                          H 1 Antwort Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          585

                                          Online

                                          32.8k

                                          Benutzer

                                          82.8k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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