Hello, in Vorbereitung der Erweiterung meiner Solaranlage habe ich mir bei openelab ein openDTU Fertigkästchen besorgt -> https://openelab.io/de/products/opendtu?_pos=1&_psq=Dual-Mode+NRF%2FCMT+DTU&_ss=e&_v=1.0
und integriere es gerade in fhem. Dank dem mqtt template (Danke!) war die Kommunikation schnell hergestellt.
Dann habe ich alles was auf openDTU als mqtt topics aufgeführt war (https://www.opendtu.solar/firmware/mqtt_topics/) eingebaut. Was es davon später braucht, wird sich zeigen.
Daraus ist jetzt erstmal das geworden
defmod MQTT2_openDTU MQTT2_DEVICE
attr MQTT2_openDTU autocreate 1
attr MQTT2_openDTU bridgeRegexp openDTU/([[:xdigit:]]+)/.*:.* "openDTU_$1"
attr MQTT2_openDTU event-min-interval .*:900
attr MQTT2_openDTU event-on-change-reading uptime:60,temperature:1,rssi:3,.*
attr MQTT2_openDTU event-on-update-reading .*
attr MQTT2_openDTU icon solar
attr MQTT2_openDTU model hoymiles_opendtu_hub_bridge
attr MQTT2_openDTU readingList openDTU/status:.* status\
openDTU/dtu/uptime:.* uptime\
openDTU/dtu/ip:.* ip\
openDTU/dtu/rssi:.* rssi\
openDTU/dtu/temperature:.* temperature\
openDTU/dtu/hostname:.* hostname\
\
openDTU/ac/power:.* power_ac\
openDTU/ac/yieldtotal:.* yieldtotal\
openDTU/ac/yieldday:.* yieldday\
openDTU/ac/is_valid:.* is_valid\
\
openDTU/dc/power:.* power_dc\
openDTU/dc/irradiation:.* irradiation\
openDTU/dc/is_valid:.* is_validdc\
\
openDTU/[serial]/name:.* Name_of_the_inverter_as_configured_in_web_GUI\
openDTU/[serial]/device/bootloaderversion:.* Bootloader_version_of_the_inverter\
openDTU/[serial]/device/fwbuildversion:.* Firmware_version_of_the_inverter\
openDTU/[serial]/device/fwbuilddatetime:.* Build_date__time_of_inverter_firmware\
openDTU/[serial]/device/hwpartnumber:.* Hardware_part_number_of_the_inverter\
openDTU/[serial]/device/hwversion:.* Hardware_version_of_the_inverter\
openDTU/[serial]/radio/tx_request:.* Amount_of_sent_packet_requests\
openDTU/[serial]/radio/tx_re_request:.* Amount_of_sent_fragment_resend_requests\
openDTU/[serial]/radio/rx_success:.* Amount_of_successfully_received_packets\
openDTU/[serial]/radio/rx_fail_nothing:.* Amount_of_failed_packets_nothing_was_received\
openDTU/[serial]/radio/rx_fail_partial:.* Amount_of_failed_packets_some_fragments_were_missing\
openDTU/[serial]/radio/rx_fail_corrupt:.* Amount_of_failed_packets_payload_corrupt\
openDTU/[serial]/radio/rssi:.* RSSI_of_last_received_packet\
openDTU/[serial]/status/reachable:.* Indicates_whether_the_inverter_is_reachable\
openDTU/[serial]/status/producing:.* Indicates_whether_the_inverter_is_producing_AC_power\
openDTU/[serial]/status/last_update:.* Unix_timestamp_of_last_inverter_statistics_update\
\
openDTU/[serial]/0/current:.* AC_current_in_ampere\
openDTU/[serial]/0/efficiency:.* Ratio_AC_Power_over_DC_Power_in_percent\
openDTU/[serial]/0/frequency:.* AC_frequency_in_hertz\
openDTU/[serial]/0/power:.* AC_active_power_in_watts\
openDTU/[serial]/0/powerdc:.* DC_power_in_watts\
openDTU/[serial]/0/powerfactor:.* Power_factor_in_percent\
openDTU/[serial]/0/reactivepower:.* AC_reactive_power_in_VAr\
openDTU/[serial]/0/temperature:.* Temperature_of_inverter_in_degree_celsius\
openDTU/[serial]/0/voltage:.* AC_voltage_in_volt\
openDTU/[serial]/0/yieldday:.* Energy_converted_to_AC_per_day_in_watt_hours\
openDTU/[serial]/0/yieldtotal:.* Energy_converted_to_AC_since_reset_watt_hours\
\
openDTU/[serial]/1/current:.* CH1_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/1/name:.* CH1_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/1/irradiation:.* CH1_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/1/power:.* CH1_DC_power_of_specific_input_in_watt\
openDTU/[serial]/1/voltage:.* CH1_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/1/yieldday:.* CH1_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/1/yieldtotal:.* CH1_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/2/current:.* CH2_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/2/name:.* CH2_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/2/irradiation:.* CH2_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/2/power:.* CH2_DC_power_of_specific_input_in_watt\
openDTU/[serial]/2/voltage:.* CH2_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/2/yieldday:.* CH2_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/2/yieldtotal:.* CH2_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/3/current:.* CH3_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/3/name:.* CH3_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/3/irradiation:.* CH3_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/3/power:.* CH3_DC_power_of_specific_input_in_watt\
openDTU/[serial]/3/voltage:.* CH3_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/3/yieldday:.* CH3_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/3/yieldtotal:.* CH3_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/4/current:.* CH4_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/4/name:.* CH4_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/4/irradiation:.* CH4_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/4/power:.* CH4_DC_power_of_specific_input_in_watt\
openDTU/[serial]/4/voltage:.* CH4_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/4/yieldday:.* CH4_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/4/yieldtotal:.* CH4_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/status/limit_relative:.* Current_applied_production_limit_of_the_inverter\
openDTU/[serial]/status/limit_absolute:.* Current_applied_production_limit_of_the_inverter
attr MQTT2_openDTU room MQTT2_DEVICE
attr MQTT2_openDTU setList limit_of_total_production_persistent_PROZENT:20,40,60,80,100 openDTU/[serial]/cmd/limit_persistent_relative $EVTPART1\
limit_of_total_production_persistent_WATT:200,400,800,1200,1600,2000 openDTU/[serial]/cmd/limit_persistent_absolute $EVTPART1\
limit_of_total_production_NON_persistent_PROZENT:20,40,60,80,100 openDTU/[serial]/cmd/limit_nonpersistent_relative $EVTPART1\
limit_of_total_production_NON_persistent_WATT:200,400,800,1200,1600,2000 openDTU/[serial]/cmd/limit_nonpersistent_absolute $EVTPART1\
on:noArg openDTU/[serial]/cmd/power 1\
off:noArg openDTU/[serial]/cmd/power 0\
restart:noArg openDTU/[serial]/cmd/restart 1
attr MQTT2_openDTU webCmd limit_of_total_production_persistent_PROZENT:limit_of_total_production_persistent_WATT:limit_of_total_production_NON_persistent_PROZENT:limit_of_total_production_NON_persistent_WATT
attr MQTT2_openDTU webCmdLabel limit_of_total_production_persistent_PROZENT\
:\
limit_of_total_production_persistent_WATT\
:\
limit_of_total_production_NON_persistent_PROZENT\
:\
limit_of_total_production_NON_persistent_WATT
Da ich im Moment noch nicht weiß, was dann nach Verbindung mit dem Mikrowechselrichter an Informationen fließt, ist das noch ein wenig hypothetisch.
Fragen (Image im Anhang):
1) wie schaffe ich es, dass nach senden von zB "limit_of_total_production_persistent_WATT" der string nicht im state erscheint und das "ein/aus Lämpchen" überschreibt?
2) wie schaffe ich es, dass die DropDowns den tatsächlich eingetragenen Wert wiederspiegeln? Falls überhaupt möglich.
3) das topic status auf state umzulegen in Kombi mit "attr MQTT2_openDTU devStateIcon online:rc_GREEN offline:rc_RED" hat auch nur halb funktioniert, mit dem selben Problem wie in 1)
Ich frage mich, ob es überhaupt möglich ist, das Gewünschte zu erreichen:
- DropDowns stellen den aktuellen Wert dar und setzen diesen bei Betätigung
- Online/Offline wird mit einem grünen/roten icon dargestellt. Bei klick auf Icon wird zwischen on/off umgeschaltet. Daneben noch ein "Reboot"-Icon, wäre die Krönung.
Und vielleicht macht die Idee der Darstellung generell keinen Sinn oder macht es übertrieben komplex. Falls jemand sinnvollere Vorschläge hat ....
Das sind im Prinzip keine direkten mqtt Fragen, aber in Kombi doch sehr zusammengehörig. Die Darstellungsmöglichkeiten in fhem und die Kombinationen der zu setzenden attr überfordern mein Hirn ;)
Ungetestete Vorschlaege:
Zitatwie schaffe ich es, dass nach senden von zB "limit_of_total_production_persistent_WATT" der string nicht im state erscheint und das "ein/aus Lämpchen" überschreibt?
stateFormat und/oder webCmd Attribut setzen.
Zitatwie schaffe ich es, dass die Slider den tatsächlich eingetragenen Wert wiederspiegeln?
Das Frontend sucht nach einem Reading mit dem gleichen Namen wie der Befehl.
Zitat- Online/Offline wird mit einem grünen/roten icon dargestellt. Bei klick auf Icon wird zwischen on/off umgeschaltet. Daneben noch ein "Reboot"-Icon, wäre die Krönung.
Siehe webCmd/webCmdLabel
Damit ich was testen kann, brauche ich zu der oben gezeigten Definition passende Nachrichten.
Hallo Rudolf, bin die letzten Stunden am Rumprobieren gewesen. Recht erfolglos. Ich werde das Ding binnen der nächsten zwei Wochen in Betrieb nehmen und dann hoffe ich auf Readings.
Die Idee, das "aus dem Kopf" zu machen war vielleicht ein bißchen überambitioniert. Ich wollte vorarbeiten ...
Schreibe hier dann weiter.
"setStateList" wäre noch ein Stichwort.
Die Vermischung von dtu und Inverter-Device ist m.E. auch nicht zu empfehlen, und dass openDTU kein JSON kann, ist ein Makel, der bei einem Inverter noch nicht besonders ins Gewicht fällt.
Hat für die opendtu nicht auch ein Template?
Hats, das ist auch gut, aber ein wenig "reduziert". Betas Idee mit der Trennung von DTU und Inverter aufgenommen und bißchen weitergekommen. Obs funktioniert wird sich zeigen, wenn Werte kommen.
Mit dem setStateList ignore bin ich mir noch nicht ganz so sicher, ob das so stimmen kann. Frequenz hats noch kein Reading
defmod MQTT2_openDTU MQTT2_DEVICE
attr MQTT2_openDTU autocreate 1
attr MQTT2_openDTU bridgeRegexp openDTU/([[:xdigit:]]+)/.*:.* "openDTU_$1"
attr MQTT2_openDTU comment https://www.opendtu.solar/firmware/mqtt_topics/
attr MQTT2_openDTU devStateIcon online:rc_GREEN offline:rc_RED
attr MQTT2_openDTU event-min-interval .*:900
attr MQTT2_openDTU event-on-change-reading uptime:60,temperature:1,rssi:3,.*
attr MQTT2_openDTU event-on-update-reading .*
attr MQTT2_openDTU icon solar
attr MQTT2_openDTU model hoymiles_opendtu_hub_bridge
attr MQTT2_openDTU readingList openDTU/status:.* status\
openDTU/dtu/uptime:.* uptime\
openDTU/dtu/ip:.* ip\
openDTU/dtu/rssi:.* rssi\
openDTU/dtu/temperature:.* temperature\
openDTU/dtu/hostname:.* hostname\
\
openDTU/ac/power:.* power_ac\
openDTU/ac/yieldtotal:.* yieldtotal\
openDTU/ac/yieldday:.* yieldday\
openDTU/ac/is_valid:.* is_valid\
\
openDTU/dc/power:.* power_dc\
openDTU/dc/irradiation:.* irradiation\
openDTU/dc/is_valid:.* is_validdc\
\
openDTU/[serial]/name:.* Name_of_the_inverter_as_configured_in_web_GUI\
openDTU/[serial]/device/bootloaderversion:.* Bootloader_version_of_the_inverter\
openDTU/[serial]/device/fwbuildversion:.* Firmware_version_of_the_inverter\
openDTU/[serial]/device/fwbuilddatetime:.* Build_date__time_of_inverter_firmware\
openDTU/[serial]/device/hwpartnumber:.* Hardware_part_number_of_the_inverter\
openDTU/[serial]/device/hwversion:.* Hardware_version_of_the_inverter\
openDTU/[serial]/radio/tx_request:.* Amount_of_sent_packet_requests\
openDTU/[serial]/radio/tx_re_request:.* Amount_of_sent_fragment_resend_requests\
openDTU/[serial]/radio/rx_success:.* Amount_of_successfully_received_packets\
openDTU/[serial]/radio/rx_fail_nothing:.* Amount_of_failed_packets_nothing_was_received\
openDTU/[serial]/radio/rx_fail_partial:.* Amount_of_failed_packets_some_fragments_were_missing\
openDTU/[serial]/radio/rx_fail_corrupt:.* Amount_of_failed_packets_payload_corrupt\
openDTU/[serial]/radio/rssi:.* RSSI_of_last_received_packet\
openDTU/[serial]/status/reachable:.* Indicates_whether_the_inverter_is_reachable\
openDTU/[serial]/status/producing:.* Indicates_whether_the_inverter_is_producing_AC_power\
openDTU/[serial]/status/last_update:.* Unix_timestamp_of_last_inverter_statistics_update\
\
openDTU/[serial]/0/current:.* AC_current_in_ampere\
openDTU/[serial]/0/efficiency:.* Ratio_AC_Power_over_DC_Power_in_percent\
openDTU/[serial]/0/frequency:.* AC_frequency_in_hertz\
openDTU/[serial]/0/power:.* AC_active_power_in_watts\
openDTU/[serial]/0/powerdc:.* DC_power_in_watts\
openDTU/[serial]/0/powerfactor:.* Power_factor_in_percent\
openDTU/[serial]/0/reactivepower:.* AC_reactive_power_in_VAr\
openDTU/[serial]/0/temperature:.* Temperature_of_inverter_in_degree_celsius\
openDTU/[serial]/0/voltage:.* AC_voltage_in_volt\
openDTU/[serial]/0/yieldday:.* Energy_converted_to_AC_per_day_in_watt_hours\
openDTU/[serial]/0/yieldtotal:.* Energy_converted_to_AC_since_reset_watt_hours\
\
openDTU/[serial]/1/current:.* CH1_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/1/name:.* CH1_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/1/irradiation:.* CH1_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/1/power:.* CH1_DC_power_of_specific_input_in_watt\
openDTU/[serial]/1/voltage:.* CH1_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/1/yieldday:.* CH1_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/1/yieldtotal:.* CH1_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/2/current:.* CH2_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/2/name:.* CH2_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/2/irradiation:.* CH2_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/2/power:.* CH2_DC_power_of_specific_input_in_watt\
openDTU/[serial]/2/voltage:.* CH2_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/2/yieldday:.* CH2_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/2/yieldtotal:.* CH2_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/3/current:.* CH3_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/3/name:.* CH3_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/3/irradiation:.* CH3_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/3/power:.* CH3_DC_power_of_specific_input_in_watt\
openDTU/[serial]/3/voltage:.* CH3_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/3/yieldday:.* CH3_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/3/yieldtotal:.* CH3_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/4/current:.* CH4_DC_current_of_specific_input_in_ampere\
openDTU/[serial]/4/name:.* CH4_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/[serial]/4/irradiation:.* CH4_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/[serial]/4/power:.* CH4_DC_power_of_specific_input_in_watt\
openDTU/[serial]/4/voltage:.* CH4_DC_voltage_of_specific_input_in_volt\
openDTU/[serial]/4/yieldday:.* CH4_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/[serial]/4/yieldtotal:.* CH4_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/[serial]/status/limit_relative:.* limit_relative\
openDTU/[serial]/status/limit_absolute:.* limit_absolute
attr MQTT2_openDTU room MQTT2_DEVICE
attr MQTT2_openDTU setList limit_relative:slider,10,10,100 openDTU/[serial]/cmd/limit_persistent_relative $EVTPART1\
limit_absolute:slider,200,100,2000 openDTU/[serial]/cmd/limit_persistent_absolute $EVTPART1\
limit_nonpersistent_relative:slider,10,10,100 openDTU/[serial]/cmd/limit_nonpersistent_relative $EVTPART1\
limit_nonpersistent_absolute:slider,200,100,2000 openDTU/[serial]/cmd/limit_nonpersistent_absolute $EVTPART1\
Inverter_on_off:uzsuSelectRadio,1,0 openDTU/[serial]/cmd/power $EVTPART1
attr MQTT2_openDTU setStateList ignore
attr MQTT2_openDTU stateFormat status\
<br>\
<br>\
Leistung power_ac W\
<br>\
Tag yieldday Wh\
<br>\
Frequenz AC AC_frequency_in_hertz Hz\
<br>\
<a href="http://ip" target="_blank">http://ip</a>
attr MQTT2_openDTU webCmd limit_relative:limit_absolute:limit_nonpersistent_relative:limit_nonpersistent_absolute:Inverter_on_off
attr MQTT2_openDTU webCmdLabel Limit Leistung Persistent PROZENT\
:\
Limit Leistung Persistent WATT\
:\
Limit Leistung Temp PROZENT\
:\
Limit Leistung Temp WATT\
:\
Inverter AN(1) / AUS(0)
Trockenübungen bringen einfach nichts, und das mit der Trennung ergibt 2 Devices, nicht eins...
Habe hier z.B. 8 Inverter, das ergibt 9 Devices - 8 kann man (theoretisch) regeln, eines repräsentiert die (Ahoy-) DTU (mit Summen-Werten usw.).
Denke, bei einem Inverter kann man das auch in ein Device packen. Dachte du meinst die Online Anzeige der DTU nicht mit dem Schalten An/Aus des Inverters zu verbinden.
Das Ding läuft auf Anhieb und das erstaunlich problemlos. Die Trockenübung hat deutlich Zeit gespart. Danke für jede Hilfe. Das ist jetzt recht final:
defmod MQTT2_openDTU MQTT2_DEVICE
attr MQTT2_openDTU autocreate 1
attr MQTT2_openDTU bridgeRegexp openDTU/([[:xdigit:]]+)/.*:.* "openDTU_$1"
attr MQTT2_openDTU comment https://www.opendtu.solar/firmware/mqtt_topics/
attr MQTT2_openDTU devStateIcon online:rc_GREEN offline:rc_RED
attr MQTT2_openDTU event-min-interval .*:900
attr MQTT2_openDTU event-on-change-reading Status,ip,rssi:3,power_ac:20,PV_Power_W_Mikro:20,power_dc:1,PV_Day_KWh_Mikro,yieldday,limit_relative,limit_absolute,AC_frequency_in_hertz,Temperature_of_inverter_in_degree_celsius:1
attr MQTT2_openDTU event-on-update-reading .*
attr MQTT2_openDTU icon solar
attr MQTT2_openDTU model hoymiles_opendtu_hub_bridge
attr MQTT2_openDTU readingList openDTU/status:.* status\
openDTU/dtu/uptime:.* uptime\
openDTU/dtu/ip:.* ip\
openDTU/dtu/rssi:.* rssi\
openDTU/dtu/temperature:.* temperature\
openDTU/dtu/hostname:.* hostname\
\
openDTU/ac/power:.* power_ac\
openDTU/ac/yieldtotal:.* yieldtotal\
openDTU/ac/yieldday:.* yieldday\
openDTU/ac/is_valid:.* is_valid\
\
openDTU/dc/power:.* power_dc\
openDTU/dc/irradiation:.* irradiation\
openDTU/dc/is_valid:.* is_validdc\
\
openDTU/1164a011518f/name:.* Name_of_the_inverter_as_configured_in_web_GUI\
openDTU/1164a011518f/device/bootloaderversion:.* Bootloader_version_of_the_inverter\
openDTU/1164a011518f/device/fwbuildversion:.* Firmware_version_of_the_inverter\
openDTU/1164a011518f/device/fwbuilddatetime:.* Build_date__time_of_inverter_firmware\
openDTU/1164a011518f/device/hwpartnumber:.* Hardware_part_number_of_the_inverter\
openDTU/1164a011518f/device/hwversion:.* Hardware_version_of_the_inverter\
openDTU/1164a011518f/radio/tx_request:.* Amount_of_sent_packet_requests\
openDTU/1164a011518f/radio/tx_re_request:.* Amount_of_sent_fragment_resend_requests\
openDTU/1164a011518f/radio/rx_success:.* Amount_of_successfully_received_packets\
openDTU/1164a011518f/radio/rx_fail_nothing:.* Amount_of_failed_packets_nothing_was_received\
openDTU/1164a011518f/radio/rx_fail_partial:.* Amount_of_failed_packets_some_fragments_were_missing\
openDTU/1164a011518f/radio/rx_fail_corrupt:.* Amount_of_failed_packets_payload_corrupt\
openDTU/1164a011518f/radio/rssi:.* RSSI_of_last_received_packet\
openDTU/1164a011518f/status/reachable:.* Indicates_whether_the_inverter_is_reachable\
openDTU/1164a011518f/status/producing:.* Indicates_whether_the_inverter_is_producing_AC_power\
openDTU/1164a011518f/status/last_update:.* Unix_timestamp_of_last_inverter_statistics_update\
\
openDTU/1164a011518f/0/current:.* AC_current_in_ampere\
openDTU/1164a011518f/0/efficiency:.* Ratio_AC_Power_over_DC_Power_in_percent\
openDTU/1164a011518f/0/frequency:.* AC_frequency_in_hertz\
openDTU/1164a011518f/0/power:.* AC_active_power_in_watts\
openDTU/1164a011518f/0/powerdc:.* DC_power_in_watts\
openDTU/1164a011518f/0/powerfactor:.* Power_factor_in_percent\
openDTU/1164a011518f/0/reactivepower:.* AC_reactive_power_in_VAr\
openDTU/1164a011518f/0/temperature:.* Temperature_of_inverter_in_degree_celsius\
openDTU/1164a011518f/0/voltage:.* AC_voltage_in_volt\
openDTU/1164a011518f/0/yieldday:.* Energy_converted_to_AC_per_day_in_watt_hours\
openDTU/1164a011518f/0/yieldtotal:.* Energy_converted_to_AC_since_reset_watt_hours\
\
openDTU/1164a011518f/1/current:.* CH1_DC_current_of_specific_input_in_ampere\
openDTU/1164a011518f/1/name:.* CH1_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/1164a011518f/1/irradiation:.* CH1_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/1164a011518f/1/power:.* CH1_DC_power_of_specific_input_in_watt\
openDTU/1164a011518f/1/voltage:.* CH1_DC_voltage_of_specific_input_in_volt\
openDTU/1164a011518f/1/yieldday:.* CH1_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/1164a011518f/1/yieldtotal:.* CH1_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/1164a011518f/2/current:.* CH2_DC_current_of_specific_input_in_ampere\
openDTU/1164a011518f/2/name:.* CH2_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/1164a011518f/2/irradiation:.* CH2_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/1164a011518f/2/power:.* CH2_DC_power_of_specific_input_in_watt\
openDTU/1164a011518f/2/voltage:.* CH2_DC_voltage_of_specific_input_in_volt\
openDTU/1164a011518f/2/yieldday:.* CH2_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/1164a011518f/2/yieldtotal:.* CH2_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/1164a011518f/3/current:.* CH3_DC_current_of_specific_input_in_ampere\
openDTU/1164a011518f/3/name:.* CH3_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/1164a011518f/3/irradiation:.* CH3_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/1164a011518f/3/power:.* CH3_DC_power_of_specific_input_in_watt\
openDTU/1164a011518f/3/voltage:.* CH3_DC_voltage_of_specific_input_in_volt\
openDTU/1164a011518f/3/yieldday:.* CH3_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/1164a011518f/3/yieldtotal:.* CH3_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/1164a011518f/4/current:.* CH4_DC_current_of_specific_input_in_ampere\
openDTU/1164a011518f/4/name:.* CH4_Name_of_the_DC_input_channel_as_configured_in_web_GUI\
openDTU/1164a011518f/4/irradiation:.* CH4_Ratio_DC_Power_over_set_maximum_power_in_web_GUI\
openDTU/1164a011518f/4/power:.* CH4_DC_power_of_specific_input_in_watt\
openDTU/1164a011518f/4/voltage:.* CH4_DC_voltage_of_specific_input_in_volt\
openDTU/1164a011518f/4/yieldday:.* CH4_Energy_converted_to_AC_per_day_on_specific_input\
openDTU/1164a011518f/4/yieldtotal:.* CH4_Energy_converted_to_AC_since_reset_on_specific_input\
\
openDTU/1164a011518f/status/limit_relative:.* limit_relative\
openDTU/1164a011518f/status/limit_absolute:.* limit_absolute
attr MQTT2_openDTU room MQTT2_DEVICE,Xtender
attr MQTT2_openDTU setList limit_relative:slider,10,10,100 openDTU/1164a011518f/cmd/limit_nonpersistent_relative $EVTPART1\
limit_absolute:slider,200,100,2000 openDTU/1164a011518f/cmd/limit_nonpersistent_absolute $EVTPART1\
Inverter_on_off:uzsuSelectRadio,1,0 openDTU/1164a011518f/cmd/power $EVTPART1
attr MQTT2_openDTU setStateList ignore
attr MQTT2_openDTU stateFormat status\
<br>\
Leistung PV_Power_W_Mikro W\
<br>\
Tagesertrag PV_Day_KWh_Mikro KWh\
<br>\
Frequenz AC AC_frequency_in_hertz Hz\
<br>\
Temp Inverter Temperature_of_inverter_in_degree_celsius °C\
<br>\
<a href="http://ip" target="_blank">http://ip</a>
attr MQTT2_openDTU userReadings PV_Day_KWh_Mikro:yieldday.* {sprintf("%.2f",ReadingsVal("MQTT2_openDTU", "yieldday",0) / 1000);;}, PV_Power_W_Mikro:power_ac.* {sprintf("%d",ReadingsVal("MQTT2_openDTU", "power_ac",0))}
attr MQTT2_openDTU verbose 2
attr MQTT2_openDTU webCmd limit_relative:limit_absolute:Inverter_on_off
attr MQTT2_openDTU webCmdLabel Limit Leistung Temp PROZENT\
:\
Limit Leistung Temp WATT\
:\
Inverter AN(1) / AUS(0)
Gruselig...
Aber schön, dass es ist wie du möchtest 😊.
Ähm, danke? ... Zeig doch mal "deins" ;)
bin gespannt ...
Zitat von: holle75 am 14 Juli 2025, 18:34:14Ähm, danke? ... Zeig doch mal "deins" ;)
bin gespannt ...
Bin auf AhoyDTU, das kann JSON.
Lange Anmerkungen vielleicht bei Gelegenheit, wenn ich mal am Rechner bin; aber
- permanente Power-Limits setzt man imo einmalig und positioniert das nicht prominent.
- richtig gruselig ist diese ineffektive Mischung der "eocr"-Attribute. Da passiert ganz sicher was anderes wie gedacht 😉.
AhoyDTU hat mich jetzt erfolgreich in den Wahnsinn getrieben. Laut Entwickler ist wohl eine überarbeitet Version in der Röhre. Hab ich aber nicht verwartet.
Und bin eben jetzt dran auf openDTU zu switchen. (Ganz nebenbei fliegt wlan über Board) (bei Interesse kann ich unser eth+cmt+nrf config posten)
So und weil du es eben sagst, openDTU kann angeblich auch json.(sagt zumindest Google ki)
BTW. Zum Thema zeigmal. Ich würd dein ,, 99_attrT_Ahoy_Utils.pm" auf openDTU ummodeln. Und in Fhem die Optik etwas aufhübschen, könntest du bitte dann ein Template draus bauen bzw. das aktuelle anpassen?
Danke
Zitat von: Beta-User am 14 Juli 2025, 18:54:13richtig gruselig ist diese ineffektive Mischung der "eocr"-Attribute
was sind eocr-attr?
Zitat von: Beta-User am 14 Juli 2025, 18:54:13permanente Power-Limits setzt man imo einmalig und positioniert das nicht prominent
das ist TEMP. Und neben den anderen 4 Readings und An/aus das einzige, was ich in fhem direkt brauche. Der Rest ist vollständigkeitshalber hier im Forum eingepflegt um es anderen einfacher zu machen erstmal alles da zu haben und um für mich einen Ausgangspunkt zu schaffen. Was gibt es überhaupt an Info. Das meiste wird rausfliegen.
Also für ahoydtu sieht das Template in etwa so (bild1) aus und die wechselrichter so (bild2)
Und ich bau das heut auf openDTU um ... bzw. die ein oder andere Änderung kommt noch mit rein.
Ist doch hübsch. Kannst du da irgendwas schalten? Falls man es bräuchte ....
Mein Stand: https://forum.fhem.de/index.php?msg=1339408
In dem thread gibt es vermutlich auch diverse Hinweise bzgl. Benennung der Readings und der "eocr"-Thematik (event-on-.*).
Wüsst nicht was ich da schalten soll.
Falls du auf ne nulleinspeisung anspielst, das geht per Zeroexport PythonScript viel einfacher.
Brauch ich aber nimmer. Bei mir nuckelt der Multiplus den ,,ganzen" überschuß weg.
Und schalten kannste natürlich auch ... per set
Zitat von: Beta-User am 15 Juli 2025, 08:47:51In dem thread gibt es vermutlich auch diverse Hinweise bzgl. Benennung der Readings und der "eocr"-Thematik (event-on-.*).
hab da mal kurz reingeschaut, bekomme aber noch immer nicht die Verbindung "eocr-Thematik"/"gruselig" mit meinem Erguss hin. Oder was "eocr" ist. In dem Link gehts um JSON (an dieser Stelle). openDTU "kann" mWn kein JSON mit MQTT. Aber wohl über die API
Zitat von: DasQ am 15 Juli 2025, 08:57:39Wüsst nicht was ich da schalten soll.
Zb das, was ich bei mir schalte. Aber ja, wenn man nicht schalten will, ergibt sich die Problematik wieso ich den Thread eröffnet habe nicht.
so hab mal im ersten schuss das bei mir jetzt so realisiert.
die erste OpenDTU (ich hab zwei)
defmod OpenDTU_9823408 MQTT2_DEVICE OpenDTU_9823408
attr OpenDTU_9823408 DbLogExclude .*
attr OpenDTU_9823408 bridgeRegexp solar/([[:xdigit:]]+)/.*:.* "solar_$1"
attr OpenDTU_9823408 devStateIcon online:10px-kreis-gruen offline:10px-kreis-rot
attr OpenDTU_9823408 icon solar
attr OpenDTU_9823408 model hoymiles_opendtu_hub_bridge
attr OpenDTU_9823408 readingList solar/dtu/uptime:.* uptime\
solar/dtu/status:.* status\
solar/dtu/ip:.* ip\
solar/dtu/rssi:.' rssi\
solar/dtu/hostname:.* hostname\
solar/ac/power:.* power\
solar/ac/yieldtotal:.* yieldtotal\
solar/ac/yieldday:.* yieldday\
solar/ac/is_valid:.* is_valid\
solar/dc/power:.* powerdc\
solar/dc/irradiation:.* irradiation\
solar/dc/is_valid:.* is_validdc\
OpenDTU_9823408:solar/dtu/heap/size:.* size\
OpenDTU_9823408:solar/dtu/heap/free:.* free\
OpenDTU_9823408:solar/dtu/heap/minfree:.* minfree\
OpenDTU_9823408:solar/dtu/heap/maxalloc:.* maxalloc
attr OpenDTU_9823408 room Strom
attr OpenDTU_9823408 stateFormat <a href="http://ip" target="_blank">\
status\
</a>\
Leistung AC power W<br>\
Ertrag/Tag yieldday Wh
setstate OpenDTU_9823408 <a href="http://192.168.1.115" target="_blank">\
online\
</a>\
Leistung AC 400.5 W<br>\
Ertrag/Tag 1965 Wh
setstate OpenDTU_9823408 2025-07-15 06:56:06 IODev venus
setstate OpenDTU_9823408 2025-07-11 14:17:12 attrTemplateVersion 20240513
setstate OpenDTU_9823408 2025-07-15 11:15:11 free 167296
setstate OpenDTU_9823408 2025-07-15 11:15:11 hostname OpenDTU-95E4B0
setstate OpenDTU_9823408 2025-07-15 11:15:11 ip 192.168.1.115
setstate OpenDTU_9823408 2025-07-15 11:15:12 irradiation 16.628
setstate OpenDTU_9823408 2025-07-15 11:15:12 is_valid 1
setstate OpenDTU_9823408 2025-07-15 11:15:12 is_validdc 1
setstate OpenDTU_9823408 2025-07-15 11:15:11 maxalloc 94196
setstate OpenDTU_9823408 2025-07-15 11:15:11 minfree 138524
setstate OpenDTU_9823408 2025-07-15 11:15:12 power 400.5
setstate OpenDTU_9823408 2025-07-15 11:15:12 powerdc 421.5
setstate OpenDTU_9823408 2025-07-15 11:15:11 size 282372
setstate OpenDTU_9823408 2025-07-15 09:48:10 status online
setstate OpenDTU_9823408 2025-07-15 11:15:11 uptime 85988
setstate OpenDTU_9823408 2025-07-15 11:15:12 yieldday 1965
setstate OpenDTU_9823408 2025-07-15 11:15:12 yieldtotal 2895.808
exemplarisch ein Hoymiles von mir
defmod 1500Terrasse MQTT2_DEVICE solar_116183138979
attr 1500Terrasse DbLogExclude .*
attr 1500Terrasse devStateIcon {FHEM::attrT_OpenDTU_Utils::devStateIcon($name)}
attr 1500Terrasse icon measure_photovoltaic_inst
attr 1500Terrasse model hoymiles_opendtu_microinverter
attr 1500Terrasse readingList solar/116183138979/name:.* name\
solar/116183138979/status/reachable:.* reachable\
solar/116183138979/status/producing:.* producing\
solar/116183138979/status/last_update:.* last_update\
solar/116183138979/device/bootloaderversion:.* bootloaderversion\
solar/116183138979/device/fwbuildversion:.* fwbuildversion\
solar/116183138979/device/fwbuilddatetime:.* fwbuilddatetime\
solar/116183138979/device/hwpartnumber:.* hwpartnumber\
solar/116183138979/device/hwversion:.* hwversion\
solar/116183138979/status/limit_relative:.* limit_relative\
solar/116183138979/status/limit_absolute:.* limit_absolute\
solar/116183138979/0/powerdc:.* powerdc\
solar/116183138979/0/yieldday:.* yieldday0\
solar/116183138979/0/yieldtotal:.* yieldtotal0\
solar/116183138979/0/voltage:.* voltage\
solar/116183138979/0/current:.* current\
solar/116183138979/0/power:.* power\
solar/116183138979/0/frequency:.* frequency\
solar/116183138979/0/temperature:.* temperature\
solar/116183138979/0/powerfactor:.* powerfactor\
solar/116183138979/0/efficiency:.* efficiency\
solar/116183138979/0/reactivepower:.* reactivepower\
solar/116183138979/1/voltage:.* voltage1\
solar/116183138979/1/current:.* current1\
solar/116183138979/1/power:.* power1\
solar/116183138979/1/irradiation:.* irradiation1\
solar/116183138979/1/yieldday:.* yieldday1\
solar/116183138979/1/yieldtotal:.* yieldtotal1\
solar/116183138979/1/name:.* name1\
solar/116183138979/2/voltage:.* voltage2\
solar/116183138979/2/current:.* current2\
solar/116183138979/2/power:.* power2\
solar/116183138979/2/irradiation:.* irradiation2\
solar/116183138979/2/yieldday:.* yieldday2\
solar/116183138979/2/yieldtotal:.* yieldtotal2\
solar/116183138979/2/name:.* name2\
solar/116183138979/3/voltage:.* voltage3\
solar/116183138979/3/current:.* current3\
solar/116183138979/3/power:.* power3\
solar/116183138979/3/irradiation:.* irradiation3\
solar/116183138979/3/yieldday:.* yieldday3\
solar/116183138979/3/yieldtotal:.* yieldtotal3\
solar/116183138979/3/name:.* name3\
solar/116183138979/4/voltage:.* voltage4\
solar/116183138979/4/current:.* current4\
solar/116183138979/4/power:.* power4\
solar/116183138979/4/irradiation:.* irradiation4\
solar/116183138979/4/yieldday:.* yieldday4\
solar/116183138979/4/yieldtotal:.* yieldtotal4\
solar/116183138979/4/name:.* name4\
solar/116183138979/radio/tx_request:.* tx_request\
solar/116183138979/radio/tx_re_request:.* tx_re_request\
solar/116183138979/radio/rx_success:.* rx_success\
solar/116183138979/radio/rx_fail_nothing:.* rx_fail_nothing\
solar/116183138979/radio/rx_fail_partial:.* rx_fail_partial\
solar/116183138979/radio/rx_fail_corrupt:.* rx_fail_corrupt\
solar/116183138979/radio/rssi:.* rssi
attr 1500Terrasse room Strom
attr 1500Terrasse setList on:noArg solar/116183138979/cmd/power 1\
off:noArg solar/116183138979/cmd/power 0\
reboot:noArg solar/116183138979/cmd/restart 1\
limit_non_persistent_abs solar/116183138979/cmd/limit_persistent_absolute $EVTPART1\
limit_non_persistent_pct:slider,2,1,100 solar/116183138979/cmd/limit_persistent_relative $EVTPART1\
limit_persistent_abs solar/116183138979/cmd/limit_nonpersistent_absolute $EVTPART1\
limit_persistent_pct:slider,2,1,100 solar/116183138979/cmd/limit_nonpersistent_relative $EVTPART1
attr 1500Terrasse setStateList on off
attr 1500Terrasse webCmd :
setstate 1500Terrasse set_on
setstate 1500Terrasse 2025-07-15 06:56:06 IODev MQTT2_Broker
setstate 1500Terrasse 2025-07-11 14:18:47 associatedWith OpenDTU_9823408
setstate 1500Terrasse 2025-07-11 14:18:44 attrTemplateVersion 20240513
setstate 1500Terrasse 2025-07-15 11:13:11 bootloaderversion 100
setstate 1500Terrasse 2025-07-15 11:13:11 current 0.29
setstate 1500Terrasse 2025-07-15 11:13:11 current1 0.75
setstate 1500Terrasse 2025-07-15 11:13:11 current2 0.01
setstate 1500Terrasse 2025-07-15 11:13:11 current3 0.82
setstate 1500Terrasse 2025-07-15 11:13:11 current4 0.01
setstate 1500Terrasse 2025-07-15 11:13:11 efficiency 94.889
setstate 1500Terrasse 2025-07-15 11:13:11 frequency 49.99
setstate 1500Terrasse 2025-07-15 11:13:11 fwbuilddatetime 2021-12-24 18:21:00
setstate 1500Terrasse 2025-07-15 11:13:11 fwbuildversion 10018
setstate 1500Terrasse 2025-07-15 11:13:11 hwpartnumber 269627393
setstate 1500Terrasse 2025-07-15 11:13:11 hwversion 01.10
setstate 1500Terrasse 2025-07-15 11:13:11 irradiation1 8.444
setstate 1500Terrasse 2025-07-15 11:13:11 irradiation2 0.000
setstate 1500Terrasse 2025-07-15 11:13:11 irradiation3 9.235
setstate 1500Terrasse 2025-07-15 11:13:11 irradiation4 0.000
setstate 1500Terrasse 2025-07-15 11:13:11 last_update 1752570781
setstate 1500Terrasse 2025-07-15 11:13:11 limit_absolute 1500.00
setstate 1500Terrasse 2025-07-15 11:13:11 limit_relative 100.00
setstate 1500Terrasse 2025-07-15 11:13:11 name HM15Terrasse
setstate 1500Terrasse 2025-07-15 11:13:11 name1 1_1500_Ter
setstate 1500Terrasse 2025-07-15 11:13:11 name2
setstate 1500Terrasse 2025-07-15 11:13:11 name3 3_1500_Ter
setstate 1500Terrasse 2025-07-15 11:13:11 name4
setstate 1500Terrasse 2025-07-15 11:13:11 power 68.7
setstate 1500Terrasse 2025-07-15 11:13:11 power1 34.2
setstate 1500Terrasse 2025-07-15 11:13:11 power2 0.4
setstate 1500Terrasse 2025-07-15 11:13:11 power3 37.4
setstate 1500Terrasse 2025-07-15 11:13:11 power4 0.4
setstate 1500Terrasse 2025-07-15 11:13:11 powerdc 72.4
setstate 1500Terrasse 2025-07-15 11:13:11 powerfactor 0.951
setstate 1500Terrasse 2025-07-15 11:13:11 producing 1
setstate 1500Terrasse 2025-07-15 11:13:11 reachable 1
setstate 1500Terrasse 2025-07-15 11:13:11 reactivepower 22.5
setstate 1500Terrasse 2025-07-15 11:13:11 rssi -80
setstate 1500Terrasse 2025-07-15 11:13:11 rx_fail_corrupt 0
setstate 1500Terrasse 2025-07-15 11:13:11 rx_fail_nothing 682
setstate 1500Terrasse 2025-07-15 11:13:11 rx_fail_partial 0
setstate 1500Terrasse 2025-07-15 11:13:11 rx_success 448
setstate 1500Terrasse 2025-07-15 10:53:42 state set_on
setstate 1500Terrasse 2025-07-15 11:13:11 temperature 23.7
setstate 1500Terrasse 2025-07-15 11:13:11 tx_re_request 71
setstate 1500Terrasse 2025-07-15 11:13:11 tx_request 1130
setstate 1500Terrasse 2025-07-15 11:13:11 voltage 240.2
setstate 1500Terrasse 2025-07-15 11:13:11 voltage1 45.6
setstate 1500Terrasse 2025-07-15 11:13:11 voltage2 45.6
setstate 1500Terrasse 2025-07-15 11:13:11 voltage3 45.9
setstate 1500Terrasse 2025-07-15 11:13:11 voltage4 45.9
setstate 1500Terrasse 2025-07-15 10:53:12 yieldday 1826
setstate 1500Terrasse 2025-07-15 11:13:11 yieldday0 386
setstate 1500Terrasse 2025-07-15 11:13:11 yieldday1 189
setstate 1500Terrasse 2025-07-15 11:13:11 yieldday2 1
setstate 1500Terrasse 2025-07-15 11:13:11 yieldday3 195
setstate 1500Terrasse 2025-07-15 11:13:11 yieldday4 1
setstate 1500Terrasse 2025-07-15 10:53:12 yieldtotal 2895.669
setstate 1500Terrasse 2025-07-15 11:13:11 yieldtotal0 1585.959
setstate 1500Terrasse 2025-07-15 11:13:11 yieldtotal1 449.798
setstate 1500Terrasse 2025-07-15 11:13:11 yieldtotal2 334.347
setstate 1500Terrasse 2025-07-15 11:13:11 yieldtotal3 477.891
setstate 1500Terrasse 2025-07-15 11:13:11 yieldtotal4 323.923
die dazugehörige 99_attrT_OpenDTU_Utils.pm
##############################################
# $Id: 99_attrT_Ahoy_Utils.pm 28254 2023-12-05 15:03:19Z Beta-User $
#
package FHEM::attrT_OpenDTU_Utils; ## no critic 'Package declaration'
use strict;
use warnings;
use Color;
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
#-- Run before package compilation
BEGIN {
# Import from main context
GP_Import(
qw(
FW_makeImage
AttrVal
InternalVal
ReadingsVal
ReadingsNum
ReadingsAge
isday
defs
)
);
}
sub main::attrT_OpenDTU_Utils_Initialize { goto &Initialize }
# initialize ##################################################################
sub Initialize {
my $hash = shift;
return;
}
# Enter you functions below _this_ line.
sub devStateIcon {
my $devname = shift // return;
my $panels = shift // 4;
my $colors = shift // 0;
return if !defined $defs{$devname};
my $col = substr(Color::pahColor(-10,50,70,ReadingsNum($devname,'temperature',0),$colors),0,6);
my $ret = FW_makeImage("sani_solar_temp\@$col",'file_unknown@grey');
$ret .= ' ';
$ret .= ReadingsNum($devname,'temperature',0,1);
$ret .= ' °C<br>';
my $avail = ReadingsNum($devname,'reachable',0);
$avail = $avail > 0 ? '10px-kreis-gruen' : isday() ? '10px-kreis-rot' :'10px-kreis-gelb';
$ret .= FW_makeImage($avail, 'edit_settings');
$ret .= ' ';
if ( $panels > 1 ) {
$ret .= ReadingsNum($devname,'power',0);
$ret .= ' W / ';
$ret .= ReadingsNum($devname,'yieldday0',0);
$ret .= ' Wh';
my $total = ReadingsNum($devname,'yieldtotal0',0,1);
if ( $total > 0 ) {
$ret .= ' / ';
$ret .= $total;
$ret .= ' kWh';
}
for (1..$panels) {
$ret .= '<br>';
$col = substr(Color::pahColor(0,50,100,ReadingsNum($devname,"irradiation$_",0),$colors),0,6);
$ret .= FW_makeImage("solar\@$col",'file_unknown@grey');
$ret .= ' ';
$ret .= ReadingsNum($devname,"power$_",0);
$ret .= ' W / ';
$ret .= ReadingsNum($devname,"yieldday$_",0);
$ret .= ' Wh';
$total = ReadingsNum($devname,"yieldtotal$_",0,1);
if ( $total > 0 ) {
$ret .= ' / ';
$ret .= $total;
$ret .= ' kWh';
}
}
} else {
$col = substr(Color::pahColor(0,50,100,ReadingsNum($devname,"irradiation1",0),$colors),0,6);
$ret .= FW_makeImage("solar\@$col",'file_unknown@grey');
$ret .= ' ';
$ret .= ReadingsNum($devname,'power',0);
$ret .= ' W / ';
$ret .= ReadingsNum($devname,'yieldday',0);
$ret .= ' Wh';
my $total = ReadingsNum($devname,'yieldtotal',0,1);
if ( $total > 0 ) {
$ret .= ' / ';
$ret .= $total;
$ret .= ' kWh';
}
}
return qq(<div><p style="text-align:right">$ret</p></div>);
}
den "yieldday" und "yieldtotal" hab ich händisch in die readings eingebaut, da wäre womöglich ein bessere greifendes bridge regex ganz gut. in der "99_attrT_Ahoy_Utils.pm" von dir Beta müsste man lediglich einige variablen von großbuchstaben auf klein ändern. dann könnte (d)eine datei bleiben.
und ach ja, auf den KI müll von google nicht hören. Das mit alles in einem payload packet kann openDTU eben nicht. hat der openDTU künstler seine eigene denkweise ... von der er nicht abrückt. wäre aber ungemein dem netzwerktraffik dienlich
Kurz mal OT. Meiner läuft ja erst seit 2 Tagen:
Insel. Eben lief die Batt langsam voll und meine Anlage hat brav über die Frequenz den Hoymiles runtergeregelt. Das ging gefühlt eine Stunde gut (auch mal wieder rauf bei Verbrauch), bis der Hoymiles irgendwann 0 geliefert hat. Top, dachte ich, funktioniert ja wie gewünscht .... nur hat er sich bei Leerung der Batt und wieder 50Hz einfach nicht wieder "eingeschaltet". Und ich kann ihn auch nicht über Neustart gerade davon überzeugen die Arbeit wieder aufzunehmen.
Ist mir irgendetwas Grundlegendes entgangen?
Was ist deine Anlage?
Hoymiles allein sind nicht Schwarzstartfähig.
Die Anlage kommt von Studer.
Seit heute generiert der Mikro wieder Strom. Hatte gestern alles probiert (AC/DC abgeklemmt, etc.) um das Ding wieder zum Starten zu bringen. Brauchte wohl die Nacht (oder welche Pause auch immer). Ich vermute, es liegt an den Frequenzsettings. Im Moment ist max +2Hz Frequenzverschiebung eingestellt. Ich könnte mir vorstellen, dass der HMS ab 51,5Hz komplett abschaltet (NA-Schutz) und dann eben "die Nacht" braucht, bis er überhaupt wieder angeht.
Ich hatte gehofft, dass er auch schon bei wieder normalen 50Hz loslegt. Probiere gerade als max Setting Frequenz 51,5 Hz. Mal schauen, was jetzt passiert. Als nächsten Schritt 51,4. Möchte nur sichergehen, dass Komplettdrosselung und danach aber wieder Produktion funktioniert. Weiss nicht, wo der HMS bei 51,4 Hz steht.
Du hättest ihn womöglich komplett stromlos machen müssen (also Panel weg)
Und Jup ich mein auch was gelesen zu haben das die Reglung über Frequenz recht zickig ist. ich mein auch mal was gesehen zu haben, das der bei 51,5hz abschaltet und dann den Rest vom Tag ausbleibt. Aber da war auch der Sinus nicht ganz sauber realisiert.
Die Daten findest du aber ganz sicher im gridcode vom wechselrichter.
Nominal Frequency 50 Hz
Low Frequency 1 (LF1) 48 Hz
LF1 Maximum Trip Time (MTT) 2 s
High Frequency 1 (HF1) 51 Hz
HF1 Maximum Trip time (MTT) 2 s
Low Frequency 2 (LF2) 47,5 Hz
LF2 Maximum Trip Time (MTT) 0,5 s
High Frequency 2 (HF2) 52 Hz
HF2 Maximum Trip time (MTT) 0,5 s
sagt mir leider nichts, wie er sich DANACH verhält. "Trip time" könnte man auch als Abschaltung interpretieren. Die dann auch nach 2 Sekunden bei 51Hz passieren müsste .... wahrscheinlich eher "Drosselung", die dann aber auch bis/ab 52Hz funktionieren sollte -> schaltet nicht ab sondern liefert wieder bei Absenkung.... was aber gestern zumindest kläglich gescheitert ist.
schaut bei mir (ahoy DTU) anders aus
Du hast auch einen anderen Gridcode... nen schöneren scheint mir ;)
Aber spannend, dass bei dir der erste "LF1" tatsächlich erst bei 51,5 liegt.
Wenn man die Logik 1:1 überträgt, wäre das bei mir die 51Hz (HF1), was erklärt, warum er abschaltet ... was er gerade eben wieder gemacht hat. Nervig.
Noch schöner, dass ich gerade nicht weiss, wie ich deine VDE4105 ohne Hoymile DTU auf die Kiste bekomme. Oder das Gegebene anpassen kann. Bei mir nennt die sich XX - EN 50549-1:2019
Magst nicht das Topic ändern? (Das geht) (z.b. openDTU mit Hoymiles HMS-2000-4T im inselbetrieb)
Und denk dran, die Updates gehen nur mit der Pro Version ... mit dem light ding gehts nicht.
DTU-WLite-S
geht nicht? Sicher? Habe gerade gelesen, dass du zumindest das Profil umstellen kannst.
Ich änder mal das Topic ...