Hichi Lesekopf - falsche Werte ausfiltern

Bei meinem Hichi Lesekopf landen immer mal wieder völig falsche Werte in der Statistik

Für den aktuellen Verbrauch habe ich jetzt diesen YAML Code “zusammengeklickt”

template
  - sensor:
    # aktueller Netzverbrauch
      - name: "aktueller Netzverbrauch"
        unique_id: "aktuellNetz"
        unit_of_measurement: 'W'
        device_class: "power"
        state_class: "measurement"
        state: >
           {% if (states('sensor.tasmota_sml_power_curr') |float(0)) > -1000 and (states('sensor.tasmota_sml_power_curr') |float(0)) < 9000 %}
             {{ float(states('sensor.tasmota_sml_power_curr')) | round(1) }}
           {% endif %}

(die -1000 konnte ich noch nicht testen - aktuell kaum Sonne …)
Quelle > (https://community.simon42.com/t/energie-dashboard-tasmota-filtern-unplausibler-werte/9065/6)

Für den Wert des Stromzählers funktioniert dieses nicht - der Wert steigt ja immer weiter an
hier müsste die Abweichung vom “Mittelwert” ausgewertet werden

Aktuell nutze ich nur dieses Template

template
  - sensor:
    # Stromzähler Verbrauch
      - name: "Stromzähler Verbrauch"
        unique_id: "StromzaehlerVerbrauch"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ float(states('sensor.tasmota_sml_total_in')) | round(4) }}

weiß aber nicht wie ich diesen Filter hinzufüge

(vermutlich lässt sich damit der obere Code ersetzen - erstellt aber eine neue Entität (Messwerte werden angezeigt - aktuell keine Fehler … daher kein erfolgreicher Test))

sensor:
  - platform: filter
    name: "Stromzähler Verbrauch"
    entity_id: sensor.tasmota_sml_total_in
    filters:
      - filter: outlier
        window_size: 10
        radius: 2.0

vielleicht kann mich da jemand in die richtige Richtung schubsen

um das Template anzupassen - ohne vorherige Messwerte zu “verlieren”

Liebe Grüße

Tom

Lt “Last Restart Time” seit einem halben Jahr nicht neu gestartet …

will die Möglichkeit einer “schlechten” Stromversorgung aber nicht ausschliessen

Ein funktionierender Filter wäre aber trotzdem eine Lösung,

egal wo die Ursache liegt

Warum passt du nicht das Script in Tasmota an, wenn die Werte falsch sind? Ich würde dort an der Quelle die Ursache suchen und nicht am Ziel die falschen Daten anpassen.

Beim Lesekopf wüsste ich keine Optimierung

das Flag für den Median-Filter ist gesetzt - um Fehler auszufiltern

>D
>B
->sensor53 r

>M 1
+1,3,s,16,9600,SML
1,77070100010800ff@1000,Total consumption,KWh,Total_in,4
1,77070100020800ff@1000,Total Feed,KWh,Total_out,4
1,77070100100700ff@1,Current consumption,W,Power_curr,17
1,770701001f0700ff@1,Amperage L1,A,Amperage_p1,1
1,77070100330700ff@1,Amperage L2,A,Amperage_p2,1
1,77070100470700ff@1,Amperage L3,A,Amperage_p3,1
#

funktioniert auch grundsätzlich, nur irgendwann ist ein “Mondwert” dazwischen
(passiert von einmal am Tag bis einmal im Monat)

Meine Lösung für den Stromzähler sieht so aus

über einen Filter wird ein Mittelwert erzeugt

sensor:
  - platform: filter
    name: "Stromverbrauch Mittelwert"
    entity_id: sensor.tasmota_sml_total_in
    filters:
      - filter: outlier
        window_size: 10
        radius: 2.0

dieser Mittelwert wird dann mit dem aktuellen Messwert verglichen
und die großen Sprünge aussortiert

template:
  - sensor:
    # Stromzähler Verbrauch
      - name: "Stromzähler Verbrauch"
        unique_id: "StromzaehlerVerbrauch"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >
           {% if (states('sensor.tasmota_sml_total_in') |float(0)) > float(states('sensor.stromverbrauch_mittelwert')) and (states('sensor.tasmota_sml_total_in') |float(0)) < (float(states('sensor.stromverbrauch_mittelwert'))+10) %}
             {{ float(states('sensor.tasmota_sml_total_in')) | round(4) }}
           {% endif %}

einen Test mit falschen Messwerten war noch nicht möglich

Hallo,
du solltest mit einem Medien-Filter arbeiten.
Der eleminiert relativ zuverlässig einzelne Ausreißer. Er erfordert allerdings eine etwas höheren Rechenzeit im Vergleich zum Mittelwert -Filter.
Beim Mittelwert -Filter führt eine einzelner Ausreißer immer auch zu einer Abweichung.

Lt folgender Seite ist Outlier ein Median Filter ?
https://www.home-assistant.io/integrations/filter/#outlier

The Outlier filter (outlier) is a basic Band-pass filter, as it cuts out any value outside a specific range.

The included Outlier filter will discard any value beyond a band centered on the median of the previous values, replacing it with the median value of the previous values. If inside the band, the current state is returned.

Firefox automatische Übersetzung

Der mitgelieferte Ausreißerfilter verwirft jeden Wert über ein Band hinaus, das sich auf den Median der vorherigen Werte konzentriert, und ersetzt ihn durch den Medianwert der vorherigen Werte.

Vielleicht verstehe ich es aber falsch - über einen angepassten richtigen Template Code als Rückmeldung würde ich mich freuen

(ja - ich habe in meinem vorherigen Beitrag als Vereinfachung von Mittelwert geschrieben - Asche auf mein Haupt)

Das ist ein Median-Filter. Der sollte funktionieren.

Bitte auch auch nach der Ursache der Störung. Tausche Mal die Stromversorgung (für eine längere Zeit). Gibt es gleichzeitig Störungen, weil z. B. ein starker Verbraucher eingeschaltet wird. Tritt der Fehler immer zur gleichen Uhrzeit auf?
Viel Erfolg

Och - so lange nicht viele Fehler in kurzer Zeit eintrudeln

kann ich mit der Lösung über den Filter leben

(wobei augenblicklich keine Fehler mehr auftreten … auch vor dem Filtern)