Cuando una vez más nos enteramos de la falla del acondicionador de aire en la sala del servidor por informes enojados del monitoreo del servidor incorporado, se tomó una decisión decidida de enseñarle a Zabbix a monitorear la temperatura en la sala del servidor. Para tomar medidas al repetir una situación similar antes de que la sala del servidor se convierta en una casa de baños.

La implementación es bastante simple: el sensor de temperatura es sondeado por el controlador a través del bus 1wire, el controlador en sí está conectado a cualquier servidor disponible a través de USB y sondeado por el comando head -n1 / dev / cuaU, que está escrito en la configuración zabbix del agente de la siguiente manera:
UserParameter=usbtemp,head -n1 /dev/cuaU0
La elección de un sensor con una interfaz digital se debe al hecho de que esta es una buena reserva para el futuro para agregar una docena más de sensores al bus si necesita monitorear la temperatura de cada rack por ejemplo. El controlador en sí está conectado a través de USB y, para no reinventar sus controladores, pretende ser un emulador serial CDC normal, es decir, un puerto COM virtual normal y, por supuesto, también podría usar la clase HID, ya que es ideológicamente más adecuado con todos sus informes HID estructurados para interrogación de todo tipo de sensores. Sin embargo, decidí llevarme bien con los CDC por claridad y facilidad de implementación.
Entonces, todo lo que se necesita para la implementación es: directamente el sensor térmico DS18B20, un microcontrolador con un módulo USB de hardware a bordo, un par de resistencias, condensadores y un cable USB. El PIC16F1454 MK se usó como un microcontrolador que implementa el puente 1wire-USB, pero en general el lector puede usar cualquier otro MK a su gusto (conectando un par de bibliotecas: 1wire, USB-CDC) o conectando un puente UART-USB externo como CP2102. Realmente no me gustan esas muletas, así que preferí la solución en un solo chip: tomé el controlador más barato de USB, en el momento de la creación del dispositivo era PIC16F1454.

El proyecto no utilizó pilas USB ya preparadas de Microchip o de terceros, sino que utilizaron una pila autoescrita desarrollada anteriormente para otro proyecto. Sin embargo, no entraré en los detalles de la implementación de mi biblioteca USB en este artículo. Dado que trabajar con el bus USB está más allá del alcance de este artículo y merece un artículo separado, o incluso una serie de artículos. Lo que posiblemente pueda abordar en el futuro cercano, a menos que, por supuesto, el lector esté interesado en este tema.
El circuito es muy simple, por lo que el tablero se divorció de inmediato en el diseño del sprint, sin embargo, doy un dibujo del circuito.

El controlador no es compatible con el cargador de arranque, por lo que solo puede coserlo a través del programador utilizando el conector ICSP. PICKIT2, por ejemplo, o su clon servirá.
Un dispositivo correctamente ensamblado comienza a funcionar inmediatamente después de suministrar energía y no requiere ajuste. El dispositivo no requiere controladores porque utiliza la clase CDC estándar, se detecta inmediatamente en Windows 10 y FreeBSD, en Windows 7 deberá especificar el archivo inf (consulte el archivo del artículo), que indica claramente el controlador usbser.sys. Bajo otros sistemas operativos, el dispositivo no fue probado. Cuando está conectado, debe definirse como / dev / cuaUx, en FreeBSD, donde x es el número lógico del dispositivo. Al ejecutar el comando #head -n1 / dev / cuaU0 puede verificar que el sensor esté correctamente sondeado y que se muestre la temperatura actual.

En Windows, puede usar cualquier programa de terminal para verificar, por ejemplo, masilla.

Si todo funciona correctamente, puede continuar. Luego, cree un nuevo parámetro (elemento) donde, como clave, registre nuestro parámetro de usuario especificado en la configuración del agente.

Bueno, después de eso solo queda crear un nuevo gráfico a partir de este parámetro. Y agregue un disparador, por ejemplo, a 28-30 grados.
En la próxima versión, se planea agregar la capacidad de sondear múltiples sensores y mostrar la temperatura del sensor seleccionado en la pantalla del dispositivo.
Archivo con materiales para el artículo.