MODBUS calibrate_linear oder Helfer der kalibiert

Hallo zusammen,
ich stehe im Moment auf dem Schlauch.
Von unseren 6 Heizöltanks erfasse ich die Füllstände mit RS485 Modbus Differenzdruck Sensoren. Diese geben direkt die Füllhöhe in cm zurück.
Keine Ahnung ob es am Heizöl liegt das eine andere Dichte als Wasser hat, aber die Messwerte sind zu gering. Das Verhalten ist aber sehr linear.
Jetzt wollte ich in der configuration.yaml im Modbus Teil die Option Filter und calibrate_linear verwenden. Allderings ist das wohl keine zulässige Funktion im Modbus Teil der configuration.yaml.

Gibt es im Modbus eine andere Funktion um die Sensoren zu kalibieren?
Was ich auch schon machen wollte ist ein Helfer anlegen der den Wert vom Sensor nimmt und dann kalibriert. Dazu hab ich kein Beispiel gefunden.

Ich steh grad irgenwie auf dem Schlauch :frowning:

Gerne würde ich auch noch die gemessenen und korrigierten cm in Liter umrechnen, dazu brauch ich auch nochmals einen Helfer, oder?

Gruss Toni

Nicht das ich wüsste, aber

Beispiel:
dein sensor im modbus heisst jetzt “sensor.tank1”
dann änderst du das in der Config auf “sensor.tank1_raw”
fügst also ein _raw hinzu.
Warum? Weil du ja vermutlich schon eine Visualisierung im Dashboard hast die einen sensor.tank1 erwartet und du da nicht auch noch ändern möchtest. Man kommt ja sonst schnell durcheinander wenn es mal _raw sensor und mal keine _raw sensoren gibt auf der Frontend Seite.

du packst in deine configuration.yaml folgende Zeilen:

compensation:
  tank1:
    source: sensor.tank1_raw
    data_points:
      - [1, 2]
      - [100, 200]

Damit hast du dann wieder deinen sensor.tank1 aber mit linear korrigierten Werten.
Und das war’s dann. Zeigt der sensor vom Modbus 1 zeigt er dir im Dashboard nun 2, und be 100 zeigt er 200 … kannst du ja entsprechend anpassen.

Danke justone,

manchmal ist es dann doch ganz einfach, wenn man weiss wie es geht :slight_smile:

Gruss Toni

Update:
hab noch ein wenig gesucht und gelesen und gefunden wie man einen Helper dafür anlegen kann.
Dazu braucht’s ein bisschen Mathe

Messwerte vom Sensor:
0cm = 0% / 0 Liter
85.47 cm = 100% / 1000 Liter
100% entsprechen also 85.47 cm Messwert.
100/85.47 = 1.17 als Umrechnungsfaktor

Mein Helper sieht dann so aus:

- platform: template
    sensors:
      tank1_liter:
        friendly_name: "Tank1 Liter"
        unit_of_measurement: "L"
        value_template: "{{states('sensor.tank1_raw')|float * 11.7 |round(0) }}"
        icon_template: mdi:oil
      tank1_prozent:
        friendly_name: "Tank1 Prozent"
        unit_of_measurement: "%"
        value_template: "{{states('sensor.tank1_raw')|float * 1.17 |round(0) }}"
        icon_template: mdi:oil  

vielleicht hilft das ja noch jemanden anders.
So werden die richtigen Messewerte gerechnet. geht natürlich nur wenn die Messung linear ist.
Und was klar ist, die Heizöltanks haben unten einen Radius und werden schmaler, somit stimmen die Liter und % gegen leeren Tank nicht mehr genau.
Allerdings will ich die auch nicht wirklich zum letzten Trofen leer machen.

:crayon:by HarryP:
. Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)
. Codezeilen formatiert (bitte immer in </> einbinden)