Skip to content
A simple Prometheus exporter for metrics from Bosch BME280 sensors for ESP8266 based boards with NodeMCU firmware.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
files/app/include
.gitignore
Dockerfile
LICENSE
README.md
application.lua
init.lua
location_example.lua
nodemcu_update.sh

README.md

mouldy

Mouldy is a simple Prometheus exporter for metrics from Bosch BME280 sensors for ESP8266 based boards with NodeMCU firmware.

If you enjoy video introductions, watch the five minute mouldy lightning talk from PromCon2017.

I had a little mouldy spot in my apartment. After removing it I was told to air more often to avoid the dewpoint. I was curious how often would be enough, but I had no data about humidity/dewpoint in my apartment. Commercially available humidity measuring devices supporting Prometheus do not seem to be available and I did not want to fall back behind the comfort of it. Hence I bought a LoLin NodeMCU V3 and a Bosch BME280 sensor and put this together. I paid 20€ for parts, but if you can wait for shipping from China you can reduce that sum to 10€.

It connects to WiFi and whenever one makes a TCP connection to it, it returns temperature, humidity, air pressure, and dewpoint in the Prometheus text format version 0.0.4.

Build it

Connect the sensor’s and the nodeMCU board’s pins:

BME280 nodeMCU
VIN 3V
GND G
SCL D5
SDA D6

You can use other SCL/SDA pins, but D5 and D6 are convenient because you can then solder the sensor to the board without using wires.

Run it

Firmware

To run the exporter you need to have a NodeMCU firmware built with these modules:

  • file
  • gpio
  • net
  • node
  • uart
  • wifi
  • bme280
  • i2c

For building I used the online build service by Marcel Stör.
For flashing I used esptool.

Use Docker Image

You can use the provided Docker image to flash the nodemcu firmware:

Build Docker Image:

docker build -t mouldy .

Flash nodemcu firmware:

docker run --device=/dev/ttyUSB0 mouldy sh -c 'esptool.py write_flash -fm dio \
  0x00000 bin/nodemcu_float_*.bin'

Uploading code via Docker doesn't work yet. Help welcome!

Local configuration

Change the values of the vars ssid, wifipasswort and altitude (of the device’s position in meters) in location_example.lua and rename it to location.lua

Then upload all .lua-files to the nodeMCU and reboot it. I used nodemcu-uploader for that. nodemcu-uploader also allows you to connect to the terminal and a few basic control functions like reboot. The nodemcu_update.sh might be handy for that. It is very basic, but safes time.

To do

  • TLS (see nodeMCU module tls)
  • export the scrape count
  • authorisation
You can’t perform that action at this time.