image_from_ios
>

Praktisk anvendelse av IoT i hverdagen

Eivind Auestad 
3. april 2019

Skytjenester og IoT er i vinden som aldri før. Vi ønsket derfor å lage et enkelt prosjekt som demonstrerer en slik løsning til «hverdagsbruk» – i dette tilfellet for å overvåke kaffeforbruk gjennom arbeidsdagen. 

large-2395
Eivind Auestad, artikkelforfatter og systemutvikler i Bouvet Arendal.

Til alle tider har kaffedrikkere fryktet den siste skvetten med kaffe som helles i koppen, fordi det betyr at man må sette på ny kanne. Men nå trenger du ikke å beskymre deg lenger.

Nå kan du se hvor mye kaffe som er igjen – og heller la noen andre sette på en ny kanne. 

I prosjektet benyttet vi Raspberry, Arduino-baserte mikrokontrollere og sensorer.

Oversikt

Skissen under gir en oversikt over de ulike komponentene vi har brukt og hvordan de spiller sammen.

Til målingene benytter vi sensorer som forer en Wemos D1 Mini med data. Wemos D1 Mini er en mikrokontroller med innebygd wifi. Wemos’en programmeres til å ta i mot sensordata og sender det videre til en Raspberry. Denne er konfigurert som ett Soft Access Point (en veldig enkel ruter).

Raspberry’en tar imot data og sender det videre til en MQTT broker. I dette tilfellet hostes tjeneste av CloudMQTT (www.cloudmqtt.com). Data her lagres ikke, men dyttes øyeblikkelig ut til alle som abonnerer på denne meldingstypen. Man kan også installere sin egen broker(server) lokalt. MQTT SW er open source.

Webløsningen for å se på data hostes av Amazon AWS/Azure. Brukeren vil se sensordata og en graf som viser vekt over tid.

Bilde2

Grafen viser vekten av kaffekannen i kg. Toppene viser når en person har trykket på pumpen for å fylle koppen. I dette tilfellet er det ca. 1.05 liter med kaffe igjen. Som man kan se utøver forskjellige personer ulikt trykk på pumpen (Grunnlag grunnlag for analyse av AI?). Fuktighet og temperatur er målt på utsiden av kaffenkannen og tatt med for å vise at man kan koble rimelig mange sensorer til en mikrokontroller. (Se toppen av bildet for fuktighet og temperatur).

Skytjenester

I dette prosjektet testes 3 skytjenester ut:

•          CloudMQTT – står for mottak og videresending av data

•          Amazon – Viser webside og test av virtuel maskin oppsett

•          Azure – Viser webside og test av virtuel maskin oppsett

Oppsett av websider i de enkelte skyene krever ikke endringer i kode for å snakke med MQTT skytjenesten.

MQTT (Message Queuing Telemetry Transport)

MQTT er en veldig enkel protocol som består av 2 felt. «Key» og «Value». Typisk innhold en MQTT melding kan ha: {«raspberry/sensor/weight»:»1.84532»}.

MQTT-løsningen ble valgt fordi den er enkel, og fordi det finnes mange opensource-biblioteker for det fleste plattformer som kan brukes. Den er også enkel å programmer inn i egne løsninger. MQTT er en bra løsning å bruke hvis man ikke har API eller ikke trenger å lagre data.

CloudMQTT ble valgt fordi den har en gratis Tier(cat level) uten tidsbegrensning. Begrensningen her er at det er maks tillatt med 5 subscribers samtidig. I test-sammenheng og mindre prosjekter kun for enkel datainnsamling fungerer dette veldig bra. 

Både Azure og Amazon har sine egne MQTT tjenester innebygd i IoT-tjenestene sine. Disse ble ikke valgt pga. tidsbegrenset gratisperiode (dette er jo mest for moro skyld).

Amazon AWS

For dette prosjektet ble hovedfokus satt til Amazon sine skytjenester valgt. Vårt forrige prosjekt brukte Azure, men Azure ble også brukt mot dette prosjektet, for å ha ett likt sammenlignings grunnlag. Hensikten er å samle erfaringer av skytjenester, og kunne sammenligne dem, sett fra ståstedet til en som ikke har satt opp eller brukt dem før.

Amazon har en gratis Tier som varer i 12 mnd. Under denne Tieren har man relativt mange tjenester å velge mellom.

Opprette tjeneste

Siden skyen skulle hoste en enkel webside ble det valgt en S3 (Simple Storage Service) tjeneste. docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html 

Etter registrering tok det bare noen sekunder før S3 tjenesten var opprettet og man kunne begynne med å opprette Buckets.

Bilde3

Amazon skytjenester har også mulighet for versjons håndtering av kode som lastes opp.

Tilganger

Amazon har i utgangs punktet ingen tilganger, med unntak av eier som har både lese og skrive rettigheter. Når websidene er lastet opp må man sette tilganger manuelt, og i ett tilfelle kopiere inn en json-streng med data. Hvis dette ikke gjøres vil websiden være utilgjengelig. Dette krevde en god del Googling og kunne vært gjort mye enklere og mer selvforklarende. Når alle tilganger er ordnet kan man gjøre websiden Public med ett knappetrykk.

Opprette enkel webside

Deploye kode var relativt kjapt og enkelt. Man bygger en deployment-pakke lokalt og drar filene over i valgt opprettet Bucket.

Bilde4

 

1.1.1 Opprettelse av virutell maskin og containere

En container kjøres på en virtuel maskin(VM) . Containere inneholder ett image av koden du vil kjøre. Man kan ha mange containere på en virtuel maskin. En container kjører som en egen instans med full tilgang til den virtuelle maskinens ressurser.  Ett image inneholder alt av kode og filer som trengs for å kjøre tjenesten/web siden, datbasen osv. Å opprette en virtuel maskin er komplisert første gangen. Man må holde tunga rett i munnen siden Amazon sine egne beskrivelser oppleves som noe springende. I dette tilfellet ble det opprettet en linux Ubuntu maskin.

Menyvalgene er vanskelig å navigere seg igjennom og det er ikke intuitivt å finne ut av dashboard når man eksempelvis skal finne tjenestene man nettopp har opprettet. Den enkleste måten å navigere er noen ganger å skrive inn adressen direkte i url-feltet. Bildet under viser noen av menyvalgene.

Bilde5

Når man har opprettet en VM kan man laste opp container image av kode ved hjelp av Docker. 

Man kan også da logge inn på maskinen via ett kommandovindu. Man kan enten bruke ssh-kommandoen fra ett dos-vindu, ett Java-basert-vindu eller Putty. Hvis ingen av disse kommer opp er det problemer med forbindelsen, slik undertegnede erfarte eller at Java ikke fungerer i Chrome lenger.  Under vises ett Putty Terminal-vindu som er logget inn på VM.

Bilde6

Den beste måten å logge inn på er via Putty, men her må man passe på at man har tilganger. Under opprettelse av en VM får man ikke lov til å gjøre den public. Det gjøres etter at man har opprettet VM’en. Hvis man får problemer med å logge seg på er det mest sannsynlig at innkommende regler for VM’en sier at man ikke har lov. Da må man tilbake til oppsettet og legge til protokoller og porter og viktigst av alt: generere nøkler som man kan laste ned og legge til i Putty når man vil logge seg inn.

Når dette er gjort har man bare igjen å opprette Routing, Services, Virtual Private Cloud(VPC), installere Docker på VM, installerer docker-compose på VM, opprette en docker-compose.yml fil på VM.

Azure

Azure har ett menysystem som oppleves som mer oversiktlig. Manualene er også profesjonelt og godt utført. Man finner kjapt frem til rett sted. Azure bruker Active Directory for innlogging. Om man er logget inn på pc blir man automatisk logget inn i portalen til Azure. Bildet under viser oversikten over dine tjenester i Azure portal.

Bilde7

I motsetning til Amazon vises alt på én side. Man hopper ikke frem og tilbake mellom sider for å sette opp tjenester, tilganger eller roller.

Siden Azure er tett integrert i Windows, får man mye ekstra gratis drahjelp når man skal deploye fra f.eks Visual Studio. 

For å lage ett enkelt webområde man kan deploye kode til, følger man instruksjonene. Valgene er selvforklarende og intuitive. Informasjonsikonet inneholder faktisk intuitiv informasjon om hva de enkelte feltene betyr. Her trengtes ikke googling.

Opprette enkel webside

For å opprette en enkel webside trengtes det knapt søk på nettet, og det var for å finne ut av hvor ftp publish data ligger.

Opprettelse av virtuel maskin og containere

Vi valgte Ubuntu 18.04 maskin. Dette gikk smertfefritt uten bruk av Google. Informasjonen på hvert enkelt felt er fyldig og forklarende. Man trenger ikke å gjette seg til hva man gjør. Terminalvinduet fungerer også godt i browseren, dog noe tregt. Selv foretrekker jeg Putty. 

Oppretting av containere går veldig enkelt og greit. Selvforklarende, oversiktlig, lite googling.

Jeg lastet opp samme image som for Amazon. Azure viser en liste over alle images som er lastet opp. Der kan man velge om de skal deployes til web eller kjøres som en tjeneste. Veldig enkelt og greit.

Man opplever heller ikke at man må bevege seg frem og tilbake mellom browser-vinduer for å opprette det ene eller det andre. Alt foregår i ett browservindu, slik at man holder tråden på det man gjør.

Erfaringer

Amazon AWS er samlet sett vanskelig for førstegangsbrukere å sette opp og bruke. Dette fordi det krever mye innstillinger og programvare (Java, Docker, AWS for Poweshell, AWS Tools), som må ligge klart i bunn. Dette blir ikke nevnt i manualene og man hopper derfor mye frem og tilbake. Menyene er vanskelig å navigere i og det er svært lite hjelp på informasjonsikonet. Man må regne med en del googling. Brukermanulene følger ikke en rett linje fra man klikker på en link, til det man faktisk ser på skjermen. Det er mange sidesteg til andre oppsett uten at det nevnes i Wizarden. Generelt sett oppleves websidene rotete, og det blir mye klikking for å finne frem til rett sted. 

Amazon har stort fokus på sikkerhet og man må spesifikt si ifra at man vil gjøre noe public. Passord er fy og de er konsekvent på bruk av SSH (Secure Shell). Azure lar deg velge mellom SSH og brukernavn/passord. 

Amazon har veldig mange innstillinger og egenskaper som gir det masse kraft og fleksibilitet, men det krever fordypning i skytjeneste. Bare det å sette opp sikker login for Docker er ett kapittel for seg selv.

S3 deployment er enklere enn Azure sin deployment.

Det er mulig jeg hadde kommet enklere ut av det ved å ta et kurs i forkant, men igjen – dette var mest for å lage en demonstrasjon og få noe erfaring med tjenesten 

Azure er veldig kjapt og enkelt å komme igang med. For å deploye en enkelt webside trenger man kun en ftp-klient (eks. FileZilla). Skal man deploye til container må man installere Docker.

Amazon er først og fremst rettet mot profesjonelle aktører. Azure er det enkle steget inn i skyverdenen for førstegangsbrukere.

Docker

Docker er nesten en standardløsning for å lage images, og dytte de ut til sky tjenester. Det Docker gjør er å lage ett filsystem som inneholder alt du trenger – for å kunne kjøre løsningen din som en egen og isolert instans. Når denne kjøres på en virtuel maskin vil den kjøre parallelt med andre images, uten at de forstyrrer hverandre. Fordelen med dette er at de er enkle å erstatte med ny kode. Hvert image bruker minne og processor kapasiteten til den virtuelle maskinen. Docker krever noe læring for å brukes riktig og man bør bruke noe tid på å forstå den. Dette er programmet er gratis for privatbruk opp til en viss grense.

Websiden

Websiden er laget i React. Her må man installer ett react-mqtt bibliotek for å kunne kommunisere med MQTT brokeren. 

Man abonnerer på en melding fra MQTT brokeren. Hver gang en ny melding kommer inn blir dette dyttet ut til alle som abonnerer på denne meldings typen.  Det er også mulig å sende meldinger andre veien via CloudMQTT til Raspberry’en, typisk kommandoer for styre en sensor eller en kommando som sier f.eks. «Send meg data». 

Websiden ble kodet ved hjelp av Visual Studio Code editor som er ett gratis program og svært mye brukt av web utviklere.

IoT-enheter

Man trenger data å dytte inn i skyen. Dette kapitlet tar for seg bruk av sensorer som måler omgivelsene og sender data opp i skyen.

Sammenkobling av sensorer og mikrokontrollere finnes det mange eksempler av på internet og man finner også mange gode ideer der. Hackster.io er et godt sted å begynne.

Den eneste programvaren man trenger er Arduino Sketch eller tilsvarende program. Dette er gratis. Her kan man programmere og flashe programvaren til mikrokontrolleren, via USB-tilkobling.

Det finnes svært mange eksempler og walkthroughs for nybegynnere. Undertegnede hadde aldri tatt i en Arduino før dette prosjektet, men lærte seg kjapt hvordan man lager ett «imponerende» oppsett.

Ideen bak å bruke en Raspberry som gateway for Wemos, er å arbeide med ett oppsett som virker bra, og som raskt kan utvides med flere sensorer og Wemos’er.

Sensorer

Samtlige sensorerAlt av utstyr er kjøpt fra Kina. De er billige og holder god kvalitet.

Bilde8

DS18B20 - Temperatur sensor

Denne sensoren har en nøyaktighet på ±0,5 ֯C innefor -10 - +85 grader og ±2 ֯C innefor -55 - +125 grader. Det kreves litt lodding, men det finnes vanntette produkter av denne som er ferdigloddet, dog til høyere pris. Styrken til denne sensoren er at man kan koble på så mange man vil. Hver sensor har ett unikt serienummer slik at alle kan kommunisere på samme datalinjen inn til mikrokontrolleren.

 

 

 

Bilde9

DHT 11 – Fuktighets sensor

Sensoren har også innebygd temperaturmåler. 

Denne sensoren har en nøyaktighet på 5% innefor 20-80% luftfuktighet. Dette er ikke den beste sensoren å kjøpe. Betaler man én dollar mer, vil man kunne få en sensor som er mer nøyaktig og fungerer fra 0-100% fuktighet med 2-5% nøyaktighet.

 

 

 

Bilde10

HX711 – Vektsensor med forsterker

Hver av sensorene tåler 50 kg, men hvis man kobler de sammen i en Wheatstone Brigde, kan man måle 200 kg med 4 sensorer. Sensorene er koblet til en liten forsterker som man kobler videre til Wemos.

Sensoren er en motstand, som endrer motstandsstyrken alt etter trykket som utøves på den. Ved å måle spenningsforskjellene mellom motstandene kan man beregne vekttrykket. Wemos’en er programmert til å nullstille vekten (tare) hver gang den resettes.

 

 

Bilde11

Wemos D1 Mini (ESP8266)

Denne mikrokontrolleren er på ca. 2.5x3.5 cm. I tillegg til WIFI-muligheter har den innganger slik at man kan koble på flere sensorer. Programming foretas ved at man kobler Wemos til USB-kontakten. Det samme med strømforsyning. En powerbank vil kunne vare noen måneder, siden strømforbruket er svært lavt. Forbruket er så lavt at en powerbank slo seg av, fordi den ikke trodde den var koblet til en enhet. Rekkevidden er på ca. 5-150 meter, alt etter hindringer.

Programmet i Wemos skrives i C. Biblioteker for å få data fra de enkelte sensorer er open source og kan enten installeres fra Arduino Sketch eller man kan laste ned en zip fil fra ett Git Repository. I dette prosjektet sender hver Wemos data til Raspberry ca annehvert sekund. Data pakkes inn i ett json objekt før det sendes.

Bilde12

Raspberry PI 3

Raspberry er en liten pc som kan kjøre Linux- eller Windows-versjoner. Linux er å foretrekke. Raspberry’en i dette prosjektet ble satt opp til å være ett Soft Access Point. Dvs. den får en statisk IP-adresse, og fungerer som en ruter som deler ut IP-adresser til enheter som kobler seg på. Dette oppsettet gjøres i Linux. 

Selve programmet som mottar data fra Wemos enheter og sender de videre til skyen ble programmert i Python. Python er ett lettvekts script språk som brukes mye. Strømforsyningen til Raspberry er via USB-kontakt og man kan bruke powerbank også på denne. Batterietiden vil være vesentlig lavere enn med Wemos pga høyere strømforbruk.

Generelt

Dette sensoroppsettet kan brukes i mange sammenhenger, også utendørs. Ved hjelp av spenningsdelere og bilbatteri kan dette plasseres langt fra ethvert WIFI/LAN-punkt. Man kan få kjøpt LTE (Long-Term Evolution, 4G)-kort til Raspberry og sette inn ett data-SIM-kort. Disse koster rundt 45-70 dollar (noen av disse er også utstyrt med GPS). 

Ett bruksområde av denne løsningen er f.eks. overvåkning av bikuber. Man kan måle vekt for å se hvor mye honning som produseres og målåle temperatur og fuktighet for å se på almenn tilstanden inne i kuben. En utvidelse til dette kan være en mikrofon for å måle støy. Bier har en tendens til å bråke mer like før de svermer.

Ved å endre type sensoreren kan man lage sitt eget smart hjem hvor man kan overvåke og styre sensorer.

Alt av biblioteker som er brukt er Open Source og er enkle å finne og å installere selv hvis man lite kunnskap om Linux. Det samme gjelder å progammere Arduino baserte mikrokontrollere.

Hvis man er villig til å vente i noen uker kan man få det kjøpt delene billig fra Kina.

Bruk (utvidet)

Tester over flere dager har vist at den er forbausende stabil.

Ved oppstart bruker programmet i Wemos’en ca 2-3 sekunder på å komme i normal drift. Etter oppstart vil den prøve å koble seg til Raspberry’en helt til den får kontakt.

Hvis Raspberry ikke er startet opp vil Wemos alikevel prøve i det uendelige. Ved oppkobling mot Raspberry vil Wemos umiddelbart begynne å sende sensordata hvert andre sekund.

Fra sensordata er lest og sendt fra Wemos, kan det ta 3-4 sekunder før data kommer fram på websiden.

Python-programmet på Rasberry vil starte automatisk når strømmen settes på.

I praksis er dette Plug’n’Play.

Forbedringspotensiale

Forbedrings potensialet er det bare fantasien som setter grenser for. Ikke utstyrsmessig sett, men også i måten man kan tolke data på.

  1. Utstyre kaffekoppene med rfid-tag, slik at man kan telle antall kopper per person. (Finne ut av hvem som ikke satte på ny kanne)
  2. App med alarm, slik at man vet når kaffekannen er tom (Kundene kommer om 30 minutter. Må ha kaffen klar)
  3. Små LCD/Oled skjermer med informasjon (Jeg har ett par skjermer som er på størrelsen med ett frimerke. Fantastiske greier!)
  4. Backup-systemer, hvis WIFI-nettet går ned.
  5. Data lagres i sky database for AI-analyse
  6. Bevegelsessensorer som registrerer personer i nærheten, og prøver å friste med en kopp kaffe (noen som husker Toasteren fra serien Red Dwarf?)
  7. Kaffenkanne husker (via sky) når tid du pleier å drikke kaffe og hvor mange kopper. Kan deretter sende deg melding på mobilapp hvis du har drukket for mye og kanskje bør ta det med ro. Glemmer du å drikke kaffe kan kaffekannen sende deg en ‘bekymringsmelding’. 
  8. Analysere trykket brukeren utøver på pumpen for å finne ut av om du er stresset.

Konklusjon

IoT er på full fart inn i vår hverdag. Big data er både av kommersiell- og egen interesse og data kan brukes både feil og riktig.

Feil ved at data brukes mot folk. Eksemepl: Andre må sette på ny kanne fordi du ventet med å ta den siste skvetten.

Riktig ved at data brukes for folk. Eksempel: Du setter på ny kanne fordi du vet det ikke er nok til en kopp til.

Dette prosjektet viser allsidigheten og realtiv enkelthet i bruk av IoT for sensorovervåkning, og hvordan data kan brukes.

Sensorer er utrolig små og kan gjemmes overalt. Prototypen i dette prosjektet kunne fint fått plass i en fyrstikkeske med batteri, hvis en ser vekk fra vektsensoren og kan sende data ut i skyen i månedsvis. 

1

Prototype versjon 2

Bilde13