Nachtmodus (gedimmte LEDs) beenden

Eine der erste Anforderungen war, dass man die LEDs ausschalten kann. War zum Glück eine Leichtigkeit, das über eine Mod-Karte (perspektivisch per Tastenkombination) und die gedimmte Helligkeit von 0 zu erledigen.

Meine naive Erwartung war, dass man mit der gleichen Karte den Nachtmodus auch wieder beenden kann. Dem ist offenbar nicht so.

Das wäre aber mein Wunsch :wink: Da bei mir die LEDs komplett aus sind, würde ich die gerne auch wieder einschalten können. Oder die Kiste komplett neu zu starten und das Hörspiel auch neu starten zu müssen.

Alternativ über einen weiteren Befehl „TOGGLE_NIGHTMODE“ o.ä.

Hintergrund ist, dass z.B. zum Ausruhen am Mittag die LEDs aus sein sollen. Aber wenn es eben kein Schlaf wird und es im Zimmer wieder hell wird, dann sollten auch die LEDs wieder hell werden…

Ich kann es aktuell nicht testen, aber ich denke so etwas hier müsste dafür ausreichen:

// Led.cpp

void Led_ResetToNightBrightness(void) {
#ifdef NEOPIXEL_ENABLE
	if (Led_Brightness == Led_NightBrightness) {
		Led_Brightness = Led_InitialBrightness;
	} else {
		Led_Brightness = Led_NightBrightness;
	}
	Log_Println(ledsDimmedToNightmode, LOGLEVEL_INFO);
#endif
#ifdef BUTTONS_LED
	Port_Write(BUTTONS_LED, LOW, false);
#endif
}

Hi,
Ich würde es über eine zusätzliche bool Variable machen, weil die Helligkeit kann über die GUI verändert werden. Led_InitialBrightness wird aber nur 1x beim Start aus dem NVS geladen, damit kann es passieren, dass du immer im NightMode landest (zB.: helligkeit mod → Karte → if is falseNightmodehelligkeit mod → Karte → if is false).

Die Funktion könnte so aussehen (diese speichert beim Wechsel zwischen NightMode und Normal die Helligkeit ab):

void Led_ResetToNightBrightness(void) {
	static uint8_t prevBrightness;
	static bool nightMode= false;
	nightMode = !nightMode;
	if(nightMode) {
		prevBrightness= Led_Brightness;
		Led_Brightness = Led_NightBrightness;
		Log_Println(ledsDimmedToNightmode, LOGLEVEL_INFO);
	} else {
		// restore previous brightness
		Led_Brightness = prevBrightness;
		Log_Println(ledsDimmedToInitialValue, LOGLEVEL_INFO); // TODO: Neuer Log mit "Helligkeit wiederhergestellt"
	}
}

Ist auch nur schnell hin programmiert, Verwendung auf eigene Gefahr :wink: . Für ein Patch würde ich auch vorschlagen den CMD entweder umzubenennen in Toggle oder ein neues Toggle-Befehl einführen. Dann auch eine eigene Funktion dafür, zB Led_ToggleNightMode (damit haben wir dann gesamt 3: ResetToInitial, ReseTtoNight, ToggleNightMode).

Gruß,
Laszlo

1 „Gefällt mir“

Das war tatsächlich auch mal so - dann ist es irgendwie kaputt gepatcht worden.
Allerdings war, und das passt zu den Ausführungen von @laszloh, es nicht optimal umgesetzt, denn das Beenden hat tatsächlich wieder die initiale Helligkeit gesetzt. Wurde diese vor dem Aktivieren des Nachtmodus geändert und man hat zurück gewechselt, dann hat das im Zweifelsfalle nicht 100 % gepasst.
Mir war das allerdings fancy genug, deswegen habe ich da nicht mehr Arbeit reingesteckt.

Ich kann gerne die Woche ein PR dafür schreiben. Sollte recht einfach zu lösen sein.

@biologist stört es dich, wenn ich den Befehl CMD_DIMM_LEDS_NIGHTMODE in CMD_TOGGLE_LEDS_NIGHTMODE umbenenne und dessen Funktion in das Togglen ändere? Oder lieber einen neuen CMD?

Man kann mehr oder weniger fast alle Aktionen wieder umkehren durch erneutes Auflegen. Da müsste man das ja alles umbenennen in toggle, was ich irgendwie nicht so gut fände.
Also ich wäre eher dafür, dass man es namentlich belässt und aber halt quasi implizit togglen kann.
Was meinst du @tueddy?

1 „Gefällt mir“

Ich bin da recht wertfrei.
Umbenennung in CMD_TOGGLE_LEDS_NIGHTMODE macht das Kommando etwas klarer aber es gibt bestimmt auch Leute die eine angepasste Settings haben & dann evt. erstmal nicht kompilieren können.

Ich lasse den Befehl so wie er ist, das Argument mit dem Kompilieren ist gut. PR werde ich wahrscheinlich morgen fertig haben :smiley:

3 „Gefällt mir“

PR ist hier: Modify CMD_DIMM_LEDS_NIGHTMODE to toggle night light mode by laszloh · Pull Request #287 · biologist79/ESPuino · GitHub

Ich habe neben dem Nachtmodus auch die Funktionen um die LED Helligkeit angepasst.

MQTT selbst konnte ich noch nicht testen, da ich noch kein MQTT Server aktiv habe. Das werde ich frühestens am Wochenende durch testen können.

6 „Gefällt mir“

@laszloh Vielen Dank für Deine Mühe!
MQTT kann ich hier auch nicht testen, vielleicht kann das noch wer übernehmen?

Ich kann das machen, jedoch erst nächste Woche.

@laszloh Sieht funktionell gut aus mit MQTT, jedoch fehlt in Led.cpp noch: #include "Mqtt.h"

Habe den PR vorhin gemerged in dev.

1 „Gefällt mir“