v2.7.0
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()andprogram_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)