Custom Component: GCE IPX800

Hello

I made a custom component to control a GCE IPX800 v4 and some of its extensions (X-Dimmer, X-PWM…).

It’s possible to add:

  • switch (relay, virtual output, virtual input…)
  • light (relay, dimmer, xpwm, RGB w/ xpwm and RGBW w/ xpwm)
  • sensor (analog input)
  • binary_sensor (virtual_output…)

More details in the GitHub repo:

1 Like

Hello,

I try to install your integration.
But i start with HA.
Can you tell me : how i can install it ?
I ve try to past the link from your github but it’s not working :frowning:

Thanks

Hello
I juste upload the python package which was in dependency, please download again the custom component and try again

Hello @Mati24,

Je commence sur HA, j’ai une question dans ta doc tu parles du pypix800 qui est requit. Cependant tu ne dis pas ou faut le mettre dans ta doc et comment bref je voulais juste savoir si il était possible de m’indiquer le répertoire. Si il y a plus à faire que de mettre le fichier pyton dit le moi. PS: Ta première doc je l’ai lu et tout me semble bon j’attends juste de tes nouvelle pour faire un restart…

image

Merci pour ta prochaine réponse.

cdt

Home-Assistant s’occupe des dépendances tout seul, j’ai mis à jour le README pour que ça plus compréhensif :slight_smile:

Pour information il est important de vérifier le temps d’interrogation sur vos box domotique, si vous utilisez Jeedom par exemple aller dans le plugin et dans la configuration pour augmenter ce temps d’interrogation. Trop de demande bloque la connexion vers l’ipx et sous HA cela ne fonctionnera tous simplement pas.

Merci à Mati24 de m’avoir aidé.

For more information, it is important to check the polling time on your home automation box, if you use Jeedom, for example, go to the plugin and in the configuration to increase this polling time. Too much call is blocking the connection to ipx and under HA it just won’t work.

Thanks to Mati24 for helping me.

@Mati24 tout d’abord merci pour ton travail…

J’aurais besoin d’un peu d’aide, j’explique vite fait la situation, je tourne sur Jeedom actuellement avec ma domotique quasi complète sur ipx800v4 (à l’exception de quelques modules zigbee).

Tout se passe correctement, mais j’aimerais bien essayer HA.

Le seul frein, l’intégration de l’ipx.

Ton travail apparait donc pour moi comme une bénédiction, mais malheureusement je n’arrive pas (encore) à en profiter.

J’ai téléchargé et dezippé, placé le dossier “custom_components/ipx800” dans un répertoire “custom_components” que j’ai donc spécialement créé.

Cela fait donc une redondance (config/custom_components/custom_components/ipx800/ipx800)

Jusque là, j’ai bon ou pas?

Ensuite, si je comprends bien, je dois modifier le ficher configuration.yaml?
Actuellement, il ressemble à ça:

Configure a default setup of Home Assistant (frontend, api, etc)

default_config:

Text to speech

tts:

  • platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

Ou dois-je ajouter les lignes de commandes que l’on trouve dans le readme original? Merci

Salut,

il ne doit y avoir qu’une fois chaque nom, donc tu dois avoir config/custom_components/ipx800 avec les fichiers .py dans ce dernier.
Ensuite tu dois ajouter la configuration dans ton fichier .yaml en effet. Regarde l’exemple

je suis actuellement en train de travailler pour ajouter l’intégration dans le core pour ne pas avoir à gérer ça. Cependant la partie en yaml restera obligatoire je pense avec le nombre de paramètre à configurer

Merci pour cette réponse qui clarifie les choses.

J’essayerais ça dans la soirée…

Edit:

Je progresse doucement.
J’ai donc replacé correctement les fichiers dans config, et modifié le yaml afin d’obtenir ceci:

Configure a default setup of Home Assistant (frontend, api, etc)

default_config:

Text to speech

tts:

  • platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

####################################################

IPX

800

####################################################

ipx800:

  • name: IPX00
    host: “adresse ip de l’ipx”
    api_key: “apikey”
    username: “Nom d’utilisateur de l’ipx”
    password: “mot de passe ipx”
    scan_interval: 10
    devices:
    • name: Lumière chambre
      type: relay
      component: light
      id: 1
    • name: Descente coupole
      type: relay
      component: switch
      id: 2
    • name: Montée coupole
      type: relay
      component: switch
      id: 3
    • name: Lumière salon arrière
      type: relay
      component: light
      id: 4
    • name: Lumière salle à manger
      type: relay
      component: light
      id: 5
    • name: Lumière corridor arrière
      type: relay
      component: light
      id: 6
    • name: Lumière cuisine
      type: relay
      component: light
      id: 7

List of configuration parameters

{% configuration %}
name:
description: Name of the IPX800.
required: true
type: name
host:
description: Hostname or IP address of the IPX800.
required: true
type: host
port:
description: HTTP port.
required: false
default: 80
type: port
api_key:
description: API key (need to be activate in Network => API)
required: true
type: string
username:
description: Username (for X-PWM control only)
required: false
default: VA
type: string
password:
description: User’s password (for X-PWM control only)
required: false
type: string
devices:
component:
description: device type
required: true
type: string
values: “switch”, “light”, “cover”, “sensor” or “binary_sensor”
name:
description: friendly name of the device
required: true
type: string
device_class:
description: custom device_class for binary_sensor and sensor only, see Home Assistant
required: false
type: string
unit_of_measurement:
description: set a unit of measurement for sensor only
required: false
type: string
transition:
description: transition time in millisecond, for lights only trough X-Dimmer or X-PWM
required: false
default: 500
type: int
icon:
description: custom icon
required: false
type: string

Type to control/Get value, only one otherwise the device will not be added

type:
description: type of input/output on the IPX800 or an extension.
required: true
type: string
values: “relay”, “analogin”, “digitalin”, “virtualin”, “virtualout”, “xdimmer”, “xpwm”, “xpwm_rgb”, “xpwm_rgbw”, “xthl”, “x4vr”, “x4fp”, “relay_fp”
id:
description: id of type output, required for all except xpwm_rgb and xpwm_rgbw type
required: false
type: int
ext_id:
description: id of X-4VR extension, required only for x4vr and x4fp type
required: false
type: int
ids:
description: ids of channel for xpwm_rgb, xpwm_rgbw type or relay as climate component
required: false
type: list of int
{% endconfiguration %}

J’ai ensuite configuré un push pour le relay 1, à savoir:

/api/ipx800/relay.1/on

Il me reste donc à trouver comment récupérer l’info dans Hass. Désolé de me répéter, mais je suis débutant dans hass…

Par contre, j’ai plusieurs erreurs sur mon config.yaml, je ne dois pas ajouter la seconde partie?
A partir de " ## List of configuration parameters"

Merci.

Bonjour,
Je débute aussi dans HASS, je viens de Jeedom mais j’avais envie de voir un peu ce qui se passait ailleurs. C’est quand même loin d’être simple à mettre en oeuvre. Autant dans Jeedom certaines choses ne m’ont jamais semblé claires mais là… et pourtant je suis informaticien !!
Bref, je suis aussi en galère pour mettre en place les remontées de l’IPX.
@MrJspk, effectivement, il ne faut pas copier la partie qui commence par ## List of…
C’est la description des champs avec les valeurs attendues.

Moi j’ai 2 questions :

  • j’ai l’impression de passer mon temps à redémarrer le serveur… c’est vraiment pénible ! Il n’y pas un autre solution, surtout en période de configuration, c’est insupportable et long !
  • par rapport à l’add on en lui même, déjà un immense BRAVO et MERCI à @Mati24. Je n’ai pas encore réussi à le faire fonctionner mais je vais y arriver. La question c’est de savoir comment on fait pour faire apparaitre les relays sur le tableau de bord de HASS… ? ça parait tellement simple dans Jeedom et là tellement compliqué !
    Merci.

Salut,
Un custom_component nécessite le redémarrage en effet, par contre home-assistant suffit (via configuration, servers control, restart), pas de besoin de redémarrer l’hôte (VM, rasp…), sur une configuration vierge ça prend 1 à 2 mn max logiquement.
Là c’est de la configuration Home Assistant classique, regarde ici https://www.home-assistant.io/lovelace/ il y a une vidéo

Et bien ça avance, merci de vos réponses à tout les deux.

Pour “list of configuration…”, il me semblait bien que je ne devais pas l’ajouter, mais quand je l’enlève et que je vérifie le code, j’ai encore cette erreur:

“Component error: ipx800 - Integration ‘ipx800’ not found.”

list of configuration parameter ne doit pas être mis dans le fichier yaml, c’est une liste des paramètres qui peuvent être mis, avec les valeurs par défaut et les options possible.

il faut juste mettre la partie Exemple

pour commencer, mettez le minimum, du genre

  - name: IPX800
    host: "192.168.1.240"
    api_key: "apikey"
    devices:
      - name: Test relais IPX
        type: "relay"
        component: "switch"
        id: 1

En remplaçant host et api_key correspondant à votre configuration

Pour le message “Component error: ipx800 - Integration ‘ipx800’ not found.” ça veut dire que le dossier custom_component/ipx800 n’a pas été copié dans le dossier /config de home assistant (ou alors pas au bon endroit)

Et bien, après un redémarrage complet du raspberry, tout fonctionne à merveille.
Un tout grand merci, je vais pouvoir développer ça.

Formidable boulot :wink:

Bonjour @Mati24 !
Merci pour le composant qui à l’air d’être très pratique. Je ne l’ai pas encore testé je viens de l’installer…

Je me suis dit que j’allais faire un petit retour d’installation. Je suis en container docker, et j’avais l’erreur suivante dans les logs de HA lorsque j’essayais de contrôler ma config :

Logger: homeassistant.loader
Source: custom_components/ipx800v4/__init__.py:7
Integration: ipx800v4
First occurred: 22:51:35 (5 occurrences)
Last logged: 23:11:44

Error loading custom_components.ipx800v4. Make sure all dependencies are installed
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/loader.py", line 609, in _load_file
    module = importlib.import_module(path)
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/config/custom_components/ipx800v4/__init__.py", line 7, in <module>
    from pypx800 import IPX800, Ipx800CannotConnectError, Ipx800InvalidAuthError
ModuleNotFoundError: No module named 'pypx800'

Pour résoudre, j’ai du installer manuellement le module pypx800 de cette façon :

  1. Connecté en SSH sur mon RaspberryPi2
  2. Commande sudo docker exec -it homeassistant /bin/bash (vérifier le nom de votre docker avec sudo docker ps si nécessaire
  3. Ca ouvre une autre commande, cette fois ci à l’intérieur du docker
  4. Commande pip install pypx800
  5. Commande exit pour sortir du docker

Et cette fois-ci ça marche.

Voila, en espérant que ça aide

Merci pour la procédure :+1:
Je n’explique pas pourquoi chez certains le module ne s’installe pas tout seul :thinking:

Pas de souci !

Par contre petite question, lorsque je change le “name” d’un composant dans le fichier de config, l’ancien reste affiché dans mes appareils et dans mes entités, même après rechargement ? Comment nettoyer ces anciens id ?

Tu peux supprimer l’entité en allant dessus normalement

Ah ben oui… Je l’ai fait hier mais ils n’ont pas disparu, et aujourd’hui en retournant voir ils ne sont plus là :slight_smile:

Dernière question (après j’arrête parce que normalement j’aurai déjà bien fait le tour) : j’ai vu un thread quelque part, mais que j’arrive plus à retrouver, où ça parlait de mettre à jour toutes les entrées/sorties en un seul push. Quelque chose du genre /api/ipx800v4_data/$D&$R&$A&$C&$VI&$VO... qui enverrait un unique JSON parsé par ton composant. Etant donné que la config contient le “type” et l’“id” de chaque entité déclarée, ça avait l’air de fonctionner.

Malheureusement, je n’arrive plus à retrouver ce thread et donc je me demande si j’ai rêvé ou si ça fonctionne ? Ca te dit quelque chose ?

Merci

Bonjour @Mati24
J’ai retrouvé le fil où ça parlait du push full, et en fait il s’agit du plugin Jeedom. Mais à mon avis ça serait possible de reproduire ça sur homeassistant : peut-être même que ton plugin le fait déjà ?

Bon par contre j’ai un souci avec le push, même avec une info unique… J’ai un scenario configuré sur l’IPX :

Event = Entrée digitale “interrupteur terrasse” — Action ON/OFF — PUSH HA

Mon push est configuré comme suit :

serveur (https://?) : mon.domaine.com
port : 8123
identifiant : null
URL ON : /api/ipx800v4/binary_sensor.inter_terrasse/on
URL OFF : /api/ipx800v4/binary_sensor.inter_terrasse/off
Méthode : GET
SSL : enabled

J’ai essayé avec et sans le “https” dans l’url du serveur.
Lorsque l’actionne mon interrupteur, le scénario est bien exécuté car j’ai testé de mettre à jour une entrée virtuelle à la place du push et ça l’actionne bien. Par contre rien ne se passe côté homeassistant.

Lorsque j’essaye de faire exactement le meme push depuis un client comme POSTMAN, aucun problème, ça change correctement le statut de l’inter dans homeassistant. Du coup… je ne comprends pas ce qui ne va pas… Le scenario a l’air bon, le push a l’air bon, la config HA a l’air bonne, mais quand on met tout ensemble ça ne fait rien…
Il y’a un moyen de visualiser les logs du plugin IPX coté HA pour voir si ça reçoit bien quelque chose ?

Merci d’avance !