Utilisation de switch REST pour piloter un IPX800

[Argonaute]
Après, l’implémentation avec les switch commande_line a le mérite d’être plus compact. Le débat peut donc être ouvert et les 2 solutions se discuteront.Citation

Je suis d’accord avec toi, la config semble un peu « lourde » avec l’utilisation du switch template; ce qui est dommage, c’est de pas pouvoir faire des actions communes, peu importe que l’on passe l’état à 0 ou 1. car pour le coup, ceux sont exactement les mêmes actions. Je n’ai pas trouvé mais peut-être que cela existe…
avec la comand_line, peut-on lancer un update, car c’est surtout ce qui nous intéresse pour remonter l’état.
A voir pour l’utilisation du token… c’est du bonus maintenant ! :slight_smile:

Merci à Clemalex pour la configuration package… c’est ce que j’avais cherché en fait.
J’avais déjà fait la config par répertoire/type, mais du coup, on se retrouve avec de la conf un peu éparpillé pour le même device… je regarde ça ce WE…

Hello,

Si je comprends bien ta question, oui avec switch command_line il y a bien une mise à jour de l’état via la partie command_state.

switch:
  - platform: command_line
    switches:
      ipx800_7:
        command_on: 'curl http://usr:pwd@192.168.50.250/preset.htm?led7=1 >/dev/null'
        command_off: 'curl http://usr:pwd@192.168.50.250/preset.htm?led7=0 >/dev/null'
        command_state: 'curl http://usr:pwd@192.168.50.250/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led6>(.*)</led6>") %} {% if status == "1" %} true {%- endif -%}'
        friendly_name: 'Piscine : IPX800 7'

Du coût l’implémentation est très compacte. Par contre, pour faire changer un icone comme tu le fais, j’ai du utiliser un template binary switch qui change en fonction de l’état du switch command line.
J’avais essayé initialement de récupérer la réponse de la requête preset-html, mais ce n’était pas la bonne voie. Il aurait fallu l’envoyer dans un fichier et le parser.

Suite à ton précédent message, je vais creuser le push et l’appel de l’API HA.

Autrement, question de petit nouveau, je n’ai pas encore vu ou on trouve le moyen de voir dans un log les requêtes et commandes faites par HA (par exemple nos commandes /preset.htm, status.xml…). Sais tu cela ?

ah ok, vu pour le command_state… ça met à jour le switch lui même.
Mais si tu veux mettre à jour une autre entité ? Dans mon cas, je suis parti sur un sensor principal qui contient tous les états… donc c’est lui que je vais mettre à jour (et c’est le seul qui fait une requête à l’IPX pour les retours d’état)
Je pense que ce soit bien que l’on ne soit pas parti pareil, c’est comme ça que l’on va pouvoir améliorer et comparer les soluces… :slight_smile:
Je suis aussi nouveau…je ne sais pas trop pour les logs… j’ai vu par contre que l’on pouvait en faire avec rflink, il faudrait regarder le code pour voir comment c’est fait…
Mais il y a quelques connaisseurs surement sur le forum qui connaissent déjà la réponse ! :slight_smile:

Pour mettre à jour une autre entité, je dirai qu’il faut utiliser un template. En tout cas, j’ai pas mal appris en lisant ton code et merci pour le partage.

Pour les logs, effectivement on en a pour chaque add-on. Mais pas trouvé pour les entités type RESTFull. Et ce n’est pas dans les logs généraux HA. Je dois mieux comprendre le debug et la gestion des erreurs pour avoir confiance. Encore du chemin et pas mal de tests pour moi, avant de décider de migrer ma eedomus hyper fiable…
J’ai aussi du mal à me dire qu’il faut relancer HA à chaque modif du fichier config. Outre le fait que c’est fastidieux, je ne me vois pas faire cela en permanence en prod, avec le chauffage, la piscine, la sécurité, etc. etc. Je me demande si les gens utilisent des machines de test.
Mais bon, cela mériterait de lancer une autre discussion sur le debug et la gestion des erreurs. Je m’éloigne du sujet REST - IPX800.

Hello,
Peut-être que tu avais déjà trouvé ça, mais je suis tombé sur ces paramètres de log:

    homeassistant.components.rest_command: debug
    homeassistant.components.rest.sensor: debug

Et la documentation qui va avec pour comprendre d’où ca vient et comment l’utiliser :+1:

Excellent !! Juste quand j’en avais besoin. Je cherchais le paramétrage dans l’interface.
Un grand merci @Clemalex et @gremlinsy.

Bonjour tout le monde,
Je suis en train de lire vos messages et voir vos implémentations des IPX800V3 sur Home assistant.
C’est très intéressant.
Ce sujet étant assez ancien, avez-vous changé votre façon de votre les choses concernant l’IPX800v3 ou continuez-vous à utiliser ces implémentations ?
Merci

Une intégration existe pour l’ipx800 v4, mais pas la v3 a ma connaissance. Pas de changement pour moi.

Oui en effet, du coup j’ai commencé à appliquer vos configurations, mais je me suis dit qu’avec 3 ans de recul ça avait surement évolué.
Merci pour la réponse.

bonjour,
j’ai parcours tout le sujet concernant l’intégration de l’IPX800v3 sur HA. J’ai suivi la méthode de @gremlinsy et plus particulièrement la version API XML. Du coup, j’ai bien les remontés d’état des entrées mais au bout de 15s impossible d’avoir un retour d’état immédiat avec la méthode nodered. J’ai fait un couac quelques parts mais impossible de trouver ou? est ce qu’il faut mettre tout les fichiers même sensors.yaml de API JSON
Du coup, j’appelle à l’aide.
je vous remercie par avance

Je débute sur HA ( en provenance de vera et jeedom ) et grâce a cette merveilleuse thread j’ai pas mal avancé sur mon intégration IPX800v3.

je voulais que ca soit HA native, et éviter les « polling » donc avoir le push depuis l’IPX.
voici ce que j’ai finalement pu mettre en place.

  • un package IPX800
  • le sensor REst global qui maintient les valeurs de l’ipx et qui renseigne les autres sensors
  • les digital entry, counter, analog sont simple
  • les relay sont commandé par l’API rest
  • une automation reçoit un webhook (GET) depuis l’IPX et commande le refresh du sensor Rest global

ca donne ceci:

dans configuration.yaml

# packages by real 'objects'
homeassistant:
  packages: !include_dir_named packages

dans /packages/ipx800v3.yaml ceci

#########################
# IPX 800
#########################

#Asynchronous notification from IPX on webhook
#GET http://192.168.0.35:8123/api/webhook/ipx800-push-XXXXXXXXXXXXXXX

rest_command:
  set_ipx800:
    url: http://192.168.0.10/preset.htm?{{ num }}={{ state }}
  configpush_ipx800:
    url: http://192.168.0.10/protect/settings/push3.htm?channel=65&cmd1={{ urlencoded_callback }}

rest:
  - resource: http://192.168.0.10/globalstatus.xml
    method: GET
    scan_interval: 15

    sensor:
      - name: IPX800 global status
        unique_id: ipx800_global_status
        value_template: "{{ now().isoformat(timespec='seconds')  }}"
        json_attributes_path: $.response
        json_attributes:
          - version
          - config_hostname
          - led0
          - led1
          - led2
          - led3
          - led4
          - led5
          - led6
          - led7
          - btn0
          - btn1
          - btn2
          - btn3
          - btn4
          - btn5
          - btn6
          - btn7
          - analog0
          - analog1
          - count0
          - count1

      # TC4012 (X * 0.323) - 50
      - name: "Temp Ext"
        unique_id: ipx_temp_ext
        device_class: temperature
        unit_of_measurement: "°C"
        value_template: "{{ (state_attr('sensor.ipx800_global_status', 'analog0') | float * 0.323 - 50) | round(1)  }}"

      # TC4012 (X * 0.323) - 50
      - name: "Temp Tuyau"
        unique_id: ipx_temp_tuyau
        device_class: temperature
        unit_of_measurement: "°C"
        value_template: "{{ (state_attr('sensor.ipx800_global_status', 'analog1') | float * 0.323 - 50) | round(1)  }}"

    binary_sensor:
      - name: "IPX Portail Ouvert"
        unique_id: ipx_portail_ouvert
        device_class: garage_door
        value_template: '{{ is_state_attr("sensor.ipx800_global_status", "btn0","dn") }}'

      - name: "IPX BTN7"
        unique_id: ipx_btn7
        device_class: garage_door
        value_template: '{{ is_state_attr("sensor.ipx800_global_status", "btn7","dn") }}'

switch:
  - platform: template
    switches:
      ipx_led0:
        friendly_name: "IPX No Arrosage"
        unique_id: ipx_led0
        value_template: '{{ is_state_attr("sensor.ipx800_global_status", "led0","1") }}'

        turn_on:
          - service: rest_command.set_ipx800
            data:
              num: set1
              state: 1
          - service: homeassistant.update_entity
            target:
              entity_id: sensor.ipx800_global_status

        turn_off:
          - service: rest_command.set_ipx800
            data:
              num: set1
              state: 0
          - service: homeassistant.update_entity
            target:
              entity_id: sensor.ipx800_global_status

      ipx_led1:
        friendly_name: "IPX Lumières Portail"
        unique_id: ipx_led1
        value_template: '{{ is_state_attr("sensor.ipx800_global_status", "led1","1") }}'
        turn_on:
          - service: rest_command.set_ipx800
            data:
              num: set2
              state: 1
          - service: homeassistant.update_entity
            target:
              entity_id: sensor.ipx800_global_status
        turn_off:
          - service: rest_command.set_ipx800
            data:
              num: set2
              state: 0
          - service: homeassistant.update_entity
            target:
              entity_id: sensor.ipx800_global_status

automation:
  - id: "1705485191092"
    alias: Ipx800 Push
    description: Push notification from IPX 800
    trigger:
      - platform: webhook
        allowed_methods:
          - GET
        local_only: true
        webhook_id: ipx800-push-XXXXXXXXXXXXX
    condition: []
    action:
      - service: homeassistant.update_entity
        target:
          entity_id: sensor.ipx800_global_status
      - service: system_log.write
        data:
          level: warning
          message: The push from IPX800 is received - v2
    mode: single

Prochaines etapes:

  • voir si je peux baisser le scan_interval. avec le push pas besoin de bombarder mon ipx
  • voir si je peux automatiser la configuration du push dans l’IPX avec le rest « configpush_ipx800 » mais faut que je trouve comment urlencoder un parametre, peut etre avec Jinja
  • un truc que je pige pas, est comment raccrocher tous mes « sensors » a un « appareil » dans HA

si vous avez des idées ou améliorations en tête, n’hésitez pas :slight_smile:

1 « J'aime »

Merci pour le partage, très utile ! J’ai ainsi découvert les webhooks… ça va m’aider à implémenter une solution sans polling de l’IPX !