Trochę bardziej rozbudowany przycisk

Mam bramę wjazdową obsługiwaną impulsem (zwarcie dwóch przewodów, po kolei: otwiera, zatrzymuje i zamyka czyli zewrę raz i rozewrę zaczyna się otwierać, powtórzę to się zatrzymuje i jak powtórzę trzeci raz, zaczyna się zamykać). Czyli wygląda to tak:

show_name: true
show_icon: true
type: button
tap_action:
  action: toggle
entity: switch.ruch_brama_wjazdowa
icon: mdi:boom-gate
icon_height: 140px
card_mod:
  style: |
    ha-state-icon, ha-icon {     /* stan: off */
      color: green !important; 
    }  
    ha-state-icon[data-state="on"],
    ha-icon[data-state="on"] {   /* stan: on */
      color: red !important; 
    }  

Ale stan bramy sygnalizuje mi kontaktron, zwarty gdy jest zamknięta i rozwarty gdy się otwiera i jest otwarta. Tego kontaktronu nie ma w kodzie jest wyłącznie encja sterująca bramą, jak widać.

Jak to zrobić żeby przycisk słuchał entity “switch.ruch_brama_wjazdowa” ale ikonka pokazywała stan entity kontaktronu?

1 polubienie

Ja mam to tak zrobione:


  - type: grid
    cards:
      - show_name: true
        show_icon: true
        type: button
        tap_action:
          action: call-service
          service: switch.toggle
          target:
            entity_id: switch.garaz_tomek_state
        entity: binary_sensor.garaz_tomek_garage_door_contact
        icon: mdi:garage


Widzę wiec stany otwarcia/zamknięcia danej bramy, a kliknięcie w button powoduje działanie typu toggle

1 polubienie

Dzięki, jak się dorwę do komputerka, zaraz spróbuję wg. wzoru :wink:

Dzięki, zadziałało choć troszkę dziwnie. Mój skrypt wygląda tak:

show_name: true
show_icon: true
type: button
name: brama wjazdowa
tap_action:
  action: call-service
  service: switch.toggle
  target:
    entity_id: switch.ruch_brama_wjazdowa
entity: binary_sensor.brama_o
icon: mdi:boom-gate
icon_height: 140px
card_mod:
  style: |
    ha-state-icon, ha-icon {     /* stan: off */
      color: green !important; 
    }  
    ha-state-icon[data-state="on"],
    ha-icon[data-state="on"] {   /* stan: on */
      color: red !important; 
    }  

Dziwność polega na tym, że muszę nacisnąć przycisk dwa razy żeby działało, choć gdyby nie ta niedogodność to działa poprawnie.

jeśli sterownik bramy wymaga impulsu to przyczyną jest to

musisz wstawić tam nieco bardziej rozbudowane akcje zamiast tego przełączenia np.

  1. włączenie
  2. opóźnienie o sekundę (o ile dowiesz się z instrukcji sterownika lub eksperymentując)
  3. wyłączenie
1 polubienie

Szopen ma rację - “switch toggle” ma zastosowanie dla dedykowanych sterowników bramy.

Ale mam i taki “impulsowy”. To Sonoff, przekaźnik beznapięciowy zintegrowany z kontaktronem. W środku ESP Easy, a więc komunikacji po wifi i IP.
Polecenie zwarcia wysyłam do sterownika poleceniem restowym, które wywołuję tak:

      - type: button
        tap_action:
          action: call-service
          service: rest_command.brama_wjazd
          service_data: {}
          target: {}
        entity: binary_sensor.kontaktron_brama
        icon: mdi:garage
        name: Brama
        show_state: true

a ten rest (wysłanie impulsu) mam zdefiniowany tak:

  brama_wjazd:
    url: "http://192.168.x.xxx/control?cmd=PULSE,12,1,200"
    method: POST

Dzięki za info ale, jak na razie, zbyt cienki jestem żeby wprowadzić Twoja radę w życie. Trochę tam znam CSS, Javascript, nodeRED, itp. ale w HA poruszam się od niedawna :wink:
Możesz pokazać, na bazie mojego skryptu jak to “tap_action” zmienić na:
włączyć - poczekać 1 sekundę - wyłączyć?

show_name: true
show_icon: true
type: button
name: brama wjazdowa
tap_action:
  action: call-service
  - service: switch.turn_on
    entity_id: switch.ruch_brama_wjazdowa
  - delay: 
    milliseconds: 500
  - service: switch.turn_off
    entity_id: switch.ruch_brama_wjazdowa
entity: binary_sensor.brama_o
icon: mdi:boom-gate
icon_height: 140px
card_mod:
  style: |
    ha-state-icon, ha-icon {     /* stan: off */
      color: green !important; 
    }  
    ha-state-icon[data-state="on"],
    ha-icon[data-state="on"] {   /* stan: on */
      color: red !important; 
    }

Ogólnie “delay” używam np. tak (minuta i 15 sek): - delay: 00:01:15

Wielkie Dzięki, nie mam jak teraz ale po południu skoryguję ten skrypty i sprawdzę.

Ale skorygowałem zdalnie i HA się przyczepił, dlaczego:

show_name: true
show_icon: true
type: button
name: brama wjazdowa
tap_action:
  action: call-service
#  service: switch.toggle
#  target:
  - service: switch.turn_on
    entity_id: switch.ruch_brama_wjazdowa
  - delay:
    miliseconds: 500
  - service: switch.turn_off
    entity_id: switch.ruch_brama_wjazdowa    
entity: binary_sensor.brama_o
icon: mdi:boom-gate
icon_height: 140px
card_mod:
  style: |
    ha-state-icon, ha-icon {     /* stan: off */
      color: green !important; 
    }  
    ha-state-icon[data-state="on"],
    ha-icon[data-state="on"] {   /* stan: on */
      color: red !important; 
    }  

Błąd konfiguracji:
Błąd podczas analizy składniowej kodu YAML: bad indentation of a mapping entry (linia: 9, kolumna: 3)

Takie rzeczy (funkcja działania impulsowego) robi się na poziomie urządzenia wykonawczego (switch.ruch_brama_wjazdowa) najlepiej w jego oprogramowaniu, a nie z poziomu UI HA. Dobrze rozumiem, ten “skrypt” to akcja wywoływana w karcie z dashboards?
Podaj informację jaki to fizycznie przekaźnik i za pomocą jakiego oprogramowania integruje się z HA?

@TomBod - nie używam ESP Easy, ale zamiast wysyłać polecenia po http, wydaje mi się, że lepiej ustawić regułę w samym ESP Easy dla działania czasowego przekaźnika.
Rules — ESP Easy 2.1-beta1 documentation
Podobnie jak robi się to w Tasmota (PulseTime) czy ESPHome .

1 polubienie

Sporo praktykowałem z regułami, nawet dość złożonymi. Ale były zawodne. Tutaj nie finezji, wysyłam proste on/off. Działa mi kilka lat, nie widzę powodu do zmiany.

1 polubienie

Brama przesuwna, sterowana z przycisku w korpusie silnika, wyposażona w interfejs WiFi do podłączenia pilota oraz łącznik kablowy (cztery przewody) gdzie zwarcie na chwilę jednej pary powoduje w kolejności: start otwierania - zatrzymanie - start zamykania a druga para pokazuje stan bramy, czyli kontaktronu na jej obu końcach: otwarta lub zamknięta - stan nie ustalony.
Pilot działa dokładnie tak jak przycisk w korpusie bramy, jego zwarcie (chwilowe) powoduje: start otwierania - zatrzymanie - start zamykania.

Te kabelki mam w swojej szafie sterującej elektryką i są podłączone do mojej instalacji KNX-owej więc steruję tą bramą przyciskami KNX-owymi.

Tak samo obsługuję bramę wjazdową do garażu, działa na tej samej zasadzie.

No i chcę to powtórzyć w HA.

“Takie rzeczy (funkcja działania impulsowego) robi się na poziomie urządzenia wykonawczego (switch.ruch_brama_wjazdowa) najlepiej w jego oprogramowaniu, a nie z poziomu UI HA” jak się do tego zabrać?

Nie bardzo rozumiem, przycisk dla mnie to fizyczny, mechanizm styku z samopowrotem. Czy pod pojęciem “przyciskami KNX-owym” masz na myśli konkretne urządzenie KNX (aktora)? Jeśli tak, to sprawdź czy ma możliwość programowego ustawienia działania chwilowego dla styku. Tak aby po otrzymaniu komendy z HA (po KNX) zwarł styk na określony (zaprogramowany w ETS) czas, a sam przekaźnik wykona tę funkcję sprzętowo na podstawie zaprogramowanych parametrów komunikacji KNX.

Poszukać kogoś kto to już zrobił z KNX:

EDIT:

Wygląda na błędne wcięcia, spróbuj z tymi poprawkami:

show_name: true
show_icon: true
type: button
name: brama wjazdowa
tap_action:
  action: call-service
  # service: switch.toggle
  # target:
  service:
    - service: switch.turn_on
      entity_id: switch.ruch_brama_wjazdowa
    - delay:
        milliseconds: 500
    - service: switch.turn_off
      entity_id: switch.ruch_brama_wjazdowa
entity: binary_sensor.brama_o
icon: mdi:boom-gate
icon_height: 140px
card_mod:
  style: |
    ha-state-icon, ha-icon { /* stan: off */
      color: green !important;
    }
    ha-state-icon[data-state="on"],
    ha-icon[data-state="on"] { /* stan: on */
      color: red !important;
    }

Jak listujesz service: to robisz to poprzez dodanie tej listy z myślnikami dodając kolene wcięcie dla tej kolumny.

W instalacji KNX para kabelków sterujących bramą jest podpięta do aktora razem z przyciskiem. Aktor i przycisk są spięte w adresie grupowym i ustawione tak, ze przycisk działa mono-stabilnie (czyli zwiera na sekundę i rozwiera).

Fajnie, nie wiem co pochrzaniłem ale teraz “kupił” ten skrypt i sprawdzenie poprawności też “gada” że nie ma błędu. Sprawdzę działanie wieczorem.

No niestety nie zadziałało bo HA czepia się sekwencji poleceń (serwisów).
“Sztuczna” podpowiedziała że trzeba zbudować mały serwis i ten serwis zawołać w “tap_action” ale (wpisałem ten serwis w configuration.yaml) i, przy wykonaniu, HA go nie widzi.

Nie chcę Ci organizować Twojego HA, ale może skorzystasz z takiego pomysłu:
w configuration.yaml trzymam rzeczy absolutnie niezbędne, które tu muszą być.
Natomiast wszystkie automatyzacje, skrypty, definicje sensorów - idą do osobnych plików.
Trzeba wtedy w configuration.yaml odpowiednio to zaadresować.
Zobacz u mnie:


Używając !include odnosisz się do konkretnego pliku yaml.
Używając !include_merge_list wskazujesz folder z plikami konfiguracji/definicji.

Moim zdaniem przy takiej liczbie automatyzacji, skryptów nie sposób to trzymać w jednym pliku.

A teraz do rzeczy. Jeszcze raz spróbujmy obsłużyć Twój przycisk.
Może tak:

show_name: true
show_icon: true
type: button
tap_action:
  action: call-service
  service: script.tutaj_nazwa_skryptu
entity: binary_sensor.tutaj_sensor_wskazujacy_stan
icon: mdi:garage
show_state: true
name: Moj_przycisk

Gdybyś zrobił tak, jak jest to u mnie, to w folderze tb_skrypty utworzyłbym nowy plik np. o nazwie “przuciski.yaml”.
A w nim utworzyłbym taki skrypt:

tutaj_nazwa_skryptu: 
 alias: Skrypt do otwarcia bramy
  sequence:
  - service: switch.turn_on (albo toggle)
    entity_id: switch.twoj_switch_do_bramy
  - delay: 00:00:01
  - service: switch.turn_off (albo toggle)
    entity_id: switch.twoj_switch_do_bram

Wielkie dzięki za odpowiedź i sugestię ale ja, najpierw zrobiłem to tak jak sugerujesz:

fragment configuration.yaml:

# Load frontend themes from the themes folder
frontend:
  themes:      !include_dir_merge_named themes
  extra_module_url: 
    - /hacsfiles/lovelace-card-mod/card-mod.js

automation:    !include automations.yaml
script:        !include scripts.yaml
#script:
#  brama_impuls:
#    alias: Brama impuls
#    sequence:
#      - service: switch.turn_on
#        target:
#          entity_id: switch.ruch_brama_wjazdowa
#      - delay:
#          milliseconds: 500
#      - service: switch.turn_off
#        target:
#         entity_id: switch.ruch_brama_wjazdowa
#   mode: single
sensor:        !include sensor.yaml
scene:         !include scenes.yaml
knx:           !include knx/knx.yaml

# Text to speech

scripts.yaml:

  alias: "Brama wjazdowa impuls"
  sequence:
    - service: switch.turn_on
      target:
        entity_id: switch.ruch_brama_wjazdowa
    - delay:
        milliseconds: 500
    - service: switch.turn_off
      target:
        entity_id: switch.ruch_brama_wjazdowa
  mode: single

i wywołanie:

show_name: true
show_icon: true
type: button
name: brama wjazdowa
tap_action:
  action: call-service
  service: script.brama_wjazdowa_impuls
entity: binary_sensor.brama_o
icon: mdi:boom-gate
icon_height: 140px
card_mod:
  style: |
    ha-state-icon, ha-icon {     /* stan: off */
      color: green !important; 
    }  
    ha-state-icon[data-state="on"],
    ha-icon[data-state="on"] {   /* stan: on */
      color: red !important; 
    }  

a jak nie zadziałało, to skomentowałem ten “include” i wstawiłem definicję wprost do configuration.yaml i, jak znów nie zadziałało to napisałem.

I czy nie jest błędem, bo gdzieś przeczytałem że HA tworzy nazwę skryptu automatycznie na podstawia “alias”, że nie ma Twojego “tutaj_nazwa_skryptu”?

A ja albo czegoś nie rozumiem, albo nie jest tak jak myślę. Z poprzednich wpisów wynika, że mamy switch skonfigurowany w KNX do pracy z bramą , czyli ma już zaimplementowaną pracę impulsowo , w innym przypadku nie było by możliwości sterowania tą bramą. Mamy też czujnik binarny ( kontaktron) do sygnalizacji stanu tej bramy. Po co w HA powielać polecenia ON- delay- OFF ?
W HA można użyć template cover wykorzystując switch i sensor , a wizualizacja na custom:button-card.


Czyli mając taka encję
2
Robimy sobie przycisk ze zmianą koloru ikony

1 polubienie