duhow / hass-aigues-barcelona

Custom component for Home Assistant to integrate data from Aigues de Barcelona
GNU General Public License v3.0
52 stars 6 forks source link

[Feat. Request] Integrar el portal web de Sorea #31

Open diamant-x opened 2 weeks ago

diamant-x commented 2 weeks ago

Hola, recientemente me he mudado de municipio y el agua ahora lo provee una empresa llamada Sorea. https://www.soreaonline.cat/login Pero la web me resultaba familiar y al parecer básicamente es otra marca del grupo Agbar. Me preguntó cómo de posible sería que la integración permita si funcionalidad desde el portal de Sorea también?

https://es.m.wikipedia.org/wiki/Sorea

Quiero creer que el backe nd funciona igual aunque por delante la web se vea distinta. Puedo confirmar que las cuentas en aigues no funcionan en la de Sorea... Con suerte es solo por BBDD.

duhow commented 2 weeks ago

Sin usuario ni suministro poco puedo hacer para investigar. Te invito a que analices cómo funciona, si dispone de API, y si ves que la forma de acceder se comporta parecido a la API de Aigues de Barcelona, puedes añadir más información y una PR con el cambio.

duhow commented 1 week ago

Por lo pronto veo que Agbar, Sorea y Cassa usan el mismo portal.

https://www.agbarclients.cat/login https://www.soreaonline.cat/login https://www.cassa.es/login

diamant-x commented 4 days ago

He estado mirando pero la cookie de ofexTokenJwt no aparece al iniciar sesion en Sorea... no se si significa que la plataforma de debajo es toalmente distinta o que.

Estas son las cookies que salen tras iniciar sesion. algunas ya aparecen al cargar el login publico https://www.soreaonline.cat/login

Cookie Value (or redacted)
COMPANY_ID 20116
COOKIE_SUPPORT true
CookieConsent {stamp:%27u0TMXqnIQS0LNlRrombBIgqS1+nBub8BWEDp0hO7pDng76BkFx+j2g==%27%2Cnecessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:false%2Cmethod:%27explicit%27%2Cver:3%2Cutc:1721733701343%2Cregion:%27es%27}
GUEST_LANGUAGE_ID es_ES
ID 493(redacted just in case, numbers and letters)d3d
JSESSIONID (generated on login page load)
LFR_SESSION_STATE_20120 1731599802868
LFR_SESSION_STATE_69627382 1731599887635
LR_LAST_CONTRACT (redacted, my water contract ID)
LR_ONLY_ONE_MUNICIPIO_765813 false
SERVERID 0d73(redacted just in case, numbers and letters)111
SERVERIDCORS 0d73(redacted just in case, numbers and letters)111
incap_ses_1394_2918190 SpObLSN(redacted just in case, mostly letters)XhLQ==
nlbi_2918190 YHLBe+a(redacted just in case, mostly letters)3o
showVideoTelelectura false
visid_incap_2918190 COce8(redacted just in case, mostly letters)6HDY
duhow commented 4 days ago

Más allá de las cookies, hay alguna petición a API o algún sitio que devuelva la información del consumo?

diamant-x commented 3 days ago

Hace mucho que no hago ingeniería inversa asi que si tienes algun tip de como sacar lo que sería interesante lo puedo hacer.

He mirado en la pestaña de Red del debugger y al consultar los consumos, se puede hacer mensual, diario o horario. En el caso de horario le tira un GET a https://www.soreaonline.cat/es/group/soreaonline/mis-consumos?p_p_id=MisConsumos&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&p_auth=BpdgVcoI&_MisConsumos_op=buscarConsumosHoraria&_MisConsumos_fechaInicio=12/11/2024&_MisConsumos_fechaFin=15/11/2024&_MisConsumos_inicio=0&_MisConsumos_fin=9

que devuelve un json tal que:

{"ultimaPagina":false,"consumos":[{"fechaConsumo":"15 nov 2024","horaConsumo":"04:05","lectura":"100,745","consumo":"0,001","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"15 nov 2024","horaConsumo":"03:05","lectura":"100,744","consumo":"0","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"15 nov 2024","horaConsumo":"02:05","lectura":"100,744","consumo":"0","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"15 nov 2024","horaConsumo":"01:05","lectura":"100,744","consumo":"0,001","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"15 nov 2024","horaConsumo":"00:06","lectura":"100,743","consumo":"0,003","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"14 nov 2024","horaConsumo":"23:06","lectura":"100,74","consumo":"0,005","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"14 nov 2024","horaConsumo":"22:06","lectura":"100,735","consumo":"0,007","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"14 nov 2024","horaConsumo":"21:06","lectura":"100,728","consumo":"0,155","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"14 nov 2024","horaConsumo":"15:59","lectura":"100573","consumo":"0,001","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false},{"fechaConsumo":"14 nov 2024","horaConsumo":"14:59","lectura":"100,572","consumo":"0","consumptionType":{"consumptionLiteral":"REAL","consumptionClass":"real"},"lecturaEstimada":false}]}

La respuesta está paginada, pero se puede forzar via url los parametros el rango que quieres que devuelva (ambos son aplicados, i.e. si le pides 200 pero el rango es de 1 dia -> te devuelve un dia de datos solo, si le pides el rango del mes pero solo 10 entradas -> te devuelve 10 entradas. &_MisConsumos_fechaInicio=12/11/2024 <- 'desde' &_MisConsumos_fechaFin=15/11/2024 <- 'hasta' &_MisConsumos_inicio=0 <- "indice de la entrada más reciente a consultar" &_MisConsumos_fin=30 <- "indice de la entrada más antigua a a consultar"

Lo que el p_auth que sale ahi no coincide con ningun valor que haya encontrado en la lista de cookies, asi que no se donde se genera.

duhow commented 1 day ago

Vale, entonces es factible crear una clase en Python para procesar datos de Sorea o de Aigues de Barcelona. Mismos métodos pero con diferentes ejecuciones. 👍🏻 Puedes con ello? Si no, tendría que pedirte un usuario para investigar las llamadas que se hacen con detalle. Puedes darme un toque por Telegram si lo necesitas.

diamant-x commented 2 hours ago

Buf, aunque he programado en Python, nunca lo he hecho con un buen orden o estructura :). Puedo dar soporte y hacer de beta testing. Lo que haré es intentar implementarlo con https://github.com/danieldotnl/ha-multiscrape y ver si consigo al menos acceder al ultimo valor del contador (y de ahi agregarlo al panel de Energia y que HA me haga el horario) y podemos dejar el hilo abierto para ver si hay más gente interesada que valga la pena extender esta integración.