Hi,
I have DTU-100 (not Pro). I don’t have an installer account BUT - You don’t need any account here as You’re only accessing the web interface of the DTU (on local network).
So, I can simply type in the local url like http://192.168.12.210 and the home page of the DTU is displayed (where all data is displayed). From then on - all I needed to do is get the page contents via http request and parse the results. Most of that is done by nodered. The biggest “trick” in my case was that they use some weird HTPP/0.9 protocol which means that standard GET commands in http requests don’t work…
Anyway - for me, I only need some basic parameters like Total Energy, Total Power, etc. (which are provided in first columns) - but if You play with it You can get data for each panel or whatever You see on the screen (and e.g. create automation for when something is wrong with it).
The IMPORTANT part for mee is that NO INTERNET connection is needed!
I’ve included the code for the NodeRed flow also:
[
{
"id": "b52d74e9be54c49b",
"type": "tab",
"label": "PV",
"disabled": false,
"info": "",
"env": []
},
{
"id": "e1ca176c6ebb0e6f",
"type": "exec",
"z": "b52d74e9be54c49b",
"command": "curl 192.168.12.210/hometable.xml --http0.9",
"addpay": "",
"append": "",
"useSpawn": "false",
"timer": "1",
"winHide": false,
"oldrc": false,
"name": "",
"x": 370,
"y": 160,
"wires": [
[
"487410fb842d2664"
],
[
"4848185b98be45aa"
],
[
"b31bdde29ea31f7e"
]
]
},
{
"id": "95773632b7258564",
"type": "inject",
"z": "b52d74e9be54c49b",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "60",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payload": "ping",
"payloadType": "str",
"x": 110,
"y": 160,
"wires": [
[
"e1ca176c6ebb0e6f"
]
]
},
{
"id": "bdb103f2ea61cc72",
"type": "debug",
"z": "b52d74e9be54c49b",
"name": "Debug",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1250,
"y": 140,
"wires": []
},
{
"id": "b31bdde29ea31f7e",
"type": "debug",
"z": "b52d74e9be54c49b",
"name": "Return code",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 690,
"y": 280,
"wires": []
},
{
"id": "4848185b98be45aa",
"type": "debug",
"z": "b52d74e9be54c49b",
"name": "Errors",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 670,
"y": 200,
"wires": []
},
{
"id": "487410fb842d2664",
"type": "function",
"z": "b52d74e9be54c49b",
"name": "Convert to String",
"func": "msg.payload = msg.payload.toString();\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 670,
"y": 140,
"wires": [
[
"5b528da2128633eb"
]
]
},
{
"id": "5b528da2128633eb",
"type": "csv",
"z": "b52d74e9be54c49b",
"name": "Select data",
"sep": ";",
"hdrin": false,
"hdrout": "all",
"multi": "one",
"ret": "\\n",
"temp": "power_total,energy_total,energy_today",
"skip": "0",
"strings": true,
"include_empty_strings": false,
"include_null_values": false,
"x": 850,
"y": 140,
"wires": [
[
"da66d7eb327f9284",
"0ffdb0c2167f20ce",
"7749b410bd7be18b"
]
]
},
{
"id": "da66d7eb327f9284",
"type": "ha-entity",
"z": "b52d74e9be54c49b",
"name": "DTU Energy Today",
"server": "9847e1812fb1326f",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "dtu_energy_today"
},
{
"property": "device_class",
"value": "energy"
},
{
"property": "icon",
"value": ""
},
{
"property": "unit_of_measurement",
"value": "kWh"
},
{
"property": "state_class",
"value": "total_increasing"
},
{
"property": "last_reset",
"value": ""
}
],
"state": "payload.energy_today",
"stateType": "msg",
"attributes": [],
"resend": true,
"outputLocation": "payload",
"outputLocationType": "msg",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "$entity().state ? \"on\": \"off\"",
"outputPayloadType": "jsonata",
"x": 1050,
"y": 200,
"wires": [
[
"bdb103f2ea61cc72"
]
]
},
{
"id": "0ffdb0c2167f20ce",
"type": "ha-entity",
"z": "b52d74e9be54c49b",
"name": "DTU Power Total",
"server": "9847e1812fb1326f",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "dtu_power_total"
},
{
"property": "device_class",
"value": "power"
},
{
"property": "icon",
"value": ""
},
{
"property": "unit_of_measurement",
"value": "kW"
},
{
"property": "state_class",
"value": "measurement"
},
{
"property": "last_reset",
"value": ""
}
],
"state": "payload.power_total",
"stateType": "msg",
"attributes": [],
"resend": true,
"outputLocation": "payload",
"outputLocationType": "msg",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "$entity().state ? \"on\": \"off\"",
"outputPayloadType": "jsonata",
"x": 1050,
"y": 80,
"wires": [
[
"bdb103f2ea61cc72"
]
]
},
{
"id": "7749b410bd7be18b",
"type": "ha-entity",
"z": "b52d74e9be54c49b",
"name": "DTU Energy Total",
"server": "9847e1812fb1326f",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "dtu_energy_total"
},
{
"property": "device_class",
"value": "energy"
},
{
"property": "icon",
"value": "mdi:infinity"
},
{
"property": "unit_of_measurement",
"value": "kWh"
},
{
"property": "state_class",
"value": "total_increasing"
},
{
"property": "last_reset",
"value": ""
}
],
"state": "payload.energy_total",
"stateType": "msg",
"attributes": [],
"resend": true,
"outputLocation": "payload",
"outputLocationType": "msg",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "$entity().state ? \"on\": \"off\"",
"outputPayloadType": "jsonata",
"x": 1050,
"y": 140,
"wires": [
[
"bdb103f2ea61cc72"
]
]
},
{
"id": "9847e1812fb1326f",
"type": "server",
"name": "Home Assistant",
"version": 2,
"addon": false,
"rejectUnauthorizedCerts": false,
"ha_boolean": "y|yes|true|on|home|open",
"connectionDelay": true,
"cacheJson": true,
"heartbeat": false,
"heartbeatInterval": "30"
}
]
Good luck!