Sonnenbatterie Abfrage Api v2

Begonnen von Wondermusic, 02 Februar 2021, 11:10:27

Vorheriges Thema - Nächstes Thema

ch.eick

Zitat von: Wondermusic am 03 Februar 2021, 14:48:39
Set- Befehle gibt es bei der sonnenBatterie nicht, das nennt sich da PUT und POST, allerdings für Einstellungen die kein Mensch (Otto-Normal-Verbraucher) kennt...
mit einem HTTPMOD set Befehl kann man die http PUT oder POST absetzen.

Was gibt es denn da so alles? Eventuell kann man ja was Sinnvolles machen.

MinSoc,MaxSoc ?
Ladestrom ?
Ladung oder Entladung stoppen ?

Es wäre ja toll, wenn den Speicher zur Mittagszeit läd, damit man nicht in die 70% Abregelung kommt.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Wondermusic

#16
Also wirklich sinnvolle Dinge kann man derzeit wohl nicht eintragen... Hier mal die kleine Liste:






BefehlWirkung
/api/v2/setpoint/discharge/{watt}     - Sendet einen Entladebefehl an die Batterie
/api/v2/configurations     - Legt den Wert von folgenden Konfigurationen fest:
    EM_OperatingMode
    NVM_PfcFixedCosPhi
    NVM_PfcIsFixedCosPhiActive
    NVM_PfcIsFixedCosPhiLagging
    EM_ToU_Schedule
/api/v2/setpoint/charge/{watt}     - Sendet einen Ladebefehl an den Akku

Diese Regelung übernimmt sonnen, da ich jetzt auch in der sonnen Community bin.
Im letzten Jahr war ich noch bei meinem alten Stromanbieter und da habe ich sämtliche Großabnehmer so gesteuert, dass diese in der Mittagszeit angingen. Bin nur selten in die Abregelung gekommen...

Ich habe mal versucht die Konfiguration ins WIKI einzutragen, aber wegen einer Sache in einem, in meinen Augen, recht unübersichtlichen Bereich etwas zu schreiben, finde ich das übertrieben. Werde wohl kaum öfter in die Situation kommen das machen zu können.  ;)
Daher trage ich die funktionierende Definition im ersten Post ein. Wer schon einen Account für das Wiki hat kann es gerne eintragen.  :D

Vielen Dank noch mal für Deine Hilfe, jetzt läuft es super!  ;D

Gruß,
Richy
RPi 3B+ FHEM-Server mit HM-MOD-RPI-PCB
RPi2 mit HM-MOD-RPI-PCB
HM-CFG-LAN
RPi 4 mit ioBroker
>100 HM Sensoren & Aktoren, div. ESP8266 via mqtt, ems-esp

ch.eick

Zitat von: Wondermusic am 03 Februar 2021, 17:29:46
Also wirklich sinnvolle Dinge kann man derzeit wohl nicht eintragen... Hier mal die kleine Liste:






BefehlWirkung
/api/v2/setpoint/discharge/{watt}     - Sendet einen Entladebefehl an die Batterie
/api/v2/configurations     - Legt den Wert von folgenden Konfigurationen fest:
    EM_OperatingMode
    NVM_PfcFixedCosPhi
    NVM_PfcIsFixedCosPhiActive
    NVM_PfcIsFixedCosPhiLagging
    EM_ToU_Schedule
/api/v2/setpoint/charge/{watt}     - Sendet einen Ladebefehl an den Akku

Okay, das ist spartanisch :-)

Von der Konfiguration CosPhi solltest Du bitte die Finger lassen.

Mit charge/discharge könnte Du testen. Ich vermute, damit kannst Du festlegen, mit welcher Stärke geladen oder entladen wird.
charge 0 und discharge 0 würde ich mal ausprobieren, das könnte dann ein halten der Ladung sein.
Mit charge 150 wird der Speicher sicher das Laden beginnen.

So könnte man eventuell beeinflussen, das der Speicher erst am Mittag geladen wir, um oberhalb der 70% den Speicher zu füllen.

Aber das wirst Du sicher herausfinden :-)

Im Kostal Thread beschäftigen wir uns auch mit Speicher Laden und Leistungsprognose, das kann man sicher anpassen.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

So, wir kommen mit der Batterie Ansteuerung weiter, da ist sicher auch hier etwas von zugebrauchen.

z.B MinSOC, MaxSOC, 70% Regel mit Ladefenster

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

stonehope

#19
Hallo Zusammen,

ich teste auch gerade die API der Sonnenbatterie und möchte meine bisherigen Erfahrungen mit euch teilen:

Die Betriebsart kann über "EM_OperatingMode" gewählt werden.

Es gibt die Betriebsarten:
1 = manuell
2 = Eigenverbrauch
10 = Time of Use
? = 30% Batterieerweiterung

Schreiben der Daten:
curl -X PUT -d EM_OperatingMode= WertFürBetriebsart(1,2,10, ?) --header 'Auth-Token: AddYourTokenHere' http://ipdersonnenbatterie:80/api/v2/configurations

Lesen der aktuellen Betriebsart:
curl --header 'Auth-Token: AddYourTokenHere' http://ipdersonnenbatterie:80/api/v2/configurations/EM_OperatingMode


Für die Steuerung Time of Use - zur Steuerung des Ladeverhaltens über Zeitpläne - habe ich folgendes herausgefunden:

get data:
curl --header 'Auth-Token: AddYourTokenHere' http://ipdersonnenbatterie:80/api/v2/configurations/EM_ToU_Schedule

Liefert ein Objekt in dem folgenden Format:
{"EM_ToU_Schedule":"[{\"start\":\"22:00\",\"stop\":\"03:00\",\"threshold_p_max\":500},{\"start\":\"20:00\",\"stop\":\"22:00\",\"threshold_p_max\":0}]"}

Für jeden Zeitblock von start bis stop kann eine maximale Bezugsleistung aus dem Netz festgelegt werden. Die Batterie nutzt diesen Wert lädt ggfs. auch aus dem Netz, wenn der Netzbezug geringer ist als der eingestellte Schwell-/Grenzwert.

Für den Wert threshold_p_max=0 wird die Batterie nicht aus dem Netz sondern nur aus PV-Überschuss geladen.
Wichtig:
Während eines aktiven Zeitfensters wird die Batterie nicht(!) entladen.

Neue/Selbst erstellte Zeitpläne können wie folgt gesendet werden:
Nachricht:
curl -X PUT -d EM_ToU_Schedule="[{\"start\":\"22:00\",\"stop\":\"03:00\",\"threshold_p_max\":500},{\"start\":\"20:00\",\"stop\":\"22:00\",\"threshold_p_max\":0}]" --header 'Auth-Token: AddYourTokenHere' http://ipdersonnenbatterie:80/api/v2/configurations

Ich hoffe die Infos helfen bei deiner/eurer Weiterentwicklung.
Ich finde diese Funktion insbesondere für den Winter interessant um der Batterie den einen oder anderen Volladezyklus zu bescheren.
Die Kombination dieser Steuerungsfunktion mit zeitabhängigen Strompreisen (Tibber, awattar, o.ä.) scheint mir zumindest für die sonnenarme Jahreszeit auch recht interessant zu sein.

Viele Grüße,
Patrik

ch.eick

Moin,
mit dieser Information könnt Ihr das jetzt mit dem HTTPMOD Modul ins FHEM bringen.
JSON kann dort auch direkt geparsed werden und in unterschiedliche readings gespeichert werden.
Ein etwas komplexerse Beispiel einer Wechselrichter API findet Ihr z.B. hier RAW_Definition_des_WR_1_API

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Motivierte linke Hände

Herzlichen Dank für die tolle und sehr hilfreiche Arbeit in diesem Thread!
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

Dr.McKay

Zitat von: Benni am 03 Februar 2021, 11:06:44Hier mal noch die Rohdefinition meines HTTPMOD-Devices für den API V1-Abruf:

attr pvaBattery userReadings uCharging:BatteryCharging.* {(ReadingsVal($name,'BatteryCharging','x') eq 'true') ? 1:0 },\
uDischarging:BatteryDischarging.* {(ReadingsVal($name,'BatteryDischarging','x') eq 'true') ? 1:0},\
uGridFeedIn_Abs_W:GridFeedIn_W.* {abs(ReadingsNum($name,'GridFeedIn_W',0))},\
uPac_total_Abs_W:Pac_total_W.* {abs(ReadingsNum($name,'Pac_total_W',0))},\
uReturnCode:ReturnCode.* {my $rc=ReadingsNum($name,'ReturnCode',-1);; return $rc==0?'success':($rc==5?'invalid request path':($rc==13?'internal error':($rc==16?'invalid http method':'unknown')))}

<YourBatteryIP-Here> muss natürlich durch die passende IP deiner Batterie ersetzt werden ;)


Hallo Benni,

ich würde gerne den Code von userReadings verstehen. Was macht der genau? Könntest du den kurz erläutern?

Danke im Vorraus

Benni

Zitat von: Dr.McKay am 22 März 2023, 11:42:47ich würde gerne den Code von userReadings verstehen. Was macht der genau? Könntest du den kurz erläutern?

es werden 5 User-Readings erzeugt/berechnet:

uCharging
  -> bei Änderung des Readings BatteryCharging
  => Es wird auf den Wert 1 gesetzt, wenn in BatteryCharging true (als Text)  drin steht, ansonsten wird es auf 0 gesetzt.

uDischarging
  -> bei Änderung des Readings BatteryDischarging
  => Es wird auf den Wert 1 gesetzt, wenn in BatteryDisarging true (als Text)  drin steht, ansonsten wird es auf 0 gesetzt.

uGridFeedIn_Abs_W
  -> bei Änderung des Readings GridFeedIn_W
  => Es wird auf den Absolutwert von GridFeedIn_W gesetzt (also dessen wert ohne Vorzeichen)

uPac_total_Abs_W
  -> bei Änderung des Readings Pac_total_W
  => Es wird auf den Absolutwert von Pac_total_W gesetzt (also dessen wert ohne Vorzeichen)

uReturnCode
  -> bei Änderung des Readings ReturnCode
  => Die verschiedenen numerischen Return-Codes in ReturnCode werden in Klartext übersetzt:
        0  = success
        5  = invalid request path
        13 = internal error
        16 = invalid http method
        alles andere -> unknown

gb#

Dr.McKay

Danke für die Aufklärung :) , mir ist es zwar nach mehrmaligem Durchgehen des Codes selbst gelungen, das meiste zu entschlüsseln, aber das it dem ReturnCode war mir nicht klar, dass es auch ein Reading ist

cbl

Ich hänge mich mal an diesen alten Thread:

Ich nutze seit einigen Wochen die API V2-Abfrage mit latestdata und bin sehr zufrieden mit dem, was ich bekomme. Seit gestern Nachmittag bekomme ich nur noch einen Teil der Readings mit richtigen Werten geliefert. Ich war nicht zu Hause und habe selbst nichts verändert. Das letzte Sonnenupdate ist vom 05.07.2023 und zumindest öffentlich wird nicht beschrieben, dass sich an der API etwas geändert hat.

Mit 0 geliefert werden seit gestern Nachmittag GridFeedIn_W, womit SolarForecast und meine schicken Diagramme nicht mehr sehen, dass eingespeist wird.
Hat noch jemand dieses Problem oder eine Idee, wie ich wieder an den Wert komme?

Wenn ich statt latestdata "status" an der V1- oder V2-Api abrufe, sehe ich GridFeedIn_W mit den richtigen Werten.


Gruß
Christian