Visualize Enviro pHat sensors data
Enviro pHat is an low-cost environmental sensing boards that let you measure temperature, light color, motion and analog sensors. The accompanied python SDK makes writing program to get data from enviro pHat as easy as pie. Enviro pHat could be used in combination with RaspPi zero to become a simple room conditions monitoring sensing board.
With grafana and prometheus, it looks so easy to at least build a dashboard for environ pHat sensors data, so I decided to build a enviro pHat dashboard.
Though Enviro pHat provides SDK to get data from sensors, we need methods to that data to server. We also need to care about the connection between the device and server side. In home environment, I used Wifi as Pi Zero supports Wifi connections. Prometheus also provides scrape methods to fetch data from prometheus client, so I will add a prometheus client in the device side for prometheus server to scrape. The data is stored in prometheus data store and visualized by grafana.
For the PiZero device, you need to download Raspbian and write it into the SDCard. Because we are going to connect to the Rasp Pi through Wifi, we need to setup wifi for Rasp Pi. After downloading the OS image and writing the OS image to the sd card, put the sd card into your PC, open the sd card directory and added 2 following files to the boot directory.
wpa_supplicant.conf
ssh
empty content
The purpose of the ssh file is to tell raspbian to enable ssh server by default.
Plugin the power supply in. You should see Raspberry Pi IP address through your home router (Or ping the whole IP address segments to see which IP is assigned).
You should be able to ssh into the raspberry Pi through its IP address. Perform basic server setups
Final result
I write a program to export environ data through prometheus client: https://github.com/telescreen/raspizero-playground . After running the program like above, you should be able to confirm the prometheus data at
http://$PI_IP_ADDRESS:9090/
I have LXD running in my local machine. I also have Juju bootstrapped with local cloud as cloud environment. As Juju store already provided prometheus2 and grafana charms, Installation of these middlewares is simply typing following 2 commands.
It will take a while for Juju to download / install charm and necessary software. After Juju finishes installing granafa and prometheus, we should see both applciation active in Juju status
Next, we need to add the exposed prometheus data in the device to Prometheus's scrape job. I prepare a simple scrape job setup at
https://github.com/telescreen/raspizero-playground/blob/master/scrape-job.yaml
Adding the scrape job with Juju by following command
Login into grafana with password retrieved by following actions. The other actions are performed through the grafana UI and quite intuitively, so I excluded those settings from this post.
The storm is approaching my city so I am expecting to see a lower than usual air pressure. The pressure should increase back in a few days after the storm.
I was able to build a simple home conditions' monitoring system in a short time with opensource technology. I can felt more and more the importance of opensource softwares after this project.
With grafana and prometheus, it looks so easy to at least build a dashboard for environ pHat sensors data, so I decided to build a enviro pHat dashboard.
System Diagram
Though Enviro pHat provides SDK to get data from sensors, we need methods to that data to server. We also need to care about the connection between the device and server side. In home environment, I used Wifi as Pi Zero supports Wifi connections. Prometheus also provides scrape methods to fetch data from prometheus client, so I will add a prometheus client in the device side for prometheus server to scrape. The data is stored in prometheus data store and visualized by grafana.
![]() | ||
System Diagram: Prometheus fetch data from RaspPi Zero over Wifi |
Device Side
Soldering sensor board and setup OS
If you buy an un-soldered Enviro pHat, you probably need to solder it with the accompanied 2x20 pin female header. The solder part is not that difficult and Pimoroni has a detailed guide for the task. Below are my raspberry Pi Zero and the Enviro pHat sensor board.![]() |
My RaspBerry Pi Zero |
![]() |
Enviro pHat |
For the PiZero device, you need to download Raspbian and write it into the SDCard. Because we are going to connect to the Rasp Pi through Wifi, we need to setup wifi for Rasp Pi. After downloading the OS image and writing the OS image to the sd card, put the sd card into your PC, open the sd card directory and added 2 following files to the boot directory.
wpa_supplicant.conf
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="WIFI SSID" psk="WIFI SSID PASSWORD" key_mgmt=WPA-PSK }
ssh
empty content
The purpose of the ssh file is to tell raspbian to enable ssh server by default.
Plugin the power supply in. You should see Raspberry Pi IP address through your home router (Or ping the whole IP address segments to see which IP is assigned).
You should be able to ssh into the raspberry Pi through its IP address. Perform basic server setups
$ ssh pi@$PI_IP_ADDRESS pi@$PI_IP_ADDRESS password: **** $ pi@192.168.88.218's password: 0.567, 3: 0.51 Linux pizero 4.19.66+ #1253 Thu Aug 15 11:37:30 BST 2019 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Thu Oct 3 05:50:11 2019 from 192.168.88.254 $ sudo apt update $ sudo vim /etc/hostname
$ ...
$ sudo reboot
Final result
![]() |
Final result after soldering enviro phat, setting up OS for rasp pi zero, and plugging in the power supply |
Install Enviro pHat SDK
$ curl https://get.pimoroni.com/envirophat | bash $ pip3 install prometheus_client
$ git clone git@github.com:telescreen/raspizero-playground.git
$ cd raspizero-playground
$ python3 enviro-collectd.py -d -f enviro-collectd.log --pid enviro-collectd.pid
I write a program to export environ data through prometheus client: https://github.com/telescreen/raspizero-playground . After running the program like above, you should be able to confirm the prometheus data at
http://$PI_IP_ADDRESS:9090/
Server Side
I have LXD running in my local machine. I also have Juju bootstrapped with local cloud as cloud environment. As Juju store already provided prometheus2 and grafana charms, Installation of these middlewares is simply typing following 2 commands.
$ juju deploy prometheus2 $ juju deploy granafa $ juju add-relation prometheuss:grafana-source grafana:grafana-source
It will take a while for Juju to download / install charm and necessary software. After Juju finishes installing granafa and prometheus, we should see both applciation active in Juju status
$ juju status
Model Controller Cloud/Region Version SLA Timestamp
default lxd localhost/localhost 2.6.9 unsupported 16:19:07+09:00
App Version Status Scale Charm Store Rev OS Notes
grafana active 1 grafana jujucharms 32 ubuntu
prometheus2 active 1 prometheus2 jujucharms 11 ubuntu
Unit Workload Agent Machine Public address Ports Message
grafana/0* active idle 1 10.4.88.50 3000/tcp Started grafana-server
prometheus2/0* active idle 0 10.4.88.243 9090/tcp,12321/tcp Ready
Machine State DNS Inst id Series AZ Message
0 started 10.4.88.243 juju-63ab09-0 bionic Running
1 started 10.4.88.50 juju-63ab09-1 bionic Running
Next, we need to add the exposed prometheus data in the device to Prometheus's scrape job. I prepare a simple scrape job setup at
https://github.com/telescreen/raspizero-playground/blob/master/scrape-job.yaml
Adding the scrape job with Juju by following command
$ juju config prometheus2 scrape-jobs=@scrape-job.yaml
![]() | ||
After 1 minute, the device IP address should appear in the scrape target with state UP |
Login into grafana with password retrieved by following actions. The other actions are performed through the grafana UI and quite intuitively, so I excluded those settings from this post.
$ juju run-action --wait grafana/0 get-admin-password
unit-grafana-0:
id: 43e7d1e6-3251-437b-816d-d2aa182c5554
results:
password: NJBMMVNqW6ssKywL
status: completed
timing:
completed: 2019-10-03 07:28:44 +0000 UTC
enqueued: 2019-10-03 07:28:41 +0000 UTC
started: 2019-10-03 07:28:44 +0000 UTC
unit: grafana/0
Final Results
After like 3 hours, I could build the following dashboard for data captured by enviro phat's sensors. The light change is due to I put the sensors in a dark zone in my room. My room is definitely cooler than the temperature that Enviro is capturing. Probably, the temperature is affected by the heat from pi zero.The storm is approaching my city so I am expecting to see a lower than usual air pressure. The pressure should increase back in a few days after the storm.
I was able to build a simple home conditions' monitoring system in a short time with opensource technology. I can felt more and more the importance of opensource softwares after this project.
![]() |
Dashboard with temperature, air pressure and light information |
Comments