Moin zusammen,
ich habe hier ein DPM8624, welches ich per MQTT steuern kann (https://github.com/d4rken/jt-dpm8600-psu-mqtt).
Per mqtt kann ich Spannung und Strom begrenzen.
Nun möchte ich einfachhalt halber das ganze per Angabe von "Watt" begrenzen.
Die Spannung des DPM8624 wird dauerhaft auf 28,7V eingestellt sein.
Ich möchte nun z.B per set max_watt 300, die Leistung des Gerätes begrenzen.
Das würde bedeuten, dass 10,45 per MQTT (pv1/dcdc/command/max-current) an das Gerät schickt.
300 W / 28,7V = 10,45 A
Jemand eine Idee, wie ich das in dem Device MQTT2_PV1_DCDC_ESP8266 so konfigurieren kann?
z.B:
Screenshot 2023-04-12 235408.png
define MQTT2_PV1_DCDC_ESP8266 MQTT2_DEVICE PV1_DCDC_ESP8266
attr MQTT2_PV1_DCDC_ESP8266 alias DPM8624
attr MQTT2_PV1_DCDC_ESP8266 readingList PV1_DCDC_ESP8266:pv1/dcdc/rssi:.* rssi\
PV1_DCDC_ESP8266:pv1/dcdc/uptime:.* uptime\
PV1_DCDC_ESP8266:pv1/dcdc/voltage:.* voltage\
PV1_DCDC_ESP8266:pv1/dcdc/current:.* current\
PV1_DCDC_ESP8266:pv1/dcdc/limit:.* limit\
PV1_DCDC_ESP8266:pv1/dcdc/enabled:.* enabled\
PV1_DCDC_ESP8266:pv1/dcdc/temp:.* temp
attr MQTT2_PV1_DCDC_ESP8266 room MQTT2_DEVICE
attr MQTT2_PV1_DCDC_ESP8266 setList on pv1/dcdc/command/power 1\
off pv1/dcdc/command/power 0\
max_current pv1/dcdc/command/max-current\
max_voltage pv1/dcdc/command/max-voltage
attr MQTT2_PV1_DCDC_ESP8266 stateFormat <b>Status: </b>enabled<br>\
\
<b>Max Current: </b>limit A<br>\
<b>Max Voltage: </b>voltage V<br>\
<b>Max Watt: </b>watt_limit W<br><br>\
<b>Current: </b>current A<br>\
<b>Watt: </b>watt W<br><br>\
\
<b>Temperatur </b>temp<br>\
\
on off\
attr MQTT2_PV1_DCDC_ESP8266 userReadings watt {ReadingsVal('MQTT2_PV1_DCDC_ESP8266','voltage','') * ReadingsVal('MQTT2_PV1_DCDC_ESP8266','current','')}, watt_limit {ReadingsVal('MQTT2_PV1_DCDC_ESP8266','voltage','') * ReadingsVal('MQTT2_PV1_DCDC_ESP8266','limit','')}
# CID PV1_DCDC_ESP8266
# DEF PV1_DCDC_ESP8266
# FUUID 6411ff32-f33f-1bb7-5dec-41f29b46848f09c0
# IODev mqtt_server
# LASTInputDev mqtt_server
# MSGCNT 1832
# NAME MQTT2_PV1_DCDC_ESP8266
# NR 776
# STATE <b>Status: </b>1<br>
#
#<b>Max Current: </b>24.000 A<br>
#<b>Max Voltage: </b>28.70 V<br>
#<b>Max Watt: </b>688.8 W<br><br>
#<b>Current: </b>0.008 A<br>
#<b>Watt: </b>0.2296 W<br><br>
#
#<b>Temperatur </b>24.00<br>
#
#on off
#
# TYPE MQTT2_DEVICE
# eventCount 1878
# mqtt_server_CONN mqtt_server_192.168.0.107_60612
# mqtt_server_MSGCNT 1832
# mqtt_server_TIME 2023-04-12 23:43:13
# READINGS:
# 2023-03-18 18:50:25 IODev mqtt_server
# 2023-04-12 23:43:12 current 0.008
# 2023-04-12 23:43:13 enabled 1
# 2023-04-12 23:43:13 limit 24.000
# 2023-04-12 23:43:12 rssi -71
# 2023-04-12 23:35:54 state max_current
# 2023-04-12 23:43:13 temp 24.00
# 2023-04-12 23:43:12 uptime 361474
# 2023-04-12 23:43:12 voltage 28.70
# 2023-04-12 23:43:13 watt 0.2296
# 2023-04-12 23:43:13 watt_limit 688.8
#
setstate MQTT2_PV1_DCDC_ESP8266 <b>Status: </b>1<br>\
\
<b>Max Current: </b>24.000 A<br>\
<b>Max Voltage: </b>28.70 V<br>\
<b>Max Watt: </b>688.8 W<br><br>\
<b>Current: </b>0.008 A<br>\
<b>Watt: </b>0.2296 W<br><br>\
\
<b>Temperatur </b>24.00<br>\
\
on off\
setstate MQTT2_PV1_DCDC_ESP8266 2023-03-18 18:50:25 IODev mqtt_server
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:12 current 0.008
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:13 enabled 1
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:13 limit 24.000
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:12 rssi -71
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:35:54 state max_current
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:13 temp 24.00
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:12 uptime 361474
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:12 voltage 28.70
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:13 watt 0.2296
setstate MQTT2_PV1_DCDC_ESP8266 2023-04-12 23:43:13 watt_limit 688.8
Moin.
Die Frage wäre vermutlich in MQTT besser aufgehoben gewesen. setList erlaubt auch Perl.
Hier ein Schnippsel aus den attrTemplate, das in diese Richtung geht (aus tasmota_plug_with_rgbw_split):
dimup:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+4)/10)*10+10; return qq {CMNDTOPIC/Dimmer $num}; }\
Statt ReadingsNum() kannst du direkt $EVTPART1 verwenden.
Vielen Dank, wieder etwas gelernt! =)
Hiermit klappt es wunderbar!
max_watt {my $num=round(int($EVTPART1)/28.8,2); return qq {pv1/dcdc/command/max-current $num};}
Alternativ, falls die Spannung nicht "hardcoded" sein soll
max_watt {my $num=round(int($EVTPART1)/ReadingsNum($NAME,'voltage',int($EVTPART1)),2); return qq {pv1/dcdc/command/max-current $num};}
Zitat von: PS915 am 13 April 2023, 11:49:25Alternativ, falls die Spannung nicht "hardcoded" sein soll
max_watt {my $num=round(int($EVTPART1)/ReadingsVal($NAME,'voltage',''),2); return qq {pv1/dcdc/command/max-current $num};}
Erstens macht es überhaupt keinen Sinn, in ReadingsVal() einen String als default-Wert anzugeben, wenn man damit arithmetische Operationen ausführen möchte. Damit würde man ggf. unnötige perl Warnungen im Log erzeugen.
Zweitens ist an der Stelle ReadingsNum() vermutlich ohnehin besser geeignet als ReadingsVal().
stimmt! Habe es angepasst!