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

design

Scherm voor instellen gewenste temperatuur

design

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

drawing

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

drawing

Met deze @route wordt het betreffende bericht van de ESP ontvangen en verwerkt tot in de database.

ESP-8266

drawing

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:

  1. export FLASK_APP=webserver
  2. flask run -h 192.168.43.74

Vervolgens kun je de berichten ontvangen op je terminal, dit ziet er als volgt uit:

drawing

Op de webpagina ziet dit er dan als volgt uit:

drawing

Ik heb ook nog de gegevens geplot toen ik de kachel had aangezet, dat is hieronder te zien:

drawing

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).

drawing

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.

drawing

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.

drawing

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.