Re: Zásuvka s ovládáním přes WIFI

Marek Sembol hwm.land na gmail.com
Čtvrtek Březen 18 07:27:36 CET 2021


(konfigurak dam nakonec. Je to z dvouploskoveho touch na zigbee. Jedno tl.
ovlada lampicku ve smart zasuvce na opacnem konci mistnosti, druhe lustr -
tady je podpora click (zapni/vypni) dlouheho click (zapni plny jas),
dvojclik (cyklovani jasu po 25%) a trojclick (teplota v 3 krocich). V
autonomnim pouze zapni/vypni a prechod autonomni/HA. Co se deje v HA rezimu
definuje HA na zaklade toho co dostane (clicke, .....)
Ohladne stability HA: jel jsem vzdy na hassio, stability vzdy 100%, puvodne
RPi3b na USB flash. Jak postupne zacala flash odchazet, tak se cely system
silene zacal spomalovat (reboot dlouhe minuty, instalace udelala system na
chvili neovladatelny). Tak jsem presel na asi 120G SSD disk a u
te prilezitosti na RPi4B 4GB RAM (zkousim si tam ruzne blbosti v dockeru,
tak se trocha vykonu a pameti navic hodi). Pokud mate jeste nejake dotazy -
sem s nima.
BR,
Marek

#
# Living room wall switch (2 buttons)
# Right button: no action
# Left button: main light
#   - very long click (5s+): toggle normal/emergency mode. Button works
like normal switch in emergency mode and without hassio
#   - short click, long click, double click, triple click - call HASSIO,
processing there
# Light is pulsing in emergency mode. It shows hassio connection status in
normal mode
#
globals:
  - id: xlastStatus
    # Last status reported to statusLight
    # -1 => unknown
    #  0 => disconnected
    #  1 => conneced
    type: int
    restore_value: no
    initial_value: '-1'

esphome:
  name: s_lr_001_2g
  platform: ESP8266
  board: esp01_1m
  on_boot:
    - priority: 300 # start in emergency mode
      then:
        - binary_sensor.template.publish:
            id: emergencyBin
            state: ON
  on_loop:
    then:
      # Status led handling
      - lambda: |-
          static int lastStatus = -1;
          if(id(emergencyBin).state){
            lastStatus = -1;
          }else{
            int newStatus = id(apiStatus).state ? 1 : 0;
            if(newStatus != lastStatus){
              // always turn off first (otherwise it remembers effect)
              auto call = id(statusLight).turn_off();
              call.set_transition_length(0);
              call.perform();
              lastStatus = newStatus;
              if(lastStatus){
                //ESP_LOGD("MS","===>ON");
                auto call = id(statusLight).turn_on();
                call.set_brightness(1.0);
                call.set_transition_length(0);
                call.perform();
              }else{
                //ESP_LOGD("MS","===>OFF");
              }
            }
          }

wifi:
  ssid: "semar-HA"
  password: "**to si necham pro sebe**"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "s_lr_001_2g"
    password: "**to si necham pro sebe**"
#  use_address: esphome_ota.local

captive_portal:

# Enable logging
logger:
#  level: VERBOSE

# Enable Home Assistant API
api:
ota:

# GPIO4 => Relay 2
# GPIO5 =>?
# GPIO12 => Button 1
# GPIO13 => Relay 1
# GPIO14 => Button 2
# GPIO16 => Led link

binary_sensor:
  - platform: gpio # Button 1 (right)
#    internal: true
    pin:
      number: GPIO14
      mode: INPUT_PULLUP
      inverted: True
    name: device_btn1
    on_multi_click:
    - timing: # click
        - ON for 50ms to 650ms
        - OFF for at least 350ms
      then:
        - logger.log: { tag: '@MS', format: "Button 1 click" }
        - homeassistant.service:
            service: light.toggle
            data:
              entity_id: light.living_room_socket
    - timing: # very long click - emergency
        - ON for at least 3s
        - OFF for at least 350ms
      then:
        - logger.log: Request device_btn1 emergency change
        - lambda: '
id(emergencyBin).publish_state(!id(emergencyBin).state); '

  - platform: gpio # Button 2 (left)
#    internal: true
    pin:
      number: GPIO12
      mode: INPUT_PULLUP
      inverted: True
    name: device_btn2
    on_multi_click:
    - timing: # click
        - ON for 50ms to 650ms
        - OFF for at least 350ms
      then:
        - logger.log: { tag: '@MS', format: "Button 2 click" }
        - if:
            condition:
              binary_sensor.is_on: emergencyBin
            then: # emergency mode => direct relay usage
              - switch.toggle: device_rel2
            else: # normal mode
              - if:
                  condition:
                    switch.is_off: device_rel2
                  then: # normal, but relay was of we can anyway only
switch it on, no communication possible for some time
                    - switch.turn_on: device_rel2
#                    - switch.turn_on: device_rel1 # I just want both
lights on on switch. 2nd button will anyway only be 'remote'
                  else:
                    - homeassistant.event:
                        event: esphome.s_lr_001_action
                        data:
                          title: Button was clicked
                          source: Button 2
                          action: click
    - timing: # long click
        - ON for 750ms to 2500ms
        - OFF for at least 350ms
      then:
        - logger.log: { tag: '@MS', format: "Button 2 clickLong" }
        - if:
            condition:
              binary_sensor.is_on: emergencyBin
            then: # emergency mode => direct relay usage
              - switch.toggle: device_rel2
            else: # normal mode
              - if:
                  condition:
                    switch.is_off: device_rel2
                  then: # normal, but relay was of we can anyway only
switch it on, no communication possible for some time
                    - switch.turn_on: device_rel2
                  else:
                    - homeassistant.event:
                        event: esphome.s_lr_001_action
                        data:
                          title: Button was clicked (long)
                          source: Button 2
                          action: clickLong

    - timing: # very long click - emergency
        - ON for at least 3s
        - OFF for at least 350ms
      then:
        - logger.log: Request device_btn2 emergency change
        - lambda: '
id(emergencyBin).publish_state(!id(emergencyBin).state); '
    - timing: # double click
        - ON for 50ms to 650ms
        - OFF for 30ms to 300ms
        - ON for 50ms to 650ms
        - OFF for at least 350ms
      then:
        - logger.log: { tag: '@MS', format: "Button 2 clickDouble" }
        - if:
            condition:
              binary_sensor.is_off: emergencyBin
            then:
              - homeassistant.event:
                  event: esphome.s_lr_001_action
                  data:
                    title: Button was clicked double
                    source: Button 2
                    action: clickDouble
    - timing: # triple click
        - ON for 50ms to 650ms
        - OFF for 30ms to 300ms
        - ON for 50ms to 650ms
        - OFF for 30ms to 300ms
        - ON for 50ms to 650ms
        - OFF for at least 350ms
      then:
        - logger.log: { tag: '@MS', format: "Button 2 clickDouble" }
        - if:
            condition:
              binary_sensor.is_off: emergencyBin
            then:
              - homeassistant.event:
                  event: esphome.s_lr_001_action
                  data:
                    title: Button was clicked triple
                    source: Button 2
                    action: clickTriple

  - platform: status # status
    internal: true
    id: apiStatus
  - platform: template # emergencyBin
    internal: true
    id: emergencyBin
    on_press:
      then:
        - logger.log: Emergency mode ON
        - light.turn_on:
            id: statusLight
            effect: emergency mode

switch:
  - platform: gpio # Relay 1
#    internal: true
    id: device_rel1
    name: s_lr_001_2g Relay 1
    pin: GPIO13
  - platform: gpio # Relay 2
#    internal: true
    id: device_rel2
    name: s_lr_001_2g Relay 2
    pin: GPIO4
  # helper
  - platform: restart
    name: s_lr_001_2g restart

output:
  # Register the blue LED as a dimmable output ....
  - platform: esp8266_pwm
    id: blue_led
    pin: GPIO16
    inverted: true

light:
  # ... and then make a light out of it.
  - platform: monochromatic
    id: statusLight
    internal: true
    output: blue_led
    name: device_led
    effects:
      - lambda: # emergency mode
          name: emergency mode
          update_interval: 2s
          lambda: |-
            static bool state = false;
            auto call = id(statusLight).turn_on();
            // Transtion
            call.set_transition_length(2000);
            call.set_brightness(state ? 0.1 : 1.0);
            call.perform();
            state = !state;

sensor:
  - platform: wifi_signal
    name: "s_lr_001_2g_wifi"
    update_interval: 60s



On Wed, Mar 17, 2021 at 10:51 PM Pavel Kratochvíl <kratochvil na seznam.cz>
wrote:

> Ten trik s rozdílnou funkcionalitou podle dostupnosti HA je fakt dobrý.
> Mohl bych poprosit o nějaký konfigurák, kde je to použité?
> Zkušenosti se zdecháváním HA máte jaké? Dřív jsem měl HA nainstalovaný
> v Raspbianu a to zrovna stabilitou nevynikalo. Teď co to mám jako HassOS si
> nepamatuju, že by byly nějaké problémy. Já teda jedu na RPi3B+, možná to
> bylo tím, nebo nějakou zpackanou instalací. Sd kartu nepoužívám, mám SSD
> připojené na USB.
> Pavel
>
> ---------- Původní e-mail ----------
> Od: Marek Sembol <hwm.land na gmail.com>
> Komu: HW-news <hw-list na list.hw.cz>
> Datum: 17. 3. 2021 18:01:10
> Předmět: Re: Zásuvka s ovládáním přes WIFI
>
> Dalsi vyrazny rozdil tasmota/esphome je, ze tasmota je 'napervno dany
> firmware' (ano, jsou zdrojaky, muzete ohybat), ktery nakonfigurujete v
> ramci jeho moznosti. Jsou tam (TUSIM i nejake moznosti automatizace, ale
> rozhodne omezene).
> Naproti tomu pro esphome napisete 'konfigurak', na zaklade toho se
> vygeneruje myslim c(++? tusim) zdrojak a ten se prelozi na firmware. Takze
> mate mnohem vetsi nabidku obsluhovanych veci (do tasmoty by se nevlezdy z
> duvodu velikosti) a mnohem sirsi mozsnosti 'programovat' si tam
> nejakou autonomii. At uz prostredky toho yaml konfiguraku, nebo v pripade
> nutnosti az na uroven C kodu.
> Ja jsem taky zacinal s tasmotou (taky mam homeasistant, ja na RPi4), ale
> postupne jsem presel na esphome. Prave proto, ze jsem pak treba do vypinace
> velmi jednoduse naimplementil:
> -pokud neni HA dostupny, jedes v autonomnim rezimu a umis pouze
> zapnout/vypnout rele ovladajici zarovku
> -pokud je HA dostupny, tak je (wifi pripadne zigbee - jak kde) pod
> proudem, vypinac (taky wifi nebo zigbee) posila prikazy do HA a ten zarovku
> ridi komplexneji (teplota svetla, intenzita svetla, zavislosti na dalsich
> okolnostech. Samozrejme - vzhledem k HA - nemusi byt vypinac na stejnem
> systemu (wifi/zigbee) jako zarovka.
>
> Proste neni-li HA, jedu v zjednosenem autonomnim rezimu (protoze jak znam
> zivot, tak HA zdechne jakmile odjedu z domu), pokud HA zije, tak mohu
> vymyslet fajnovosti
> BR,
> Marek
>
> On Wed, Mar 17, 2021 at 12:44 PM Pavel Kratochvíl <kratochvil na seznam.cz>
> wrote:
>
> S Tasmota nemám žádnou zkušenost. Začal jsem s ESPHome kvůli přímé
> integraci do HA - jen se přidá ESPHome addon, není potřeba MQTT
> prostředníka a ESPHome položka je přímo v menu HA.
> Přehled ESPHome zařízení je pak v té položce, zařízení se dají přidávat,
> odebírat, konfigurovat, vygenerovat firmware + nahrání přes OTA atd. Jen
> první nahrání firmware je potřeba udělat přes utilitu výrobce (pokud to
> umožňuje), nebo přes UART.
> Ale Tasmota se taky vyvíjí, možná má dneska jiné možnosti.
>
> Pavel
>
> ---------- Původní e-mail ----------
> Od: Martin Hanek <martin na hanek.net>
> Komu: hw-list na list.hw.cz
> Datum: 17. 3. 2021 11:33:24
> Předmět: Re: Zásuvka s ovládáním přes WIFI
>
> Díky za jednoduchý a jasný popis. Zkoušel jste i firmware Tasmota? Nebo
> ESPHome vyžaduje také fw od ESPHome?
>
> Martin Hanek
>
> Dne 17.03.2021 v 11:20 Pavel Kratochvíl napsal(a):
>
> Zdravím,
> jak na tom jsou zařízení připojené kamsi do cloudu nevím. Já používám Home
> Assistant (HA) a všechna zařízení jsou připojená k němu, žádný cloud.
> "WiFi" zařízení mám různé zásuvky, spínače Sonoff, snímače, žárovky atd.
> (prostě všechno co je založené na ESP8266/ESP32) s firmware ESPHome. Tato
> zařízení, pokud to chcete, umí fungovat i autonomně - všechno co je
> součástí konfigurace ESPHome funguje i kdyby byl HA mimo provoz.
> Takže třeba větrák v koupelně zapojený přes Sonoff TH se dá
> zapnout/vypnout tlačítkem, vypne se sám po nějaké době po zapnutí
> tlačítkem, zapne/vypne se sám podle teploty/vlhkosti a nepotřebuje k tomu
> HA, protože veškerou automatizaci nastavuji v konfiguraci ESPHome toho
> zařízení. Ale stav všech čidel a větráku v HA vidím a mohl bych větrák
> ovládat i z HA ručně, nebo na základě stavů něčeho.
> Ale pokud chcete, můžete stejné zařízení udělat i zcela závislé na HA. V
> ESPHome nakonfigurujete jen vstupy a výstupy a automatizaci uděláte v HA.
> Pavel
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.hw.cz>
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz <http://www.hw.cz>
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210318/0ba1ab74/attachment.html>


Další informace o konferenci Hw-list