Blog

Trivento's Smart Industry Proof of Concept; the making of part II

Auteur Ruud Ruud is infomatiekundig ontwerper en ontwikkelaar bij Trivento.

Als Trivento zijn we altijd op zoek naar nieuwe mogelijke markten. We hebben heel wat slimme maatwerk oplossingen gerealiseerd, voor kernprocessen waar geen standaard software voor is. Daar zijn weinig industriële klanten bij. Smart Industry kan dit veranderen. Kenmerk van Smart Industry is vooral dat de fysieke wereld wordt gedigitaliseerd en de digitale wereld vertaald wordt naar de fysieke wereld. Door sensoren, actuatoren  en camera's wordt de fysieke wereld gemodelleerd als informatie. Juist met die informatie weten we wel raad.

In mijn vorige blog heb ik de aanleiding en context van de Proof of Concept beschreven. In deze blog ga ik in op de eerste stappen die we hebben gezet. Je kunt er zelf mee spelen: we hebben het gepubliceerd op sipoc.trivento.nl en sipoc.trivento.nl/api/v1/swagger-ui.html. Het spelen doe je via de API, dus enig technisch lef is vereist...

Het ontstaan

De start was niet vanzelfsprekend. Naast het feit dat het gelijktijdig met de normale werkzaamheden gebeurt, tussen neus en lippen door, bleek het ook best lastig om te bepalen waar je begint.

Ik ben "maar" gestart met de generator: de mogelijkheid om fake data te genereren en via een websocket interface te publiceren.  Daarvoor heb ik de volgende functionaliteiten geïmplementeerd:

  • Een route als een lijst geolocaties in kunnen lezen (zie HowTo stappen 1 en 2, hieronder)
  • Een Truck starten en op basis van verstreken tijd de locatie van een truck op die route berekenen (zie HowTo stap 3). 
  • Op basis van een profiel de te publiceren (fake!) meetdata kunnen laten variëren (zie HowTo stap 4)
  • Willekeurig een aantal Trucks laten starten (zie HowTo stap 5). 

Daarmee kon ik, samengevat, een truck starten, een route laten afleggen en de conditie in de truck laten variëren. Om de trucks wat gezelschap te bieden heb ik de mogelijkheid om 'traffic' te genereren toegevoegd. 

Frontend meets backend 

Een collega had parallel aan mijn ontwikkel inspanning een Ionic/Angular frontend ontwikkeld waarmee de truck op een kaart wordt getoond. Hiermee wordt het al snel aansprekend. Om het makkelijker te kunnen delen: een docker voor de frontend en een docker voor de Spring Boot applicatie met Kotlin backend gemaakt, en op ons Apollo platform gedeployd. Vanaf dat moment kon iedereen op https://sipoc.trivento.nl de voortgang bekijken.

Met op  https://sipoc.trivento.nl/ap1/v1/swagger-ui.html de OpenAPI documentatie, inclusief de mogelijkheid de API aan te roepen. Dus: lees vooral verder als je er zelf mee aan de slag wil.

Sipoc animal tracker

Tot op dat moment had het echter nog steeds weinig van doen met Smart Industry. Het was wel al leuk, ten minste, voor mij. De vrachtwagens verplaatsen zich met de getoonde snelheid over de kaart en worden periodiek verplaatst (om 5 seconden tot 5 minuten). Als je voldoende inzoomt op een vrachtwagen met een BR kenteken zul je ze elke 5 seconden zien bewegen (de vrachtwagen met het SEN kenteken dus elke 5 minuten).

Als je je eigen vrachtwagen wil laten rondrijden, dan kan dat! Volg de onderstaande how-to's ...

Zelf aan de slag met de API 

How To 1: route maken

Om een beetje een leuke route op de kaart te tekenen wilde ik graag een realistische route hebben, dus niet een die dwars door weilanden gaat, maar die netjes de wegen volgt. 

Op de website https://mapstogpx.com/ kun je, op basis van de URL van een Google Maps opgevraagde route, het bijbehorende gpx bestand downloaden. Als mapstogpx.com niet werkt, en dat komt regelmatig voor,  kan je ook op basis van https://www.gpsvisualizer.com/misc/google_api_keys.html#mymaps en https://www.gpsvisualizer.com/convert_input?convert_format=gpx een gpx bestand van een route maken.

Dit was stap 1. Zo'n route is echter veel te fijnmazig (1 punt per 35m, en dus te groot) en ik had een ander, eenvoudiger formaat voor mijn Route verzonnen (hier de Kotlin definities): 

data class Route(val name: String, val locations: List<GeoLocation>)
data class GeoLocation(val latitude: Double, val longitude: Double)

Doel is om een gangbaar .gpx bestand om te kunnen zetten naar een JSON die in de generator als Route kan fungeren, en waarbij, op elke 10 locatie punten, er 1 overblijft.

Onderstaand het shell script waarmee het .gpx bestand van mapstogpx.com kan worden omgezet naar een JSON die door de generator wordt begrepen. Windows gebruikers kunnen de Ubuntu app installeren om het uit te proberen. Als je het shell script 'gpx2route.sh' noemt (chmod +x niet vergeten) en het aanroept met 'gpx2route.sh <gedownloade-gpx-bestand>' print het de route JSON op het scherm.

#!/usr/bin/env bash
grep -Eo 'lat="[0-9.]+" lon="[0-9.]+"' $1 |\
awk 'NR % 10 == 1' |\
sed 's/lat="/{ "latitude": /g'|\
sed 's/" lon="/, "longitude": /g' |\
sed 's/"$/},/g' |\
sed '$ s/.$//' |\
sed '1i\
{ "name": "editMe", "locations": [
' |\
sed '$a\
]}
'

How To 2: route uploaden en tekenen op de kaart

Als je de route van How To 1 zichtbaar wil maken op de kaart moet je de volgende stappen volgen:

Vervang in de JSON van How To 1 'editMe' door een zelfgekozen naam. Ga naar https://sipoc.trivento.nl/api/v1/swagger-ui.html

Kies in de route-controller voor POST /routes en klik op Try it out

Plak de JSON van How To 1  in de request body en klik op Execute. Als het goed is krijg je een response 200.
Ga dan in de browser naar https://sipoc.trivento.nl/ en ververs de browser

Voilà, je route wordt getekend!

 

How To 3: je eigen truck starten

Kopieer onderstaande JSON:

{ 
"license": "string",
"routeName": "string",
"profileName": "profile"
}

Vervang de 'string' bij de license door een eigen bedacht kenteken en de 'string' bij route door de naam van de route die je hebt opgegeven bij How To 2. (Of: kijk in de route-controller met een GET /routes welke routes al bestaan en kies een bestaande route.)

Ga naar https://sipoc.trivento.nl/api/v1/swagger-ui.html

Kies in de truck-controller voor POST /trucks en klik op Try it out
Plak de bovenstaande (aangepaste!) JSON in de request body en klik op Execute

Als het goed is krijg je een response 200
Ga dan in de browser naar https://sipoc.trivento.nl/ en ververs de browser

Voilà, na een paar seconden wordt je truck op de route getekend!

How To 4: de data in jouw truck laten variëren

We tonen per truck de 'conditie' in de truck:

"currentConditionState": "OK",
"expectedConditionState": "OK",
"co2": 800,
"temperature": 21.5,
"humidity": 60,
"speed": 90

Alle data is fake, en op de manier zoals we nu een truck hebben gestart ook constant.

De conditionStates kunnen 'OK', 'WARN' of 'CRIT' zijn. De markers van de truck kleuren met de currentConditionState van groen (OK), oranje (WARN) naar rood (CRIT).

Om de data te laten variëren kun je een eigen profiel aanmaken. Het is een .csv bestand, bijvoorbeeld als volgt:
TIME,CURRENTCONDITIONSTATE,EXPECTEDCONDITIONSTATE,CO2,TEMPERATURE,HUMIDITY,SPEED

0,OK,OK,800.0,19.9,59.0,90.0
100,OK,OK,800.0,20.0,60.0,90.3
150,OK,WARN,801.0,20.1,61.0,90.2
200,WARN,WARN,802.0,20.2,62.0,90.5
250,WARN,CRIT,803.0,20.3,63.0,91.0
300,CRIT,CRIT,804.0,20.4,64.0,90.0
350,CRIT,CRIT,805.0,20.5,65.0,90.3

De bestandsnaam zonder de extensie .csv wordt gebruikt als profielnaam. De tijd is in seconden; een rij met de stand 0 is vereist.

Ga naar https://sipoc.trivento.nl/api/v1/swagger-ui.html

Kies in de profiles-controller voor POST /profiles en klik op Try it out
Browse naar het csv bestand en klik op Execute
Als het goed is krijg je een response 200
Herhaal nu de How To 3 met de door jou gekozen profielnaam

Ga dan in de browser naar https://sipoc.trivento.nl/ en ververs de browser.

Voilà, na een paar seconden wordt je truck op de route getekend, met de op de door jou gekozen momenten de wijziging van de conditie in de truck!

How To 5: traffic, ofwel willekeurige trucks

Als je vindt dat je truck wat (meer) gezelschap verdient van andere trucks kun je een andere truck opstarten. 

Je vraagt het hier op:
Ga naar https://sipoc.trivento.nl/api/v1/swagger-ui.html
Kies in de traffic-controller voor GET /traffic en klik op Try it out
Klik op Execute
Als het goed is krijg je een response 200 en een response zoals:

Traffic with at least 0 and max 0 trucks; trucks start in the first 50 percent of the route.

Het minimum aantal trucks wordt meteen gestart; vervolgens worden geleidelijk meer trucks gestart tot het maximum aantal is bereikt. Om de traffic instelling aan te passen:

Maak een JSON met de volgende structuur:

{
"minNumber": 0,
"maxNumber": 0,
"startAtFirstPercentageOfRoute": 0
}

Pas minNumber, maxNumber en startAtFirstPercentageOfRoute naar believen aan

Ga naar https://sipoc.trivento.nl/api/v1/swagger-ui.html

Kies in de traffic-controller voor PUT /traffic en klik op Try it out
Plak de JSON in de request body
Klik op Execute

Als het goed is krijg je een response 200 en worden er nieuwe trucks gestart.

 

Ik hoop dat het je is gelukt. Mocht je er niet uitkomen of vragen hebben, neem dan gerust contact met me op. Ik help je graag!

Ben je opzoek naar meer?

Bekijk hier een selectie van onze ebooks.

Ebook: zo maak je business impact met Smart Industry

Download nu

Flowchart: het wegnemen van 5 Smart Industry barricades

Download nu

Businesscase KPN IoT: verbetering zakelijke dienstverlening door IoT

Download nu