Image 1 — I built an e-paper smart home dashboard because glowing screens are annoying. (Then it spiraled into a full CI/CD project)
Image 2 — I built an e-paper smart home dashboard because glowing screens are annoying. (Then it spiraled into a full CI/CD project)

I built an e-paper smart home dashboard because glowing screens are annoying. (Then it spiraled into a full CI/CD project)

I built this because I wanted a dashboard for my homelab that actually looked like ink on paper, not just another glowing screen. It runs on a Pi Zero. But because I absolutely refuse to SSH into a headless Pi every time something breaks, things got a little out of hand. I ended up writing a custom Wi-Fi recovery portal and a CI pipeline to build ready-to-flash images. The repo is open-source if anyone wants to steal the code.

Here is the breakdown of the build and why I over-engineered the hell out of it.

The Hardware

  • Brain: Raspberry Pi Zero W (small enough to hide).
  • Screen: Waveshare 2.9" Tri-colour (Black/White/Red) e-paper module.
  • Sensor: AHT20 (I2C temp/humidity sensor).
  • Wiring: I skipped the plug-and-play HATs because they cover all the GPIO pins. I wired it bare-metal—SPI for the screen, I2C for the sensor—so they could share the board and fit inside a custom case without colliding.

The Over-Engineering (Fixing the annoyances of IoT)

I hate dealing with headless smart devices when things break, so I spent most of my time fixing the classic Raspberry Pi friction points:

1. The "Changed My Router Password" Problem Usually, if a headless Pi can't find the Wi-Fi, it just dies silently, and you have to plug in a keyboard or re-flash the SD card.

  • My fix: On boot, InkNode tests the connection. If the internet is down, it halts the boot, spins up its own temporary Wi-Fi Access Point, and physically draws a QR code on the e-paper screen. You scan it with your phone, hit a local web portal, type in your new Wi-Fi credentials, and it safe-boots.

2. The "Spaghetti Code" Problem: E-paper is incredibly slow to refresh. If your code waits for a weather API to respond before updating the screen, your device freezes.

  • My fix: Total decoupling. A background thread handles the network polling and fires lightweight plaintext telemetry directly to my MQTT broker (for Home Assistant). A separate Python Hardware Abstraction Layer (HAL) handles the screen, pulling the latest state from memory so the UI never blocks.

3. The "List of Terminal Commands" Problem I didn't want to run sudo raspi-config and pip install Every time I messed up my SD card.

  • My fix: I built a CI/CD pipeline using GitHub Actions. Whenever I push a release, it grabs the canonical Pi OS Lite image, injects my Python code and cloud-init scripts into the filesystem, shrinks the image size, and spits out a ready-to-flash .img file. You literally just flash it, plug it in, and it works.

Happy to answer any questions about the hardware, the e-paper limitations, or the GitHub Actions pipeline!

u/Clawiz13 — 6 days ago

I built an e-paper smart home dashboard because glowing screens are annoying. (Then it spiraled into a full CI/CD project)

I built this because I wanted a dashboard for my homelab that actually looked like ink on paper, not just another glowing screen. It runs on a Pi Zero. But because I absolutely refuse to SSH into a headless Pi every time something breaks, things got a little out of hand. I ended up writing a custom Wi-Fi recovery portal and a CI pipeline to build ready-to-flash images. The repo is open-source if anyone wants to steal the code.

Here is the breakdown of the build and why I over-engineered the hell out of it.

The Hardware

  • Brain: Raspberry Pi Zero W (small enough to hide).
  • Screen: Waveshare 2.9" Tri-colour (Black/White/Red) e-paper module.
  • Sensor: AHT20 (I2C temp/humidity sensor).
  • Wiring: I skipped the plug-and-play HATs because they cover all the GPIO pins. I wired it bare-metal—SPI for the screen, I2C for the sensor—so they could share the board and fit inside a custom case without colliding.

The Over-Engineering (Fixing the annoyances of IoT)

I hate dealing with headless smart devices when things break, so I spent most of my time fixing the classic Raspberry Pi friction points:

1. The "Changed My Router Password" Problem Usually, if a headless Pi can't find the Wi-Fi, it just dies silently, and you have to plug in a keyboard or re-flash the SD card.

  • My fix: On boot, InkNode tests the connection. If the internet is down, it halts the boot, spins up its own temporary Wi-Fi Access Point, and physically draws a QR code on the e-paper screen. You scan it with your phone, hit a local web portal, type in your new Wi-Fi credentials, and it safe-boots.

2. The "Spaghetti Code" Problem: E-paper is incredibly slow to refresh. If your code waits for a weather API to respond before updating the screen, your device freezes.

  • My fix: Total decoupling. A background thread handles the network polling and fires lightweight plaintext telemetry directly to my MQTT broker (for Home Assistant). A separate Python Hardware Abstraction Layer (HAL) handles the screen, pulling the latest state from memory so the UI never blocks.

3. The "List of Terminal Commands" Problem I didn't want to run sudo raspi-config and pip install Every time I messed up my SD card.

  • My fix: I built a CI/CD pipeline using GitHub Actions. Whenever I push a release, it grabs the canonical Pi OS Lite image, injects my Python code and cloud-init scripts into the filesystem, shrinks the image size, and spits out a ready-to-flash .img file. You literally just flash it, plug it in, and it works.

Happy to answer any questions about the hardware, the e-paper limitations, or the GitHub Actions pipeline!

u/Clawiz13 — 6 days ago
▲ 46 r/rasberrypi+1 crossposts

I built an e-paper smart home dashboard because glowing screens are annoying. (Then it spiraled into a full CI/CD project)

I built this because I wanted a dashboard for my homelab that actually looked like ink on paper, not just another glowing screen. It runs on a Pi Zero. But because I absolutely refuse to SSH into a headless Pi every time something breaks, things got a little out of hand. I ended up writing a custom Wi-Fi recovery portal and a CI pipeline to build ready-to-flash images. The repo is open-source if anyone wants to steal the code.

Here is the breakdown of the build and why I over-engineered the hell out of it.

The Hardware

  • Brain: Raspberry Pi Zero W (small enough to hide).
  • Screen: Waveshare 2.9" Tri-colour (Black/White/Red) e-paper module.
  • Sensor: AHT20 (I2C temp/humidity sensor).
  • Wiring: I skipped the plug-and-play HATs because they cover all the GPIO pins. I wired it bare-metal—SPI for the screen, I2C for the sensor—so they could share the board and fit inside a custom case without colliding.

The Over-Engineering (Fixing the annoyances of IoT)

I hate dealing with headless smart devices when things break, so I spent most of my time fixing the classic Raspberry Pi friction points:

1. The "Changed My Router Password" Problem Usually, if a headless Pi can't find the Wi-Fi, it just dies silently, and you have to plug in a keyboard or re-flash the SD card.

  • My fix: On boot, InkNode tests the connection. If the internet is down, it halts the boot, spins up its own temporary Wi-Fi Access Point, and physically draws a QR code on the e-paper screen. You scan it with your phone, hit a local web portal, type in your new Wi-Fi credentials, and it safe-boots.

2. The "Spaghetti Code" Problem: E-paper is incredibly slow to refresh. If your code waits for a weather API to respond before updating the screen, your device freezes.

  • My fix: Total decoupling. A background thread handles the network polling and fires lightweight plaintext telemetry directly to my MQTT broker (for Home Assistant). A separate Python Hardware Abstraction Layer (HAL) handles the screen, pulling the latest state from memory so the UI never blocks.

3. The "List of Terminal Commands" Problem I didn't want to run sudo raspi-config and pip install Every time I messed up my SD card.

  • My fix: I built a CI/CD pipeline using GitHub Actions. Whenever I push a release, it grabs the canonical Pi OS Lite image, injects my Python code and cloud-init scripts into the filesystem, shrinks the image size, and spits out a ready-to-flash .img file. You literally just flash it, plug it in, and it works.

Happy to answer any questions about the hardware, the e-paper limitations, or the GitHub Actions pipeline!

u/Clawiz13 — 6 days ago
▲ 3 r/SignalRGB+1 crossposts

Does anyone know whythe PC fan light is still on even when the PC is off ?

u/Clawiz13 — 30 days ago