IoT og den perfekte kop kaffe

I cVation har vi altid haft stor fascination og nysgerrighed på IoT. Efter en en fredagsbar fandt vi ud af, at man via en app kunne styre kontorets kaffemaskine over Bluetooth. Derfra stod det klart, at vi måtte lave et rendyrket IoT-projekt med udgangspunkt i kaffeskænkning, på det kommende hackathon.

Oskar Nedergaard Sørensen
Software Engineer
Motivation: Nysgerrighed på IoT og den perfekte kop kaffe

Den primære motivation for projektet var at se om vi kunne lave en IoT-løsning fra scratch – på bare én dag. Den underliggende motivation var at se, om vi kunne lave noget fedt med kaffemaskinen, der kunne gøre hverdagen på kontoret en lille smule sjovere.

Inden hackathon’et havde vi fundet et bibliotek skrevet i C++ , hvor Bluetooth-kommunikationen mellem app’en og kaffemaskinen var blevet reverse engineered. Vi satte os det mål, at man via en intern hjemmeside skulle kunne bestille en kop kaffe. Udover det ville vi se om vi kunne nå at udvide projektet med at kunne bestille en prædefineret kop kaffe vha. vores nøglebrikker.

Etablering af boilerplate og infrastruktur

Da hackathon’et blev skudt i gang om morgenen, skulle vi hurtigt ud over stepperne for at nå at være færdige til om eftermiddagen. Heldigvis havde vi vores automatiserings-scripts, der er en del af cVation CADD. Det gav os boilerplate-koden til løsningen, inklusiv en tom Angular-applikation og Infrastructure as Code for alle de Azure ressourcer, vi havde brug for, bl.a. IoT Hub og Cosmos DB samt al CI/CD-automatisering.

Arkitekturen for løsningen, som består af Raspberry Pis, IoT Hub, App service, Cosmos og Functions, kan ses på følgende diagram.

Frontend

I frontenden lavede vi en simpel menu med nogen pæne navne for de produktkoder, kaffemaskinen kender, så vi på kontoret nemt kan sætte en kaffebestilling i gang derigennem. Når der trykkes på knappen, sendes der en besked via en IoT Hub til vores Raspberry Pi, om at bestille den specifikke produktkode.

Yderligere, introducerede vi funktionalitet til at associere serienummeret på vores nøglebrikker med en foretrukken kaffespecialitet. Dette valg blev gemt i en Cosmos DB.

Kommunikation med kaffemaskinen

Vi opsatte en Raspberry Pi 4 Model B bag kaffemaskinen. Denne model har indbygget Bluetooth, og kan derfor snakke med kaffemaskinen. Derefter lavede vi et lille C++-program, der bruger det førnævnte bibliotek, til at kommunikere med kaffemaskinen. Programmet tager en produktkode på en kaffespecialitet ind som et command line argument og bestiller så dén kaffespecialitet. Dette C++-program wrappede vi i et C#-program. C#-programmet blev sat til at lytte på beskeder indeholdende en produktkode fra IoT Hub’en til device’et. Nu manglede vi bare funktionalitet til at brugerne kunne sende beskeder til device’et.

Læsning af nøglebrik

Inden hackathon’et havde vi købt en RFID-læser. Læseren var godt nok lavet til en Arduino, men vi gættede på, at vi kunne få det til at virke med en Raspberry Pi og dens pins.

Efter at havde fulgt en simpel guide til opsætning af en RFID-læseren med en Raspberry Pi, kunne vi scanne nøglebrikker og printe deres serienummer til konsollen med Python. For at kunne sende det op til Azure, installerede vi Azures IoT Python SDK og brugte det til at sende en besked til IoT Hub’en. For at læse disse beskeder lavede vi en Azure Function, der læser serienummeret, der er indeholdt i beskederne, og derefter bruges det samme flow som ovenfor, med at sende en besked til device’et om at bestille denne produktkode.

Fremtidsmuligheder

I stedet for blot at sende en produktkode, er der også mulighed for at sende et XML-dokument til kaffemaskinen. Dette dokument kan fortælle kaffemaskinen, præcis hvad den skal gøre, inklusiv hvor meget og hvor varmt vand, der skal bruges, mængden af mælk samt i hvilken rækkefølge det alt sammen skal ske. Så her er der mulighed for at skræddersy præcis den kop kaffe, man gerne vil have. Det kunne så blive associeret med ens nøglebrik i stedet for en produktkode. Men denne udvidelse må dog vente til næste hackathon!

Demonstration

Efter 7 timers effektivt team-work var alle dele programmeret og den første bestilling blev sendt afsted mod kaffemaskinen. Det lykkedes! Skægt og udfordrende projekt, som rent faktisk endte med en perfekt brygget kop kaffe. Ahhhh!


Se Oskar demonstrere produktet her.

Sidder du tilbage med spørgsmål eller har du ideer til emner du godt kunne tænke dig at se et webinar omkring?

Så vil vi rigtigt gerne høre fra dig! Uanset om det er stort eller småt må du meget gerne række ud!

Giv lyd!