4_Eindstation_smart_technology - minorsmart/msi-smart-industry-thomasdewinkel GitHub Wiki
Eindstation
Hier is de eindopdracht te vinden voor de eindstation opdracht van smart technology.
Requirements
Voor de minor is het de bedoeling dat wij een meetstation maken. Dit meetstation moet op basis twee variabelen: de temperatuur en de vochtigheid een plant water geven. Voor mijzelf heb ik de opdracht iets aangepast aangezien ik merk dat ik de behoefte thuis heb om mijn kachel beter te controleren. Dit komt omdat ik thuis een elektrische kachel gebruik die ik continu aan heb. Dit vind ik zelf niet zo handig aangezien de temperatuur blijft oplopen. Het doel is om met behulp van het meetstation te zorgen dat de kachel zorgt voor een constante temperatuur in mijn kamer.
In de tabel hieronder staan de non-functional requirements:
Identificatie | Toelichting |
---|---|
NFR.1.0 | De gebruiker moet zijn elektrische kachel efficiënter kunnen gebruiken met behulp van het meetstation. |
In de tabel hieronder staan de functional requirements:
Identificatie | Toelichting |
---|---|
FR.1.0 | Het meetstation meet de kamertemperatuur. |
FR.2.0 | Het meetstation stuurt periodiek de kamertemperatuur door naar de webserver. |
FR.3.0 | De webserver slaat de kamertemperaturen op. |
FR.4.0 | De webserver heeft een webomgeving. |
FR.4.1 | De webomgeving heeft een webpagina waarop de huidige buitentemperatuur is te zien. |
FR.4.2 | De webomgeving heeft een webpagina waarop de gewenste temperatuur in te stellen is. |
Ontwerp
Scherm voor huidige temperatuur
Scherm voor instellen gewenste temperatuur
API
Hieronder is te zien welke berichten het de webserver kan verwerken.
Request | Response |
---|---|
POST /postweatherdata | Hier wordt continu de de huidige temperatuur naartoe verstuurd. |
POST /create | Hier wordt de kamertemperatuur ingesteld. |
GET /gettemperature | Geeft de aangepaste temperatuur terug. |
Software
De software is te vinden onder de link.
Flask
Voor deze opdracht is gebruik gemaakt van Flask. Ik heb daarvoor een tutorial gevolgd van digitalocean. Zelf vond ik dit niet echt een toegankelijke tutorial voor beginners (ik had al wat ervaring). Qua moeilijkheid is de ESP-8266/Arduino moeilijker vind ik zelf, omdat je daar veel meer zelf moet doen qua code technieken. In Python is het vooral belangrijk dat je let op de uitlijning. Flask maakt gebruik van een SQLite3 database. Daarvoor had ik het volgende script gebruikt: script.
Met Flask kan je API berichten maken op de volgende manier:
Bericht voor de index pagina
met de @route kun je de route van je API bericht bepalen. Allereerst moet je de data ophalen vanuit de database met de get_db_connection(). Deze data kun je vervolgens in een variabele stoppen en op je pagina gebruiken. Bij mij gebeurt dat in de index.html. Op de betreffende pagina roep je dan de betreffende block note aan: {% block content %} {% endblock %}.
Bericht voor het ontvangen van berichten
Met deze @route wordt het betreffende bericht van de ESP ontvangen en verwerkt tot in de database.
ESP-8266
Met deze regels wordt de huidige temperatuur opgehaald en vertaald naar een JSON bericht. Dit bericht wordt vervolgens verstuurd naar de webserver.
Resultaat
Je start je server met de volgende twee regels op een terminal:
- export FLASK_APP=webserver
- flask run -h 192.168.43.74
Vervolgens kun je de berichten ontvangen op je terminal, dit ziet er als volgt uit:
Op de webpagina ziet dit er dan als volgt uit:
Ik heb ook nog de gegevens geplot toen ik de kachel had aangezet, dat is hieronder te zien:
Plotten is gedaan met een matlab library
Op het andere scherm wordt de huidige buitentemperatuur van Landhorst (gemeente Sint-Anthonis) weergeven, zie de afbeelding hieronder (via openweather).
Resultaat
Het resultaat is in de volgende video te zien.
Daarvan is ook een plot te zien in de afbeelding hieronder (de datums zijn daarop helaas niet mooi geplot). Op die afbeelding is te zien dat op het moment wanneer de kamertemperatuur op 18 wordt ingesteld, de daadwerkelijke temperatuur oploopt naar 18. Op het moment dat de kamertemperatuur 18 is dan gaat de elektrische kachel uit.
Business model canvas
Deze opdracht kan ook worden vertaald naar een business. Dit zou dan betekenen dat je voor huizenbezitters dit systeem met eletrische kachels integreerd dat zij hun energiebehoefte met behulp van elektrische kachels kunnen regelen. Dit idee is vertaald naar een business model canvas op de volgende manier.
Reflectie
Aangezien deze opdracht voor mij buiten de minor goed bruikbaar is ben ik heel tevreden met het resultaat. Ik zal het uiteindelijke resultaat ook zeker gaan gebruiken.