Intégration IPX800 Home Assistant

avec le slider cela fonctionne.
tu pourrais me donner un exemple de push pour un volet? Je suis pas sur de ce que je doit mettre.

est-ce que tu as des erreurs dans les logs quand ça ne marche pas avec les boutons ?

pas besoin de push avec les volets, c’est utile avec les entrées digitales par exemple, pour déclencher un scénario immédiatement depuis hass par exemple

Logger: homeassistant.components.recorder
Source: components/recorder/__init__.py:379
Integration: Recorder ([documentation](https://www.home-assistant.io/integrations/recorder), [issues](https://github.com/home-assistant/home-assistant/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+recorder%22))
First occurred: 16:50:55 (1 occurrences)
Last logged: 16:50:55

Event is not JSON serializable: <Event platform_discovered[L]: service=load_platform.cover, platform=ipx800, discovered=[{'config': OrderedDict([('component', 'cover'), ('name', 'Fixe Terrasse'), ('type', 'x4vr'), ('ext_id', 1), ('id', 2), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Chambre Terrasse'), ('type', 'x4vr'), ('ext_id', 2), ('id', 3), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Chambre Jardin'), ('type', 'x4vr'), ('ext_id', 1), ('id', 4), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Fixe TV'), ('type', 'x4vr'), ('ext_id', 2), ('id', 1), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Baie 2m'), ('type', 'x4vr'), ('ext_id', 1), ('id', 1), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Baie 3m'), ('type', 'x4vr'), ('ext_id', 1), ('id', 1), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Cuisine'), ('type', 'x4vr'), ('ext_id', 2), ('id', 4), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Baie Parentale'), ('type', 'x4vr'), ('ext_id', 1), ('id', 1), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Pano Parentale'), ('type', 'x4vr'), ('ext_id', 1), ('id', 1), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Fixe Entree'), ('type', 'x4vr'), ('ext_id', 1), ('id', 1), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}, {'config': OrderedDict([('component', 'cover'), ('name', 'Sdb Parentale'), ('type', 'x4vr'), ('ext_id', 3), ('id', 4), ('transition', 0.5)]), 'controller': <custom_components.ipx800.IpxController object at 0x7fb749972790>}]>

le Event is not JSON serializable c’est un soucis qui n’a rien à voir que je dois résoudre
j’attends le retour de @boutXIII pour savoir si c’est général

j’ai l’impression qu’il y en un soucis de détection des volets sur différents x4vr.
J’ai bien deux id et ext-id différents et pourtant il gère le même volet…
Par ex:

- component: cover
        name: Fixe Terrasse
        type: x4vr
        ext_id: 1
        id: 2

- component: cover
        name: Fixe TV
        type: x4vr
        ext_id: 2
        id: 1

J’ai aussi ça comme erreur:

    Unexpected error fetching ipx800 data: ('IPX800 api request error, url: %s`r%s', 'http://X.X.X.X:X/api/xdevices.json?key=removed&Get=XPWM%7C1-24', {'product': 'IPX800_V4', 'status': 'Error', 'PWM1': 0, 'PWM3': 0, 'PWM5': 0, 'PWM7': 0, 'PWM9': 0, 'PWM11': 0, 'PWM13': 0, 'PWM15': 0, 'PWM17': 0, 'PWM19': 0, 'PWM21': 0, 'PWM23': 0})
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 143, in async_refresh
    self.data = await self._async_update_data()
  File "/config/custom_components/ipx800/__init__.py", line 261, in _async_update_data
    return await self.hass.async_add_executor_job(self.ipx.global_get)
  File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/lib/python3.8/site-packages/pypx800/__init__.py", line 60, in global_get
    self._request_api({"Get": "XPWM|1-24"})
  File "/usr/local/lib/python3.8/site-packages/pypx800/__init__.py", line 30, in _request_api
    raise Exception(
Exception: ('IPX800 api request error, url: %s`r%s', 'http://X.X.X.X:X/api/xdevices.json?key=removed&Get=XPWM%7C1-24', {'product': 'IPX800_V4', 'status': 'Error', 'PWM1': 0, 'PWM3': 0, 'PWM5': 0, 'PWM7': 0, 'PWM9': 0, 'PWM11': 0, 'PWM13': 0, 'PWM15': 0, 'PWM17': 0, 'PWM19': 0, 'PWM21': 0, 'PWM23': 0})

En effet erreur dans le code, j’ai fix dans la version 1.6

Hello,

Avec la dernière version, le soucis des extension est bien réglé.

J’ai quelques messages d’erreurs de temps en temps par contre:

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 118, in _handle_refresh_interval
    await self.async_refresh()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 192, in async_refresh
    update_callback()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 281, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 305, in _async_write_ha_state
    sstate = self.state
  File "/usr/src/homeassistant/homeassistant/components/cover/__init__.py", line 192, in state
    closed = self.is_closed
  File "/config/custom_components/ipx800/cover.py", line 54, in is_closed
    return int(self.coordinator.data[f"VR{self._ext_id}-{self._id}"]) == 100
KeyError: 'VR1-3'




('IPX800 api request error, url: %s`r%s', 'http:///api/xdevices.json?key=removed&SetVR12=101', {'product': 'IPX800_V4', 'status': 'Error'})
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 125, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1308, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1343, in _execute_service
    await handler.func(service_call)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 208, in handle_service
    await self.hass.helpers.service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 454, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 583, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 485, in _handle_entity_call
    await result
  File "/usr/src/homeassistant/homeassistant/components/cover/__init__.py", line 287, in async_stop_cover
    await self.hass.async_add_job(ft.partial(self.stop_cover, **kwargs))
  File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/config/custom_components/ipx800/cover.py", line 70, in stop_cover
    self.control.stop()
  File "/usr/local/lib/python3.8/site-packages/pypx800/__init__.py", line 351, in stop
    self._request_api(params)
  File "/usr/local/lib/python3.8/site-packages/pypx800/__init__.py", line 30, in _request_api
    raise Exception(
Exception: ('IPX800 api request error, url: %s`r%s', 'http:///api/xdevices.json?key=removed&SetVR12=101', {'product': 'IPX800_V4', 'status': 'Error'})

Et as-t-il possibilité de créer un bouton « Persienne » avec les boutons Monter/Descente/Stop ?
L’idée est de mettre les volets a 80% fermé par exemple, pour laisser passer la lumière entre les lames.

Ce genre d’erreur arrive quand l’IPX n’arrive pas à répondre à la requête (cpu trop chargé ou autres :man_shrugging:

Pour ça il suffit de faire un script qui met le volet à telle position, puis de créer un bouton qui l’appel

Hello

Depuis la mise à jour 0.115.1 l’intégration avec HA ne fonctionne plus
Dans le log [homeassistant.setup] Setup failed for ipx800: Unable to import component: cannot import name ‹ KEY_REAL_IP › from ‹ homeassistant.components.http.const › (/usr/src/homeassistant/homeassistant/components/http/const.py)
Sinon excellente intégration HA-IPX
Merci

Salut,
Je viens de publier la version 1.7 qui corrige ça :+1:

Cool… merci beaucoup

Salut @Mati24 serait il possible d’ajoute les module X4FP au dev de home assistant ? Merci

désoler du retard, si cela fonctionne parfaitement par le slider

Yes je me note de faire ça, je te tiens au courant pour tester

@boutXIII tu peux tester l’ajout du X4FP via la branche dev ?

Bonjour,
Je suis en train de faire des tests pour passer des Jeedom à Hass & j’ai une IPX V4.

Sur un analogique, j’ai un TC100 & je n’arrive pas à récupérer le température, j’ai mis ça en config :

  • component: sensor
    name: Température Piscine
    icon: mdi:coolant-temperature
    type: « analog »
    id: 1
    unit_of_measurement: « °C »

J’ai réussi avec succès à récupérer 2 relais, ça c’est déjà top !

D’ailleurs, entre lka doc & l’exemple, il y a des ratés sur le nom des variables. Par exemple, c’est analog dans la doc & analogin dans l’exemple. Je ne sais pas si c’est normal.

en effet c’est analogin, ça sera corrigé dans la prochaine version, est-ce que la temp remonte bien avec le bon type du coup ?

Pour l’instant, non, j’ai juste indisponible. J’ai essayé avec analog & analogin.
Pour les relais, pas de soucis.
Mais je m’y prends peut-être mal, je ne suis pas encore très familier avec Hass.

    - component: sensor
    name: Température Piscine
    icon: mdi:coolant-temperature
    type: "analogin"
    id: 1
    unit_of_measurement: "°C"
Logger: homeassistant
Source: custom_components/ipx800/sensor.py:68
First occurred: 11:39:07 (1 occurrences)
Last logged: 11:39:07
Error doing job: Task exception was never retrieved

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 118, in _handle_refresh_interval
    await self.async_refresh()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 192, in async_refresh
    update_callback()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 296, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state
    sstate = self.state
  File "/config/custom_components/ipx800/sensor.py", line 68, in state
    return self.coordinator.data[f"A{self._id}"]
KeyError: 'A1'

Ca veut dire qu’il fait la bonne requête mais que l’IPX ne renvoit pas le résultat pour l’entrée analogique 1 :thinking:
Ca fonctionne sur la 2 ou la 3 ?