There were some challenges on the way to the finishing line.
Not all of the drones will take Lego as food
Even though we’re generally happy with the drones we tried to achieve our goals with, they were not so easy to force to observe small Lego parts (suspicion: small size). While the task is doable, it would probably need to fly very low and very carefully. The most suitable object would be of size of a melon.
Drone + Azure = not always success.
The main project goal was to extract, transfer and load some data from the drone to analyze it for future use in Azure services. Naturally, a connection to Azure is essential for this task. To set it up showed up to be easier said than done. But that remains a task for future studies.
Struggling with the basic drone control
Even though our team succeeded in ordering the drone with the basic tasks, it was still not a streamlined process and required much attention (and time) for each test.
Summed up, it was an interesting challenge, but this time it was too challenging! đ
Vipps er en av samarbeidspartnerne til Arctic Cloud Developer Challenge 2021, og en av utfordringene vi har fÄtt dere er Ä integrere mot Vipps sine APIer.
Skill har jobbet med en lÞsning for betaling for smÄoppgaver i hjemmet og ukepenger, og har jobbet med fÞlgende deler av Vipps-APIet
Sende betalinger
Sjekke betalingsstatus
Rapportering pÄ Vipps-data med PowerBI
Recurring payments (ukepenger)
Vi har implementert all logikk mot Vipps i Power Automate Cloud Flows som er et grafisk verktĂžy for lage arbeidsflyter
Vi har benyttes Vipps sitt eCoommerce API https://github.com/vippsas/vipps-ecom-api
Autentisering
Alle vÄre flyter starter med et autentiseringssteg der vi henter access token som vi benytter i videre steg. Vi har valgt Ä ikke spare pÄ token mellom de forskjellige operasjonene, for hver flyt sÄ henter vi et nytt access token.
Sende betaling
Vi sender betaling med Ă„ bruke
Sjekke betalinger
Vi har flyter som gÄr hver time og sjekker betalingsstatus pÄ de ordrene vi har sendt fra systemet slik at vi til en hver tid har oversikt over hvilke betalinger som stÄr Äpne, har blitt avbrutt, eller blitt refundert. Disse statusene blir oppdatert tilbake til Dataverse-tabellen som holder pÄ ordrene slik at man kan se oppdatert betalingsstatus der.
Rapporterings-API og PowerBI
Vi har lagd vÄrt eget rapporterings-API som er bygd pÄ toppen av ordre i Dataverse og Vipps sitt ecommerce API
Her henter vi ut alle ordre fra dataverse og sammenstiller disse med trasaksjoner
Rapportering blir gjort i PowerBI, her har vi laget rapporter som knytter transaksjoner i Vipps opp mot ordrer sendt fra Power Platform slik at man kan fÄr oversikt over faktisk betalingsstatus, om betalinger er refundert etc.
Her har vi ogsÄ benyttet Power Automate Cloud Flows for Ä lage et veldig enkelt mellomlag for dette
Hadde dette vĂŠrt et produksjonssystem kunne vi nok ikke gjort det pĂ„ denne mĂ„ten da vi faktisk spĂžr API-et til Vipps “live” for hver forespĂžrsel fra rapporteringslĂžsnignen, men mĂ„tte heller hentet ut dataene til f.eks en Data Lake i Azure.
Vi har lagd vÄrt eget enkle JSON-schema for rapportering pÄ transaksjonshistorikk.
Dette API-et har vi benyttet videre inn i PowerBI slik at vi der ogsÄ kan bruke data fra Vipps som en kilde
Vi har gÄtt enda mer i detalj i fÞlgende bloggposter:
Vi har laget en Power BI lÞsning med fokus pÄ oversikt i en krisesituasjon for Lego City. Evil Mountain har en aktiv vulkan som mÄ overvÄkes og krisehÄndtering mÄ vÊre lett tilgjengelig ved utbrudd. Borgemester Captain America og innbyggerne har hÞy tillit til hverandre og systemene som er satt i drift for byens sikkerhet.
I oversiktsbilde ser vi live data fra sensorene som er plassert i fjellet og mÄler temperatur. Dersom temperaturen overstiger en kritisk grenseverdi bli rapportbrukerne varslet. Temperatursvingningene fra sensorene vises som KPI og historisk:
Ved vulkanutbrudd er vÊrforholdene svÊrt kritiske for Ä ha kontroll pÄ situasjonen. Vind pÄvirker spredningen av brann og hastigheten denne spredningen skjer. Ved hÞy vind vil brannen flytte seg svÊrt fort. Derfor er det integrert vÊrdata i rapportpakken.
Ăverst i vĂŠrvarslet ser vi temperatur og vind for valgt dag. Hover gir kort oversikt over vĂŠret.
For et dypdykk i vĂŠrvarselet kan oversikten benyttes:
Under en krisesituasjon melder innbyggerne skade og behov for hjelp i innbyggerportalen.
Rapportpakken viser oversikt over antall saker og en oversikt over sakene som er meldt inn, nÄr og av hvem.
NĂ„r sakene blir meldt inn blir sakene prioritert og det blir opprettet arbeidsordre. Antall arbeidsordre og oversikt finnes her:
Rapporten er ogsÄ optimalisert for mobil visning.
Interessen rundt sjakk har eksplodert det siste Ă„ret, blant annet The New York Times melder om rekordsalg og en Ăžkning pĂ„ over 1000% pĂ„ salg av fysiske sjakkbrett. Ăkningen i salget er hovedsakelig pĂ„virket av den populĂŠre serien the Queenâs Gambit, og streaming programmet PogChamp. Men det er et problem, vi er midt i en pandemi og ingen kan spille fysisk sjakk mot hverandre.
Heldigvis sitter vi pÄ lÞsningen: Power Chess! Ved Ä bruke Power Chess kan du spille et fysisk sjakkparti mot hvem du vil uansett hvor i verden motstanderen befinner seg.
Slik fungerer det:
Hver spiller har hvert sitt sjakkbrett som er koblet pÄ internett og bruker AI som identifiserer hvilke trekk som er utfÞrt. NÄr et sjakktrekk er identifisert vil sjakkbrettet til motstanderen utfÞre det samme sjakktrekket.
Under ser dere den automatiske lego-armen i Action. Filmen viser fÞrst et sjakktrekk pÄ sjakkbrett 1, deretter ser vi lego-armen pÄ sjakkbrett 2 pÄ motstanderen sitt sjakkbrett.
Teknologien bak Power Chess
API og Azure Cognitive Services
Gjennom Ă„ integrere oss mot SharePoint, function app og ACS (Azure Cognitive Services)
I den tekniske lÞsningen vÄr benytter vi en integrasjon mot SharePoint, for Ä detektere at en ny fil har blitt lagt til, samt uthenting av denne filens innhold.
Videre har vi en integrasjon mot Function App som vi kjĂžrer et POST-kall mot tjenesten som gir oss 64 objekter tilbake.
Disse 64 objektene sendes til Azure Cognitive Services for analysering av innholdet.
Deretter blir dataen(Sjakkbrettet) prosessert og sendt til DataVerse ved en create.
Flow:
Ved Ă„ bruke Power Automate sin Cloud Flow har vi opprettet en Flow som trigges ved opprettelse av en ny fil i SharePoint i en mappe vi har kalt âMovesâ. Ved Ă„ bruke en standard funksjon i Flow som henter innholdet i filen, fĂ„r vi en string som vi kan sende til function app.
Function-app
Function appen mottar en string gjennom HTTP protokollen og deretter kutter opp bildet/Sjakkbrettet i 64 objekter, samt legger metadata pÄ hver enkelt objekt for Ä identifisere hvor plasseringen er. Deretter blir disse sendt tilbake til flowen gjennom HTTP.
CRM / Dataverse
All dataen vi prosesserer illustrerer vi i en Model Driven app. Her kan vi se oversikt over alle rundene i enhvert spill, og posisjonene pÄ alle brikkene. Ved hjelp av plattformen, og litt fancy HTML-kode, har vi fÄtt denne skalerbar i forhold til enheter og skjermstÞrrelser. Er man «on-the-run», kan man enkelt Äpne applikasjonen via telefonen, og fÄ en tilsvarende opplevelse.
Rasberry PI + Lego Boost
For Ă„ kontrollere Boost motoren til Lego har vi benyttet en Raspberry PI med Python script som kan sende signaler til boost motoren via BLE (Bluetooth Low Energy).
Badger vi clamer med denne posten:
#Glossy Pixels #High 5 #Go With the Flow #Chameleon #Plug N’ Play #Power User Love
Claim for Crawler: NÄr vulkanutbruddet fÞrst er et faktum trenger myndighetene en mÄte Ä skaffe seg oversikt over tilgjengelige ressurser i samfunnet som kan bidra i gjenoppbyggingen. I Lego City sine myndigheters egen Dataverse har de lagret denne informasjonen pÄ tvers av mange tabeller, som for eksempel Accounts, Contacts, Bookable Resources og Products.
For kjapt Ä fÄ oversikt er det derfor nyttig Ä kunne sÞke enkelt pÄ tvers av tabellene i Dataverse. Dette har vi lÞst ved Ä bruke Dynamics 365 sitt Relevance Search API.
Dette API’et tilgjengeliggjĂžr Relevance Search-funksjonaliteten ogsĂ„ utenfor Dynamics, slik at sĂžket kan gjĂžres i den type applikasjon som er riktig for hver enkelt brukertype. Dette kan vĂŠre i Sharepoint, i Teams, en Canvas app, eller noe helt annet. Man er altsĂ„ ikke lĂ„st til Ă„ gjennomfĂžre sĂžket inne i Dynamics 365. Vi har laget en enkel Canvas app som alle pĂ„ Lego City sitt eget kriseteam har tilgang til.
Et sĂžk i denne appen trigger en Power Automate-flow som gjĂžr sĂžk ved hjelp av Relevance Search-API’et, og returnerer resultater pĂ„ tvers av tabellene i Dataverse:
OrdfĂžreren i Lego City er stressa etter vulkanutbruddet og sĂžker simpelthen pĂ„ “Emergency”:
Flow’en kjĂžrer, og sĂžker pĂ„ tvers av tabellene. I Account-tabellen finner de et firma som spesialiserer seg pĂ„ krisehĂ„ndtering, perfekt! Navnet pĂ„ firmaet er “Emergency Inc”.
Her er firmaet slik det ser ut inne i Dynamics 365:
Flow’en returnerer sĂžkeresultatet tilbake til app’en, som viser sĂžkeresultatene. La gjenoppbyggingen starte!
Bonden Emmet er en glad og flink bonde som er opptatt av hvordan det stÄr til med sine jorder. Han er selvsagt opptatt av vÊret men ogsÄ hvorvidt han mÄ vanne sine jorder gjennom en varm sommer. En annen liten ting Emmet mÄ passe pÄ er farlig ugress, men han er ikke helt sikker pÄ hva som er farlig ugress og ikke. Derfor mÄ han hele tiden kontakte sin nabovenn for Ä spÞrre. Han skulle Þnske det fantes en enklere mÄte Ä finne ut av dette pÄ. En annen liten ting Emmet er opptatt av er Ä telle kuer.
Men nÄ er det kommet en ny app fra Cowders som har vekket stor begeistring hos Emmet. Cowders App gir han god oversikt over jordene med temperatur, luft og jordfuktighet ved hjelp av smÄ sensorer han kan sette ut pÄ jordene sine. I appen kan Emmet fÄ oversikt over jordene sine og se tilstand, dersom det er tÞrt eller for fuktig vil han se dette i appen ved at det vises en advarsel.
Basert pÄ innhentet data ser bonden i lÞsningen at det pÄ en lokasjon av jordet har begynt Ä vokse en spesifikk type ugress. Bonden Emmet kan i lÞsningen se stÞrrelsen og hvor stort omrÄdet er og det kalkuleres hvor mye ugressmiddel som trengs. Basert pÄ vÊrdata og hvor mye bonden har pÄ lager planlegges det Ä gjÞre et innkjÞp.
MÄlinger av fukt og temperatur fra bÄde jorden og luften tilsier at det mÄ vannes pÄ jordet. I forhold til vÊr data er det spÄdd at det vil regne. Basert pÄ pÄ disse opplysningene fÄr bonden hjelp til Ä beslutte hvor mye nÄr det skal vannes.
Vekstkontroll:
For Ä utfÞre en vekstkontroll kan bonden Emmet bruke mobil appen til Ä ta bilde av veksten han har funnet, sende inn og fÄ beskjed om dette er ugress eller ikke:
I tillegg til Appen kan Emmet logge seg pÄ via sin PC og fÄ tilgang til lÞsningen gjennom en web-side laget med Blazor. Denne er til og med mulig Ä installere som en PWA( Progressive Web App) siden den benytter en service worker for caching av appen for rask og fin brukeropplevelse.
Vekstkontroll.
VÄr lÞsning har som mÄl Ä bistÄ bonden med vektkontrol. MÄlet er Ä hente inn sensor data, visualisere disse og trigge alerts i lÞsningen for Ä hjlepe
Cownter
En annen viktig funksjon Bonden Emmet liker ved appen er at han enklere kan telle kuer, Emmet bruker ikke tall sÄ han vil heller se hvor mange kuer han har.
Avvik pÄ jordmÄlinger og ugress i bilder ender opp i Customer Service Hub for oppfÞlging fra FelleskjÞpets fagkonsulenter som vil kunne bistÄ bonden i Ä fikse problemene hans.
VĂ„r lĂžsning som gir bonden anledning til Ă„ sende inn bilder til analyse, for Ă„ identifisere ugress, inkluderer bruk av Cloudmersive sin ML/AI-baserte bilde-API’er.
Utsnitt fra deres dokumentasjon for API’ene:
VĂ„r bruk av API’et skjer via Logic App som kommer med en hendig ferdig connector.
Responsen fra Cloudmersive kommer som RGB arrays med de 5 mest fremtredende fargene. Dette oversetter og forenkler vi til fargenavn (Red, Purple, Blue, Green, Yellow, Cyan) via Hue i HSL fargemodell. Denne oversettingen gjĂžres i Function App RGBtoHSL, ref screenshot under.