feat: Default-Transition, Weckschalter und farbfreier Ausschaltfade
Zwei neue Einstellungen, beide wie fade_in/fade_out ueber POST /api/v1/device/state les- und schreibbar und sofort wirksam: - transition_default (Voreinstellung 300 ms) fuellt die Transition fuer Farb-, Weiss- und Helligkeitswechsel bei eingeschalteter Lampe, wenn der Aufruf kein eigenes "transition" mitbringt. Beim Ein- und Ausschalten behalten fade_in/fade_out weiterhin Vorrang. - wake_on_change (Voreinstellung aus) schaltet die Lampe bei einer Farb-, Weiss- oder Helligkeitsaenderung ein, wenn sie aus war. Ein ausdrueckliches "on": false im selben Aufruf gewinnt immer. Beide Felder haengen am Ende von nl_settings_t, damit bestehende Lampen ueber die Laengentoleranz von read_rec() ihre echten Voreinstellungen bekommen statt Nullen. nl_ctrl_set_fades() heisst jetzt nl_ctrl_set_options(). Dazu ein Treiberfehler, der erst an der migrierten GU10 RGB auffiel: der WY-Zweig von nl_sm2135eh_set() schrieb nur Header und WY-Daten, nie die RGB-Datenregister. Der Chip behielt also die zuletzt gesetzte Farbe, und bei einem direkten Wechsel Farbe -> Weiss (ohne Zwischenschritt ueber dunkel) schaelte sie sich beim Ausblenden wieder frei. Der Header sendet jetzt die - in Weiss immer nullwertigen - RGB-Daten mit. Die Bruno-Collection zeigt Transition jetzt zusammen mit einem Farb- und einem Weisswechsel im selben Aufruf und hat einen Request fuer die beiden neuen Einstellungen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
62a2b43175
commit
00d5a4c532
@@ -42,6 +42,8 @@ static void test_defaults(void)
|
||||
TEST_ASSERT_EQUAL_UINT8(NL_POB_LAST, s.power_on_behaviour);
|
||||
TEST_ASSERT_EQUAL_UINT16(500, s.fade_in_ms);
|
||||
TEST_ASSERT_EQUAL_UINT16(500, s.fade_out_ms);
|
||||
TEST_ASSERT_EQUAL_UINT16(300, s.transition_ms);
|
||||
TEST_ASSERT_EQUAL_UINT8(0, s.wake_on_change);
|
||||
}
|
||||
|
||||
static void test_save_and_load(void)
|
||||
@@ -108,6 +110,19 @@ static void test_load_accepts_shorter_record(void)
|
||||
TEST_ASSERT_EQUAL_UINT16(500, out.fade_in_ms);
|
||||
TEST_ASSERT_EQUAL_UINT16(500, out.fade_out_ms);
|
||||
TEST_ASSERT_EQUAL_UINT8(0, out.ota_pending);
|
||||
TEST_ASSERT_EQUAL_UINT16(300, out.transition_ms);
|
||||
TEST_ASSERT_EQUAL_UINT8(0, out.wake_on_change);
|
||||
}
|
||||
|
||||
static void test_transition_and_wake_roundtrip(void)
|
||||
{
|
||||
nl_settings_t in = sample("neu"), out;
|
||||
in.transition_ms = 1500;
|
||||
in.wake_on_change = 1;
|
||||
TEST_ASSERT_EQUAL_INT(0, nl_settings_save(&in));
|
||||
TEST_ASSERT_TRUE(nl_settings_load(&out));
|
||||
TEST_ASSERT_EQUAL_UINT16(1500, out.transition_ms);
|
||||
TEST_ASSERT_EQUAL_UINT8(1, out.wake_on_change);
|
||||
}
|
||||
|
||||
static void test_load_rejects_longer_record(void)
|
||||
@@ -171,6 +186,7 @@ int main(void)
|
||||
{
|
||||
UNITY_BEGIN();
|
||||
RUN_TEST(test_defaults);
|
||||
RUN_TEST(test_transition_and_wake_roundtrip);
|
||||
RUN_TEST(test_save_and_load);
|
||||
RUN_TEST(test_alternates_slots);
|
||||
RUN_TEST(test_power_loss_keeps_previous);
|
||||
|
||||
Reference in New Issue
Block a user