mirror of
https://github.com/skoelle/moonweb-site.git
synced 2026-09-18 01:10:25 +00:00
Remove all em-dashes from website content and documentation
Replace ' — ' with ', ' across 40 files. Hyphens (-) untouched. timecapsule, stefankoelle, LICENSE, CSS comments left as-is.
This commit is contained in:
@@ -25,7 +25,7 @@ speaker app.</p>
|
||||
a software mixer stage (<code>+20 dB</code> via an ALSA softvol plugin) sits between
|
||||
shairport-sync and the hardware. The hardware mixer itself is deliberately
|
||||
left fixed at 100% / 0 dB, and shairport-sync only ever adjusts its own
|
||||
internal software volume — this avoids the volume jumps and mixer
|
||||
internal software volume, this avoids the volume jumps and mixer
|
||||
conflicts that show up when multiple layers all try to control loudness.</p>
|
||||
|
||||
<h2>Bathroom-specific integration</h2>
|
||||
@@ -33,7 +33,7 @@ conflicts that show up when multiple layers all try to control loudness.</p>
|
||||
radio stream automatically when its light sensor detects the light has
|
||||
been switched on. A simple flag file signals whether AirPlay is currently
|
||||
active, so the automatic radio stream politely stays off while someone is
|
||||
actively AirPlaying — and resumes its normal behavior as soon as the
|
||||
actively AirPlaying, and resumes its normal behavior as soon as the
|
||||
AirPlay session ends.</p>
|
||||
|
||||
<h2>Why this design</h2>
|
||||
|
||||
@@ -13,13 +13,13 @@ layout: base.njk
|
||||
self-contained smart-balcony controller: light control, an internet
|
||||
radio player, sensor readings, and its own backup/monitoring, all on
|
||||
very modest hardware. The goal is to make the balcony a more pleasant
|
||||
space — light control when it gets dark, background music while sitting
|
||||
space, light control when it gets dark, background music while sitting
|
||||
outside, and temperature readings to know what to expect before stepping
|
||||
out.</p>
|
||||
|
||||
<h2>What it does</h2>
|
||||
<ul>
|
||||
<li><strong>Audio output</strong> via a DIY PWM-to-analog circuit on two GPIO pins — the Pi Zero has no built-in audio jack, so this is a well-known community workaround using a small RC filter.</li>
|
||||
<li><strong>Audio output</strong> via a DIY PWM-to-analog circuit on two GPIO pins, the Pi Zero has no built-in audio jack, so this is a well-known community workaround using a small RC filter.</li>
|
||||
<li><strong>Physical controls</strong>: a push button for the balcony light and a toggle switch for music playback, read directly via GPIO.</li>
|
||||
<li><strong>HTTP communication</strong> with an ESP32-based balcony light controller.</li>
|
||||
<li><strong>Internet radio</strong> via a lightweight command-line audio player, controlled by a small custom tool ported from an earlier bathroom-Pi project.</li>
|
||||
@@ -28,7 +28,7 @@ out.</p>
|
||||
<h2>Hardware details</h2>
|
||||
<p>The Pi Zero W is connected to an ESP32 microcontroller that handles
|
||||
the actual light switching via a relay module. Communication happens
|
||||
over HTTP — the Pi sends a simple request to toggle the relay, and the
|
||||
over HTTP, the Pi sends a simple request to toggle the relay, and the
|
||||
ESP32 responds with the current light state. The ESP32 also reads a
|
||||
DHT22 temperature and humidity sensor, publishing the values to MQTT
|
||||
for the home dashboard. This split makes sense: the Pi handles the
|
||||
@@ -37,7 +37,7 @@ handles the real-time hardware control.</p>
|
||||
|
||||
<h2>Monitoring & backup, even on tiny hardware</h2>
|
||||
<p>Despite the very limited RAM, this Pi still participates in the same
|
||||
Prometheus monitoring pattern as the rest of the fleet — with the metrics
|
||||
Prometheus monitoring pattern as the rest of the fleet, with the metrics
|
||||
collector's default configuration trimmed down to only the essential
|
||||
collectors, since the full default set noticeably overloaded the CPU on
|
||||
this specific board. It also runs a nightly rsync backup of its own
|
||||
|
||||
@@ -13,30 +13,30 @@ parent: "/smarthome/"
|
||||
|
||||
<h2>Lighting & ambience</h2>
|
||||
<ul>
|
||||
<li><strong>Balkon</strong> — LED on/off toggle for the balcony lighting.</li>
|
||||
<li><strong>Beleuchtung (all rooms)</strong> — global "all on"/"all off" shortcut plus per-room toggles for living room and kitchen lighting.</li>
|
||||
<li><strong>Balkon</strong>, LED on/off toggle for the balcony lighting.</li>
|
||||
<li><strong>Beleuchtung (all rooms)</strong>, global "all on"/"all off" shortcut plus per-room toggles for living room and kitchen lighting.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Music controls</h2>
|
||||
<ul>
|
||||
<li><strong>Kitchen</strong> — quick buttons for SomaFM, a classical station, and an off switch, all routed to the kitchen speaker.</li>
|
||||
<li><strong>Living room</strong> — the same SomaFM/classical options plus dedicated Lounge, 2000s and Deluxe stations, and an off switch.</li>
|
||||
<li><strong>Kitchen</strong>, quick buttons for SomaFM, a classical station, and an off switch, all routed to the kitchen speaker.</li>
|
||||
<li><strong>Living room</strong>, the same SomaFM/classical options plus dedicated Lounge, 2000s and Deluxe stations, and an off switch.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Tasmota smart plugs</h2>
|
||||
<ul>
|
||||
<li><strong>TasmoAdmin</strong> — link straight into the central Tasmota device dashboard for firmware and config management.</li>
|
||||
<li><strong>Power strips (Gosund P1)</strong> — two multi-outlet strips covering the home-office network gear and backup drive, and the iMac corner with its peripherals.</li>
|
||||
<li><strong>Single sockets (SP112)</strong> — four individually switchable outlets covering hallway, kitchen, dryer and washing machine circuits, each also powering an associated LED matrix or small Pi.</li>
|
||||
<li><strong>Other plug families</strong> — additional Nous, Eightree (ESP32-based), Athom and IDS smart plugs cover spare capacity, living-room seating/desk outlets, storage room, kitchen appliances, and a few legacy TV/PC outlets (several currently marked defective).</li>
|
||||
<li><strong>TasmoAdmin</strong>, link straight into the central Tasmota device dashboard for firmware and config management.</li>
|
||||
<li><strong>Power strips (Gosund P1)</strong>, two multi-outlet strips covering the home-office network gear and backup drive, and the iMac corner with its peripherals.</li>
|
||||
<li><strong>Single sockets (SP112)</strong>, four individually switchable outlets covering hallway, kitchen, dryer and washing machine circuits, each also powering an associated LED matrix or small Pi.</li>
|
||||
<li><strong>Other plug families</strong>, additional Nous, Eightree (ESP32-based), Athom and IDS smart plugs cover spare capacity, living-room seating/desk outlets, storage room, kitchen appliances, and a few legacy TV/PC outlets (several currently marked defective).</li>
|
||||
</ul>
|
||||
<p>The plug collection has grown over time as different brands became available at different price points. Gosund P1 multi-socket strips handle areas with multiple devices, while the SP112 single sockets cover dedicated appliances. Eightree plugs are ESP32-based and flashable to Tasmota, while the Athom and IDS models round out the remaining circuits. A Tasmota RF Bridge extends the ecosystem to RF-only devices like the 3D printer plug in the study.</p>
|
||||
|
||||
<h2>Special devices & status</h2>
|
||||
<ul>
|
||||
<li><strong>Tasmota RF Bridge / Delock</strong> — bridges RF-only devices (like the home-office 3D printer plug) into the Tasmota/MQTT ecosystem.</li>
|
||||
<li><strong>LED Matrix restarts</strong> — one-click restart buttons for each of the six room LED matrix displays (living room, study, bathroom, kitchen, hallway, Nepomuk room), avoiding a manual power-cycle.</li>
|
||||
<li><strong>Healthchecks & version info</strong> — direct links into the Healthchecks dashboard and a version/status overview for the connected devices.</li>
|
||||
<li><strong>Tasmota RF Bridge / Delock</strong>, bridges RF-only devices (like the home-office 3D printer plug) into the Tasmota/MQTT ecosystem.</li>
|
||||
<li><strong>LED Matrix restarts</strong>, one-click restart buttons for each of the six room LED matrix displays (living room, study, bathroom, kitchen, hallway, Nepomuk room), avoiding a manual power-cycle.</li>
|
||||
<li><strong>Healthchecks & version info</strong>, direct links into the Healthchecks dashboard and a version/status overview for the connected devices.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Calendar & weather</h2>
|
||||
@@ -47,10 +47,10 @@ parent: "/smarthome/"
|
||||
|
||||
<h2>Network shortcuts</h2>
|
||||
<ul>
|
||||
<li><strong>Routers & mesh</strong> — quick links to the main Fritzbox and its mesh repeaters covering different floors and the kitchen/IoT band.</li>
|
||||
<li><strong>Switches</strong> — direct access to each Zyxel switch's admin page (server room, living room, PowerLAN, OpenWRT segment).</li>
|
||||
<li><strong>OpenWRT & mini router</strong> — links into the OpenWRT admin UI and the small travel router used for testing.</li>
|
||||
<li><strong>Sensors & MQTT</strong> — shortcuts to server-room and balcony sensor readings, bathroom analog values, and background worker/API status pages (HTML and JSON views).</li>
|
||||
<li><strong>Routers & mesh</strong>, quick links to the main Fritzbox and its mesh repeaters covering different floors and the kitchen/IoT band.</li>
|
||||
<li><strong>Switches</strong>, direct access to each Zyxel switch's admin page (server room, living room, PowerLAN, OpenWRT segment).</li>
|
||||
<li><strong>OpenWRT & mini router</strong>, links into the OpenWRT admin UI and the small travel router used for testing.</li>
|
||||
<li><strong>Sensors & MQTT</strong>, shortcuts to server-room and balcony sensor readings, bathroom analog values, and background worker/API status pages (HTML and JSON views).</li>
|
||||
</ul>
|
||||
|
||||
<p class="redacted-note">This dashboard is intentionally simple: static HTML, no login, meant purely for convenience on the local network rather than as a secured control surface. Device names and room assignments are shown for structure; a few outlets are currently unused or marked defective and simply act as placeholders for future devices.</p>
|
||||
|
||||
@@ -18,7 +18,7 @@ deliberately low-tech bridge: <strong>Home Assistant → MQTT → InfluxDB</stro
|
||||
Docker container, but the underlying Python library lost compatibility
|
||||
with HomematicIP's cloud API and hasn't been maintained since 2022. Home
|
||||
Assistant, on the other hand, ships an actively maintained HomematicIP
|
||||
Cloud integration — so instead of chasing a broken exporter, the bridge
|
||||
Cloud integration, so instead of chasing a broken exporter, the bridge
|
||||
now runs as native Home Assistant automations that simply republish
|
||||
sensor state changes to MQTT.</p>
|
||||
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: "Smart Home Projects — Home Assistant, MQTT & IoT | moonweb"
|
||||
title: "Smart Home Projects, Home Assistant, MQTT & IoT | moonweb"
|
||||
section: "smarthome"
|
||||
tags: "smarthome"
|
||||
description: "Smart home projects: Home Assistant, MQTT sensors, AirPlay audio, OctoPrint, and energy monitoring."
|
||||
@@ -89,7 +89,7 @@ sections:
|
||||
<p>The home dashboard runs on multiple touch displays around the flat: an ESP32-S3 WT32-SC01 in the living room and an M5Stack in the study. Both show room temperatures, energy usage, and quick-action buttons for lighting and music control.</p>
|
||||
|
||||
<h2>Automation philosophy</h2>
|
||||
<p>The goal is subtle automation that improves daily life without being intrusive. Lights turn on when someone enters a room, music starts playing in the bathroom when the light switches on, and LED matrix displays show the time, weather, and laundry status. But nothing talks unless spoken to — no voice assistants, no always-on microphones, just simple sensor-driven automation that runs locally without cloud dependencies.</p>
|
||||
<p>The goal is subtle automation that improves daily life without being intrusive. Lights turn on when someone enters a room, music starts playing in the bathroom when the light switches on, and LED matrix displays show the time, weather, and laundry status. But nothing talks unless spoken to, no voice assistants, no always-on microphones, just simple sensor-driven automation that runs locally without cloud dependencies.</p>
|
||||
|
||||
<h2>Self-hosted services</h2>
|
||||
<p>Beyond hardware automation, several self-hosted services run on the Synology NAS: TubeArchivist and TubeSync for YouTube archiving, OctoPrint for remote 3D printer control, iCloud Contacts Sync for keeping the address book up to date, and a Google Calendar sync for dashboard widgets. Each service is containerized and backed up as part of the NAS backup strategy.</p>
|
||||
|
||||
@@ -9,43 +9,43 @@ layout: base.njk
|
||||
<h1>Kids RFID MP3 Player</h1>
|
||||
<div class="detail-content">
|
||||
|
||||
<p>An Arduino-based MP3 player where kids select audio content by holding RFID cards against the device. No screen, no menus, no WiFi — just tap a card and music plays. Built together with my son in 2018 as a cheaper, more flexible alternative to commercial products like the Hoerbert or Tonuino.</p>
|
||||
<p>An Arduino-based MP3 player where kids select audio content by holding RFID cards against the device. No screen, no menus, no WiFi, just tap a card and music plays. Built together with my son in 2018 as a cheaper, more flexible alternative to commercial products like the Hoerbert or Tonuino.</p>
|
||||
|
||||
<h2>Why this exists</h2>
|
||||
<p>Commercial kids' audio players have trade-offs. The Hoerbert only offers 9 direct-select buttons with color-coded cards that aren't very intuitive for very young children. The Tonuino uses expensive RFID figures and relies on WiFi streaming, which introduces latency and dependency on network availability. This project aimed for the best of both worlds: RFID-based content selection with local-only playback, analog volume control, and minimal buttons.</p>
|
||||
|
||||
<h2>Hardware</h2>
|
||||
<ul>
|
||||
<li><strong>Arduino</strong> — the microcontroller running the custom firmware.</li>
|
||||
<li><strong>RFID module</strong> — reads MIFARE cards to trigger audio playback.</li>
|
||||
<li><strong>DFPlayer Mini</strong> — compact MP3 player module with built-in amplifier, handling audio decoding and playback directly from an SD card.</li>
|
||||
<li><strong>Pololu power switch</strong> — handles auto-shutdown to prevent battery drain, replacing a manual toggle switch that a child would forget to turn off.</li>
|
||||
<li><strong>Analog volume knob</strong> — a rotary potentiometer for tactile volume control, deliberately chosen over digital buttons.</li>
|
||||
<li><strong>3 LEDs</strong> — green (playing), yellow (paused), red (stopped/at end).</li>
|
||||
<li><strong>Arduino</strong>, the microcontroller running the custom firmware.</li>
|
||||
<li><strong>RFID module</strong>, reads MIFARE cards to trigger audio playback.</li>
|
||||
<li><strong>DFPlayer Mini</strong>, compact MP3 player module with built-in amplifier, handling audio decoding and playback directly from an SD card.</li>
|
||||
<li><strong>Pololu power switch</strong>, handles auto-shutdown to prevent battery drain, replacing a manual toggle switch that a child would forget to turn off.</li>
|
||||
<li><strong>Analog volume knob</strong>, a rotary potentiometer for tactile volume control, deliberately chosen over digital buttons.</li>
|
||||
<li><strong>3 LEDs</strong>, green (playing), yellow (paused), red (stopped/at end).</li>
|
||||
</ul>
|
||||
|
||||
<h2>How it works</h2>
|
||||
<p>Each RFID card is mapped to a specific audio file on the SD card. Hold a card against the reader and the corresponding story or song starts playing. Hold the RFID keychain against the reader to pause; hold it again to resume. No other buttons exist on the device — the design intentionally minimizes interaction points so even a toddler can use it independently.</p>
|
||||
<p>Each RFID card is mapped to a specific audio file on the SD card. Hold a card against the reader and the corresponding story or song starts playing. Hold the RFID keychain against the reader to pause; hold it again to resume. No other buttons exist on the device, the design intentionally minimizes interaction points so even a toddler can use it independently.</p>
|
||||
|
||||
<h2>Auto-shutdown behavior</h2>
|
||||
<p>The power management distinguishes between two states to avoid unnecessary battery drain:</p>
|
||||
<ul>
|
||||
<li><strong>Stopped</strong> (playback reached the end) — the device shuts down after 5 minutes.</li>
|
||||
<li><strong>Paused</strong> (user paused via RFID) — the device stays on for 1 hour before shutting down, allowing easy resumption.</li>
|
||||
<li><strong>Stopped</strong> (playback reached the end), the device shuts down after 5 minutes.</li>
|
||||
<li><strong>Paused</strong> (user paused via RFID), the device stays on for 1 hour before shutting down, allowing easy resumption.</li>
|
||||
</ul>
|
||||
|
||||
<h2>The case</h2>
|
||||
<p>The enclosure is a custom-built retro-style wooden box, painted by hand. The name "Rocky Box" came from my son, who painted a Paw Patrol character on the front. The design is deliberately quirky and homemade rather than polished — it has character.</p>
|
||||
<p>The enclosure is a custom-built retro-style wooden box, painted by hand. The name "Rocky Box" came from my son, who painted a Paw Patrol character on the front. The design is deliberately quirky and homemade rather than polished, it has character.</p>
|
||||
|
||||
<h2>What's missing (by design)</h2>
|
||||
<ul>
|
||||
<li>No resume after power-off — turning the device off mid-playback means starting the story over from the beginning.</li>
|
||||
<li>No skip forward/backward within a track — stories play start to finish.</li>
|
||||
<li>No resume after power-off, turning the device off mid-playback means starting the story over from the beginning.</li>
|
||||
<li>No skip forward/backward within a track, stories play start to finish.</li>
|
||||
</ul>
|
||||
<p>Both omissions are intentional. Young children don't need seeking functionality, and keeping the interface to just "tap card, listen" reduces confusion.</p>
|
||||
|
||||
<h2>Setup</h2>
|
||||
<p>All 100 RFID cards were pre-programmed once and labeled with numbers. No card learning or reprogramming is needed after initial setup — just hand a child a numbered card and they know which story it triggers.</p>
|
||||
<p>All 100 RFID cards were pre-programmed once and labeled with numbers. No card learning or reprogramming is needed after initial setup, just hand a child a numbered card and they know which story it triggers.</p>
|
||||
|
||||
<h2>Code</h2>
|
||||
<p>The Arduino firmware is not yet published on GitHub. It's a custom implementation (not Tonuino), written in C++ for the Arduino platform. The code may be uploaded in the future.</p>
|
||||
|
||||
@@ -12,12 +12,12 @@ layout: base.njk
|
||||
<p>A Raspberry Pi 3B runs OctoPrint for remote 3D-printer control, plus a
|
||||
live camera stream so print progress can be checked without walking over
|
||||
to the printer. This eliminates the need to stand next to the printer
|
||||
watching the first layer — a quality-of-life improvement that's hard to
|
||||
watching the first layer, a quality-of-life improvement that's hard to
|
||||
go back from once you've experienced it.</p>
|
||||
|
||||
<h2>Current setup</h2>
|
||||
<ul>
|
||||
<li><strong>OctoPrint</strong> runs as a Docker container — the main remote control interface for the printer.</li>
|
||||
<li><strong>OctoPrint</strong> runs as a Docker container, the main remote control interface for the printer.</li>
|
||||
<li><strong>Camera streaming</strong> is handled by a lightweight camera-server project, exposing both an HLS stream and an MJPEG stream, the latter wired directly into OctoPrint's webcam panel.</li>
|
||||
<li><strong>Container management</strong> (Portainer, cAdvisor, a node exporter) runs alongside, giving the same monitoring pattern as the rest of the fleet.</li>
|
||||
</ul>
|
||||
@@ -27,7 +27,7 @@ go back from once you've experienced it.</p>
|
||||
camera-server project provides two streaming modes: MJPEG for the
|
||||
OctoPrint dashboard (low latency, works in any browser) and HLS for
|
||||
remote viewing over slower connections. The MJPEG stream is the primary
|
||||
way to check on prints — it loads quickly and updates in real time in the
|
||||
way to check on prints, it loads quickly and updates in real time in the
|
||||
OctoPrint web interface.</p>
|
||||
|
||||
<h2>History</h2>
|
||||
@@ -39,7 +39,7 @@ that point to better reflect its now-singular focus on the printer.</p>
|
||||
|
||||
<h2>Notable OS lesson</h2>
|
||||
<p>After moving this Pi to a newer OS release, boot configuration files
|
||||
moved to a new path — editing the old path silently does nothing, which
|
||||
moved to a new path, editing the old path silently does nothing, which
|
||||
is an easy trap when following older notes or tutorials for the same
|
||||
hardware. The lesson: always verify that configuration changes actually
|
||||
take effect, especially after OS upgrades on embedded hardware.</p>
|
||||
|
||||
@@ -27,7 +27,7 @@ and LED matrix displays.</p>
|
||||
|
||||
<h2>Multi-socket power strips</h2>
|
||||
<p>Several rooms use multi-outlet smart power strips (each socket
|
||||
individually switchable and metered) rather than single smart plugs — this
|
||||
individually switchable and metered) rather than single smart plugs, this
|
||||
keeps things like "washing machine + dryer" or "office desk cluster" on
|
||||
one strip while still tracking each socket's consumption separately.</p>
|
||||
|
||||
@@ -35,7 +35,7 @@ one strip while still tracking each socket's consumption separately.</p>
|
||||
<p>New devices go through a standard conversion flow (from the
|
||||
manufacturer's original cloud-dependent firmware to Tasmota) using a
|
||||
well-documented community process. It occasionally fails on the first
|
||||
attempt due to a transient Wi-Fi handshake issue — retrying resolves it
|
||||
attempt due to a transient Wi-Fi handshake issue, retrying resolves it
|
||||
without any special handling.</p>
|
||||
|
||||
<h2>How the data flows</h2>
|
||||
@@ -60,7 +60,7 @@ via Flux to display real-time and historical usage charts.</p>
|
||||
|
||||
<h2>Why Tasmota over alternatives</h2>
|
||||
<p>Tasmota was chosen over alternatives like ESPHome or Tuya firmware for
|
||||
several reasons. The local-only control means no cloud dependency — the
|
||||
several reasons. The local-only control means no cloud dependency, the
|
||||
plugs work even if the internet is down. The MQTT integration is mature
|
||||
and well-documented. The energy monitoring sensors are accurate enough
|
||||
for home use (typically within 5% of a dedicated energy meter). And the
|
||||
|
||||
Reference in New Issue
Block a user