BIOS v2.6 — RepairmanRay Systems
Initializing kernel modules...
Mounting /home/ray .............. OK
Loading personality matrix ...... OK
System ready.
RepairmanRay
Repairman.  Builder.  Nerd.
ray@joplin:~$
scroll

About Me

I'm Ray — based in Joplin, MO. Repairman. Builder. Nerd.

I do apartment maintenance for a living, which mostly means the same things breaking in the same ways. Problem-solving is what I'm actually good at, and building is what I love. I have component-level electronics experience from back when people still got things repaired. Nobody does that anymore, but it turns out that background is a pretty good foundation for what's happening right now: ESP32s, Arduinos, Raspberry Pis, a flood of cheap sensors, and AI tools that mean I can build things I never could have written code for on my own. It's an embarrassment of riches and I'm spending every spare hour taking advantage of it.

I try to stay engaged with what's happening in my community too — because communities are systems, and systems don't fix themselves. Yet.

Location
Joplin, MO
Daily Driver OS
Linux
Current Obsession
ESP32 / LoRa mesh builds
Status
Online ▮

Projects

● Active
rf · self-hosted
RF Spectrum Observatory
An RTL-SDR dongle on the home server continuously sweeps 88–1300 MHz every 5 minutes, averaging multiple hardware passes for a clean noise floor. Signal strength across FM broadcast, aviation, weather satellite, amateur radio, ISM, and ADS-B bands is recorded in SQLite — full resolution for 24 hours, hourly averages beyond that. A canvas-based spectrogram viewer renders a color-graded waterfall: frequency on X, time on Y, dark green to yellow as power climbs.
hardwareRTL-SDR · RTL2838 · R820T tuner
range88–1300 MHz · ~175 kHz bins
interval5 min · 5 min integration average
serverCT 100 · Flask · SQLite
last sweep
→ open spectrogram
RTL-SDR Python Flask SQLite Canvas API
● Active
homelab
Beelink Proxmox Node
The hardware everything runs on. A Beelink Mini PC running Proxmox VE — webserver, Pi-hole, and Home Assistant all live here. No cloud, no rent, no monthly bill.
hostBeelink Mini PC
hypervisorProxmox VE
containersCT 100 webserver · CT 101 Pi-hole
vmVM 102 Home Assistant
egressCloudflare Tunnel · no open ports
Proxmox VE LXC Debian 13
◌ In Progress
home automation
Smart Home Stack
Home Assistant is up and running — locally hosted, no cloud account, no subscription. The foundation is solid. Zigbee, MQTT, and automations are next; this is the part of the stack that's actively being built out rather than just maintained.
platformHome Assistant OS · VM 102
hostinglocal-only · no cloud account
nextZigbee · MQTT · automations
Home Assistant HAOS Pi-hole local-first
● Active
networking
Pi-hole DNS
Network-wide ad blocking and DNS filtering for the whole home — LAN and IoT. The OpenWrt router pushes Pi-hole as the DNS server to every device on the network. 92,000+ domains blocked, no per-device configuration needed.
versionPi-hole v6
hostLXC CT 101 · Proxmox
scopeLAN + IoT · network-wide
domains blocked92,000+
routerOpenWrt · DHCP pushes Pi-hole
Pi-hole v6 LXC DNS OpenWrt
● Active
self-hosted · web
RepairmanRay.com
A personal site served from a home server over a Cloudflare Tunnel — no hosting provider, no managed platform. The terminal aesthetic fits the stack: plain HTML/CSS/JS, a Python HTTP server, and a self-hosted pipeline that gets the job done without a cloud bill.
serverCT 100 · Python HTTP
tunnelCloudflare · no open ports
stackHTML · CSS · JS
hosting cost$0
HTML CSS JS Python Cloudflare Tunnel
◌ In Progress
electronics · LoRa
LoRa Alarm Mesh
A LoRa mesh network for monitoring doors and passageways across an apartment complex — magnetic switches, PIR motion detectors, and temperature sensors feeding back through a network of nodes and repeaters. Alert outputs via piezo buzzers. No WiFi, no cloud, no subscriptions — the mesh handles its own routing within radio range. Off-grid capable by design.
mcuHeltec ESP32 LoRa V3
radioLoRa 915MHz · mesh
sensorsreed switches · PIR · temperature
alertspiezo · local, no cloud
poweroff-grid capable
ESP32 LoRa Reed Switches PIR C++
◑ Prototype
electronics
Outdoor Firepit Weather Interlock Controller
A WiFi-connected relay controller built on an ESP32. Fetches live wind speed and temperature from OpenWeatherMap, enforces user-defined operating hours via NTP scheduling, and controls a relay with fail-safe logic — if WiFi drops, data goes stale, or conditions exceed limits, the relay locks out. Configured through a built-in web dashboard with auto-refresh. Settings persist across reboots via ESP32 NVS. Field deployment would require hardened relay switching and proper web authentication.
mcuESP32-WROOM-32
weather apiOpenWeatherMap · wind + temp
schedulingNTP · user-defined hours
fail-saferelay locks on WiFi loss / stale data
configbuilt-in web dashboard · NVS
ESP32 Arduino OpenWeatherMap Relay
◇ Concept
smartthings · iot
AC Freeze Monitor
Set Point 72°F
Current 79°F
Runtime 47min

$Monitors HVAC units via SmartThings API and personal access tokens. If a unit runs too long without the room temperature meaningfully dropping toward the set point, a fault is raised — the classic signature of a frozen evaporator coil killing airflow while the compressor keeps grinding.

// known constraints

Samsung controls the token lifecycle — personal access tokens expire on their schedule, requiring periodic manual re-auth with no programmatic renewal path. More critically, there's no true polling model: sensor data lives behind Samsung's cloud, so you're dependent on their infrastructure availability and whatever latency they introduce. A SmartThings outage is silently also your monitoring outage. You're always a guest in their ecosystem.

apiSmartThings · personal access tokens
detectionruntime vs. temp delta toward setpoint
languagePython
Python SmartThings API HVAC IoT
◇ Concept
electronics · power quality
Utility Voltage Monitor
A mains voltage monitor built around the ZMPT101B sensor and an ADS1115 16-bit ADC feeding an ESP32. Samples the 60Hz waveform at 860 SPS, computes true RMS, and raises alerts on sags below 105V or overvoltage above 126V. Events publish to MQTT — timestamps, duration, and min/max voltage — and feed into Home Assistant. Designed to catch the kind of slow sags that don't trip breakers but do kill compressors.
sensorZMPT101B (isolated)
adcADS1115 · 16-bit · I²C
mcuESP32-WROOM-32
sag threshold< 105V RMS
overvoltage threshold> 126V RMS
reportingMQTT → Home Assistant
ESP32 ZMPT101B ADS1115 MQTT true-RMS C++

Contact

Got a project, a question, or something broken that needs a second opinion? Send a packet my way.

broadcast
// WORK ORDER REPORT
Jun 2023 — Apr 2026  ·  4,554 records  ·  [CLASSIFIED]
// summary
total work orders4,554
date range06/02/2023 — 04/01/2026
avg time to close8.1 days  (median: 22.6 hrs)
peak monthJuly 2025 — 303 WOs
// status
Completed3,998
Cancelled541
Open14
Parts Needed1
// priority
Standard4,071
Medium141
Concierge130
Emergency106
Low88
// top problems
Other - Cosmetic370
Door Lock/Keys265
Cooling226
Other - Exterior216
Door Lock - Smart205
Washer204
Other - Electrical182
Other - Plumbing182
Light Bulbs172
Water Leak155
// top locations
Unit Wide778
Kitchen726
Laundry Room404
Living Room340
Front Door & Entry334
Bathroom (Master)279
// avg time to close by priority
Concierge20.0 days avg  (median 51.9 hrs)
Low16.2 days avg  (median 98.3 hrs)
Medium10.3 days avg  (median 25.6 hrs)
Standard7.6 days avg  (median 21.8 hrs)
Emergency4.2 days avg  (median 14.2 hrs)
type "workorders" to close  ·  esc also works
// 14 currently open work orders
A-362open 29 days
Problem: Water Leak  ·  Location: Bathroom (Hall 1st)STANDARD
The leak looks fixed now, but I was wondering when it will be patched up?
A-406open 28 days
Problem: Other - Special Projects  ·  Location: Bathroom (Hall 1st)STANDARD
Please install the safe room decal on the side of bathroom door in the hall.
A-232open 28 days
Problem: Other - Paint  ·  Location: Bathroom (Hall 1st)STANDARD
Main bathroom where it was leaking never got painted.
A-135open 23 days
Problem: Drywall  ·  Location: Unit WideSTANDARD
Significant air leaks coming through walls — requesting inspection and repair.
A-209open 21 days
Problem: Drywall  ·  Location: Living RoomSTANDARD
Fix two small holes.
A-259open 20 days
Problem: Windows  ·  Location: Bedroom (Back Left)STANDARD
Windows in guest bedroom not closing correctly. Blind also needs replacement.
A-132open 20 days
Problem: Light Bulbs  ·  Location: Dining RoomSTANDARD
The dining light keeps flickering after being turned on for a bit.
A-224open 19 days
Problem: Other - Special Projects  ·  Location: Front Door and EntrySTANDARD
Smart Frame is not working.
A-225open 19 days
Problem: Curtains/Blinds  ·  Location: Bathroom (Master)CONCIERGE
Install shower curtain, fix walker cables, and squeaky hinges.
A-428open 15 days
Problem: Ceiling Fan  ·  Location: Unit WideSTANDARD
Replace cannibalized parts. Repair mismatch door.
A-429open 11 days
Problem: Other - Heating/Cooling  ·  Location: Balcony/PatioSTANDARD
Serious gaps in door making it harder to cool and heat the unit — photos attached.
A-136open 11 days
Problem: Windows  ·  Location: Living RoomSTANDARD
Dog tore up two blinds — hoping there are some in stock that I could pay for.
A-384open 6 days
Problem: Chip/Crack  ·  Location: Bathroom (Master)STANDARD
Small crack near the shelves in the bathroom.
A-482open 76 days ⚠
Problem: Smart Home App  ·  Location: Unit WideSTANDARD
Can I get assistance setting up Alexa and the smart home app?
A-380PARTS NEEDED
Problem: WindowsWAITING ON PARTS
Needing help to put up a curtain rod in the bedroom.
type "workorders" to close  ·  esc also works
// 106 emergency work orders by problem
Water Leak17
Cooling16
Door Lock/Keys12
Heating9
Smoke Detector7
Other - Electrical7
Door Lock - Smart7
Thermostat4
Other - Plumbing4
Refrigerator4
Doors2
Washer2
Clog2
Thermostat - Smart2
// top cancellation reasons
Internet Connectivity82 cancelled (highest of any category)
Other - Cosmetic67 cancelled
Other - Electrical31 cancelled
Door Lock/Keys21 cancelled
Cooling21 cancelled
type "workorders" to close  ·  esc also works
// top 15 units by total work order count
A-10650
A-27845
A-14538
A-43834
A-42533
A-38132
A-43132
A-38032
A-45032
A-32530
A-16730
A-46829
A-12127
A-48227
A-14227
// top problem+location combos
Washer · Laundry Room203
Cooling · Unit Wide164
Door Lock - Smart · Front Door145
Internet · Unit Wide137
Other - Exterior · Grounds132
Dishwasher · Kitchen125
Garbage Disposal · Kitchen105
Dryer · Laundry Room82
Refrigerator · Kitchen70
Door Lock/Keys · Front Door65
type "workorders" to close  ·  esc also works
// notable findings
outlier — aging ticket

A-482 has been open 76 days for a Smart Home App setup request. Oldest open WO by far — the rest cluster under 30 days.

priority paradox

Concierge WOs take longer to close than any other priority — avg 20 days, beating out Low (16d), Medium (10d), and even Standard (7.6d). Despite "concierge" implying VIP treatment, they sit the longest.

smart lock rollout spike

Door Lock - Smart went from 0 WOs in 2023 → 34 in 2024 → 149 in 2025. That's a 338% jump in one year — almost certainly tracking a property-wide smart lock installation and its ongoing support load.

plumbing & lighting surge

Both Other - Plumbing and Light Bulbs more than doubled from 2024→2025 (44→107 and 34→107 respectively). Worth watching in 2026 to see if this is a new baseline or a one-year anomaly.

internet connectivity — not our problem

82 of 137 Internet Connectivity WOs were cancelled (60% cancellation rate) — by far the highest cancel rate of any category. Residents submit them but they resolve on their own or get redirected to ISP.

summer surge is real

July 2025 hit 303 WOs — the highest month in the dataset. The pattern shows a consistent summer spike (May–Aug) driven largely by cooling issues and increased occupancy activity.

unit A-106 is the problem child

A-106 leads the building with 50 total WOs over the period — 11% more than second-place A-278 (45). Next closest cluster sits at 32–38. That unit warrants a closer look.

mean vs median gap

Average close time is 8.1 days but median is only 22.6 hours. Most WOs get handled same-day or next-day; a small tail of slow-to-resolve tickets drags the mean up significantly.

type "workorders" to close  ·  esc also works
// MOTD Admin