Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Aqualink Pool Automation in iobroker integrieren

NEWS

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

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

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

Aqualink Pool Automation in iobroker integrieren

Scheduled Pinned Locked Moved Entwicklung
38 Posts 9 Posters 4.4k Views 6 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • 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
    wrote on last edited by
    #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: 20.17.0 NPM: 10.8.2
    ° Proxmox, Ubuntu 22.04.3 LTS
    ° Fixer ---> iob fix

    arteckA 1 Reply Last reply
    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
      wrote on last edited by
      #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 Reply Last reply
      0
      • Q Offline
        Q Offline
        Qlink
        wrote on last edited by 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 Reply Last reply
        0
        • Q Offline
          Q Offline
          Qlink
          wrote on last edited by 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 Reply Last reply
          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
            wrote on last edited by 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 Reply Last reply
            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
              wrote on last edited by
              #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: 20.17.0 NPM: 10.8.2
              ° Proxmox, Ubuntu 22.04.3 LTS
              ° Fixer ---> iob fix

              H 1 Reply Last reply
              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
                wrote on last edited by
                #22

                @negalein

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

                NegaleinN 1 Reply Last reply
                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
                  wrote on last edited by
                  #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: 20.17.0 NPM: 10.8.2
                  ° Proxmox, Ubuntu 22.04.3 LTS
                  ° Fixer ---> iob fix

                  H 1 Reply Last reply
                  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
                    wrote on last edited by
                    #24

                    @negalein

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

                    NegaleinN 1 Reply Last reply
                    0
                    • H Hexagon

                      @negalein

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

                      NegaleinN Offline
                      NegaleinN Offline
                      Negalein
                      Global Moderator
                      wrote on last edited by
                      #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: 20.17.0 NPM: 10.8.2
                      ° Proxmox, Ubuntu 22.04.3 LTS
                      ° Fixer ---> iob fix

                      H 1 Reply Last reply
                      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
                        wrote on last edited by 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 Reply Last reply
                        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
                          wrote on last edited by
                          #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: 20.17.0 NPM: 10.8.2
                          ° Proxmox, Ubuntu 22.04.3 LTS
                          ° Fixer ---> iob fix

                          H 1 Reply Last reply
                          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
                            wrote on last edited by 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 Reply Last reply
                            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
                              wrote on last edited by
                              #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: 20.17.0 NPM: 10.8.2
                              ° Proxmox, Ubuntu 22.04.3 LTS
                              ° Fixer ---> iob fix

                              H 1 Reply Last reply
                              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
                                wrote on last edited by 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 Replies Last reply
                                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
                                  wrote on last edited by
                                  #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: 20.17.0 NPM: 10.8.2
                                  ° Proxmox, Ubuntu 22.04.3 LTS
                                  ° Fixer ---> iob fix

                                  1 Reply Last reply
                                  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
                                    wrote on last edited by
                                    #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: 20.17.0 NPM: 10.8.2
                                    ° Proxmox, Ubuntu 22.04.3 LTS
                                    ° Fixer ---> iob fix

                                    1 Reply Last reply
                                    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
                                      wrote on last edited by
                                      #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: 20.17.0 NPM: 10.8.2
                                      ° Proxmox, Ubuntu 22.04.3 LTS
                                      ° Fixer ---> iob fix

                                      H 1 Reply Last reply
                                      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
                                        wrote on last edited by
                                        #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 Reply Last reply
                                        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
                                          wrote on last edited by
                                          #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: 20.17.0 NPM: 10.8.2
                                          ° Proxmox, Ubuntu 22.04.3 LTS
                                          ° Fixer ---> iob fix

                                          H 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          243

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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