Instrukcja warunkowa

Cześć jestem nowy na forum i uczę się dopiero HA. Chciałbym zapytać czy jest możliwe zrobienie czegoś takiego:

- type: icon
            entity: >
              {% if statement') %} 
                switch.switch1
              {% else %} 
                switch.2
              {% endif %} 
            icon: mdi:ceiling-light

ewentualnie jak można napisać instrukcję warunkową, żeby wybrać encję to proszę o korektę moich wypocin.

Sprecyzuj czemu to ma służyć?

Nie bardzo rozumiem co Ty chcesz zrobić, ale przypuszczam, że chcesz wyświetlić różną ikonę w zależności od stanu?
Jeżeli tak to w ten sposób:

      - type: conditional
        conditions:
          - entity: switch.zima
            state: 'on'
        card:
          type: button
          tap_action:
            action: toggle
          entity: switch.zima
          name: Zima
          icon: mdi:snowflake
      - type: conditional
        conditions:
          - entity: switch.zima
            state: 'off'
        card:
          type: button
          tap_action:
            action: toggle
          entity: switch.zima
          name: Lato
          icon: mdi:sun-snowflake

Problem mam taki:

jest sterownik Beckhoff, który obsługuje logikę. Mam przyciski dzwonkowe, którymi załączam i wyłączam światła. W HA stworzyłem interaktywny rzut piętra i chciałem wrzucić switche, które będą pokazywały stan oświetlenia i przy okazji pozwalały na sterowanie. Jednak gdy uruchamiam wizualizację i sterownik to albo mam efekt stroboskopu, albo w HA nie zmienia się stan switcha gdy użyję do włączenia światła klawisz dzwonkowy. Komunikację między HA a sterownikiem mam przez node red. A komunikacja sterownik Node RED jest po ADS.

PS. Chwytam się już każdego pomysłu, bo myślałem że może rozbiję włączanie i wyłączanie na dwie osobne encje i będę je podmieniał w zależności od stanu światła.

Możesz powiedzieć coś więcej?

W takim przypadku możesz użyć Mqtt do przekazania danych do HA.
W HA tworzysz encję switch mqtt, komendy do wysłania wystawiasz na jednym temacie a stan odczytujesz na innym. Encję jest “no optimistic”.

    - unique_id: sprinkler_2
      name: "Strefa 2"
      state_topic: "/Sprinkler_1/zone2/State"
      command_topic: "/Sprinkler_1/cmd/gpio/5"
      payload_on: "1"
      payload_off: "0"
      state_on: "1"
      state_off: "0"
      availability_topic: "/Sprinkler_1/status"
      payload_available: "Online"
      payload_not_available: "Offline"
      icon: mdi:sprinkler-variant
      optimistic: false
      qos: 0
      retain: true   

Od strony PLC za pomocą funkcji ADS w node-red ustawiasz/odczytujesz stan wejść na podstawie tematów mqtt.
Najprostsze rozwiązanie, które odwzorowuje stan przełączników bez względu z źródło sterowania.
Musisz tylko uruchomić mqtt . Mqtt pozwala na unifikację platformy wymiany danych pomiędzy urządzeniami pracującymi z różnymi protokołami. Node-red otwiera nieskończone możliwości.
Ten sposób pozwala na podstawowe odwzorowanie stanu za pomocą zmiany koloru i pozycji przełącznika.

Jeśli chcesz dodatkowo zmieniać ikony stanu to musisz na podstawie stanu encji podstawowej stworzyć template.
np.

  - platform: template
    sensors:
       garage_status_sensor:
        friendly_name: Brama Garażowa
        icon_template: >
          {% if is_state('sensor.garage_status_sensor','0') %} mdi:garage-open-variant
          {% elif is_state('sensor.garage_status_sensor','1') %} mdi:garage-variant-lock
          {% elif is_state('sensor.garage_status_sensor','-1') %} mdi:garage-alert-variant
          {% else %} 
          mdi:garage-alert-variant
          {% endif %}
        value_template: >-
          {{ states('sensor.stan_bramy') }}    

Nie używam (jeszcze) NR ale może skorzystać, w tym przypadku, z pomocnika w HA. W końcu chyba do tego zostały stworzone w HA aby pomóc odwzorować działanie logiki.

No dobrze, próbowałem i dalej mam jakby tej samej natury problem.

Mam przycisk dzwonkowy w pomieszczeniu na nim 3 kombinacje tzn. na PLC wykrywam pojedyncze kliknięcie podwójne i przytrzymanie. Do tego przypisuje różne akcje.

Mam interaktywny rzut pomieszczenia na nim ustawione switche. Chciałbym zrobić tak:

1.Klikam pojedynczo w fizyczny przycisk na ścianie załącza się lampa - w tym samym czasie na interaktywny rzucie switch zmienia swój stan na załączony.
2. Klikając w switch w HA wyłączam światło.
3. Zmieniam kolejność w HA załączam a na fizycznym wyłączam.
4. etc.

Problem polega na tym, że na samym plc wszystko hula dopóki nie zaczynam tego integrować na HA.

robi mi się efekt stroboskopu przez to, że chcę żeby switch na interaktywnym rzucie pomieszczenia zmieniał stan po kliknięciu na rzeczywistym klawiszu. Tutaj jest cały pies pogrzebany, jak zmienić stan switcha a jednocześnie żeby nie było efektu stroboskopu , bo stany się mi przełączają.

Dokładnie co masz na myśli pod słowem integruje? Z pkt1-4 wynika, ze już jest zintegrowane.

Niewiele z Twojego opisu wynika… powróżę - używasz switch.toggle do przełączania i automatyzacja reaguje tylko na zmiany stanów przełącznika i bez “zastanowienia” przełącza na stan przeciwny.

Musisz jawnie wywoływywać usługi, coś na wzór (poglądowo):

switch:
  platform: template
  switches:
    swiatło_encja:
      value_template: >
        {{ is_state('........', 'on') }}
      turn_on:
        - service: switch.turn_on
      turn_off:
        - service: switch.turn_off

lub w automatyzacji, bo nie wiadomo co tam wymyśliłeś

automation:
  - alias: 'Switch On'
    trigger:
      platform: state
      entity_id: switch.swiatlo
        to: 'on'
    action:
      service: switch.turn_on

  - alias: 'Switch Off'
    trigger:
      platform: state
      entity_id: switch.swiatlo
        to: 'off'
    action:
      service: switch.turn_off

To oczywiście wymaga napisania tego poprawnie… :wink:

Przy takiej konstrukcji jeśli zmienisz stan za pomocą przełącznika w ścianie, HA ponownie wyśle takie samo polecenie - czyli jeszcze poprawi, a stanu nie zmieni.