认证温度监控

我们公司使用质量管理系统(QMS)。 作为ISO:9001认证之一的一部分,它被命令收集某些房间(例如,服务器机房或仓库)中的温度和湿度读数。

因为 由于所有官僚程序都需要纸,因此数据收集应由经过验证的设备进行。

在这方面,最常见的湿度计被吊死了,几年来人们每天在日记中写证据。 同意,不舒服。


为了使该过程自动化,开始寻找用于收集温度和湿度的设备。

目的是以某种方式收集数据并将其全部传输到Zabbix。 (Zabbix,QMS不需要任何存储位置,但是我不想制作另一个单独的系统来进行温度监视)。

原则上,有很多现成的工具包,例如Equicom PING3或netping,仍然有很多这样的例子,您也可以在arduino或raspeberry上构建系统,
但是所有这些选项都不适合,因为 它们都没有认证或计量验证,因此不能视为官方测量仪器,也不适合通过ISO:9001。

结果,发现了一种能够通过以太网传输数据并包含在测量仪器寄存器中的设备。 原来是“ Ivit-M.E。” 在新西伯利亚开发,也在那里生产。 我们下了订单(顺便说一句,订单要花很长时间。生产时间大约是一个月,加上验证,再加上交货到莫斯科)。

所有这些都以这种形式出现。 当您拿起它时,您会立即意识到这是俄罗斯的产品:-)





电源(单独订购)未连接到传感器。

因此,我们将其拆解并开始连接。





我们还是要连接输入。 交流电。 我使用了计算机的常规电源线。

输出是直流电。 加号和减号直接在板上签名。

然后,我们将电线直接连接到传感器本身。 根据指示



终端本身看起来像这样:





关闭,卸下并从L形的一半中取出衬管。
我们连接电源和网络。



结果是这样的:



该设备的缺点-它不知道如何通过SNMP发送数据,它使用Modbus协议工作。

原则上,有许多可以通过Modbus读取的SCADA系统和OPC服务器,但是其中大多数是付费的或收集在它们自己的某个数据库中,因此也不清楚如何提取数据以进一步传输到zabbix。

因此,编写了一个小的python脚本来直接访问传感器。
寄存器中的数据以浮点形式存储,以这种形式访问它们时会出现

READ_INPUT_REGISTERS (16855, 57976) 

要配置传感器,请使用config-ivit.exe应用程序

那里的设置不是很多。 您可以配置网络,邮件。



在配置器中,寄存器是在十六进制系统中指定的,但是在Python脚本中,您需要在10进制系统中指定寄存器。

根据ieee-754标准,我们将数据转换为普通可读格式。

有两种方法可以实现将从脚本接收的数据传输到zabbix。

第一种方法:在安装了python和zabbiks代理的某个节点上使用userparametr。 例如,我在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]) 

从zabbix_agentd.conf中的zabbix一侧,指定:

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

在zabbix本身中,我们只需要将我们想要联系的设备的注册号和IP地址传送到:

例如: check_reg[22,192.168.100.100]

注册号:

22-湿度
34-温度
36-露点

第二种方法:通过zabbix_sender传递值。 此方法很方便,因为您可以创建一个没有代理的单独的网络节点,因此可以为许多设备创建模板。

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

剩下的就是运行此脚本以在皇冠上执行,仅指定设备的IP地址和主机的主机名

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

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


接下来,配置对我们来说至关重要的触发器。 例如,最低或最高温度,湿度。

仅此而已。 因此,我们获得了经过认证的温度监控器,适合通过QMS和ISO:9001

UPD:更新了要通过发送方发送以连接到多个传感器的脚本

Source: https://habr.com/ru/post/zh-CN470267/


All Articles