Build This! Softwareontwikkeling

De laatste tijd ben ik aan het spelen met de ESP-01 kaartjes, en ik ben ze aardig leuk gaan vinden. Mocht je er nog niet mee bekend zijn, een ESP-01 is een microprocessor niet groter dan de top van je duim. Er zitten acht pinnen op, waarvan er twee te gebruiken zijn voor input/output van elektrische signalen. Het leukste onderdeel is echter de ingebouwde wifi-chip, waarmee je de kaart draadloos kan verbinden met het internet. Dit, gecombineerd met het feit dat hij exact net zo te programmeren is als een reguliere Arduino, maakt een hoop leuke dingen mogelijk.

Afbeeldingsresultaat voor esp-01
De ESP-01 module

De ESP maakt eigen IOT systemen maken makkelijk, door ze via http requests commando’s te geven en externe apparaten aan te sluiten op de GPIO pinnen. Hierdoor wordt een ESP in principe ook een eigen webserver. Maar dit idee brengt ook risico’s met zich mee.

De ESP krijgt bij verbinding namelijk een eigen ip-adres, en luistert naar de requests via een zelf in te stellen poort. Dit betekent dat je hem standaard alleen maar kan benaderen als je apparaat naar keuze met hetzelfde netwerk verbonden zit. Dit probleem is natuurlijk te behelpen door de poort open te zetten voor buitenaf, maar dit brengt weer andere risico’s met zich mee.

Afbeeldingsresultaat voor dht esp
Een ESP module, aangesloten op een DHT11 thermometer.

Er zit helemaal geen beveiliging op het apparaat zelf. Ervan uitgaande dat het bestaan van jouw adres en poort bekend wordt bij de buitenwereld, wat gebeurt er als een hacker een DDOS-aanval lanceert op jouw adres? Ik weet uit ervaring dat dit gebeurt, ook al heeft jouw server helemaal geen commercieel of politiek belang. Wat gebeurt er met een ESP bij een overdosis aan requests? Het lijkt me niet onwaarschijnlijk dat hij stukgaat en nooit meer een request zal verwerken.

Er moet dus een bepaalde mate van beveiliging zijn. De ESP kan die beveiliging (vooralsnog) niet garanderen, en routers kunnen alleen specifieke (groepen van) ip-adressen van buitenaf blokkeren, niet dynamisch. Waar moeten die overmatige requests dan tegengehouden worden?

Dat antwoord ligt bij de middleware. Waar ik normaal gesproken een voorstander ben van het huren van servers (laat bedrijven die beveiliging lekker oplossen, spaar jezelf de moeite), gaat dat hier niet werken. Je server moet immers in hetzelfde netwerk zitten als de ESP. Wat je wel kan doen, is een Raspberry Pi pakken, je favoriete web framework installeren (Node.js of Django werken prima) , en daarmee gaan werken. Zet die server op de open poort, zorg dat de beveiliging on point is (blokkeer overmatig veel requests van dezelfde afkomst, etc.), en gebruik vervolgens routing om vanuit de Pi requests te doen naar de ESP. Pas het antwoord waar nodig is aan, en stuur het mee terug als response.

Afbeeldingsresultaat voor middleware diagram
Middleware functioneert als een extra laag tussen de ESP die de data moet krijgen/geven en het apparaat dat de request stuurt. Tevens zorgt middleware ervoor dat de request bij de juiste ESP terecht komt.

Dit systeem heeft nog een bijkomend voordeel: Omdat je slechts één server gebruikt voor je communicatie naar buitenaf, maar vanaf daar requests doet naar ESP’s, is het mogelijk om meerdere ESP’s te installeren en als webserver te gebruiken, die allemaal van buitenaf gebruikt kunnen worden. Als je één ESP had ingesteld op de open poort, had er geen extra ESP gebruikt kunnen worden als webserver voor buitenaf.

Je kan natuurlijk ook een ESP gebruiken voor de routing naar andere ESP’s, maar dit gaat een hoop problemen geven. Zo zal je alle beveiliging zelf moeten programmeren, en mag je de hele server uit elkaar halen als je een wijziging in je netwerk hebt. Bij de Pi kan je gewoon een git repository clonen, op je computer de code aanpassen, en via ssh de wijzigingen binnentrekken. Of je slaat git over en gaat direct remote werken.

Kortom, de ESP-01 heeft een hoop mogelijkheden, maar we moeten wel na gaan denken hoe we de architectuur gaan doen. Gebruik middleware voor de beveiliging en routing, en bouw je ESP applicaties in eerste instantie goed, en dan kan er weinig foutgaan. Benieuwd hoe ik dat doe? Momenteel ben ik een repository aan het maken waar je sketches kan vinden voor de DHT11 en DHT22 thermometers, en een eigen relais. Klik hier om te kijken. Heb je verder nog ideeën voor ESP applicaties, of wil je dat ik een ESP apparaat voor je in elkaar zet? Neem dan even contact met me op.

Leave a Reply

Your email address will not be published. Required fields are marked *