Ipx800 v3

L’IPX800v3 est un « petit » automate bien connu des bidouilleurs fous :stuck_out_tongue_winking_eye:

Il dispose de sorties (Relais) , d’entrées analogiques et digitales.
On peut également y raccorder des extensions pour piloter des volets roulants, mesurer des consommations électriques, mesurer le niveau de Ph et de Chlore si on a une piscine … bref un vrai couteau suisse

Plus de détails sur ces cartes ici GCE Electronics: Domotique - Automatisme - Industrie

Cet automate possède également une API qui permet de piloter les sorties mais également de pouvoir récupérer les états associés aux différents capteurs.

La documentation de l’API se trouve ici GCE Electronics

Via cette API on peut donc intégrer l’IPX800v3 à notre Home Assistant

  • Pilotage d’un relais

Pour la syntaxe extrait de la documentation API de GCE ci-dessous

Commander une sortie

La commande : http://IPX800_V3/leds.cgi?

Paramètre : led=x avec x le numéro de la sortie, de 0 à 31.

Cette syntaxe permet la commande directe d'une sortie. Cette syntaxe commandera une impulsion si la sortie concernée a été préréglée avec au moins un Tb non nul dans le site embarqué de l'IPX. Sinon la commande inversera tout simplement l'état de la sortie, comme un télérupteur.

On va utiliser l’intégration « Command line »

Cette intégration va nous permettre d’envoyer des requêtes Http.
Ajouter dans le configuration.yaml

switch:
  - platform: command_line
    switches:
      ipx800_r1:
        command_on: curl "http://192.168.0.25/leds.cgi?led=0"
        friendly_name: Fermeture volet piscine

ATTENTION Il ne faut pas mettre de majuscule dans le nom des switches

On obtient donc un switch dans l’UI qui lors de l’appui sur « bouton ON » symbolisé par le petit éclair non barré enverra l’instruction au relais 1 de l’IPX800

Annotation 2020-04-13 102539

Récupération de l’état des entrées analogiques :

L’API nous met à disposition les valeurs des entrées analogiques au format Json :+1:

Commande pour la récupération des Analogiques :

http://IPX800_V3/api/xdevices.json?cmd=30

Exemple de Réponse :

`{"product":"IPX800_V3","AN1":0,"AN2":0,"AN3":209,"AN4":198,"AN5":0,"AN6":0,"AN7":0,"AN8":0,"AN9":0, "AN10":0,"AN11":0,"AN12":0,"AN13":748,"AN14":2513,"AN15":0,"AN16":0}`

On va utiliser l’intégration « Restful »

Ajouter dans le configuration.yaml

sensor:
  - platform: rest
    resource: http://192.168.0.25/api/xdevices.json?cmd=30
    name: Chlore piscine
    unit_of_measurement: 'mV'
    value_template: '{{ value_json["AN14"] - 2500 }}'

On récupère donc tout simplement la valeur de l’entrée analogique AN14
On notera que l’on extrait les données brutes et qu’il convient d’appliquer des formules de conversion pour avoir les valeurs interprétables sur certains capteurs, dans mon cas la valeur d’une sonde de Chlore raccordée sur le module X200Ph

On retrouve ces formules de conversion ici Formules de calcul

Et voici ce que cela donne dans l’UI

Annotation 2020-04-13 104038

1 « J'aime »

Bonjour,
Pourquoi ne pas utiliser un switch rest plutôt que le switch command_line ? Ce serait plus propre.

Salut,

j’avais essayé avec le switch commande_line mais je ne me souviens plus pourquoi je n’arrivais pas à le faire fonctionner …

Si jamais tu as une autre version avec un switch command_line n’hésite pas à partager.

@++

Hello,
@mycanaletto m’a aidé pour la solution et cela fonctionne.

Voici mon code pour piloter un relai :

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'
1 « J'aime »

Joli @Argonaute
Well done
Ca ressemble à quoi stp sur ta carte ?

Bah, à pas grand chose pour l’instant. Pour être franc, je ne suis que depuis quelques jours sur HA et j’apprend et fais des tests.
Je viens de tester un binary sensor template pour changer l’icone quand ou active ou désactive le relai. Mais je n’ai pas décidé pour l’interface. J’aime les chose dépouillées.

Superbe accueil par la communauté au passage. Juste dommage qu’il y ai 2 forums francophones. Il faudrait les fusionner. Si les fondateurs de forum.hacf.fr et forum.home-assistant.lu lisent cela…

2 « J'aime »

bonjour a tous,
sur mon installation j’ai

  • 2 compteurs eau GIOANOLA
  • 2 compteurs Energie 45A
    ces derniers sont relier a mon IPX800v3, et je souhaiterais remonter via home assistant la consommation en EAU et Electricité, ils sont correctement connecté a mon IPX.

merci pour votre aide?

Hello,
J’imagine que tu as utilisé les compteurs de ton IPX800 ?
Si oui, tu peux les lire en utilisant l’intégration scrape.

  1. Tu dois avoir ton IPX800 en IP fixe (192.168.1.100 dans l’exemple).

  2. Vérifies si l’url suivante te retourne bien les valeurs de tes compteurs dans un explorer :
    http://user:password@192.168.1.100/status.xml
    Ce en remplaçant user et password par tes accès bien entendu.

  3. Test 1 premier compteur. Rajoutes dans config.yaml un nouveau sensor sous la plateforme scape (pour lire ici le compteur 1).

scrape:
  - resource: 'http://user:password@192.168.1.100/status.xml'
    sensor:
      - name: "MonCompteur"
        select: "count1"
  1. Va dans l’outils de développement pour vérifier si la config est bonne, vérifies les logs. Si ok, en redémarrant, tu devrais avoir une nouvelle entité MonCompteur créée.

  2. Si ok, tu peux perfectionner en rajoutant le state_class, un device class (power par ex) , une unité de mesure (kWh, L…)et une formule pour par exemple diviser la valeur par 1000 pour avoir transformer des W en kWh.

scrape:
  - resource: 'http://user:password@192.168.1.100/status.xml'
    sensor:
      - name: "MonCompteur"
        select: "count1"
        unit_of_measurement: kWh
        device_class: "power"
        state_class: "measurement"
        value_template: '{{ value|float(0) / 1000 }}'
  1. Si tout marche, rajoute tes autres compteurs.

  2. Quand tout fonctionnera, tu peux éventuellement déplacer le code de gestion de ton IPX800 dans config.yaml dans un package appelé ipx800.yaml (mais c’est optionnel). Je ne détaille pas ici comment gérer les packages.

1 « J'aime »

merci, je testerais ca dés que possible, je vous tiens au courant…

grâce a vos conseils j’ai réussi a récupérer les infos souhaitées.
ci-joint mon fichier configuration.yaml

scrape:	
  - resource: 'http://admin:xxxxxx@192.168.10.145/status.xml'
    sensor:
      - name: "EAU-Paul-D"
        select: "count3"
        unit_of_measurement: L
        device_class: "water"
        state_class: "measurement"
        value_template: "{{ value|float(0)}}"



utility_meter:
#Compteur dernière heure
  eau_paul_heure:
    source: sensor.eau_paul_d
    cycle: hourly
#Compteur journalier
  eau_paul_jour:
    source: sensor.eau_paul_d
    cycle: daily
#Compteur semaine
  eau_paul_semaine:
    source: sensor.eau_paul_d
    cycle: weekly
    
#Compteur mensuel
  eau_paul_mois:
    source: sensor.eau_paul_d
    cycle: monthly
#Compteur annuel
  eau_paul_annee:
    source: sensor.eau_paul_d
    cycle: yearly
	

compteur

encore merci pour votre aide

1 « J'aime »

Bonjour,
Je suis nouveau sur HA et j’aimerais intégrer mon IPX800v3 sur HA.
Cela fait plusieurs jour que je teste les différents fichiers de conf proposé mais depuis le changement de version 2023… des syntaxes ont changés.
Ceci étant, j’aimerais :
1- Avoir mes 8 sorties pilotable de mon IPX800v3 depuis mon Dashboard.
J’ai mis dans mon fichier de conf :
command_line: !include_dir_list command_line/

switch:
    name: ipx800_1
    command_on: 'curl "http://192.168.0.150/preset.htm?led1=1" >/dev/null'
    command_off: 'curl "http://192.168.0.150/preset.htm?led1=0" >/dev/null'
    command_state: 'curl "http://192.168.0.150/api/xdevices.json?cmd=10"'
    value_template: '{% set status = value | regex_findall_index("<led0>(.*)</led0>") %} {% if status == "1" %} true {%- endif -%}'

Je n’ai pas d’erreur lors de la vérification mais je ne retrouve pas mon switch et je ne sais pas comment les contrôler ou l’ajouter à mon dashboard.

D’avance merci pour votre assistance.

Hello,

Voici ce qui fonctionne chez moi, ce qui semble identique :

command_line:
  - switch:
      name: ipx800_spots_terrasse    # sortie 1
      unique_id: ipx800_spots_terrasse
      command_on: 'curl http://user:mdp@192.168.5.99/preset.htm?led1=1 >/dev/null'
      command_off: 'curl http://user:mdp@192.168.5.99/preset.htm?led1=0 >/dev/null'
      command_state: 'curl http://mdp:mdp@192.168.5.99/status.xml'
      value_template: '{% set status = value | regex_findall_index("<led0>(.*)</led0>") %} {% if status == "1" %} true {%- else -%} false {%- endif -%}'
      command_timeout: 20

Tu as bien switch à la suite de command_line ?
Tu redémarres bien HA et n’a pas d’erreur dans les logs ?

Bonjour et merci pour votre réponse.
Je viens de copier votre conf dans configuration.yaml (j’ai bien corrigé l’URL pour la mettre en adéquation avec mon ipx800v3).
J’ai contrôlé dans « outils de développement » → « YAML » si je n’avais pas d’erreur (ce qui est le cas)
J’ai cliqué sur Redémarrer :
image
Mais où retrouver mon Switch ? (je pense que mon problème ce situe a ce niveau, où retrouver l’élément que je viens de définir et comment créer un bouton).

encore merci.

Une entité a due être créée (bien redémarrer HA).
Voir sous paramètres- appareil et services-entités.
Si pb vérifier les logs.

Bonjour,
Finalement j’ai redémarrer HA sans faire de « Redémarrage rapide » et j’ai bien une entité :

Le problème venait certainement de cette phase.

Je vais essayer de mettre les autres switchs et les renommer.
Merci pour votre aide.

Bonjour à tous,
je viens d’essayer avec 2 switchs dans le fichier de conf :

command_line:
  - switch:
      name: ipx800_1 # sortie 1
      unique_id: ipx800_1
      command_on: "curl http://192.168.0.150/preset.htm?led1=1 >/dev/null"
      command_off: "curl http://192.168.0.150/preset.htm?led1=0 >/dev/null"
      command_state: "curl http://192.168.0.150/status.xml"
      value_template: '{% set status = value | regex_findall_index("<led0>(.*)</led0>") %} {% if status == "1" %} true {%- else -%} false {%- endif -%}'
      command_timeout: 20
  - switch:
      name: ipx800_2
      unique_id: ipx800_2
      command_on: 'curl "http://192.168.0.150/preset.htm?led2=1 >/dev/null'
      command_off: 'curl "http://192.168.0.150/preset.htm?led2=0 >/dev/null'
      command_state: 'curl "http://192.168.0.150/status.xml'
      value_template: '{% set status = value | regex_findall_index("<led2>(.*)</led2>") %} {% if status == "1" %} true {%- endif -%}'

ça marche.
J’ai voulu inclure un fichier de conf pour les command_line :

command_line: !include_dir_list command_line/

avec dans le dossier « command_line » un fichier nommé : ipx800v3.yaml contenant :

switch:
      name: ipx800_1 # sortie 1
      unique_id: ipx800_1
      command_on: "curl http://192.168.0.150/preset.htm?led1=1 >/dev/null"
      command_off: "curl http://192.168.0.150/preset.htm?led1=0 >/dev/null"
      command_state: "curl http://192.168.0.150/status.xml"
      value_template: '{% set status = value | regex_findall_index("<led0>(.*)</led0>") %} {% if status == "1" %} true {%- else -%} false {%- endif -%}'
      command_timeout: 20
switch:
      name: ipx800_2
      unique_id: ipx800_2
      command_on: 'curl "http://192.168.0.150/preset.htm?led2=1 >/dev/null'
      command_off: 'curl "http://192.168.0.150/preset.htm?led2=0 >/dev/null'
      command_state: 'curl "http://192.168.0.150/status.xml'
      value_template: '{% set status = value | regex_findall_index("<led2>(.*)</led2>") %} {% if status == "1" %} true {%- endif -%}'

là je n’ai plus que le dernier Switch (ipx800_2).

Avez-vous une idée je ne trouve pas d’exemple avec plusieurs switchs :frowning:

Merci