树莓派配合Zabbix进行温湿度监控

硬件安装

温湿度传感器模块是SHT30
针脚连接方式
SHT30-vcc接GPIO 7
SHT30-gnd接GPIO 6或GPIO 9(GND)
SHT30-sda接GPIO 3(SDA.1)
SHT30-scl接GPIO 5(SCL.1)

注:原方案中vcc接GPIO 1(3.3v),由于SHT30长时间通电可能会假死且无法通过重启树莓派解决,所以将供电调整到GPIO 7,在不读取数据时进行断电。

开启I2c
raspi-config -> Interfacing Options
检查I2C是否开启
cat /boot/config.txt | grep i2c
安装i2c-tools
apt-get install i2c-tools
查询i2c设备
i2cdetect -y 1
输出显示0x44表示SHT30的地址

软件配置

创建测试脚本temhum.py

import smbus
import time
import RPi.GPIO as GPIO
# Set GPIO to Output and initial high level
GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.OUT,initial=GPIO.HIGH)
time.sleep(0.1)
# 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('/tmp/temhum.log',mode='w')
file_handle.write(str(newTemp)+'\n'+str(newHumi)+'\n')
file_handle.close()
# Set GPIO to low level
GPIO.setup(4,GPIO.IN)

脚本手动执行后,能从log中获取温湿度表示成功

Zabbix Agent配置
首先将zabbix用户加入sudo免密码执行,因为bus.write_i2c_block_data()必须使用root权限,否则会提示错误(或者直接用root身份运行Zabbix Agent)

visudo增加一行zabbix ALL=NOPASSWD: ALL,表示zabbix用户执行sudo命令不需要输入密码

修改zabbix_agentd.conf,增加自定义监控项

UserParameter=itroom.humidity,sudo sed -n '2,1p' /tmp/temhum.log
UserParameter=itroom.temperature,sudo sed -n '1,1p' /tmp/temhum.log
UserParameter=itroom.temhum,sudo python /home/bin/temhum.py && cat /tmp/temhum.log

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

在树莓派本地测试自定义监控项,能获取温湿度表示正常

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.temperature,信息类型文本
温度,键值itroom.temhum,信息类型浮点数,单位℃
湿度,键值itroom.humidity,信息类型浮点数,单位%

注:脚本输出log路径以及Zabbix Agent监控项脚本路径根据实际情况修改

来源:
https://blog.firo1603.com/archives/6
https://blog.firo1603.com/archives/14