Prometheus ProbePush on a Raspberry Pi with a SI7021

Deploy a bunch of RPi Zero W’s equipped with SI7021’s around the house and get ready to monitor your air!

#!/usr/bin/python3
import smbus
import time
import requests
import platform

bus = smbus.SMBus(1)

# SI7021 address, 0x40(64)
# Read data, 2 bytes, Humidity MSB first
rh = bus.read_i2c_block_data(0x40, 0xE5, 2)
#what really happens here is that master sends a 0xE5 command (measure RH, hold master mode                                                                                              ) and read 2 bytes back
#if you read 3 bytes the last one is the CRC!
time.sleep(0.1)
# Convert the data
humidity = ((rh[0] * 256 + rh[1]) * 125 / 65536.0) - 2


# SI7021 address, 0x40(64)
# Read data , 2 bytes, Temperature MSB first
temp = bus.read_i2c_block_data(0x40, 0xE3,2)
#what really happens here is that master sends a 0xE3 command (measure temperature, hold ma                                                                                              ster mode) and read 2 bytes back
#if you read 3 bytes the last one is the CRC!
time.sleep(0.1)

# Convert the data
cTemp = ((temp[0] * 256 + temp[1]) * 175.72 / 65536.0) - 46.85
fTemp = cTemp * 1.8 + 32

job_name='probe'
instance_name=platform.node()
team_name='air'
provider='raspberry'
payload_key='temperature'
payload_value=(fTemp + 0.4)

response = requests.post('http://localhost:9091/metrics/job/{j}/instance/{i}/team/{t}'.form                                                                                              at(j=job_name, i=instance_name, t=team_name), data='{k} {v}\n'.format(k=payload_key, v=payl                                                                                              oad_value))
print(response.status_code)

payload_key='humidity'
payload_value=(humidity - 7.5)

response = requests.post('http://localhost:9091/metrics/job/{j}/instance/{i}/team/{t}'.form                                                                                              at(j=job_name, i=instance_name, t=team_name), data='{k} {v}\n'.format(k=payload_key, v=payl                                                                                              oad_value))
print(response.status_code)

crontab entry:

* * * * * /home/pushgateway/probepush.sh

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.