Ik moet zeggen dat ik de kosten niet actief monitor omdat de bedragen erg laag zijn.
Ik heb wel een aantal alerts ingesteld die bij een veelvoud van 5 euro een seintje geven, omdat ik soms ook wat andere dingen uitprobeer en sommige Azure onderdelen zijn niet gratis.
Ik had het idee dat in 2020 de kosten van Azure mede werden bepaald door de hoeveelheid data die over de lijn gaat, maar op dit moment is de enige kostenpost de storage. Dat zijn de tables in de Table Storage.
Ik heb in 2021 een job gebouwd die oude 5-minuten data, ouder dan 3 maanden, verwijdert. De 5-minuten data wordt alleen voor recente weergaves gebruikt, voor historische data gebruik ik de geaggregeerde uur-data.
Vorig jaar de hardware vernieuwd van een Raspberry PI naar een Raspberry PI zero.
Dit is vanaf het begin geen succes geweest. Bijna elke dag last van dataverlies.
De PI Zero had voornamelijk last van een wegvallende WiFi verbinding. Bij een Raspberry PI wordt de verbinding gemonitord en beheerd door het OS; op een PI zero moet je dat zelf doen.
Ik heb van ales gebouwd; try-catches met opnieuw verbinden, automatische reconnects, automatische reboots, allerlei pogingen om bij een verbroken WiFi verbinding opnieuw te verbinden.
Waar ik echter tegenaan liep is dat bij een verbroken verbinding de PI zero snel van slag is en de main-loop (een proces op de PI zero draait in een loop) stopt. Een try-catch om de hele loop werd echter nooit geraakt; ergens bevroor de PI zero in het wegvallen van de verbinding, en bleek het niet mogelijk uit die situatie te herstellen.
De laatste poging, maar dat voelde echt als een noodgreep, was het via een schakelklok automatisch herstarten van de PI zero. Dat werkte wel, maar voelt toch niet als een betrouwbare oplossing. Al met al is dit dan denk ik toch het verschil tussen een proces draaien tegen een SOC vs een proces draaien op een OS.
Uiteindelijk de oude Raspberry PI weer tevoorschijn gehaald en nu draait alles weer als een zonnetje.
Helemaal geen acht geslagen op de kosten van AWS, maar ook geen dikke rekening gehad op de creditcard.
Vandaag de kosten gecheckt, en die zijn, ehm, te overzien... namelijk 6 cent per maand.
Vanaf eind 2019 draaide de temperatuurmeting op een Raspberry Pi 3B. Sindsdien is ook de Raspberry Pi Pico uitgekomen.
De Pi Pico is niet zoals de 3B een volwaardige computer, maar een microcontroller board. Zo'n board doet zodra je de stroom erop zet 1 ding, en dat is in dit geval de temperatuur meten.
Je kunt op de Pico een stuk minder dan op een Raspberry Pi 3B, maar voor deze setup is het voldoende. Ik heb de code geprogrammeerd in MicroPython.
Er zitten drie leds aan, die geven informatie over errors, mochten die optreden.
Op dit moment (februari 2023) kost een nieuwe Pi Pico, met WiFi, € 7,95.
Per begin februari 2023 is de Raspberry Pi 3B uitgefaseerd (deze ligt nu in de la te wachten op een nieuw project) en is de Pi Pico in gebruik genomen.
Voor de Pi Pico heb ik zelf een case geprint met mijn Prusa mini 3D printer..
Ik kwam een hele leuke cursus tegen van Nick Chapsas, Cloud Fundamentals: AWS Services for C# Developers.
Deze cursus behandelde precies ook de materie waar ik mee bezig was met Azure! Dat was natuurlijk kat in het bakkie.
Dus dezelfde functionaliteit ook gebouwd voor AWS. Als soort van fail over ;-). Compleet niet nodig, maar wel tof om te doen.
De kosten van AWS zijn het eerste jaar 0 euro. Een heleboel services zijn 1-year free. Volgend jaar zal ik de kosten van AWS ook eens in kaart brengen.
Ik vond AWS wel fijner werken dan Azure. De website is een stuk sneller en dat werkt wel heel prettig. Ook is het veel duidelijker in de uitleg qua rechten cq het is gemakkelijker om alleen die rechten aan een service toe te kennen die het nodig heeft.
Ook zitten er in de user interface van AWS veel meer hints en tips. Dat is wel fijn als je net begint met een nieuwe service. In de afgelopen jaren is dit uit de UI van de meeste applicaties verdwenen, maar als newbee: heel fijn.
Het systeem draait 24/7, met een input elke 5 minuten. Hoe stabiel is het systeem gebleken?
Azure accepteert geen requests meer.
Een 3-tal keer is de HTTP function gestopt met het accepteren van requests. De verzendende partij, de Raspberry PI, kreeg een 503 melding. In de Azure logging was niets te vinden. Het was ook op een willekeurig moment, zonder dat er aan mijn kant aanpassingen waren gedaan. Het gaf mij geen goed gevoel over de stabiliteit van de Azure Functions. De enige methode die hielp was een re-deploy van de Azure Functions. Gek genoeg gebeurde dit alleen in het eerste jaar; daarna is het niet meer voorgekomen. Het zou te maken kunnen hebben met de volwassenheid van Azure Functions destijds.
Haperende uitrol van de Azure Functions.
De deployment van de Azure Functions is gekoppeld aan een commit op een specifieke branch op BitBucket. Je hoeft er bijzonder weinig voor te doen om deze methode aan de praat te krijgen. Downside: je hebt ook bijzonder weinig aanknopingspunten als een deployment faalt, wat vooral de eerste 1 à 2 jaar af en toe gebeurde.
Raspberry PI stopt met versturen van meetwaardes (1).
Het lezen van de temperatuur en versturen van de meetwaardes gebeurt met een Python script dat met een Cronjob elke 5 minuten wordt gestart. Op enig moment werd het script niet meer afgevuurd. Een reboot van de Raspberry PI heeft het euvel opgelost.
Raspberry PI stopt met versturen van meetwaardes (2).
Op enig moment kwamen er geen meetwaardes meer binnen in de Azure Functions. Ook kon ik geen connectie meer krijgen met de Raspberry PI. Een harde reset gaf ook geen resultaat. Na het inpluggen van de voeding ging er ook geen onboard led branden op de Raspberry Pi. Het bleek dat de voeding het begeven had.
Power outage
Met flink onweer 1 stop eruit. Precies de stop waar de schuur (waar de Raspberry PI is) en het modem op zit.
De data wordt elke 5 minuten gegenereerd.
Deze data wordt elke nacht geaggregeerd naar uurwaardes. De 5-minuten data wordt alleen gebruikt voor de actuele weergave. De uurwaardes worden gebruikt voor de historische weergave.
Het is niet nodig om de 5-minuten data langer dan 3 maanden te bewaren. Daarom heb ik een job gemaakt die elke nacht de 5-minuten data ouder dan 3 maanden verwijdert.
Wat zijn de kosten op Azure?
Dat valt dus enorm mee, niet meer dan een paar euro per maand. In combinatie met een paar andere kleine services is de rekening niet meer dan 5 euro per maand.
Na lekker programmeerwerk in zowel Azure als op de Raspberry PI staat de eerste versie live. Tussen de oliebollen door de Raspberry PI en de temperatuursensor opgehangen en de testdata verwijderd. Nu kan het echte loggen beginnen!
Zoals op de Nerdtalk pagina te lezen valt wilde ik iets doen met Azure en heb ik gekozen voor een constante stroom data door temperatuurwaardes te gebruiken.
De temperatuurwaardes uitlezen kan natuurlijk via api's van bestaande weer sites, maar leuker vind ik het om zelf iets te maken met de Raspberry Pi. Ik heb als basis een artikel genomen waarin wordt uitgelegd hoe je temperatuurmeting op de Raspberry PI opzet: DS18B20 waterdichte temperatuur sensor aansluiten op Raspberry Pi.
Het opzetten van de Raspberry PI met de temperatuursensor was eenvoudig om te doen. Het is een relatief eenvoudige setup en ik had al eerder (complexere) dingen gedaan op de Raspberry PI.
Het inrichten van de Azure omgeving was ook goed te doen. Er waren veel tutorials en documentatie beschikbaar. De Azure kosten zijn ook zeer laag voor een project van deze omvang dus je kunt lekker experimenteren zonder dat de rekening hoog oploopt.
De Azure functions zijn in C# geschreven. Die libraries veranderden nog weleens, dus het was soms even zoeken naar de juiste manier om iets te doen. Ik wist nog niet dat er ook een lokale Azure omgeving was (Azurite) dus alles gebeurde op de live testomgeving.
Het koppelen van de Azure functions aan de queues en de storage was eenvoudig. Declareren in attributen bij de functie en het werkt. Aan de ene kant is dat prettig omdat het direct werkt, aan de andere kant voelt het wel als 'magic' dat het zo werkt, zonder dat ik iets met rechten heb gedaan.