Wave 3 #39: Connection: Teltonika (tier-b) — LTE/5G router for vans - #43
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.
bernardc6
pushed a commit
that referenced
this pull request
Jul 30, 2026
…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
pushed a commit
that referenced
this pull request
Jul 30, 2026
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).
This was referenced Jul 30, 2026
bernardc6
pushed a commit
that referenced
this pull request
Jul 30, 2026
…y for vans
Promote the legacy tier-c docs/catalog/safety/smoke-co-gas-sensors.md
spec into a tier-b recipe connection at
connections/smoke-co-gas-sensors/. Vendor-neutral lifesafety
sensors for vans — smoke / carbon-monoxide / propane-LPG / methane /
natural-gas — foundation of every 'is it safe to sleep in the van?'
question in van life.
Three install paths (operator picks based on existing IoT wiring +
Zigbee vs Z-Wave vs ESPHome comfort + siren ownership):
- Path A — Zigbee smoke / CO / gas detector via ZHA GUI flow
(ZHA integration since 2020.x, GUI flow since 2022.x); pair
a Zigbee detector, auto-discovered binary_sensor.smoke_*
/ binary_sensor.carbon_monoxide_* / binary_sensor.gas_*
entity_ids appear; some vendors expose only IAS Zone
binary_sensor for the alarm state, others expose a sensor
for the battery separately; recommended ZHA device signature
overrides for vendors that don't ship clean signatures
(Heiman / Develco / First Alert / X-Sense)
- Path B — Z-Wave smoke / CO detector via zwave_js GUI flow
(zwave_js integration since 2020.x, GUI flow since 2022.x);
pair a Z-Wave detector, auto-discovered binary_sensor
entity_ids appear; some Z-Wave detectors use the Notification
CC to differentiate test vs alarm vs low-battery states;
Z-Wave controller home ID backup recovery pattern documented
- Path C — DIY MQ-series analog gas sensor via ESPHome + relay-
driven siren on a GPIO (ESPHome integration since 2023.x,
GUI flow since 2023.x); full ESPHome YAML for an MQ-9 sensor
on GPIO 34 (ADC1_CH6, Wi-Fi-safe) + a relay-driven siren on
GPIO 26 + the threshold-derived binary_sensor.lpg_alarm
template + the per-gas thresholds cheat sheet for MQ-2 /
MQ-3 / MQ-5 / MQ-7 / MQ-9 / MQ-135; ESPHome + mqtt
availability topic for the sensor-offline cross-reference
12 rc_safety_* contract tiles (8 binary_sensor + 1 sensor + 2
button + 1 select):
- binary_sensor.rc_safety_smoke_detected
- binary_sensor.rc_safety_co_detected
- binary_sensor.rc_safety_gas_detected
- binary_sensor.rc_safety_any_alarm_active (aggregate)
- binary_sensor.rc_safety_siren_active
- binary_sensor.rc_safety_alarm_in_test_mode
- binary_sensor.rc_safety_low_battery_warning (< 20 %)
- binary_sensor.rc_safety_sensor_offline (heartbeat window)
- sensor.rc_safety_lowest_battery_pct
- button.rc_safety_silence_alarm
- button.rc_safety_test_alarm
- select.rc_safety_alarm_mode (armed | night_only | silenced |
disabled)
4 MANDATORY §6 lifesafety interlocks documented in recipe:
- sensor-not-offline detection via mqtt availability topic
(a silent safety sensor is the most dangerous kind)
- low-battery pre-warning (any sensor battery < 20 %)
- any-alarm aggregate (single subscription point for
downstream sirens + notifications + smart-cooking-aware
silencing)
- mode-aware lockout when alarm_mode=disabled suppresses
sirens + notifications (service only)
7 automations (loud siren + phone notification / auto-unlock
deadbolts + flash all lights on CO for emergency egress /
low-battery Sunday pre-warning / sensor offline detection via
mqtt last_seen + availability topic / monthly test cycle via
button.rc_safety_test_alarm / night-only mode gate /
smart-cooking integration).
install.config_flow: true is honest because the UPSTREAM HA core
zha + zwave_js + esphome + binary_sensor + mqtt + template
integrations ALL expose a GUI flow since 2022.x / 2023.x; no
RoamCore-owned wrapper / no native integration code is shipped
— all three paths recipe over upstream ZHA / zwave_js / ESPHome
+ HA core binary_sensor / mqtt / template integrations. Tier-a
promotion outline in recipe §10 describes the bench +
config_flow + integration tests required.
DOMAIN = 'smoke_co_gas' (matches folder name 'smoke-co-gas-
sensors' with hyphens replaced by underscores, per the audit
convention); the __init__.py module docstring rephrases
'config_flow' as 'GUI flow' or 'the vendor integration's GUI
flow' to avoid the forbidden substring trap the happijac slice
was bitten by.
Tier-warnings (5): no_real_smoke_co_gas_sensor_for_integration_test
/ recipe_depends_on_user_running_zigbee_or_zwave_or_esphome_
sensor_plus_siren / optional_siren_hardware_required /
optional_zigbee_vs_zwave_vs_esphome_choice /
requires_operator_testing_alarm_cycle_before_first_use.
Adds 'safety' to docs/reference/rc-entity-naming.md allowed
subsystems (between hvac and system, mirroring how 'media' was
added by the Music Assistant slice + how 'presence' was
backfilled alongside the bluetooth-wifi-presence slice + how
'bed_lift' was added alongside the happijac slice + how 'hvac'
was added alongside the heated-floors slice). Adds a 'Shipped
(repo)' row to docs/mvp/features-build-status.md for Wave 3 #45
with cross-refs to Deadbolts (Wave 3 #48) + Smart automations
(Wave 3 #46) + Heated floors (Wave 3 #44) + Happijac (Wave 3
#43) + Bluetooth/Wi-Fi presence (Wave 3 #42). Adds a
supersession banner to the legacy tier-c catalog page pointing
at the new connection folder. Wires the new smoke into
scripts/check.sh directly after the heated-floors entry.
Manifest-honesty smoke: connections/smoke-co-gas-sensors/tests/
test_connection_yml.py — 7/7 PASS via bash scripts/check.sh
--core-only, including test_safety_interlocks_are_documented
defensive guard for the future tier-a promotion's hard-enforced
lifesafety-interlock asserts.
PR #49 (Wave 3 #45).
This was referenced Jul 30, 2026
bernardc6
pushed a commit
that referenced
this pull request
Aug 3, 2026
… lift (tier-b) — van bed up/down control [PR #47]
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.
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.