[gelöst] Rechnen in setList (DPM8624)

Begonnen von PS915, 12 April 2023, 23:59:53

Vorheriges Thema - Nächstes Thema

PS915

Moin zusammen,

ich habe hier ein DPM8624, welches ich per MQTT steuern kann.

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:

Du darfst diesen Dateianhang nicht ansehen.

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


Beta-User

#1
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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

PS915

#2
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};}

betateilchen

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().
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

PS915