Hallo zusammen!
Folgende Problemstellung:
Ich verwende einen Raspberry Pi mit fhem, der über das offizielle Display (https://www.rasppishop.de/Raspberry-Pi-7-Touchscreen-Display (https://www.rasppishop.de/Raspberry-Pi-7-Touchscreen-Display)) als UI dient. An diesem RPi befindet sich ebenfalls ein Helligkeitssensor (BH1750 über I2C angebunden), der bereits in fhem eingebunden ist und die Helligkeit in Lux anzeigt.
Nun kann man das Display und dessen Helligkeit mit einem Befehl auf Kommandozeile ändern [0-255]. Da das Display im Wohnzimmer im Sichtbereich ist, würde ich ungern bei Dämmerung/abends beim Fernsehen ein helles Display im Raum haben. Ebenfalls wäre es toll, wenn das Display tagsüber an einem Sommertag hell genug ist, um etwas darauf ablesen zu können.
Es liegt natürlich nahe, mit dem Helligkeitssensor und dessen Output die Displayhelligkeit automatisch zu regeln. Und genau das bereitet mir derzeit etwas Kopfzerbrechen.
Ich habe bereits über einen längeren Zeitraum die Helligkeitswerte des Sensor und die dazu passende Displayhelligkeit notiert. Diese Werte habe ich mal in Excel geworfen und eine Funktion bestimmt, die mir den gewünschten Displayhelligkeitswert abhängig vom Sensorwert angibt.
Nun ist meine Idee für die weitere Implementierung folgende:
- Ein UserReading ,,BrightnessSetpoint" an dem Helligkeitswert in fhem hinzufügen. Dieses UserReading enthält den Sollwert der Displayhelligkeit. Dabei muss ich hier irgendwie eine if-elsif-else-Unterscheidung implementieren, denn ab einem bestimmten Helligkeitswert, kann das Display in seiner Helligkeit nicht mehr gesteigert werden. Ebenso, soll das Display bei Dunkelheit eine minimale Helligkeit aufweisen und nicht komplett dunkel zu sein. Darüber hinaus wäre es schön, wenn das Display bei Abwesenheit (Anwesenheitserkennung ist in fhem bereits implementiert) aus ist.
- Dann mit einem Notify bei Änderungen des Helligkeitswertes des Sensors mit den UserReading ,,BrightnessSetpoint" einen entsprechenden Shell-Befehl absetzen um die Helligkeit des Displays zu ändern.
Da ich so etwas (für mich komplexes) noch nie implementiert habe, stellen sich mir diverse Fragen.
- Der Raspberry mit (Display und Helligkeitssensor) ist nicht mein Haupt-fhem-System, sondern in dieses Hauptsystem (ebenfalls auf einem Raspberry) per fhem2fhem eingebunden. Da ich aber die Displayhelligkeit an dem Client-System ändern will und der Helligkeitssensor ebenfalls am Client-System hängt, denke ich, sollte die Konstellation mit zwei verknüpften fhem-Instanzen kein Problem darstellen, oder? Einzig die Tatsache, dass die Anwesenheitserkennung auf dem Hauptsystem läuft passt nicht ins Bild.
- Ist mein Vorgehen generell sinnvoll? Oder mache ich einen Denkfehler? Sollte ich vielleicht z.B. den Systembefehl bereits in das UserReading integrieren und den ,,Umweg" über das Notify umgehen? Ginge das überhaupt?
- Kann ich eine if-elsif-else-Unterscheidung generell im Perl-Teil des UserReading unterbringen?
- Wäre es sinnvoller, statt eines Systembefehls ein Script aufzurufen, dem ,,BrightnessSetpoint" übergeben wird?
- Der Systembefehl zur Helligkeitsänderung des Displays muss als root abgesetzt werden. Soweit ich es verstanden habe, besitzt fhem aber nur User-Rechte. Ich würde aber ungern fhem root-Rechte aus Systemebene zuweisen. Gibt es hier ,,best-practice"-Herangehensweisen?