@monokristallin Alles klar! Ich plane auch gerade so ein System und war bisserl am stöbern, was ich für eine Batterie einsetzen will. Dachte letztlich auch auf 24V zu gehen und mir den Boost Up zu sparen - einfach um mir dort die Verluste zu sparen. Aber mit deinen Informationen habe ich jetzt nochmal in den Wechselrichter geschaut und da habe ich echt ein Problem. Der hat zwei Eingänge mit 16-60V und max. kontinuierlichem Strom 11.5A - also selbst wenn ich von der Batterie auf beide Eingänge aufteile bin ich nur bei 23A - das wären dann ja max. 24V*23A=552W - damit könnte ich ohne Boost Up die 600W nicht mal voll ausreizen. Und ganz so am Limit will man ja eh nicht unbedingt arbeiten. Also vielen Dank für die Info - kann sein das ich dann sogar mit nem Boost arbeiten muss!
Tatsächlich werde ich meine Zellen auch nur bis 3.0V entladen und käme dann auch auf 24V.
Hier meine Überlegung zu dem Thema:
Insgesamt muss man mal rechnen, wieviel kWh man denn so vom Dach holt. Hast Du wenig Verbrauch und 3kWp auf dem Dach, dann sind 500W etwas wenig, stimmt. Ich habe momentan nur 1kWp und ein Verbrauch von mehr als 500W kommt über den Tag nur sehr selten vor. Mein Akku hat jetzt (etwas überdimensioniert) etwas über 7kWh. Somit reicht eine Einspeiseleistung von 500W vollkommen aus. Denn was hast Du davon, wenn Du den Wasserkocher voll mir Strom versorgst, Dir aber dann un 2h Nachts der Akku leer läuft. Sollte ich noch mehr Solarleistung bekommen, werde ich den Teil meines Python Skriptes aktivieren, dar mit bei einem Verbauch von mehr als 1000W (ein/aus) noch einen kleinen 310W-WR dazuschaltet. Z.B immer dann, wenn der Geschirrspüler 20min lang mit 2000W vor sich hin heizt. Macht aber derzeit bei mir noch keinen Sinn, weil ich meine gesammelte Energie eben auch so, mit 500W Maximaleinspeisung, los werde.
Hallo Christian,
......
im Browser aufrufen:
http://"IP-Adresse-raspi":1880 -dann oben rechts das Menü aufklappen, Import Flow DPM8624.json, danach Übernahme(deploy) anklicken
http://"IP-Adresse-raspi":1880/ui/ -dann max.Spannung und max.Strom eingeben, Ein/Aus Schalter mit Maus betätigen. Dann sollte die Anzeige am DPM8624 die Spannung anzeigen, wenn ein Verbraucher dranhängt auch den Strom.
Hi Christian, ne Frage, in welchem Knoten wird denn der USB Port für den Modbus eingestellt? sehe das nicht und bin Nodered einsteiger.
Danke VG
Hallo,
ich bin auch neu hier und habe dieses Forum über die Arduino Lib für den DPM86XX gefunden. Ich kann mit meinem Arduino float Werte von einem Poti einlesen und an den DC/DC Limiter über die TTL-Schnittstelle weiter geben. Leider muss ich den DPM immer einmal für 0,5s ausschalten und dann wieder einschalten wenn ich den Wert ändern möchte. Was schon mal jemand an dieser Stelle? Und kann einen Weg sagen, wie ich dem DPM Werte übermittel kann ohne einmal converter.power(false); aufzurufen?
#include <DPM8600.h> DPM8600 converter; float v_res; float strom; int sensorValue = 0; void setup() { Serial.begin(9600); // Initating power converter converter.begin(Serial); converter.power(true); // Setting both Voltage and Current to 2V and 0.1A respectively converter.writeVC(2, 0.1); } void loop() { // Turn on the power converter.power(true); delay(5); sensorValue = analogRead(A0); Serial.println(sensorValue); //Spaß Werte v_res =sensorValue*0.01; strom= sensorValue * 0.005; //v_res = map(sensorValue, 0, 1023, 5.0, 40.0); Serial.print("v= "); Serial.println(v_res); Serial.print("i= "); Serial.println(strom); // Read voltage if we want to. // Measurements should be taken at least 0.5s after power on, as converter needs time to adjust converter.writeVC(v_res, strom); // Turn off the power delay(5000); converter.power(false); delay(5); }
Hallo,
hast du schon eine Lösung gefunden? Wenn nicht, welchen Arduino nutzt du? Du brauchst auf jeden Fall zwei serielle Schnittstellen, eine für die Datenübertragung zum DPM und eine zur Kommunikation mit dem Rechner, der die die Werte über das Serielle Terminal ausgibt.
Ich würde sagen, in dem angehängten Script schickst Du auch die anderen seriellen Ausgaben zum DPM...
Ich nutze daher einen Arduino Mega, der 4 serielle Schnittstellen hat. Eine wird für die Kommunikation über USB gebraucht, die anderen 3 sind verfügbar. Damit funktioniert der DPM einwandfrei!
Viele Grüße,
steve
Hallo zusammen,
ich habe ein kleines Problem mit dem DPM8624-485.
Und zwar schwankt der Ausgang ( V/Amp) ziemlich stark unter Last..
Eingang ist von einer 48V Lithium und Super Stabil. Ausgang tanzt wie ein wilder 🙁
Ich denke das ist nicht Normal, oder ?
Meine allgemeine Frage, ist denn hier schon jemand mit einem DPM86XX und Regelung über einen Raspberry mit RS485 im Dauerbetrieb?
Könnte das oben genannte Pulsen nicht dadurch verhindert werden, wenn man mit dem DPM86XX den WR oberhalb seiner MPPT Spannung versorgen würde?
Andreas
Ich vermute, dass das nur heißt, dass der Inverter innerhalb dieses Bereichs den MPPT sucht. Zumindest zeigen das einige Versuche von diesem Video: 24V DIY LiFePO4 Nachteinspeisung Teil 2: Verschiedene Anschlussmöglichkeiten ( dann eben kein Link, einfach den Titel zu YouTube kopieren... )
Aber das hängt vermutlich auch vom verwendeten Wechselrichter ab. Hat da jemand andere Erfahrungen gemacht?
Mich würde außerdem interessieren, wie man bei diesem Setup (PV --> LC --> (Batterie || DPM) --> WR) vermeidet, dass die Batterie unnötig oft entladen wird. Theoretisch braucht man doch irgend einen niederohmigen Pfad von PV direkt zum DPM um das ständige Be- und Entladen der Batterie im obersten Spannungsbereich zu verhindern, oder sehe ich das falsch? Ist das bei LFP-Akkus kein Problem mehr?
@stc danke das werde ich mal ausprobieren.
Ich habe einen arduino Uno verwendet. Kann sein, das er damit Stress hat.
gehört hier wohl auch in die Sammlung: man kann das Teil auch über Tasmota Script auslesen und steuern.. leider nur auf der Weboberfläche steuern, per MQTT kommen Spannung / Strom etc. .
Ich hab allerdings nicht die 485-Version
Also Tasmota mit diesen Optionen in der user_config compilen
#ifndef USE_WEBSERVER #define USE_WEBSERVER #endif #ifndef USE_SCRIPT #define USE_SCRIPT #endif #ifndef USE_SCRIPT_WEB_DISPLAY #define USE_SCRIPT_WEB_DISPLAY #endif #ifndef USE_SML_M #define USE_SML_M #endif #ifndef USE_SML_SCRIPT_CMD #define USE_SML_SCRIPT_CMD #endif #ifdef USE_RULES #undef USE_RULES #endif #ifndef SUPPORT_MQTT_EVENT #define SUPPORT_MQTT_EVENT #endif #ifndef USE_SCRIPT_SUB_COMMAND #define USE_SCRIPT_SUB_COMMAND #endif
Auf WEMOS D1 mini flashen, D1/D2 und GND mit dem DPM8650 (in meinem Fall) verbinden, Modus 5CS- auf 1 stellen. Unter Edit Script das hier unten einfügen und aktivieren:
>D Vmax=60 Cmax=24 v=0 ;store device voltage state (targeted) V=0 ;store WebUI voltage state (targeted) c=0 ;store device current state (targeted) C=0 ;store WebUI current state (targeted) sw=0 ;store device switch state SW=0 ;store WebUI switch state rV="01060000" ;ModBus register (voltage) vV="" ;store hex value of V to append to rV rC="01060001" ;ModBus register (current) vC="" ;store hex value of C to append to rC rSW="01060002000" ;ModBus register (switch) vSW="" ;store hex value of SW to append to rSW >B tper=10 smlj=0 ;disable publishing at MQTT teleperiod, on boot ->sensor53 r >R smlj=0 ;disable publishing at MQTT teleperiod, on reboot >S if upsecs>30 then smlj=1 ;re-enable publishing at MQTT teleperiod, after boot endif >W bu(SW "DPM ON" "DPM OFF") ;toggle switch via WebUI nm(0.0 60.0 0.01 V "DPM out (V)" 200 2) ;set voltage output via WebUI nm(0.0 24.0 0.01 C "DPM out (A)" 200 2) ;set current output via WebUI >T sw=DC#sSwitch ;load switch state from ModBus variable >M v=DC#sVolt ;load voltage state from ModBus variable >M c=DC#sCur ;load voltage state from ModBus variable >M if ((chg[sw]>0) and (SW!=sw)) ;update WebUI based on physical input (switch) then SW=sw endif if ((chg[v]>0) and (V!=v)) ;update WebUI based on physical input (voltage) then V=v endif if ((chg[c]>0) and (C!=c)) ;update WebUI based on physical input (current) then C=c endif if chg[V]>0 ;update ModBus register based on WebUI input (voltage) then if V>Vmax ;prevent out of bound value (voltage max) then V=Vmax endif if V<0 ;prevent out of bound value (voltage min) then V=0 endif vV=rV+sb(hx((V*100)) 4 4) sml(1 3 vV) endif if chg[C]>0 ;update ModBus register based on WebUI input (current) then if C>Cmax ;prevent out of bound value (current max) then C=Cmax ;prevent out of bound value (current min) endif if C<0 then C=0 endif vC=rC+sb(hx((C*1000)) 4 4) sml(1 3 vC) endif if ((chg[SW]>0) and (sw!=SW) ;update ModBus register based on WebUI input (switch) then vSW=rSW+s(SW) sml(1 3 vSW) endif >M 1 +1,4,m,16,9600,DC,5,2,010300000001,010300010001,010300020001,010310010001,010310020001 ;ModBus register taken from JT-DPM86XX_Communication_protocol_2022-07-06.pdf provided by Joy-IT 1,010302SSssxxxx@i0:100,Voltage (set),V,sVolt,2 1,010302SSssxxxx@i1:1000,Current (set),A,sCur,2 1,010302SSssxxxx@i2:1,Switch (set),,sSwitch,0 1,010302SSssxxxx@i3:100,Voltage (disp),V,dVolt,2 1,010302SSssxxxx@i4:1000,Current (disp),A,vCur,2 #
jetzt brauche ich nur noch jemand, der die WEBOberfläche-Eingabe (Zeilen mit nM) in MQTT Eingaben umwandelt, und schön wäre eine automatische Steuerung möglich
oder hat jemals jemand das hier zum laufen gebracht? https://github.com/d4rken/jt-dpm8600-psu-mqtt
@ste2k gibt es irdendwelche Besonderheiten die man beachten müsste?
Hab meinen WEMOS nach der Anweisung eingestellt, bekomme aber keine Daten vom DPM gesendet bzw. empfangen?
@aloishockenschlohe Hallo Alois,
ich habe Deine Bash-Scripte auf github zur Ansteuerung eines DPM86xx genau angeschaut und z.T. ausprobiert (bisher "nur" auf einem Linux-Notebook, scheint ganz gut zu funktionieren).
(Mein Plan ist, den DPM86xx zeitabhängig anzusteuern...)
Dazu nun einige Fragen:
- Was ist der Grund auf Python umzusteigen? Sind die bash-Scripte in der Praxis zu instabil?
- Im Script dpm86.sh wird am Anfang eine Funktion/Datei ./basic-functions aufgerufen - diese ist nicht dokumentiert und liegt nicht mit ab... was steckt dahinter?
'Hoffe Du liest hier mit - dank Dir für eine Antwort
Übrigens, ich habe einen DPM8608-485 von Ali bestellt und mich jetzt doch dagegen entschieden. Wenn jemand aus Frankfurt/Wiesbaden/Mainz kommt und Interesse an dem Teil hat könnten wir auch ein wenig zusammen basteln, Software kann ich.
Hallo, gibt es denn schon eine Option ohne die Adapter-Platine zu empfangen und zu steuern? Oder hab ich vielleicht nicht genau gelesen? Hab momentan den vom DPM8624-485 mit mitgelieferten USB-Anschluss an einen Raspberry 2 angeschlossen. Wird auch soweit erkannt. Weiter komme ich jedoch nicht.
... Update am frühen morgen ...
Die Kommunikation läuft jetzt. Hab doch nicht aufmerksam gelesen. Der gelieferte USB-Anschluss ist schon ein TTL/RS485 Adapter. In deinem Python-Script hast du oben bei "Be aware" gut beschrieben, dass Protokoll auf "0" bleiben soll (The power supply has to be set to "simple protocol"). Das war bei mir das Problem.
Also alles immer genau lesen!!!
... tolles Forum
Hallo zusammen,
ich belebe diesen Thread hier wieder um keinen neuen zu eröffnen.
Ich probiere aktuell den DPM8624-485 mit Arduino anzusteuern. Das ganze ist noch ein Trockenversuch ohne angeschlossene PV.
Angeschlossen ist der DPM über einen Seriellen Port am Arduino MEGA. Ich nutze den RS485 Adapter auf TTL und die DPM8600.h Library.Sämtliche write Befehle funktionieren gut und ich kann Problemlos an/aus schalten und spannung/strom vorgeben. Aber read liefert kein Ergebnis. Der Empfang scheint einfach tot.
Hat jemand Vorschläge, was ich probieren kann? Danke
Hallo zusammen,
ich habe die letzten Wochen mal meinen Wemos D1 mit dem Script zum Laufen gebracht und habe auch versucht mit Tasmota einige Erfahrungen zu sammeln.
Dem Script habe ich MQTT-seitig nachgeholfen, indem ich folgendes als >B Sektion eingebaut habe:
>B smlj=0 ;disable publishing at MQTT teleperiod, on boot ->sensor53 r if mqtts>0 then =#publish endif #publish +>Subscribe V, tele/%Name des eigenen MQTT Gerätes%/SENSOR/sVolt, msg +>Subscribe C, tele/%Name des eigenen MQTT Gerätes%/SENSOR/sCur, msg +>Subscribe SW, tele/%Name des eigenen MQTT Gerätes%/SENSOR/sSwitch, msg
Dadurch habe ich den Workaround geschaffen, dass ich zumindest per MQTT Explorer z.B. im jeweiligen topic
Topic: tele/tasmota_owndevice/SENSOR/sVolt/ Message: {"msg":"12.00"} Topic: tele/tasmota_owndevice/SENSOR/sCur/ Message: {"msg":"5.00"} Topic: tele/tasmota_owndevice/SENSOR/sSwitch/ Message: {"msg":1}
alles soweit steuern kann. Mein Wissen zu mqtt und tasmota ist noch sehr begrenzt und mir ist bewusst, dass dies nicht die schöne Art ist, aber bislang das Beste, was ich so googeln konnte. Am Liebsten würde ich gerne in tasmota den DPM8624 als Device anlegen und per eigener Firmware als Device im Home Assistant auftreten lassen. Aber ich konnte leider weder so eine tasmota device Konfiguration finden, noch in HA irgendwelche Geräte, wo die Entitäten Inputfelder haben. Den Switch könnte man ja noch vielleicht hinbekommen, aber so schöne Eingabe- / StepUp- / StepDown- Felder wie auf der Weboberfläche?!
Egal. Ich hoffe, dass dies hier irgendjemand nützlich findet.
Da das komplette Script mit Änderungen zu groß ist, habe ich einige Kommentare gelöscht und komplett sieht es dann wie folgt aus (wobei der Name des MQTT-Devices noch angepasst werden muss)
>D Vmax=60 ; Cmax=24 ; v=0 ;store device voltage state (targeted) V=0 ;store WebUI voltage state (targeted) c=0 ;store device current state (targeted) C=0 ;store WebUI current state (targeted) sw=0 ;store device switch state SW=0 ;store WebUI switch state rV="01060000" ;ModBus register (voltage) vV="" ;store hex value of V to append to rV rC="01060001" ;ModBus register (current) vC="" ;store hex value of C to append to rC rSW="01060002000" ;ModBus register (switch) vSW="" ;store hex value of SW to append to rSW >B tper=60 smlj=0 ->sensor53 r if mqtts>0 then =#publish endif #publish +>Subscribe V, tele/%Name des eigenen MQTT Gerätes%/SENSOR/sVolt, msg +>Subscribe C, tele/%Name des eigenen MQTT Gerätes%/SENSOR/sCur, msg +>Subscribe SW, tele/%Name des eigenen MQTT Gerätes%/SENSOR/sSwitch, msg >R smlj=0 >S if upsecs>3 then smlj=1 ;re-enable publishing at MQTT teleperiod, after boot endif >W bu(SW "DPM 8624 ON" "DPM 8624 OFF") nm(0.0 60.0 0.01 V "DPM Ausgang (V)" 200 2) nm(0.0 24.0 0.01 C "DPM Ausgang (A)" 200 2) >T sw=DC#sSwitch ;load switch state from ModBus variable >M v=DC#sVolt ;load voltage state from ModBus variable >M c=DC#sCur ;load voltage state from ModBus variable >M if ((chg[sw]>0) and (SW!=sw)) ;update WebUI based on physical input (switch) then SW=sw endif if ((chg[v]>0) and (V!=v)) ;update WebUI based on physical input (voltage) then V=v endif if ((chg[c]>0) and (C!=c)) ;update WebUI based on physical input (current) then C=c endif if chg[V]>0 ;update ModBus register based on WebUI input (voltage) then if V>Vmax ;prevent out of bound value (voltage max) then V=Vmax endif if V<0 ;prevent out of bound value (voltage min) then V=0 endif vV=rV+sb(hx((V*100)) 4 4) sml(1 3 vV) endif if chg[C]>0 ;update ModBus register based on WebUI input (current) then if C>Cmax ;prevent out of bound value (current max) then C=Cmax ;prevent out of bound value (current min) endif if C<0 then C=0 endif vC=rC+sb(hx((C*1000)) 4 4) sml(1 3 vC) endif if ((chg[SW]>0) and (sw!=SW) ;update ModBus register based on WebUI input (switch) then vSW=rSW+s(SW) sml(1 3 vSW) endif >M 1 +1,4,m,16,9600,DC,5,2,010300000001,010300010001,010300020001,010310010001,010310020001,010310030001 1,010302SSssxxxx@i0:100,DC Spannung (set),V,sVolt,2 1,010302SSssxxxx@i1:1000,DC Strom (set),A,sCur,2 1,010302SSssxxxx@i2:1,Switch (set),,sSwitch,0 1,010302SSssxxxx@i3:100,DC Spannung (disp),V,dVolt,2 1,010302SSssxxxx@i4:1000,DC Strom (disp),A,dCur,2 1,010302SSssxxxx@i5:1,Temperatur,C,cTemp,1 #