Wave 3 #43: Connection: Happijac bed lift (tier-b) — van bed up/down control - #47
Merged
Conversation
Promoted from docs/catalog/networking/teltonika.md (legacy tier-c)
into a tier-b recipe connection under the connection pipeline.
RoamCore ships no native Teltonika integration; this slice
RECIPE-s the well-understood combination of HA's SNMP (or
Teltonika REST/RMS) integration plus the operator-side
`rc_net_teltonika_*` contract tiles (reachable, WAN state,
signal %, LTE mode, carrier, data used, uptime, reboot
affordance, public IP).
Manifest honesty preserved: tier=b, config_flow=false,
hacs=false, one_tap=false, no RoamCore-owned config_flow.py.
Slice: connections/teltonika/{connection.yml, __init__.py,
README.md, docs/recipe.md, tests/test_connection_yml.py} +
scripts/check.sh teltonika append + legacy teltonika.md
supersession banner.
- tier-b manifest: connections/peplink/connection.yml (networking category, beta status) covering HA core `snmp` Path A for single-router operators + Peplink InControl 2 REST API via the community HACS `hass-incontrol2` integration Path B for fleet operators, with 11 vendor-neutral contract tiles (`rc_net_peplink_*`), 8 OpenClaw queries, 6 OpenClaw summary keys, and 4 tier_warnings honesty markers. - connection folder stub: connections/peplink/__init__.py (DOMAIN marker; mirrors Teltonika pattern with Peplink-specific docstring describing both paths). - README: connections/peplink/README.md (folder overview + setup recipe + tier-b rationale + cross-refs to Teltonika + Starlink + MQTT siblings). - recipe: connections/peplink/docs/recipe.md (~870-line howto with all required §1–§9 sections — Path A HA core SNMP wiring, Path B InControl 2 REST API via HACS `hass-incontrol2`, `rc_net_peplink_*` contract entities, 4 mode-aware automations (multi-WAN preference cellular-in-Travel/Boost + Starlink-in-Home/Shore + force-failover with Stealth suppression + daily failover-count reset + alert-on->3-failovers), 8 troubleshooting entries, privacy, tier-a promotion outline). - manifest-honesty smoke: connections/peplink/tests/test_connection_yml.py (7/7 PASS via `bash scripts/check.sh --core-only`). - scripts/check.sh: wires the new smoke under the Connection: section, alphabetically after the existing teltonika entry. - docs/catalog/networking/peplink.md: legacy tier-c spec now carries a supersession banner pointing at the new connection folder. - docs/mvp/features-build-status.md: adds a 'Shipped (repo)' row for Wave 3 #40 (mirrors the recent Wave 3 connection-row shape; PR link placeholder `PR #N`). - Cron-handoff/2026-07-30-peplink-connection.md: slice summary with Context/Changes/Verification/Rollback notes for the next cron.
Promotes the legacy tier-c docs/catalog/audio-media/music-assistant.md spec into a tier-b recipe connection at connections/music-assistant/. Follows the same pattern proven by Wave 3 #35 Frigate / #36 Starlink / #37 DNS blocker / #38 NAS / #39 Teltonika / #40 Peplink. Music Assistant is the multi-room van audio slice of RoamCore — provider- agnostic (Spotify, Apple Music, TuneIn, local files, Chromecast / AirPlay / Sonos receivers) unified audio orchestrated by HA — and the recipe documents both the Path A HA add-on (recommended for HAOS installs; auto-discover via zeroconf) and Path B external MA server (recommended for fleet installs + non-HAOS hosts; via ghcr.io/music-assistant/server). This slice does NOT edit any peer connection folder, nor the build- status row for any other connection. Only the new music-assistant files + the scripts/check.sh wire-up + the legacy-doc supersession banner + the new build-status row for Wave 3 #41 + the docs/reference/rc-entity-naming.md allowed-subsystems update (adding the media subsystem alongside this slice). Context: - Wave 3 #41 ship; promoted from tier-c legacy spec - HACS-only install: MA is fetched from music-assistant/hass-music-assistant via HACS → Repositories → Add (HA core does NOT include Music Assistant; install.hacs: true is honest upstream truth, NOT a tier-a marker for RoamCore) - install.config_flow: true is also honest upstream truth (the upstream HACS integration has a config_flow since 2023) — NOT a tier-a marker for RoamCore (we ship no RoamCore-owned config_flow.py) - Per-zone rc_media_zone_* template media_player aliases map the upstream media_player.mass_* entities into the vendor-neutral rc_media_* family - 14 contract entities: 3 media_player zones + 1 binary_sensor + 6 sensors + 2 buttons + 1 select - 8 OpenClaw queries + 7 summary keys - 4 tier_warnings honesty markers (no_real_music_assistant_for_ integration_test, recipe_depends_on_user_running_ma, optional_ provider_choice_spotify_apple_music_local_files, hacs_required_ for_integration) Changes: - New connections/music-assistant/connection.yml (tier-b manifest; mirrors Peplink manifest shape verbatim with music-assistant substitutions: media category, beta status, 0.1.0 version, audio icon, recipe connection_kind, 14 contract tiles, 8 OpenClaw queries, 7 OpenClaw summary keys, 4 tier_warnings, HACS-only install, HACS default store listed for ha_integration_domain). - New connections/music-assistant/__init__.py (DOMAIN marker stub; mirrors Peplink __init__.py shape with music-assistant-specific docstring describing Path A + Path B + the rc_media_* contract family + the pause_all / resume_last affordances). - New connections/music-assistant/README.md (folder overview; mirrors Peplink README shape with music-assistant-specific setup recipe + cross-references to Starlink + Teltonika + Peplink + MQTT siblings). - New connections/music-assistant/docs/recipe.md (~1056-line howto; required sections §1 What is Music Assistant in RoamCore? / §2 Prerequisites / §3 Path A — HA add-on / §4 Path B — external MA server / §5 RoamCore contract entities / §6 Automations (6 automations: Stealth auto-pause, Travel motion-resume, Boost zone- default-volume, inverter-SOC power-aware pause, TTS-zone-pinning, remember-last-played) / §7 Provider setup notes (Spotify / Apple Music / TuneIn / local-files / Chromecast / AirPlay / Sonos) / §8 Troubleshooting (8 entries) / §9 Privacy / §10 Promoting to tier-a). - New connections/music-assistant/tests/test_connection_yml.py (7 manifest-honesty tests: id matches folder / tier-b without tier-a markers / docs recipe published / category matches legacy doc / dashboard tiles follow rc naming / status reflects no real music- assistant / agent pause-all action is allowlisted). - Modify scripts/check.sh — append a run_if_present entry for connections/music-assistant/tests/test_connection_yml.py directly after the existing Peplink entry. - Modify docs/catalog/audio-media/music-assistant.md — add a supersession banner at the top pointing at the new connection folder (matches the Wave 3 #40 Peplink supersession banner shape; legacy content below the banner is preserved for historical context). - Modify docs/mvp/features-build-status.md — add a 'Shipped (repo)' row for Wave 3 #41 mirroring the recent Wave 3 connection-row shape (manifest + recipe size + manifest-honesty smoke + contract entities + supersession banner + HACS-only install note + PR link placeholder PR #N). - Modify docs/reference/rc-entity-naming.md — add 'media' to the Allowed subsystems (recommended set) list alongside this slice (the new §media subsystem under which the rc_media_* contract family lives). Verification: - python3 -m pytest connections/music-assistant/tests/test_connection_yml.py -v → 7/7 PASS - bash scripts/check.sh --core-only → ✓ all requested smoke checks passed. Rollback: - git revert -m 1 <merge-sha> on main - The legacy docs/catalog/audio-media/music-assistant.md already carries a supersession banner pointing at connections/music- assistant/, so even post-revert operators have a pointer to the new connection folder. - git branch -d feat/connections/music-assistant + git push origin --delete feat/connections/music-assistant once the PR is closed. Notes for next slice: - The Music Assistant recipe references the Starlink + Teltonika + Peplink + MQTT connection folders as 'companion slices' — keep the cross-refs intact as those slices evolve. - The §6.1 Stealth auto-pause, §6.2 Travel motion-resume, §6.3 Boost zone-default-volume, §6.4 inverter-SOC power-aware pause, and §6.5 TTS-zone-pinning automations are mode-aware and respect RoamCore modes — same pattern as the Peplink / Teltonika slices. - The §10 tier-a promotion outline describes the RoamCore-owned MA container image + default provider stub + CI bench container needed to flip this to tier-a.
…e detection Tier-b recipe-over-upstream connection for presence detection (who's home?). Three upstream paths documented: - Path A: HA core bluetooth_le_tracker (YAML, deprecated upstream but functional) - Path B: HA core nmap_device_tracker or ping (config_flow) - Path C: Router-side asuswrt/unifi/mikrotik device_tracker integrations Adds 10 vendor-neutral rc_presence_* contract tiles, fills the presence subsystem slot in docs/reference/rc-entity-naming.md. Includes mode-aware automations (Stealth suppression, Bluetooth+Wi-Fi agreement, approach lighting on first arrival, inverter shutdown on all-away, power-aware occupancy alert). 7/7 manifest-honesty tests pass. Supersedes docs/catalog/presence/bluetooth-wifi-presence.md.
…control Context: Promote the legacy tier-c docs/catalog/bed-lift/happijac.md spec into a tier-b recipe connection at connections/happijac/. Follows the same pattern proven by Wave 3 #35 Frigate / #36 Starlink / #37 DNS blocker / #38 NAS / #39 Teltonika / #40 Peplink / #41 Music Assistant / #42 Bluetooth-Wi-Fi presence. Happijac (or any 2-relay + 2-limit-switch bed lift: LCI Happijac, DIY linear actuators, winch + strap, etc.) is the sleep-cycle glue of RoamCore for vans — every auto-lower at 23:00, auto-lift at 07:00, obstruction-stop + TTS alert, low-voltage-lockout when SOC < 20 %, safety-first wiring gate. Bed lift control is the only RoamCore connection where mis-wiring can cause a physical injury, so the recipe documents the four MANDATORY safety interlocks (limit-sanity aggregate / low-voltage lockout via sensor.rc_power_battery_soc cross-reference to Victron / current- based obstruction detection / mode-aware Stealth + Sleep + Boost lockouts) with the test_safety_interlocks_are_documented defensive guard for the future tier-a promotion's hard-enforced asserts. Two install paths documented (Path A — ESPHome custom cover for ESPHome-friendly installs; Path B — Shelly 1 / Shelly Plus 1 / Zooz ZEN17 / Aeotec Nano Switch relay pair + HA core template cover for relay-friendly installs). Both paths land on the same 12 rc_bed_lift_* contract tiles (cover.rc_bed_lift_position + 2× limit binary_sensors + moving + position_pct + safety_ok + 3× button lift/lower/stop + obstruction_detected + low_voltage_ lockout + mode select auto/manual_only/disabled). Subsystem addition: docs/reference/rc-entity-naming.md §allowed subsystems list gains bed_lift (mirrors how media was added by Music Assistant slice) AND presence (backfill — Wave 3 #42 promised this addition in a code comment but it never landed in the doc). Changes: - connections/happijac/connection.yml (tier-b manifest; 12 vendor- neutral rc_bed_lift_* contract tiles + 9 OpenClaw queries + 6 OpenClaw summary keys + 4 tier_warnings honesty markers) - connections/happijac/__init__.py (DOMAIN = 'happijac' marker stub; mirrors bluetooth-wifi-presence __init__.py shape) - connections/happijac/README.md (folder overview; cross- references to Victron + Music Assistant + bluetooth-wifi- presence sibling slices) - connections/happijac/docs/recipe.md (~360-line howto: Path A ESPHome YAML for outputs + binary_sensors + cover; Path B Shelly/template cover YAML + current_based_obstruction_ detection block; 4 safety interlocks in full; 6 §7 automations; 8 §8 troubleshooting entries; privacy; tier-a promotion outline) - connections/happijac/tests/test_connection_yml.py (7 manifest- honesty tests including test_safety_interlocks_are_documented defensive guard) - scripts/check.sh — append run_if_present entry for happijac smoke check immediately after bluetooth-wifi-presence entry - docs/catalog/bed-lift/happijac.md — add supersession banner pointing at the new connection folder - docs/reference/rc-entity-naming.md — add bed_lift AND backfill presence to the Allowed subsystems list - docs/mvp/features-build-status.md — add Shipped (repo) row for Wave 3 #43 mirroring the bluetooth-wifi-presence row shape Verification: - bash scripts/check.sh --core-only → ✓ all requested smoke checks passed (7/7 PASS for happijac connection smoke check) - python3 -m pytest connections/happijac/tests/test_connection_ yml.py -v → 7 passed in 0.04s - python3 -c 'import yaml; ...' (spec verification command stripping 'happijac' and asserting no leftover vendor names) → VERIFICATION OK - recipe.md 12 §sections present (§1–§10) - 12 contract tiles all rc_bed_lift_* (no vendor names outside the subsystem prefix) Out of scope: bluetooth-wifi-presence/connection.yml and all other connection folders.
bernardc6
force-pushed
the
feat/connections/happijac
branch
from
July 30, 2026 08:16
0093700 to
342d64b
Compare
Append the Cron-handoff entry for the Wave 3 #43 Happijac bed lift connection slice that landed in commit 342d64b (PR #47). Mirrors the existing Cron-handoff template (Context / Changes / Verification / Rollback) and references the companion sibling slices (Victron for §6.2 low-voltage lockout; Music Assistant for §7.5 obstruction TTS; bluetooth-wifi-presence for §7.6 only-driver-home gentle reminder).
bernardc6
pushed a commit
that referenced
this pull request
Aug 3, 2026
…on: Mock location + track replay (tier-a) — dev/demo polyline generator [PR #51]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
Promote the legacy tier-c
docs/catalog/bed-lift/happijac.mdspec into a tier-b recipe connection atconnections/happijac/. Follows the same pattern proven by Wave 3 #35 Frigate / #36 Starlink / #37 DNS blocker / #38 NAS / #39 Teltonika / #40 Peplink / #41 Music Assistant / #42 Bluetooth-Wi-Fi presence.Happijac (or any 2-relay + 2-limit-switch bed lift: LCI Happijac, DIY linear actuators, winch + strap, etc.) is the sleep-cycle glue of RoamCore for vans — every auto-lower at 23:00, auto-lift at 07:00, obstruction-stop + TTS alert, low-voltage-lockout when SOC < 20 %, safety-first wiring gate. Bed lift control is the only RoamCore connection where mis-wiring can cause a physical injury, so the recipe documents the four MANDATORY safety interlocks (limit-sanity aggregate / low-voltage lockout via
sensor.rc_power_battery_soccross-reference to Victron / current-based obstruction detection / mode-aware Stealth + Sleep + Boost lockouts) with thetest_safety_interlocks_are_documenteddefensive guard for the future tier-a promotion's hard-enforced asserts.Two install paths documented:
cover:component declaringcover.bed_lift)template:cover for relay-friendly installsBoth paths land on the same 12
rc_bed_lift_*contract tiles.Subsystem addition
docs/reference/rc-entity-naming.md§allowed subsystems list gainsbed_lift(mirrors howmediawas added by the Music Assistant slice) AND backfillspresence(Wave 3 #42 promised this addition in a code comment but it never landed in the doc — this slice adds it alongsidebed_liftto keep the doc honest).Changes
connections/happijac/connection.yml(tier-b manifest; 12 vendor-neutralrc_bed_lift_*contract tiles + 9 OpenClaw queries + 6 OpenClaw summary keys + 4tier_warningshonesty markers; mirrors bluetooth-wifi-presence manifest shape verbatim with happijac substitutions)connections/happijac/__init__.py(DOMAIN = "happijac"marker stub; mirrors bluetooth-wifi-presence__init__.pyshape with happijac-specific docstring describing both paths + the 4 safety interlocks)connections/happijac/README.md(folder overview + cross-references to Victron + Music Assistant + bluetooth-wifi-presence sibling slices)connections/happijac/docs/recipe.md(~360-line howto: Path A ESPHome YAML for outputs + binary_sensors + cover; Path B Shelly/template cover YAML +current_based_obstruction_detectionblock; 4 safety interlocks in full; 6 §7 automations; 8 §8 troubleshooting entries; §9 privacy; §10 tier-a promotion outline)connections/happijac/tests/test_connection_yml.py(7 manifest-honesty tests includingtest_safety_interlocks_are_documenteddefensive guard for the future tier-a promotion)scripts/check.sh— appendrun_if_presententry forconnections/happijac/tests/test_connection_yml.pyimmediately after the bluetooth-wifi-presence entrydocs/catalog/bed-lift/happijac.md— add supersession banner pointing at the new connection folderdocs/reference/rc-entity-naming.md— addbed_liftAND backfillpresenceto the Allowed subsystems listdocs/mvp/features-build-status.md— add Shipped (repo) row for Wave 3 Wave 3 #39: Connection: Teltonika (tier-b) — LTE/5G router for vans #43 mirroring the bluetooth-wifi-presence row shapeVerification
Out of scope
connections/bluetooth-wifi-presence/connection.yml(untouched; the only doc edit related to that slice is thepresencebackfill inrc-entity-naming.md)Cross-references
sensor.rc_power_battery_soc+binary_sensor.rc_power_shore_connectedfrom the Victronconnections/victron/recipemedia_player.rc_media_zone_livingbinary_sensor.rc_presence_only_driver_homefrom the bluetooth-wifi-presence contract