Iaqualink - problème de connexion

Bonjour, sur le forum international, j’ai fini par trouver la solution avec NodeRED pour connecter home assistant à mon chlorinator Zodiac eXO et ma pompe à chaleur Z400 iQ : Jandy iAqualink Pool Integration - #378 by Tico - Custom Integrations - Home Assistant Community

image

Ah cool
Je viens de suivre ton liens mais je n’arrive pas

c’est bien ce node que tu as pris?
j’ai modifier mail et MDP et mon api key

[{"id":"1e47a52e3f1755e1","type":"inject","z":"0ae35cdfe7f81cdd","name":"Every hour","repeat":"3540","crontab":"","once":true,"onceDelay":"60","topic":"","payload":"","payloadType":"date","x":110,"y":80,"wires":[["6808aab954fc8b01"]]},{"id":"7849f0c750568181","type":"http request","z":"0ae35cdfe7f81cdd","name":"","method":"use","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":590,"y":80,"wires":[["18bf3f43ad2e6aa4"]]},{"id":"18bf3f43ad2e6aa4","type":"change","z":"0ae35cdfe7f81cdd","name":"IDToken","rules":[{"t":"move","p":"payload.userPoolOAuth.IdToken","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":80,"wires":[["ea244732498b9412"]]},{"id":"6808aab954fc8b01","type":"function","z":"0ae35cdfe7f81cdd","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'] = 'gzip';\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,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":80,"wires":[["7849f0c750568181"]]},{"id":"ea244732498b9412","type":"function","z":"0ae35cdfe7f81cdd","name":"Set variable IDToken","func":"global.set(\"IDToken\",msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1060,"y":80,"wires":[[]]},{"id":"dcd9bc84914a71f6","type":"http request","z":"0ae35cdfe7f81cdd","name":"Chlorinator","method":"use","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":590,"y":400,"wires":[["02b59259a14e8461","b8075e9783a1eb4f","f0bb9145a81ce74a","eba07f6046f035d6","4ac01fee0ba334b1","018a8ddf5da0b1f2","9c4298d655076b55"]]},{"id":"9df6c312e595c863","type":"function","z":"0ae35cdfe7f81cdd","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'] = 'gzip';\nmsg.headers['user-agent'] = 'okhttp/3.12.0';\nmsg.url = 'https://prod.zodiac-io.com/devices/v1/yourDeviceIDhere/shadow';\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":400,"wires":[["dcd9bc84914a71f6"]]},{"id":"a56824124abf6deb","type":"inject","z":"0ae35cdfe7f81cdd","name":"Every 10 mins","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":true,"onceDelay":"300","topic":"","payloadType":"date","x":120,"y":400,"wires":[["9df6c312e595c863","295782e3c29ee112"]]},{"id":"02b59259a14e8461","type":"change","z":"0ae35cdfe7f81cdd","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":810,"y":320,"wires":[[]]},{"id":"b8075e9783a1eb4f","type":"change","z":"0ae35cdfe7f81cdd","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":810,"y":160,"wires":[["0e3f2e3e62511c3a"]]},{"id":"f0bb9145a81ce74a","type":"change","z":"0ae35cdfe7f81cdd","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":830,"y":480,"wires":[[]]},{"id":"0e3f2e3e62511c3a","type":"range","z":"0ae35cdfe7f81cdd","minin":"0","maxin":"10","minout":"0","maxout":"1","action":"scale","round":false,"property":"payload","name":"Divide by 10","x":1030,"y":160,"wires":[[]]},{"id":"eba07f6046f035d6","type":"change","z":"0ae35cdfe7f81cdd","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":840,"y":400,"wires":[[]]},{"id":"4ac01fee0ba334b1","type":"change","z":"0ae35cdfe7f81cdd","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":830,"y":240,"wires":[["874e523fa6c7da37"]]},{"id":"874e523fa6c7da37","type":"range","z":"0ae35cdfe7f81cdd","minin":"0","maxin":"10","minout":"0","maxout":"1","action":"scale","round":false,"property":"payload","name":"Divide by 10","x":1030,"y":240,"wires":[[]]},{"id":"018a8ddf5da0b1f2","type":"change","z":"0ae35cdfe7f81cdd","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":850,"y":560,"wires":[[]]},{"id":"e64f08a15e168247","type":"function","z":"0ae35cdfe7f81cdd","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'] = 'gzip';\nmsg.headers['user-agent'] = 'okhttp/3.12.0';\nmsg.url = 'https://prod.zodiac-io.com/devices/v1/yourDeviceIDhere/shadow';\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":720,"wires":[["c6ca1d3e24bfb92e"]]},{"id":"c6ca1d3e24bfb92e","type":"http request","z":"0ae35cdfe7f81cdd","name":"Heat Pump","method":"use","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":590,"y":720,"wires":[["8b1cfc1cd0be14da","3c3f9237065a8ad6","5c21887674341499","98851fd84020e5da","5df5ed4f4d40d4ef"]]},{"id":"295782e3c29ee112","type":"delay","z":"0ae35cdfe7f81cdd","name":"5 mins","pauseType":"delay","timeout":"5","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":230,"y":560,"wires":[["e64f08a15e168247"]]},{"id":"8b1cfc1cd0be14da","type":"change","z":"0ae35cdfe7f81cdd","name":"Heat Pump Setpoint","rules":[{"t":"move","p":"payload.state.reported.equipment.hp_0.tsp","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":720,"wires":[[]]},{"id":"5c21887674341499","type":"change","z":"0ae35cdfe7f81cdd","name":"Heap Pump Air Temp","rules":[{"t":"move","p":"payload.state.reported.equipment.hp_0.sns_2.value","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":880,"wires":[[]]},{"id":"3c3f9237065a8ad6","type":"change","z":"0ae35cdfe7f81cdd","name":"Heap Pump Water Temp","rules":[{"t":"move","p":"payload.state.reported.equipment.hp_0.sns_1.value","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":870,"y":800,"wires":[[]]},{"id":"17a5e515d5f4c27f","type":"inject","z":"0ae35cdfe7f81cdd","name":"Test only","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":100,"y":720,"wires":[["e64f08a15e168247"]]},{"id":"98851fd84020e5da","type":"change","z":"0ae35cdfe7f81cdd","name":"Heat Pump Status","rules":[{"t":"move","p":"payload.state.reported.equipment.hp_0.status","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":960,"wires":[[]]},{"id":"5df5ed4f4d40d4ef","type":"change","z":"0ae35cdfe7f81cdd","name":"Heat Pump Reason","rules":[{"t":"move","p":"payload.state.reported.equipment.hp_0.reason","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":1040,"wires":[[]]},{"id":"9c4298d655076b55","type":"change","z":"0ae35cdfe7f81cdd","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":830,"y":640,"wires":[[]]}]

ici je rajoute mon id appareil JT2… c’est ca?

(https://prod.zodiac-io.com/devices/v1/JT2......./shadow)

comment as tu fais pour avoir se rendu?

Moi je n’ai pas de pompe a chaleur zodiac c’est juste pour récuperer les valeur Ph, temperature et ORP

merci pour ton aide

salut @steevy , il faut que tu changes aussi les lignes suivantes dans les post et get request
msg.headers['accept-encoding'] = 'gzip';
à changer en
msg.headers['accept-encoding'] = '*';


devient

si tu n’as pas de pompe a chaleur zodiac, tu peux enlever la ligne du bas dans nodered

pour le rendu, j’utilise deux gauges pour le PH et ORP et pour le visuel de la tempétaure l’integration custom:ph-meter

  - square: false
    columns: 1
    type: grid
    cards:
      - type: custom:stack-in-card
        background: false
        cards:
          - type: grid
            square: false
            columns: 2
            cards:
              - type: gauge
                name: pH
                entity: sensor.pool_chlorinator_ph
                needle: true
                min: 6
                max: 8
                segments:
                  - from: 1
                    color: '#db4437'
                  - from: 6.8
                    color: '#ffa600'
                  - from: 7
                    color: '#43a047'
                  - from: 7.4
                    color: '#ffa600'
                  - from: 7.6
                    color: '#db4437'
              - type: gauge
                name: ORP
                entity: sensor.pool_chlorinator_orp
                needle: true
                min: 550
                max: 900
                segments:
                  - from: 550
                    color: '#db4437'
                  - from: 600
                    color: '#ffa600'
                  - from: 650
                    color: '#43a047'
                  - from: 750
                    color: '#ffa600'
                  - from: 850
                    color: '#db4437'


  - type: 'custom:ph-meter'
    entity: sensor.pool_chlorinator_ph
    temperature: sensor.pool_chlorinator_filter_temperature
    compact: true

Merci @Wilsto pour ta réponse

effectivement en modifiant le Get et Post plus d’erreur dans Nodred

Par contre comment fait tu pour récupérer les valeur Ph, Redox et Température?
Comment as tu créer ces entités ?

entity: sensor.pool_chlorinator_ph
sensor.pool_chlorinator_filter_temperature

Sur ta capture nodered tu as Chlorinator Json HA ce que moi j’ai pas


Pour la pompe a chaleur j’ai enlever le lien pour la suite.

bonjour @steevy , j’envoie les données via MQTT, puis je les récupère sur HA, je remets le code entier du nodered que tu auras à modifier à nouveau avec tes identifiants et device_id ainsi qu’à connecter ton MQTT avec tes identifiants.

Je mets aussi le code du mqtt.yaml pour déclarer les sensors sous HA. fichier à la racine à déclarer au niveau du confirguration.yaml si ce n’est pas déjà fait :

mqtt: !include mqtt.yaml

Fichier mqtt.yaml

sensor:
  - name: "Pool Heat Pump Setpoint"
    state_topic: "pool/heatpump"
    value_template: "{{ value_json.setpoint }}"
    unit_of_measurement: "°C"

  - name: "Pool Heat Pump Water Temperature"
    state_topic: "pool/heatpump"
    value_template: "{{ value_json.water.value }}"
    unit_of_measurement: "°C"

  - name: "Pool Heat Pump Air Temperature"
    state_topic: "pool/heatpump"
    value_template: "{{ value_json.air.value }}"
    unit_of_measurement: "°C"

  - name: "Pool Heat Pump Status"
    state_topic: "pool/heatpump"
    value_template: "{{ value_json.status }}"    

  - name: "Pool Chlorinator pH"
    state_topic: "pool/chlorinator"
    value_template: "{{ value_json.ph / 10 }}"
    unit_of_measurement: "pH"

  - name: "Pool Chlorinator pH Setpoint"
    state_topic: "pool/chlorinator"
    value_template: "{{ value_json.ph_setpoint /10 }}"
    unit_of_measurement: "pH"

  - name: "Pool Chlorinator ORP"
    state_topic: "pool/chlorinator"
    value_template: "{{ value_json.orp }}"
    unit_of_measurement: "mV"

  - name: "Pool Chlorinator ORP Setpoint"
    state_topic: "pool/chlorinator"
    value_template: "{{ value_json.orp_setpoint }}"
    unit_of_measurement: "mV"

  - name: "Pool Chlorinator Filter Temperature"
    state_topic: "pool/chlorinator"
    value_template: "{{ value_json.filter_temp }}"
    unit_of_measurement: "°C"

  - name: "Pool Chlorinator Status"
    state_topic: "pool/chlorinator"
    value_template: "{{ value_json.status }}"
  
  - name: "Pool Chlorinator Error Code"
    state_topic: "pool/chlorinator"
    value_template: "{{ value_json.error_code }}"

Code NodeRed avec partie MQTT (les topics publiés sont pool/chlorinator et pool/heatpump)

[
    {
        "id": "7a045db1b5a9199f",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "1e47a52e3f1755e1",
        "type": "inject",
        "z": "7a045db1b5a9199f",
        "name": "Every hour",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "3540",
        "crontab": "",
        "once": true,
        "onceDelay": "60",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 150,
        "y": 60,
        "wires": [
            [
                "6808aab954fc8b01"
            ]
        ]
    },
    {
        "id": "7849f0c750568181",
        "type": "http request",
        "z": "7a045db1b5a9199f",
        "name": "",
        "method": "use",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "senderr": false,
        "x": 630,
        "y": 60,
        "wires": [
            [
                "18bf3f43ad2e6aa4"
            ]
        ]
    },
    {
        "id": "18bf3f43ad2e6aa4",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "IDToken",
        "rules": [
            {
                "t": "move",
                "p": "payload.userPoolOAuth.IdToken",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 860,
        "y": 60,
        "wires": [
            [
                "ea244732498b9412"
            ]
        ]
    },
    {
        "id": "6808aab954fc8b01",
        "type": "function",
        "z": "7a045db1b5a9199f",
        "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\":\"EOOEMOW4YR6QNB11\", \"email\":\"***EMAIL***\", \"password\":\"***PASSWORD***\"}';\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 60,
        "wires": [
            [
                "7849f0c750568181"
            ]
        ]
    },
    {
        "id": "ea244732498b9412",
        "type": "function",
        "z": "7a045db1b5a9199f",
        "name": "Set variable IDToken",
        "func": "global.set(\"IDToken\",msg.payload);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1100,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "dcd9bc84914a71f6",
        "type": "http request",
        "z": "7a045db1b5a9199f",
        "name": "Chlorinator",
        "method": "use",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 630,
        "y": 140,
        "wires": [
            [
                "02b59259a14e8461",
                "b8075e9783a1eb4f",
                "f0bb9145a81ce74a",
                "eba07f6046f035d6",
                "4ac01fee0ba334b1",
                "018a8ddf5da0b1f2",
                "9c4298d655076b55",
                "1173333c1f717937"
            ]
        ]
    },
    {
        "id": "9df6c312e595c863",
        "type": "function",
        "z": "7a045db1b5a9199f",
        "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/***ID DEVICE***/shadow';\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 140,
        "wires": [
            [
                "dcd9bc84914a71f6"
            ]
        ]
    },
    {
        "id": "a56824124abf6deb",
        "type": "inject",
        "z": "7a045db1b5a9199f",
        "name": "Every 10 mins",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "600",
        "crontab": "",
        "once": true,
        "onceDelay": "300",
        "topic": "",
        "payloadType": "date",
        "x": 140,
        "y": 440,
        "wires": [
            [
                "9df6c312e595c863",
                "295782e3c29ee112"
            ]
        ]
    },
    {
        "id": "02b59259a14e8461",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "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": 970,
        "y": 380,
        "wires": [
            []
        ]
    },
    {
        "id": "b8075e9783a1eb4f",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "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": 970,
        "y": 220,
        "wires": [
            [
                "0e3f2e3e62511c3a"
            ]
        ]
    },
    {
        "id": "f0bb9145a81ce74a",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "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": 990,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "0e3f2e3e62511c3a",
        "type": "range",
        "z": "7a045db1b5a9199f",
        "minin": "0",
        "maxin": "10",
        "minout": "0",
        "maxout": "1",
        "action": "scale",
        "round": false,
        "property": "payload",
        "name": "Divide by 10",
        "x": 1190,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "eba07f6046f035d6",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "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": 1000,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "4ac01fee0ba334b1",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "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": 990,
        "y": 300,
        "wires": [
            [
                "874e523fa6c7da37"
            ]
        ]
    },
    {
        "id": "874e523fa6c7da37",
        "type": "range",
        "z": "7a045db1b5a9199f",
        "minin": "0",
        "maxin": "10",
        "minout": "0",
        "maxout": "1",
        "action": "scale",
        "round": false,
        "property": "payload",
        "name": "Divide by 10",
        "x": 1190,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "018a8ddf5da0b1f2",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "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": 1010,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "e64f08a15e168247",
        "type": "function",
        "z": "7a045db1b5a9199f",
        "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/***ID DEVICE***/shadow';\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 820,
        "wires": [
            [
                "c6ca1d3e24bfb92e"
            ]
        ]
    },
    {
        "id": "c6ca1d3e24bfb92e",
        "type": "http request",
        "z": "7a045db1b5a9199f",
        "name": "Heat Pump",
        "method": "use",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 630,
        "y": 820,
        "wires": [
            [
                "8b1cfc1cd0be14da",
                "3c3f9237065a8ad6",
                "5c21887674341499",
                "98851fd84020e5da",
                "5df5ed4f4d40d4ef",
                "b1a1ad6ac80a85db"
            ]
        ]
    },
    {
        "id": "295782e3c29ee112",
        "type": "delay",
        "z": "7a045db1b5a9199f",
        "name": "5 mins",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "minutes",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 350,
        "y": 440,
        "wires": [
            [
                "e64f08a15e168247"
            ]
        ]
    },
    {
        "id": "8b1cfc1cd0be14da",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "Heat Pump Setpoint",
        "rules": [
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.tsp",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1000,
        "y": 1220,
        "wires": [
            []
        ]
    },
    {
        "id": "5c21887674341499",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "Heap Pump Air Temp",
        "rules": [
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.sns_2.value",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1000,
        "y": 980,
        "wires": [
            []
        ]
    },
    {
        "id": "3c3f9237065a8ad6",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "Heap Pump Water Temp",
        "rules": [
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.sns_1.value",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1010,
        "y": 900,
        "wires": [
            []
        ]
    },
    {
        "id": "17a5e515d5f4c27f",
        "type": "inject",
        "z": "7a045db1b5a9199f",
        "name": "Test only",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payloadType": "date",
        "x": 140,
        "y": 820,
        "wires": [
            [
                "e64f08a15e168247"
            ]
        ]
    },
    {
        "id": "98851fd84020e5da",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "Heat Pump Status",
        "rules": [
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.status",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 990,
        "y": 1060,
        "wires": [
            []
        ]
    },
    {
        "id": "5df5ed4f4d40d4ef",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "Heat Pump Reason",
        "rules": [
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.reason",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 990,
        "y": 1140,
        "wires": [
            []
        ]
    },
    {
        "id": "9c4298d655076b55",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "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": 990,
        "y": 700,
        "wires": [
            []
        ]
    },
    {
        "id": "026203a8fc2a8012",
        "type": "mqtt out",
        "z": "7a045db1b5a9199f",
        "name": "",
        "topic": "pool/heatpump",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "e13bcbdbba3a0ad1",
        "x": 1220,
        "y": 820,
        "wires": []
    },
    {
        "id": "b1a1ad6ac80a85db",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "Heat Pump JSON HA",
        "rules": [
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.tsp",
                "pt": "msg",
                "to": "payload.setpoint",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.sns_1",
                "pt": "msg",
                "to": "payload.water",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.sns_2",
                "pt": "msg",
                "to": "payload.air",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.status",
                "pt": "msg",
                "to": "payload.status",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.reason",
                "pt": "msg",
                "to": "payload.reason",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.hp_0.state",
                "pt": "msg",
                "to": "payload.state",
                "tot": "msg"
            },
            {
                "t": "delete",
                "p": "payload.state",
                "pt": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 920,
        "y": 820,
        "wires": [
            [
                "026203a8fc2a8012",
                "291c210e0379a5ca"
            ]
        ]
    },
    {
        "id": "1173333c1f717937",
        "type": "change",
        "z": "7a045db1b5a9199f",
        "name": "Chlorinator JSON HA",
        "rules": [
            {
                "t": "move",
                "p": "payload.state.reported.equipment.swc_0.sns_1.value",
                "pt": "msg",
                "to": "payload.ph",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.swc_0.ph_sp",
                "pt": "msg",
                "to": "payload.ph_setpoint",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.swc_0.sns_2.value",
                "pt": "msg",
                "to": "payload.orp",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.swc_0.orp_sp",
                "pt": "msg",
                "to": "payload.orp_setpoint",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.swc_0.sns_3.value",
                "pt": "msg",
                "to": "payload.filter_temp",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.swc_0.exo_state",
                "pt": "msg",
                "to": "payload.status",
                "tot": "msg"
            },
            {
                "t": "move",
                "p": "payload.state.reported.equipment.swc_0.error_code",
                "pt": "msg",
                "to": "payload.error_code",
                "tot": "msg"
            },
            {
                "t": "delete",
                "p": "payload.state",
                "pt": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 940,
        "y": 140,
        "wires": [
            [
                "26d521ac2ba4cbda",
                "4007320216a37e59"
            ]
        ]
    },
    {
        "id": "26d521ac2ba4cbda",
        "type": "debug",
        "z": "7a045db1b5a9199f",
        "name": "debug 1",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1300,
        "y": 100,
        "wires": []
    },
    {
        "id": "2d03d44bbe7e7298",
        "type": "inject",
        "z": "7a045db1b5a9199f",
        "name": "Test only",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payloadType": "date",
        "x": 160,
        "y": 140,
        "wires": [
            [
                "9df6c312e595c863"
            ]
        ]
    },
    {
        "id": "4007320216a37e59",
        "type": "mqtt out",
        "z": "7a045db1b5a9199f",
        "name": "",
        "topic": "pool/chlorinator",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "e13bcbdbba3a0ad1",
        "x": 1320,
        "y": 140,
        "wires": []
    },
    {
        "id": "291c210e0379a5ca",
        "type": "debug",
        "z": "7a045db1b5a9199f",
        "name": "debug 2",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1200,
        "y": 780,
        "wires": []
    },
    {
        "id": "e13bcbdbba3a0ad1",
        "type": "mqtt-broker",
        "name": "MQTT HA",
        "broker": "***MQTT URL***",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

Un grand merci pour ton aide @Wilsto ça fonctionne il me manquait la liaison entre Mqtt et HA avec ton code nodered c’est parfait

Pour le visuel tu passe par le fichier yaml?
Car moi je passe par l’aperçu mais je ne trouve pas custom:ph-meter

Les valeurs sont actualiser toutes les 10 min c’est bien ça?

Super @steevy que ca fonctionne pour toi aussi :slight_smile:

tous mes dashboards sont config en yaml (ce qui me permet de versionner leur code), et pour le ph-meter , tu dois d’abord le récupérer via HACS, tu pourras le paramétrer dans une card vide via l’UI : GitHub - madmicio/ph-meter-temperature: Ph meter, temperature, tds, ec cl & salinity for fish tank and swimming pool

et oui les données se mettent à jour toutes les dix minutes

Merci pour ton retour @Wilsto

Je viens de récupérer via Hacs mais je ne trouve rien dans card

Que veut tu dire via l’UI?

tous mes dashboards sont config en yaml

as tu créer un fichier spécifique dans configuration.yaml?

Si je veux modifier la consigne de température ou Redox c’est possible par HA?

Sais tu a s quoi correspond Pool chlorinateur status?

bonjour @steevy , je me suis amusé à améliorer l’UI en créant un plugin qui affiche les informations sur la température, le pH et les niveaux d’ORP de la piscine et tout cela géré directement accessible via HACS (il y a un bouton sur la page github).

Pour l’instant c’est juste de la récup d’info, je vais regarder si et comment on peut interagir aussi :slight_smile:

Salut @Wilsto merci pour ton retour

J’ai installer pool monitor dans HACS

Mais lorsque je vais dans mon tableau de bord je fais rajouter une carte celle ci n’apparait pas…

je dois faire une erreur mais je ne vois pas ou…

Pour l’instant c’est juste de la récup d’info, je vais regarder si et comment on peut interagir aussi :slight_smile:

Je suis déja content d’avoir les valeurs

Salut @steevy , ajoute via une carte manuelle (c’est un type de carte tout en bas)


et colle le code suivant en remplaceant par tes entités

type: 'custom:pool-monitor-card'
temperature: sensor.temperature_sensor
ph: sensor.ph_sensor
orp: sensor.orp_sensor
tds: sensor.tds_sensor

merci pour ton aide

Au faites j’avais pas mis mes entité j’ai bêtement copier le code… faudrait un peu réfléchir …

Sais tu as quoi correspondent les numéros de Pool chlorinateur error code?
0 en marche
1 aucun débit et les autres?

On ne peut pas voire la teneur en sel du chlorinateur?

Ta pompe de piscine tu l’as brancher directement sur le chlorinateur?
Actuellement je passe par le coffret avec l’horloge.
J’ai pensé rajouter une prise connecté pour gérer avec HA.

Bientôt fini de t’embêter :blush:

Salut @steevy, c’est un forum d’entreaide, on est tous là pour avancer ensemble :handshake:

Super que ca marche pour toi :+1:

pour les erreurs codes, malheureusement, j’ai pas trouvé de référence, leur API n’est pas documentée, je suis donc preneur de toute information, j’imagine que des erreurs vont bien apparaitre et nous renseigner :slight_smile:

Ma pompe est gérée par un coffret TILD, c’est sur ma todo list de voir comment m’y connecté avec HA pour gérer la pompe et la lumière. Le chlorinateur et la pompe à chaleur est branchée dessus, et ne se déclenche que quand la pompe se met en marche.

Hello @Wilsto oui je sais mais c’est pas toujours facile quand on ne maitrise pas vraiment la programmation.

Oui les erreur code on attends de voir.

OK je connaissais pas les coffret TILD.
Chez moi la pompe a chaleur est branché sur le chlorinateur, et ma pompe sue le coffret électrique j’ai acheté une prise connecté zigbee pour l’allumer avec HA ça fonctionne j’ai fais un node Basic allumer a Xh et éteindre a Xh.

J’aimerais savoirs si il est possible de récupérer d’autre valeur avec le node

  • si la pompe a chaleur est en marche
  • consigne température
  • auxiliaire (j’aimerais brancher la lumière de la piscine dessus

il faut jouer avec postamm avec post et get pour obtenir d’autre informations d’après ce que j’ai pu lire mais je n’ai aucune notion j’ai pu me connecter jusqu’à obtenir mon numéros de série mais après je bloque

As tu déjà réalisé cette manipulation?

Bonjour @steevy ,afin que l’on puisse connaitre l’ensemble des données que te fournit ton chlorinator, sur nodeRED peux tu ajouter un debug au niveau de ton chlorinator, tu peux le faire au niveau « payload » (par défaut) ou comme sur le screenshot en dessous uniquement les données de ton équipement (plus simple à lire).


image

regardes si tu retrouves tes infos dans les aux_1 et aux_2 ou les sns, sinon copie colle tes données ici et je regarderais si je peux t’aider pour les trouver.

Bonjour @Wilsto je viens de rajouter un debug au chlorinateur
J’obtiens les valeurs :+1: mais je ne vois pas de différence si la pompe a chaleur est active et non
PAC éteind


PAC allumé

Sur l’application iaqualink l’auxilliaire 2 est en « chauffage » lorsque la pompe a chaleur tourne et « actif » lorsque la température voulu est atteinte

1 « J'aime »

mince pas aussi simple que l’on aurait voulu, on s’attendrait à le voir dans l’auxiliaire 2, mais rien, tu as quoi comme valeurs lorsque la PAC est eteinte ?

Oui je pensais aussi qu’on peut trouvé les valeurs par ici
Exactement les même

Par contre a la ligne production la valeur change elle est a 2 lorsque la filtration est éteinte et 1 lorsque c’est allumé
as tu ces même valeurs?

On ne vois pas également la température de consignes qui est a 25

si je passe par postamann je dois mettre cette url dans get https://prod.zodiac-io.com/devices/v1/MONSERIAL/shadow

avec mon id_token c’est tous?