Quando aprendemos mais uma vez sobre a falha do ar-condicionado na sala do servidor por meio de relatórios irritados do monitoramento interno do servidor, foi tomada uma decisão forte para ensinar o Zabbix a monitorar a temperatura na sala do servidor. Para tomar medidas ao repetir uma situação semelhante antes que a sala do servidor se transforme em uma casa de banho.

A implementação é bastante simples: o sensor de temperatura é pesquisado pelo controlador através do barramento 1wire, o próprio controlador é conectado a qualquer servidor disponível via USB e pesquisado pelo comando head -n1 / dev / cuaU, que está escrito na configuração zabbix do agente da seguinte maneira:
UserParameter=usbtemp,head -n1 /dev/cuaU0
A escolha de um sensor com interface digital deve-se ao fato de ser uma boa reserva para o futuro adicionar uma dúzia de sensores ao barramento, se você precisar monitorar a temperatura de cada rack separadamente, por exemplo. O próprio controlador é conectado via USB e, para não reinventar seus drivers, ele finge ser um emulador serial CDC comum, ou seja, uma porta COM virtual comum e, é claro, você também pode usar a classe HID, pois é ideologicamente mais adequada a todos os seus relatórios HID estruturados para interrogação de todos os tipos de sensores. No entanto, decidi me dar bem com o CDC para maior clareza e facilidade de implementação.
Portanto, tudo o que é necessário para a implementação é: diretamente o sensor térmico DS18B20, um microcontrolador com um módulo USB de hardware a bordo, um par de resistores, capacitores e um cabo USB. O PIC16F1454 MK foi usado como um microcontrolador que implementa a ponte 1wire-USB, mas, em geral, o leitor pode usar qualquer outro MK a seu gosto (conectando algumas bibliotecas - 1wire, USB-CDC) ou conectar uma ponte UART-USB externa como CP2102. Eu realmente não gosto de muletas, então preferi a solução em um único chip - peguei o controlador mais barato da USB, no momento da criação do dispositivo, era o PIC16F1454.

O projeto não usou pilhas USB prontas da Microchip ou de terceiros; em vez disso, usou uma pilha auto-escrita desenvolvida anteriormente para outro projeto. No entanto, não abordarei os detalhes da implementação da minha biblioteca USB neste artigo. Como trabalhar com o barramento USB está além do escopo deste artigo e merece uma série de artigos separada ou mesmo uma série. O que eu possivelmente abordarei no futuro próximo, a menos que, é claro, o leitor esteja interessado neste tópico.
O circuito é muito simples, então a placa foi imediatamente divorciada no layout do sprint, no entanto, faço um desenho do circuito.

O controlador não suporta o carregador de inicialização, portanto, você só pode costurá-lo através do programador usando o conector ICSP. PICKIT2, por exemplo, ou seu clone funcionará.
Um dispositivo montado corretamente começa a funcionar imediatamente após o fornecimento de energia e não requer ajustes. O dispositivo não requer drivers porque usa a classe CDC padrão; para o Windows 10 e o FreeBSD é detectado imediatamente; para o Windows 7, é necessário especificar o arquivo inf (consulte o arquivo do artigo), que aponta explicitamente para o driver usbser.sys. Sob outros sistemas operacionais, o dispositivo não foi testado. Quando conectado, deve ser definido como / dev / cuaUx, no FreeBSD, onde x é o número lógico do dispositivo. Executando o comando #head -n1 / dev / cuaU0, você pode verificar se o sensor está corretamente selecionado e a temperatura atual é exibida.

No Windows, você pode usar qualquer programa do terminal para verificar, por exemplo, massa.

Se tudo funcionar corretamente, você pode continuar. Em seguida, crie um novo parâmetro (item) em que, como chave, registre nosso UserParameter especificado na configuração do agente.

Bem, depois disso, resta apenas criar um novo gráfico a partir desse parâmetro. E adicione um gatilho, por exemplo, a 28-30 graus.
Na próxima versão, está planejado adicionar a capacidade de pesquisar vários sensores e exibir a temperatura do sensor selecionado na tela do próprio dispositivo.
Arquivo com materiais para o artigo.