How to read tasmota-timers via mqtt in node-red

Hello,
as a newbie to node-red I may ask a simple question but for me it has been a stopper for the last couple of days.
The scenario:
On an ESP8266 I run Tasmota to control 3 switches via timers. Ie. Timer1 sets the starttime for switch 2 and timer2 sets the off-time, nexts pair for the next switch and so forth.
I can set the timers from node-red vis mqtt in tasmota but I want to display the timers on the dashboard .
Below is what I "constructed" in node-red:


[
{
"id": "48c89b70.eef6dc",
"type": "debug",
"z": "630d4b3f.00cbf4",
"name": "tas-beregnung send",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "true",
"targetType": "full",
"statusVal": "payload",
"statusType": "auto",
"x": 900,
"y": 140,
"wires":
},
{
"id": "791c34c6.0135fc",
"type": "ui_text",
"z": "630d4b3f.00cbf4",
"group": "c02a6b55.2fc118",
"order": 1,
"width": 3,
"height": 1,
"name": "T1 Time (Start) ",
"label": "Start: ",
"format": "{{msg.payload.Timers.Timers1.Timer1.Time}}",
"layout": "row-left",
"x": 620,
"y": 200,
"wires":
},
{
"id": "e59fdba1.77c77",
"type": "ui_text",
"z": "630d4b3f.00cbf4",
"group": "3c738b31.8b3f8c",
"order": 1,
"width": 4,
"height": 1,
"name": "Timers EN ",
"label": "Zeitschalter: ",
"format": "{{msg.payload.Timers}}",
"layout": "row-left",
"x": 610,
"y": 100,
"wires":
},
{
"id": "cfd85c23.01eac",
"type": "ui_text",
"z": "630d4b3f.00cbf4",
"group": "c02a6b55.2fc118",
"order": 2,
"width": 2,
"height": 1,
"name": "T2 Time (Stop) ",
"label": "- ",
"format": "{{msg.payload.Timers.Timers1.Timer2.Time}}",
"layout": "row-left",
"x": 620,
"y": 240,
"wires":
},
{
"id": "b92d2d84.d4fc6",
"type": "mqtt in",
"z": "630d4b3f.00cbf4",
"name": "",
"topic": "stat/tas-beregnung/RESULT",
"qos": "0",
"datatype": "json",
"broker": "5c8bcfe4.56282",
"x": 220,
"y": 120,
"wires": [
[
"48c89b70.eef6dc",
"791c34c6.0135fc",
"cfd85c23.01eac",
"e59fdba1.77c77",
"12eaee0b.6a694a"
]
]
},
{
"id": "12eaee0b.6a694a",
"type": "ui_text",
"z": "630d4b3f.00cbf4",
"group": "c02a6b55.2fc118",
"order": 4,
"width": 3,
"height": 1,
"name": "T1 En ",
"label": "Enable: ",
"format": "{{msg.payload.Timer1.Enable}}",
"layout": "row-left",
"x": 590,
"y": 160,
"wires":
},
{
"id": "c02a6b55.2fc118",
"type": "ui_group",
"name": "Circuit 1",
"tab": "ed710c0d.999868",
"order": 2,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "3c738b31.8b3f8c",
"type": "ui_group",
"name": "Overall",
"tab": "ed710c0d.999868",
"order": 1,
"disp": true,
"width": 4,
"collapse": false
},
{
"id": "5c8bcfe4.56282",
"type": "mqtt-broker",
"name": "CCU-Jack",
"broker": "192.168.2.170",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": false,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
},
{
"id": "ed710c0d.999868",
"type": "ui_tab",
"name": "Test TAS",
"icon": "dashboard",
"order": 6,
"disabled": false,
"hidden": false
}
]


This is what the console in Tasmota shows:


[22:20:30] cmnd/tas-beregnung/timers1
[22:20:30] stat/tas-beregnung/RESULT {"Timers":"ON"}
[22:20:30] stat/tas-beregnung/RESULT {"Timers1":{"Timer1":{"Enable":1,"Mode":0,"Time":"18:35","Window":0,"Days":"1010111","Repeat":1,"Output":3,"Action":1},"Timer2":{"Enable":1,"Mode":0,"Time":"18:45","Window":0,"Days":"1111111","Repeat":1,"Output":3,"Action":0},"Timer3":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer4":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}
[22:20:30] stat/tas-beregnung/RESULT {"Timers2":{"Timer5":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer6":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer7":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer8":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}
[22:20:30] stat/tas-beregnung/RESULT {"Timers3":{"Timer9":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer10":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer11":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer12":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}
[22:20:30] stat/tas-beregnung/RESULT {"Timers4":{"Timer13":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer14":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer15":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer16":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}


... and this is what the debug-node produces

[OUTPUT]
26.8.2021, 22:20:31 node: tas-beregnung send
stat/tas-beregnung/RESULT : msg : Object
object
topic: "stat/tas-beregnung/RESULT"
payload: object
Timers1: object
Timer1: object
Enable: 1
Mode: 0
Time: "18:35"
Window: 0
Days: "1010111"
Repeat: 1
Output: 3
Action: 1
Timer2: object
Enable: 1
Mode: 0
Time: "18:45"
Window: 0
Days: "1111111"
Repeat: 1
Output: 3
Action: 0
Timer3: object
Enable: 0
Mode: 0
Time: "00:00"
Window: 0
Days: "0000000"
Repeat: 0
Output: 1
Action: 0
Timer4: object
Enable: 0
Mode: 0
Time: "00:00"
Window: 0
Days: "0000000"
Repeat: 0
Output: 1
Action: 0
qos: 0
retain: false
_msgid: "bf232a17.99e518"


The problem seems to be the long path the the var in the object. For example:
To get the value of time in timer1 the path shows as "payload.timers.timers1.timer1.time".
When I try to reference this in the textnode nothigs shows.

What do I do wron or how do I have to approach this problem.
Thank you for any help.
Hansjoerg

use a change node to move that up to msg.payload

Dear DCeejay
Thank you for the quick reply.
I am not sure what you mean by using a change node.
Could you please expand, maybe with an example?
Cheers

simple example

[{"id":"7cbe304b710a2c8e","type":"inject","z":"d01fac8.611515","name":"","props":[{"p":"payload.timers.timers1.timer1.time","v":"","vt":"date"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":700,"wires":[["b3c1b2d3f4c2a770"]]},{"id":"b3c1b2d3f4c2a770","type":"change","z":"d01fac8.611515","name":"","rules":[{"t":"move","p":"payload.timers.timers1.timer1.time","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":700,"wires":[["b042a1d57939ab2f"]]},{"id":"b042a1d57939ab2f","type":"debug","z":"d01fac8.611515","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":900,"y":700,"wires":[]}]

Look carefully and you will see it should be {{msg.payload.Timers1.Timer1.Time}}
Which isn't what you have used.

1 Like

dceejay and Colin

Thank you to both of you. IT help to get a step further. But ...
The next problem is the following:
I want to show

Start: 12:15 End: 12:30

whereby "Start" the result of Timer1.Time and "End" the result of timer2.time is.
That doesn't seem to work as the results only flashes up for a moment before being deleted from the dashboard.
What would I need to keep both result visible on the dasboard?
Thank you for your patience

Add debug nodes showing what you are sending to the dashboard nodes. Then you should see why that is happening.

Make sure you are not sending messages to a display node where the message does not contain the data to be displayed.

Colin,
this is what the debug node shows:

28.8.2021, 13:18:49node: change outstat/tas-beregnung/RESULT : msg.payload : Object
object
Timers: "ON"
28.8.2021, 13:18:49node: change outstat/tas-beregnung/RESULT : msg.payload : Object
object
Timers1: object
Timer1: object
Enable: 1
Mode: 0
Time: "14:01"
Window: 0
Days: "1100011"
Repeat: 1
Output: 3
Action: 1
Timer2: object
Enable: 1
Mode: 0
Time: "14:12"
Window: 0
Days: "1100011"
Repeat: 1
Output: 3
Action: 0
Timer3: object
Timer4: object
28.8.2021, 13:18:49node: change outstat/tas-beregnung/RESULT : msg.payload : Object
{ Timers2: object }
28.8.2021, 13:18:49node: change outstat/tas-beregnung/RESULT : msg.payload : Object
{ Timers3: object }
28.8.2021, 13:18:50node: change outstat/tas-beregnung/RESULT : msg.payload : Object
{ Timers4: object }

As far as I see it the text nodes get overwritten by the messages that follow on timers1, even so the items I'm looking for are all in "Timers1": timer1.time and Timer2.time

Any suggestion?
Thanks
Hansjoerg

Are you saying that after exactly that message the displays were blank? If so can you post your up to date flow please.

Colin,
this is the current flow

[{"id":"48c89b70.eef6dc","type":"debug","z":"630d4b3f.00cbf4","name":"tas-beregnung send","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":1040,"y":60,"wires":[]},{"id":"791c34c6.0135fc","type":"ui_text","z":"630d4b3f.00cbf4","group":"c02a6b55.2fc118","order":1,"width":3,"height":1,"name":"T1 Time (Start)   payload.Timers1.Timer1.Time","label":"Start: ","format":"{{msg.payload.Timers1.Timer1.Time}}","layout":"row-left","x":1080,"y":240,"wires":[]},{"id":"e59fdba1.77c77","type":"ui_text","z":"630d4b3f.00cbf4","group":"3c738b31.8b3f8c","order":1,"width":4,"height":1,"name":"Timers EN   payload.Timers","label":"Zeitschalter: ","format":"{{msg.payload.Timers}}","layout":"row-left","x":1020,"y":160,"wires":[]},{"id":"cfd85c23.01eac","type":"ui_text","z":"630d4b3f.00cbf4","group":"c02a6b55.2fc118","order":2,"width":2,"height":1,"name":"T2 Time (Stop)  payload.Timers1.Timer2.Time","label":"- ","format":"{{msg.payload.Timers1.Timer2.Time}}","layout":"row-left","x":1080,"y":280,"wires":[]},{"id":"b92d2d84.d4fc6","type":"mqtt in","z":"630d4b3f.00cbf4","name":"","topic":"stat/tas-beregnung/RESULT","qos":"0","datatype":"json","broker":"5c8bcfe4.56282","x":220,"y":120,"wires":[["48c89b70.eef6dc","b3c1b2d3f4c2a770","791c34c6.0135fc"]]},{"id":"12eaee0b.6a694a","type":"ui_text","z":"630d4b3f.00cbf4","group":"c02a6b55.2fc118","order":4,"width":3,"height":1,"name":"T1 En payload.Timers1.Timer1.Enable","label":"Enable: ","format":"{{msg.payload.Timers1.Timer1.Enable}}","layout":"row-left","x":1060,"y":200,"wires":[]},{"id":"b3c1b2d3f4c2a770","type":"change","z":"630d4b3f.00cbf4","name":"","rules":[{"t":"move","p":"payload.timers.timers1","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":400,"wires":[["b042a1d57939ab2f","e59fdba1.77c77","12eaee0b.6a694a","cfd85c23.01eac","1ab251e4.c0eb7e"]]},{"id":"b042a1d57939ab2f","type":"debug","z":"630d4b3f.00cbf4","name":"change out","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":940,"y":400,"wires":[]},{"id":"1ab251e4.c0eb7e","type":"ui_text","z":"630d4b3f.00cbf4","d":true,"group":"3c738b31.8b3f8c","order":1,"width":4,"height":1,"name":"Timer2","label":"Zeitschalter: ","format":"{{msg.payload.Timer2}}","layout":"row-left","x":960,"y":340,"wires":[]},{"id":"c02a6b55.2fc118","type":"ui_group","name":"Circuit 1","tab":"ed710c0d.999868","order":2,"disp":true,"width":"6","collapse":false},{"id":"3c738b31.8b3f8c","type":"ui_group","name":"Overall","tab":"ed710c0d.999868","order":1,"disp":true,"width":4,"collapse":false},{"id":"5c8bcfe4.56282","type":"mqtt-broker","name":"CCU-Jack","broker":"192.168.2.170","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"ed710c0d.999868","type":"ui_tab","name":"Test TAS","icon":"dashboard","order":6,"disabled":false,"hidden":false}]

Here is the debug info

28.8.2021, 17:27:21node: tas-beregnung sendstat/tas-beregnung/RESULT : msg : Object
object
topic: "stat/tas-beregnung/RESULT"
payload: object
Timers: "ON"
qos: 0
retain: false
_msgid: "a73f841.a32da78"
28.8.2021, 17:27:21node: change outstat/tas-beregnung/RESULT : msg.payload : Object
{ Timers: "ON" }
28.8.2021, 17:27:21node: tas-beregnung send
stat/tas-beregnung/RESULT : msg : Object
object
topic: "stat/tas-beregnung/RESULT"
payload: object
Timers1: object
Timer1: object
Enable: 1
Mode: 0
Time: "14:01"
Window: 0
Days: "1100011"
Repeat: 1
Output: 3
Action: 1
Timer2: object
Enable: 1
Mode: 0
Time: "14:12"
Window: 0
Days: "1100011"
Repeat: 1
Output: 3
Action: 0
Timer3: object
Timer4: object
qos: 0
retain: false
_msgid: "72ea0360.da5d7c

.. and here the rudimentary dashboard
grafik

I'm at the end of my rope -:slight_smile:

Are you getting two different messages out of the MQTT node? One with msg.Timers "ON" and one without that? If so then that explains why that field keeps disappearing, as you sometimes send it a value and sometimes the value does not exist.

The Change node appears to be moving a non-existent value as you have got the case wrong again (t instead of T). However you don't need the Change node.

Yes, via mqtt I receive 5 messages whenever tasmota sends timer results
First timers
Second timers.timers1
Third timers.timers2
Forth timers.timers3
Fifth timers.timers4

I want to read only one msg at a time, but how?
E g. Timers1 and all its objects

There are two different Tasmota commands: Timer and Timers.
Timers1 is the command to enable all timers. On my smart switch it gives this:
Note - Five seperate messages from MQTT, only one or two of which contain data that you want, but each one will run through your nodes.

20:40:40.242 CMD: Timers1
20:40:40.249 MQT: stat/bedroom/light/RESULT = {"Timers":"OFF"}
20:40:40.258 MQT: stat/bedroom/light/RESULT = {"Timers1":{"Timer1":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer2":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer3":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer4":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}
20:40:40.268 MQT: stat/bedroom/light/RESULT = {"Timers2":{"Timer5":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer6":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer7":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer8":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}
20:40:40.278 MQT: stat/bedroom/light/RESULT = {"Timers3":{"Timer9":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer10":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer11":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer12":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}
20:40:40.286 MQT: stat/bedroom/light/RESULT = {"Timers4":{"Timer13":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer14":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer15":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0},"Timer16":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}}

But Timer1 is requesting the status and returns much more compact data:

20:43:08.842 CMD: Timer1
20:43:08.850 MQT: stat/bedroom/light/RESULT = {"Timer1":{"Enable":0,"Mode":0,"Time":"00:00","Window":0,"Days":"0000000","Repeat":0,"Output":1,"Action":0}}

I think you need to extract the Time from Timer1, Timer2, Timer3 and Timer4. You might consider sending and processing these commands individually.

However, if you really want to use the Timers1 command as you currently have it, here is a snippet to extract the various time fields (change the MQTT topics to suit your setup) :

[{"id":"12d40ae591285dad","type":"inject","z":"f5232058c31aa19e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"go","payloadType":"str","x":150,"y":140,"wires":[["e707b669f25c4a3a"]]},{"id":"e707b669f25c4a3a","type":"mqtt out","z":"f5232058c31aa19e","name":"","topic":"cmnd/bedroom/light/timers1","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"ebe6cf87.32855","x":360,"y":140,"wires":[]},{"id":"bff8c4b70a88adc7","type":"mqtt in","z":"f5232058c31aa19e","name":"","topic":"stat/bedroom/light/RESULT","qos":"2","datatype":"json","broker":"ebe6cf87.32855","nl":false,"rap":true,"rh":0,"x":190,"y":240,"wires":[["aaf8330f3603ca3b"]]},{"id":"aaf8330f3603ca3b","type":"function","z":"f5232058c31aa19e","name":"","func":"if (typeof(msg.payload.Timers1) != \"undefined\")\n{\n    context.set(\"msg1\", {payload: msg.payload.Timers1.Timer1.Time, topic: \"timer1\"});\n    context.set(\"msg2\", {payload: msg.payload.Timers1.Timer2.Time, topic: \"timer2\"});\n    context.set(\"msg3\", {payload: msg.payload.Timers1.Timer3.Time, topic: \"timer3\"});\n    context.set(\"msg4\", {payload: msg.payload.Timers1.Timer4.Time, topic: \"timer4\"});\n}\nif (typeof(msg.payload.Timers2) != \"undefined\")\n{\n    context.set(\"msg5\", {payload: msg.payload.Timers2.Timer5.Time, topic: \"timer5\"});\n    context.set(\"msg6\", {payload: msg.payload.Timers2.Timer6.Time, topic: \"timer6\"});\n}\nif (typeof(msg.payload.Timers4) != \"undefined\")\n{\n    return [context.get(\"msg1\"),context.get(\"msg2\"),context.get(\"msg3\"),context.get(\"msg4\"),context.get(\"msg5\"),context.get(\"msg6\")];\n}","outputs":6,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":240,"wires":[["828da66854ce27dc"],["37686f414574dd0d"],["53dd170c12585f45"],["90c667fdb60f6bb5"],["2c45713a0227d274"],["dec467812e758663"]]},{"id":"828da66854ce27dc","type":"debug","z":"f5232058c31aa19e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":140,"wires":[]},{"id":"37686f414574dd0d","type":"debug","z":"f5232058c31aa19e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":180,"wires":[]},{"id":"53dd170c12585f45","type":"debug","z":"f5232058c31aa19e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":220,"wires":[]},{"id":"90c667fdb60f6bb5","type":"debug","z":"f5232058c31aa19e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":260,"wires":[]},{"id":"2c45713a0227d274","type":"debug","z":"f5232058c31aa19e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":300,"wires":[]},{"id":"dec467812e758663","type":"debug","z":"f5232058c31aa19e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":590,"y":340,"wires":[]},{"id":"ebe6cf87.32855","type":"mqtt-broker","name":"","broker":"192.168.1.11","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]

You can use a Switch node to send the message down different paths dependent on what is in the message. For example you can test for msg.Timers is null in the switch node and send that output to the relevant display node. Similarly you can test for msg.Timers1 and set that to another output, and so on.

jbudd,
thank you. That is what I receive as well.
My problem is: I want to display the overall Timer-enable (ie. Timers = On or OFF), show the timer1 data as Starttime (ie. Timer1.time) and some data more from timer1 and Stoptime which has to come from Timer2.time.
That means I have to capture data from 3 mqtt messages. How do I do this and than display the "combined" info on the dashboard?
Can I you a function, do I need to store this in flow.variables etc. That is where I'm blocked/confused.
Thank you for any suggestion.
Hansjoerg

As I said, use a Switch to separate the messages.

What does this give you? I used Colin's suggestion of Switch nodes, but two because they are testing different msg properties:
msg.payload.Timers is not null and msg.payload.Timers1 is not null.
Maybe it's possible to combine these into one?

[{"id":"3ededa4775c34d11","type":"switch","z":"f5232058c31aa19e","name":"","property":"payload.Timers","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":430,"y":40,"wires":[["4577357def5385c0"]]},{"id":"4577357def5385c0","type":"ui_text","z":"f5232058c31aa19e","group":"3c738b31.8b3f8c","order":1,"width":4,"height":1,"name":"Overall Enabled","label":"Zeitschalter: ","format":"{{msg.payload.Timers}}","layout":"row-left","x":620,"y":40,"wires":[]},{"id":"68ab7a2fab833351","type":"switch","z":"f5232058c31aa19e","name":"","property":"payload.Timers1","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":430,"y":100,"wires":[["f307d6693d959867","868f5693dab46576","26d026639978c161","4cc5351b035e8175","8137dc6d8bc6b460","7cfb16d1de807aec"]]},{"id":"f307d6693d959867","type":"ui_text","z":"f5232058c31aa19e","group":"c02a6b55.2fc118","order":1,"width":3,"height":1,"name":"Time (Start) ","label":"Start: ","format":"{{msg.payload.Timers1.Timer1.Time}}","layout":"row-left","x":610,"y":140,"wires":[]},{"id":"868f5693dab46576","type":"ui_text","z":"f5232058c31aa19e","group":"c02a6b55.2fc118","order":3,"width":3,"height":1,"name":"1 Enabled","label":"Enable: ","format":"{{msg.payload.Timers1.Timer1.Enable}}","layout":"row-left","x":600,"y":100,"wires":[]},{"id":"26d026639978c161","type":"ui_text","z":"f5232058c31aa19e","group":"c02a6b55.2fc118","order":2,"width":2,"height":1,"name":"Time (Stop)","label":"- ","format":"{{msg.payload.Timers1.Timer2.Time}}","layout":"row-left","x":610,"y":180,"wires":[]},{"id":"d55ff8815959e6e1","type":"mqtt in","z":"f5232058c31aa19e","name":"","topic":"stat/tas-beregnung/RESULT","qos":"0","datatype":"json","broker":"5c8bcfe4.56282","x":160,"y":80,"wires":[["3ededa4775c34d11","68ab7a2fab833351"]]},{"id":"8137dc6d8bc6b460","type":"ui_text","z":"f5232058c31aa19e","group":"de2832a215a44995","order":1,"width":3,"height":1,"name":"Time (Start)","label":"Start: ","format":"{{msg.payload.Timers1.Timer3.Time}}","layout":"row-left","x":610,"y":280,"wires":[]},{"id":"4cc5351b035e8175","type":"ui_text","z":"f5232058c31aa19e","group":"de2832a215a44995","order":3,"width":3,"height":1,"name":"2 Enabled","label":"Enable: ","format":"{{msg.payload.Timers1.Timer3.Enable}}","layout":"row-left","x":600,"y":240,"wires":[]},{"id":"7cfb16d1de807aec","type":"ui_text","z":"f5232058c31aa19e","group":"de2832a215a44995","order":2,"width":2,"height":1,"name":"Time (Stop)","label":"- ","format":"{{msg.payload.Timers1.Timer4.Time}}","layout":"row-left","x":610,"y":320,"wires":[]},{"id":"3c738b31.8b3f8c","type":"ui_group","name":"Overall","tab":"ed710c0d.999868","order":1,"disp":true,"width":4,"collapse":false},{"id":"c02a6b55.2fc118","type":"ui_group","name":"Circuit 1","tab":"ed710c0d.999868","order":2,"disp":true,"width":"6","collapse":false},{"id":"5c8bcfe4.56282","type":"mqtt-broker","name":"CCU-Jack","broker":"192.168.2.170","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"de2832a215a44995","type":"ui_group","name":"Circuit 2","tab":"ed710c0d.999868","order":3,"disp":true,"width":"6","collapse":false},{"id":"ed710c0d.999868","type":"ui_tab","name":"Test TAS","icon":"dashboard","order":6,"disabled":false,"hidden":false}]

You might be able to avoid the second by using Otherwise in the first. If you are sure there won't be any unexpected messages. For safety it might be better to use two though.

I don't think a straightforward "otherwise" will work because we have 5 messages:

(1) msg.payload.Timers is not null
(2) msg.payload.Timers is null and msg.payload.Timers1 is not null
(3,4,5) mag.payload.Timers and msg.payload.Timers1 are both null

So we have to seperate 1 & 2 and discard 3-5

That's why I initially approached it via a function node, but switch is much more elegant.
Oh maybe a switch node with a regular exprssion would work

If some are to be discarded then yes, I think you are right. I would stick with two nodes rather then mess about with anything more complex. Keep it easy to understand.