abbrechen
Suchergebnisse werden angezeigt für 
Anzeigen  nur  | Stattdessen suchen nach 
Meintest du: 


Doppelklick für Universalschalter GEN 1 mit Home Assistant

M_Rapske
CEO of the Homies

Moin zusammen,

 

ich habe mich mal mit dem Universalschalter (Flex) in Home Assistant beschäftigt,

da ich mehr als nur 4 Belegungen (Oben kurz, Oben lang, Unten kurz, Unten Lang) verwenden wollte.

Mir hat immer der Doppelklick gefehlt. 

 

Für den, der das auch gut gebrauchen kann, wollte ich es hier einmal zeigen:

 

Der Universalschalter (Flex) in Home Assistant sendet Befehle über den Event Bus.

 

event_type: bosch_shc.event
data:
  device_id: 681ae0a745ab17600f518ab04c1c1078
  id: hdm:HomeMaticIP:3014F711A000159BB85FDC8D
  name: Schalter Bett
  lastTimeTriggered: 1734291020811
  event_subtype: UPPER_BUTTON
  event_type: PRESS_SHORT
origin: LOCAL
time_fired: "2024-12-15T19:30:20.863539+00:00"
context:
  id: 01JF5WSQ1ZNBWN6C9BQY247JA8
  parent_id: null
  user_id: null

 

Dort stehen die alle Infos drin, die man braucht.

Dazu kommt, das dieses Event ein zweites Event (State_Changed) auslöst.

 

event_type: state_changed
data:
  entity_id: event.schalter_wohnzimmer_button_upper_button
  old_state:
    entity_id: event.schalter_wohnzimmer_button_upper_button
    state: "2024-08-30T20:54:08.212+00:00"
    attributes:
      event_types:
        - PRESS_SHORT
        - PRESS_LONG
        - PRESS_LONG_RELEASED
      event_type: PRESS_SHORT
      device_id: hdm:HomeMaticIP:3014F711A000159BB85FDC8D
      id: hdm:HomeMaticIP:3014F711A000159BB85FDC8D
      name: Schalter Wohnzimmer
      lastTimeTriggered: 1725051248150
      device_class: button
      friendly_name: Schalter Wohnzimmer Button UPPER_BUTTON
    last_changed: "2024-12-13T18:34:53.471439+00:00"
    last_reported: "2024-12-13T18:34:53.471439+00:00"
    last_updated: "2024-12-13T18:34:53.471439+00:00"
    context:
      id: 01JF0MTQMZ3X3W9SSYXCD9GH0K
      parent_id: null
      user_id: null
  new_state:
    entity_id: event.schalter_wohnzimmer_button_upper_button
    state: "2024-12-15T19:30:20.866+00:00"
    attributes:
      event_types:
        - PRESS_SHORT
        - PRESS_LONG
        - PRESS_LONG_RELEASED
      event_type: PRESS_SHORT
      device_id: hdm:HomeMaticIP:3014F711A000159BB85FDC8D
      id: hdm:HomeMaticIP:3014F711A000159BB85FDC8D
      name: Schalter Wohnzimmer
      lastTimeTriggered: 1734291020811
      device_class: button
      friendly_name: Schalter Wohnzimmer Button UPPER_BUTTON
    last_changed: "2024-12-15T19:30:20.878651+00:00"
    last_reported: "2024-12-15T19:30:20.878651+00:00"
    last_updated: "2024-12-15T19:30:20.878651+00:00"
    context:
      id: 01JF5WSQ2E9PCNWPKFAHF4HS6F
      parent_id: null
      user_id: null
origin: LOCAL
time_fired: "2024-12-15T19:30:20.878651+00:00"
context:
  id: 01JF5WSQ2E9PCNWPKFAHF4HS6F
  parent_id: null
  user_id: null

 

Hier ist gut zu sehen, dass dort ein Alter und ein Neuer Status angezeigt wird. Das kann man für sich nutzten, um den Abstand des Tastendruckes zu ermitteln.

 

Als erstes erstellen ich eine neue Automation mit dem Trigger "Ereignis" (Event).

In diesem Ereignis-Trigger warten wir auf das Event "state_changed" mit dem Datenzusatz des Events vom Universalschalter. Und vergeben eine ID für später.

 

trigger: event
event_type: state_changed
event_data:
  entity_id: event.schalter_wohnzimmer_button_upper_button
id: upper_press

 

Damit wird auf jeden Tastendruck des oberen Schalters des Universalschalters reagiert.

 

Unter Aktionen erstellen wir dann Variablen.

 

variables:
  old_state: "{{ trigger.event.data.old_state }}"
  last_trigger_time: "{{ old_state.split('=')[1].split(';')[0] | as_timestamp }}"
  new_state: "{{ trigger.event.data.new_state }}"
  trigger_time: "{{ new_state.split('=')[1].split(';')[0] | as_timestamp }}"
  press: "{{ new_state.split('=')[3].split(',')[0] }}"

 

Old_State: beinhaltet den Datensatz von state_changed -> old_state

last_trigger_time: isoliert die Zeit des Auslösens als Zeitstempel aus dem Datensatz Old_State

New_State: beinhaltet den Datensatz von state_changed -> new_state

trigger_time: isoliert die Zeit des Auslösens als Zeitstempel aus dem Datensatz New_State

press: isoliert die Info ob PRESS_SHORT, PRESS_LONG oder PRESS_LONG_RELEASED aus dem Datensatz New_State

 

Als 2 Aktion führen wir dann etwas mit Bedingungen aus.

 

War hat Ausgelöst?: ID von oben (Hier upper_press)

 

Dann die Variablen von oben abfragen.

 

Ist "press" = "PRESS_SHORT"?

Ist "Neue Zeit" minus "Alte Zeit" kleiner als 2 (Sekunden)?

 

DANN mache Esstisch auf 100% Helligkeit.

 

- conditions:
      - condition: trigger
        id:
          - upper_press
      - condition: template
        value_template: "{{ press == \"PRESS_SHORT\" }}"
      - condition: template
        value_template: "{{((trigger_time - last_trigger_time) | round(2) | float) < 2.0}}"
    sequence:
      - data:
          brightness_pct: 100
        target:
          entity_id:
            - light.ph_esstisch_1
            - light.ph_esstisch_2
        action: light.turn_on

 

 

 Wenn man einen Einzelklick möchte, einfach statt kleiner 2, größer 2 eintragen.

Der Modus der Automation sollte auf "Warteschlange" mit max. 10 sein. 

 

Ich nutzte es, um mit einmal drücken das Licht auf 1% zu stellen.

Mit dem zweiten drücken innerhalb 2 Sekunden auf 100%.

 

Ein weiter Einzelklick nach 2 Sekunden schaltet es wieder aus. (Bedingung Licht ist an)

Mit dem PRESS_LONG lasse ich jedes mal die Helligkeit um 5% ansteigen.

Damit ist die Obere Taste für Licht an/an 100%/aus und Dimmen zuständig. 

 

Hier nochmal die ganze Automation:

 

 

alias: Universalschalter Wohnzimmer
description: ""
triggers:
  - trigger: event
    event_type: state_changed
    event_data:
      entity_id: event.schalter_wohnzimmer_button_upper_button
    id: upper_press
conditions: []
actions:
  - variables:
      old_state: "{{ trigger.event.data.old_state }}"
      last_trigger_time: "{{ old_state.split('=')[1].split(';')[0] | as_timestamp }}"
      new_state: "{{ trigger.event.data.new_state }}"
      trigger_time: "{{ new_state.split('=')[1].split(';')[0] | as_timestamp }}"
      press: "{{ new_state.split('=')[3].split(',')[0] }}"
  - choose:
      - conditions:
          - condition: trigger
            id:
              - upper_press
          - condition: state
            entity_id: light.ph_esstisch_1
            state: "off"
          - condition: template
            value_template: "{{ press == \"PRESS_SHORT\" }}"
          - condition: template
            value_template: "{{((trigger_time - last_trigger_time) | round(2) | float) > 2.0}}"
        sequence:
          - data:
              brightness_pct: 1
            target:
              entity_id:
                - light.ph_esstisch_1
                - light.ph_esstisch_2
            action: light.turn_on
      - conditions:
          - condition: trigger
            id:
              - upper_press
          - condition: state
            entity_id: light.ph_esstisch_1
            state: "on"
          - condition: template
            value_template: "{{ press == \"PRESS_SHORT\" }}"
          - condition: template
            value_template: "{{((trigger_time - last_trigger_time) | round(2) | float) > 2.0}}"
        sequence:
          - data:
              transition: 5
            target:
              entity_id:
                - light.ph_esstisch_1
                - light.ph_esstisch_2
            action: light.turn_off
      - conditions:
          - condition: trigger
            id:
              - upper_press
          - condition: template
            value_template: "{{ press == \"PRESS_SHORT\" }}"
          - condition: template
            value_template: "{{((trigger_time - last_trigger_time) | round(2) | float) < 2.0}}"
        sequence:
          - data:
              brightness_pct: 100
            target:
              entity_id:
                - light.ph_esstisch_1
                - light.ph_esstisch_2
            action: light.turn_on
      - conditions:
          - condition: trigger
            id:
              - upper_press
          - condition: template
            value_template: "{{ press == \"PRESS_LONG\" }}"
        sequence:
          - data:
              brightness_step_pct: 5
            target:
              entity_id:
                - light.ph_esstisch_1
                - light.ph_esstisch_2
            action: light.turn_on
mode: queued
max: 10

 

 

Lerne aus den Fehlern anderer, du hast nicht genug Zeit sie selber zu machen.

SHC II mit 111 Geräten, 8 Automationen (Rest in HA), Xiaomi T13Pro mit Android 14


☝ gerne mitmachen! Info SHC Generation, Smartphone und Betriebssystem hilft häufig bei der Lösung von Problemen. Einfach im Profil bei "Persönliche Informationen" in der "Signatur" eintragen.
0 ANTWORTEN 0



Rechtswidrigen Inhalt melden