SensorFlow: sensordata van de fieldlabs op één plek
Sensoren in de fieldlabs schrijven hun metingen naar één database, maar een meting zegt weinig als niet duidelijk is welk apparaat hem stuurde, bij welke locatie hij hoort en of hij nog leeft. SensorFlow legt die registratie vast: fieldlabs, devices, sensoren en observaties, in de begrippen van de OGC SensorThings-standaard, met een monitor die bijhoudt wat er stil is gevallen.
1. Wat de applicatie doet
- API: beheer en uitlezing van fieldlabs, devices, sensoren en
observaties, gedocumenteerd met een OpenAPI-specificatie op
/api/docs. - Systeemmonitor: de toestand van het netwerk, met de devices die te lang stil zijn.
- Beheer: registratie van apparaten, sensoren, parameters en de LoRaWAN- identificatie per device (applicatie, AppEUI, DevEUI, JoinEUI, DevAddr). Sleutels staan er bewust niet in.
- Gegevensinvoer: de metingen komen binnen via Node-RED, dat de berichten naar de database schrijft.
- Kosten per sensortype: een tarief per stuk, waarmee het overzicht de devices met data in de gekozen periode omrekent naar een bedrag. Elk bedrag op die pagina is ingevoerd, niet gemeten, en een type zonder tarief blijft leeg in plaats van nul.
2. Toegang
De applicatie draait op
sensorflow.has.nl. De hoofd-URL stuurt door naar
/dashboard/, en dat dashboard is alleen voor staff- en admin-accounts: zonder
sessie kom je uit op het inlogscherm van het beheer. Er is een aparte omgeving op
sensorflow-dev.has.nl.
3. Opbouw
Django met Django Ninja voor de API, en PostgreSQL met PostGIS voor de geografische velden. De ruimtelijke functies lopen via ruwe SQL in plaats van via GeoDjango: die keuze houdt de installatie klein en de query's expliciet. De begrippen volgen de OGC SensorThings-standaard, maar dit is geen SensorThings-server: het is een eigen implementatie met dezelfde woorden voor fieldlab, device, sensor en observatie.
De code, de docstrings en de commitboodschappen zijn Engels; de teksten in de interface blijven Nederlands, inclusief de sleutels in de JSON die de voorkant leest. De productieomgeving draait op een vaste Python-versie van de App Service-runtime, en de bouwstraat controleert elke wijziging op lint, opmaak en types.
4. De systeemmonitor
De monitor toont wat er gemeten is en berekent geen samengesteld oordeel: geen gezondheidsscore, alleen aantallen en tijdstippen.
- Kerncijfers: fieldlabs, actieve devices tegenover het totaal, sensoren, offline devices en het aantal metingen in de afgelopen 24 uur.
- Offline devices: per apparaat het aantal uur dat het stil is, de laatste meting en het aantal metingen, met zoeken, filteren op duur en sorteren per kolom.
- Activiteit: metingen per uur, met een keuze tussen 24 uur en 7 dagen. De grafiek tekent alleen afgeronde blokken, zodat het blok waar je in kijkt niet half gevuld lijkt.
- Fieldlabs: een overzicht met per locatie hoeveel devices en sensoren er in de periode iets stuurden, en een grafiek per fieldlab. Die grafiek staat op een logaritmische as, omdat de fieldlabs in metingen per uur een factor tientallen van elkaar verschillen.
- Verversen: de pagina haalt elke 15 seconden de stand op, met een schakelaar om dat uit te zetten. De gekozen periode staat in de URL en is dus deelbaar.
De monitor telt offline apparaten per device, niet per sensor. Dat onderscheid staat ook zo in de pagina, omdat een device meerdere sensoren kan hebben.
5. Controle vanaf de opdrachtregel
Naast de pagina is er een beheercommando dat hetzelfde beeld in tekst of JSON geeft, of er een mail over stuurt. Het draait niet automatisch mee; je start het zelf of vanuit een planner.
python manage.py check_system_health # leesbaar rapport
python manage.py check_system_health --json # JSON voor monitoring
python manage.py check_system_health --email # mail bij kritieke gevallen
python manage.py check_system_health --threshold 24 # andere offline-drempel
6. Stand van zaken
Deze repository is op 11 oktober 2026 voor het laatst aangepast. Het project staat in de privérepository HASUniversity/sensorflow. De readme noemt de MIT-licentie, maar er staat geen licentiebestand in de repository; de licentie is dus nog niet vastgelegd op de plek waar een andere instelling hem kan vinden.
7. Bronnen
- OGC SensorThings: de standaard waaruit de begrippen fieldlab, device, sensor en observatie komen.
- Node-RED: de stroomgebaseerde tool die de metingen naar de database schrijft.
- Django Ninja: de API-laag met de OpenAPI-specificatie.