Überwachung der Servertemperatur zum Selbermachen

Als wir durch verärgerte Berichte aus der eingebauten Serverüberwachung erneut von dem Ausfall der Klimaanlage im Serverraum erfuhren, wurde eine willensstarke Entscheidung getroffen, Zabbix beizubringen, die Temperatur im Serverraum zu überwachen. Um Maßnahmen zu ergreifen, wenn eine ähnliche Situation wiederholt wird, bevor der Serverraum in ein Badehaus verwandelt wird.



Die Implementierung ist recht einfach: Der Temperatursensor wird vom Controller über den 1wire-Bus abgefragt, der Controller selbst wird über USB mit einem beliebigen verfügbaren Server verbunden und vom Befehl head -n1 / dev / cuaU abgefragt, der in der zabbix-Konfiguration des Agenten wie folgt geschrieben ist:

UserParameter=usbtemp,head -n1 /dev/cuaU0 

Die Wahl eines Sensors mit digitaler Schnittstelle beruht auf der Tatsache, dass dies eine gute Reserve für die Zukunft ist, um dem Bus ein Dutzend weiterer Sensoren hinzuzufügen, wenn Sie beispielsweise die Temperatur jedes Racks separat überwachen müssen. Der Controller selbst ist über USB angeschlossen. Um seine Treiber nicht neu zu erfinden, gibt er vor, ein regulärer serieller CDC-Emulator zu sein, dh ein regulärer virtueller COM-Port. Natürlich können Sie auch die HID-Klasse verwenden, da er mit all seinen strukturierten HID-Berichten ideologisch besser geeignet ist Abfrage aller Arten von Sensoren. Trotzdem habe ich mich entschlossen, mit CDC auszukommen, um Klarheit und einfache Implementierung zu gewährleisten.

Für die Implementierung ist also nur Folgendes erforderlich: direkt der Wärmesensor DS18B20, ein Mikrocontroller mit einem integrierten Hardware-USB-Modul, ein Paar Widerstände, Kondensatoren und ein USB-Kabel. Der PIC16F1454 MK wurde als Mikrocontroller verwendet, der die 1wire-USB-Brücke implementiert. Im Allgemeinen kann der Leser jedoch jeden anderen MK nach eigenem Geschmack verwenden (indem er mehrere Bibliotheken anschließt - 1wire, USB-CDC) oder eine externe UART-USB-Brücke wie CP2102 anschließen. Ich mag solche Krücken nicht wirklich, deshalb habe ich die Lösung auf einem einzelnen Chip vorgezogen - ich habe den billigsten Controller von USB genommen, zum Zeitpunkt der Erstellung des Geräts war es PIC16F1454.



Das Projekt verwendete keine vorgefertigten USB-Stacks von Microchip oder von Drittanbietern, sondern einen selbstgeschriebenen Stack, der zuvor für ein anderes Projekt entwickelt wurde. In diesem Artikel werde ich jedoch nicht auf die Besonderheiten der Implementierung meiner USB-Bibliothek eingehen. Da die Arbeit mit dem USB-Bus den Rahmen dieses Artikels sprengt und einen separaten oder sogar eine Reihe von Artikeln verdient. Was ich möglicherweise in naher Zukunft aufgreifen werde, es sei denn, der Leser interessiert sich natürlich für dieses Thema.
Die Strecke ist sehr einfach, so dass die Platine im Sprint-Layout sofort geschieden wurde, trotzdem gebe ich eine Zeichnung der Strecke.



Der Controller unterstützt den Bootloader nicht, sodass Sie ihn nur mit dem ICSP-Anschluss durch den Programmierer nähen können. PICKIT2 zum Beispiel oder sein Klon reicht aus.

Ein ordnungsgemäß montiertes Gerät funktioniert sofort nach der Stromversorgung und muss nicht angepasst werden. Das Gerät benötigt keine Treiber, da es die Standard-CDC-Klasse verwendet. Es wird sofort unter Windows 10 und FreeBSD erkannt. Unter Windows 7 müssen Sie die Inf-Datei angeben (siehe Archiv für den Artikel), in der der Treiber usbser.sys deutlich angegeben ist. Unter anderen Betriebssystemen wurde das Gerät nicht getestet. Wenn eine Verbindung besteht, sollte sie unter FreeBSD als / dev / cuaUx definiert werden, wobei x die logische Nummer des Geräts ist. Mit dem Befehl #head -n1 / dev / cuaU0 können Sie überprüfen, ob der Sensor korrekt abgefragt und die aktuelle Temperatur angezeigt wird.



Unter Windows können Sie jedes Terminalprogramm verwenden, um beispielsweise Putty zu überprüfen.



Wenn alles richtig funktioniert, können Sie fortfahren. Erstellen Sie als Nächstes einen neuen Parameter (Element), in dem Sie als Schlüssel unseren in der Agentenkonfiguration angegebenen UserParameter registrieren.



Nun, danach bleibt nur noch ein neues Diagramm aus diesem Parameter zu erstellen. Und fügen Sie einen Auslöser zum Beispiel bei 28-30 Grad hinzu.

In der nächsten Version ist geplant, die Möglichkeit hinzuzufügen, mehrere Sensoren abzufragen und die Temperatur des ausgewählten Sensors auf dem Display des Geräts selbst anzuzeigen. Archiv mit Materialien für den Artikel.

Source: https://habr.com/ru/post/de438836/


All Articles