Skip to content

v2.7.0

Choose a tag to compare

@kristofferR kristofferR released this 17 Mar 13:58

What's New

New Bed Support

  • Logicdata SimplicityFrame (SILVERmotion) — Entirely new protocol family using XXTEA encryption, CRC-CCITT integrity checks, and SLIP framing over the proprietary LogicLink BLE service. Supports head/legs motors, flat preset, 2 memory slots, under-bed light on/off, and massage intensity control. Requires BLE pairing. (#262)

  • Okin CSTProtocol (Rize MF900) — New 14-byte dual-field command format for Rize MF900 and similar beds using OKIN's CSTProtocol. (#283)

New Features

Richmat

  • Add 11 missing remote codes from cross-analysis of 68 Richmat APKs: 6brm, a6rm, acrm, acrn, fjrm, y2rm, zr90, zrs3-zrs6 (#256)
  • Add advanced commands from GM Bed Control v3.0.33: memory slots 4-5, additional presets (side sleeper, yoga, sleep, wakeup, flat sleep), discrete massage intensity per zone, motors 5-7, combined motor movements, sync mode for split king beds (#257, #288)
  • Add preset_lounge() and program_lounge() methods — fixes AttributeError when pressing lounge on DDRM/F8RM/WLRM remotes (#288)

Keeson

  • Add KSBT03CR 7-byte variant with 0x05 prefix, auto-detected from device name (#259)
  • Add extended Nordic UART service UUID (6e400020) for Ergomotion/SFD beds that use an alternate GATT service (#269)
  • Add anti-snore preset for BetterLiving BED_DEFAULT variant (#287)

Octo

  • Add CAP_MOTORCOUNT parsing from feature discovery — auto-detects 2-4 motors and warns on mismatch with configured count (#273)
  • Add synchro/linked mode for split-king beds via CONFIG_SET_DRIVEMODE, exposed as a switch entity (disabled by default) (#273)

Leggett & Platt

  • Gen2: Implement motor control via ASCII "M" command — head, feet, pillow, and lumbar motors now functional instead of logging warnings (#274)
  • Okin: Wire tilt/lumbar motor methods to existing constants, add massage_wave_step() and massage_timer_step() (#276)

Jensen

  • Add go-to-position command (0x10 0x04 format) for direct motor seeking (#278)
  • Add variable massage intensity (0-10 scale per zone) via 0x12 command (#278)
  • Add position feedback support properties (#278)

Svane

  • Add variable light brightness control (0-100 range) via light_brightness() command (#279)

Jiecang / Comfort Motion

  • Add massage mode cycle, start, and stop commands (#260)
  • Add split bed motor constants (back right, top split) (#260)

Okin CB24

  • Add 5-byte massage intensity packet for direct level setting (0-4) per zone instead of toggle-only control (#266)

Remacro

  • Add heat control methods: heat_off() and heat_set_mode() — wires existing constants to controller methods (#261)

SUTA

  • Add head up/down AT commands alongside back up/down (#284)
  • Add massage commands: timer, duty cycle, level per zone (#284)

Linak

  • Add memory presets 5-6 (0x83/0x84 recall, 0x85/0x86 save), extending to 6 slots total (#292)

Reverie (Protocol 108)

  • Add linear motor commands (0x01-0x04) for proper movement control (#281)
  • Add stop massage command (0x35) (#281)

Bug Fixes

Reverie (Protocol 108)

  • Fix 9-byte notification parser that was expecting 4-byte format, making position feedback completely non-functional (#281)
  • Cap wave massage level at 9 — level 10 produced invalid byte 0x4A (#281)

Reverie Nightstand (Protocol 110)

  • Fix store memory value from 0x54 to 0x84 (#291)
  • Fix swapped preset mode mapping: MODE_1/2/3 renamed to MODE_ZERO_G/ANTI_SNORE/FLAT with correct byte values (#291)

SBI/Q-Plus

  • Revert Memory 1 command to 0x00010000 (was incorrectly changed) (#277)

Richmat

  • Fix WiLinke variant detection: add Nordic UART service check before W1 fallback so Nordic UART devices aren't misdetected as WiLinke (#289)

Solace

  • Fix MOTOR_HEAD_DOWN CRC bytes (0x57,0x81 → 0x56,0xC1), verified against CRC-16/Modbus calculation (#280)

Okin 7-Byte

  • Fix lights_toggle() to send 0x71 (actual toggle) instead of 0x73 (lights ON only) (#290)

Vibradorm

  • Fix massage toggle to use 3-byte CBI format instead of incorrect format (#285)

Octo

  • Use write-without-response to match APK behavior (#286)

MotoSleep

  • Add dedicated STOP command ($b / 0x62) instead of relying on generic stop (#293)

Sleepy's

  • Apply SMI decoding to all BOX15 and BOX24 command bytes (#295)

Malouf Legacy OKIN

  • Remove STOP command after presets — APK sets shouldSendStopAfterPreset=false, the STOP was interrupting preset movement (#282)

BedTech BT6500

  • Add "bt6500" to RICHMAT_WILINKE_STOP_COMPAT so beds auto-detected as Richmat WiLinke use the correct 0x5E stop byte (#194)

Leggett WiLinke

  • Correct MLRM timing from 150ms to 110ms (10 repeats) per analysis confirmation (#275)