Closed jjprz closed 3 years ago
¿Cómo se puede integrar en Home Assistant? ¿Alguna documentación para esto?
Estaría genial, llevo muchísimo tiempo detrás de esta integración 😉
Gracias a @jagalindo por actualizar el código e integrarlo en HA Lo he revisado y todo está correctamente funcionando
PD: para la próxima realease hemos de añadir más atributos a este sensor ('totalizador','estadoICP','potenciaContratada','percent',etc...) :D
Funciona! Por mi parte he añadido los demás atributos y he modificado la unidad de medida de la potencia actual que era errónea.
¡Gracias a los dos! @jjprz, podrías compartir el código para añadir los demás atributos. He estado mirando como se haría con un multisensor, pero aun no me he puesto a implementarlo.
Idealmente lo suyo es que con una petición se traiga todos los atributos en vez de tener un sensor por atributo. No me da mucha confianza que edistribución hacer una petición por cada sensor por si acaso acaban baneando el uso de su "API"
He localizado una solución para implementarlo como multisensor https://github.com/drogfild/hass-multiscrape/blob/dd32b0eaa6bd1a53181b48c2a4b66db033f25ce8/sensor.py
Simplemente los he añadido como atributos, tampoco quería que hiciera más de una llamada. Lo pego aquí porque me da error el fork que hice.
import logging
from homeassistant.const import POWER_KILO_WATT
from homeassistant.helpers.entity import Entity
from .backend.EdistribucionAPI import Edistribucion
from datetime import timedelta
_LOGGER = logging.getLogger(__name__)
SCAN_INTERVAL = timedelta(minutes=10)
def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the sensor platform."""
ha_entities = []
ha_entities.append(EDSSensor(config['username'],config['password']))
add_entities(ha_entities)
class EDSSensor(Entity):
"""Representation of a Sensor."""
def __init__(self,usr,pw):
"""Initialize the sensor."""
self._state = None
self._attributes = {}
self._usr=usr
self._pw=pw
@property
def name(self):
"""Return the name of the sensor."""
return 'EDS Power Consumption'
@property
def state(self):
"""Return the state of the sensor."""
return self._state
@property
def unit_of_measurement(self):
"""Return the unit of measurement."""
return POWER_KILO_WATT
@property
def device_state_attributes(self):
"""Return the state attributes."""
return self._attributes
def update(self):
"""Fetch new state data for the sensor."""
edis = Edistribucion(self._usr,self._pw)
edis.login()
r = edis.get_cups()
cups = r['data']['lstCups'][0]['Id']
meter = edis.get_meter(cups)
_LOGGER.debug(meter)
_LOGGER.debug(meter['data']['potenciaActual'])
attributes = {}
attributes['Estado ICP'] = meter['data']['estadoICP']
attributes['Totalizador'] = str(meter['data']['totalizador']) + ' kWh'
attributes['Porcentaje actual'] = meter['data']['percent']
attributes['Potencia Contratada'] = str(meter['data']['potenciaContratada']) + ' kW'
self._state = meter['data']['potenciaActual']
self._attributes = attributes
¿Se pueden crear sensores con los atributos? Me suena que sí se puede pero nunca lo he hecho. Si es así, nos ahorraríamos lo de multisensor.
¿Se pueden crear sensores con los atributos? Me suena que sí se puede pero nunca lo he hecho. Si es así, nos ahorraríamos lo de multisensor.
Sí, se pueden crear de esta forma:
Por cierto, lleva varios días sin funcionar la integración, ¿os pasa también a vosotros? La cosa es que la he probado el script python de trocotronic y si funciona pero parece ser que tarda muchísimo en actualizar los datos por lo que me temo que es un problema de "time-out", ¿Cómo se puede configurar eso en la integración? Ya me comentáis @jagalindo @jjprz
Este es el error que me sale a mí:`
Logger: homeassistant.helpers.entity Source: custom_components/edistribucion/backend/EdistribucionAPI.py:132 First occurred: 0:39:56 (57 occurrences) Last logged: 9:59:55
Update for sensor.eds_power_consumption fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 278, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 474, in async_device_update raise exc 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/edistribucion/sensor.py", line 51, in update r = edis.get_cups() File "/config/custom_components/edistribucion/backend/EdistribucionAPI.py", line 235, in get_cups r = self.__command('other.WP_ContadorICP_CTRL.getCUPSReconectarICP=1', post=data) File "/config/custom_components/edistribucion/backend/EdistribucionAPI.py", line 132, in __command jr = r.json() File "/usr/local/lib/python3.8/site-packages/requests/models.py", line 900, in json return complexjson.loads(self.text, kwargs) File "/usr/local/lib/python3.8/site-packages/simplejson/init.py", line 525, in loads return _default_decoder.decode(s) File "/usr/local/lib/python3.8/site-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/local/lib/python3.8/site-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end()) simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Este es el error que me sale a mí:`
Logger: homeassistant.helpers.entity Source: custom_components/edistribucion/backend/EdistribucionAPI.py:132 First occurred: 0:39:56 (57 occurrences) Last logged: 9:59:55
Update for sensor.eds_power_consumption fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 278, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 474, in async_device_update raise exc 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/edistribucion/sensor.py", line 51, in update r = edis.get_cups() File "/config/custom_components/edistribucion/backend/EdistribucionAPI.py", line 235, in get_cups r = self.__command('other.WP_ContadorICP_CTRL.getCUPSReconectarICP=1', post=data) File "/config/custom_components/edistribucion/backend/EdistribucionAPI.py", line 132, in __command jr = r.json() File "/usr/local/lib/python3.8/site-packages/requests/models.py", line 900, in json return complexjson.loads(self.text, kwargs) File "/usr/local/lib/python3.8/site-packages/simplejson/init.py", line 525, in loads return _default_decoder.decode(s) File "/usr/local/lib/python3.8/site-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/local/lib/python3.8/site-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end()) simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
a ver si @jagalindo nos puede echar un cable...
Parece que efectivamente el backend está fallando. A mi personalmente no me está funcionando el script de @trocotronic
Por cierto, lleva varios días sin funcionar la integración, ¿os pasa también a vosotros? La cosa es que la he probado el script python de trocotronic y si funciona pero parece ser que tarda muchísimo en actualizar los datos por lo que me temo que es un problema de "time-out", ¿Cómo se puede configurar eso en la integración? Ya me comentáis @jagalindo @jjprz
Acabo de revisar y parece que han hecho algún cambio en la API de eds. He conseguido que todo vuelva a la normalidad eliminando los ficheros de sesión y tokens. En un rato subo una versión del backend que no almacena esos ficheros e integra las mejoras que menciona @jjprz. Si los teneis en vuestra carpeta de la extensión borradlos.
Hola @jagalindo Vuelve a funcionar correctamente y además con la sorpresa que lo has integrado en HACS
Eres un crack ;-)
Muchísimas gracias.
Fantástico. Vuelve a funcionar. Por cierto... Lo tengo puesto cada 10 minutos pero aún así parece que sufro baneos y no puedo loguearme al contador, ni siquiera desde la página web, ¿os pasa lo mismo? ¿sabéis cuál es el límite de logins que se pueden hacer al día?
Muchas gracias a todos.
Fantástico. Vuelve a funcionar. Por cierto... Lo tengo puesto cada 10 minutos pero aún así parece que sufro baneos y no puedo loguearme al contador, ni siquiera desde la página web, ¿os pasa lo mismo? ¿sabéis cuál es el límite de logins que se pueden hacer al día?
Muchas gracias a todos.
No, yo también lo tengo por defecto en 10m y no tengo baneos. Por cierto, después de tener todo esto funcionando de maravilla me veo obligado (tema económico) a pasarme al PVPC y ahorrar unos eurillos. Os animo a ello. Me paso a Energía XXI. ¿Sabéis si existe algo para esta distribuidora regulada?
Yo ya tengo PVPC y Energía XXI. Te funcionará igual ya que tu distribuidora seguirá siendo eDistribucion sea cual sea la comercializadora a la que te pases.
¿Cómo se puede integrar en Home Assistant? ¿Alguna documentación para esto?