Hoymiles OpenDTU setup with OH3 (mqtt)

Hey all, as I could not find anything on the integration of OpenDTU, i did this quick and dirty thing/item config for OH3. The Inverter needs to be powered on with at least one solar panel attached, otherwise it won’t send any data to the DTU. OpenDTU is a free implementation of the DTU-Protocol used for Hoymiles inverters. My config is based on a HM1200, possibly adjustable to other inverters aswell (mine has 4 Inputs, 2 MPPT trackers, similar to the HM1500, but i would recommend the MQTT-Explorer or similar, to figure that out)

Aready discussed in the forum
*.items-file:

Group       OpenDTU
Number      OpenDTU1_uptime					"OpenDTU1 uptime"                   (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:uptime"}
String      OpenDTU1_ip						"OpenDTU1 IP"                       (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:ip"}
Number      OpenDTU1_wifi_rssi				"OpenDTU1 WiFi RSSI"                (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:rssi"}
// Inverters
String      OpenDTU1_inv1_name				"OpenDTU1 inv1 name"                (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_name"}
Number      OpenDTU1_inv1_pow				"OpenDTU1 inv1 power (AC)"          (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_pow"}
Number      OpenDTU1_inv1_voltage			"OpenDTU1 inv1 voltage (AC)"        (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_voltage"}
Number      OpenDTU1_inv1_current			"OpenDTU1 inv1 current (AC)"        (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_current"}
Number      OpenDTU1_inv1_frequency			"OpenDTU1 inv1 frequency (AC)"      (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_frequency"}
Number      OpenDTU1_inv1_efficiency		"OpenDTU1 inv1 efficiency (AC)"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_efficiency"}
Number      OpenDTU1_inv1_powerfactor		"OpenDTU1 inv1 powerfactor (AC)"	(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_powerfactor"}
Number      OpenDTU1_inv1_reactivepower		"OpenDTU1 inv1 reactivepower (AC)"	(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_reactivepower"}
Number      OpenDTU1_inv1_pow_dc			"OpenDTU1 inv1 power (DC)"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_pow_dc"}
Number      OpenDTU1_inv1_temp				"OpenDTU1 inv1 temperature"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_temp"}
Number      OpenDTU1_inv1_yieldday			"OpenDTU1 inv1 yield (day)"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_yieldday"}
Number      OpenDTU1_inv1_yieldtotal		"OpenDTU1 inv1 yield (total)"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_yieldtotal"}
// String 1
Number      OpenDTU1_inv1_s1_voltage		"OpenDTU1 inv1 s1 voltage"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s1_voltage"}
Number      OpenDTU1_inv1_s1_current		"OpenDTU1 inv1 s1 current"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s1_current"}
Number      OpenDTU1_inv1_s1_pow			"OpenDTU1 inv1 s1 power"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s1_pow"}
Number      OpenDTU1_inv1_s1_yieldday		"OpenDTU1 inv1 s1 yield (day)"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s1_yieldday"}
Number      OpenDTU1_inv1_s1_yieldtotal		"OpenDTU1 inv1 s1 yield (total)"	(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s1_yieldtotal"}
Number      OpenDTU1_inv1_s1_irradiation	"OpenDTU1 inv1 s1 irradiation"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s1_irradiation"}
// String 2
Number      OpenDTU1_inv1_s2_voltage		"OpenDTU1 inv1 s2 voltage"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s2_voltage"}
Number      OpenDTU1_inv1_s2_current		"OpenDTU1 inv1 s2 current"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s2_current"}
Number      OpenDTU1_inv1_s2_pow			"OpenDTU1 inv1 s2 power"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s2_pow"}
Number      OpenDTU1_inv1_s2_yieldday		"OpenDTU1 inv1 s2 yield (day)"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s2_yieldday"}
Number      OpenDTU1_inv1_s2_yieldtotal		"OpenDTU1 inv1 s2 yield (total)"	(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s2_yieldtotal"}
Number      OpenDTU1_inv1_s2_irradiation	"OpenDTU1 inv1 s2 irradiation"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s2_irradiation"}
// String 3
Number      OpenDTU1_inv1_s3_voltage		"OpenDTU1 inv1 s3 voltage"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s3_voltage"}
Number      OpenDTU1_inv1_s3_current		"OpenDTU1 inv1 s3 current"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s3_current"}
Number      OpenDTU1_inv1_s3_pow			"OpenDTU1 inv1 s3 power"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s3_pow"}
Number      OpenDTU1_inv1_s3_yieldday		"OpenDTU1 inv1 s3 yield (day)"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s3_yieldday"}
Number      OpenDTU1_inv1_s3_yieldtotal		"OpenDTU1 inv1 s3 yield (total)"	(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s3_yieldtotal"}
Number      OpenDTU1_inv1_s3_irradiation	"OpenDTU1 inv1 s3 irradiation"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s3_irradiation"}
// String 4
Number      OpenDTU1_inv1_s4_voltage		"OpenDTU1 inv1 s4 voltage"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s4_voltage"}
Number      OpenDTU1_inv1_s4_current		"OpenDTU1 inv1 s4 current"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s4_current"}
Number      OpenDTU1_inv1_s4_pow			"OpenDTU1 inv1 s4 power"			(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s4_pow"}
Number      OpenDTU1_inv1_s4_yieldday		"OpenDTU1 inv1 s4 yield (day)"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s4_yieldday"}
Number      OpenDTU1_inv1_s4_yieldtotal		"OpenDTU1 inv1 s4 yield (total)"	(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s4_yieldtotal"}
Number      OpenDTU1_inv1_s4_irradiation	"OpenDTU1 inv1 s4 irradiation"		(OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_s4_irradiation"}
// Inverter info
Number      OpenDTU1_inv1_bl_version		"OpenDTU1 inv1 bootloader version"  (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_bl_version"}
Number      OpenDTU1_inv1_fw_build_version  "OpenDTU1 inv1 firmware version"    (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_fw_build_version"}
DateTime    OpenDTU1_inv1_fw_build_datetime "OpenDTU1 inv1 fw build datetime"   (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_fw_build_datetime"}
Number      OpenDTU1_inv1_hw_partnumber     "OpenDTU1 inv1 hardware partnumber" (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_hw_partnumber"}
Number      OpenDTU1_inv1_hw_version        "OpenDTU1 inv1 hardware version"    (OpenDTU)       {channel="mqtt:topic:default:OpenDTU1:inv1_hw_version"}
// Settings
Number      OpenDTU1_inv1_limit				"OpenDTU1 inv1 limit"				(OpenDTU)		{channel="mqtt:topic:default:OpenDTU1:inv1_limit"}

And the things-file:

Bridge mqtt:broker:default "MQTT Local" [host="localhost", secure=false, clientID="OH3_Inbuilt"]  
{
    Thing topic OpenDTU1 "OpenDTU-123456" @ "Network" [availabilityTopic="ESP/OpenDTU/dtu/status", payloadAvailable="online", payloadNotAvailable="offline"]
    {
        Channels:
        // Technical things
        Type number : uptime					"OpenDTU uptime"		[stateTopic="ESP/OpenDTU/dtu/uptime"]
        Type string : ip						"OpenDTU IP"			[stateTopic="ESP/OpenDTU/dtu/ip"]
        Type number : rssi						"OpenDTU rssi"			[stateTopic="ESP/OpenDTU/dtu/rssi"]
        // First inverter, serial: <inverter-serial>
        Type string : inv1_name					"Inverter name"			[stateTopic="ESP/OpenDTU/<inverter-serial>/name"]
        // Main values
        Type number : inv1_pow					"Total (AC) power"		[stateTopic="ESP/OpenDTU/<inverter-serial>/0/power"]
        Type number : inv1_voltage				"I1 AC voltage"			[stateTopic="ESP/OpenDTU/<inverter-serial>/0/voltage"]
        Type number : inv1_current				"I1 AC current"			[stateTopic="ESP/OpenDTU/<inverter-serial>/0/current"]
        Type number : inv1_frequency			"I1 AC Frequency"		[stateTopic="ESP/OpenDTU/<inverter-serial>/0/frequency"]
        Type number : inv1_efficiency			"I1 AC efficiency"		[stateTopic="ESP/OpenDTU/<inverter-serial>/0/efficiency"]
        Type number : inv1_powerfactor			"I1 AC powerfactor"		[stateTopic="ESP/OpenDTU/<inverter-serial>/0/powerfactor"]
        Type number : inv1_reactivepower		"I1 AC reactivepower"	[stateTopic="ESP/OpenDTU/<inverter-serial>/0/reactivepower"]
        Type number : inv1_pow_dc				"DC Power (total)"		[stateTopic="ESP/OpenDTU/<inverter-serial>/0/powerdc"]
        Type number : inv1_temp					"Inverter temperature"	[stateTopic="ESP/OpenDTU/<inverter-serial>/0/temperature"]
        Type number : inv1_yieldday				"Yield day"				[stateTopic="ESP/OpenDTU/<inverter-serial>/0/yieldday"]
        Type number : inv1_yieldtotal			"Yield total"			[stateTopic="ESP/OpenDTU/<inverter-serial>/0/yieldtotal"]
        // Inverter 1 - String 1
        Type number : inv1_s1_voltage			"I1 S1 voltage"			[stateTopic="ESP/OpenDTU/<inverter-serial>/1/voltage"]
        Type number : inv1_s1_current			"I1 S1 current"			[stateTopic="ESP/OpenDTU/<inverter-serial>/1/current"]
        Type number : inv1_s1_pow				"I1 S1 power"			[stateTopic="ESP/OpenDTU/<inverter-serial>/1/power"]
        Type number : inv1_s1_yieldday			"I1 S1 yield day"		[stateTopic="ESP/OpenDTU/<inverter-serial>/1/yieldday"]
        Type number : inv1_s1_yieldtotal		"I1 S1 yield total"		[stateTopic="ESP/OpenDTU/<inverter-serial>/1/yieldtotal"]
        Type number : inv1_s1_irradiation		"I1 S1 irradiation"		[stateTopic="ESP/OpenDTU/<inverter-serial>/1/irradiation"]
        // Inverter 1 - String 2
        Type number : inv1_s2_voltage			"I1 S2 voltage"			[stateTopic="ESP/OpenDTU/<inverter-serial>/2/voltage"]
        Type number : inv1_s2_current			"I1 S2 current"			[stateTopic="ESP/OpenDTU/<inverter-serial>/2/current"]
        Type number : inv1_s2_pow				"I1 S2 power"			[stateTopic="ESP/OpenDTU/<inverter-serial>/2/power"]
        Type number : inv1_s2_yieldday			"I1 S2 yield day"		[stateTopic="ESP/OpenDTU/<inverter-serial>/2/yieldday"]
        Type number : inv1_s2_yieldtotal		"I1 S2 yield total"		[stateTopic="ESP/OpenDTU/<inverter-serial>/2/yieldtotal"]
        Type number : inv1_s2_irradiation		"I1 S2 irradiation"		[stateTopic="ESP/OpenDTU/<inverter-serial>/2/irradiation"]
        // Inverter 1 - String 3
        Type number : inv1_s3_voltage			"I1 S3 voltage"			[stateTopic="ESP/OpenDTU/<inverter-serial>/3/voltage"]
        Type number : inv1_s3_current			"I1 S3 current"			[stateTopic="ESP/OpenDTU/<inverter-serial>/3/current"]
        Type number : inv1_s3_pow				"I1 S3 power"			[stateTopic="ESP/OpenDTU/<inverter-serial>/3/power"]
        Type number : inv1_s3_yieldday			"I1 S3 yield day"		[stateTopic="ESP/OpenDTU/<inverter-serial>/3/yieldday"]
        Type number : inv1_s3_yieldtotal		"I1 S3 yield total"		[stateTopic="ESP/OpenDTU/<inverter-serial>/3/yieldtotal"]
        Type number : inv1_s3_irradiation		"I1 S3 irradiation"		[stateTopic="ESP/OpenDTU/<inverter-serial>/3/irradiation"]
        // Inverter 1 - String 4
        Type number : inv1_s4_voltage			"I1 S4 voltage"			[stateTopic="ESP/OpenDTU/<inverter-serial>/4/voltage"]
        Type number : inv1_s4_current			"I1 S4 current"			[stateTopic="ESP/OpenDTU/<inverter-serial>/4/current"]
        Type number : inv1_s4_pow				"I1 S4 power"			[stateTopic="ESP/OpenDTU/<inverter-serial>/4/power"]
        Type number : inv1_s4_yieldday			"I1 S4 yield day"		[stateTopic="ESP/OpenDTU/<inverter-serial>/4/yieldday"]
        Type number : inv1_s4_yieldtotal		"I1 S4 yield total"		[stateTopic="ESP/OpenDTU/<inverter-serial>/4/yieldtotal"]
        Type number : inv1_s4_irradiation		"I1 S4 irradiation"		[stateTopic="ESP/OpenDTU/<inverter-serial>/4/irradiation"]
        // Inverter info
        Type number : inv1_bl_version			"I1 bootloader version"	[stateTopic="ESP/OpenDTU/<inverter-serial>/device/bootloaderversion"]
        Type number : inv1_fw_build_version		"I1 firmware version"	[stateTopic="ESP/OpenDTU/<inverter-serial>/device/fwbuildversion"]
        Type datetime : inv1_fw_build_datetime	"I1 fw build datetime"	[stateTopic="ESP/OpenDTU/<inverter-serial>/device/fwbuilddatetime"]
        Type number : inv1_hw_partnumber		"I1 hw part number"		[stateTopic="ESP/OpenDTU/<inverter-serial>/device/hwpartnumber"]
        Type number : inv1_hw_version			"I1 hw version"			[stateTopic="ESP/OpenDTU/<inverter-serial>/device/hwversion"]
        // Settings
        Type string : inv1_limit				"Inverter limit"		[stateTopic="ESP/OpenDTU/<inverter-serial>/settings/limit"]
    }
}

Feel free to use it :wink:
Best regards,
Dominic

Hi Dominic,
Thanks for this work!
I’m now working on getting my Hoymiles DTU Pro unit to connect to OpenHab. I had been under the impression it used the SunSpec Modbus protocol - not sure if OpenDTU is something else.
Has this implementation been working for you?
I see a few other bindings that use modbus, and had been under the Impression that SunSpec was the standard for many/most solar systems that make this available.
I’ll let you know how it goes.
Ben

Hi @bdm
This is showcasing the OpenDTU project which is basically a free and as intended open version of the DTU. It’s a diy project utilizing a microcontroller (ESP32)

Documentation can be found on GitHub: GitHub - tbnobody/OpenDTU: Software for ESP32 to talk to Hoymiles/TSUN/Solenso Inverters

Regarding the DTU Pro, you might reach out to this project:

This is a kind of modbus to MQTT bridge, which should work with Openhab, too.

BR
Dominic

Ah, I see.
So, if I go the wired RS485 serial route, it should work well.
I’m going to try the ethernet TCP route, if I can get my installer to enable the modbus connection / set an address (I think that’s the issue).
I’m trying the SolarLog binding, as SolarLog is part of the SunSpec alliance, and presumably then uses the same modbus protocols…
Ben

[edit, on deeper dive, I see this works via http0.9 and doesn’t need the wired serial connection. The CURL command referenced from the home assistant script doesn’t work for me from a command line, so I think there is a setting that my installer needs to enable in my DTU settings. I’m waiting to hear back from him.
curl 192.168.x.xxx:502/hometable.xml --http0.9
or
curl 192.168.x.xxx/hometable.xml --http0.9
]
]

Looking deeper into this OPenDTU, it appears to replace the Hoymiles Bridge/DTU.
Do you know if the two can be used concurrently? (OpenDTU Esp32/similar, as well as the Hoymile DTU(Pro)?

I’m not sure if I will want the cloud web interface - although it does apparently allow my installer to connect in and fix things as needed (?update firmware?)

awesome, saved me a lot of time today. Thanks a lot!

Hi Dominic,
works like a Charm!
Can you kindly post your Code parts from your Sitemap ?
Br Peter

Hey @Peter_Aschinger
unfortunately I use that within rules and using the Rest API for my MagicMirror. But that should be easy. Simply format it within the Sitemap or utilize UoM (Units of Measurement)

I did the Sitemap by my own.

Perfect, looks good :blush:

Hi Dominic,

let me ask a question:

In the .things file you defined the Settings Channel as a “string”
But the linked item is Type “number”.

Can you explain me that ?

Did you use that for setting dynamic the limit of the Inverter ?

Br Peter

Hey, sorry for the late reply, number should be fine, thats a mistake as i won’t use it.
Number:Dimensionless (Percentage) should be fine.

So i had a look into the documentation and adjusted my config:
The channels are listed here: https://github.com/tbnobody/OpenDTU/blob/master/docs/MQTT_Topics.md

//  opendtu.things
Type number : inv1_limit_relative		"I1 limit relative"		[stateTopic="serial/status/limit_relative", commandTopic="serial/cmd/limit_persistent_relative", unit="%"]
Type number : inv1_limit_absolute		"I1 limit absolute"		[stateTopic="serial/status/limit_absolute", commandTopic="serial/cmd/limit_persistent_absolute", unit="W"]

// opendtu.items
Number:Dimensionless                OpenDTU1_inv1_limit_relative    "Limit (rel)"                           (ODTU1_inv1)                {channel="mqtt:topic:default:OpenDTU1:inv1_limit_relative"}
Number:Power                        OpenDTU1_inv1_limit_absolute    "Limit (abs)"                           (ODTU1_inv1)                {channel="mqtt:topic:default:OpenDTU1:inv1_limit_absolute"}

Thanks for that!
But how can i set the limit?

I did a selection widged in the sitemap like this:

Selection item=OpenDTU1_inv1_limit_absolute label="Limit (abs) W" icon="qualityofservice" mappings=[600="600W", 800="800", 1200="1200", 1500="1500"]

When i try to set a Limit i get a error in the log like this:

2023-05-08 20:11:22.611 [ome.event.ItemCommandEvent] - Item 'OpenDTU1_inv1_limit_absolute' received command 1200

==> /var/log/openhab2/openhab.log <==

2023-05-08 20:11:22.734 [ERROR] [nal.common.AbstractInvocationHandler] - An error occurred while calling method 'ThingHandler.handleCommand()' on 'org.eclipse.smarthome.binding.mqtt.generic.internal.handler.GenericThingHandler@16cf43f': null

java.lang.NumberFormatException: null

	at java.math.BigDecimal.<init>(BigDecimal.java:494) ~[?:?]

	at java.math.BigDecimal.<init>(BigDecimal.java:383) ~[?:?]

	at java.math.BigDecimal.<init>(BigDecimal.java:806) ~[?:?]

	at org.eclipse.smarthome.core.library.types.DecimalType.<init>(DecimalType.java:57) ~[102:org.eclipse.smarthome.core:0.10.0.oh240]

	at org.eclipse.smarthome.core.library.types.DecimalType.valueOf(DecimalType.java:71) ~[102:org.eclipse.smarthome.core:0.10.0.oh240]

	at org.eclipse.smarthome.binding.mqtt.generic.internal.values.NumberValue.update(NumberValue.java:65) ~[?:?]

	at org.eclipse.smarthome.binding.mqtt.generic.internal.generic.ChannelState.publishValue(ChannelState.java:302) ~[?:?]

	at org.eclipse.smarthome.binding.mqtt.generic.internal.handler.AbstractMQTTThingHandler.handleCommand(AbstractMQTTThingHandler.java:119) ~[?:?]

	at sun.reflect.GeneratedMethodAccessor729.invoke(Unknown Source) ~[?:?]

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]

	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]

	at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:153) [102:org.eclipse.smarthome.core:0.10.0.oh240]

	at org.eclipse.smarthome.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [102:org.eclipse.smarthome.core:0.10.0.oh240]

	at com.sun.proxy.$Proxy160.handleCommand(Unknown Source) [276:org.eclipse.smarthome.binding.mqtt.generic:0.10.0.oh240]

	at org.eclipse.smarthome.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:75) [109:org.eclipse.smarthome.core.thing:0.10.0.oh240]

	at org.eclipse.smarthome.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [109:org.eclipse.smarthome.core.thing:0.10.0.oh240]

	at sun.reflect.GeneratedMethodAccessor728.invoke(Unknown Source) ~[?:?]

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]

	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]

	at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:153) [102:org.eclipse.smarthome.core:0.10.0.oh240]

	at org.eclipse.smarthome.core.internal.common.Invocation.call(Invocation.java:53) [102:org.eclipse.smarthome.core:0.10.0.oh240]

	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]

	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]

	at java.lang.Thread.run(Thread.java:748) [?:?]

What i´m missing ?..
BR Peter

Update:

i use the item without “:power”

Number                        OpenDTU1_inv1_limit_absolute    "Limit (abs)"                           (ODTU1_inv1)                {channel="mqtt:topic:default:OpenDTU1:inv1_limit_absolute"}

That throws no error anymore!

Sure, both is possible. The state and command topic are taking care that the Limit is set properly.

Another thing is, that you might use a combination of both. So when dealing with a HM400 and an absolute Limit of 200 Watts, that equals 50 % relative limit.

No need for the units, but more beautiful and accurate (YieldDay is in Watt-Hours, YieldTotal kWh, so I wanted to take care of it)

May it’s not OpenHab related but why is it possible to set the Limits with Watts or Percentage?

Hi Peter could you explain to me how you did the sitemap with the graph i’m a beginner and have no idea how to store the data

What Version of OpenHab are you running ?
I´m still on 2.4 and i guess in Openhab 3.X its different.
But basically you need to persist with rrd4j your item to draw a graph like that.

i am on 3.4