NEWS
DMP8624 -> iobroker
-
-
@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. -
@wal said in DMP8624 -> iobroker:
@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.Danke für die Antwort. Endlich weiss ich mal einen Namen. Welche Variante habt ihr hier in diesem Forum verwendet? Ich möchte mich ja nah daran orientieren.
Edit:
Weisst du zufällig wie man herausfinden kann ob ein bestimmtes script wie glabal values oder websend auf der firmware installiert sind?
-
@jonas-haber ,
ich nutze Globale Variable und @Ralla66 nutzt Websend.
Alles hat vor und Nachteile gehen tut beides.
GV hat Vorteile falls sich die IP mal ändert muss das Sender Script nicht angepasst werden und man kann mehrere Geräte die Variable abholen lassen. Nachteil ist das du immer Netzwerkverkehr hast.
Es ist halt eine Glaubenssache. -
@wal das ist sehr interessant. Danke. Weisst du wie man herausfinden kann ob eine Tasmota Firmware USE_WEBSEND_RESPONSE oder USE_SCRIPT_GLOBVARS drin hat?
-
@jonas-haber ,
die Firmware wirst du selbst erstellen müssen. Es gibt irgendwo ein Online Compiler weis aber nicht wo da ich meine immer selbst erzeuge. Nutz mal die suche. -
@wal also würde auch nicht die Firmware funktionieren, die hier reingestellt wurde? Kann man mit der Console im WebUI nicht herausfinden ob dieses oder jenes definiert ist?
-
@jonas-haber ,
flashen und testen, anderes weis ich jetzt auch nicht. -
@wal okay danke. Ich verstehe nicht ganz wie ich den ausgelesenen Wert am Stromzähler als Variable verpacke ...
(hier ein screen von einem Beispiel an dem ich mich orientiere)
(und hier mein Script)
>D g:pwr=0 >T pwr=1,77070100100700ff@1,Verbrauch aktuell,W,Power_curr,0 >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 #
ich denke das ist falsch doch wenn ich
1,77070100100700ff@1,Verbrauch aktuell,W,Power_curr,0
als globale Variable g setzen möchte was muss ich dann schreiben?
Ich gehe mal davon aus, dass #define USE_SCRIPT_GLOBVARS definiert ist auf meiner Firmware.
-
@jonas-haber sagte in DMP8624 -> iobroker:
ich denke das ist falsch doch wenn ich
Copy to Clipboard1,77070100100700ff@1,Verbrauch aktuell,W,Power_curr,0als globale Variable g setzen möchte was muss ich dann schreiben?
Ich gehe mal davon aus, dass #define USE_SCRIPT_GLOBVARS definiert ist auf meiner Firmware.Ja das ist falsch, du nutzt einfache schlechte Variablenamen nimm einfach P wie in diesem Beispiel.
>D g:pwr=0 >T pwr=LK13BE#P >B ->sensor53 r >M 1 +1,5,s,0,9600,LK13BE,1,10,2F3F210D0A,063035310D0A 1,77070100100700ff@1,P,W,P,0 1,77070100010800ff@1000,Zählerstand,kWh,Power_total_in,1 #