Skip to content

GL1 (NEEWER-GL1, 2900–7000K firmware) ignores combined CCT commands — needs separate 0x82/0x83 frames (verified working); custom patterns also not persisted #113

Description

@kmnstudios

(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:

  1. 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).
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions