Skip to content

Add Senville F-mode codebook (RG66A2/BGEFU1) - device_code 8861#1567

Open
jesse-projects wants to merge 1 commit into
smartHomeHub:masterfrom
jesse-projects:add-senville-f-mode-8861
Open

Add Senville F-mode codebook (RG66A2/BGEFU1) - device_code 8861#1567
jesse-projects wants to merge 1 commit into
smartHomeHub:masterfrom
jesse-projects:add-senville-f-mode-8861

Conversation

@jesse-projects

Copy link
Copy Markdown

Summary

Adds a new SmartIR device code 8861 for Senville Aura mini-split air conditioners using the RG66A2/BGEFU1 remote, captured in Fahrenheit display mode.

Why a second Senville code?

The existing code 2860 was captured in Celsius and bakes the °C display flag into every IR payload — when fired, the indoor LCD reverts to Celsius regardless of user preference. This is problematic for US/Canada users whose AC's physical remote defaults to °F. 8861 provides native Fahrenheit display + complete mode coverage.

Coverage

2860 (existing) 8861 (this PR)
Display unit °C (Celsius, forces unit to C) °F (Fahrenheit, native)
Operation modes cool, heat, dry cool, heat, dry, auto, fan_only
Fan modes auto, quiet, level1, level2, level3 auto, low, med, high (match RG66A2 4-speed)
Temp range 17-30°C, 1°C precision 62-86°F, 1°F precision
Off command
Supported models SENA/12HF/IZ SENA/09HF/I, SENA/12HF/I, SENA/18HF/I, SENA/24HF/I

Methodology

  • 36 reference captures from a real Senville Aura unit across all modes/fan-speeds/temps + auxiliary buttons
  • Midea protocol reverse-engineered from these captures:
    • 48-bit payload + 2-bit gap + 48-bit bitwise-inverse-frame + 1-bit terminator
    • Byte 1: 3-bit mode field (bits 5-7), 3-bit fan field (bits 2-4), sleep flag (bit 1), constant (bit 0)
    • Byte 2: bit-reversed temperature counter in upper nibble, range flag in lower nibble (0x06 for 62-77°F, 0x0E for 78-86°F); constant 0x7E in fan_only mode
    • Byte 5: (sum(byte0..byte4) mod 256) XOR 0xFC (additive checksum with fixed mask)
  • 195 missing combos synthesized via formula
  • 13 cross-product diff captures verified the synthesis byte-for-byte (100% pass rate)
  • 53+ total reference frames matched against derived formulas

Total codes

500 (33 direct captures + 221 synthesized + 246 deterministic duplicates for lock-mode coverage). DRY and AUTO modes have all 4 fan keys present (each pointing to the same auto-fan code per temp) so SmartIR never KeyErrors on fan changes in those modes.

About the code number

I chose 8861 because:

  • 2860 = existing upstream Senville Celsius code (complemented, not replaced)
  • 8861 sits clearly outside the 1000-3000 mainstream range, in the sparse 8000+ community-custom cluster (alongside existing 8700, 8720, 8800)
  • No collision with anything in the current codes/climate/ directory

Happy to renumber if you'd prefer a different value.

Testing

Tested against a 9000 BTU Senville Aura Indoor Unit (SENA/09HF/IZ), firmware 4.0.4 via Broadlink RM4 Pro. All 5 HVAC modes, all 4 fan speeds where applicable, all 25 temps, plus off command verified working end-to-end.

Related work

  • Full protocol reverse-engineering writeup, capture toolkit, synthesis pipeline, and HA configuration examples: jesse-projects/senville-ir-toolkit
  • Methodology generalizable to other Midea-family rebadges (Pioneer, MrCool, etc.) — the toolkit's capture.py + synthesize.py + verify_synthesis.py workflow can derive new codebooks for any Midea-family remote with similar bit structure

Compatibility

8861 does not replace 2860; both can coexist. Users with the older display preference can continue using 2860; users wanting native °F should switch to 8861.

Adds 8861.json for Senville Aura series (SENA/09HF/I, /12HF/I, /18HF/I, /24HF/I)
using the RG66A2/BGEFU1 remote, captured in Fahrenheit display mode.

Existing code 2860 only supports cool mode in Celsius and forces the indoor
LCD to display in C. This 8861 codebook provides native Fahrenheit display
(62-86F range, 1F precision) plus complete 5-mode coverage:

- cool: 4 fan speeds × 25 temps
- heat: 4 fan speeds × 25 temps
- dry: locked-fan × 25 temps (remote ignores fan in dry mode)
- auto: locked-fan × 25 temps (remote ignores fan in auto mode)
- fan_only: 4 fan speeds (no temp setpoint)
- off command

Plus auxiliary IR codes for LED, Swing, Sleep, Turbo, Self Clean.

Methodology:
- 36 reference captures across all modes/fans/temps/aux
- Midea protocol reverse-engineered:
  - Bit-reversed temp counter in byte 2
  - 3-bit mode field at byte 1 positions 5-7
  - Checksum formula: (sum(byte0..byte4) mod 256) XOR 0xFC
- Synthesized 195 missing combos via formula
- 13 cross-product diff captures verified synthesis 100% byte-perfect
- 50+ total reference frames matched against derived formulas

Total codes: 500 (33 direct captures + 221 synthesized + 246 fan/temp duplicates
for lock-mode coverage)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant