lumapu / ahoy

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

Feature Request: Tasmota Stromzähler Support in Ahoy #606

Open gandalfred opened 1 year ago

gandalfred commented 1 year ago

Hardware

Modelname: __ Retailer URL: __

nRF24L01+ Module

Antenna:

Power Stabilization:

Connection diagram:

Connection diagram I used:

nRF24L01+ Pin ESP8266 GPIO
Pin 1 GND [*] GND
Pin 2 +3.3V +3.3V
Pin 3 CE GPIO2 CE D4
Pin 4 CSN GPIO15 CS D8
Pin 5 SCK GPIO14 SCLK D5
Pin 6 MOSI GPIO13 MOSI D7
Pin 7 MISO GPIO12 MISO D6
Pin 8 IRQ GPIO0 IRQ D3

Note: [*] GND Pin 1 has a square mark on the nRF24L01+ module

Software

Version / Git SHA:

Version: ..__ Github Hash: ___

Build & Flash Method:

Desktop OS:

Debugging:

Hallo zusammen, Ich besitze einen Hichi Stromzähler im Stromkasten der über Tasmota den aktuellen Stand der Stromzähler 1.8.0 und 2.8.0 per WLAN auf einer separaten IP darstellen und ausgeben kann. Es wäre toll, wenn man im Ahoy die IP Adresse des Hichi Tasmota Stromzählers eintragen könnte und die Zählerstände 1.8.0 und 2.8.0 sowie der Momentanverbrauch würden im ahoy Web IF angezeigt ohne dass man sich mühsam einen ioBroker aufsetzen muss. So hätte man auf einen Blick alle Strom Verbrauchs-und Erzeugungswerte auf einen Blick in einer Anzeige. In einem weiteren Schritt könnte man so dann auch eine einfache Nulleinspeisung im Ahoy realisieren indem man den Momentanverbrauch minus momentan Erzeugter Strom rechnet und wenn das negativ ist man den WR entsprechend drosselt um Nulleinspeisung zu realisieren. Der erste Punkt wäre mir aber wichtiger alle Werte an einer Stelle auf einen Blick zu haben. Was meint ihr? Gruss Steve

dtuuser commented 1 year ago

Hallo Steve, habe ich auch so am Laufen. Ich frage die Werte über ein eigenes Tool per Webaufruf und Analyse der Webseite ab. Klappt auch vom Ahoy. Aktuell baue ich an der Logik, wie man das Limit berechnet. Es ist ja nicht damit getan, wenn der aktuelle Verbrauch ein Minuswert ist, dann setze das Limit am WR auf WRLimitWert minus Verbrauchswert. Sobald der aktuelle Verbrauch wieder im Plus ist, dann muss der WRLimitWert um den Pluswert erhöht werden. Und das WR Limit kann ja über einen gewissen Wert nicht hinaus. Sobald die Berechnung bei mir plausibel läuft, kann ich das hier posten.

tqma1 commented 1 year ago

2.8.0 ist die gesamte Einspeisung 2.7.0 ist die aktuelle Einspeisung - wäre cool hierfür ein Limit setzen zu können z.Bsp. max 150W

stefan123t commented 1 year ago

Klingt nach einem sehr guten Vorschlag. Welche Informationen braucht es denn um den Hichi ESP direkt dirch die AhoyDTU abfragen zu können ? Da müsste doch im Prinzip der Endpoint als URL genügen bzw. vielleicht noch der Name des gesuchten Wertes den kann man ja im Hichi/ Tasmota Script beliebig benennen. Wegen der Null oder Maximal-Einspeisung siehe auch #605

dtuuser commented 1 year ago

Aufruf http://IPvomHichi/cm?cmnd=status%208 bringt das als Rückmeldung

{
  "Verbrauch_Summe":1234.56,
  "Einspeisung_Summe":123.45678,
  "Watt_Summe":620,
  "Watt_L1":373.66,
  "Watt_L2":141.66,
  "Watt_L3":104.23,
  "Volt_L1":237.8,
  "Volt_L2":237.2,
  "Volt_L3":236.2
}
}
}

Watt_Summe ist der aktuelle Verbrauch. Bei Einspeisung als Minuswert

MubiTec commented 1 year ago

Echt coole Idee. Mit http://192.168.178.94/cm?cmnd=status%2010 Bekommt man alle Daten als json:

{
  "StatusSNS":{
    "Time":"2023-01-20T18:14:40",
    "Haus":{
      "Total_in":9935.7223,
      "Total_out":11022.9129,
      "Power_curr":444,
      "Volt_p1":231.4,
      "Volt_p2":230.6,
      "Volt_p3":232.4,
      "Amperage_p1":0.9,
      "Amperage_p2":2.4,
      "Amperage_p3":0.5,
      "phase_angle_p1":-63.0,
      "phase_angle_p2":-51.0,
      "phase_angle_p3":-71.0,
      "frequency":51
    }
  }
}
MubiTec commented 1 year ago

Aufruf http:///cm?cmnd=status%208 bringt das als Rückmeldung {"Verbrauch_Summe":1234.56,"Einspeisung_Summe":123.45678,"Watt_Summe":620,"Watt_L1":373.66,"Watt_L2":141.66,"Watt_L3":104.23,"Volt_L1":237.8,"Volt_L2":237.2,"Volt_L3":236.2}}}

Watt_Summe ist der aktuelle Verbrauch. Bei Einspeisung als Minuswert

Ok, du warst schneller 😅

dtuuser commented 1 year ago

Unter Windows habe ich ein eigenes Tool geschrieben, was die Daten vom Hichi und von Ahoy abrufen. Nur beim Limit setzen, da muss die genaue Logik noch her. Aber das Setzen vom Limit klappt schon über Curl #586

tqma1 commented 1 year ago

Bitte bei der Abfrage flexibel bleiben da Tasmota nicht die alleinige Lösung sein soll, da es die Entschlüsselung der Daten nicht kann ... Bei mir sieht es so aus (RestAPI) Hardware:SHRDZM http://192.168.1.8/getLastData?user=xxxxxxx&password=yyyyy Ergebnis:

{
  "1.8.0":"17708776",
  "2.8.0":"2",
  "3.8.1":"59644",
  "4.8.1":"4552041",
  "1.7.0":"237",
  "2.7.0":"0",
  "3.7.0":"0",
  "4.7.0":"158",
  "1.128.0":"0",
  "uptime":"0000:00:09:13"
}
Ollipop030 commented 1 year ago

Ich habe einen emlog Lesekopf, wie in #604 schon beschrieben. Hier kommt beim Zugriff auf http://192.168.0.18/pages/getinformation.php?heute&meterindex=1" das hier raus:

{
  "Leistung170":475,
  "Leistung171":0,
  "Leistung172":0,
  "Leistung173":0,
  "Leistung270":0,
  "Leistung271":0,
  "Leistung272":0,
  "Leistung273":0,
  "Waehrung":"EUR",
  "Stand300":null,
  "M300":0,
  "Stand180":0,
  "Stand181":0,
  "Stand182":0,
  "Stand280":0,
  "Stand281":0,
  "Stand282":0,
  "Kwh180":0,
  "Kwh181":0,
  "Kwh182":0,
  "Kwh280":0,
  "Kwh281":0,
  "Kwh282":0,
  "Kwh300":0,
  "Betrag180":0,
  "Betrag181":0,
  "Betrag182":0,
  "Betrag280":0,
  "Betrag281":0,
  "Betrag282":0,
  "Betrag300":0,
  "Metertype":"Strom"
}

Wäre es dann bei der Anzahl an unterschiedlicher Hardware nicht am einfachsten, in der DTU die Adresse mit den json Daten anzugeben, und jeweils den relevanten Wert für 1.7.0 und 2.7.0?

Adminius commented 1 year ago

Hi @dtuuser mag du schon deinen zwischenstand teilen. Dann muss ich das Rad nicht neu entwickelten. Ich habe ähnliches vor nur mit anderem "Zähler" #605

dtuuser commented 1 year ago

Hallo Adminius, Werte von beiden Geräten kann ich abrufen und gehen in die Berechnung. Aktuell teste ich mit dem Grenzwert von 400Watt, da ich seit November keine Einspeisung bekomme. Gestern habe ich laut meiner Abfrage keine Werte unterschritten, was eigentlich nicht sein kann. Ich kann meine Abfrage später hier posten. Vielleicht habe ich etwas übersehen.

gandalfred commented 1 year ago

Servus Jungs, cool dass es hier soviele Rückmeldungen gibt und ihr schon an entsprechenden Lösungen bastelt. Da es verschiedene Zähler gibt die unterschiedliche Werte ausgeben können wäre es super wenn das generisch berücksichtigt werden könnte. Mein Stromzähler kann zb nur 1.8.0 aktueller Zählerstand Bezug , 2.8.0 bisheriger eingespeiste Leistung und den Momantanverbrauch aufsaldiert anzeigen Er gibt bei mir aber nicht die einzelnen Phasenleistungen an den hichi mit aus. Zähler ist ein easymeter q3b.

dtuuser commented 1 year ago

Hallo Adminius, bitte nicht erschlagen..... aber ich bin Oldschool..daher VB Code Die 700 sind für einen HM-700

Das führe ich alle 5 Minuten aus. Da die Limit Änderung bei mir erst 3 Minuten nach dem Setzen, in Ahoy angezeigt wird

z = aktuellerverbrauch 'kommt vom Zähler über Hichi wr2 = einspeisungwr2 'kommt vom Ahoy If z < 0 Then 'wenn aktueller Verbrauch < 0...also EInspeisung If wr2 + z > 10 Then 'wenn erzeugte Leiszung + (negativen Zählerwert) >10 die 10 habe ich als Minimum Limit limit_wr2 = wr2 + z ' dann Limit vom WR = aktuelle Erzeugung + (negativem Zählerwert) Else ' falls WR2 + (negativem Zählerwert) <10 limit_wr2 = 10 ' dann Limit WR auf 10 End If End If ' ab hier, falls ein Limit am WR eingestellt wurde If wr2 < z And limit_wr2_set < 700 Then ' aktuelle Erzeugung < aktuellen Verbrauch und das Limit am WR <700
limit_wr2 = z ' Limit WR = aktuellen Verbrauch If limit_wr2 > 700 Then limit_wr2 = 700 ' falls Limit WR > 700 dann Limit WR auf 700 setzen End If

If limit_wr2_set <> limit_wr2 And limit_wr2_set < 700 Then ' Prüfung, ob Limit <700 und es einen Unterschied zur vorherigen Prüfung gibt limit_wr2_set = Round(limit_wr2, 0) ' falls ja, dann neues Limit auf den berechneten Wert

danach die Ausgabezeile mit dem neuen Limit_Wr2_set Wert erzeugen und in der Shell starten.

stefan123t commented 1 year ago

Power Limit Regelung per MQTT auf einem separaten ESP in #618

tqma1 commented 1 year ago

Na ja, da bin ich persönlich nicht der größte Fan von …

Cool wäre doch folgendes Szenario: Im HM-xxxx ein persistentes Limit hinterlegt (z.BSP. HM 1500 / Limit 600 Watt) => Ich habe mein Balkonkraftwerk angemeldet und Speise in schlimmsten Fall 600 Watt ein.

Funktioniert ohne irgend welche Abhängigkeiten immer!

Jetzt die coole Ahoy Nummer: Wir passenden Richtung Nulleinspeisung das Limit an. Muss alles über einen Controller laufen, da wir ansonsten wieder falsch ausgeregelte Zustände haben ….

stefan123t commented 1 year ago

Also wir brauchen die Endpoint URL (evtl. mit Basic Authentication Username + Password):

Und dann sollen wir zwei Werte auslesen:

D.h. hier brauchen wir jeweils einen JSON-Filter Ausdruck mit dem wir das gesuchte Element zur Laufzeit anpassen können.

Aus den beiden Werten berechnen wir den aktuell temporär zusätzlich steuernden ActivePowerLimit Wert (non-persistent).

Außerdem müssen wir uns einen permanenten Wert für das ActivePowerLimit Wert (persistent) merken, damit wir z.B. eine dauerhafte Grundlast einspeisen können oder die aktuell erlaubten 600W/800W auch einspeisen. Wer hier eine Nulleinspeisung benötigt, damit er keine Vertragsstrafe bezahlen muss, setzt diesen Wert einfach auf 0W.

Ollipop030 commented 1 year ago

Was aber auch berücksichtigt werden sollte sind Anlagen bestehend aus mehreren Wechselrichtern. Hier wird die Berechnung des Limits komplizierter. Vielleicht kann man dann auf Basis der Modulleistung ein Limit berechnen, wobei dann die Verlustleisung nicht einberechnet wird. Oder man verteilt die Leistung über die Anzahl der Module. Beispiel: 1 Modul am HM300, und vier am HM1500. Jetzt werden 250 Watt benötigt, der HM300 lässt 50 Watt durch, und der HM1500 lässt 200 Watt durch.

Adminius commented 1 year ago

es könnten auch HM300 = 250W und HM1500 = 0W sein. Evtl. ist es vom Wirkungsgrad sogar besser. Wie die Module gedreht sind ist aber eine andere (komplexe) Sache...

Einfachere Alternative wäre: Prozentual von der Leistung: 300+1500 = 1800W sind 100% Leistung. 250W wären dann 14%. => HM300 42W HM1500 210W

Ollipop030 commented 1 year ago

Ja klingt gut. Und auf diesem Wert wird dann noch der Wert für die Einspeisung gerechnet, wenn denn jmd einspeisen möchte. Ich selbst würde vielleicht immer 100Watt einspeisen, nur als Puffer. 600Watt sind angemeldet, also sagt auch der Netzbetreiber nichts wenn im Jahr bei 2.8.0 ein paar kWh dazukommen. Mit Modulausrichtungen würde das ganze gigantische Ausmaße annehmen. Dann müsste mach auch Aufstellwinkel, Modulart und Verschattungen einbeziehen.

gandalfred commented 1 year ago

Bräuchten wir nicht auch noch 1.7.0 aktueller Momentanverbrauch power consumption ? 1.8.0 wäre der aktuelle Zählerstand Bezug bzw Verbrauch 2.8.0 wäre der aktuelle Zählerstand Einspeisung

Ollipop030 commented 1 year ago

Bräuchten wir nicht auch noch 1.7.0 aktueller Momentanverbrauch power consumption ?

Ja das stimmt. Hatte stefan123t ja geschrieben.

dtuuser commented 1 year ago

Bräuchten wir nicht auch noch 1.7.0 aktueller Momentanverbrauch power consumption ? 1.8.0 wäre der aktuelle Zählerstand Bezug bzw Verbrauch 2.8.0 wäre der aktuelle Zählerstand Einspeisung

Eigentlich reicht doch der momentane Verbrauch, da dieser Wert bei Einspeisung doch negativ wird. Oder ist das zählerabhängig?

Adminius commented 1 year ago

Mein Zähler sagt dann 0 Verbrauch und wird nicht negativ. D.h. man braucht am besten Einspeiseleistung und Verbrauchsleistung oder muss sich anhand von Verbrauchsleistung an die 0 rantasten...

Ollipop030 commented 1 year ago

Das ist tatsächlich Zählerabhängig. Bei mir geht der Bezug (1.7.0) auf Null, gleichzeitig steigt aber die Einspeisung (2.7.0). Es gibt Zähler, die zeigen dann minus. Einige Zähler zeigen sogar Leistungen auf den einzelnen Phasen an. 1.7.0 und 2.7.0 ist einfach der saldierte Wert der drei Phasen.

Adminius commented 1 year ago

ich meine es ist sogar eindeutig definiert: 1.7.0 aktueller Verbrauch in kW (Wirkleistung) aus dem Netz 2.7.0 aktuelle Einspeisung in kW (Wirkleistung) in das Netz d.h. die o.g. Werte sind immer positiv ("Rücklaufsperre"), aber nie gleichzeitig.

Genauso wie der Zählerstand immer positiv ist: 1.8.0 Verbrauch Summe in kWh (Wirkarbeit) 2.8.0 Einspeisung Summe in kWh (Wirkarbeit) in das Netz

Omega13x commented 1 year ago

Hallo, ich habe mal ein Anliegen an die Entwickler. Ich habe erfolgreich drei funktionierende DTU´s zusammengebaut (Den Elko habe ich gehuldigt 😉 ). An meinem modernen Stromzähler habe ich ein Powerfox Poweropti-LED der mir die Zählerdaten auf das Smartphone schickt. Auf der Homepage von Powerfox habe ich gesehen das man die Daten über eine Kunden API abrufen kann. Ist es möglich diese Daten irgendwie für eine Einspeiseregelung mit der Ahoy-DTU zu nutzen? Ich selber habe von so was null Ahnung. Deswegen wäre eine Lösung ohne zusätzliche Hardware optimal.

Die aktuellen Daten lassen sich mit diesem Link anzeigen: "https://backend.powerfox.energy/api/2.0/my/main/current" in Watt oder mit diesem: "https://backend.powerfox.energy/api/2.0/my/main/current?unit=kwh" in KW auslesen. Hier die Ausgabe: {"Outdated":false,"Watt":242,"Timestamp":1674510379,"A_Plus":641566,"A_Minus":68938} W Hier die Ausgabe: {"Outdated":false,"Watt":238,"Timestamp":1674511571,"A_Plus":641.648,"A_Minus":68.938} KW

Hier noch ein Auszug aus der Bedienungsanleitung des Powerfox.

Auszug Powerfox-Manual

stefan123t commented 1 year ago

@Omega13x die Anleitung für die API findet sich hier: https://www.powerfox.energy/wp-content/uploads/2020/05/powerfox-Kunden-API.pdf

Eventuell lässt es sich ja mit der selben Strategie wie die Tasmota Geräte einbinden ? Andererseits sind es closed source und hardware Geräte die hier folglich nicht an erster Stelle stehen.

Adminius commented 1 year ago

@Omega13x größtes Problem bei online Schnittstellen sind die Abfrageintervalle. Beispiel: SmartMeter sollen nur alle 15 Minuten die Zählerstände übermitteln -> Sinnlos für Nulleinspeisung, wo wir in 1-10S Bereich sind...

@stefan123t Eine Idee: man kann einen Scriptinterpreter (z.B. für Lua) integrieren. Dann kann man eigene Abfragen von eigenen APIs in eigenen Formaten auseinander nehmen und an die Bestimmte "Empfangspunkte" des Ahoy übergeben. Ich stelle mir es so vor: Ahoy hat eine Funktion die aktuelle Bezugs- und Einspeiseleistung empfängt oder sogar nur eine Leistung positiv wie negativ. Nulleinspeiseberechnungen sind auch mit drin. D.h. der User soll nur diese Funktion aus eigenem Script oder aus eigenem Code in der Loopschleife aufrufen und mit Daten füttern.

Omega13x commented 1 year ago

@Adminius Moin, beim Powerfox werden die aktuellen Verbrauchs- und Einspeisedaten alle 5 Sekunden aktualisiert.

Adminius commented 1 year ago

oh cool! D.h. man kann die auch alle 5 Sekunden abfragen, oder? Das würde dann passen.

Omega13x commented 1 year ago

oh cool! D.h. man kann die auch alle 5 Sekunden abfragen, oder? Das würde dann passen.

Ja, genau.

dtuuser commented 1 year ago

Mein Hichi fragt jede Sekunde ab und stellt diese per Weboberfläche dar

Verbrauch_Summe 12345.25 kWh
Solareinspeisung_Summe  12.5502177 kWh
Aktueller_Verbrauch 515 W
--
Leistung_L1 348.65 W
Leistung_L2 119.57 W
Leistung_L3 46.53 W
--
Spannung_L1 238.1 V
Spannung_L2 238.4 V
Spannung_L3 237.8 V
pvstrom commented 1 year ago

es könnten auch HM300 = 250W und HM1500 = 0W sein. Evtl. ist es vom Wirkungsgrad sogar besser. Wie die Module gedreht sind ist aber eine andere (komplexe) Sache...

Einfachere Alternative wäre: Prozentual von der Leistung: 300+1500 = 1800W sind 100% Leistung. 250W wären dann 14%. => HM300 42W HM1500 210W

Wäre eine Priorisierung nicht einfacher? Z.b. Nutzer wählt aus, dass HM300 zuerst gedrosselt wird, dann der HM-15000 und der HM-600 gar nicht. Erst wenn wenn die Drosselung des HM300 nicht ausreicht wird auch der HM-1500 gedrosselt.

Im Optimalfall dann sogar noch mit einem Zeitplan zu Minimal- und Maximalwert der Drosselung und evtl. auch noch in Abhängigkeit der Eingangspannungen (DC-Seite). Wenn z.b. der HM-300 an direkt an einer Batterie betrieben wird, macht es Sinn den zuerst den zu drosseln oder zeitlich über einen Zeitplan z.b. unter tags grundsätzlich auf 0% zu stellen und evtl. für Batteriebetrieb andere Limits zu setzen (PV max. +600 Batterie max -50W). Bei zu geringer Batteriespannung ware eine automatische Abschaltung (Limitierung auf 0%) und Anschaltung (wenn Akku voll) zudem auch nicht schlecht.

Ich habe jetzt schon mehrere gesehen, die ihre Hoymiles mit Pylontechs verwenden wollen, wäre daher evtl. nicht ganz unintressant.

Nur die Umsetzung mit dem Hichi Lesekopf dürfte etwas schwierig werden. Hier liefert jeder Zähler andere Werte, die dann vom verwenden Script auch noch unterschiedlich benannt werden. Bei mir (MT175 mit unverändertem Tasmota Script) ist die aktuelle saldierte Leistung "P:" und geht bei Einspeisung ins Negative. Alternativ zusätzlich zum NRF2401L+ Modul noch ein UART to RS485 Modul für einen SDM630 zu verwenden dürfte hier evtl. einsteigerfreundlicher sein.

Adminius commented 1 year ago

Statt SDM630 könnte man SDM72 nehmen. Export Power hat er auch, kostet aber nur die Hälfte. Bei der Lösung ist man aber aber an einen Elektriker gebunden. Sogar wenn man CT-Variante von dem Zähler nimmt, braucht man alle 3 Phasen um die Spannung zu kennen.

Das ist ja der Grund warum ich mit ESP32+ADC+CT-Sensoren experimentiere #605 . Die Klemmen um die Zuleitung wickeln, 5V Netzteil in die Steckdose stecken und fertig. Kein Elektriker, aber halt nicht so genau.

Wäre eine Priorisierung nicht einfacher?

aus meiner Sicht nein. In meiner Lösung muss man nur % aus der Gesamleistung (diese muss man eingeben oder automatisch ermitteln) ausrechnen und diese % an die WRs direkt senden. In deiner Lösung (auch wenn ich die bevorzugen würde) muss man viel einstellen und viel Logik schreiben. Man muss klein anfangen und dann ausbauen ;) Auch ich habe HM600 am Akku ;)

pvstrom commented 1 year ago

SDM72 wäre natürlich auch eine Alternative. Wäre jetzt mal davon ausgegangen dass entweder bereits wie oftmals bereits ein SDM630 vorhanden ist oder sich ein SDM630/SDM72 schnell montieren lässt ( WR-Leistung >600W sollte auch jemand mit Ahnung anschließen). Damit wäre das Problem der unterschiedlichen Ausgabe mit den Leseköpfen umgangen. Zumal rücklaufgesperrte Ferraris oftmals auch gar nicht getauscht werden.

In deiner Lösung (auch wenn ich die bevorzugen würde) muss man viel einstellen und viel Logik schreiben

Viel Aufwand aber auch viel Gewinn. Grob mal als erstes Hirngespinst ...

Überschuss#0: Power Einspeisung – Power Einsspeiselimit#0 ( > Einspeiselimit BatterieWR z.b. -10W) Überschuss#1: Power Einspeisung – Reduzierung#0 – Power Einspeiselimit#1 (> Einspeiselimit PVWR z.b. +600W) Überschuss#2: Power Einspeisung – Reduzierung#0 – Reduzierung #1 – Power Einspeiselimit#1

Wenn Überschuss#0 > 10 dann Reduzierung#0 WR#0 um (Überschuss#0) oder wenn (Überschuss#0 >WR#0Pac dann Reduzierung um WR#0Pac) Wenn Überschuss#1 > 10 dann Reduzierung WR#1 um (Überschuss#1) oder wenn (Überschuss#1 > WR#1Pac dann Reduzierung um WR#1Pac Wenn Überschuss#2 > 10 dann Reduzierung WR#2 um (Überschuss#2) oder wenn (Überschuss#2 > WR#2Pac dann Reduzierung um WR#2Pac

Unterschuss#PV: Netzbezug + Einspeiselimit#1 Unterschuss#Batt: Netzbezug + Einspeiselimit#0

Wenn Unterschuss#PV > 1 dann LeistungserhöhungWR#2 um (Unterschuss#PV) oder wenn (Unterschuss#PV > WR#2maxP dann Leistungserhöhung auf >WR#2maxP Wenn Unterschuss#PVaktualisiert > 1 dann LeistungserhöhungWR#1 um (Unterschuss#PVaktualisiert) oder wenn (Unterschuss#PVaktualisiert > WR#1maxP dann >Leistungserhöhung auf WR#1maxP)

Wenn Unterschuss#Batt > 1 über Hysterese X LeistungserhöhungWR#0 um (Unterschuss#Batt) oder wenn (Unterschuss#Batt> WR#0Limit dann Leistungserhöhung auf >WR#0Limit

Mal schauen, da lässt sich evtl. #618 anpassen. Oder ich probiers mal logosoftmäßig auf NodeRed. Oder vll. wirds einfach ein faules fixes Limit :)

Auch ich habe HM600 am Akku ;)

Soweit bin ich noch gar nicht. Meine hängen derzeit noch an den Modulen, da ich eig. mit geregeltem Ladegerät>Akku>HM-300 arbeiten wollte.

Adminius commented 1 year ago

so oder so brauchen wir offizielle Stelle im Code wo man eigene Zeller und die Abfragen dazu implementieren kann. Die Stelle sollte aktuelle Daten vom Wechselrichter liefern, aber auch Limit-Wert und Limit-Typ empfangen und setzen können. alles andere dürfen die Nutzer selbst implementieren, egal ob SDM72/630, Shelly oder was auch immer. @stefan123t so wie es ausschaut, bekommt das Thema langsam höhere Prio. was denkst?

stefan123t commented 1 year ago

Die Abfrage des Tasmota ist eigentlich relativ einfach. Man braucht nur die richtigen Topics aus der JSON Antwort selektieren. Dafür kann man neben der URL noch zwei Topics für Einspeiseleistung und Bezugsleistung vorsehen. Analog dazu könnte man auch die selben Daten per MQTT vorerst beim Mosquitto Broker subscribe und so indirekt beziehen.

Die Logik / Berechnung für das zu setzende PowerLimit sollte man sich evtl nochmal überlegen. Dass man manche WR (die ihren Strom von einem Akku beziehen) in eine eigene "Prio"-Gruppe packt die erst dann eingeschaltet / hochgefahren wird wenn der Bedarf durch die andere WR-Gruppe nicht mehr gedeckt wird (zB Nachts) wäre ja einfach und logisch.

Das andere ist die Entscheidung wieviel jeder WR einer Gruppe einspeisen darf. Hier sollte jeder WR das Maximum einspeisen dürfen bis das Gesamtlimit (0W/600W/800W/Unlimited) erreicht wird. Wie anderweitig schon besprochen regelt die Hoymiles Software das in 30W Schritten jeweils rauf / runter bis das Optimum erreicht wird. Dabei sind zB auch Ost/West Anlagen o.a. durch Beschattung, Bewölkung / Ausrichtung zeitweise indirekt limitierte WR zu berücksichtigen.

Der Vorschlag das in NodeRed zu machen wurde mW bereits umgesetzt dazu bitte mal im Discord unter #ess-speichersysteme nachlesen.

Hier geht es also vorrangig um den einfachen Fall die Einspeise- und Verbrauchsdaten per REST API URL und zwei JSON Elementen bzw deren JPath zu ermitteln und ggf so das Limit für einen (oder auch für mehrere) WR zu limitieren.

Das Thema der Limitierung von mehreren WR würde ich sogar erstmal zurückstellen und hier nur den einfachsten Fall angehen.

Für die Modbus RS485 Schnittstelle existiert ebenso ein anderes Issue #431.

zanycam commented 1 year ago

Hi, hier (https://github.com/tbnobody/OpenDTU/discussions/406#discussion-4625886 ) hat jemand gute Ideen für die Umsetzung der Steuerung für eine Nulleinspeisung über mehrere WR (mittels MQTT) dargelegt, ist davon was vielleicht hier mit brauchbar als Umsetzungsgrundlage?

VG, Sandy

zanycam commented 1 year ago

Edit: Link vergessen >•<

https://github.com/tbnobody/OpenDTU/discussions/406#discussion-4625886

reserve85 commented 1 year ago

Da ich hier gerade drübergestolpert bin: ich habe die Nulleinspeisung mit Tasmota und Ahoy relativ einfach über die WebAPI realisiert. Funktioniert bei mir wunderbar, mein aktueller Stromverbrauchszähler wird allerdings negativ wenn ich einspeise (P=-123W). Evtl kann jemand damit was anfangen: https://github.com/reserve85/HoymilesZeroExport Ich habe das Script auf einem Raspi laufen.

Der Zielwert ist nicht genau bei 0 Watt sondern bei -75Watt, damit immer etwas reserve da ist und nicht immer nachgeregelt werden muss. _NULL_einspeisung ist es also nicht ganz, für mich ist das so aber vollkommen ausreichend. Sobald der Zähler positiv wird, gehe ich wieder auf 100% Limit und regel dann von unten wieder hoch. Damit hatte ich das beste Ergebnis.

IMG_E0135

Ollipop030 commented 1 year ago

Schön zu sehen, das man es mit einem so einfach Script hinbekommt. Wenn es jetzt noch in Ahoy eingebaut wird, und ein wenig variabel gehalten wird (Eingabemaske mit URL, Variablenamen) sind wir ja einen großen Schritt weiter.

Die Maximalleistung des WR könnte man noch über die Seriennummer des WR ermitteln.

dtuuser commented 1 year ago

Kurze Rückmeldung. Meinen WR steuere ich seit ein paar Tagen über ein eigenes Programm. Zwei weitere Programme "sammeln" die Daten von der AhoyDTU bzw. vom Tasmota Zähler und speichern die in meiner Registry zwischen. Mit der folgenden Abfrage klappt das recht gut. Heute nur 20W "verschenkt", da ich noch 5 Minuten zwischen den Curl Aufrufen warte.

'Z = Aktueller Zählerverbrauch. Bei meinem Zähler bei Einspeisung -123 'WR = aktuelle Erzeugung 'limit_wr_set = zu letzt gesetztes Limit 'limit_wr = berechnet Limit

If z < 0 And limit_wr_set > 10 Then limit_wr = wr + z If limit_wr < 10 Then limit_wr = 10 End If

If z > 0 And limit_wr_set < 600 And wr + 20 > limit_wr_set Then limit_wr = wr + z If limit_wr > 600 Then limit_wr = 600 End If

'30 Minuten vor Sonnenuntergang das Limit auf 600W setzen If aktuelletagesminuten > Val((sonnenunterganginminuten) - 30) Then limit_wr = 600 End If

If limit_wr_set <> limit_wr And limit_wr_set <= (600) Then Limit mit "curl -i -X POST -H .....limit_nonpersistent_absolute.... & limit_wr_set" an ahoyDTU schicken

Ollipop030 commented 1 year ago

Mal eine Frage zu deinem Programm: Worauf laufen die Programme bei dir? Raspi? Windows Maschine? Vielleicht könntest du uns ja daran Teil haben lassen.

dtuuser commented 1 year ago

Laufen auf einem 24/7 Windows Rechner und sind in Oldschool VB6 programmiert

Ollipop030 commented 1 year ago

Würdest du mir/uns das zur Verfügung stellen? Falls nicht versteh ich das, ist ja deins.

reserve85 commented 1 year ago

Wäre auch froh wenn mein Script noch jemand testen könnte. Benötigt halt installiertes Python

dtuuser commented 1 year ago

Ein Programm liest vom Tasmota per Webseitenaufruf den aktuellen Stromverbrauch (bei mir bei Einspeisung Minuswert) und speichert den in der Registry. Ein weiteres Programm liest vom Ahoy per Webseitenaufruf die Einspeisung aus und speichert den aktuellen Wert in der Registry. Auf beide Registry-Werte greift das 3.Programm zu und berechnet über einen Timer den obigen Quellcode. Z = Registry Wert für den aktuellen Verbrauch, WR = Registry Wert die aktuelle Erzeugung Daraus berechnet sich das zu setzende Limit, welches vor dem CURL Aufruf noch auf eine Ungleichheit zum letzten gesetzten Limit Wert geprüft wird. Der Timer wird nach einem CURL Aufruf 5 Minuten pausiert, da die Umstellung vom Limit auf dem WR bei mir meistens erst nach 3 Minuten umgesetzt ist.

Laut Herrn Habeck, sollen wir ja angeblich zukünftig jedes eingespeiste KW vom Verbrauch abgezogen bekommen, demnach entfällt irgendwann die Nulleinspeisung. Und einen Akku braucht man auch nicht mehr ;-)

reserve85 commented 1 year ago

Aber der Hoymiles reagiert doch direkt auf das Limit-Kommando. Das dauert bei meinen Beobachtungen gefühlt keine 3 Sekunden bis er das neue Limit eingestellt hat. Mit einem 5-Minuten Timer klappt das doch nicht, was passiert wenn du ein Verbraucher anschaltest? Dann ist im schlechtesten Fall der Hoymiles noch weitere 5 Minuten limitiert obwohl du vom Netzbetreiber beziehst?

dtuuser commented 1 year ago

Ich frage alle 60 Sekunden die WR Werte mit Ahoy ab. Im ungünstigsten Fall wird der neue Limit Wert 59 Sekunden vor der nächsten Ahoy Kommunikation an die AhoyDtu geschickt. Dann warte ich auf das Feedback vom WR, ob das Limit gesetzt wurde. So komme ich auf bis zu 3 Minuten. Wenn ich das Ahoy Intervall auf 15 Sekunden setze, dann könnte ich auf eine Minute kommen. Mir ist aktuell wichtig, dass ich nicht zu viel einspeise. Habe im letzten Jahr seit Ende Juni 270KW produziert und 20 davon eingespeist.

reserve85 commented 1 year ago

Interessanter Gedanke, mir wäre es allerdings wichtiger das Maximum an der Eigennutzung rauszuholen anstelle möglichst nix einzuspeisen. Die 20kwh sind doch Peanuts?