NEWS
DMP8624 -> iobroker
-
@wal
jetzt habe ich ein anderes problem.Von Hand kann ich den Strom Wert in broker ändern und der DMP reagiert.
Setze ich den gleichen Wert durch ein Script hoch oder runter wird der Wert in iobroker zwar übernommen aber nicht an den dmp geschickt.
Was ist da los?Ist aktualisieren der falsche Befehl?
und welcher Teil vom Script beinhaltet denn die Intervalle zum erneuern?
-
@fimoknete ,
steuere ? -
@wal ja, steuere geht. Knackpunklt ist hier wohl, dass aktualisieren einen bestätigen wert setzt. Dann geht die weitere Verarbeitung nicht mehr. Steuere setzt einen unbestätigten Wert, genauso wie bei händisch.
welcher teil im script ist denn für die aktualiesierungszeiten zuständig?
-
@fimoknete ,
diesen Teil in >F dann gehts schneller.>F if chg[U]>0 { if U>Umax { U=Umax } if U<0 { U=0 } vU=rU+sb(hx((U*100)) 4 4) sml(1 3 vU) } if chg[I]>0 { if I>Imax { I=Imax } if I<0 { I=0 } vI=rI+sb(hx((I*1000)) 4 4) sml(1 3 vI) } if chg[SW]>0 { vSW=rSW+s(SW) sml(1 3 vSW) I=0.5 U=0 }
-
@wal Top, du bist der Beste !!!
Aber mal noch ne andere Frage. Ich habe testweise mal den Aufbau genauso an meine Batterie gehangen. Ich bekomme sogar einen Datenstrom, den ich auslesen kann.
Wie bekomme ich raus, was ich in deinem Minimalscript ändern muss, um erst mal relevante Daten angezeigt zu bekommen?
Und welche Sprache ist denn das Script in der Tasmota Console?
-
@fimoknete Ich habe mich da jetzt mal reingefrickelt.
3 der Giop3 = RX, m ist ja modbus 8n1, 16 der median und 9600 die baurate. So weit ist mir das klar.
Nur wie ich den Datenstrom auseinandernehme ist mir nicht klar.
0104 ist ja lesen aus dem Register und register ist 0x1000 also 1000. Aber bei 01041000 kommt nix an. Wo liegt der fehler???? -
hiermit werden 4 Daten angefragt :
+1,3,m,16,9600,DC,1,2,
010300000001,
010300010001,
010300020001,
010310030001hier werden Empfangene Daten ausgewertet, SSss Werte werden nicht betrachtet
1,010302SSssxxxx@i0:100,Spannung,V,sVolt,2
-
@fimoknete ,
die Adressen vom DPM waren bekannt, da habe ich nichts rausfinden müssen. -
-
@fimoknete wieso sind deine abfragen 12 stellen lang? adresse und lese aus register ist klar. aber die restlichen 8 stellen?
-
würde das erst mit hterm senden, dann sollte eine Rückantwort kommen.
Teste mal mit dem DPM zuerst.010300000001
1,010302SSssxxxx@i0:100,Spannung,V,sVolt,2
Die Antwort auf 03 Read mit 02 Word ( 4 Byte ) SSss ( Register ) und xxxx ( Wert im Register )
-
@ralla66 Interessante Tasache. Ich habe mal die Formatierung auf 10 Stellen geändert. Jetzt sieht man Muster.
die BAtterie reagiert auf das Register bei tasmota.
Jetzt muss ich nur noch rausfinden, wie ich den Datenstrom vom Tasmota interpretieren lassen kann.
1008 ist der SOC Wert im, Register
Aber was kommt denn auf die markierte Stelle?
-
@fimoknete sagte in DMP8624 -> iobroker:
Aber was kommt denn auf die markierte Stelle?
Meine das sind die Abgefragten Register. 00 00 ist das aktuelle also 1008.
1008 0003 müßte Register 1008 bis 1010 sein.
Eventuell mußt du Soc umrechnen, kommt ja laut Tabelle als unsigned Integer 16
zurück. -
Hallo Zusammen,
dank der Hilfe von @Wal aus Balkonkraftwerk DPM8624 Tasmota Sonoff-Adapter habe ich einen D1mini mit dem DPM zum laufen bekommen.
Was habe ich vor:
Ich möchte eine AC-Laderegelung in Abhängigkeit vom PV-Überschuss realisieren. Ursprünglich hatte ich das Meanwell HLG-600H-54AB (via Steuerspannung 0-10V) im Blick, mittlerweile würde ich aber auf ein DPM6824 in Kombination mit einem ESP setzen wollen. Ich habe mir bereits viele gedanken über die Ausfallsicherheit und Autarkie der Regelung gemacht. Wenn ich mir als Leihe in diesen Thema etwas wünschen dürfte, würde ich folgende vorgehen favorisieren.- Ein Shelly3em stellt die aktuellen Leistungen zu verfügung.
- Tasmota fragt zyklisch die Werte vom Shelly 3em ab, verrechnet diese entsprechend und gibt es an dem DPM8624 weiter.
- Ladeleistung wird langsam geregelt
- Variablen definierbar (maxLeistung; Festspannung;)
- Alle Werte und manueller Eingriff sind per mqtt verfügbar
- Wenn keine Werte vom Shelly3em ankommt, dann wird der DPM8624 deaktiviert
Könnte man dieses mit dem ESP+DPM umsetzen? Die >190 Beiträge lassen es nach dem lesen vermuten aber lassen mich auch etwas verzweifeln
-
@wal sagte in DMP8624 -> iobroker:
@ralla66 ,
Die Spannung habe ich fest auf 40V eingestellt da mein WR 28V-45V Eingang hat und Strom errechnet er vom aktuellen Verbrauch und nähert sich langsam an bis die errechnete Leitung gegen 0 geht.
Ich übergebe kein Spannung/Strom.Bist du mit der genannten Festspannung zufällig ausserhalb vom MPPT-Spannungsbereich? Mich würde interessieren wie die Tracker ausserhalb ihres MPPT-Spannungsbereichs arbeiten. Innerhalb vom MPPT-Spannungsbereich müsste man das gut an dem schwankenden Strom am DPM sehen?
-
@linos sagte in DMP8624 -> iobroker:
Mich würde interessieren wie die Tracker ausserhalb ihres MPPT-Spannungsbereichs arbeiten
Tun sie , hast nur eben einen schlechteren Wirkungsgrad, laufen tut das aber.
Zu deinem Projekt, AC-Laderegelung ist zu überlegen ob du nicht besser DC - DC machst,
da die Verluste bei AC höher sind.
Zu deinen Wünschen, ja geht alles, Bedingung ist hier Tasmota Scripting lernen. -
@ralla66 Außerhalb vom MPPT-Spannungsbereich bleibt der Strom am DPM8624 dann also konstant?
Ich frage nur, da ich mir nicht sicher bin ob das MPPT-Tracken auf Dauer für den DPM8624 so gesund ist?Da hast du recht, Laderegelung DC zu DC wäre das optimalste. Leider ist es bei mir nicht ohne weiteres möglich.
-
@linos sagte in DMP8624 -> iobroker:
Außerhalb vom MPPT-Spannungsbereich bleibt der Strom am DPM8624 dann also konstant?
Das regelt ja der DPM und bleibt konstant unabhängig vom Eingang.
Im Prinzip hast du ja 2 Regelungen, die vom Tracker und die des DPM.
Beides beeinflusst sich ja gegenseitig, deshalb ist hier von Vorteil eine ruhige Regelung des Trackers zu erreichen.
Abhängigkeit vom PV-Überschuss ist da eher schlecht. -
@wal said in DMP8624 -> iobroker:
@ralla66 ,
habe es jetzt geschafft ohne Änderung des Stromzähler Scripts.
Es muss aber wieder was in die Firmware eingefügt werden.
Habe das jetzt alles drin:#define USE_SCRIPT_WEB_DISPLAY #define USE_WEBSEND_RESPONSE #define USE_SCRIPT_STATUS #define USE_SCRIPT_FULL_JSON_PARSER #define USE_SCRIPT #define SUPPORT_MQTT_EVENT #define USE_SML_M #define USE_SML_SCRIPT_CMD
hi, ich versuche im Prinzip das gleiche hin zu bekommen. Ich kann meinen DPM manuell steuern über das WebUI von Tasmota.
Natürlich möchte ich, dass sich der DPM automatisch nach dem aktuellen Verbrauch am Zähler orientiert und danach den Strom einstellt. Ich komme einfach nicht bei der Kommunikation zwischen diesen beiden weiter. Jetzt habe ich gelesen, dass du noch was in die Firmware eingefügt hast? Wie geht das denn?
Edit:
Ok verstehe, du kannst also Tasmota Firmware konfigurieren. Jetzt frage ich mich ob meine Firmware reicht damit die beiden Kommunizieren.
So sieht aktuell der Script meines Zählers aus:
>D >B ->sensor53 r >M 1 +1,5,s,0,9600,LK13BE,1,10,2F3F210D0A,063035310D0A 1,77070100100700ff@1,Verbrauch aktuell,W,Power_curr,0 1,77070100010800ff@1000,Zählerstand,kWh,Power_total_in,1 #
und das ist der Script des DPM:
>D // a valid script must start with >D in the first line Vmax=40 Cmax=24 v=0 V=0 c=0 C=0 sw=0 SW=0 rV="01060000" vV="" rC="01060001" vC="" rSW="01060002000" vSW="" >BS // executed on BOOT time after sensors are initialized +>subscribe V, cmnd/tasmota/tvolt +>subscribe C, cmnd/tasmota/tampere +>subscribe SW, cmnd/tasmota/tpow >B // executed on BOOT time before sensors are initialized and on save script smlj=0 // smlj = read or write variable, when 0 disables MQTT output of SML. ->sensor53 r // Declare >B (boot) section to inform the interface to read the meter descriptor(s): >R // Executed on restart. p vars are saved automatically after this call smlj=0 // smlj = read or write variable, when 0 disables MQTT output of SML. >S // Executed every second if upsecs>30 then smlj=1 // smlj = read or write variable, when 0 disables MQTT output of SML. endif >W // The lines in this section are displayed in the web UI main page. bu(SW "DPM Ein" "DPM Aus") // Buttons nm(0.0 60.0 0.01 V "DPM Ausgang (V)" 200 2) // nm(min max step vn txt (xs) (prec)) nm(0.0 24.0 0.01 C "DPM Ausgang (A)" 200 2) >T // Executed at least at TelePeriod time sw=DC#sSwitch v=DC#sVolt c=DC#sCur if ((chg[sw]>0) and (SW!=sw)) then SW=sw +>publish stat/%topic%/RESULT {"tpow":%1sw%} endif if ((chg[v]>0) and (V!=v)) then V=v +>publish stat/%topic%/RESULT {"tvolt":%1v%} endif if ((chg[c]>0) and (C!=c)) then C=c +>publish stat/%topic%/RESULT {"tampere":%1c%} endif if chg[V]>0 then if V>Vmax then V=Vmax endif if V<0 then V=0 endif vV=rV+sb(hx((V*100)) 4 4) +>publish stat/%topic%/RESULT {"tvolt":%1V%} sml(1 3 vV) endif if chg[C]>0 then if C>Cmax then C=Cmax endif if C<0 then C=0 endif vC=rC+sb(hx((C*1000)) 4 4) +>publish stat/%topic%/RESULT {"tampere":%1C%} sml(1 3 vC) endif if ((chg[SW]>0) and (sw!=SW)) then vSW=rSW+s(SW) +>publish stat/%topic%/RESULT {"tpow":%1SW%} sml(1 3 vSW) endif >M 1 // Smart Meter Interface +1,3,m,16,9600,DC,1,2,010300000001,010300010001,010300020001,010310010001,010310020001 1,010302SSssxxxx@i0:100,Spannung (set),V,sVolt,2 1,010302SSssxxxx@i1:1000,Strom (set),A,sCur,2 1,010302SSssxxxx@i2:1,Ausgang (set),,sSwitch,0 1,010302SSssxxxx@i3:100,Spannung (disp),V,dVolt,2 1,010302SSssxxxx@i4:1000,Strom (disp),A,vCur,2 #
Wie gesagt kann ich manuell den DPM steuern indem ich den Wert des IR-Zählers über die WebUI lese und händisch beim DPM über die WebUI eingebe. Ich weiss nur dass ich einen Broker habe auf einem Raspberry Pi 4 auf dem Mosquitto installiert ist. Dort kann ich ein Passwort und Nutzernamen erstellen welche ich jeweils für den DPM und den IR-Lesekopf schon in der WebUi eingetragen habe. Laut der Console der beiden WebUis scheinen sie sich auch mit dem Broker verbunden zu haben.
Ich versuche nun irgendwie den Script von diesem Forum bei mir zu integrieren damit das ganze automtisch läuft.
Weiter oben habe ich das gefunden:
>D aktuell=0 >B ->sensor53 r >T aktuell=MT175#P http("192.168.xxx.xxx" "/cm?cmnd=script>Aktuell="+s(aktuell)) >M 1 +1,3,s,16,9600,MT175 1,77070100010800ff@1000,E_in,kWh,E_in,1 1,77070100010801ff@1000,E_in_HT,kWh,E_in_HT,1 1,77070100010802ff@1000,E_in_NT,kWh,E_in_NT,1 1,77070100020800ff@1000,E_out,kWh,E_out,1 1,77070100100700ff@1,P,W,P,18 1,77070100000009ff@#,Server_ID,,Server_ID,0 #
Ich denke, dass dies für den IR- Lesekopf ist und frage mich was denn folgendes bedeutet:
>T aktuell=MT175#P http("192.168.xxx.xxx" "/cm?cmnd=script>Aktuell="+s(aktuell))
wird hier irgendetwas versendet? Wichtig für den DPM wäre einfach nur der aktuelle Verbrauch in Watt den ich auch in der WebUI sehen kann. Diesen müsste der DPM irgendwie übermittelt bekommen und daraus mit einer festen Spannung (z.B. 35V) den Strom so anpassen, dass ungefähr immer null am Zähler steht. Desweiteren müsste ich einstellen was das maximum wäre (beim DPM8650 wären es knapp 3000W). Ich habe 4 mal 700W Tie Grid Inverter (2800W). Natürlich muss der Einspeisevorgang auch gestoppt werden, wenn der Akku (2 kWh) leer wird. Ab einer bestimmen Spannung muss dann der DPM aufhören oder wieder anfangen. Die Spannung kann man ja leider nicht direkt am DPM (input) auslesen wie ich vermute. Deshalb werde ich in zukunft noch einen weiteren Sensor benötigen oder ich zapfe den Victron 100 20 ebenfalls mit einem ESP über Tasmota an. Hierfür müsste ich aber auch wieder wissen wie die einzelnen Tasmotageflashten ESPs miteinander kommunizieren können. Ich weiss das dies über den Broker funktioniert. Aber wo ich was in den Scripts schreiben muss ist mir bislang ein Rätsel.
Hier ist der Scipt von oben für den DPM:
>D Timer=0 p=0 bakt=0 Zeit=0 IAus=0 VAus=35 WAus=0 pwr=0 Vmax=35 Cmax=24 V=0 C=0 SW=0 rV="01060000" vV="" rC="01060001" vC="" rSW="01060002000" vSW="" >BS +>subscribe V, cmnd/%topic%/tvolt +>subscribe C, cmnd/%topic%/tampere +>subscribe SW, cmnd/%topic%/tpow >B ->sensor53 r tper=10 >S Timer+=1 if Timer>30 { =>websend [192.168xxx.xxx] /cm?cmnd=status 10 Timer=0 } if chg[SW]>0 { vSW=rSW+s(SW) sml(1 3 vSW) +>publish stat/%topic%/RESULT {"tpow":%0SW%} } if chg[V]>0 { if V>Vmax { V=Vmax } if V<0 { V=0 } vV=rV+sb(hx((V*100)) 4 4) sml(1 3 vV) +>publish stat/%topic%/RESULT {"tvolt":%2V%} } if chg[C]>0 { if C>Cmax { C=Cmax } if C<0 { C=0 } vC=rC+sb(hx((C*1000)) 4 4) sml(1 3 vC) +>publish stat/%topic%/RESULT {"tampere":%2C%} } >E bakt=WebQuery#StatusSNS#MT175#Bezug_Aktuell IAus=bakt/VAus WAus=IAus*VAus ; V und A setzen V=VAus C=IAus >W bu(SW "DPM Ein" "DPM Aus") bu(Zeit "Timer Ein" "Timer Aus") 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) Bezug Zähler{m} %0bakt% W Errechnete Leistung{m} %0WAus% W Aktuelle Leistung{m} %0pwr% W >M 1 +1,3,m,16,9600,DC,1,2,010300000001,010300010001,010300020001,010310030001 1,010302SSssxxxx@i0:100,Spannung,V,sVolt,2 1,010302SSssxxxx@i1:1000,Strom,A,sCur,2 1,010302SSssxxxx@i2:1,Ausgang,,sSwitch,0 1,010302SSssxxxx@i3:1,Temp,°C,tCur,1 #
werden die Daten hiermit empfangen?
>BS +>subscribe V, cmnd/%topic%/tvolt +>subscribe C, cmnd/%topic%/tampere +>subscribe SW, cmnd/%topic%/tpow
oder hiermit?
>S Timer+=1 if Timer>30 { =>websend [192.168xxx.xxx] /cm?cmnd=status 10
wo muss ich was eingeben damit die beiden endlich miteinander reden ???
-
@jonas-haber ,
es gibt zwei Wege die Werte an ein anderes Tasmota Gerät zu senden.
Einmal mit Websend und einmal mit einer Globalen Variable.
Hier kannst du alles über die Wege erfahren.