IoT-Bienenstock mit Anomalieerkennung

Allgemeine Beschreibung

Dieses Projekt verfolgt das Ziel, verschiedene Anomalien in einem Bienenstock zu erkennen um den Imker frühzeitig zu informieren. In Zusammenarbeit mit unseren Projektpartnern wurde dafür ein Bienenstock mit verschiedenen Sensoren ausgestattet. Die generierten Daten werden mittels eines Mikrokontrollers in einer Cloud (Internet of Things – IoT) abgespeichert, um durch einen Auswertealgorithmus auf Basis Künstlicher Intelligenz (KI) Handlungsempfehlungen für Imker zu generieren.

Je nach Charakteristik der Daten unterscheidet die KI zwischen Vandalismus, Wespenangriff, Gärungsgefahr Honig, Schwärmen und Gefahr für den Nachwuchs. Im Falle der Erkennung einer Anomalie wird, je nach Umsetzung, eine E-Mail oder SMS an den Imker gesendet, sodass dieser direkt reagieren kann ohne wertvolle Zeit zu verlieren.

Zum smarten Bienenstock wurde innerhalb einer Bachelor-Thesis ein Weiterbildungskurs erstellt.

IoT-Octopus

Die aufgenommen Daten des Bienenstocks werden durch verschiedene Sensoren erfasst. Die Messergebnisse der Sensoren werden mithilfe des IoT-Octopus-Boards gesammelt und im Minutentakt über MQTT an den als Basisstation eingesetzten Raspberry Pi übermittelt. Dort werden die Daten über Node-RED weiter verarbeitet.

Sensoren:

  • BME280 von Bosch (Äußere Temperatur- und Luftfeuchtigkeitsmessung)
  • BME680 von Bosch (Innere Temperatur-, Luftfeuchtigkeits- und Gasmessung)
  • Sparkfun APDS9960 Gesten Sensor (Anzahl der Flüge)
  • Drucksensoren (Gewichtsmessung)

IoT Octopus
Der IoT-Octopus ist ein am Umwelt-Campus entwickeltes Microcontroller-Board. Durch eine Steckverbindung z. B. an A0 oder I2C können eine Vielzahl von Sensoren einfach in Betrieb genommen werden. In unserem Fall werden je ein BME280, BME680 und APDS9960 über die Schnittstelle I2C genutzt. Die Drucksensoren werden über den A0 Pin angeschlossen. Der Octopus kann über das, in unserem IoT²-Pilotyzer Softwarepaket integrierten, Programm Ardublockly mithilfe grafischer Bausteine programmiert werden.

Ardublockly

Ardublockly erlaubt Menschen ohne Programmiererfahrung, durch einfaches zusammenziehen von Blöcken, ein Programm zum „Puzzlen“, ein Programm zu erstellen. Sicherlich ist algorithmisches Denken erforderlich, allerdings werden den ungeübten Nutzern syntaktische Besonderheiten wie Klammern und Semikolons erspart.Ein kleines Beispielprogramm zur Abfrage der Temperatur über den BME280 und der Gas Werte über den BME680 finden Sie links. Die erfassten Werte werden per MQTT, einem Brokerbasierten, einfach zu nutzenden Industrieprotokoll versendet.

 

Node-Red

Node-Red erlaubt die Organisation und Manipulation von Daten in Flussdiagrammen. Die Daten können in sogenannten Knoten verarbeitet werden. Hierfür werden in unserer Anwendung Funktionen wie z. B. der Eintrag in einer Datenbank oder der Reset des Raspberry Pi genutzt. Node-RED erlaubt die Definition eigener Funktionen, über die alle Peripheriegeräte eines Rechners angesteuert werden können. Ebenso können Programme in verschiedenen Programmiersprachen aufgerufen werden. So können die Daten mit maschinellen Algorithmen wie DBSCAN oder SVM ausgewertet werden um Anomalien zu erkennen, die dann per E-Mail an den Imker versendet werden.

Softwarearchitektur

Das System baut sich aus verschiedenen Komponenten innerhalb des Raspberry-Pis zusammen:

MQTT-Listener
Dienst als Schnittstelle zwischen dem IoT-Octopus, dem im Raspberry Pi sich befindenden Node-Red Systems. Mit Hilfe des Oberserver Pattern wird beim Auslösen eines Events zu einem bestimmten Topic eine Funktion aufgerufen, mit der die aufgenommenen Daten verarbeitet werden.

Incoming-Data-Handler
Durch das Auslösen des MQTT-Listeners werden im Incoming-Data-Handler, im Knoten „ Build JSON“, wichtige Daten aus den eingehenden Messwerten mit JavaScript-Funktionen extrahiert. JSON, auch JavaScript Object Notation, dient zum Transportieren und Speichern von Daten. In unserem Fall werden die Daten an das Webinterface bzw. an den DB-Writer weitergeleitet.

DB-Writer
Innerhalb des DB-Writer werden die neuen Daten vom Incoming-Handler für die SQL-Datenbank aufbereitet und gespeichert. Dies wird durch den „Update DB“-Knoten mit Hilfe von den unten aufgelisteten Funktionen durchgeführt:

  • get_db_connection() = Baut eine Verbindung zur Datenbank auf in der die Daten gespeichert werden sollen
  • insert_dataset(dataset.cursor) = fügt die Messwerte der Sensoren ein
  • convert-timestamp(ts) = konvertiert den Zeitpunkt der Messung in eine formatierte Zeitangabe Y-M-D H:M:S
  • extractFigure(pattern,dataset) = extrahiert die Messwerte der Geruchskonzentration, falls gegeben, und gibt diese oder andere Messwerte zurück
  • generateValuesArray(dataset) = fügt die Werte einem Array(=Feld) hinzu und gibt dieses zurück

DB-Loader
Lädt die vorhandenen Messwerte beim Systemstart in die Benutzeroberfläche und Datenbank. Möglich wird dies durch den Knoten „Load non volitile value out of DB“ mit Hilfe der Funktionen:

  • get_system_values()
  • get_json_object(dataset)
  • get_avg_smell_value(smell_string)
  • get_values()

Webinterface
Hier werden die aktuellen Live-Daten für den User auf einer grafischen Benutzeroberfläche, einem Webinterface, dargestellt.

back-to-top nach oben