Challenges

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! 🙂

Skill sin Vipps-integrasjon på Arctic Cloud Developer Challenge 2021

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

This image has an empty alt attribute; its file name is Skjermbilde-2021-02-06-kl.-13.37.39-1024x575.png

Vi har gått enda mer i detalj i følgende bloggposter:

Clame for Dash It Out

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.

Power Chess Final Delivery

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.

HTML/CSS og Javascript kan være et kraftig verktøy. Om man trives i «den ville vesten», får man virkelig testet seg. Det har vært en god utfordring for oss CRM-konsulenter, men er fornøyd med resultatet.

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

Push-up vs push-message

  • En Power App Canvas app hvor du som bruker registrerer antall pushups, data lagres i Dataverse og presenteres i en PowerBI rapport.
  • Du som bruker kan ta initiativet selv eller motta push varsel (fra din mor/sjef) om å få ut fingeren.

Hvorfor:

  • Medarbedere som holder seg i form har mindre fravær og er bra for bedriften.
  • Familiemedlemmer som er aktive holder seg friske sikrer at mamma og pappa slipper å være hjemme for å passe på syke barn.
  • Når andre enn deg selv tar push-up holder de fred og du får jobbe i ro og mak.

For dette håper vi å få badgene:

Power apps i backend for å sende push varsel + power app canvas på mobilen for å motta varsel og registrere pushups
Fordi:”Use hip tech” + “embrace new Microsoft “

“Lego Shark Tank”

Lego City kriseteam har fått en canvas app med Relevance Search!

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!

Final delivery – Cowders

Intro Business Case:

Bilderesultater for the farmer lego

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:

Emmet klikker seg inn på Vekstkontroll
Emmet tar bilde av planten han er usikker på
Emmet får svar fra tjenesten om at dette ser ut som en potensielt farlig ugress og får muligheten til å opprette et problemnotat

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

Løsningsoversikt – Vekstkontroll

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.

Avvik i Customer Service Hub via IOT Alerts

Bruk av maskinlæring for å identifisere fargebruk i bilder

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.

Claiming Badge