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ć
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
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.
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
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.
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)
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 .
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
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
esphome:
name: zawor
friendly_name: zawor
on_boot:
priority: -100
# ...
then:
- switch.turn_on: switch_1