Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ausreißer erkennen und ignorieren #237

Closed
ledermann opened this issue Sep 8, 2024 · 10 comments
Closed

Ausreißer erkennen und ignorieren #237

ledermann opened this issue Sep 8, 2024 · 10 comments
Assignees
Labels
enhancement New feature or request

Comments

@ledermann
Copy link
Member

In seltenen Fällen kommen über den MQTT-Broker Werte, die offensichtlich nicht stimmen können.

Es wurde von Fällen berichtet, wo ein Growatt Wechselrichter manchmal den Messwert 2.1475e+08 für Erzeugung und Hausverbrauch gemeldet hat.

Solche viel zu großen Werte sollten ignoriert werden. Eine Möglichkeit wäre, dafür eine zusätzliche Variable zu definieren, etwa so:

MAPPING_X_MAX=10000
@frizzle0815
Copy link

Ich würde eine solche Funktion sehr begrüßen!
Bei mir läuft ein Wechselrichter von Solis mit Pylontech Speicher. Ich lese den Wechselrichter über Modbus aus und verteile die Werte über mqtt. Wenn der Speicher morgens leer ist und eigentlich nur 0 Werte für Speicher Ladung/Entladung ausgeben sollte, dann treten stattdessen laufend "nervöse Zuckungen" auf, die unrealistisch hohe Werte beinhalten.
Derzeit filtere ich solche Werte über Umwege selbst heraus.

ledermann added a commit that referenced this issue Sep 9, 2024
@ledermann
Copy link
Member Author

Ich habe das jetzt mal ergänzt. Es läuft so:

In der .env können optional zwei Variablen MAPPING_X_MIN und MAPPING_X_MAX definiert werden, z.B. so:

MAPPING_0_TOPIC=senec/0/ENERGY/GUI_INVERTER_POWER
MAPPING_0_MEASUREMENT=PV
MAPPING_0_FIELD=inverter_power
MAPPING_0_TYPE=integer
MAPPING_0_MIN=5
MAPPING_0_MAX=15000

Bei Über- oder Unterschreitung wird ein Messwert ignoriert. Alles wird im Log protokolliert.

@frizzle0815 und @f1nch87: Ihr könnte das ausprobieren, indem ihr den MQTT-Collector auf die Entwickler-Version (develop) umstellt:

...
mqtt-collector:
  image: ghcr.io/solectrus/mqtt-collector:develop
environment:
  - MAPPING_1_TOPIC
  - MAPPING_1_MEASUREMENT
  - MAPPING_1_FIELD
  - MAPPING_1_TYPE
  - MAPPING_1_JSON_KEY
  - MAPPING_1_MIN
  - MAPPING_1_MAX
  ....

Nicht vergessen: Die beiden neuen Variablen (je Mapping, wenn benutzt!) müssen auch im compose.yaml erwähnt werden, sonst erhält der Container keinen Zugriff darauf.

Wenn es funktioniert (bitte Feedback!) werde ich ein neues Release erstellen.

@ledermann ledermann self-assigned this Sep 9, 2024
@ledermann ledermann added the enhancement New feature or request label Sep 9, 2024
@f1nch87
Copy link

f1nch87 commented Sep 9, 2024

Ok thank you for your work.
I will try it when im home

Ok wieso auch immer ich englisch geschrieben habe :D

@frizzle0815
Copy link

Hallo Georg,
die Installation hat bei mir problemlos funktioniert. Ich habe ein extra test-Topic angelegt mit Min 35 und Max 22000.

Im log sieht das so aus (gefiltert):

Subscribing to 17 topics:
- solectrus/test               => pv:test (35 ≥ float ≤ 22000)

2024-09-10T07:46:31.255418254Z   topic = solectrus/test
2024-09-10T07:46:31.255513859Z   Ignoring test: 34.0 is below minimum of 35.0
2024-09-10T07:46:35.086969174Z   topic = solectrus/test
2024-09-10T07:46:35.087201889Z   => pv:test = 35.0
2024-09-10T07:46:38.578738041Z   topic = solectrus/test
2024-09-10T07:46:38.578833629Z   => pv:test = 36.0
2024-09-10T07:47:41.085111720Z   topic = solectrus/test
2024-09-10T07:47:41.085373384Z   => pv:test = 21999.0
2024-09-10T07:47:45.034248850Z   topic = solectrus/test
2024-09-10T07:47:45.034401698Z   => pv:test = 22000.0
2024-09-10T07:47:50.665869874Z   topic = solectrus/test
2024-09-10T07:47:50.665964311Z   Ignoring test: 22001.0 exceeds maximum of 22000.0
2024-09-10T07:48:29.637887468Z   topic = solectrus/test
2024-09-10T07:48:29.637982855Z   Ignoring test: 34.9 is below minimum of 35.0
2024-09-10T07:48:33.577558200Z   topic = solectrus/test
2024-09-10T07:48:33.577660718Z   Ignoring test: 22000.1 exceeds maximum of 22000.0

Anschließend habe ich in influxdb geprüft, dass die gefilterten Werte auch tatsächlich nicht in der Datenbank gespeichert wurden, was der Fall ist.
Momentan sieht es also sehr gut aus!

Zur Vollständigkeit sei erwähnt, dass mein erster Test gestern Abend Probleme verursacht hat. Ich kann allerdings nicht sagen, ob der Fehler bei mir oder bei Solectrus lag.
Es war jedenfalls so, dass ich den gleichen Test wie heute morgen durchgeführt habe und die Werte scheinbar zutreffend gefiltert wurden. Anschließend wurden laut log die entsprechenden Werte jedoch immer und immer wieder erneut geprüft - wie in einer Dauerschleife. Gleichzeitig konnte ich in meinem mqtt Explorer aber sehen, dass die Werte auch tatsächlich immer wieder erneut gesendet wurden - ohne dass ich dies angestoßen hätte.
Meine Vermutung geht dahin, dass es sich um ein QoS Problem handelte. Bei mir werden die Werte standardmäßig mit QoS 1 gesendet. Ich bin kein mqtt Profi, aber so wie ich es verstanden habe, versucht der Server die Werte immer wieder erneut zu senden, wenn er (z.B. von Solectrus) keine Rückmeldung erhält, dass der Wert empfangen wurde. Vielleicht gab es hier ein Problem...
Ich habe daraufhin bei mir alles auf QoS 0 umgestellt, aber auch mit 1 scheint es jetzt zu funktionieren. Keine Ahnung, ob Du seit gestern noch einmal etwas geändert hast. Für den Test heute Morgen habe ich jedenfalls noch einmal ein neues Docker Image gezogen.

@ledermann
Copy link
Member Author

@frizzle0815 Sehr gut, danke für den ausführlichen Test!

Ich verwende bei mir schon immer QoS 1 (mit ioBroker) und kann mich an keinerlei Probleme damit erinnern. Ich verstehe QoS 1 genau wie du - jede Message muss mindestens einmal zugestellt worden sein, d.h. der Client muss jede Message bestätigen, sonst schickt der Broker sie erneut.

Außer der gestern bereitgestellten Aktualisierung des Docker-Images gab es nichts, was damit irgendwie in Verbindung stehen könnte. Insofern wüsste ich nichts, was ich verbessern könnte.

Ein Szenario könnte ich mir aber eventuell so vorstellen: Vielleicht hast du bei deinen ersten Versuchen noch das alte Image des SENEC-Collectors verwendet, dass die Test-Nachricht gar nicht abonniert hatte.

Wie dem auch sei: QoS 1 wäre auch meine Empfehlung - und da es nun bei dir funktioniert, verfolge ich das nicht weiter, sofern es keine neuen Hinweise geben sollte.

@f1nch87
Copy link

f1nch87 commented Sep 10, 2024

Ich muss erst nochmal Solectrus ordentlich in Portainer aufsetzen, weil ich zu doof bin die variablen im normalen docker zu verändern.

Mal schauen ob er die influx daten behällt aber wahrscheinlich nicht würde ich sagen.

@ledermann
Copy link
Member Author

@f1nch87 Portainer ist ein prima Tool, aber Neuaufsetzen nur um die Variablen zu ergänzen, sollte nicht nötig sein. Ich hatte oben beschrieben, wie es geht. Wo hakt es denn?

@f1nch87
Copy link

f1nch87 commented Sep 10, 2024

Es hackt nur an meiner Faulheit.
Habe portainer erst nachträglich auf dem lxc aufgesetzt. Daher kann ich nicht einfach in der .yaml und .env herumschreiben und neu deployen so wie ich es von anderen containern gewohnt bin.
Direkt in docker über die Kommandozeile habe ich noch nichts gemacht bislang.

Denke ich lerne die influx daten zu sichern und zu importieren und dann setzte ich solectrus direkt in portainer auf um mich wieder etwas mehr zurechtzufinden.

@f1nch87
Copy link

f1nch87 commented Sep 12, 2024

Also bei mir scheint es mit den zusätzlichen Variablen zu funktionieren.

Danke dafür

@ledermann
Copy link
Member Author

Sehr schön, danke für die Rückmeldungen.

Ich habe nun v0.3.0 des MQTT-Collectors veröffentlicht, Ihr könnt also wieder auf latest wechseln:
https://github.com/solectrus/mqtt-collector/releases/tag/v0.3.0

Die Wiki-Seite mit der Doku ist ebenfalls aktualisiert:
https://github.com/solectrus/mqtt-collector/wiki/Konfiguration

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants