In januari melde ik in dit topic dat ik naar AWS zou kijken, via wat omzwervingen is dat nu redelijk gelukt.
AWS (Amazon Web Services) heeft honderden producten, ik heb gekeken naar:
Amazon IoTCore (een platform voor MQTT (of HTTPS) Internet Of Things)
Amazon DynamoDB (een veelzijdige NoSQL database)
IOTCore kan berichten (MQTT of HTTPS) van je apparaten ontvangen en daar acties aan koppelen, bijvoorbeeld een alarm, log error of juist iets aanroepen op je eigen webserver en natuurlijk iets doen bij één van de vele AWS diensten. DynamoDB is hier een heel logische keuze als je data wil opslaan.
Eerst maak je je gratis AWS account aan en begin met het aanmelden van het apparaatje in het IoTCore gedeelte van de 'AWS Console
Als je een getoonde hostname kan kan pingen dan wordt er zelfs een vorm van advies gegeven hoe je verder kan handelen. Na wat keuzes begint het downloaden van het 'connect_device_package.zip' bestand. Daarin zitten bijvoorbeeld de software/brondcode (diverse talen beschikbaar) bestanden die je nodig hebt om een versleutelde MQTT verbinding te maken en ook de SSL certificaten die je daarvoor nodig hebt. Dezelfde certificaten kan je ook gebruiken als je met HTTPS je data wil versturen.
Met wat geluk kan je vrij snel berichten versturen en ontvangen van en naar je MQTT apparaat (of alleen versturen met HTTP vanaf je apparaat) dankzij de webbased MQTT test client. Wat voorbeelden:
# ik koos de python client (zit net als cert en key in het zip bestand):
python3 aws-iot-device-sdk-python-v2/samples/pubsub.py
--endpoint a2a23307v143co-ats.iot.eu-west-1.amazonaws.com
--ca_file root-CA.crt
--cert cert.pem
--key private.key
--client_id basicPubSub
--topic sdk/test/python
--count 1
--message '{ "Temperature" : 999 } '
# of via HTTPS
curl --key private.key
-E cert.pem
https://a2a23307v143co-ats.iot.eu-west-1.amazonaws.com:8443/topics/sdk/test/python
-d '{ "Temperature" : 888 }'
Hierna kan je regels gaan toevoegen, bijvoorbeeld bepaalde berichten opslaan in een DynamoDB tabel. Met alle 'permission policies' was dit nog wel even puzzelen. Tip: gebruik de "onError" actie en stuur die naar de AWS CloudWatch Logs.
Als ik meer tijd hebt en wat interesse zie dan zal ik nog wat screenshots en configuratievoorbeelden plaatsen.
Voordelen t.o.v. eerder genoemde oplossingen:
- Enorm schaalbaar, dit kan je echt bouwen voor miljoenen sensoren wereldwijd.
- Voordelig, 'pay-as-you-go' met een flinke 'free tier', de enkele kippenhoksensor van tante truus zal je niets kosten.
- Enorm flexibel door de vele AWS services of andere verbindingen, je kan je backups maken, eenvoudige retensie (opschonen), grote (foto/film) bestanden naar voordelige S3 (Glacier) opslag sturen, MQTT compatibibiteit en alarmen. Er zijn ook producten om al je 'things' te beheren, encryptie/activatiesleutels, locatiegegevens etcetera.
Nadelen:
- Het is soms wel even puzzelen hoe je diverse diensten aanspreekt
- De flexibiliteit en mogelijkheden maken bijvoorbeeld permission policies best wel complex.
- Zoals bij eerder genoemde Grafana en Axiom service heb je niet zomaar out-of-the-box een dashboard met grafieken, ik kon het niet vinden in ieder geval.
Om een idee te geven over kosten:
Tot 30MB (25GB per uur per maand) in DynamoDB met minimale i/o (zeg 10 per uur) is gratis.
1 GB totaal opslag met 100 apparaatjes die 24/7 10 datapakketjes van 1kB doorsturen per uur is ongeveer €2 per maand (alles bij elkaar voor alle 100 apparaatjes).
(Ter vergelijk in 237 GB in AWS Glacier kost me $1/maand, het kan dus zinvol zijn om grote archieven liever naar Glacier te backuppen en uit DynamoDB te wissen).
Veel berichten in dit topic gaan over privacy. AWS levert betaalde diensten met een klein stukje 'gratis proberen'. Ik ben niet bekend met enige vorm van doorverkopen data of gebruik ervan voor eigen marketing. De data wordt 'on rest' versleuteld. Voor bijvoorbeeld S3 opslag kan je zelfs vanaf client versleutelen en ook via MQTT kan je natuurlijk besluiten om je data alvast te versleutelen voordat je het verstuurd. Een AWS alarm koppelen aan bepaalde meetwaarde wordt dan wel erg lastig.
interessant!
Weet je zo of er ook embedded voorbeelden bijzitten om aangeleverde certificaten en ssl encrypted mqtt bijvoorbeeld vanuit een esp32 te doen of een microcontroller die een bekende embedded tcp/ip stack runt?
Op dinsdag 5 november 2024 17:08:55 schreef Stijnos:
interessant!
Weet je zo of er ook embedded voorbeelden bijzitten om aangeleverde certificaten en ssl encrypted mqtt bijvoorbeeld vanuit een esp32 te doen of een microcontroller die een bekende embedded tcp/ip stack runt?
Dank je! Volgens mij mag dat het probleem niet zijn. Ik zie allemaal eenvoudige Arduino basic libraries.
Volgens mij zijn dit wel goede artikeltjes:
https://randomnerdtutorials.com/esp32-esp8266-https-ssl-tls/
Use WiFiClientSecure.h library instead of WiFiClient.h
Use port 443 instead of port 80 ***
Change the host URL to https instead of http
*** Letop de HTTPS AWS IoT protocollen op 443 en 8443 verschillen iets, mijn proefje werkte op de simpelere 8443 variant.
MQTTS kan ook, artikeltje van 2018 over de ESP8266/32 (letop wel het verouderde SSL1.2).
https://www.debashishsahu.com/posts/esp8266-esp32-connecting-to-ssl-tl…