Fernüberwachung der Luftqualität mit SNMP
Unser CO2-Sensor erhält eine neue Funktion, nämlich die Fernüberwachung der Sensorwerte. Wir haben uns entschieden, diese mit dem Netzwerküberwachungsprotokoll SNMP zu implementieren. In diesem Beitrag werde ich diese Technologiewahl begründen, erklären wie SNMP funktioniert und beschreiben, wie ich es beim CO2-Sensor angewendet habe.
Warum SNMP?
Als Erstes stellt sich die Frage, warum wir eine Technologie aus dem letzten Jahrhundert verwenden wollen. Die Antwort darauf ist, dass SNMP sehr verbreitet ist. Sie wird von unzähligen Unternehmen in verschiedenen Branchen benutzt. Switches von Cisco, Drucker von Brother und Access Points von Ubiquiti nutzen SNMP zur Auslesung verschiedener Konfigurationsdaten. Dadurch wird SNMP auch von vielen Infrastrukturüberwachungssystemen unterstützt, die man nutzen kann, Statistiken zu sammeln, diese zu visualisieren oder Ereignisse zu definieren, bei welchen Alarme/Meldungen ausgelöst werden sollen. Bekannte Überwachungssysteme sind Zabbix, Icinga und Nagios. In unserem Fall könnten wir in so einem System definieren, dass, wenn der Sensor einen hohen CO2-Wert misst, ein "Lüftungsalarm" ausgelöst wird.
Wie funktioniert SNMP?
Agenten, Manager
Hauptbestandteile einer SNMP-Umgebung sind Agenten und Manager. Bei Agenten handelt es sich um die Geräte, die man mittels SNMP verwalten will (Switches, Drucker, Access Points, CO2-Sensoren). Manager sind die Geräte, die Verwaltungsbefehle an Agenten aussenden.
GET, SET, TRAP-Nachrichten
Der Informationsaustauch zwischen Agent und Manager geschieht über GET-, SET- und TRAP-Nachrichten. Mit Hilfe von GET-Anfragen kann ein Manager den Status eines Agenten abfragen und mit SET-Anfragen Aktionen ausführen oder Einstellungen vornehmen. Auch der Agent kann mit einer TRAP-Nachricht Daten an den Manager senden, ohne dazu aufgefordert zu sein. Dies kommt zum Einsatz, wenn man mit dem Versenden kritischer Informationen nicht auf eine GET-Anfrage des Managers warten möchte. In unserem Fall könnten wir bei unserem CO2-Sensor einstellen, dass er bei zu hohen CO2-Werten eine TRAP-Nachricht an den Manager sendet, der dann, wie oben beschrieben, eine Benachrichtigung abschickt, dass man lüften sollte.
Management Information Base(MIB)
Eine MIB beschreibt die Struktur der Daten, die von einem Agenten zur Verfügung gestellt werden. Sie ist in sogenannte Managed Objects gegliedert, welche keine Datenwerte sind, sondern nur deren Beschreibungen. Sie beschreiben, wo die Daten zu finden sind und welches Format sie haben. Diese Managed Objects befinden sich alle in einer Hierarchie und sind über ihren Object Identifier(OID) erreichbar. OID beschreibt den Weg durch die MIB-Hierarchie, über den man ein Objekt erreicht. Da jedes Unternehmen, das seine eigenen Managed Objects definieren will, einen eigenen Enterprise-Code braucht, mussten wir uns zuerst bei iana registrieren, wonach wir im Enterprise-Register eingetragen wurden. Somit können wir unter dem OID 1.3.6.1.4.1.58049 unsere eigene Hierarchie an Managed Objects definieren.
Anwendung beim CO2-Sensor
Zuerst definierten wir unsere MIB. Sie besteht aus zwei Tabellen. Die erste Tabelle zeigt alle Sensoren, die im CO2-Sensor eingebaut sind. Die Zweite zeigt die Messungen dieser Sensoren. Da, wie oben schon erwähnt, MIBs nur zur Beschreibung der Datenstruktur dienen und keine eigentlichen Werte enthalten, müssen wir diese Struktur irgendwie in unseren Code integrieren, der uns dann die Daten liefert. Diesen Schritt erleichtert der Code Generator von lwIP, der uns das Grundgerüst des Agent-Codes generiert. Dieses Gerüst ergänzten wir mit Code, der aus dem schon existierenden CO2-Code die Sensorwerte holt und ausgibt. Er füllt sozusagen die definierte Datenstruktur mit Daten auf.
Output des Kommandozeilenbefehls snmptable:
Überwachung auf Zabbix:
Zum Testen ob die Überwachung funktioniert, hauchte ich den Sensor zwei Mal an, was man an den Werten sehr schön sieht:
Der CO2-Wert(PPM) steigt wesentlich an.
Luftfeuchtigkeit(Humidity) und Temperatur(Temp) steigen minim an.
Fazit
Dank SNMP muss man den Sensor nicht mal mehr im Blickwinkel haben, um über die aktuelle Luftqualität zu erfahren. Man kann einfach durch einen Kommandozeilenbefehl oder über ein Überwachungsprogramm die Informationen anfragen.
INFO:
Der Quellcode und die Bauanleitung für den Sensor sind auf Github kostenlos verfügbar (Lizenz: Creative Commons BY-SA).
Der Beitrag über den CO2-Sensor ist hier zu finden.