lumapu / ahoy

Various tools, examples, and documentation for communicating with Hoymiles microinverters
https://ahoydtu.de
Other
947 stars 222 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

Problem sind meine Nachbarn und eine mögliche Verbindung zum Netzbetreiber. Da habe ich lieber so wenig Einspeisung wie möglich. Im Sommer werden anstatt der Limitierung vom WR dann sowieso die Poolpumpe oder die Klimaanlage gesteuert.

Ollipop030 commented 1 year ago

@reserve85 Hab grad ein Issue in deinem Repo aufgemacht.

Ollipop030 commented 1 year ago

Ich lasse bei mir im Moment das Script von reserve85 laufen: https://github.com/reserve85/HoymilesZeroExport

Mit einigen Anpassungen läuft das super. Danke auch nochmal an @reserve85 für deine Hilfe. Im Moment läuft das auf einem Raspi, ist mir aber ehrlich gesagt zuviel an Geräten (Lesekopf, DTU. Raspi), für so eine einfach Aufgabe. @lumapu Könnte man das so oder ähnlich nicht in die DTU integegrieren? Oder ein Fenster, in dem man einfach sein eigenes python Script einfügen kann?

Adminius commented 1 year ago

@Ollipop030 hier ist alles in einem: https://github.com/helgeerbe/OpenDTU-OnBattery/tree/powerlimiter aber "leider" nicht Ahoy (ich werde es wohl nie verstehen warum man die zwei Projekte nicht in eins mergen möchte)...

Ollipop030 commented 1 year ago

Danke, erfordert aber MQTT, und Open DTU geht nur auf dem ESP32. Es soll ja möglichst einfach sein, Tasmota an den Zähler kleben, Ahoy einrichten und fertig.

Adminius commented 1 year ago

na gut, ob ESP32 oder ESP8266 ist relativ egal, kosten ähnlich um 5 Euro in china. ich habe SDM72/630 Support eingebaut (per RS485), wird bald in dieses Branch gemerged (kannst schon mal den PR anschauen). Danach kommt HTTP/JSON Schnittstelle für Zähler (da habe ich halt nichts daheim, deswegen müsste ich "blind" entwickeln)

Adminius commented 1 year ago

Hi @Ollipop030 nutzt du Shelly's original FW oder Tasmota? Hast du für mich Infos wie man an die Daten kommt und einen Response? ;)

Ollipop030 commented 1 year ago

Habe kein Shelly, ich habe einfach einen optischen Lesekopf (ist aber auch kein Tasmota). Aber lt. den Posts weiter oben scheinen die verschiedenen Leseköpfe alle json Daten auszuwerfen. Die Domäne und die Topics unterscheiden sich allerdings immer etwas.

reserve85 commented 1 year ago

bei Shelly kommst du auch mit einer WebAPI ganz easy drauf. siehe https://shelly-api-docs.shelly.cloud/gen1/#shelly-3em-emeter-index

Adminius commented 1 year ago

@reserve85 danke. also für 3 Phasen 3 abfragen... hm.

reserve85 commented 1 year ago

ggf. geht auch das hier: https://shelly-api-docs.shelly.cloud/gen1/#shelly-3em-status da steht total_power | number | Sum of the power of the three channels, Watts

kannste es ja einfach mal im browser eintippen und dann siehst du ja die Rückgabe

Adminius commented 1 year ago

ich habe keine Shelly, sonst müsste ich nicht fragen ;)

dtuuser commented 1 year ago

Ich hatte einen normalen Shelly vor dem WR. Original Firmware drauf...und alle zwei bis drei Wochen Spannungswerte jenseits von 255 Volt. Mit Reset. Diesen hatte ich per API Aufruf über die lokale IP ohne Cloud abgefragt. Sollte bei den wirklichen Verbrauchs-Shellys auch gehen. Mir war damals die Anschaffung von einem 3-em zu teuer. Daher 33 Eueo Tasmota WiFi Kopf am Zähler und immer die richtigen Werte.

Ollipop030 commented 1 year ago

Daher 33 Eueo Tasmota WiFi Kopf am Zähler und immer die richtigen Werte.

Und viel einfacher für Laien.

Adminius commented 1 year ago

ich fasse mal zusammen:

Es werden benötigt: 2x Eingabefelder für Benutzer={user}/Password={passapi} bzw. API. Diese Felder werden in die API als Platzhalter integriert 3x Eingabefelder für bis zu 3 Links (z.B. Shelly 3EM, pro Phase 1 Link) Es werden pro Link JsonPath benötigt um die Daten zu extrahieren: Ergebnisse werden zusammen addiert (wobei so klappt es mit 1.7.0 und 2.7.0 nicht, da die immer positiv sind...). Nicht befüllte Felder werden mit 0 W angenommen.

Beispiel Shelly: Link 1: http://12.34.56.78/emeter/0 JSON1: power

{
    "power": 115.4,
    "pf": 0.99,
    "current": 0.5,
    "voltage": 230.8,
    "is_valid": true,
    "total": 123,
    "total_returned": 56
}

Somit wird die Leistung von 115.4 Watt für Phase 1 angenommen, so 3 mal für jede Phase eingeben.

Beispiel Shelly 3EM alternative: Link 1: http://12.34.56.78/status JSON1: total_power

{
    "wifi_sta": {
        "connected": true,
        "ssid": "badhome",
        "ip": "192.168.70.176",
        "rssi": -78
    },
...
    "total_power": 7.49,
...
}

Beispiel mit User/Password (2x Mal gleicher Link, da man 2x Daten aus JSON braucht): Link 1: http://192.168.1.8/getLastData?user={user}&password={passapi} JSON1: 1.7.0

Link 2: http://192.168.1.8/getLastData?user={user}&password={passapi} JSON2: 2.7.0

Ich bin kein JSON Experte, wie kann man das hier eingeben? (wohl gar nicht, oder?) Was ist das für Zähler(adapter) @MubiTec ? StatusSNS/Haus/Power_curr

{
  "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
    }
  }
}

https://github.com/lumapu/ahoy/issues/606#issuecomment-1398692560

P.S. alternativ, könnte man nur ein Link eingeben aber 2-3 Daten aus JSON lesen, ich glaube mit 3 Links ist man flexibler: Z.B. wenn man für 3 Phasen 3 unterschiedliche einzel shellys nutzt

Noch ein EDIT: man muss also pro JSON Wert eingeben können ob 1:1 genommen wird, mit -1 multipliziert wird (1.7.0 + (-1)*2.7.0) und/oder durch 1000 geteilt wird (gibt es Zähler die in kW statt W die Daten ausgeben, wohl eher nicht?)

MubiTec commented 1 year ago

Wie oft würdet ihr denn ein neues Limit setzen? Hab das jetzt mal über mqtt alle 30Sekunden gemacht. Das funktioniert zwar aber ahoy ist so ausgelastet, dass keine Werte mehr von WR kommen. Wäre das über diese Lösung das gleiche?

Adminius commented 1 year ago

@MubiTec ,was hast du für einen Zähler(adapter)? kann man da "flacheren" und nicht so verschatelten JSON bekommen?

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}}}

Das ist das was ich raus bekomme. Hab das auch über tasmota sml gemacht. Ist ein norax 3d stromzähler

Ollipop030 commented 1 year ago

Und noch beachten, bei Tasmota Leseköpfen gibt es anscheinend keinen Wert für 2.7.0, sondern 1.7.0 (Power_curr) wird dann einfach negativ.

reserve85 commented 1 year ago

Nicht ganz richtig, das kommt auf den Zähler und das Script an welches auf tasmota läuft.

Ollipop030 commented 1 year ago

Wie oft würdet ihr denn ein neues Limit setzen?

Ich mache das alle 17 Sekunden, habe keine Probleme. Allerdings ohne MQTT.

MubiTec commented 1 year ago

Nicht ganz richtig, das kommt auf den Zähler und das Script an welches auf tasmota läuft.

Ja, das kann ich auch so bestätigen

Ollipop030 commented 1 year ago

Nicht ganz richtig, das kommt auf den Zähler und das Script an welches auf tasmota läuft.

Ja, das kann ich auch so bestätigen

Ah ok, danke für die Richtigstellung.

MubiTec commented 1 year ago

Wie oft würdet ihr denn ein neues Limit setzen?

Ich mache das alle 17 Sekunden, habe keine Probleme. Allerdings ohne MQTT.

Welche Version ahoy hast den denn? Hab die 0.5.66.viekkeicht liegt es daran?

pvstrom commented 1 year ago

@MubiTec Probiers mal mit höherer oder maximaler Sendeleistung und anderem Abfrageintervall.

Ich vermute eher, dass das mit den schlecht empfangbaren WR´s etwas aus dem Takt kommt

Adminius 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}

Na dann würde meine Idee gehen: Link1: http://12.34.56.78/cm?cmnd=status%208 JSON1: Watt_Summe

ich versuche es mal in OpenDTU einzubauen, vorbeireitet ist es dort schon: https://github.com/helgeerbe/OpenDTU-OnBattery/pull/102

Ollipop030 commented 1 year ago

Welche Version ahoy hast den denn? Hab die 0.5.66.viekkeicht liegt es daran?

Ich habe die 0.5.89, aber auf einem ESP32. Die sind einfach knackiger als die 8266.

MubiTec commented 1 year ago

@MubiTec Probiers mal mit höherer oder maximaler Sendeleistung und anderem Abfrageintervall.

Ich vermute eher, dass das mit den schlecht empfangbaren WR´s etwas aus dem Takt kommt

OK, probiere ich aus!

MubiTec commented 1 year ago

Welche Version ahoy hast den denn? Hab die 0.5.66.viekkeicht liegt es daran?

Ich habe die 0.5.89, aber auf einem ESP32. Die sind einfach knackiger als die 8266.

OK, und die können ihre Mehr Power auch nutzen? Wenns damit gehen sollte, dann steig ich auch gerne um. Hab hier glaub ich noch einen rum fliegen

Ollipop030 commented 1 year ago

Auf den 8266 habe ich nie eine höhere Uptime als vielleicht 2 Tage geschafft. Der ESP32 läuft hier locker länger. Habe aber die letzten Versionen auf den 8266 nicht mehr intensiv getestet.

dtuuser commented 1 year ago

Ich frage meinen Tasmota Wifi Kopf mit http://IP/?m ab und erhalte als Antwort

{t}{s} Verbrauch_Summe {m}12345.77 kWh{e}{s} Solareinspeisung_Summe {m}12.7345677 kWh{e}{s} Aktueller_Verbrauch {m}585 W{e}{s}-- {e}{s} Leistung_L1 {m}354.76 W{e}{s} Leistung_L2 {m}198.74 W{e}{s} Leistung_L3 {m}31.31 W{e}{s}-- {e}{s} Spannung_L1 {m}239.2 V{e}{s} Spannung_L2 {m}237.5 V{e}{s} Spannung_L3 {m}237.7 V{e}{t}ON

Bei Einspeisung wird der Wert "Aktueller_Verbrauch" negativ. Über CURL Aufruf schicke ich bei Bedarf alle 60 Sekunden das Limit an die Ahoy. Version 5.66

Adminius commented 1 year ago

ja können die. im Groben: WLAN läuft auf einem Core, der restliche Zeug auf dem anderen. Und das Ganze mit 240Mhz statt 160Mhz. Aber allein WLAN Teil macht viel aus.

berni2288 commented 1 year ago

Das Feature "New Power meter support: HTTP(S) + JSON (Shelly 3EM, Tasmota, Volkszähler etc.)" wurde jetzt in den development branch vom Projekt OpenDTU-OnBattery gemergt.

Wenn wer für ahoy da was abschauen möchte, kann er das gern machen :)

stefan123t commented 2 months ago

I just searched for the Shelly Pro3EM Power Meter and could not find the documentation on the Shelly Homepage (API and normal documentation). This openWB Wallbox forum post on the Shelly Pro 3EM pointed me into the right documentation:

Shelly API Docs > Gen 2+ Device API Components and Services > EM > EM.GetStatus example

Please consider to add an Example URL for Shelly Pro3EM which does not support /status URL but only RPC API URL as below:

http://shellypro3em-<mac-address>/rpc/Shelly.GetStatus

The JSON Path is em:0/total_act_power or em:0/a_act_power, em:0/b_act_power and em:0/c_act_power

The example JSON looks like this (reduced to the four elements):

{
  "em:0": {
    "a_act_power": 63.8,
    "b_act_power": -367.8,
    "c_act_power": 8.5,
    "total_act_power": -295.439
  }
}