Es peligroso dejarme con cacharros electrónicos.

Esta pasada semana santa he tenido la oportunidad de pasar algo de tiempo con uno de estos cacharros:

Unas tuberías forradas de gomaespuma en una pared

Eso de ahí es una placa de FreeDS conectada a un calentador de agua. Es un sistema llamado gestor de excedentes cuyo objetivo es intentar maximizar el autoconsumo de energía eléctrica y minimizar el uso de la red eléctrica.

A ver, en una instalación solar fotovoltaica pequeñita, de las que se ponen en los tejados de las casas, lo habitual es dar potencia a lo que haya dentro de casa primero, y exportar a la red la potencia sobrante:

(Digo potencia porque se mide en vatios (W) y es instantánea. En contra, el consumo es energía y se mide en vatios-hora (Wh). )

Gráfico con 874W de producción, 253W de uso y 621 de exportación

La idea del sistema es conectar, de manera aislada, una carga resistiva (es decir, un calentador de agua, un radiador, o algún otro tipo de resistencia eléctrica gorda que no lleve electrónica), y darle a esa carga la potencia justita. Ni tan poca potencia como para que se exporte potencia a la red eléctrica, ni tanta potencia como para que se importe potencia de la red eléctrica:

Gráfico con 874W de producción, 314W de uso, 589W de calentador y 29W de importación

Y oye, el sistema funciona para lo que se pensó. Hay que darle datos de la producción solar y de la importación/exportación a red eléctrica, pero al final lo conectas a un calentador de 1500W y ajusta el circuito (a golpe de PWM) para que el excedente vaya a la resistencia en vez de a a red.

Personalmente soy bastante escéptico con el porqué de FreeDS. Sí, entiendo que existe la visión general de que las compañías eléctricas te pagan la energía excedente a precio de mierda (aunque hay frikis del autoconsumo solar, como Terence Eden, que argumentan lo contrario). Por mi parte:

  • Si lo que se quiere es maximizar el autoconsumo, un sistema de baterías lo va a gestionar mejor
  • Si lo que se quiere es aprovechar energía solar para calentar agua, las placas solares térmicas son (aproximadamente) cuatro veces más eficientes que un sistema de fotovoltaico más resistencia.
  • Si el problema es que las eléctricas sin unas hijasdeputa que pagan una mierda la energía excedente, entonces estamos ante un problema sociopolítico, no técnico. Y yo soy muy de la escuela de que los problemas sociopolíticos no se arreglan con soluciones técnicas. Si lo que quieres es putear a las eléctricas, mejor métete en una cooperativa de autoconsumo solar, digo yo.

Por otra parte, yo entiendo el punto de vista de la gente de electrónica: un gestor de excedentes es algo relativamente sencillo, de bajo coste, y maximiza el autoconsumo.

Pero en general, y desde mi punto de vista de informático, me parece una optimización prematura. Como dijo Donal Knuth:

There is no doubt that the grail of efficiency leads to abuse. Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

Yet we should not pass up our opportunities in that critical 3%. A good programmer will not be lulled into complacency by such reasoning, he will be wise to look carefully at the critical code; but only after that code has been identified. It is often a mistake to make a priori judgements about what parts of a program are really critical, since the universal experience of programmers who have been using measurement tools has been that their intuitive guesses fail.

Que en castellano viene a querer decir:

No hay duda que el santo grial de la eficiencia lleva al abuso. Los programadores desperdician enormes cantidades de tiempo pensando o preocupándose sobre la velocidad de partes no críticas de sus programas; y estos intentos de eficiencia tienen de hecho un impacto fuértemente negativo cuando se consideran el mantenimiento y los arreglos. Nos deberíamos olvidar sobre las pequeñas eficiencias, digamos, el 97% del tiempo: la optimización prematura es la raíz de todos los males.

Y sin embargo no deberíamos dejar pasar las oprtunidades en ese 3% crítico. Un buen programador no se dejará complacer por tal razonamiento, sino que será sabio como para mirar cuidadosamente el código crítico; pero sólo cuando ese código haya sido identificado. A menudo es un error el hacer juicios a priori sobre qué partes del programa son críticas, porque la experiencia universal de los programadores que han usado herramientas de medición es que sus intuiciones fallan.

…y como mi cerebro de informático aplica este principio no sólo a programas sino a sistemas, eso fundamenta mi opinión: no estoy seguro de que maximizar el autoconsumo a base de calentar cosas sea el verdadero problema a resolver. Y esta maximización se hace a costa de que se descontrola la temperatura del agua.

Sí, un gestor de excedentes es una opción barata a las baterías, pero quiero dejar claro que hay que verlos como parte de un sistema mayor; el maximizar su eficiencia y esperar que eso arregle todos los problemas es naïve.


Bueno, el asunto es que aparte del FreeDS que está montado, tuve la ocasión de jugar con los medidores de potencia de los invesores fotovoltaicos y el de exportación a red (que son necesarios para que FreeDS, o cualquier otro gestor de excedentes, funcione).

He podido ver de primera mano la auténtica mierda que es la (mal llamada) internet de las cosas (al fin y al cabo, yo soy fan de @internetofshit). Para los cacharros del fabricante A tienes que darte de alta en la web de A y usar la aplicación para movil de A para que tus datos se almacenen en la nube de A (que quiere decir “los ordenadores que A tiene en Estados Unidos”). Para los cacharros del fabricante B tienes la web B y la aplicación para móvil de B y la nube de B. Y así ad nauseam.

A mí, que he sido siempre de software libre, me resulta contradictorio, paradójico, y casi hipócrita que algunos de los frikis del autoconsumo solar no practiquen también el autoconsumo de información. Al final se están exportando datos que se pagan a precio de mierda (cero) y se importan datos (las grafiquitas) a un precio que no es de mierda. O pagas una suscripción anual o no puedes saber cuánto has gastado en casa. Manda cojones. (Y no me quiero meter en temas de protección de datos, que es otro berenjenal).

La solución por antonomasia para este autoconsumo de información es Home Assistant: un programa que se instala en algún ordenador de bajo consumo que esté siempre encendido en casa (es bastante común usar una Raspberri Pi), y se conecta a cualquier cosa que diga “smart home” o “internet of things” o similar. Y adiós a tener ocho aplicaciones distintas para tener ocho cacharros en casa: todo se centraliza en el Home Assistant de casa.

Sólo había un problema: Home Assistant puede leer los datos de los inversores solares, los datos de consumo de red… pero no los datos de FreeDS. Es de entender: FreeDS es un proyecto muy pequeñito y no hay mucha gente que pueda/quiera desarrollar cosas alrrededor.

Así que me puse manos a la obra, me leí la documentación de cómo hacer integraciones de Home Assistant, desempolvé mis viejos conocimientos de Python, y en un día ya tenía una integración mínima.

Tras dedicarle unas pocas horas más (limpiar código, refactorizar según la arquitectura de Home Assistant, subir los logotipos y toda la parafernalia de publicar una integración), me complace presentar: homeassistant-freeds. Todo está en:

https://gitlab.com/IvanSanchez/homeassistant-freeds

La integración en sí no es demasiado vistosa - lo único que hace es capturar números de FreeDS y publicarlos como entidades de Home Assistant; aparte de poder controlar los interruptores de manual/automático de PWM del FreeDS.

Captura de pantalla de Home Assistant con FreeDS

El grafiquito de flujo de potencia sí que es algo más vistoso, pero se instala aparte de la integración (y de manera más enrevesada, véase “Custom cards” en la documentación para desarrolladores), pero yo necesitaba algo para reemplazar el gráfico similar que tiene FreeDS. Mi gráfico de flujo de potencia se alinea verticalmente (fuentes arriba, sumideros abajo, la potencia siempre va de un sitio alto a un sitio bajo), mientras que la de FreeDS va en… ¿diagonal?

homeassistant-freeds ha sido uno de estos proyectitos que he cogido con ganas - algo refrescante para variar de mi rutina de WebGL geoespacial. Así que, no sé muy bien por qué, he decidido hacer otra integración: homeassistant-dgtinfocar. Eso mete las cámaras y sensores de tráfico de la DGT (que están en el portal DGT InfoCar) como cámaras y sensores de HomeAssistant:

Captura de pantalla de Home Assistant con DGT InfoCar

Ahora puedo encender la aspiradora cuando haya un atasco. Que no estoy diciendo que sea algo útil. Digo que se puede hacer.