Demande d'aide ipx v3 et home assistant

bonjour à toutes et à tous,

Cela fait bien longtemps que je ne suis pas venu sur le forum et je m’en excuse.
Je me permets de vous solliciter pour obtenir votre aide en espérant que mon sujet soi au bon endroit.
En effet, j’ai un IPX800v3 qui tourne depuis de longue année sans soucis (très bonne machine) pour la gestion de mon éclairage extérieur. Depuis peu, j’ai installé une box domotique home assistant afin de pouvoir suivre d’autres choses. Mais c’est là que les choses se corsent. En effet, j’ai réussi à intégrer l’IPX800v3 dans HA mais je n’arrive pas à avoir un retour d’état immédiat des entrées lors d’appui sur ces dernières, je n’ai un retour qu’au bout de 15s. Est ce que vous auriez des idées ou des exemples?
je vous remercie par avance.

Bonjour,
pour ma part, j’ai intégré l’ipx 800 V3 via l’intégration command_line, et le changement d’état est instantané…
Je viens d’avoir des soucis avec cette intégration car j’utilisais l’ancien formatage des commandes qui a été mis à jour et n’était plus utilisable depuis la version 2023.12.2.
voici ce que j’ai modifié pour que cela fonctionne :

dans le fichier configuration.yaml : ajout de la ligne
command_line: !include command_line.yaml

dans le fichier command_line.yaml :

# Commandes relais IPX800V3 Relais 1-->16
  - switch:
        unique_id: ipx800V3_r1
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set1=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set1=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led0>(.*)</led0>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r2
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set2=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set2=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led1>(.*)</led1>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r3
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set3=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set3=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led2>(.*)</led2>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r4
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set4=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set4=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led3>(.*)</led3>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r5
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set5=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set5=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led4>(.*)</led4>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r6
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set6=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set6=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led5>(.*)</led5>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r7
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set7=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set7=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led6>(.*)</led6>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r8
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set8=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set8=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led7>(.*)</led7>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r9
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set9=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set9=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led8>(.*)</led8>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r10
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set10=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set10=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led9>(.*)</led9>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r11
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set11=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set11=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led10>(.*)</led10>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r12
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set12=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set12=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led11>(.*)</led11>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r13
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set13=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set13=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led12>(.*)</led12>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r14
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set14=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set14=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led13>(.*)</led13>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r15
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set15=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set15=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led14>(.*)</led14>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'
  - switch:
        unique_id: ipx800V3_r16
        command_on: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set16=1 >/dev/null'
        command_off: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/preset.htm?set16=0 >/dev/null'
        command_state: 'curl http://votre_login:votre_password@ip_de_l'ipx:port_de _connection_ipx/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led15>(.*)</led15>") %} {% if status == "1" %} true {%- endif -%}'
        name: 'Le nom que vous souhaitez voir apparaitre dans HA'

remplacer les champs :

votre_login
votre_password
ip_de_l'ipx
port_de _connection_ipx
Le nom que vous souhaitez voir apparaitre dans HA

par vos propres champs de configuration.
J’ai 16 relais car une extension x8r dessus, vous pouvez ne garder que les 8 premiers si vous n’avez que l’ipx800 seule. :smiley:

PS, n’oubliez pas que le yaml est très tatillon sur " l’identité " du code, un espace manquant ou remplacé par une tabulation et plus rien va… :wink:

1 « J'aime »

Pour les entrées, voici comment j’ai procédé :
dans le fichier configuration.yaml : ajout de la ligne

sensor: !include sensor2.yaml

dans le fichier sensor2.yaml :

# 4 capteurs analogique IPX800V3 (192.168.1.26)
  - platform: rest
    unique_id: ipx800V3_ana1
    resource: http://login_ipx:pass_ipx@ip_ipx:_port_acces_ipx/api/xdevices.json?cmd=30
    scan_interval: 180
    name: luminosité extérieure
    unit_of_measurement: 'Lux'
    value_template: '{{ (value_json["AN1"] *0.09775) |round(1)}}'  # formule pour capteur ls100 gce
  - platform: rest
    unique_id: ipx800V3_ana2
    resource: http://login_ipx:pass_ipx@ip_ipx:_port_acces_ipx/api/xdevices.json?cmd=30
    scan_interval: 300
    name: température Eau chaude
    unit_of_measurement: '°C'
    value_template: '{{ (((value_json["AN2"] *0.00323)-0.25) / 0.028) |round(1)}}'  # formule pour capteur tc100 gce
  - platform: rest
    unique_id: ipx800V3_ana3
    resource: http://login_ipx:pass_ipx@ip_ipx:_port_acces_ipx/api/xdevices.json?cmd=30
    scan_interval: 300
    name: température Boiler
    unit_of_measurement: '°C'
    value_template: '{{ (((value_json["AN3"] *0.00323)-0.25) / 0.028) |round(1)}}'  # formule pour capteur tc100 gce

# 8 entrées digitales IPX800V3 (192.168.1.26)
  -  platform: rest
     resource: 'http://login_ipx:pass_ipx@ip_ipx:_port_acces_ipx/api/xdevices.json?cmd=10'
     name: 'IPX800 entrees num'
     value_template: '{{ value_json["product"] }}'
     scan_interval: 40
     json_attributes:
       - IN1
       - IN2
       - IN3
       - IN4
       - IN5
       - IN6
       - IN7
       - IN8
       - IN9
       - IN10
       - IN11
       - IN12
       - IN13
       - IN14
       - IN15
       - IN16

rempalcer les champs :

 name:
login_ipx
pass_ipx
ip_ipx
_port_acces_ipx

par ceux de votre configuration.
En fonction du type de capteur, il faudra aussi changer la

value_template

et le

scan_interval (en secondes)

Ne pas descendre trop bas pour celui-ci, sous peine de saturer l’ipx en requêtes et de faire « lagguer » tout le bazar. :laughing:

Bonjour @Mike02 ,
Merci infiniment pour tout ces détails, je vais essayer ça rapidement, je commence à désespérer de pouvoir le faire fonctionner.
J’ai également une question pour bien comprendre le fonctionnement et si j’ai tout compris. Le retour d’état immédiat se fait via la commande rest? Mais comment l’Ipx envoie l’info de changement d’état à HA?
Merci par avance.

J’ai oublié de le préciser , en effet, ma config est particulière, car j’ai aussi une V4, sur le réseau, et grâce à celle-ci qui est couplée à la 3 par push, les capteurs sont maj grâce à un scénario , via l’intégration IPXv4 sur HA.
Dans votre cas, il faudrait, je pense, créer un binary sensor par relais,
qui lui-même serait maj par un push de l’ipx
(réglable dans le menu relais, appui sur « édit », à la fin de la ligne « output », en haut de la page de l’ipx, ensuite choisir le relais voulu et cliquer sur « push settings ».
Mais je ne suis pas assez expert en JSON pour savoir quelle commande mettre en push pour updater un binary sensor en « 0 » ou « 1 ». :thinking:
Peut-être sur le forum hacs.fr il y aurait des réponses ou pistes de réponses :sweat_smile:
Une autre piste serait de passer par Node-Red et updater le statut des switchs dans HA via celui-ci, et updater les nodes par push depuis l’ipx lorsqu’on change d’état d’un switch depuis une source externe à HA.

–>Michaël

Merci pour les informations @Mike02 .
J’avais trouvé une solution d’intégration de la v3 sur le forum hacf mais cette dernière date de 2021 et impossible de la mettre en place. Elle était basé sur un endpoint nodered mais je n’arrive pas à le faire fonctionner ( le retour d’état était toujours de 15s) j’ai peur que la mise a jour est fait modifier la solution et vu mon faible niveau sur HA. Vu les modifications que vous avez apporté sur votre système, je vais essayer de les mettre en place avec le point nodered, faire un mix des 2. Vu que c’est bientôt Noël cela peut peut être marcher :wink:

1 « J'aime »