Mam takiego YAMLa który obsługuje ADS 4 wejściowy i po dzielinikach napięcia mierzy napięcia na 4 akumulatorach. Na razie względem masy pierwszego. Chciałbym docelowo mieć encje, które pokaże różnicę wględem poprzedniego akumulatora, czyli tak naprawdę napięcie na każdy z akumulatorów oddzielnie. Ale najlepiej aby były to dodatkowe encje, bo do celów diagnostycznych/kalibracji, przyda się napięcie bezwzględme. Jak przerobić tego YAMLA, aby miec dodatkowe encje wyliczne z innych pomiarów? Jakiś prosty przykład? Albo wskazówka gdzie o takim rozwiązaniu poczytać? Wolałbym to zrealizować w ESPHome, a nie w HomeAssistant.
Najpierw wrzuć swojego YAMLa.
ads1115:
- address: 0x48
sensor:
- platform: ads1115
multiplexer: 'A0_GND'
gain: 4.096
name: "ADS1115 Channel A0-GND"
update_interval: 0.5s
web_server:
sorting_weight: 0
filters:
- median:
window_size: 52
send_every: 5
send_first_at: 1
# - lambda: return x * (19.21/0.907);
- calibrate_linear:
# - 0.0 -> 0.0
- 0.4095 -> 8.675
- 0.907 -> 19.21
- platform: ads1115
multiplexer: 'A1_GND'
gain: 4.096
name: "ADS1115 Channel A1-GND"
update_interval: 0.5s
web_server:
sorting_weight: 1
filters:
- median:
window_size: 20
send_every: 5
send_first_at: 1
# - lambda: return x * (19.20/0.959);
- calibrate_linear:
# - 0.0 -> 0.0
- 0.4336 -> 8.675
- 0.959 -> 19.21
- platform: ads1115
multiplexer: 'A2_GND'
gain: 4.096
name: "ADS1115 Channel A2-GND"
update_interval: 0.5s
web_server:
sorting_weight: 2
filters:
- median:
window_size: 20
send_every: 5
send_first_at: 1
# - lambda: return x * (19.21/1.27);
- calibrate_linear:
# - 0.0 -> 0.0
- 0.5756 -> 8.675
- 1.27 -> 19.21
- platform: ads1115
multiplexer: 'A3_GND'
gain: 4.096
name: "ADS1115 Channel A3-GND"
update_interval: 0.5s
web_server:
sorting_weight: 3
filters:
- median:
window_size: 20
send_every: 5
send_first_at: 1
# - lambda: return x * (19.21/3.262); # 13.57/2.314
- calibrate_linear:
# - 0.0 -> 0.0
- 1.489 -> 8.675
- 3.263 -> 19.21
Chcesz mieć w sumie tylko 4 encje pokazujące różnice czy 8 pokazujące napięcia+ różnice? Generalnie na pewno będziesz musiał skorzystać z template sensor z prosta matematyka
Osiem. O template sesnors poczutam / wroce do tematu za kilka dni.
Tego absolutnie bym nie zmieniał, projektowanie należałoby zacząć od noty katalogowej
moim zdaniem optymalny wybór to FSR = ±0.512V, a nie FSR = ±4.096V
(czyli gain bym zmniejszył z 4.096
na 0.512
uzasadnienie banalne - lepsza liniowość przetwarzania i optymalnie wysoka rezystancja wejściowa)
i pod to należałoby dobrać dzielniki napięcia.
A co do template to nigdy nie odejmowałem wartości sensora od wartości innego sensora (a świta mi, że jest z tym jakiś wałek), ale jakoś tak będzie trzeba to rozwiązać.
Dziękuję za wskazanie miejsca poszukiwań “Template”, co zaowocowało rozwiązaniem, które działa dla wyliczania różnicy temperatur (tutaj sprawdziłem konstrukcję programową, bo chwilowo nie mam dostępu do voltomierza znajdującego się w garażu (czasami gubi tam zasięg WiFi) dla temperatur wygląda to tak:
sensor:
- platform: template
name: "delta-zasilanie-powrot"
unit_of_measurement: "°C"
lambda: |-
return id(t_sht3).state - id(sens_t_09).state;
update_interval: 60s
- platform: sht3xd
temperature:
name: "SHT35-temp"
id: t_sht3
humidity:
name: "SHT35-hum"
address: 0x44
update_interval: 40s
- platform: dallas_temp
address: 0xd6011911eca5aa28
name: "T_09"
id: sens_t_09
filters:
- offset: -0.01
update_interval: 40s
Reasumując trzeba dla każdej encji, która nas interesuje do obliczeń nadać ID. A później metod id().state możemy wyciągnąć jej wartość.