Monitoreo de temperatura certificado

Nuestra empresa utiliza un Sistema de Gestión de Calidad (SGC). Como parte de una de las certificaciones ISO: 9001, se le ordenó recolectar lecturas de temperatura y humedad en algunas habitaciones, por ejemplo, en la sala de servidores o en los almacenes.

Porque Dado que todos los procedimientos burocráticos requieren piezas de papel, la recopilación de datos debe llevarse a cabo mediante un dispositivo verificado.

En este sentido, el higrómetro más común fue colgado y durante varios años la gente escribió evidencia diaria en un diario. De acuerdo, incómodo.


Para automatizar este procedimiento, se inició la búsqueda de un dispositivo para recoger la temperatura y la humedad.

El objetivo era de alguna manera recopilar datos y transferirlos a Zabbix. (Zabbix, no se requiere ninguna ubicación de almacenamiento para el QMS, pero no quería crear otro sistema separado para el monitoreo de temperatura).

En principio, había muchos kits listos para esto, por ejemplo Equicom PING3 o redes, y todavía hay muchos ejemplos de este tipo, también podría construir su sistema en arduino o raspeberry,
pero todas estas opciones no encajaban porque todos ellos no tienen certificación, o más bien verificación metrológica, y por lo tanto no pueden considerarse instrumentos de medición oficiales y no son adecuados para aprobar ISO: 9001.

Como resultado, se encontró un dispositivo que podía transmitir datos a través de Ethernet e incluido en el registro de instrumentos de medición. Resultó ser "Ivit-M.E". desarrollado en Novosibirsk, también producido allí. Pedido (por cierto, el pedido lleva mucho tiempo. El tiempo de producción es de aproximadamente un mes, más verificación, más entrega a Moscú).

Todo esto viene en esta forma. Cuando lo recoges, inmediatamente te das cuenta de que se trata de una producción rusa :-)





La fuente de alimentación (ordenada por separado) no está conectada al sensor.

Por lo tanto, lo desmontamos y comenzamos a conectarnos.





Conectamos la entrada de todos modos. Corriente alterna Usé un cable de alimentación normal de una computadora.

La salida es corriente continua. Más y menos se firman directamente en la pizarra.

Luego conectamos los cables directamente al sensor mismo. De acuerdo a las instrucciones



Los terminales en sí se ven así:





Apague, retire y seleccione el forro de la mitad en forma de L.
Conectamos el poder y la red.



El resultado es algo como esto:



De las desventajas de este dispositivo: no sabe cómo enviar datos a través de SNMP, funciona utilizando el protocolo Modbus.

En principio, hay muchos sistemas SCADA y servidores OPC que pueden leer a través de Modbus, pero la mayoría de ellos se pagan o se recopilan en alguna base de datos propia, de la que tampoco está claro cómo extraer datos para su transmisión a los futuros zabbiks.

Por lo tanto, se escribió un pequeño script de Python para acceder directamente al sensor.
Los datos en los registros se almacenan en forma de flotante y se obtienen al acceder a ellos de esta forma.

READ_INPUT_REGISTERS (16855, 57976) 

Para configurar el sensor hay una aplicación config-ivit.exe

No hay muchas configuraciones allí. Puede configurar la red, correo.



en el configurador, los registros se especifican en el sistema hexadecimal, pero en la secuencia de comandos de Python debe especificar los registros en el sistema de 10 decimales.

Llevamos los datos a una forma legible normal de acuerdo con el estándar ieee-754.

Hay dos formas de implementar la transferencia de datos recibidos del script al zabbix.

La primera forma: usando userparametr, en algún nodo donde están instalados el agente python y zabbiks. Por ejemplo, tenía en el servidor zabbix en sí.

 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]) 

Desde el lado del zabbix en zabbix_agentd.conf, especifique:

 UserParameter=check_reg[*], /usr/bin/python /home/appliance/scada.py $1 $2 

En el propio zabbix, tendremos que transferir solo el número de registro y la dirección IP del dispositivo con el que queremos contactar:

por ejemplo: check_reg[22,192.168.100.100]

Números de registro:

22 - Humedad
34 - Temperatura
36 - punto de rocío

La segunda forma: pasar valores a través de zabbix_sender. Este método es conveniente porque puede crear un nodo de red separado que no tiene un agente y, en consecuencia, será posible crear una plantilla para muchos 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]))) 

Todo lo que queda es ejecutar este script para ejecutar en la corona, especificando solo la dirección IP de los dispositivos y el nombre de host del host.

 */1 * * * * /home/ivitsender.py 192.168.100.100 Ivit1 

 */1 * * * * /home/ivitsender.py 192.168.100.200 Ivit2 


A continuación, configure los desencadenantes, que se consideran críticos para nosotros. Por ejemplo, temperatura mínima o máxima, humedad.

Eso es todo Por lo tanto, hemos obtenido un monitoreo de temperatura certificado, que es adecuado para pasar por el QMS e ISO: 9001

UPD: se actualizó el script que se enviará a través del remitente para conectarse a múltiples sensores

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


All Articles