Building a Real-Time Indoor Sensor Dashboard with ESP32, Prometheus, and Screenly Edge Apps

Learn how to build a real-time indoor sensor dashboard using ESP32, Prometheus format, and Screenly Edge Apps for live air quality monitoring and visualization.

by viktor

For an upcoming event, we wanted to create a more engaging on-site experience. Rather than just showing a static playlist, we built a live dashboard that visualizes real-time air quality data collected from the venue — displayed directly on a Screenly player. The result is a lightweight Edge App that integrates a local ESP32-based sensor using the newly added Prometheus format, with real-time updates rendered on screen.

Indoor Sensor Dashboard

Why ESP32?

The ESP32 was a natural fit for this project:

The complete sensor setup costs around <$30 using off-the-shelf components. We've published the hardware files and schematics on GitHub.

Firmware with ESPHome

We used ESPHome to build and flash the firmware. ESPHome's Prometheus format integration made this process straightforward — a couple of lines in the config and the device starts exposing metrics in plain-text format via HTTP. No custom API or additional code required.

Using the Prometheus Format

We chose to expose the sensor data in the Prometheus format because it's now widely adopted as a standard for telemetry. By using this format, we can:

Developing the Edge App

With the sensor in place and metrics flowing, we used the Screenly CLI to scaffold a new Edge App:

screenly edge-app create \
    --name=indoor_sensor_dashboard_dev

From there, we:

  1. Created a basic dashboard layout, using an earlier project as a starting point.
  2. Configured the app to fetch the Prometheus format endpoint at regular intervals.
  3. Used the local run mode to preview and test the app without deploying to hardware.
  4. Fine-tuned the styling and logic to ensure live values updated smoothly on screen.

Deployment

Once the dashboard was ready, we pushed it live using:

screenly edge-app deploy

Because the Edge App queries the sensor over the local network, it needs to run on a device with LAN access. This setup is compatible with Screenly Player and Player Max. However, it is not supported on Screenly Anywhere or our Android player, which renders content server-side and cannot access local network devices.

Key Takeaways

Resources

If you're building something similar, get in touch. We'd love to learn more.

Put Screenly on your screens

Book a demo and we will walk you and your IT team through it, or start a free trial on a screen you already have.