Pomiar napięcia 0-20V import danych do HA

Najprościej przyjąć radośnie, że ADC działa liniowo (jeśli masz wersję niekalibrowaną fabrycznie, to błąd w najgorszym wypadku i tak nie powinien przekroczyć 10%, a jeśli wprowadzisz jednopunktową kalibrację to generalnie powinno być najlepiej).
Podejrzewam, że problem nie wynika z nieliniowości, tylko z szumu na wejściu (dlatego sugeruję inne filtry).

Nie wiem jakie filtry zakłada Tasmota domyślnie (pewnie jest to do wykopania z kodu źródłowego), skoro sprzęt jest ten sam a masz rozbieżne wyniki.

1 polubienie

Podaję rozwiązanie pod ESP32:

sensor:
  - platform: adc
    id: bat
    pin: GPIO39
    name: "bateria"
    attenuation: 11dB
    filters:
    - multiply: 0.963991 #mnożnik dla niwelacji różnicy wskazań 12,85 ÷ 13,33 = 0,963990998
    - calibrate_polynomial:
       degree: 2
       datapoints:
       # Map 0.0 (from sensor) to 0.0 (true value)
       - 0.0 -> 0.0
       - 0.593 -> 3.3
       - 0.814 -> 4.53
       - 1.39 -> 7.8
       - 2.18 -> 12.2
       - 2.28 -> 12.85
       - 2.67 -> 15.15
    update_interval: 5

Ważna informacja Analog to Digital Converter (ADC) - ESP32 - — ESP-IDF Programming Guide latest documentation

+----------+-------------+-----------------+
|          | attenuation | suggested range |
|    SoC   |     (dB)    |      (mV)       |
+==========+=============+=================+
|          |       0     |    100 ~  950   |
|          +-------------+-----------------+
|          |       2.5   |    100 ~ 1250   |
|   ESP32  +-------------+-----------------+
|          |       6     |    150 ~ 1750   |
|          +-------------+-----------------+
|          |      11     |    150 ~ 2450   |
+----------+-------------+-----------------+
|          |       0     |      0 ~  750   |
|          +-------------+-----------------+
|          |       2.5   |      0 ~ 1050   |
| ESP32-S2 +-------------+-----------------+
|          |       6     |      0 ~ 1300   |
|          +-------------+-----------------+
|          |      11     |      0 ~ 2500   |
+----------+-------------+-----------------+
1 polubienie



Wreszcie coś, co uzasadnia używanie ESP32-S2

Mozesz rozwinąć co masz na myśli? Ja potrzebuje jedynie uzyskać efekt taki żeby to co eksponuje encja z tasmoty jako np. 1224 wyświetlało sie na grafie jako 12.24 lub 12,24 jednostka „V” bo to stan napięcia UPS jest.

To u mnie nie dziala albo nie umiem zrobic….

platform: mqtt
   unique_id: car-elantra-battery
   state_topic: "tele/carbattery/SENSOR"
   name: car_elantra_battery
   unit_of_measurement: "v"
   value_template: "{{ (value_json.ANALOG.Range | float / 100 | round(2) )}}"
   qos: 2

Mogę - na zwykłym ESP32 nie da się mierzyć od zera :stuck_out_tongue:

A w tej drugiej kwestii chyba za mało nawiasów (używam głównie ESPHome, a nie Tasmoty, to mnie takie problemy nie dotyczą) spróbuj jakoś tak

value_template: "{{ (((value_json.ANALOG.Range | float) / 100) | round(2)
edit: skoro wcześniej działało bez tych nawiasów, to jest zły trop :unamused:

Zapis platform: mqtt jest już nieaktualny.

To co i gdzie powinienem wiec dodac do configuration.yaml żeby bylo tak jak chcę?

Kiedyś miałem tak:

- platform: mqtt
  name: "akumulator centrali alarmowej"
  state_topic: "tele/dom_D46684/SENSOR"
  unit_of_measurement: 'V'
  device_class: voltage
  qos: 2
  value_template: "{{ (value_json.ANALOG.Range1 | float / 100 | round(2) )}}"

Obecnie idąc za dokumentacją, zrobił bym tak:

mqtt:
  sensor:
    - name: "akumulator centrali alarmowej"
      state_topic: "tele/dom_D46684/SENSOR"
      unit_of_measurement: 'V'
      device_class: voltage
      qos: 2
      value_template: "{{ (value_json.ANALOG.Range1 | float / 100 | round(2) )}}"

Nie mam jak sprawdzić kodu, bo przeszedłem na ESPHome.

Nie działa. Kod wpisałem do configuration.yaml sprawdziłem poprawność i zrestartowalem HA. Wykres bez zmian. Macie jakieś pomysły?

Wykres starych wartości będzie bez zmian, bo w bazie masz je złe, ale jak się sprawy mają z aktualnymi wartościami?

Narzędzia deweloperskie → szablon i tam sprawdź co generuje template.

Tak poza konkurencją (jeśli są tu tasmotowi wyjadacze, to może pomogą bardziej :stuck_out_tongue: ), sądzę, że w samej Tasmocie można zmodyfikować wartość przed jej opublikowaniem

1 polubienie

Wydaje mi się, że AdcParam7 powinien określać sposób wyświetlania napięcia.

Nie rozumiem ?
1.Tasmota przesyła Tobie “tele” a w HA masz odbiór po “mqtt” i te dane masz, to działa ?
2.Chodzi o sposób wyświetlania masz 1224 a chcesz mieć 12,24 ?

Tak dokladnie :stuck_out_tongue_winking_eye: chcę widziec wartość 12,24

no to podany wyżej zapis powinien działać .

value_template: "{{ (value_json.ANALOG.Range | float / 100 | round(2)) }}"

A co zwraca szablon, sprawdzałeś ?

Podejrzewam błędny topic. Sprawdź za pomocą np. MQTTExplorer

cześć, troszke ciężko u mnie z czasem ale ja mam tak:
configuration.yaml:

mqtt:
  sensor: !include mqttsensor.yaml
  binary_sensor: !include mqttbinarysensor.yaml
  switch: !include mqttswitch.yaml

a wpis mam w mqtt.sensor
image

- name: Pomiar_bateria_UPS
  unique_id: Pomiar_bateria_ups
  state_topic: "tele/Pomiar_bateria_ups/SENSOR"
  unit_of_measurement: "v"
  value_template: "{{ (value_json.ANALOG.Range | float / 100 | round(2) )}}"
  qos: 2
- name: Pomiar_bateria_Peugeot
  unique_id: Pomiar_bateria_Peugeot
  state_topic: "tele/Pomiar_bateria_peugeot/SENSOR"
  unit_of_measurement: "v"
  value_template: "{{ (value_json.ANALOG.Range | float / 100 | round(2) )}}"
  qos: 2

a to punkt wyjscia dla pomiarów, swróć uwage na state_topic

W konsoli Tasmota chyba parametr VoltRes

1 polubienie

Sprawdziłem i jest ok


t2

voltres 3
Screenshot - 20.02.2023 , 21_17_19

voltres 2

Screenshot - 20.02.2023 , 21_14_48

voltres 1

Screenshot - 20.02.2023 , 21_15_40

voltres 0 standardowe