Nossa empresa utiliza um sistema de gerenciamento da qualidade (SGQ). Como parte de uma certificação ISO: 9001, foi solicitada a coleta de leituras de temperatura e umidade em algumas salas, por exemplo, na sala do servidor ou em armazéns.
Porque Como todos os procedimentos burocráticos exigem pedaços de papel, a coleta de dados deve ser realizada por um dispositivo verificado.
Nesse sentido, o higrômetro mais comum foi enforcado e, durante vários anos, as pessoas escreveram evidências diárias em um diário. Concordo, desconfortável.
Para automatizar esse procedimento, foi iniciada a busca por um dispositivo para coletar temperatura e umidade.
O objetivo era, de alguma forma, coletar dados e transferir tudo para o Zabbix. (Zabbix, nenhum local de armazenamento não é necessário para o QMS, mas eu não queria criar outro sistema separado para monitoramento de temperatura).
Em princípio, havia muitos kits prontos para isso, por exemplo, Equicom PING3 ou rede, e ainda existem muitos exemplos. Você também pode criar seu sistema em arduino ou framboesa,
mas todas essas opções não se encaixam porque todos eles não possuem certificação ou verificação metrológica e, portanto, não podem ser considerados instrumentos oficiais de medição e não são adequados para a aprovação da ISO: 9001.
Como resultado, foi encontrado um dispositivo capaz de transmitir dados via Ethernet e incluído no registro de instrumentos de medição. Acabou sendo "Ivit-M.E". desenvolvido em Novosibirsk, também produzido lá. Pedido (a propósito, o pedido leva muito tempo. O tempo de produção é de cerca de um mês, mais a verificação e a entrega a Moscou).
Tudo isso vem nesta forma. Ao buscá-lo, você imediatamente percebe que esta é uma produção russa :-)


A fonte de alimentação (solicitada separadamente) não está conectada ao sensor.
Portanto, desmontamos e começamos a conectar.


Nós conectamos a entrada de qualquer maneira. Corrente alternada. Eu usei um cabo de alimentação regular de um computador.
A saída é de corrente contínua. Mais e menos são assinados diretamente no quadro.
Em seguida, conectamos os fios diretamente ao próprio sensor. De acordo com as instruções

Os próprios terminais são assim:


Desligue, remova e retire o revestimento da metade em forma de L.
Conectamos energia e rede.

O resultado é algo como isto:

Das desvantagens deste dispositivo - ele não sabe como enviar dados via SNMP, ele funciona usando o protocolo Modbus.
Em princípio, existem muitos sistemas SCADA e servidores OPC que podem ler via Modbus, mas a maioria deles é paga ou coletada em algum banco de dados próprio, do qual também não está claro como extrair dados para transmissão aos futuros zabbiks.
Portanto, um pequeno script python foi gravado para acessar diretamente o sensor.
Os dados nos registros são armazenados na forma de um flutuador e vêm ao acessá-los neste formulário
READ_INPUT_REGISTERS (16855, 57976)
Para configurar o sensor, há um aplicativo config-ivit.exe
Não há muitas configurações lá. Você pode configurar a rede, correio.

no configurador, os registradores são especificados no sistema hexadecimal, mas no script Python, você precisa especificar os registradores no sistema de 10 casas decimais.
Trazemos os dados para um formato legível normal, de acordo com o padrão ieee-754.
Existem duas maneiras de implementar a transferência de dados recebidos do script para o zabbix.
A primeira maneira: usando userparametr, em algum nó em que o agente python e zabbiks está instalado. Por exemplo, eu tinha no próprio servidor zabbix.
import modbus_tk.defines as cst import modbus_tk.modbus_tcp as modbus_tcp import sys def check_reg(reg,ip): reg = int(reg) master = modbus_tcp.TcpMaster(host=ip, port=int(502)) master.set_timeout(1.0) getDI = master.execute(1,cst.READ_INPUT_REGISTERS, reg, 2) Num1 = str(bin(getDI[0]))[2:] while len(Num1) < 16: Num1 = '0' + Num1 Num2 = str(bin(getDI[1]))[2:] while len(Num2) < 16: Num2 = '0' + Num2 res = Num1 + Num2 znak = int(res[0], 2) znak2 = (0 - 1) ** znak e = int(res[1:9], 2) - 127 exp = 2 ** e m = 1 + (int(res[9:], 2) / float(2 ** 23)) F = znak2 * exp * m print(round(F, 1)) check_reg(sys.argv[1],sys.argv[2])
No lado do zabbix em zabbix_agentd.conf, especifique:
UserParameter=check_reg[*], /usr/bin/python /home/appliance/scada.py $1 $2
No próprio zabbix, precisaremos transferir apenas o número de registro e o endereço IP do dispositivo para o qual queremos entrar em contato:
por exemplo:
check_reg[22,192.168.100.100]
Números de registro:
22 - Umidade
34 - Temperatura
36 - ponto de orvalho
A segunda maneira: passar valores pelo zabbix_sender. Esse método é conveniente, pois você pode criar um nó de rede separado que não possui um agente e, portanto, será possível criar um modelo para muitos dispositivos.
import modbus_tk.defines as cst import modbus_tk.modbus_tcp as modbus_tcp import sys, os def check_reg(reg,ip): reg = int(reg) master = modbus_tcp.TcpMaster(host=ip, port=int(502)) master.set_timeout(1.0) getDI = master.execute(1,cst.READ_INPUT_REGISTERS, reg, 2) Num1 = str(bin(getDI[0]))[2:] while len(Num1) < 16: Num1 = '0' + Num1 Num2 = str(bin(getDI[1]))[2:] while len(Num2) < 16: Num2 = '0' + Num2 res = Num1 + Num2 znak = int(res[0], 2) znak2 = (0 - 1) ** znak e = int(res[1:9], 2) - 127 exp = 2 ** e m = 1 + (int(res[9:], 2) / float(2 ** 23)) F = znak2 * exp * m return round(F, 1) os.system('zabbix_sender -z 127.0.0.1 -s '+ sys.argv[2]+' -k Humidity -o '+ str(check_reg(22,sys.argv[1]))) os.system('zabbix_sender -z 127.0.0.1 -s '+sys.argv[2]+' -k Temper -o '+ str(check_reg(34,sys.argv[1]))) os.system('zabbix_sender -z 127.0.0.1 -s '+sys.argv[2]+' -k Rosa -o '+ str(check_reg(36,sys.argv[1])))
Tudo o que resta é executar esse script para executar na coroa, especificando apenas o endereço IP dos dispositivos e o nome do host
*/1 * * * * /home/ivitsender.py 192.168.100.100 Ivit1
*/1 * * * * /home/ivitsender.py 192.168.100.200 Ivit2
Em seguida, configure os gatilhos, que são considerados críticos para nós. Por exemplo, temperatura mínima ou máxima, umidade.
Isso é tudo. Assim, obtivemos monitoramento de temperatura certificado, adequado para a passagem pelo SGQ e pela ISO: 9001
UPD: Atualizado o script a ser enviado via remetente para conectar-se a vários sensores