Alkaline - Auffrischgerät - Teil 2 - AZ-Delivery

Batterijen langer gebruiken en actief milieubescherming bedrijven

Home Assistant verbinden met het verversingsapparaat

Nadat we in het eerste artikel kennis hebben gemaakt met een volledig functionerend apparaat, willen we het nu verbinden met Home Assistant. Ook deze keer zal het MQTT-protocol ons daarbij goed van pas komen.

 

Een voordeel is dat we geen rekening hoeven te houden met een display of bedieningselementen in het programma. Het dashboard van Home Assistant neemt deze taken over. Als het verversingsapparaat klaar is, zien we dit op onze mobiele telefoon, tablet of pc en kunnen we zelfs een melding laten sturen.

Met de Home Assistant-app op onze mobiele telefoon hebben we de huidige status altijd bij de hand.

Laten we eens kijken wat daarvoor nodig is.

De schets

De sketch bestaat nu uit vijf functieblokken. Het hoofdprogramma is een stuk gegroeid.

In deel 1 hadden we nog geen bibliotheken geïntegreerd. Nu zijn er in totaal drie nodig voor de wifi-verbinding en MQTT. Daarnaast hebben we nodig.

In de sketch volgt de gebruikersconfiguratie, waarin u de SSID van uw wifi en het bijbehorende wachtwoord moet invoeren. Ook deze keer heb ik weer een statisch IP-adres toegewezen.

Nu volgen de inloggegevens voor de MQTT-server en het MQTT-wachtwoord.

De MQTT-onderwerpen worden aangemaakt als stringvariabelen. De batterijspanningen krijgen de onderwerpen "batt1 ... batt4", de respectievelijke status van een batterij staat in "batt1stat ... batt4stat ".  Deze statussen zijn "Geen batterij", "Laadt op" en "***Beëindigd***".

De nu volgende initialisatie kennen we al uit deel 1. Hier komt nog de array "battstat[]" bij, die de respectieve batterijstatus vastlegt. Deze wordt op alle vier de posities geïnitialiseerd met "Geen batterij".

 

void setup() volgt met de initialisatie van de wifi- en MQTT-server. Geen bijzonderheden.

void loop() vertoont slechts kleine wijzigingen. Aan het begin wordt de MQTT-verbinding gecontroleerd en indien nodig opnieuw tot stand gebracht. Daarna volgt het reeds bekende proces van laadimpuls en metingen, nu aangevuld met de twee subprogramma's Statusmeldungen(); en WiFi_MQTT();

 

Het subprogramma voor statusmeldingen

Aan de hand van de statusmeldingen kunnen we zien of er een batterij in een vakje is geplaatst, of de batterij momenteel wordt opgeladen of dat het opladen is voltooid.

De schets <

p class="Text">

De eerste IF-query controleert of de batterijspanning gelijk is aan nul. Dit komt neer op 'er is geen batterij geplaatst'.

 

Voor uw eigen MQTT-programmering is het misschien interessant om te zien hoe strings in MQTT worden overgedragen. De inhoud van battstat[] wordt gedefinieerd als tekenreeksen met maximaal 16 tekens, maar is in werkelijkheid korter. De reden hiervoor is het noodzakelijke terminatieteken '\0'dat MQTT vereist.


Het subprogramma WiFi_MQTT

Hier heb ik de functies samengevat die onze wifi starten, het statische IP-adres instellen, de verbinding met de MQTT-server tot stand brengen en de publicatie verzorgen.

De sketch

De publicatie is een eenvoudige functie. Eerst wordt gecontroleerd of de verbinding nog actief is. Zo niet, dan wordt er opnieuw verbinding gemaakt.

Daarna wordt voor elke batterij de meetwaarde met twee decimalen doorgegeven. Een dergelijke waarde wordt in MQTT-jargon een "payload" (letterlijk: "betaalde lading") genoemd. De functie

snprintf(payload, sizeof(payload), "%.2f", battU[0]);

stelt de payload samen, die in de volgende regel naar de MQTT-server naar het juiste onderwerp wordt gepubliceerd.  (Helaas bestaat er hiervoor geen Nederlandse uitdrukking).

In de volgende regel wordt de status van de betreffende batterij verzonden. Hiervoor hadden we in "Statusmeldungen.ino" al de juiste samenstelling inclusief terminatieteken gebouwd.

 

Wat moet er in Home Assistant worden gedaan?

Aangezien MQTT vrij goed in Home Assistant is geïntegreerd en daar ook draait, hebben we op deze pagina maar weinig werk.

Zoals u al weet uit mijn eerdere blogberichten hier, volstaat het om de configuration.yaml netjes aan te vullen en Home Assistant opnieuw te starten. Hierdoor worden de benodigde entiteiten gegenereerd en zijn ze beschikbaar.

U weet nog wel dat u goed op de volgorde van de regels moet letten en voor de spaties altijd alleen de spatiebalk moet gebruiken, nooit de TAB!

Dit gezegd hebbende, ziet onze invoer er als volgt uit:


MQTT.yaml

 

Als u al MQTT-sensoren hebt gedefinieerd, voer dan uw sensoren hieronder in. Anders krijgt u een foutmelding, omdat

mqtt:

. . sensor:

slechts één keer in configuration.yaml mag voorkomen. Dit geldt ook voor alle analoge gevallen.

Bij de MQTT-vermelding valt misschien nog op dat een

 

                        expire_after: 30

 

is ingevoerd. Deze functie bestaat nog niet zo lang. Inmiddels kan in de sensordefinitie worden vastgelegd dat bijvoorbeeld 30 seconden na de laatste MQTT-sensorwaarde de waarde ervan wordt gereset. Zo ontstaat niet de indruk dat er nog een batterij is geplaatst.

Als het apparaat is uitgeschakeld, zijn de sensoren niet meer beschikbaar en verschijnt het bijbehorende bericht in het dashboard.

Een aanvulling op deel 1 van het artikel

Niet iedereen heeft meetweerstanden in zijn knutselkist (1% of beter). Daarom heb ik nu in de schets van deel 2 nog een variabele toegevoegd

float corr[4] ={1.0, 1.0, 1.09, 1.0}; //correctiewaarden

 

toegevoegd. Dit is een factor waarmee de betreffende meetwaarde moet worden vermenigvuldigd als de meetweerstanden niet helemaal kloppen. Dit kun je het beste meten met een goede multimeter en zo de correctiefactor berekenen. Ik had één weerstand te weinig en kreeg prompt een meetfout van maar liefst 9%, die op deze manier werd gecorrigeerd.

Als alle correctiewaarden = 1,0 zijn, zijn uw weerstanden perfect.

Als u de nieuwe functie nodig hebt of wilt gebruiken, is deze overal in de nieuwe sketch al geïmplementeerd.

 

Praktisch gebruik

We hebben nu een mooi opfrisapparaat dat ook goed werkt. Hoe gebruiken we het?

Omdat ik al jaren alkalinebatterijen opfris, let ik op wat andere mensen doen. Zo ontmoette ik een oudere heer die op de rommelmarkt een batterijdoos aanbood:

 

Sindsdien heb ik hem altijd bij me. Bovenaan zit een klein testapparaatje dat een vrij grove indicatie geeft of een batterij nog bruikbaar is.

Mijn batterijen zijn zo geordend dat links de AA-batterijen liggen die getest en opgeladen zijn. Ze voorzien in de behoefte van het huishouden, het laboratorium en de werkplaats.

In het midden en rechts liggen de AA-batterijen die er niet beschadigd of gelekt uitzien, maar die ik nog niet heb getest en/of opgeladen.

Dit alles heeft ertoe geleid dat ik bij een jaarlijks verbruik van ongeveer 60 alkalinebatterijen AA-batterijen in 2025 geen enkele nieuwe batterij heb gekocht en alle apparaten prima werken. Ik heb nog een voorraad over.

Ik zou het leuk vinden als u ook een bijdrage wilt leveren aan de bescherming van het milieu met dit project en tegelijkertijd uw portemonnee wilt sparen.

Tot de volgende blogpost,
Uw
Michael Klein

EspFür arduinoGrundlagen softwareProjekte für fortgeschritteneSmart home

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery