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