Rotary Encoder Zweck
Drehgeber für präzise Wert-Eingabe, Lautstärke-Regelung, Menü-Navigation oder Dimmer-Steuerung. Anschluss (KY-040 Module) Funktionen
Rotation: Erkennt Drehrichtung und Schritte
Push Button: Integrierter Taster mit Click-Erkennung Position Tracking: Absolute Position mit Min/Max-...
Code-Vorschau
Haupt-Konfiguration
Tipp: Markieren & ⌘/Ctrl + C zum Kopieren
configuration.yaml
1# Rotary Encoder (KY-040 oder ähnlich)2# Bietet Rotationserkennung und Drucktasten-Funktionalität3sensor:4-platform: rotary_encoder
5name:"${friendly_name} Rotary Position"6id: rotary_encoder
7pin_a:8number: GPIO18
9mode: INPUT_PULLUP
10pin_b:11number: GPIO19
12mode: INPUT_PULLUP
13resolution:4# Impulse pro Schritt (1, 2, oder 4)14min_value:-10015max_value:10016publish_initial_value:true17restore_mode: RESTORE_DEFAULT_VALUE
18filters:19-multiply:1.0# Skalierungsfaktor für Feinabstimmung20on_value:21then:22-logger.log:23format:"Rotary encoder: %.1f"24args:['x']25on_clockwise:26then:27-logger.log:"Clockwise rotation detected"28on_anticlockwise:29then:30-logger.log:"Counter-clockwise rotation detected"3132# Drucktaste des Rotary Encoders33binary_sensor:34-platform: gpio
35pin:36number: GPIO5
37mode: INPUT_PULLUP
38inverted:true39name:"${friendly_name} Rotary Button"40id: rotary_button
41filters:42-delayed_on: 50ms # Entprellen43-delayed_off: 50ms
44on_press:45then:46-logger.log:"Rotary button pressed"47# Encoder bei Tastendruck auf Null zurücksetzen48-sensor.rotary_encoder.set_value:49id: rotary_encoder
50value:051on_click:52-min_length: 50ms
53max_length: 1s
54then:55-logger.log:"Short click detected"56on_double_click:57-min_length: 50ms
58max_length: 1s
59then:60-logger.log:"Double click detected"61on_multi_click:62-timing:63- ON for at most 1s
64- OFF for at most 1s
65- ON for at most 1s
66- OFF for at least 0.2s
67then:68-logger.log:"Triple click detected"6970# Optional: Number-Komponente für Home Assistant Steuerung71number:72-platform: template
73name:"${friendly_name} Volume"74id: volume_control
75min_value:076max_value:10077initial_value:5078step:179unit_of_measurement:"%"80mode: slider
81optimistic:true82lambda:|-83 // Encoder-Wert (-100 bis 100) auf Lautstärke (0 bis 100) mappen
84 float encoder_val = id(rotary_encoder).state;
85 return (encoder_val + 100) / 2.0;
86set_action:87then:88# Lautstärke zurück auf Encoder-Bereich mappen89-sensor.rotary_encoder.set_value:90id: rotary_encoder
91value:!lambda'return (x * 2.0) - 100;'9293# Optional: Licht-Dimmer Beispiel94light:95-platform: monochromatic
96output: dimmer_output
97name:"${friendly_name} Dimmer"98id: rotary_light
99restore_mode: RESTORE_DEFAULT_OFF
100101output:102-platform: ledc
103id: dimmer_output
104pin: GPIO23
105frequency: 1000Hz
106107# Script zum Aktualisieren der Lichthelligkeit basierend auf Encoder108script:109-id: update_light_brightness
110then:111-lambda:|-112 float encoder_val = id(rotary_encoder).state;
113 float brightness = (encoder_val + 100) / 200.0; // Auf 0.0-1.0 mappen
114 brightness = max(0.0f, min(1.0f, brightness)); // Auf gültigen Bereich begrenzen
115116 auto call = id(rotary_light).turn_on();
117 call.set_brightness(brightness);
118 call.perform();
119120# Licht aktualisieren wenn Encoder sich ändert121on_boot:122then:123-script.execute: update_light_brightness