v2026.07.3
What's Changed
Fixes a real bug where the Position command sent the wrong target byte to the motor - unlike RTS (which has no percentage command and must fake intermediate positions via open-loop timing), IO has always sent a genuine target-percentage command that the motor executes on its own. That command was carrying the wrong value, so the motor would land at roughly half the requested closure instead of the actual target. Also adds real position feedback via passive 2W decode - the first step past pure local estimation.
Changes
- Fixed: Position command sent main[0]=(100-p) instead of (100-p)*2 - confirmed via a clean hardware test that the motor reads main[0] on the same raw/2=percent scale its own status reports use. Verified fixed on two independent physical motors.
- Changed: mode renamed from 1W Timed/1W My/2W to Position/Open-My-Close/Two-Way (Soon), with Position now the default (was My). Travel Time Open/Close removed as a user-configurable setting - fixed at 25s, since the local estimate is cosmetic and never affects where the motor actually ends up.
- Added: real position feedback via passive 2W decode - a standalone Target Closure sensor per cover (motor_address config) populated whenever an existing 2W-bonded controller (e.g. TaHoma) is overheard talking to the motor. Deliberately never touches the cover's own position/state, only the sensor - an earlier version that did backfired when a garbled reception corrupted the real control entity.
- Fixed: cover position and Target Closure sensor now persist across reboots (NVS-backed) - previously Position mode silently reset the displayed position to 0% (closed) on every reboot regardless of the real physical state.
- Fixed: local position estimate only publishes/logs on whole-percent changes now, instead of spamming on every ~0.1% tick.
- Fixed: constant "IO 26/32 is not set as GPIO" warnings (missing pinMode() before attachInterrupt() on the radio's DIO pins).
- Fixed: unconditional ets_printf() radio-level tracing spamming the log regardless of logger setting - removed ISR-context call sites, converted the rest to ESP_LOGV under "iohc.radio".
- Fixed: cover's key config field (AES pairing key) now wrapped in cv.sensitive() for deterministic redaction.
- Removed: experimental "Test 2W Query" diagnostic button, its purpose was answered.
- Also included (from the preceding commit in this release): motor_address wiring for all 14 covers, Target Closure sensor replacing per-cover Travel Time number entities, Debug Logging switch, Display on/off switch, Display Brightness and Display Page Interval controls.
Not Yet Implemented
- 2W active bonding/query (real position feedback currently requires an existing 2W-bonded controller like TaHoma to be overheard - see README's "Real position feedback" section for the caveat)
Upgrade Notes
- Reflash somfy-io-bridge.yaml to pick up the Position fix - if you were using Position mode before this release, positions sent were landing wrong and should be reissued after upgrading
- To get real position feedback, set motor_address per cover (see README) - requires an existing 2W-bonded controller (e.g. TaHoma/Overkiz) already active on the installation