December 2015 tot maart 2016 - Het bouwen van een server systeem voor het communiceren met eenvoudige apparatuur over GSM en GPRS verbindingen. Het systeem moet allerlei verbindingen en protocollen kunnen ontvangen en verwerken in een operationele database.

Tags:
C#.NET - Multithreading - Binaire communicatie - Dependency Injection - MQTT - IoT

Situatie

De opdrachtgever heeft verschillende meet- en toegangscontrolesystemen voor ondergrondse afvalcontainers. Deze systemen hebben allemaal hun eigen fabrikant specifieke server systemen en protocollen voor het ontvangen van verbindingen en het uitwisselen van data. Bij het bouwen van deze software is destijds besloten rechtstreeks in de productiedatabase te lezen en schrijven. Nu het aantal veldapparaten groeit komt de performance van de database in het geding. Bovendien het is beheer van de systemen lastig.

Taken

Het bouwen van een nieuwe communicatie service die betrouwbaar en schaalbaar is en de productie database ontlast. Het moet mogelijk zijn om extern uitbreidingen te laten ontwikkelen.

Aanpak

Het doel was om een systeem op te zetten dat op basis van plugins uitbreidbaar zou zijn, waarbij de plugins geen kennis hebben van de database structuur of de werkwijze van het systeem. Daarom heb ik een bibliotheek ontwikkeld met base classes voor plugins voor het ontvangen en verwerken van communicatie sessies. Deze plugins bouwen tijdens een sessie data op waarvoor ik een model heb gemaakt. Door middel van unit-tests kunnen deze plugins worden getest en ontwikkeld, zonder kennis van het systeem of aanwezigheid van een database, eventueel door derden. De service zelf beheert de afhandeling van de plugins en de snelheid waarmee sessies worden verwerkt in de operationele database. Zodoende kan de belasting van de database gedoseerd worden.

Resultaat

Op dit moment werkt de service met verschillende plugins voor verschillende leveranciers, die verschillende protocollen afhandelen - onder meer MQTT. Omdat de benodigde gegevens zijn klaargezet in een afzonderlijke database, en de sessies gedoseerd naar de operationele database worden verwerkt, is de belasting op de operationele database niet langer merkbaar.