Początkujący w ESPHome kilka pytań

Czesc.
Jestem mocno poczatkujacy w tematach HA. Najbardziej interesuje mnie wlasnie ESPhome.
Zbudowalem sobie rejestrator na dwoch INA219, DS18b20 i do monitorowania akumulatora MAX17043.
Dla MAX17043 znalazlem biblioteke: Integration of MAX17043 SparkFun LiPo Fuel Gauge · Issue #1055 · esphome/feature-requests · GitHub
Pomiary z MAX-a w HA widze w takim formacie:
Napiecie 4123
SoC 73
Chciabym napiecie sformatowac do prawidlowej wartosci z dwoma mmiejscami po przecinku i z jednostka np. 4,12V.
Do SoC chciabym dodac %.
Nie wiem dlaczego w HA dla tych encji nie mam opcji dodawania jednostek jak i formatowania wynikow, podejrzewam ze nalezy to dodac albo w bibliotece albo w programie ESPhome.
Podalby mi ktos przykladowy programik albo wytlumaczyl jak sterowac dowolnym pinem esp ale nie poprzez przycisk z HA ale tak abym mogl go zalaczyc w programie w dowolnym momecie?
Przepraszam za brak polskich znakow ale nie wiem dlaczego nie moge ich wpisywac.

Jednostka jest na początku tego rozdziału dokumentacji, a działania matematyczne na wynikach uzyskasz używając filtrów opisane nieco dalej

jakbyś wrzucił własnego YAMLA jako tekst to byłoby co edytować

1 polubienie

Dziękuję za odpowiedź.
Jednostki wstawiłem bez problemu i zadziałały.
Z filtrowaniem powalczę w domu, na telefonie źle się działa.
Z domu wkleję też YAMLA to może coś więcej uda nam się poprawić.
Chciałbym się też nauczyć panować nad wyjściami abym mógł zapalać trzy diody które mam.

Edit:

Wklejam YAML-a bo nie mogę sobie poradzić z filtrowaniem:



esphome:
  name: rejestrator
  friendly_name: REJESTRATOR

  includes:
    - MAX17043_component.h  

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "mWuP7unfMvjR6ZxWDiTQAp4tLoAdcstg3JZa1ykw/ls="

ota:
  password: "db09d502e5f9d732721605def9178e2c"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Rejestrator Fallback Hotspot"
    password: "YAlQLgtevvIm"

captive_portal:

substitutions:
  device_name: "Wemos D1 mini" #Nazwa Twojego urządzenia wyświetlana w Home Assistant

dallas:
  - pin: 16


light:
  - platform: binary
    name: "Onboard LED"
    output: onboard_led_out    

output:
  - platform: gpio  
    pin: 14
    id: onboard_led_out
    
i2c:
  sda: 4
  scl: 5
  scan: true
  id: bus_a
sensor:

  - platform: ina219
    address: 0x40
    shunt_resistance: 0.1 ohm
    current:
      name: "CH1 Current"
    power:
      name: "CH1 Power"
    bus_voltage:
      name: "CH1 Bus Voltage"
    shunt_voltage:
      name: "CH1 Voltage"
    max_voltage: 32.0V
    max_current: 3.2A
  - platform: ina219
    address: 0x44
    shunt_resistance: 0.1 ohm
    current:
      name: "CH2 Current"
    power:
      name: "CH2 Power"
    bus_voltage:
      name: "CH2 Voltage"
    shunt_voltage:
      name: "CH2 Bus Voltage"
    max_voltage: 32.0V
    max_current: 3.2A  
    update_interval: 10s
  - platform: dallas
    address: 0xb600000bd5812328
    name: "Temperatura"  
  - platform: custom
    lambda: |-
      auto max17043_sensor = new MAX17043Sensor();
      App.register_component(max17043_sensor);
      return {max17043_sensor->voltage_sensor, max17043_sensor->percentage_sensor};
    sensors:
      - name: "Napięcie"
        unit_of_measurement: "V"
      - name: "SoC"
        unit_of_measurement: "%"

Chciałbym wartość “Napięcie” zformatować do postaci: “4.12”.

tylko fragment do zmodyfikowania

    sensors:
      - name: "Napięcie"
        unit_of_measurement: "V"
        accuracy_decimals: 2
        filters:
          - lambda: return x / 100.0;
      - name: "SoC"
        unit_of_measurement: "%"

albo

    sensors:
      - name: "Napięcie"
        unit_of_measurement: "V"
        accuracy_decimals: 2
        filters:
          - multiply: 0.01
      - name: "SoC"
        unit_of_measurement: "%"

skoro masz wemos D1 mini lub klona (one mają 4MB flasha, a nie 1MB jak ESP-01s) to możesz ustawić definicję płytki, przy okazji będziesz mógł stosować aliasy nadrukowane na płytce zamiast numerów GPIO

esp8266:
  board: d1_mini
1 polubienie

Dziękuję działa pięknie. Ja jakoś nie mogę sobie poradzić z formatowaniem kodu i ciągle mi wali błędy “parsing”.
A Pomógłbyś mi jeszcze z ujarzmieniem wyjść?
Mam trzy diody led statusu, chciałbym móc nimi sterować ale jak na razie mogę je tylko włączać przyciskiem z HA.
Marzy mi się włączać jedną po nawiązaniu połączenia wi-fi, drugą mignąć co 60s tak jak pomiary są wykonywane.
Moja płytka to esp-07.

Ło panie to trzeba jakieś automatyzacje porobić, nawet się nie zastanawiałem jak coś takiego zrealizować…

Jest taki gotowiec, który moim zdaniem informuje o raczej istotnych kwestiach

co do WiFi to jest odpowiedni wyzwalacz

Czyli w końcu jaka (pytajnik mi nie działa, zamykający nawias też, jak i parę istotnych liter, więc powinienem wyluzować z forum na jakiś czas bo pisanie na bazie autokorekty jest meczące

Na pomysł z miganiem w trakcie pomiaru nie widzę rozwiązania, chyba musisz zmodyfikować użyty komponent.

1 polubienie

Wemos został bo to zlepek był z jakiegoś przykładu.

Zrobiłem tą diodę statusu i jaja bo miga, to jaki ona mi błąd sygnalizuje?

A bo ja wiem.
A co masz w logach.

Wracając do tematu płytki, esp07 ma definicję esp07 nie zmienia ona nic względem esp01_1m , ale ładnie wygląda

esp8266:
  board: esp07

no chyba że masz esp07s to zmienia bo ten model ma 4MB flasha

miganie na bazie pomiaru - wyzwalacz on_value
https://esphome.io/components/sensor/#on-value

1 polubienie

Tu masz przykład jak wykorzystać led w zależności od połączenia wi-fi

output:
  - platform: gpio
    id: blue_led
    pin: GPIO13
    inverted: false
 


# Blink the blue light if we aren't connected to WiFi. Could use https://esphome.io/components/status_led.html instead but then we couldn't use the red light for other things as well.

interval:
  - interval: 500ms
    then:
      - if:
          condition:
            not:
              wifi.connected:
          then:
            - output.turn_on: blue_led
            - delay: 250ms
            - output.turn_off: blue_led

Mam tak zrobione w smart-gniazdku przeprogramowanym na ESPHOME.

3 polubienia

Próbuję na wszystkie sposoby wpleść w program ten kawałek:

            - output.turn_on: blue_led
            - delay: 250ms
            - output.turn_off: blue_led 

ale jakbym tego nie robił to ciągle mam błąd.
Dioda podłączona do gpio13 reaguje ale nie mogę mieć nad nią żadnej kontroli w programie.
Jeśli dam taki kawałek na początku sketcha:

interval:
  - interval: 500ms
    then:
      - if:
          condition:
            not:
              wifi.connected:
          then:
            - output.turn_on: blue_led
            - delay: 250ms
            - output.turn_off: blue_led     

to dioda pomiga tylko chwilę na starcie i tyle.
Chciałbym żeby łypnęła co to 60s jak jest pomiar.

to dlaczego powiązałeś miganie z niepołączonym WiFi?

przykładowe mignięcie na pomiar, do zweryfikowania czy nie trzeba dać tego “piętro wyżej”

sensor:

  - platform: custom
    lambda: |-
      auto max17043_sensor = new MAX17043Sensor();
      App.register_component(max17043_sensor);
      return {max17043_sensor->voltage_sensor, max17043_sensor->percentage_sensor};
    sensors:
      - name: "Napięcie"
        unit_of_measurement: "V"
        on_value:
          then:
            - output.turn_on: blue_led
            - delay: 250ms
            - output.turn_off: blue_led

Możesz też użyć platformy light

prawdopodobnie używasz tabulatory albo jakieś inne niedopuszczalne białe znaki zamiast spacji to powoduje, że YAML nie będzie działał przewidywalnie (muszą być spacje)
wiem, bo próbowałem się dokleić do twojego kodu i jest rozwalony (może przy wklejaniu na forum zrobiłeś coś błędnie, w każdym razie mają być spacje)

1 polubienie

Oczywiście Twoje rozwiązanie działa perfekcyjnie.
Ja dzisiaj walczę z update_interval.
Pomimo że w dokumentacji ESPhome jasno stoi że takiej komendy z dallasem można używać to u mnie jest błąd:
[update_interval] is an invalid option for [sensor.dallas]. Did you mean [internal]?

Co robię źle?

albo ogólnie inne wątki na temat Dallasów ds18b20 dallas

Jeszcze wrócę do tego migania przy pomiarze - tam jest małe oszustewko, które znajdziesz czytając dokumentację - tak naprawdę LED miga nie kiedy jest pomiar, tylko kiedy są publikowane dane.
Uprzedzam, bo pewnie zaraz zaczniesz filtrować dane, a one są publikowane dopiero po przefiltrowaniu (więc jeśli chcesz rzeczywiste miganie wyzwalane pomiarem musisz zbudować to w znacznie bardziej skomplikowany sposób).

Ciężko zrozumieć ESPhome.
Dla sensora INA219 gdzie indziej jest “update_interval” dla DS-a gdzie indziej…ech.
Zostało mi jeszcze zwiększyć interwał czasowy odczytu MAX-a, też kombinuje i nic mi z tego nie wychodzi…
Miganie diodą może być tak jak jest to nie jest aż takie ważne.

Po prostu czytaj dokumentację, ESPHome w dużej części stanowi zbiór różnych bibliotek pochodzących od różnych autorów napisanych często w różny sposób, a wykorzystanych często bez większych modyfikacji, więc nie zawsze zadbano o unifikację (wszelkie radykalne zmiany są źródłem breaking changes - krytycznych zmian wywołujących konieczność zmian konfiguracji w tysiącach istniejących instalacji, czego użytkownicy raczej nienawidzą…).

Przez kilka pierwszych lat w ogóle ESPHome było tworzone przez jedną osobę… (więc przykładowo na akceptację PR wprowadzającego drobne poprawki czekało się po kilka miesięcy) dopiero od niedawna stałymi sponsorami projektu są użytkownicy chmury NabuCasa (oficjalnej chmury HA).

Filtruj wyniki, albo jeśli chcesz zmienić coś w zewnętrznej bibliotece to w niej to zmień (zrób sobie własnego forka i modyfikuj go do woli).

Osobiście uważam, że wszystko jest dokładnie opisane w dokumentacji a odpowiednie parametry (ich miejsce w konfiguracji) zależą od sposobu podłączenia czujników do ESP, do jakiej magistrali są podłączene czujniki.

Jak dobrze przeczytałem w wątku, to do obsługi “odczytu MAX-a” używasz “nieoficjalnego” kodu ESPHome więc wszelkie żale należy kierować do autora kodu :wink:.

1 polubienie

W Tasmota mam komendę PowerOnState dla określenia zachowania np. przekaźnika po powrocie zasilania w urządzeniu z ESP.
Mam obecnie na warsztacie siłownik do zaworu kulowego z wgranym LibreTiny pod obsługę w ESPHome.
Pytanie - jaki zapis YAML w ESPHome może odpowiadać za zachowanie przekaźnika, po powrocie zasilania?
Czytam coś o restore_mode:ale nie potrafię tego skutecznie zapisać w swojej konfiguracji.
Chcę aby po powrocie zasilania przekaźnik załączał się. Obecnie zawór zawsze startuje z pozycji zamknięty (OFF).

esphome:
  name: zawor
  friendly_name: zawor

bk72xx:
  board: wb3s

# Enable logging
logger:

api:
  password: ""

ota:
  password: ""

web_server:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Zawor Fallback Hotspot"
    password: "Ty1IEzcUgemi"

captive_portal:

time:
  - platform: homeassistant
    id: homeassistant_time

text_sensor:
  - platform: libretiny
    version:
      name: LibreTiny Version
  - platform: wifi_info
    ip_address:
      name: IP Address

status_led:
   pin:
     number: P1
#     inverted: true


binary_sensor:
  - platform: gpio
    id: binary_switch_1
    pin:
      number: P24
      inverted: true
      mode: INPUT_PULLUP
    on_press:
      then:
        - switch.toggle: switch_1

switch:
  - platform: gpio
    id: switch_1
    name: Relay 1
    pin: P6
    icon: mdi:pipe-valve

sensor:
  - platform: wifi_signal
    name: sygnał WiFi 
    update_interval: 60s
  - platform: uptime
    name: "Uptime"

Możesz np. zrobić automatyzację on_boot - ESPHome Core Configuration — ESPHome .

Inny przyklad:

switch: 
  - platform: gpio
    pin: GPIO12
    id: relay
    restore_mode: RESTORE_DEFAULT_ON 
1 polubienie

Poszedłem drogą Libre Tiny z ESPHome ale widzę, że w OpenBK7231T_App mam tę opcję do ustawienia w GUI i myślę czy nie spróbować z tamtym projektem. Jak to w ESPHome najbardziej drażni mnie rozdrobniona, chaotyczna dokumentacja. W OpenBK widzę porządek za czerpany z Tasmoty.

Spróbuję jeszcze z Twoim pomysłem…

EDIT:
Aby użyć restore_mode: potrzebuje zapisu restore_from_flash: true a ta opcja jest tylko dla ESP. Niestety ale z BK nie ma tu jeszcze tej możliwości.

EDIT2:

Dzięki @macek - automatyzacja działa super :+1:

esphome:
  name: zawor
  friendly_name: zawor
  on_boot:
    priority: -100
    # ...
    then:
      - switch.turn_on: switch_1