NEWS
DMP8624 -> iobroker
-
@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 #
-
@jonas-haber ,
es geht noch einfacher ohne die Variablen zu ändern.>D g:pwr=0 >S pwr=sml[1] >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 #
sml[Zeilennummer vom Wert]
Vorteil: du hast jetzt jede Sekunde den Wertedit:
#define USE_SCRIPT_GLOBVARS
musst du setzen, habe keine Tasmotafirmware gefunden in der das aktiviert ist.
-
Hallo zusammen,
Bin neu hier bei euch. Habe zufällig euer Beitrag im Netz gefunden. Bin Dabei den Vorschlag von Andreas Schmidt umzusetzen wobei ich keine nulleinspeisung sondern eine konstante Einspeisung des Grundverbrauches realisiert habe. Mein Problem ist nur dass der Dmp natürlich ausgegangen ist wenn der akku leer war. Meine Idee ist jetzt den dmp abhängig von der akkuladung zu steuern.
Habe mit Interesse obiges durchgelesen und dies auch bereits umgesetzt.@fimoknete wie hast du das hinbekommen?
Bei mir sendet der ESP wie verrückt. erhalte aber keine antwort vom dmp.
habe dazu die minimale version vom skript genommen:
D
B
->sensor53 r
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,1das verrückte dabei ist, dass wenn ich die dmp software über den esp und ein ttl wandler direkt am pc anschließe, ich den dmp steuern kann. wenn ich das so mache funkt auch rx ganz normal. ansonsten blinkt die ganze zeit tx
das ganze habe ich wie unten dargestellt angeschlossen und auch die firmware von @Wal genutzt.
@Wal hast du ne Idee wieso ich standalone mit dem esp keine antwort vom dmp erhalte.
Habe jetzt den dmp auch direkt ohne ttl/485 Wandler ohne erfolg angeschlossen. Kann ich diesen mit deiner Firmware überhaupt ansteuern?bin am verzweifeln :(. Weiss gar nicht wo ich ansetzen kann. Habe alles mögliche probiert :D.
-
@wal wow. Schonmal einen riesen Dank hierfür. Allein der Typ mit dem Global Variable und Websend hat mich tausend Meilen weiter gebracht. Ich weiss nicht wie ich das von vornherein übersehen konnte.
-
@eri82 ,
ich habe den DMP8624 mit RS485 nicht und kann dir da bei Kommunikationsfehlern leider nicht helfen, da ich selber nicht testen kann. -
@wal danke für die Antwort. Habe das schon nach Recherche gestern befürchtet. Hast du vielleicht eine Idee, wo ich ansetzen kann? Der ttl/485 wandler, esp2866, die modbus Schnittstelle des dmp und der dmp scheinen ja zu funktionieren. Muss ich eine neue tasmota Firmware compilen?
-
@eri82 ,
die Firmware hier im Thread sollte funktionieren. -
-
@wal hey habe jetzt #define USE_SCRIPT_GLOBVARS eingefügt. Bin mir nur nicht sicher ob es an der richtigen Stelle ist. Hab es direkt an den Anfang gesetzt.
Alles zusammen gestartet mit deinem Code. Die Console zeigt dann folgendes:
Man kann nicht direkt sehen ob es funktioniert oder?