Dodatkowe encje wyliczne w ESPHome

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.

1 polubienie

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

2 polubienia

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ść.

Wracam do tematu, tym razem z próbą pomiaru różnicowego wg. schematu. Rezystory dobrałem, aby napięcia było 0-3.3V na wejściach. Ale intryguje mnie ta rezystancja wejściowa 100M dla Common-mode/FSR=0.512 gdzie ekstremalnie wzrosła, a dla differencjal mode trzyma się trendu, czyli im mniejszy FSR tym mniejsza rezystancja. Chcę aby to gadało z ESP więc zasilanie mu dam 3.3V a FSB się wacham pomiędzy 2.048 a 4.096 i chyba 2.048 do mnie bardziej przemawia, bo wykorzystam cały zakres. Gdzie w karcie katalogowej znalazłeś o zaletach niskiej wartości szumu własnego przy FSB 0.256, bo tutaj będzie niski, ale z dzielników będzie znacznie wyższy.

https://www.elektroda.pl/rtvforum/viewtopic.php?p=21646893#21646893

Myślisz, że pamiętam jakieś szczegóły prawie po 2 latach?
Nie sądzę aby szumy własne rezystorów miały tu jakiekolwiek znaczenie.
Natomiast liniowość przetwarzania może być istotna (ze względu na nieliniowe charakterystyki akumulatorów - najbardziej interesujące fragmenty są tam gdzie zmiany napięcia są bardzo małe).