Helligkeitsregelung (LDR -> Stufe/Prozent) ergaenzt
- brightness.py: BrightnessController + CLI, portiert aus DoDimmen_V/main.h (gleitender Mittelwert, Hysterese). Schwellen 300/2500 aus altem Code, Prozente 5/15/50/100 - verallgemeinert auf 4 Stufen: 100% jetzt erreichbar (alter Code max 50%); neue obere Grenze HELL_MAX=3500 (anpassbar), Rest wie im Original - run_display: --ldr bindet die Regelung in die Hauptschleife ein (sendet nur bei Stufenwechsel) - test_brightness.py: Schwellen, Hysterese, Mittelung - README dokumentiert die Regelung; .gitignore: Hardware/ Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Tests fuer die Helligkeitsregelung (verallgemeinert aus DoDimmen_V).
|
||||
|
||||
python3 -m unittest -v test_brightness
|
||||
|
||||
Grenzen: Mitten (300, 2500, 3500) mit Hysterese (30, 150, 150)
|
||||
-> hoch bei 330 / 2650 / 3650, runter bei 270 / 2350 / 3350.
|
||||
"""
|
||||
|
||||
import unittest
|
||||
|
||||
import brightness
|
||||
from brightness import BrightnessController
|
||||
|
||||
|
||||
class TestStufen(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.c = BrightnessController()
|
||||
|
||||
def test_erststart_schaltet_von_0_hoch(self):
|
||||
self.assertEqual(self.c._next_level(329, None), 0)
|
||||
self.assertEqual(self.c._next_level(330, None), 1)
|
||||
self.assertEqual(self.c._next_level(2649, None), 1)
|
||||
self.assertEqual(self.c._next_level(2650, None), 2)
|
||||
self.assertEqual(self.c._next_level(3649, None), 2)
|
||||
self.assertEqual(self.c._next_level(3650, None), 3) # 100 % erreichbar
|
||||
|
||||
def test_hysterese_von_stufe_1(self):
|
||||
self.assertEqual(self.c._next_level(270, 1), 1)
|
||||
self.assertEqual(self.c._next_level(269, 1), 0)
|
||||
self.assertEqual(self.c._next_level(2649, 1), 1)
|
||||
self.assertEqual(self.c._next_level(2650, 1), 2)
|
||||
|
||||
def test_hysterese_von_stufe_2(self):
|
||||
self.assertEqual(self.c._next_level(2350, 2), 2)
|
||||
self.assertEqual(self.c._next_level(2349, 2), 1)
|
||||
self.assertEqual(self.c._next_level(3649, 2), 2)
|
||||
self.assertEqual(self.c._next_level(3650, 2), 3)
|
||||
|
||||
def test_hysterese_von_stufe_3(self):
|
||||
self.assertEqual(self.c._next_level(3350, 3), 3)
|
||||
self.assertEqual(self.c._next_level(3349, 3), 2)
|
||||
|
||||
def test_prozente(self):
|
||||
self.assertEqual(brightness.PERCENTS, (5, 15, 50, 100))
|
||||
|
||||
|
||||
class TestUpdate(unittest.TestCase):
|
||||
|
||||
def test_erste_aenderung_meldet_changed(self):
|
||||
c = BrightnessController()
|
||||
self.assertEqual(c.update(100), (0, 5, True))
|
||||
|
||||
def test_gleicher_wert_keine_aenderung(self):
|
||||
c = BrightnessController()
|
||||
c.update(100)
|
||||
level, percent, changed = c.update(100)
|
||||
self.assertFalse(changed)
|
||||
self.assertEqual(percent, 5)
|
||||
|
||||
def test_dunkel_zu_hell_erreicht_100(self):
|
||||
c = BrightnessController()
|
||||
c.update(100)
|
||||
level = percent = None
|
||||
for _ in range(brightness.AVERAGE_WINDOW + 2):
|
||||
level, percent, _ = c.update(4000)
|
||||
self.assertEqual(level, 3)
|
||||
self.assertEqual(percent, 100)
|
||||
|
||||
def test_gleitender_mittelwert_fenster(self):
|
||||
c = BrightnessController()
|
||||
for _ in range(20):
|
||||
c.update(1000)
|
||||
self.assertLessEqual(len(c._buf), brightness.AVERAGE_WINDOW)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main(verbosity=2)
|
||||
Reference in New Issue
Block a user