Duty Time w ESPHome

Czujnik Duty Time w ESPHome pozwala śledzić całkowity czas pracy jakiegoś urządzenia (np. żarówki) w sekundach, potrafi również obliczyć ostatni czas włączenia, gdy opcjonalny czujnik last_time jest uwzględniony w konfiguracji.
Przykład na podstawie Shelly2.5:

output:
  - platform: gpio
    pin: GPIO4
    id: shelly_output_1
  - platform: gpio
    pin: GPIO15
    id: shelly_output_2

light:
  - platform: binary
    name: "shelly25 light"
    output: shelly_output_1
    id: shelly_relay_1

switch:
  - platform: output
    name: "shelly25 relay"
    output: shelly_output_2
    id: shelly_relay_2
	
sensor:
  - platform: duty_time
    id: relay_1_work_time
    name: "shelly25 light work time"
    lambda: |-
      if (id(shelly_relay_1).current_values.is_on()) {
        return 1;
      }
      else {
        return 0;
      }
    # Sensor for last turn-on time (optional)
    last_time:
      name: "shelly25 light last turn-on"
    update_interval: 10s

  - platform: duty_time
    id: relay_2_work_time
    name: "shelly25 relay 2 work time"
    lambda: 'return id(shelly_relay_2).state == 1;'
    # Sensor for last turn-on time (optional)
    last_time:
      name: "shelly25 relay last turn-on"
    update_interval: 10s

Efekt końcowy:

Shelly2.5 wykorzystuję do sterowania światłem nad lustrem i podgrzewaniem lustra (mata grzewcza), do wejść modułu podłączony jest podwójny przycisk zwierny (dzwonkowy). Pojawiło się ryzyko, że domownicy zapomną wyłączyć podgrzewania lustra (brak stanu włączenia na przycisku) a to może mieć przykre skutki (np. wysoki rachunek za prąd). Czujnik duty_time wykorzystałem do ograniczenia maksymalnego czasu pracy podgrzewania lustra, po przekroczeniu zadanego czasu następuje automatyczne wyłączenie przekaźnika (shelly_relay_2), kod po modyfikacji:

sensor:
  - platform: duty_time
    id: relay_2_work_time
    name: ${devicename} relay work time
    lambda: 'return id(shelly_relay_2).state == 1;'
    # Sensor for last turn-on time (optional)
    last_time:
      name: ${devicename} relay 2 last turn-on
    update_interval: 10
    on_value_range:
      - above: 300  # maksymalny zadany czas pracy [s]
        then:
          - switch.turn_off: shelly_relay_2 

switch:
  - platform: output
    name: "${devicename} relay 2"
    output: shelly_output_2
    id: shelly_relay_2
    on_turn_on:
      then:
        - sensor.duty_time.reset: relay_2_work_time  

efekt końcowy: automatycznie po zadanym czasie 300s (+ czas oświeżania sensora - update_interval) przekaźnik wyłącza się, czas pracy (work time) i czas ostatniego włączenia (last turn-on) są takie same:

Tak gdzie jest to możliwe automatyzacje piszę na sterownikach, w ESPHome a nie w HA dzięki czemu ograniczam ryzyko nieprawidłowego działania.

cdn …

2 polubienia