Skip to content

v3.1.0

Choose a tag to compare

@kristofferR kristofferR released this 10 Jul 01:10

What's New

  • DewertOkin RF Gateway support — "Bluetooth RF-Gateway" receivers (external RF bridges for Okimat beds) are now auto-detected and driven correctly: motor commands are sent to the direct Okin write characteristic wrapped in the RF Gateway's 8-byte frame with checksum, verified against the FurniMove APK. (#402, ref #394)
  • Authoritative Okimat/DewertOkin remote code table — the old ~40 hand-maintained remote codes (with keycodes inherited from smartbed-mqtt guesses) are replaced by a generated 187-code table sourced from the DewertOkin FurniMove vendor backend, with exact per-code keycodes and hold timing. This fixes wrong Flat and memory keycodes on several codes and adds new per-code capabilities: config-driven Massage, split-base Sync, Child Lock, and Zero-G, surfaced in a new Utility section on the Lovelace card. (#411, ref #406)
  • New bed type: DewertOkin DOT PROTOCOL (okin_dot) — implements the RF1058 / RF34 / RF6707 handset codes (90167, 91983, 93558, 97450, 97544, 98035) that use CB24-style framing over Nordic UART with an affirm handshake. Includes section-mapped motor controls, tap-to-recall memories, and automatic runtime promotion of Okimat entries connected to a DOT box. APK + vendor-backend verified; awaiting hardware confirmation. (#414, ref #406)

Bug Fixes

  • BOX25/Star presets never moved the bed — Flat, Zero-G, Anti-Snore, Lounge and Memory 1/2 on Ashley/Nectar M1X1232 (Star25…) beds only fired after pressing Stop All. The controller was sending CB25 preset frames the bed silently ignores; presets and memory recall now use the StarCode arm/commit sequence (5A 01 03 10 30 KK A5 ×3 + 0x0F commit) decompiled byte-for-byte from the official M1X12 app. Memory is limited to the two verified slots, with verified long-press save commands. (#409, #419, ref #372)
  • BOX25 beds auto-corrected to the wrong CB35 type — both BOX25 and CB35 hardware report STAR from the Device Information manufacturer characteristic, so the runtime correction overrode the stronger Star25… name signal and rewrote correct configs to okin_cb35. Star25… devices now stay on BOX25, previously rewritten entries are repaired automatically, and repaired entries regain position feedback. (#419 + follow-up, ref #413)
  • BedTech QRRM under-bed lights didn't work — QRRM names and the FEE9 service are shared by BedTech and Casper/Richmat hardware, so BedTech beds were classified as Richmat and received Casper RGB frames. BedTech controllers are now distinguished via the confirmed 0x4C57 manufacturer field, light/memory commands match the BedTech 7.1.3 APK (light toggle <, off u; ./+ are memory slot 1, not lights), and lighting is exposed as toggle-only since the OEM protocol has no discrete on command. Misclassified entries are corrected without oscillating, and stale light-switch/light-timer entities are cleaned up. (#420 + follow-up, ref #410)
  • OKIMAT 4 beds downgraded to a single-actuator stair-lift profile — full OKIMAT beds (e.g. Lattoflex OKIMAT 4 IPS/M) expose the exact same GATT signature as the ELDA stair lift, so they were reclassified to okin_rf_eco_bt and lost Legs, Memory, and Light. The Device Information model string now disambiguates: OKIMAT… models keep their multi-motor profile, MEGAMAT MBZ still refines to the stair profile. (#407, ref #406)
  • Non-bed devices discovered as Richmat beds — the generic FFF0 service alone no longer detects as a W4 WiLinke Richmat bed; a corroborating Richmat name (DHN-… or a QRRM…-style remote code) is required, matching how the vendor app itself identifies beds. Fixes false discovery cards for a dashcam (NO_DVR-FTD4-8) and a FIXD car OBD scanner. (#421, refs #418, #415)
  • ESPHome LED controller discovered as a Kaidi bed — the 0xFFFF/C0 FF manufacturer data Kaidi detection keyed on is actually the generic PairLink BLE-mesh SDK transport, which non-bed products also emit — and its payloads can pass every structural check. A parseable PairLink payload alone no longer detects; a corroborating Kaidi signal (Mouselet name, FFC0 service, or Kaidi MAC OUI) is required. (#422, ref #417)
  • Support bundles always shipped empty logsrecent_logs scanned for a log handler Home Assistant never installs, so every bundle came back with recent_logs: []. Bundles now tail home-assistant.log (off the event loop), filtered to the integration/Bluetooth/bleak loggers, with tracebacks kept intact. (#401)

Internal

  • Frontend toolchain migrated to TypeScript 7.0 (stable native compiler), dropping the tsgo / native-preview dependency.