使用Zabbix监控机房温湿度

硬件准备

  • 树莓派4B
  • SHT30温湿度传感器一个
  • 杜邦线4根(母对母

测试

  1. 树莓派开启i2c
sudo raspi-config

选择Interface Options
选择I2C
选择enable后按照提示重启

重启后检查/boot/config.txt文件是否开启i2c

  1. 连接SHT30
    SHT30共有四个针脚,如下图所示
    SHT30
    使用杜邦线(母对母)连接树莓派相应针脚

  2. 测试
    安装i2c-tools

sudo apt-get install i2c-tools

查询i2c设备

sudo i2cdetect -y 1


输出显示0x44表示SHT30的地址
i2c-tools还有其他命令我们使用不到,这里不展开

  1. 编写测试脚本
    在/usr/local/zabbix/目录下新建一个temhum.py,如果目录不存在,请新建目录,并且chmod +x 赋予脚本可执行权限
import smbus
import time
# Get I2C bus
bus = smbus.SMBus(1)
# SHT30 address, 0x44(68)
bus.write_i2c_block_data(0x44, 0x2C, [0x06])
time.sleep(0.5)
# SHT30 address, 0x44(68)
# Read data back from 0x00(00), 6 bytes
# Temp MSB, Temp LSB, Temp CRC, Humididty MSB, Humidity LSB, Humidity CRC
data = bus.read_i2c_block_data(0x44, 0x00, 6)
# Convert the data
temp = data[0] * 256 + data[1]
Temp = -45 + (175 * temp / 65535.0)
Humi = 100 * (data[3] * 256 + data[4]) / 65535.0
newTemp = round(Temp,2)
newHumi = round(Humi,2)
# Write data to log
file_handle=open('/usr/local/zabbix/temhum.log',mode='w')
file_handle.write(str(newTemp)+'\n'+str(newHumi)+'\n')
file_handle.close()

使用python运行一下脚本,cat查看log文件,如下所示表示正常获取到数据

至此,脚本编写完成

zabbix设置

默认树莓派已安装好zabbix-agent(教程更新中)
首先将zabbix用户加入sudo免密码执行,因为bus.write_i2c_block_data()必须使用root权限,否则会提示错误

visudo


在最下面添加zabbix ALL=NOPASSWD: ALL后保存退出,表示zabbix用户执行sudo命令不需要输入密码

在agent配置文件内添加自定义监控项,如下图所示

vim /etc/zabbix/zabbix_agentd.conf


三条配置从上到下分别是:
itroom.humidity 读取log文件内第二行湿度数据
itroom.temperature 读取log文件内第一行温度数据
itroom.temhum 运行脚本并且输出,最后cat是为了在zabbix的web页面上能查看数据,方便排错

UserParameter=itroom.humidity,sudo sed -n '2,1p'  /usr/local/zabbix/temhum.log
UserParameter=itroom.temperature,sudo sed -n '1,1p' /usr/local/zabbix/temhum.log
UserParameter=itroom.temhum,sudo python /usr/local/zabbix/temhum.py && cat /usr/local/zabbix/temhum.log

保存配置文件并退出后重启agent

systemctl restart zabbix-agent

在Server上测试自定义监控项是否正常工作,其中127.0.0.1为树莓派的地址,由于我这里树莓派同时兼顾了Server端和Agent,所以使用本地地址检查

zabbix_get -s 127.0.0.1 -k itroom.temhum
zabbix_get -s 127.0.0.1 -k itroom.humidity
zabbix_get -s 127.0.0.1 -k itroom.temperature


获取到如上图所示数据表示正常工作

进入zabbix server的前端界面,配置-主机,选择树莓派对应主机,新建监控项,一个新建三个



配置完成后进入监测-最新数据,选择树莓派及ITRoom应用集,查看是否正常工作

如上图所示表示正常工作
相关触发器及图形自行设置

相关文章

  1. zabbix自定义监控项
  2. 树莓派与SHT30
  3. 树莓派i2c接口SHT30的使用

附录:一些踩过的坑

  • 为什么选择SHT30

一开始使用的DHT11和DHT22,使用的总线,无论怎么测试都获取不到数据(包括通过树莓派直接读数据,C读内存等方式),看其他成功案例也是尝试了多个厂家的DHT11才成功,无奈之下才换成SHT30

  • 为什么不直接建两个监控项分别去调用脚本获取温度和湿度?

同时调用两个脚本同一个函数,会导致SHT30寄存器几乎同时写入两个值,造成假死,本来是想通过zabbix相关项目的监控项实现的,结果发现正则无论如何都匹配不到第二个数值(可能是我太菜了不会写),所以才有把温湿度数据写进文本,再用两个监控项去读文本。当然如果可以的话还有很多种方法,包括用sender来个server传数据,这个就自己研究了。

  • 为什么要在将zabbix用户加入sudo免密码执行

agent在调用脚本的时候是使用zabbix用户去调用,但是bus.write_i2c_block_data()必须使用root权限,导致你在本地测试如果用的root权限会发现正常运行,但是一用zabbix-get检查会发现permission denied

  • 如何知道温湿度监控失败(通过server的前端页面)

可以新建一个Intenal action,条件添加“应用集 等于 ITRoom”和“事件类型 等于 监控项在“不支持”的状态”,再配上动作,这样由于两个监控项的值都是浮点数,获取到不是浮点数的数据后会直接变为不支持,这样就能通过告警的方式通知

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×