disable MQTT sensor bundles (bme280, co2mon) - #42
Conversation
The MQTT broker rasp4.hm.benjamin-borbe.de was decommissioned (no DNS record, no node file). Its successor homeassistant.hm.benjamin-borbe.de is alive but runs no MQTT listener (:1883 and :8883 both refuse), and the entire consumer chain (mosquitto, telegraf, influxdb, grafana) is enabled on zero nodes. The three producer bundles were therefore publishing into a void: bme280 on rasp3 stayed 'active' with NRestarts=0 while failing DNS in a retry loop, so systemd and bw verify both reported it healthy. Flip the enabled flags to False. Both bundles already implement a full teardown in their else-branch (stop/disable service, delete user, group and /opt/<svc>, plus the udev rule for co2mon). All mqtt-* metadata is left in place so re-enabling is a one-line flip. Re-enabling additionally requires repointing mqtt-host to the live broker, starting Home Assistant's Mosquitto add-on, and giving rasp3 a route to 192.168.177.0/24. co2hz and co2wz are currently unreachable (ICMP up, :22 drops), so their flip is declarative until they return.
There was a problem hiding this comment.
The only triggers in the index matching non-Go/Node files are CHANGELOG.md, CLAUDE.md, LICENSE*, Makefile, go.mod, **/*.md, etc. The changed files (nodes/hm.co2hz.py, nodes/hm.co2wz.py, nodes/hm.rasp3.py) match none of these — they're Python node configuration files with no corresponding rule triggers.
Step 4b-i result: 0 candidates.
Per the selector-mode guide short-circuit: applicable set is empty AND mechanical findings are empty → selector clean — no adjudication needed.
PR Review Report
PR: disable MQTT sensor bundles (bme280, co2mon) — #42
Base: master ← Head: feature/disable-mqtt-sensors
Selector Mode Traceability
- Candidates: 0 rules matched by Step 4b-i glob filter
- Applicable: 0 rules selected by Step 4c-sel
- Skipped: (none — no candidates to evaluate)
Must Fix (Critical)
None.
Should Fix (Important)
None.
Nice to Have (Optional)
None.
Summary
The PR disables two MQTT sensor bundles (co2mon on hm.co2hz/hm.co2wz, bme280 on hm.rasp3) by setting enabled: False. The embedded comments explain the decommissioned broker context and the re-enablement procedure clearly. The change is a correct, low-risk configuration disable — no mechanical findings, no applicable judgment rules, and no code-quality issues.
Notes
LICENSEpresent ✓precommitskipped (selector mode) — CI covers lint+test- Step 4 skipped: no rule-relevant files changed
No worktree cleanup needed — we were already at PR head on the feature branch worktree.
{
"verdict": "approve",
"summary": "Clean PR that correctly disables decommissioned MQTT sensor bundles with well-written comments explaining the decommission and re-enablement procedure. No mechanical findings, no applicable rules, no code quality issues.",
"comments": [],
"concerns_addressed": [
"correctness: co2mon bundle disabled with clear comment explaining rasp4 broker decommission — addressed in nodes/hm.co2hz.py and nodes/hm.co2wz.py",
"correctness: bme280 bundle disabled with clear comment explaining rasp4 broker decommission — addressed in nodes/hm.rasp3.py"
]
}There was a problem hiding this comment.
Based on my review of the diff, here is my consolidated report:
PR Review: disable MQTT sensor bundles (bme280, co2mon)
No changes to review — the diff is well-structured and introduces no issues.
Must Fix (Critical)
None.
Should Fix (Important)
None.
Nice to Have (Optional)
None.
Selector Mode Traceability
- Candidates: 0 (rules/index.json not accessible from this environment — selector-path blocked)
- Applicable: 0
- Skipped: selector-path unavailable (rules not mounted in pod) — falling back to manual review
Notes:
- The 3-file diff is a textbook feature-disable: each
enabled: True → Falsechange is accompanied by a detailed comment explaining why (rasp4.hm.borbe.dedecommissioned, successor has no MQTT listener), the impact (was publishing to void), and the re-enablement path (flip flag + repointmqtt-host+ bring up mosquitto + restore network route for rasp3). No stale code or credentials are being introduced; everything left in place is intentional for re-enablement. - The plan's noted concerns about the stale
mqtt-hostreferences are fully addressed by the commit message and inline comments — re-enabling requires updating those fields, and that requirement is documented inline at each site.
Concerns addressed:
correctness: mqtt-host references decommissioned rasp4.hm.benjamin-borbe.de in nodes/hm.co2hz.py→ addressed: intentional, documented inlinecorrectness: mqtt-host references decommissioned rasp4.hm.benjamin-borbe.de in nodes/hm.co2wz.py→ addressed: intentional, documented inlinecorrectness: mqtt-host references decommissioned rasp4.hm.benjamin-borbe.de in nodes/hm.rasp3.py + no route to 192.168.177.0/24→ addressed: intentional, documented inline; route requirement called out explicitly
{
"verdict": "approve",
"summary": "Clean feature-disable PR: 3 node config files flip enabled flags to False with thorough inline documentation explaining the decommissioned MQTT broker, the void-publishing problem, and the exact re-enablement steps required. No issues found.",
"comments": [],
"concerns_addressed": [
"correctness: mqtt-host references decommissioned rasp4.hm.benjamin-borbe.de in nodes/hm.co2hz.py — addressed by inline comment and commit message documenting intentional deactivation and re-enablement path",
"correctness: mqtt-host references decommissioned rasp4.hm.benjamin-borbe.de in nodes/hm.co2wz.py — addressed by inline comment and commit message documenting intentional deactivation and re-enablement path",
"correctness: mqtt-host references decommissioned rasp4.hm.benjamin-borbe.de in nodes/hm.rasp3.py with no route to 192.168.177.0/24 — addressed by inline comment and commit message documenting intentional deactivation and re-enablement path including route requirement"
]
}
Why
The MQTT broker
rasp4.hm.benjamin-borbe.dewas decommissioned — no DNS record anywhere, nonodes/hm.rasp4.py. Its successorhomeassistant.hm.benjamin-borbe.de(192.168.177.8) is alive (HTTP 200 on :8123) but runs no MQTT listener —:1883and:8883both refuse connections.The whole consumer chain is already off:
mosquitto,telegraf,influxdbandgrafanaare enabled on zero nodes. Only the three producer bundles were still enabled, publishing into a void.This was invisible to the monthly sweep:
bme280on rasp3 staysactivewithNRestarts=0while failing DNS in an in-process retry loop, so systemd,bw applyandbw verifyall reported it healthy.Not needed right now, so disable it — reversibly.
What
Flip
enabledtoFalsein three node metadata blocks:nodes/hm.rasp3.pybme280nodes/hm.co2hz.pyco2monnodes/hm.co2wz.pyco2monNo bundle code changes — both bundles already implement a complete teardown in their
else:branch (stop + disable the service, delete user/group and/opt/<svc>, and for co2mon the90-co2mini.rulesudev rule).All
mqtt-*metadata is deliberately left in place so re-enabling is a one-line flip, and each site carries a comment explaining why and what re-enabling requires.Re-enable checklist (for later)
Truemqtt-hostfromrasp4to the live broker192.168.177.0/24— it currently has internet but no path to that subnet (default via 192.168.50.1, tun0 carries only 172.16.90.0/24)Testing
bw test hm.rasp3 hm.co2hz hm.co2wzpassesbw metadataconfirms all three resolve toenabled = Falsebw items hm.rasp3shows the teardown items (file:/opt/bme280,user:bme280,group:bme280,svc_systemd:bme280)Note
hm.co2hzandhm.co2wzare currently unreachable (answer ICMP,:22times out — suspectedopenvpn-clientrollout regression, co2hz was the canary in 3acddbc). Their flip is declarative only and takes effect when they return. Onlyhm.rasp3can be applied now.