Dit is de R&D site van Michel om te experimenteren met- en te leren over Amazon Web Services (AWS) en Microsoft Azure.
Experimenteren met data-opslag van Amazon Web Services (AWS) (AWS DynamoDB), serverless functions (AWS Lambda) en queues (AWS Simple Queue Service) en Microsoft Azure (Azure Table Storage), serverless functions (Azure Functions) en queues (Azure queues).
Dan moet er wel data zijn om te verwerken, en gecombineerd met de liefde voor de Raspberry PI is dat een temperatuurmeting geworden. Die is er altijd, met variabele waardes, dus een ideaal onderwerp voor dit project.
Er zijn twee gegevensstromen: de temperatuurmeting naar de storage en een tweetal aggregatieprocessen. Daarnaast is er nog een monitoring proces dat dagelijks kijkt of er nog metingen worden verwerkt.
De temperatuur wordt gemeten met een DS18B20 meter aan de Raspberry PI.
Deze roept elke 5 minuten via HTTP een AWS Lambda aan die de meetwaarde in een queue plaatst. Een 2e AWS Lambda, die luistert naar berichten die op de queue worden geplaatst, pakt het bericht uit de queue en plaatst het in AWS DynamoDB.
Er lopen 's-nachts twee aggregatie processen en 1 monitoring proces, geïmplementeerd als AWS Lambda:
Bepalen uurwaardes.
Voor de basis temperatuur informatie is het voldoende om de meetwaardes per uur te hebben. Dit proces aggregeert de data uit de AWS DynamoDB naar uurwaardes en slaat deze op in AWS DynamoDB.
Bepalen minimum- en maximumtemperaturen.
Dit proces bepaalt voor elke dag de minimum- en maximumtemperatuur en slaat deze op in AWS DynamoDB.
Monitoren meetwaardes.
Dit proces houdt in de gaten of er nog regelmatig meetwaardes worden vastgelegd.
De website is een .NET 6* ASP.NET MVC website.
De tabbladen, statistiek-meldingen en tabellen zijn gemaakt met Bootstrap 5.
De grafieken (zie verder) zijn volledig geconfigureerd in JavaScript en halen de data op bij een API controller die onderdeel van de website is.
De data wordt door een repository uit AWS DynamoDB gehaald. De repositories zijn voorzien van een cachedecorator die, afhankelijk van de actualiteit van de data, lang of kort cacht.
* .NET 6 is ook wel .NET 6 CORE. Omdat er geen versie 5 en hoger meer komt van het 'oude' framework is besloten de naam CORE te laten vervallen vanaf versie 5 en heet de versie nu gewoon '.NET 6'.
Het systeem draait 24/7, met een input elke 5 minuten. Hoe stabiel is het systeem gebleken?
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 voeding 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.
Alle grafieken zijn gemaakt met behulp van AmCharts.
AmCharts geeft een gratis licentie wanneer je een AmCharts logo/link bij de grafiek plaatst.
De eerste ervaringen met dit voor mij nieuwe JavaScript grafieken framework waren prettig. De voorbeelden op de site zijn duidelijk, de help is uitgebreid en het geheel rendert snel en als SVG.
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..