Utilizar las pilas durante más tiempo y proteger activamente el medio ambiente
Conectar Home Assistant al dispositivo de actualización
Después de haber conocido en la primera entrada un dispositivo que ya funciona perfectamente, ahora queremos conectarlo a Home Assistant. También en esta ocasión, el protocolo MQTT nos será de gran utilidad.
Una ventaja es que no tenemos que tener en cuenta ninguna pantalla ni elementos de control en el programa. El panel de control del asistente doméstico se encarga de estas tareas. Cuando el dispositivo de actualización está listo, lo vemos en el teléfono móvil, la tableta o el ordenador, e incluso podemos recibir una notificación.
Con la aplicación Home Assistant en el teléfono móvil, siempre tenemos el estado actual a mano.
Veamos qué se necesita para ello
.
El boceto ahora incluye cinco bloques funcionales. El programa principal ha crecido bastante.
En la parte 1 no habíamos integrado ninguna biblioteca. Ahora hay un total de tres, que son necesarias para la conexión WiFi y MQTT. Además, necesitamos
A continuación, en el boceto, se encuentra la configuración de usuario, en la que debe introducir el SSID de su WLAN y la contraseña correspondiente. Esta vez también he asignado una dirección IP estática.
A continuación, se introducen las credenciales para el servidor MQTT y la contraseña MQTT.
Los temas MQTT se crean como variables de cadena. Las tensiones de las baterías reciben los temas «batt1 ... batt4», el estado respectivo de una batería se encuentra en «batt1stat ... batt4stat ». Estos estados son «Sin batería», «Recargando» y «***Finalizado***».
La inicialización que sigue a continuación ya la conocemos de la primera parte. Aquí se añade la matriz «battstat[]», que registra el estado respectivo de la batería. Se inicializa en las cuatro posiciones con «Sin batería».
void setup() sigue con la inicialización del WiFi y el servidor MQTT. Sin particularidades.
void loop() solo muestra pequeños cambios. Al principio se comprueba la conexión MQTT y, si es necesario, se restablece. A continuación, se lleva a cabo el proceso ya conocido de impulsos de carga y mediciones, ahora complementado con los dos subprogramas Statusmeldungen(); y WiFi_MQTT();
El subprograma para los mensajes de estado
Con ayuda de los mensajes de estado, podemos ver si hay una batería insertada en un compartimento, si la batería se está recargando o si el proceso de recarga ha finalizado.
p class="Text">La primera consulta IF comprueba si el voltaje de la batería es igual a cero. Esto equivale a «no hay batería insertada».
Para la programación MQTT propia, puede resultar interesante ver cómo se transmiten las cadenas en MQTT. Los contenidos de battstat[] se definen como cadenas de caracteres de hasta 16 caracteres, pero en realidad son más cortas. El motivo es el carácter terminador «\0»que exige MQTT.
El subprograma WiFi_MQTT
Aquí he resumido las funciones que inician nuestro WiFi, establecen la dirección IP estática, establecen la conexión con el servidor MQTT y se encargan de la publicación.
La publicación es una función sencilla. En primer lugar, se comprueba si la conexión sigue activa. De lo contrario, se vuelve a conectar.
A continuación, se transfiere el valor medido con dos decimales para cada batería. En la jerga MQTT, este valor se denomina «payload» (literalmente, «carga útil»). La función
snprintf(payload, sizeof(payload), "%.2f", battU[0]);
compila la carga útil, que se publica en la línea siguiente en el servidor MQTT en el tema correcto. (Lamentablemente, no existe una expresión equivalente en español).
En la siguiente línea se envía el estado de la batería correspondiente. Para ello, ya habíamos creado la composición correcta, incluido el carácter de terminación, en «Statusmeldungen.ino».
¿Qué hay que hacer en Home Assistant?
Dado que MQTT está bastante bien integrado en Home Assistant y también se ejecuta allí, en esta página tenemos poco trabajo.
Como ya se sabe por mis anteriores entradas en el blog, basta con completar correctamente el archivo configuration.yaml y reiniciar Home Assistant. De este modo, se generan las entidades necesarias y quedan disponibles.
Recuerde que es imprescindible prestar atención al orden de las líneas y utilizar siempre la barra espaciadora para los espacios, ¡nunca la tecla TAB!
Dicho esto, nuestra entrada tiene el siguiente aspecto:
Si ya ha definido sensores MQTT, introduzca sus sensores debajo. De lo contrario, recibirá un mensaje de error, ya que
mqtt:
. . sensor:
solo puede aparecer una vez en configuration.yaml. Esto también se aplica a todos los casos análogos.
En la entrada MQTT, quizá se observe que un
expire_after: 30
. Esta función no existe desde hace mucho tiempo. Ahora se puede especificar en la definición del sensor que, por ejemplo, 30 segundos después del último valor del sensor MQTT, su valor se restablezca. De este modo, no da la impresión de que todavía haya una batería insertada.
Cuando el dispositivo está apagado, los sensores ya no están disponibles y aparece el mensaje correspondiente en el panel de control.
Un complemento a la parte 1 del artículo
No todo el mundo tiene resistencias de medición en su caja de bricolaje (1 % o mejor). Por eso, ahora he añadido otra variable al boceto de la parte 2
float corr[4] ={1.0, 1.0, 1.09, 1.0}; //Valores de corrección
. Se trata de un factor por el que se debe multiplicar el valor medido correspondiente cuando las resistencias de medición no son exactas. La mejor forma de medirlo es con un multímetro adecuado y calcular el factor de corrección. Me faltaba una resistencia y enseguida obtuve un error de medición del 9 %, que se corrigió de esta manera.
Si todos los valores de corrección son = 1,0, sus resistencias son perfectas.
Si necesita o desea utilizar la nueva función, ya está implementada en todo el nuevo boceto.
Uso práctico
Ahora tenemos un bonito dispositivo de recarga que también funciona bien. ¿Cómo lo utilizamos?
Como llevo años recargando pilas alcalinas, presto atención a lo que hacen otras personas. Así conocí a un señor mayor que vendía una caja de pilas en el mercadillo:

Desde entonces, me acompaña. En la parte superior tiene un pequeño dispositivo de prueba que da una idea bastante aproximada de si una pila todavía es útil.
Mis pilas están ordenadas de tal manera que a la izquierda están las pilas AA que han sido probadas y recargadas. Cubren las necesidades del hogar, el laboratorio y el taller.
En el centro y a la derecha están las pilas AA que, a simple vista, no parecen estar dañadas ni tener fugas, pero que aún no he probado ni recargado.
Todo esto ha dado lugar a que, con un consumo anual de unas 60 pilas alcalinas Celdas AA en 2025 no he comprado ni una sola batería nueva y todos los dispositivos funcionan perfectamente. Todavía me queda una reserva.
Me encantaría que usted también contribuyera a la protección del medio ambiente con este proyecto y, al mismo tiempo, ahorrara dinero.
Hasta la próxima entrada del blog,
Su
Michael Klein







6 comentarios
AZ Blog Team
Hallo,
Vielen Dank für den Hinweis.
Hier ist der Link zum ersten Teil des Blogbeitrags: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/alkaline-auffrischgerat-teil-1. Der Link ist außerdem auch direkt im aktuellen Blogbeitrag verlinkt. Freundliche Grüße
Ihr AZ Blog Team
Erik Berweger
Hallo, leider vermisse ich einen Link auf den ersten Teil des Blogbeitrages. Trotz Suche in den Blogbeiträgen habe ich auch nichts finden können. Bitte ergänzen Sie noch einen Link im Text. Vielen Dank!
Lars
Schön, dass es einen Teil 2 gibt. Leider fehlt immer noch der Code für die Funktionen messungen() und printTable(), alles in einer Datei würde bei diesem Umfang auch sinnvoll sein. Ein gut lesbarer Schaltplan (pdf) mit der Variante ohne Treibertransistoren (nur IRF520) wäre auch hilfreich.
Jürgen
Hallo. Ich finde dieses Projekt auch sehr interessant. Leider hätte ich Schwierigkeiten, das Projekt in die Tat umzusetzen. Die Gründe?
Der Schaltplan hat eine schlechte Auflösung und enthält verwirrende Angaben (wurde in Teil 1 bereits bemängelt)
Es fehlen immer noch die Unterprogramme ‘void messungen()’ und ‘void printTable()’. In Teil 1 wurde ‘messungen()’ bereits als fehlend kommentiert. Doch leider scheint es keine Nachbesserung zu geben. Insbesondere das neu eingeführte Korrektur-Array für Messwerte müsste doch irgendwo verwendet werden? Fehlanzeige. Oder kann mir jemand auf die Sprünge helfen, wo ich die vermissten Unterprogramme übersehen habe?
Max Sonnleitner
Hallo Herr Klein,
bitte um den Link zum ersten Teil der Batterie Auffrischung.
Ich finde leider nichts auf eurer Homepage.
Danke für das tolle Projekt.
GrußMax
Paul Fried
Der Blog-Beitrag hat mir sehr gut gefallen, ich habe nicht gewusst, dass man Alkaline Baterrien wieder aufladen kann…. Woher bekomme ich so eine Batterie Box?