das funktioniert soweit, wenn man einen (virtuellen) Button betätigt, wird das entsprechende Relais für 500ms eingeschaltet.
Ich würde jetzt gerne noch eine zusätzliche Funktion haben, wenn man einen Button länger drückt (long-press) sollte das Relais eingeschaltet werden und so lange ein bleiben, wie man die Taste hält, das sollte soweit ich weiß ja möglich sein, leider konnte ich es bis jetzt nicht lösen.
In dem Code ist jetzt nur ein Relais (zwecks Übersichtlichkeit) es sind aber 6 Stück, aber wenn ich es für eines machen, kann ist es nur ein copy & paste, das schaffe ich
Ich habe vor längerer Zeit mal was aus dem Internet kopiert, als ich auf der Suche für einen Beispielcode für meine Rollladensteuerung war.
Dort wurden unterschiedliche Tastendrücke über ‘binary_sensor’ und ‘on_multi_click’ ausgewertet.
Hab den Code nicht getestet aber vielleicht bringt dich das auf den richtigen Weg…
### Schaltersteuerung
binary_sensor:
- platform: gpio
pin: GPIO13
name: "Shelly 2.5 Open Button"
internal: true
id: switch1
filters:
- delayed_on_off: 20ms
on_multi_click:
# Einzelclick
- timing:
- ON for at most 400ms
- OFF for at least 300ms
then:
- cover.open: rolladen
- delay: 2s
- cover.stop: rolladen
# Doppelclick
- timing:
- ON for at most 400ms
- OFF for at most 300ms
- ON for at most 400ms
- OFF for at least 300ms
then:
- cover.open: rolladen
# 3fach click
- timing:
- ON for at most 400ms
- OFF for at most 300ms
- ON for at most 400ms
- OFF for at most 300ms
- ON for at most 400ms
- OFF for at least 300ms
then:
- cover.open: rolladen
- lambda: |-
if (!id(block_control).state) {
id(floor_up_state) = true;
id(floor_down_state) = false;
id(house_up_state) = false;
id(house_down_state) = false;
}
- delay: 2s
- lambda: |-
id(floor_up_state) = false;
id(floor_down_state) = false;
id(house_up_state) = false;
id(house_down_state) = false;
# 4fach click
- timing:
- ON for at most 400ms
- OFF for at most 300ms
- ON for at most 400ms
- OFF for at most 300ms
- ON for at most 400ms
- OFF for at most 300ms
- ON for at most 400ms
- OFF for at least 50ms
then:
- cover.open: rolladen
- lambda: |-
if (!id(block_control).state) {
id(floor_up_state) = false;
id(floor_down_state) = false;
id(house_up_state) = true;
id(house_down_state) = false;
}
- delay: 2s
- lambda: |-
id(floor_up_state) = false;
id(floor_down_state) = false;
id(house_up_state) = false;
id(house_down_state) = false;
# Halten
- timing:
- ON for at least 2s
then:
- lambda: |-
id(manual_mode) = true;
- cover.open: rolladen
# Taste losgelassen - Manual Mode STOP
on_release:
then:
- lambda: |-
if(id(manual_mode)) {
id(manual_mode) = false;
auto call = id(rolladen).make_call();
call.set_command_stop();
call.perform();
}