ESPHome tworzenie kompilacji

Witam.
Po pewnych przygodach z tasmota chciałbym spróbować z ESPHome.

Szukam instrukcji jak nagrać ESPHome na Wemos D1 mini i z tego co znalazłem to można to wykonać przez HA zakładkę ESPHome.
Dodałem pierwsze urządzenie napisałem jakiś podstawowy skrypt i jest on w formaci .yaml.
Z tego co znalazłem to kiedyś była opcja “compile”, a w aktualnej wersji jej nie widzę.
W jaki sposób mogę przekonwertować z pliku ymal do bin?
Niby można przez wbudowaną do ESPHome w HA bezpośrednio wysłać do wemosa, ale strasznie długo to trwa i nie zawsze się udaje.

Teraz to się nazywa install (de facto jednym z wielu etapów jest istotnie kompilacja) i jest w “hamburger menu” danego aktualnie produkowanego firmware dla urządzenia

można też z edytora

To znalazłem, ale za pomocą tej opcji można wgrać bezpośrednio na wemosa, a ja bym chciał stworzyć blik .bin

Ta opcja właśnie zawsze (o ile nie wystąpią przeszkody w postaci skopanego kodu) tworzy plik .bin, a jeśli nie chcesz go flashować z poziomu ESPHome
ESPHome_install_bin_only_2022-03-07_20-45
(przy użyciu pozostałych opcji też powstaje plik .bin, który trzeba sobie wygrzebać z katalogu roboczego ESPHome)

Dziękuję za pomoc. Wcześniej próbowałem tą opcję ale wywalało jakiś błąd.
Usunąłem dodatek ESPHome i zainstalowałem ponownie i już normalnie pobiera plik .bin

Teraz tylko stworzyć jakiś działający skrypt, bo jak narazie mam cały czas offline.

Jak dodawałem integrację to nie muszę niczego ustawiać w cofiguration.yaml z HA?

Nie wiem czy rozumiesz jak to działa, to nie jest skrypt - on nie jest wykonywany - wgrałeś skompilowany .bin do urządzenia?

Ten YAML jest tylko bazą dla generatora prawdziwego kodu źródłowego - on powstaje w c++ i jest kompilowany na potrzeby sprzętu (dlatego ważna jest deklaracja modelu płyty, bo kod jest generowany w sposób specyficzny dla konkretnych modeli SoC) i dopiero na ostatnim etapie jest linkowany i przygotowywany jest wynikowy .bin, więc każda zmiana w YAML wymaga rekompilacji i flashowania (po to jest opcja bezpośredniego flashowania OTA lub przez mostek USB->UART).

To o czym wyżej pisaliśmy nie jest integracją - to jest addon zawierający IDE ESPHome, który służy do “produkowania” fizycznych urządzeń ESPHome (a właściwie firmware dla nich).

Natomiast z punktu widzenia jego użytkownika nie musisz wiedzieć, co dokładnie jest wewnątrz tego pliku .bin (a raczej nie musisz się tym zajmować, bo wiedzieć chyba warto, że z grubsza biorąc jest tam zarówno system operacyjny, program użytkowy jak i partycja na dane oraz partycja do aktualizacji OTA).


Integracja ESPHome działa w pełni “plug and play” tj. gdy pojawi się w LAN, w którym pracuje HA, jakieś urządzenie z firmware (stworzonym na bazie w miarę standardowej konfiguracji, bo oczywiście praktycznie każdą z istotnych funkcji można wyłączyć w tym autowykrywanie czy obsługę API, po prostu nie dodając niezbędnych wpisów w tym “skeczu” w YAML), to HA sam to urządzenie wykryje.

Rozumiem, że po każdej zmianie kodu musze wgrywać cały plik yaml. a właściwie .bin

Na wemosie nie zmieniał mi sie status na online, więc spróbowałem na nodemcu i tu za pierwszym załadowaniem płytka ruszyła.

Teraz tylko stworzyć switch i button.

Dokładnie tak - po dokonaniu wszystkich zmian w YAML musisz wgrać nowe świeżo skompilowane firmware czyli .bin, po pierwszym poprawnym uruchomieniu najwygodniej robić to przez OTA (opcja Wirelessly), aby to działało, w kodzie musi być opcja ota: (ona jest domyślnie włączona po wygenerowaniu pliku bazowego, ponadto jest automatycznie generowane losowe hasło, dużo wygodniej mieć wszystkie hasła w pliku secrets.yaml, kreator ogarnia to tylko częściowo i istotnie nie działa za dobrze, bo na próbę skorzystałem z niego pierwszy raz - kiedyś nie było tego kreatora wcale, ale wciąż można go pominąć).

No chyba że stworzysz firmware które ucegli układ - wtedy pozostaje flashowanie poprawionej wersji po kabelku.

Nie bardzo rozumiem - użyłeś innego sprzętu, czy po prostu zmieniłeś definicję płytki na inną mając nadal ten sam sprzęt?
(definicja musi być zgodna z użytym sprzętem, jeśli nie ma odpowiedniego “gotowca” to należy użyć jakiegoś najbliższego presetu “generic” lub nawet innej płytki - ale taki preset MUSI się zgadzać z budową sprzętu, bo na jego podstawie jest np. budowany układ partycji, w przypadku nieużywania dedykowanego presetu trzeba używać “pinologii” zgodnej z wyprowadzeniami SoC, a zazwyczaj nie można korzystać z podstawień zgodnych z opisami na PCB - po prostu mogą się nie zgadzać, jeśli modyfikujemy jakies gotowe urządzenia, to nie ma innego wyjścia, presety zasadniczo istnieją tylko dla płytek developerskich + te uniwersalne “generic”).

Użyłem innej płytki i od razu ją znalazło.

Chyba wczoraj było już za późno, bo jak dzisiaj wgrałem jeszcze raz na wemosa to płytka ruszyła.

Jeszcze przy okazji zapytam.

Do konfiguracji przekaźnika używam:

switch:
  - platform: gpio
    pin: 12
    name: "Test ESPHome wemos"

a jeżeli chciałbym sterować tym przekaźnikiem za pomocą zwarcia np pinu 14 z masa to trzeba tak zrobić?

binary_sensor:
  - platform: gpio
    pin:
      number: 14
      mode:
        input: true
        pullup: true
    name: "Test ESPHome - przycisk"

Następnie w node-red zrobić automatyzację?

Wcześniej miałem ustawione w node-red automatyzację, gdzie za pomocą jednego przycisku dzwonkowego włączałem dwie różne akcje.

Wytaczasz armaty na muchę?

Przeanalizuj sobie taki przykład pomijając jego cechy specyficzne - tam też jest przekaźnik i przycisk
(na bazie ESPHome można wyprodukować nawet całkowicie autonomiczne urządzenia)

Widzę, że da się to zrobić button za pomocą kodu, ale nie ogarnę tego , że za pomocą kodu zrobić krótkie przyciśnięcie włącza swich1, a długie switch2.
Pewnie jest to do zrobienia, ale obawiam się, że moja wiedza jest zbyt słaba.

To tymczasowo (lub na zawsze?) użyj 2 przycisków, niestety nie da się wykorzystać możliwości tego projektu nie czytając w pełni jego dokumentacji, masz rację nie będzie to proste, ale jest wykonalne

pamiętaj, że gdy wyrzucisz całą automatykę na zewnątrz urządzenia, to będzie ono zależne od poprawnego działania czegoś innego (w tym wypadku np. NR, sieci WiFi, sieci generalnie, pewnie jeszcze HA?).

Tak malutka płytka jak Wemos D1 ma dostępnych 8 GPIO (nie pamiętam czy każde w pełni uniwersalne, ale 6 uniwersalnych to minimum jak mi się zdaje) + wejście analog + serial (który w ograniczonym stopniu można zmienić w GPIO)

W sumie to warto poczytać dokumentację ESP8266, bo bez tego trudno rozsądnie wykorzystać dostępny sprzęt, na początek może taki “bryk” wystarczy

Tak mam home assistant.
Na tą chwilę udało mi się ustawić sterowanie za pomocą

on_double_click:
  - switch.toggle: switch2

Widzę, że jeszcze jest on_multi_click gdzie się ustawia czasy, ale to chyba bardziej skomplikowane

Dostępność pinów i problemy z nimi związane już przerabiałem.


Już ogarnąłem takim kodem:

switch:
  - platform: gpio
    pin: 12
    name: "Test ESPHome wemos"
    id: switch1
  - platform: gpio
    pin: 13
    name: "Test ESPHome wemos2"
    id: switch2

binary_sensor:
  - platform: gpio
    pin:
      number: 14
      mode:
        input: true
        pullup: true
      inverted: true
    name: "Test ESPHome - przycisk"
    id: button1
    on_multi_click:
    - timing:
        - ON for at most 0.5s
      then:
        - switch.toggle: switch1
    - timing:
        - ON for 1s to 2s
      then:
        - switch.toggle: switch2
1 polubienie

HEHE miałem właśnie pisać, że pewnie zaraz ktoś wpadnie i połączy te 2 posty pod sobą :stuck_out_tongue: i nie zdążyłem napisać, a już to zrobione, więc już wiesz, że na przyszłość zamiast post pod postem wypada edytować ostatniego posta (również gdy dotyczy to postępu w rozwiązaniu problemu, osobiście jestem przeciwnikiem usuwania starych treści, więc można je np. skreślać używając do tego podwójnej tyldy ~~ na zasadach podobnych do pogrubienia gdzie do tego używa się **).

To przy okazji jeszcze taka mała uwaga techniczna ode mnie - przy takich edycjach warto wstawić linię podziału posta - używa się do tego 3 myślników, poprzedzonych pustą linią (oraz potrzeba pustej linii również poniżej linii z myślnikami, bo służą one do 2 różnych zastosowań w markdownie)

---


natomiast jakikolwiek kod, a już np. w szczególności YAML, gdzie każda spacja jest ważna, należy poprzedzić linią z 3 odwrotnymi apostrofami (to domyślny znak dostępny pod “klawiszem tyldy”, poniżej postarałem się to ładnie pokazać w markdown, ale w ten sposób chyba nie da się skopiować do użytku przez copy/paste)
```
najlepiej zajrzyj do posta i zobaczysz jakich uzupełnień w nim dokonałem

a jednak daje się kopiować :P ale myślniki nie `---` - muszą być bez tych apostofów (odwrotnych)

PS te metody działają też np. na githubie