Dodanie Timera do przekaźnika

Witam serdecznie.
Kiedyś na “szrociarni” znalazłem za 5 zł Smart gniazdko TCP przywleczone z Anglii (angielska wtyczka) . Udało mi się go dodać poprzez Tuya i Tuya Local. Oprócz włącznika ma także w encjach Timer, Można ustawić np za ile minut ma się wyłączyć/włączyć.

gniazdko

Czy da radę dorobić taki Timer do dowolnego Przełącznika ??
W tym wypadku chciałbym dorobić do pompy CO aby włączać ją np na 5, 10 min i sama się wyłączała.
Pompa jest załączana poprzez wemos D1 z ESPHome na pokładzie.

Dzięki i pozdrawiam

Tu masz przykład dla ESPHome, nie jest taki wypasiony z możliwością ustawiania czasu

a tu taki bardziej wypasiony (nie wiem czy wykorzystuje wszystkie funkcje obecnie dostępne w ESPHome, bo wydaje mi się że sporo “ułatwiaczy” doszło stosunkowo niedawno, więc to rozwiązanie ich raczej nie zawiera)

PS Oprócz tego oczywiście timery można zbudować na bazie HA, ale rozwiązanie z uruchamianiem automatyzacji bezpośrednio w urządzeniu wykonawczym jest pod pewnymi względami lepsze.

Cześć3. .
Jak zwykle odkopię stary temat.
Ponieważ integracja ESP z HA bardzo mi się podoba próbuję częściej używane urządzenia Tuya przerobione na OpenBeken przerobić na ESPHome.
Mój mini smart switch powstał po lekturze powyższych linków oraz:

Działa pawie tak jak powinien czyli:

  1. Przekaźnik w stanie OFF: krótki klik włącza timer długi klik włącza na stałe.
  2. Przekaźnik w stanie ON: krótki klik wyłącza, długi klik nie zmienia stanu

Jest tylko jedno małe ale: czy może wyświetlać i wysyłać do HA stan timera?

esphome:
  name: switch-1
  friendly_name: Switch 1
bk72xx:
  board: generic-bk7231n-qfn32-tuya
# Enable logging
logger:
# Enable Home Assistant API
api:
  encryption:
    key: "**************************"
ota:
  - platform: esphome
    password: "**************"
wifi:
  networks:
    - ssid: ************
      password: !secret wifi_password_1

  manual_ip:
    static_ip: 192.168.1.50
    gateway: 192.168.1.1
    subnet: 255.255.255.0
    dns1: 192.168.1.1
    dns2: 91.234.8.8
  ap:
    ssid: !secret wifi_ap_ssid
    password: !secret wifi_ap_password
captive_portal:
preferences:
  flash_write_interval: 12h  
web_server:
  port: 80
  version: 3
  auth:
    username: !secret web_username
    password: !secret web_password
time:
  - id: time_provider
    platform: homeassistant
    on_time_sync:
      - logger.log: "Synchronized system clock"    
text_sensor:
  - platform: wifi_info
    ip_address:
      name: ESP IP Address
    ssid:
      name: ESP Connected SSID
    mac_address:
      name: ESP Mac Wifi Address
    scan_results:
      name: ESP Latest Scan Results
binary_sensor:
  - platform: gpio
    id: ext_onoff
    pin:
      number: P14
      inverted: true
      mode: INPUT_PULLUP
    on_click:
      - min_length: 50ms
        max_length: 500ms
        then:
          - if:
              condition:
                lambda: 'return id(rel_1).state;'
              then:
                - switch.turn_off: rel_1
                - script.stop: timer
              else:
                - script.execute: timer
      - min_length: 1000ms
        max_length: 5000ms
        then:
          - script.stop: timer
          - switch.turn_on: rel_1 

  - platform: gpio
    id: int_onoff
    pin:
      number: P24
      inverted: true
      mode: INPUT_PULLUP
    on_click:
      - min_length: 50ms
        max_length: 500ms
        then:
          - if:
              condition:
                lambda: 'return id(rel_1).state;'
              then:
                - switch.turn_off: rel_1
                - script.stop: timer
              else:
                - script.execute: timer
      - min_length: 1000ms
        max_length: 5000ms
        then:
          - script.stop: timer        
          - switch.turn_on: rel_1     

switch:
  - platform: gpio
    id: rel_1
    name: Relay 1
    pin: P15

status_led:
  pin:
    number: P6
    inverted: true

script:
  - id: timer
    then:
      - switch.turn_on: rel_1
      - delay: !lambda return id(run_time).state*60000;
      - switch.turn_off: rel_1

number:
  - platform: template
    id: run_time
    name: "Nast. czasu"
    icon: mdi:av-timer
    unit_of_measurement: "min."
    optimistic: true
    step: 1
    mode: box
    min_value: 1
    max_value: 60
    initial_value: 1
    on_value:
      - sensor.template.publish:
          id: runtime
          state: !lambda 'return x;'
sensor:
  - platform: template
    id:  runtime
    name: "Timer"

Teraz tylko brakuje mi do szczęścia aby:

  1. Timer pokazywał czas pozostały do wyłączenia przekaźnika w minutach i ewentualnie sekundach
  2. Dioda LED miała drugą funkcję oprócz statusu czyli świeciła jak zadziała przekaźnik
  3. Ustawiona wartość timera zapisywała się i przywracała po restarcie. EDIT: ok to już ogarnąłem