@@ -177,7 +177,12 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
177177 if (!iarr.isNull ()) {
178178 uint8_t oldSegId = strip.setPixelSegment (id);
179179
180- // freeze and init to black
180+ // set brightness immediately and disable transition
181+ transitionDelayTemp = 0 ;
182+ jsonTransitionOnce = true ;
183+ strip.setBrightness (scaledBri (bri), true );
184+
185+ // freeze and init to black
181186 if (!seg.getOption (SEG_OPTION_FREEZE)) {
182187 seg.setOption (SEG_OPTION_FREEZE, true );
183188 strip.fill (0 );
@@ -263,7 +268,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
263268 transitionDelayTemp *= 100 ;
264269 jsonTransitionOnce = true ;
265270 }
266- strip.setTransition (transitionDelayTemp);
271+ strip.setTransition (transitionDelayTemp); // required here for color transitions to have correct duration
267272
268273 tr = root[F (" tb" )] | -1 ;
269274 if (tr >= 0 ) strip.timebase = ((uint32_t )tr) - millis ();
@@ -290,10 +295,16 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
290295 realtimeOverride = root[F (" lor" )] | realtimeOverride;
291296 if (realtimeOverride > 2 ) realtimeOverride = REALTIME_OVERRIDE_ALWAYS;
292297
298+ bool liveEnabled = false ;
293299 if (root.containsKey (" live" )) {
294300 bool lv = root[" live" ];
295- if (lv) realtimeLock (65000 ); // enter realtime without timeout
296- else realtimeTimeout = 0 ; // cancel realtime mode immediately
301+ if (lv) {
302+ transitionDelayTemp = 0 ;
303+ jsonTransitionOnce = true ;
304+ liveEnabled = true ; // triggers realtimeLock() below
305+ realtimeLock (65000 );
306+ }
307+ else realtimeTimeout = 0 ; // cancel realtime mode immediately
297308 }
298309
299310 strip.setMainSegmentId (root[F (" mainseg" )] | strip.getMainSegmentId ());
@@ -370,6 +381,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
370381 }
371382
372383 stateUpdated (callMode);
384+ if (liveEnabled) realtimeTimeout = UINT32_MAX; // force indefinite timeout if this request contained {"live":true}
373385
374386 return stateResponse;
375387}
0 commit comments