lumapu / ahoy

Various tools, examples, and documentation for communicating with Hoymiles microinverters
https://ahoydtu.de
Other
948 stars 222 forks source link

Feature Request: Schwellwert für wichtige / dringende Werte wie P_AC, ähnlich Tasmota "Power Monitoring - PowerDelta<x>" #908

Open grericht opened 1 year ago

grericht commented 1 year ago

Hallo, bei Tasmota gibt es für mqtt ja die möglichkeit per Powerdelta sich häufiger/schneller bei Änderungen informieren zu lassen. Gibt es die Möglichkeit bei der AhoyDTU auch? Der Code hat doch sicher eine gewisse Nähe?

lumapu commented 1 year ago

die Daten werden immer im gleichen Interval ausgelesen. Dh. es gibt keine 'schnelleren' Daten. Wenn du einen ESP32 verwendest, sollte ein Abfrageinterval von 2-5 Sekunden drin sein.

grericht commented 1 year ago

Ich will ja auch keine schnelleren Daten. Ich will sie nur "bei Bedarf schneller senden". Ich bekomme aktuell die Daten alle 5sekunden vom Inverter. Aktuell gebe ich sie alle 10 Sekunden per mqtt eiter, da mein Tasmota SMI es auch nicht schneller schafft. Wenn es aber eine Schwankung gibt (Wolke zieht vor die SOnne) gibt es bei Tasmota die Funktion, die Daten bei "deutlicher" Änderung zum letzten Wert per powerdelta sofort weiter zu geben. Das macht hier doch auch SInn. Man könnte den Datenverkehr im Netz deutlich einschränken und nur noch alle 30Sekunden senden und dafür bei Änderungen über 10% sofort senden. Die Funktion gibt es aber nicht?

offtopic: leider wurde die bei dem SMI Tasmota Feature gesperrt. Weil wohl die Annahme ist, dass die SM nur den Zählerstand führen. Meiner hat aber halt auch den aktuellen Verbrauch. und den Sekündlich. Aber ich bekomme den nur alle 10Sekunden per mqtt gesendet.

rmayergfx commented 1 year ago

Alle 10sec ? Was möchtest du denn damit erreichen. Ganz ehrlich, was bringt es dir den Wert in so kurzen Intervallen zu erhalten. Wenn er dann noch vllt. in eine Datenbank geht wächst diese innerhalb kürzester Zeit unnötig an.

Möchtest du damit etwas in Echtzeit steuern?

grericht commented 1 year ago

klar will ich damit im besten fall in echtzeit steuern?! Es ist für mich die einzige Möglichkeit herauszubekommen wieviel Solarenergie ich aktuell produziere und damit will ich natürlich auch sachen steuern. ich wüsste auch nicht warum 10sekunden da zu schnell sein sollten. und auch die datenbank kann werte alle 10sekunden mehr als gut vertragen. manche loggen sekündlich!

und ganz grunlegend fühle ich mich immernoch sehr missverstanden. ich will gar nicht häufiger die daten. ich will sie nur BEI BEDARF schneller! wenn der tag keien wechselnden bewölkungen hat, dann sollte die produktion langsam ansteigen und dann langsam wieder sinken. da reicht mir auch einmal pro minute der wert. aber wenn eine wolke vor die sonne zieht, will ich den wert halt nicht erst 30 sekunden später. auch 10 sekunden können da sehr viel sein. häufiger will cih aber nicht einstellen, da ich dann viele sehr änliche werte bekomme. powerdelta ist dafür perfekt. daten alle 60 sekunden und bei änderungen über 10% sofort. ich verstehe gar nicht warum das hier nicht verstanden wird? nochmal: ich will eigentlich viel seltener daten in die datenbank schreiben. aber dafür halt vor allem werte die anders sind als der wert vorher.

rmayergfx commented 1 year ago

Ich habe es schon verstanden was du gerne möchtest, aus meiner Sicht wäre so eine Delta Abfrage aber auch wiederum nur sinnvoll, wenn man einen Schwellwert definieren kann, d.h. die Meldung geht erst raus wenn z.B. 50% Änderung gegenüber dem vorhergehenden Wert stattfindet. Nicht immer macht es doch auch Sinn im Sekundentakt Änderungen vorzunehmen. Was soll denn das Ziel sein? Möchtest du in Echtzeit gegen den Stromzähler steuern?

grericht commented 1 year ago

ich glaube die powerdelta funktion ist nicht verstanden. UNABHÄNGIG vom teleperiod zeitraum (also der zeitraum alle wieviel sekunden die aktuellen daten per mqtt geschickt werden) kann ein powerdelta festgelegt werden. dieses kann entweder in numerischer form oder in prozentgröße angegeben werden. powerdelta 1-100 = prozentuale änderung powerdelta 101 - unendlich = änderung um einen gewissen wert seit der letzten meldung + 100

heißt es gibt genau die gesuchte möglichkeit: teleperiod eher selten (zB nur einmal pro minute) und bei änderung im mehr als 1 watt oder mehr als 5% sofort die daten ins netzwerk. das funktioniert mit tasmota perfekt.

grericht commented 1 year ago

blöd ist auch bei ahoy dtu, dass dehr viele daten jedes mal übertragen werden. den tagesertrag zb bräuchte ich viel seltener. bzw. richtig oft brauche ich nur die watt auf der wechselspannungsseite. dort hätte ich gerne jede sekunde den wert

rmayergfx commented 1 year ago

Du darfst eines nicht vergessen. Die Daten werden vom WR zur Verfügung gestellt. In AhoyDTU stellst du dann das Abfrageintervall ein, per MQTT has du dann auch sofort die Werte. Was du dir wünschst wäre eine abgespeckte Abfrage, der dir z.B. nur die für dich Relevanten Werte aus dem WR ausliest und weitergibt. Und da stellt sich dann die Frage, ob das überhaupt mit der Firmware des WR möglich ist, oder es dort nur ein "Alles oder Nichts gibt". Daher verstehe ich nicht, wie willst du das Umsetzen. AhoyDTU kann doch gar nicht wissen ob sich ein Wert geändert hat oder nicht, sondern nur wenn der WR abgefragt wurde. Also müsstest du Prinzipiell jede Sekunde den WR abfragen und dann entscheiden was nun geschehen soll, aber da die Werte AhoyDTU nun vorliegen hat, kannst du sie auch per MQTT auslesen und mit einem Script z.B. in HA oder was auch immer weiterverarbeiten, du musst dann halt auch nur den(die) Werte abfragen die für dich sinnvoll sind.

Bereich MQTT: "Send Inverter data in a fixed interval, even if there is no change. A value of '0' disables the fixed interval. The data is published once it was successfully received from inverter. (default: 0)"

Dann muss der MQTT Broker die Daten noch Empfangen und verarbeiten bevor das Script aktiv werden kann. Damit ist schon einige Zeit verstrichen. Da kann man nicht mehr von Echtzeit reden, selbst wenn es per Ethernet statt WLAN umgesetzt würde. Die Reaktionszeiten sind durch die Kette viel zu lang. Du müsstest Idealerweise den Change direkt am WR abgreifen um damit sofort reagieren zu können, d.h. dein Steuergerät müsste sich ohne Umwege die Daten vom WR holen.

grericht commented 1 year ago

das habe ich bisher anders verstanden. ich stelle doch das abfrage und das mqtt sende intervall getrennt ein. ich könnte also zb jede sekunde vom wr abfragen und alle 30sekunden per mqtt senden+powerdelta bei zb 5% änderung. dann hätte ich die werte alle 30 sekunden oder wenn änderung nach maximal 1 sekunde. genau wie gewünscht. jetzt muss ich irgendwelche kompromisse eingehen

rmayergfx commented 1 year ago

Und welchen Wert hast du im MQTT Broker eingestellt? Ich sehe hier wirklich keinen Anwendungsfall das ich unbedingt mit einem Delta arbeiten müsste. Die Systeme haben doch sowieso eine gewisse Trägheit.

Schreib doch mal genau was du überhaupt machen möchtest, vllt. gibt es ja einen ganz anderen Weg der schneller und effizienter ist.

grericht commented 1 year ago

also nochmal (und ich verstehe immer noch nicht wie man das nicht verstehen kann) das szenario: ich lese meinen digitalen stromzähler mit einem ttl lesekopf an einem esp8266 mit tasmota aus. Ausgelesen werdne aktuelelr Verbrauch aller Phasen einzeln, gesamt und der Zählerstand aller phasen einzeln und gesamt. alle werte können (das ist tasmota eigen) in einem einstellbaren rythmus gesendet werden. Das schnellste sind 10Sekunden. Normalerweise bietet Tasmota noch die powerdelta variante. Dann kann je NACH EINSTELLBARER ÄNDERUNG (entweder nach veränderten W oder %) auch schneller/sofort der wert geschickt werden. Dieser ist (dummerweise) genau für die Smart Meter Interface Routine ausgeschaltet. Das häufigste sind deswegen 10Sekunden. AUßER: man kann auch für einzelne Werte festlegen, dass sie sofort nach Erhalt geschickt werden. Das habe ich für den aktuellen Gesamtverbrauch so eingestellt. Dieser wird also etwa sekündlich per mqtt der rest alle 10sekunden gesendet. Diese Werte lese ich in Home Assistant aus und verwende sie für andere Enditäten und Automatisierungen. Ich weiß also sekündlich ob und wieviel ich gerade ins Netz speise oder aus dem Netz beziehe.

Außerdem habe ich für mein Balkonkraftwerk mit hoymiles wr eine ahoy dtu. Diese ist aktuell so eingestellt, dass sie ich glaube alle 2 sekunden vom wr die aktuellen werte bekommt und ich glaube alle 10 sekunden per mqtt schickt. Für viele Automatisiereungen und berechnungen brauche ich nun die aktuelle Produktion und den Bezug. So möchte ich zum Beispiel gerne wissen wieviel aktuell im Haus Verbrauche. Das ist aktuell die Summe von Bezug und Produktion. Leider ist der eine Wert sekundlich und der andere Wert mit 10 Sekunden sehr selten und damit sehr oft ungenau. dass heißt, dass mein errechneter RealVerbrauch teilweise negativ ist, weil der Bezug schon bei -300W ist aber die Produktion im HomeAssitant noch bei 100W steht, weil es bis gerade bewölkt war.

Nun gibt es leider keine option entweder nur den aktuellen Produktionswert häufiger zu schicken (ok, ich könnte den häufiger einzeln anfragen glaube ich) oder bei genau dem wert einzustellen, dass dieser häufiger/schneller gesendet wird, wenn er sich deutlich ändert.

Es ist jetzt nicht so, dass dies für Automatisierungen großen einfluss hat, dass mal etwas erst 10sekunden später losgeht. Für die Statistik ist es aber sehr ungünstig/unschön wenn dort steht, dass ich zB einen Minimal Verbrauch an dem Tag im Negativen bereich hatte. Ich verbrauche ja zu jedem Zeitpunkt mind. 100W in meinem Haus.

Also entweder wäre es gut den P-DC Wert häufiger/schneller schicken zu lassen oder ioch muss ihn halt wilrich häufiger anfragen per mqtt. das sit danna ber der doppelte traffic.

grericht commented 1 year ago

auf die tasmotaoption powerdelta zurückzugreifen erscheint mir immernoch als super praktikabel. Ich hab bestimmt immer mal Statt Bezug Verbrauch geschrieben. Am SMI auslesen kann ich leider nur den aktuellen Bezug/Einspeisung. Und an der DTU die Produktion. Was ich im Haus an Strom tasächlich gerade Verbrauche kann ich nur berechnen

rmayergfx commented 1 year ago

Wir haben das alle schon längst verstanden, aber es ist wie ich dir oben schon geschrieben habe kein Echtzeit System. Je nachdem welcher MQTT Broker im Einsatz ist, kommst du auch nicht unter die 10sec, dann müssen die Daten noch berechnet/verabreitet werden. Daher wird es dir auch nichts bringen, wenn du einen einzelnen Wert im Sekundentakt abfragen könntest. Selbst wenn du mal einen Smartmeter bzw. digitalen Zähler eingebaut bekommst, so kannst du auch dort nur die Werte so schnell ablesen, wie sie der Hersteller des Systems freigibt. Was soll das mit der Statistik im Sekundenbereich? Wenn ich keine Steuerung in Echtzeit benötige, genügt doch eine Abfrage alle 30/60 sec., damit hält man die Datenmenge auch im Rahmen. Andernfalls kommt das System auch wieder ins stottern, da zu viele Daten vorliegen. Überlege mal, bei sekündlicher Abfrage hättest du pro Tag 86400 Einträge je Device, da kannst du auch gleich noch ein seperates Netzwerk dafür opfern.

dtuuser commented 1 year ago

Ich lese meinen Zähler mit einem Tasmota jede Sekunde per Webapi Aufruf ab, und meine HM600 per Webapi alle 20 Sekunden. Verarbeitung auf einem Windowsrechner. Dann wird bei Bedarf innerhalb von 10 Sekunden der WR über API gedrosselt. Nach der Drosselung findet die nächste Drosselung erst nach 60 Sekunden statt. So komme ich aktuell an einem Sonnentag auf maximal 300Watt Einspeisung. Seit Juni 2022 habe ich so bis jetzt 400KWh produziert, aber nur 31KWh eingespeist. An einem Sonnentag komme ich aber auf bis zu 180 Änderungen. Da ich kein mqtt nutze, habe ich aktuell Laufzeiten von bis zu 21 Tagen

grericht commented 1 year ago

"Wir haben das alle schon längst verstanden, aber ..." scheint nicht so: "Selbst wenn du mal einen Smartmeter bzw. digitalen Zähler eingebaut bekommst" ich habe längst einen digitalen Smart-Meter. Der Lesekopf liest die Werte etwas Sekündlich aus und der ESP8266 sendet genau einen Wert dort sekündlich per mqtt aus: meinen aktuellen Bezug/Einspeisung. Die anderen Werte reichen mir alle 30Sekunden.

Diese Geschichte von zu viel Datentrafic bei häufigerer Abfrage:

  1. reden wir hier von Daten im Byte oder kB Bereich. ich nehme nicht war, dass mein Home-Net hier ürgendwie überlastet ist
  2. (noch wichtiger) ich möchte weniger Daten ins Netz! Ich möchte genau einen Wert des Hoymiles WR/der AhoyDTU häufiger im Netz haben. Und zwar die aktuelle Produktion. Die gerne Sekündlich oder noch besser bei Änderungen über 1W (deswegen die powerdelta Anfrage - bei Tasmota geht das). Alle anderen Werte, die ich aktuell auch alle 10Sekunden einspeise reichen mir locker auch alle 30sek. INsgesamt würd eich also massiv Traffic sparen.

Und jetzt nochmal ganz konkret: Gibt es irgendwlche Möglichkeiten einzelne mqtt Werte häufiger als andere zu senden?

lumapu commented 1 year ago

nein die Daten per MqTT sind immer komplett, da diese auch nur komplett von Wechselrichter abgefragt werden können.

grericht commented 1 year ago

ok. jetzt sind wir quasi beim anfang. der ist zustand ist geklärt. und nun habe ich viele beiträge damit verbracht zu erklären, dass mir das feature, dass einzelne daten häufiger per mqtt gesendet werden könnten als andere sehr gut gefallen würde. ich meine es sogar ganz gut beschrieben zu haben warum das so ist. und ich glaube, dass es grundsätzlich möglich ist. bei tasmota ist es sogar möglich bedingungen festzulegen wie schnell einzelne werte gesendet werden sollen. mir wurde hier bisher erklärt, dass es dafür keinen bedarf gibt - das weise ich zurück! ich bräuchte den aktuellen power-wert deutlich häufiger als die anderen werte. ich glaube für andere wäre dieses feature auch interessant. oder mir wurder erklärt, dass dies zuviel traffic verusachen würde, was ich zurückweise, weil es mir darum geht WENIGER traffic zu produzieren. wenn ich nur einen wert häufig brauche, kann ich mir entweder alel werte häufig senden und zuviel traffic haben oder alle werte selten und die Anforderung nicht erfüllen. Ich will genau einen von 24 Werten so oft wie möglich und den Rest alle 60 sekunden statt jetzt alle 2 oder wie viele heir einstellen alle 10sekunden. Ich behaupte, dass die meisten nur P_AC so häufig brauchen.

wenn nun ein kleines bischen verständlich geworden ist worum es geht: kann man hoffen, dass dieses Feature irgendwann kommt?

grericht commented 1 year ago

nein die Daten per MqTT sind immer komplett, da diese auch nur komplett von Wechselrichter abgefragt werden können.

auch wenn ihr euch da gegenseitig daumen hoch gebt: die daten vom inverter zu bekommen und per mqtt zu senden sind doch zwei komplett getrennte dinge. der esp8266 bekommt die daten vom inverter (alle) und es ist technisch programmierbar (und aktuell auch einstellbar) wie oft er sie per mqtt weitergibt. beides sind doch mit sicherheit unterschiedliche skripte und es sollte technisch möglich sein in dass mqtt senden skript reinzuschreiben, dass der eine wert sooft und der andere wert sooft gesendet wird. welche werte wie oft gesendet werden könnte in der weboberfläche oder per console einstellbar sein.

rmayergfx commented 1 year ago

Ich verstehe deinen Standpunkt durchaus, es bringt aber rein gar nichts hier angesäuert zu reagieren. Geh in die Sourcen, schau es dir an und compiliere es selbst wenn es so immens wichtig für dich ist. Niemand sonst benötigt so etwas spezielles und es ergibt m.E. auch keinen Sinn so etwas zu machen, da die Systeme unabhängig davon eine gewisse Trägheit haben, bevor sie auf die Änderungen reagieren. Aus technischer Sicht ist das absolut sinnbefreit, du würdest ein System benötigen das die Daten vom WR in Echtzeit ohne Verzögerung weiterreicht, sinnvollerweise verdrahtet mit kurzen Wegen, damit auch keine Latzenz oder unnötiger Traffic auf irgendeinem Netz stattfindet. Gerade bei WLAN hast du bedingt durch das Protokoll und den Overhead immer eine gewisse Größe, egal ob du nun 1 oder 2 Werte übertragst. Hast du noch Störungen durch Fremdeinflüssse, werden die Pakete vllt. auch noch mehrfach übertragen und dann sind die Laufzeiten auch schon wieder höher. Ich möchte persönlich nichts im Netzwerk haben, was mir sekündlich Traffic verursacht. Das mag auch nicht jeder Router.

btw. mit den nächsten Generationen der WR wird das sich u.U. sowieso komplett erledigt haben, da die eingesetzen Firmware Releases und Hardware z.B. per Default nur noch alle 15 min die Daten in die Cloud schicken.

grericht commented 1 year ago

"Aus technischer Sicht ist das absolut sinnbefreit, du würdest ein System benötigen das die Daten vom WR in Echtzeit ohne Verzögerung weiterreicht" genau das geht übrigens mit Tasmota bei aktiviertem Smart Meter Interface. Hier kann ich im Script 16 zur "Genauigkeit" draufschlagen und schon wird dieser EINE Wert sofort nach Erhalt per MQTT gesendet. Bedeutet konkret, dass ich halt den aktuellen Verbrauch laut Smart Meter fast Sekundengenau im System verarbeiten kann. Da fände ich es schon schön den Solarproduktionswert vom Hoymiles auch sofort weiterzuleiten und nicht versucht zu sein alle fast 25Werte so oft wie möglich zu senden. Ich halte s für ein Gerücht, dass ich der einzige bin, der das nutzen würde. Es wäre eine Reduktion von Traffic. Auch deine Anderen Sachen halte ich für Gerüchte. Fast alle die HomeAssistant oder ioBroker nutzen wollen die Daten möglichst genau und damit auch Automatisierungen nutzen. Da macht 15Min gar keinen Sinn. Zumindest für die aktuelle Produktion. Der Rest kann gerne nur alle 15Min gesendet werden. würde mir sogar einmal am Tag reichen zu wissen wieviel ich insgesamt produziert habe. Die Anderen Dinge sidn einfach irgendwelche Ängste und Theorien die sich nicht praktisch nachweisen lassen. Mein System muss nicht in Echtzeit arbeiten. Macht es auch nicht. Aber ich hab aktuell fast alle Werte alle 2 Sekunden. Und würde einfach gerne 23Werte nur zB einmal pro Minute schicken. Wenn mal ein Wert übersprungen wird passiert genau gar nichts. Wüsste nicht warum ich das reduzieren sollte.

Aber gut, die ANtwort, dass es technisch möglich ist aber du mir nicht helfen magst hätte als Post 2 gut getan. Evtl werde ich die Frage nochmal in English neu stellen und schauen ob andere den P_AC Wert auch häufiger/Alle anderen Werte seltener senden wollen und sich jemand der Problemstellung annehmen mag.

rmayergfx commented 1 year ago

Willst du mit deinem Anliegen nun das Repository in allen Sprachen zumüllen? Ganz schlechte Idee. @lumapu hat dir oben bereits längst geantwortet was möglich ist und was nicht. Rate mal welche Sprache er spricht und woher er kommt....

grericht commented 1 year ago

nein. aber dieser thread ist leider aus verschiedenen gründen von anfang an sehr am Thema vorbei gegangen. Es gab am ANfang die Aussage gibts nicht und ist dann immer mehr zu würde gehen aber braucht niemand geworden. diese Aussage kommt von genau 2 Menschen. Und der Grund weswegen es nicht gebraucht wird ist, dass es zuviel Traffic produzieren würde und dieser ist obsolet.

Ich würde also gerne genau noch ein Thread eröffnen und fragen ob die Möglichkeit TRAFFIC ZU SPAREN indem alle Werte seltener und nur einzelne Werte häufiger gesendet werden können Interesse genießt und wenn ja ob er umsetzbar ist. Ich glaube es gibt Bedarf und für Leute am Code ist dieser einfach umsetzbar. Hier wird leider beides nicht deutlich und nachdem ihr versucht habt mir lange zu erklären, dass ich erstmal nen Smart Meter brauch, den ich lange hab, ist hier halt nichts mehr zu "gewinnen".

EDIT: ganz selbstkritisch habe ich einfach auch den falschen Titel gewählt. Ich halte powerdelta immernoch für eine schicke Variante diese Funktionalität bereitzustellen aber natürlich würde es auch reichen einzelne Werte mit iunterschiedlichen MQTT Sendezeiten zu verbinden.

EDIT2: habe gerade nochmal geschaut. Leider wurde dieser Thread hier lange auch nur verwendet genau dir zu erklären was powerdelta eigentlich bedeutet. Du hast dann immer mit irgedwelchen Trägheiten geantwortet. So leid es mir tut: aber wir reden hier von Trägheiten im digitalen Bereich. Die sind gering! Oder können gering sein, wenn alle Geräte ordentlich funktionieren.

rmayergfx commented 1 year ago

Ich habe schon von Anfang an genau verstanden was powerdelta ist. Ich habe dir nur versucht zu erklären, warum es nicht sinnvoll ist hier im Sekundentakt Werte im WLAN herumzureichen. Was geht und was nicht hat dir @lumapu aufgezeigt, er ist der Entwickler des Projektes und wenn dir diese Funktion unbedingt wichtig ist hast du verschiedene Optionen:

für mich ist das Thema erledigt, du kannst meinetwegen noch x-beliebige Threads dazu öffnen. Statt permanent hier auf eine Funktion von MQTT zu pochen hättest du den Einzelwert schon längst per REST Api einzeln auslesen können und weiterverarbeiten.

Als weiteren Bonus bekommst du noch diesen hier von mir: https://gitlab.com/p3605/hoymiles-tarnkappe

lumapu commented 1 year ago

Ich fasse den feature-request mal zusammen: Du willst bei einem fix eingestellten MqTT intervall (verschieden von 0) eine weitere Option haben, die es erlaubt prozentual festzulegen, dass schon früher gesendet wird. Es wird schnell komplex, daher die Frage an @grericht: Was soll Ahoy machen, wenn die Abweichung nur für einen Inverter zutrifft, darf dann trotzdem alles gesendet werden - das wäre das einfachste Szenario.

brcommander commented 1 year ago

Moin zusammen, bin gerade über diesen thread gestolpert, weil ich auch auf der Suche nach einer passenden Lösung bin. Ich hätte gerne im Prinzip auch die Option mit PowerDelta. Meine Konstellation: PV-Anlage liefert an einen SolarEdge Wechselrichter. Gleichzeitig habe ich noch ein Batteriesystem, das ebenfalls an einem (eigenen) Wechselrichter hängt. Da es leider so ist, dass ich zwar den Batterie-Wechselrichter und die Batterie per Modbus auslesen kann, nicht aber den "großen" Wechselrichter, der den PV-Strom vom Dach in Wechselstrom wandelt, bin ich für den Hausverbrauch auf den berechneten Wert aus der SolarEdge Monitoring Cloud angewiesen. Und das ist... naaaaajaaaaa. Aus diesem Grund habe ich mir nun einen Shelly Pro 3EM an die 3 Phasen des Haupt-WR geklemmt. Und der liefert mir (per Home-Assistant Integration) alle 3 Sekunden entsprechende Werte.

Weiterhin habe ich einen Hichi Lesekopf am EVU-Hauszähler. Darin werkelt ein ESP8266, was uns zu dem genannten Problem führt, dass der maximale Wert für Teleperiod auf 10 begrenzt ist, auch wenn der Lesekopf mind. alle 3 Sekunden aktuelle Werte liefert (kann man ja in der Tasmota Weboberfläche sehen)

Um nun meinen tatsächlichen Hausverbrauch (aktuelle Leistung) lokal zu berechnen, brauche ich folgende Daten:

  1. PV-Produktion NACH WR (damit ich auch wirklich die vorhandene Leistung ohne Wechselverluste habe) -> Shelly Pro 3EM
  2. Die Daten vom Batterie-WR (per Modbus): negativer Wert, wenn die Batterie geladen wird, entsprechend Positiv, wenn ich "Produktion" aus der Batterie habe
  3. Netz-Leistung, abgelesen per Lesekopf am Hauszähler: Negativ bei Einspeisung, positiv bei Bezug (= auch eine Art Produktion)

--> 1 + 2 + 3 = mein Nettoverbrauch im Haus

und hier ergibt sich das Problem: Wenn jetzt 1 und 2 im 3-Sekunden-Takt kommen, 3 (Netz) aber nur alle 10sek, dann ist die Berechnung nur alle 30 sek. richtig..

Soweit so gut / schlecht. Und ja, die Frage nach dem Sinn von so vielen Datenpunkten ist natürlich berechtigt. Dazu sei aber folgendes gesagt:

  1. Wenn man die Datenpunkte in einer InfluxDB speichert, dann kann man die später mitteln und damit weniger Datenpunkte aufberwahren (Stichwort "Retention Policy")
  2. Die Menge an Daten, die übers Netzwerk müssen hält sich in Grenzen (gefühlt macht da jeder PC, Smartphone etc. deutlich mehr Telemetrie, ohne dass ich das aber jetzt im Einzelfall nachgeprüft hätte).
  3. gibt es durchaus Anwendungen, für die korrekte und einigermaßen zeitnahe Informationen nötig sind. An der Stelle möchte jetzt keine (erneute) Diskussion auf machen, ob das wirklich so ist etc. pp. (z.B. zum Abschalten von sensiblen Geräten, wenn die Netzfrequenz einen gewissen Schwellenwert übersteigt...) Sagen wir einfach: auch ich möchte die Daten schneller im Home Assistant haben. Punkt.

Ja, ich bräuchte nicht in jeder Übermittlung alle bereitgestellten Daten wie SSID, Energie (kWh)... das würde tatsächlich auf deutlich seltener reichen. Aber gut, da kann man ja die Datenaufzeichnung nur bei Änderungen machen.

Aber: Im Fall des IR-Lesekopfs stehen die Daten ja relativ zeitnah bereit, sodass ich nicht erst abwarten muss, bis alle Sensoren abgearbeitet sind, was laut @arendst durchaus auch mal 4-5sek dauern kann und somit eine 3sek Teleperiod sinnfrei wäre.

Die Funktion PowerDelta klingt nach einer passenden Option für mich. Nur leider gibt es sie in der Tasmota-Variante für den 8266 im Standard nicht. Vielleicht kann man sich ja eine custom-Variante zusammenbauen, wo das wieder verfügbar ist, dafür andere Sachen wie Domoticz etc. wegfallen.

Was ich übrigens auch noch gelesen habe: es gibt ja die Regeln in Tasmota. Leider habe ich das noch nicht geschafft, die zum Laufen zu kriegen, aber damit könnte es funktionieren. Für Hinweise bin ich dankbar!

grericht commented 11 months ago

Ich fasse den feature-request mal zusammen: Du willst bei einem fix eingestellten MqTT intervall (verschieden von 0) eine weitere Option haben, die es erlaubt prozentual festzulegen, dass schon früher gesendet wird. Es wird schnell komplex, daher die Frage an @grericht: Was soll Ahoy machen, wenn die Abweichung nur für einen Inverter zutrifft, darf dann trotzdem alles gesendet werden - das wäre das einfachste Szenario.

Ja klar darf dann alles gesendet werden. Immernoch besser als alles ganz oft zu senden oder die daten meist zu spät zu bekommen. Ideal ist es aber nicht, da dann das ganze Paket wohl trotzdem sehr oft gesendet wird. Bei Tasmota kann man aber in der Console einstellen welche Daten bei welchem Powerdelta gesendet werden. Es ist sogar möglich einige Daten häufiger als andere und trotzdem zu anderen Zeiten als das ganze Paket zu senden. Das wäre natürlich ideal. Wenn selber bestimmt werden kann welche Daten es wie oft braucht. Ich zb nutze für die Momentanauswertung nur die p_ac werte der einzelnen Panele von zwei verschiedenen WR. Bekomme aber den ganzen Datensatz beider Inverter alle 2 Sekunden, da ich diese 4 Daten so oft brauche/möchte.

lumapu commented 11 months ago

aber es ist im Endeffekt doch nur Netzwerktraffik oder? Jedes Feld einzeln einstellbar zu machen, macht das ganze Konstrukt doch nur unnötig kompliziert.

grericht commented 11 months ago

ja ist nur netzwerktraffic. der widerrum soll ja von HA verarbeitet werden. und da macht es schon einen unterschied ob er oft alle daten bekommt oder nur alle 10min alle daten und die aktuelle produktion (in der regel 1-5 werte) häufiger. es muss ja auf dem server auch verarbeitet werden, gespeichert werden und nach ich glaube 11tagen auch wieder gelöscht werden. für mich würde bleiben: besser als jetzt aber ich könnte mir vorstellen, dass es umsetzbar ist entweder irgendwo einen hacken zu machen bei ☑"neben dem üblichen senderythmus zusätzlich bei:" ☑xxx "%änderung" oder ☑xxx"W Änderung" ☑"alle werte", ☑"p-ac aller panele einzeln", ☑"p-ac gesamt" senden

ich will damit nicht sagen, dass es einfach ist. Ich könnte es aktuell nicht umsetzen! ich wäre sehr dankbar und hätte großen respekt vor der leistung. Ich will nicht mitteilen, dass ich denke, dass diese funktion sehr sinnvoll wäre.

grericht commented 11 months ago

Bei tasmota funktioniert das über befehle in der console. Weiß aber nicht ob das bei ahoydtu auch umsetzbar ist. das hätte den scharm, dass die meisten (die die funktion wohl auch nicht brauchen) das menü nicht unübersichtlicher wird aber die funktion trotzdem zur verfügung steht. und wie gesagt: bei tasmota kann ich per konsolenbefehl für jeden wert einzeln festlegen ob er extra getriggert werden soll, wenn er entweder eine prozentuale oder bestimmte wertänderung erfährt. ich finde das nahezu perfekt gelöst.

stefan123t commented 8 months ago

Es geht also bei diesem Feature Request darum die Daten die regelmäßig per MQTT übertragen werden in zwei Klassen einzuteilen:

Hier ist das Feature / Command "PowerDelta" bei Tasmota beschrieben: Power Monitoring - PowerDelta https://tasmota.github.io/docs/Commands/#power-monitoring

PowerDelta Set maximum delta of phase a in energy monitoring devices to report on active power load change while the power is ON. PowerDelta will not report when the power turns off.  0 = disable reporting on power change 1..100 = set reporting on percentage power change to send an MQTT telemetry message 101..32000 = set reporting on absolute power change to send an MQTT telemetry message (offset by 100, e.g., 101=1W, 207=107W)

Da wir (bisher) keine Scripting Sprache wie Tasmota verwenden, ist es auch möglich eine derartigen Schwellwert (prozentual / absolut) auch ohne den bei Tasmota verwendeten Offset von 100 zu implementieren.

edit: ich habe einige der o.a. Thread Beiträge versteckt, da es hauptsächlich um die Sinnhaftigkeit des Features ging und nicht darum wie es umgesetzt werden könnte. Der Hinweis / Link auf die Tasmota Dokumentation sollte die Idee hinreichend klar beschreiben.

grericht commented 5 months ago

Ich wollte nur nochmal fragen, ob das Thema lösbar ist und es ein Interesse dafür gibt? Ich halte es immernoch für total sinnvoll nur die P-AC Werte (gesamt und evtl noch pro Wechselrichter) so oft wie möglich zu publishen und den Rest (viel) seltener. Ich werde es aber leider nicht umsetzen können glaube ich.