(This is all from Fable BTW; I understand very little of it, but FWIW it was able to fix (most) of the problem, so I trust it, and I really don't want it to rewrite your entire app, which it will probably want to do if I don't tell it this is fixed... Yes, we ARE all going to be Golden Retrievers soon...)
Setup: NeewerLite v1.9.3 (33), macOS Tahoe 26.5.1, Mac Studio (M1 Max).
Light: Neewer GL1. BLE raw name NEEWER-GL1, nickname GL1-755EBA, classified as type 4. The light's own display shows a 2900K–7000K range (29–70).
What works: Discovery, connection, and power on/off (pattern-based 0x78 0x81).
What doesn't: Brightness/CCT sliders have no effect on the panel. Tried, via the per-light "Update command patterns" editor:
- The shipped type-4 pattern (
{ccttag} = 0x87, range 32–56, with GM tail bytes) — ignored
- Same 0x87 long form with range(29,70) and
{gm} — ignored
- 0x87 short form:
{brr} {cct:range(29,70)} — ignored
- The reverse-engineered GL1 WiFi framing over BLE (
0x80 0x05 0x03 0x02 {brr} {cct}) — ignored
What DOES work: setting the cct pattern to a single legacy brightness frame:
0x78 0x82 0x01 {brr:uint8:range(0,100)} {checksum}
→ the panel brightness tracks the slider (and the Stream Deck brightness dial) perfectly.
Conclusion: this GL1 firmware wants the legacy "long CCT" dialect — separate 0x78 0x82 (brightness) and 0x78 0x83 (CCT) frames. That matches NeewerLite-Python, which classifies the GL1 as CCT-only (2900–7000) using separate bytestrings. Your own legacy getCCTOnlyLightCommand composes exactly these frames, but it's unreachable for this light: the type-4 DB entry defines a cct pattern, so findCommandPatternFromDB short-circuits before the legacy fallback. The pattern language also can't express two frames (checksum is only supported as the final token).
Requests:
- Route GL1/type-4 CCT control through the separate 0x82/0x83 frames (e.g., drop the
cct pattern from the type-4 DB entry so the legacy path runs, or add multi-frame patterns with per-frame checksums).
- Persist user-edited command patterns —
temporaryCommandPatterns isn't included in getConfig(), so custom patterns are lost on every app restart.
Possibly related history: #17 (original GL1 support, v1.1). Happy to test a build against this unit.
(This is all from Fable BTW; I understand very little of it, but FWIW it was able to fix (most) of the problem, so I trust it, and I really don't want it to rewrite your entire app, which it will probably want to do if I don't tell it this is fixed... Yes, we ARE all going to be Golden Retrievers soon...)
Setup: NeewerLite v1.9.3 (33), macOS Tahoe 26.5.1, Mac Studio (M1 Max).
Light: Neewer GL1. BLE raw name
NEEWER-GL1, nicknameGL1-755EBA, classified as type 4. The light's own display shows a 2900K–7000K range (29–70).What works: Discovery, connection, and power on/off (pattern-based
0x78 0x81).What doesn't: Brightness/CCT sliders have no effect on the panel. Tried, via the per-light "Update command patterns" editor:
{ccttag}= 0x87, range 32–56, with GM tail bytes) — ignored{gm}— ignored{brr} {cct:range(29,70)}— ignored0x80 0x05 0x03 0x02 {brr} {cct}) — ignoredWhat DOES work: setting the cct pattern to a single legacy brightness frame:
0x78 0x82 0x01 {brr:uint8:range(0,100)} {checksum}→ the panel brightness tracks the slider (and the Stream Deck brightness dial) perfectly.
Conclusion: this GL1 firmware wants the legacy "long CCT" dialect — separate
0x78 0x82(brightness) and0x78 0x83(CCT) frames. That matches NeewerLite-Python, which classifies the GL1 as CCT-only (2900–7000) using separate bytestrings. Your own legacygetCCTOnlyLightCommandcomposes exactly these frames, but it's unreachable for this light: the type-4 DB entry defines acctpattern, sofindCommandPatternFromDBshort-circuits before the legacy fallback. The pattern language also can't express two frames (checksum is only supported as the final token).Requests:
cctpattern from the type-4 DB entry so the legacy path runs, or add multi-frame patterns with per-frame checksums).temporaryCommandPatternsisn't included ingetConfig(), so custom patterns are lost on every app restart.Possibly related history: #17 (original GL1 support, v1.1). Happy to test a build against this unit.