Hallo, ich lese mit einem esp8266 die ve.direct Schnittstelle eines Victron Wechselrichters aus. Es wird unter anderem der Spannungswert des Akku ausgelesen. Der Akkuwert liegt immer zwischen 44 V und 57 V. Komischer weise werden immer wieder Werte "0V" eingelesen bzw. gemeldet. Ich möchte gerne diese Ausreißer direkt im esp8266 weg filtern. die sollen nicht am Home assistant weiter gegeben werden. folgendes habe ich mir ausgedacht: Der aktuelle spannungswert wird in einen Merker geschrieben. Wenn der nächste ausgelesene Wert < 40 V ist, wird der Wert des Merker eingesetzt. Gleiches gilt für Stromwerte. Hier gibt es auch schlimme Spitzen, die mir meine Grafik verhageln. Das kann ja sein, dass der Wechselrichter ein peek raus haut, wenn z.B. eine große Last zugeschaltet wird. Zumindest muss hier der Wert begrenzt werden, der an Home assistant weiter gegeben wird. Gibt es wo eine Befehlsliste, was ich im ESP alles programmieren kann ? Wenn jemand so nett wäre, mir da auf die Sprünge zu helfen wäre ich dankbar. Eventuell paar programmierzeilen, wie ich den Code in ESPHome ergänzen muss. Vielen Dank. Offiziell ist die ve.direct Schnittstelle von Victron nicht dafür vorgesehen, dass man nmit esp8266 Daten ausliest. Ich vermute, dass darin der Grund liegt, dass es ausreisser gibt. Auch habe ich eine 15m Leitung vom Wechselrichter zum esp8266, da am Wechselrichter kein wlan vorhanden ist.
:
Verschoben durch Moderator
Jochen B. schrieb: > ve.direct Schnittstelle Das scheint nach den Konformitätserklärungen eine RS232 oder RS485 zu sein. Jochen B. schrieb: > ich lese mit einem esp8266 die ve.direct Schnittstelle eines Victron > Wechselrichters aus. Wie machst du das? Zeig das verwendete Programm oder poste einen Link auf die Sourcen. Jochen B. schrieb: > Komischer weise werden immer wieder Werte "0V" eingelesen bzw. gemeldet. Dann zeig Mal einen Verlauf der Werte der das Problem zeigt. Prosa ist um ein Signal zu beschreiben meist schlecht. Jochen B. schrieb: > Ich möchte gerne diese Ausreißer direkt im esp8266 weg filtern. die > sollen nicht am Home assistant weiter gegeben werden. Wieso das? Deine Home Assist Instanz hat vermutlich tausend Mal mehr Rechenpower und anscheinend kann man von Haus aus filtern: https://www.home-assistant.io/integrations/filter/ Jochen B. schrieb: > Gibt es wo eine Befehlsliste, was ich im ESP alles programmieren kann ? Die Frage verstehe ich nicht. Du kannst alles programmieren was du willst. Durch die Frage vermute ich allerdings dass du selbst noch nicht großartig selbst programmiert hast. Du musst halt den seitherigen Code anpassen und einen Filter an geeigneter Stelle programmieren. Jochen B. schrieb: > Eventuell paar programmierzeilen, wie ich den Code in ESPHome ergänzen > muss. Ah okay ESPHome. Hätte man gleich schreiben können. Jochen B. schrieb: > Ich vermute, dass darin der Grund liegt, dass es ausreisser gibt. Das glaube ich nicht. Jochen B. schrieb: > Auch habe ich eine 15m Leitung vom Wechselrichter zum esp8266, da am > Wechselrichter kein wlan vorhanden ist. Ist sowohl bei RS485 als auch bei RS232 kein Problem wenn die Verkabelung OK ist. Mach Mal 2-3 Fotos davon.
N. M. schrieb: > Ah okay ESPHome. Scheinbar gibt es einen einfachen Median Filter. Der sollte den Spike einfach entfernen: https://esphome.io/components/sensor/index.html#median
Hallo, vielen Dank für Eure Hilfe. Hier ein Bild, was da an Daten ankommt. Man sieht schön, dass da immer wieder Null-Werte dabei sind. Hier ein auszug des Code vom ESP8266:
1 | external_components:
|
2 | - source: github://KinDR007/VictronMPPT-ESPHOME@main |
3 | |
4 | uart: |
5 | id: uart3 |
6 | tx_pin: D8 # Not used! The communication is read-only |
7 | rx_pin: D7 |
8 | baud_rate: 19200 |
9 | rx_buffer_size: 256 |
10 | |
11 | victron: |
12 | id: victron0 |
13 | uart_id: uart3 |
14 | |
15 | sensor: |
16 | - platform: homeassistant |
17 | name: "abfrage_intervall" |
18 | device_class: duration |
19 | entity_id: input_number.wert_vz_ferraris |
20 | unit_of_measurement: "s" |
21 | |
22 | - platform: victron |
23 | victron_id: victron0 |
24 | |
25 | panel_voltage: |
26 | name: "Panel voltage" |
27 | filters: |
28 | - throttle: 30s |
29 | |
30 | battery_voltage: |
31 | name: "Battery voltage" |
32 | filters: |
33 | - min: |
34 | window_size: 50 |
35 | send_every: 4 |
36 | send_first_at: 3 |
37 | |
38 | - clamp: |
39 | min_value: 44 |
40 | max_value: 60 |
41 | # - throttle: 1s
|
42 | |
43 | |
44 | battery_current: |
45 | name: "Battery current" |
46 | filters: |
47 | - clamp: |
48 | min_value: -50 |
49 | max_value: 50 |
50 | - throttle: 5s |
51 | |
52 | yield_today: |
53 | name: "Leistung Tag" |
54 | filters: |
55 | - throttle: 30s |
56 | |
57 | max_power_yesterday: |
58 | name: "max_power_yesterday" |
59 | filters: |
60 | - throttle: 30s |
61 | |
62 | max_power_today: |
63 | name: "max_power_today" |
64 | filters: |
65 | - throttle: 30s |
66 | |
67 | yield_total: |
68 | name: "yield_total" |
69 | filters: |
70 | - throttle: 30s |
wobei battery_voltage und battery_current schon code experiment ist. Bei der Grafik war da der gleiche Code wie bei den anderen Parmatern. Bild DC2 ist mit dem experment-Code. Nicht zielführend, leider. Was muss ich programmieren, um die Null-ausreiser weg zu bekommen ? Ich möchte das gerne auf der esp-Seite machen, in Home Assistant wird das alles zu viel. Da gibt es schon einiges an Code. Ich habe vor 20 Jahren beruflich SPS Programmiert. Dann net mehr, dafür aber viel in Visual basic. Hier bin ich neu am start, muss mich da erst rein fuchsen. Am liebsten wäre mir ne "if then" Abfrage, wenn der Wert < 40 ist wird der Wert des Merker genommen, also ein Wert, der kurz davor korrekt ausgelesen wurde. soweit ich das gelesen habe, rechnen die Filter nen Mittelwert aus den empfangenen Werten. Das kann ich so nicht machen, das verfälscht zu arg.
:
Bearbeitet durch User
Ich hab jetzt den Median Filter programmiert. Schein das Problem zu beheben. Vielen Dank.
Jochen B. schrieb: > esp8266 die ve.direct Schnittstelle eines Victron > Wechselrichters aus. Es wird unter anderem der Spannungswert des Akku > ausgelesen. Der Akkuwert liegt immer zwischen 44 V und 57 V. Komischer > weise werden immer wieder Werte "0V" eingelesen bzw. gemeldet. Log mal am ESP mit was der von dem Victron empfängt in HA weisst du was er sendet. Vergleichen .... Sind die Fehler im Empfang vom ESP von dem Victron oder bei der Übertragung zu HA? Frägst du den Victron zu schnell ab, oder liegts am ESP ?? Warum gehen alle den "konfortablen Weg" bevor eine genaue Analyse des Problems angegangen wird.
Hallo, mit dem Median Filter geht es, die Null-Werte werden ausgegrenzt. hier ein log vom espHome:
1 | [11:17:27][W][component:204]: Component esphome.coroutine took a long time for an operation (0.07 s). |
2 | [11:17:27][W][component:205]: Components should block for at most 20-30ms. |
3 | [11:17:28][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
4 | [11:17:28][D][text_sensor:064]: '${name} error': Sending state 'No error' |
5 | [11:17:28][D][sensor:093]: 'yield_total': Sending state 97900.00000 Wh with 0 decimals of accuracy |
6 | [11:17:28][D][sensor:093]: 'day_number': Sending state 19.00000 with 0 decimals of accuracy |
7 | [11:17:28][W][component:204]: Component esphome.coroutine took a long time for an operation (0.08 s). |
8 | [11:17:28][W][component:205]: Components should block for at most 20-30ms. |
9 | [11:17:29][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
10 | [11:17:29][D][text_sensor:064]: '${name} error': Sending state 'No error' |
11 | [11:17:29][D][sensor:093]: 'Battery voltage': Sending state 52.86000 V with 3 decimals of accuracy |
12 | [11:17:29][W][component:204]: Component esphome.coroutine took a long time for an operation (0.10 s). |
13 | [11:17:29][W][component:205]: Components should block for at most 20-30ms. |
14 | [11:17:30][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
15 | [11:17:30][D][text_sensor:064]: '${name} error': Sending state 'No error' |
16 | [11:17:30][D][sensor:093]: 'yield_yesterday': Sending state 5300.00000 Wh with 0 decimals of accuracy |
17 | [11:17:30][D][victron:1026]: Unhandled property: H2\xa6H\x9a\xca\xca^HjEM%19 |
18 | I 16400 |
19 | [11:17:30][W][component:204]: Component esphome.coroutine took a long time for an operation (0.08 s). |
20 | [11:17:30][W][component:205]: Components should block for at most 20-30ms. |
21 | [11:17:31][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
22 | [11:17:31][D][text_sensor:064]: '${name} error': Sending state 'No error' |
23 | [11:17:31][D][sensor:093]: 'max_power_yesterday': Sending state 2399.00000 W with 0 decimals of accuracy |
24 | [11:17:31][D][sensor:093]: 'Battery current': Sending state 16.40000 A with 3 decimals of accuracy |
25 | [11:17:31][W][component:204]: Component esphome.coroutine took a long time for an operation (0.08 s). |
26 | [11:17:31][W][component:205]: Components should block for at most 20-30ms. |
27 | [11:17:32][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
28 | [11:17:32][D][text_sensor:064]: '${name} error': Sending state 'No error' |
29 | [11:17:32][W][component:204]: Component esphome.coroutine took a long time for an operation (0.07 s). |
30 | [11:17:32][W][component:205]: Components should block for at most 20-30ms. |
31 | [11:17:33][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
32 | [11:17:33][D][text_sensor:064]: '${name} error': Sending state 'No error' |
33 | [11:17:33][D][sensor:093]: 'Battery voltage': Sending state 52.86000 V with 3 decimals of accuracy |
34 | [11:17:33][W][component:204]: Component esphome.coroutine took a long time for an operation (0.07 s). |
35 | [11:17:33][W][component:205]: Components should block for at most 20-30ms. |
36 | [11:17:34][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
37 | [11:17:34][D][text_sensor:064]: '${name} error': Sending state 'No error' |
38 | [11:17:34][W][component:204]: Component esphome.coroutine took a long time for an operation (0.10 s). |
39 | [11:17:34][W][component:205]: Components should block for at most 20-30ms. |
40 | [11:17:35][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
41 | [11:17:35][D][text_sensor:064]: '${name} error': Sending state 'No error' |
42 | [11:17:35][W][component:204]: Component esphome.coroutine took a long time for an operation (0.13 s). |
43 | [11:17:36][W][component:205]: Components should block for at most 20-30ms. |
44 | [11:17:36][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
45 | [11:17:36][D][text_sensor:064]: '${name} error': Sending state 'No error' |
46 | [11:17:36][D][sensor:093]: 'Battery current': Sending state 16.40000 A with 3 decimals of accuracy |
47 | [11:17:36][W][component:204]: Component esphome.coroutine took a long time for an operation (0.11 s). |
48 | [11:17:36][W][component:205]: Components should block for at most 20-30ms. |
49 | [11:17:37][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
50 | [11:17:38][D][text_sensor:064]: '${name} error': Sending state 'No error' |
51 | [11:17:38][W][component:204]: Component esphome.coroutine took a long time for an operation (0.09 s). |
52 | [11:17:38][W][component:205]: Components should block for at most 20-30ms. |
53 | [11:17:39][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
54 | [11:17:39][D][text_sensor:064]: '${name} error': Sending state 'No error' |
55 | [11:17:39][D][sensor:093]: 'Battery voltage': Sending state 52.86000 V with 3 decimals of accuracy |
56 | [11:17:39][W][component:204]: Component esphome.coroutine took a long time for an operation (0.11 s). |
57 | [11:17:39][W][component:205]: Components should block for at most 20-30ms. |
58 | [11:17:39][W][victron:093]: Last transmission too long ago |
59 | [11:17:40][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
60 | [11:17:40][D][text_sensor:064]: '${name} error': Sending state 'No error' |
61 | [11:17:40][W][component:204]: Component esphome.coroutine took a long time for an operation (0.08 s). |
62 | [11:17:40][W][component:205]: Components should block for at most 20-30ms. |
63 | [11:17:41][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
64 | [11:17:41][D][text_sensor:064]: '${name} error': Sending state 'No error' |
65 | [11:17:41][W][component:204]: Component esphome.coroutine took a long time for an operation (0.12 s). |
66 | [11:17:41][W][component:205]: Components should block for at most 20-30ms. |
67 | [11:17:42][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
68 | [11:17:42][D][text_sensor:064]: '${name} error': Sending state 'No error' |
69 | [11:17:42][D][sensor:093]: 'Battery current': Sending state 16.30000 A with 3 decimals of accuracy |
70 | [11:17:42][D][sensor:093]: 'panel_power': Sending state 998.00000 W with 0 decimals of accuracy |
71 | [11:17:42][W][component:204]: Component esphome.coroutine took a long time for an operation (0.08 s). |
72 | [11:17:42][W][component:205]: Components should block for at most 20-30ms. |
73 | [11:17:43][D][text_sensor:064]: '${name} charging mode': Sending state 'Bulk' |
74 | [11:17:43][D][text_sensor:064]: '${name} error': Sending state 'No error' |
75 | [11:17:43][D][victron:1026]: Unhandled property: )\xa6J1043 |
76 | H22 530 |
ich glaube, dass das an der Hardware des Victron liegt. Ich habe da Bleiakku dran. Dieser Wechselrichter ist vergleichsweise "neu" entwickelt. Gut, die Komponenten mit der der Akku geladen wird, stammt von ausgereifen älteren Geräten. Aber am ende wird doch auch immer an der Software was gedreht. Ich glaube mich erinnern zu können, dass ich im log vom espHome auch schon Null-Werte gesehen habe, dass also der Victron diese Werte schickt. wobei ich nicht wusste, ob das nicht von dem langen Kabel kommt, das ja auch direkt mit 230V AC Kabel im Kabelkanal liegt. Da könnte auch was durch EMV kommen. Das kleine Kabel ist aber geschirmt und ich habe eine Seite des Schirms auf Erde gelegt. Es geht jetzt ja, alles gut. Bevor ich hier angefragt habe, habe ich schon einiges gemacht, um den Fehler selbst beheben zu können. Unter anderem auch die Zeit der Abfragen im esp8266 geändert. Da nur der Wert DC Spannung rum zickt, zeigt das auch, dass es net an der Verbindung bzw. EMV liegen kann, denn dann müstten ja alle Werte "spinnen"
:
Bearbeitet durch User
Jochen B. schrieb: > soweit ich das gelesen habe, rechnen die Filter nen Mittelwert aus den > empfangenen Werten. Das ist der falsche Weg, wenn es um Ausreißer geht. Eine Mittelwertrechnung verschmiert die Peaks lediglich über mehrere Werte. Jochen B. schrieb: > Da könnte auch was durch EMV kommen. EMV ist bestimmt nicht Schuld an irgendwelchen Störungen. Elektromagnetische Verträglichkeit sorgt ganz im Gegenteil dafür, dass trotz irgendwelcher äußeren Einflüsse die Daten heil übertragen werden.
Beim ESP sollte man waehrend der ADC Messungen das WiFi ausschalten. Ist ein bekanntes Probelm bei diesen Dingern.
Rainer W. schrieb: > Das ist der falsche Weg, wenn es um Ausreißer geht. Eine > Mittelwertrechnung verschmiert die Peaks lediglich über mehrere Werte. Deshalb der Vorschlag mit dem Median. Da hat er das Problem nicht. Bei nur wenigen Werten ist der Aufwand was Speicher und Rechenzeit angeht auch vertretbar. Rainer W. schrieb: > EMV ist bestimmt nicht Schuld an irgendwelchen Störungen. > Elektromagnetische Verträglichkeit sorgt ganz im Gegenteil dafür, dass > trotz irgendwelcher äußeren Einflüsse die Daten heil übertragen werden. Ich vermute auch eher dass ESPHome ab und zu evtl korrupte Daten sieht (vllt CRC Fehler o.ä.) und dann die Werte abnullt. Andreas B. schrieb: > Beim ESP sollte man waehrend der ADC Messungen das WiFi ausschalten. Er nutzt doch eine digitale Schnittstelle (siehe oben).
Beim ESP sollte man den ADC erst gar nicht benutzen. Mit einem Zufallszahlengenerator erreicht man die gleiche Genauigkeit.
Danke für die Hilfe. Es geht ja jetzt mit dem Median Filter. Es gibt doch bei den anderen Parameterwerten ab und an auch nen falschen Wert. Ich habe deshalb ziemlich überall den Filter programmiert.
N. M. schrieb: > Andreas B. schrieb: >> Beim ESP sollte man waehrend der ADC Messungen das WiFi ausschalten. > > Er nutzt doch eine digitale Schnittstelle (siehe oben). Was genutzt wird, spielt dabei doch gar keine Rolle. Sobald der WLAN-Block des ESP sendet, stört er, egal ob er Nutzerdaten sendet oder nur sagt "hier bin ich". Durch Abschalten des WLANs lässt sich zuverlässig verhindern, dass der Block mit seiner Sendetätigkeit im wahrsten Sinne des Wortes dazwischen funkt.
Rainer W. schrieb: > Was genutzt wird, spielt dabei doch gar keine Rolle. Wenn der TO keinen ADC verwendet gebt ihr im den Rat das WLAN abzuschalten weil das die Qualität der ADC Messung verbessert. Sorry, das ist Bullshit! Was hat das mit dem Problem des TO zu tun? Er nutzt den ESP als Gateway zwischen seinem Wechselrichter (ve.direct/Rs232/485) und seinem Heimnetz (hier über WLAN). Rainer W. schrieb: > Sobald der WLAN-Block des ESP sendet, stört er, egal ob er Nutzerdaten > sendet oder nur sagt "hier bin ich". Du willst mir also weiß machen dass die paar mW der WLAN Endstufe eine RS232/485 Schnittstelle stören? Denn genau darum geht es hier. In der Industrie hab ich hundert Meter Kabel parallel zu einer Motorleitung über die mehrere kW gehen und die RS485 verliert kein einziges Paket! Und das 24/7! Rainer W. schrieb: > Durch Abschalten des WLANs lässt sich zuverlässig verhindern, dass der > Block mit seiner Sendetätigkeit im wahrsten Sinne des Wortes dazwischen > funkt. Wenn du meinst. Für mich ist das praxisfern. Eine vernünftige digitale Übertragung störst du mir denn bisschen WLAN nicht. Zumindest nicht wenn du ein vernünftiges PCB hast.
N. M. schrieb: > Andreas B. schrieb: >> Beim ESP sollte man waehrend der ADC Messungen das WiFi ausschalten. > > Er nutzt doch eine digitale Schnittstelle (siehe oben). Stimmt, habe ich ueberlesen. Nehme alles zurueck. Dann wuerde ich aber trotzdem mal eruieren woher diese Streuungen in der Messung kommmen, anstatt an den Symptomen herumzuflicken.
:
Bearbeitet durch User
Andreas B. schrieb: > Dann wuerde ich aber trotzdem mal eruieren woher diese Streuungen in der > Messung kommmen, anstatt an den Symptomen herumzuflicken. Ja, da gebe ich dir Recht. Hätte ich persönlich auch so gemacht. Bilder vom Aufbau hat er trotz Nachfragen nicht geschickt. Wahrscheinlich so wie immer nichts geschirmt noch verdrillt. Da er schreibt dass mehrere Werte ausfallen gehe ich eher von einem Übertragungsproblem auf der digitalen Schnittstelle aus. Wahrscheinlich gehen Frames verloren und ESPHome erfindet dann keine passenden Ersatzwerte. Könnte man bestimmt im Code nachlesen wenn Opensource, habe ich aber keine Lust dazu. Ansonsten wäre es ja merkwürdig dass die Werte alle null sind. Dann müsste man auch Mal andere Werte sehen oder Ausreißer nach oben... Edit: Typo
:
Bearbeitet durch User
Andreas B. schrieb: > Dann wuerde ich aber trotzdem mal eruieren woher diese Streuungen in der > Messung kommmen, anstatt an den Symptomen herumzuflicken. Wenn da wirklich an Stelle sinnvoller Messwerte irgendwelche "0V"-Werte auftauchen, hat das nichts mit Streuung von Messwerten zu tun. Da wird es höchste Zeit, direkt auf der seriellen Schnittstelle zu gucken, was der Victron Wechselrichters wirklich von sich gibt. Falls man dann zu der Erkenntnis kommt, dass die Daten mit den unsinnigen "0V" so vom Victron WR kommen, wird man nicht umhin kommen, sie heraus zu filtern, sonst ist die Software auf dem ESP schuld.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.