Counting, would like some direction

Hi, I have built a esp8266 sump pump monitor that sends a mqtt signal to node-red when the float is tripped. I have modified someones elses flow, I don't yet understand the function nodes, but its working fine. What I would like to add is counting functionality that displays how many times the sump pump has been triggered in total, in last hour, in last day, last week, etc.

I'm sure the most efficient way is through a function but my skill level is not near that yet. I DO have it counting the times it flips from wet back to dry via a convoluted combo of switch, change, and counter node. Next step is to display the how many times the float triggered in different time durations. Will I have to do that via a function node or is there a simpler way for a newbie?

[{"id":"eb725c52.8260f","type":"tab","label":"SumpPumpMonitor","disabled":false,"info":""},{"id":"602486f0.6ecd88","type":"ui_button","z":"eb725c52.8260f","name":"","group":"2b79823a.5475ee","order":3,"width":0,"height":0,"passthru":false,"label":"Restart SumpSensor-CPU","color":"","bgcolor":"#703633","icon":"","payload":"1","payloadType":"str","topic":"","x":260,"y":580,"wires":[["87a4eea5.be77a"]]},{"id":"de91b269.af49e","type":"mqtt out","z":"eb725c52.8260f","name":"","topic":"cmnd/SumpWaterSensorCPUrestart","qos":"2","retain":"","broker":"e5102fc8.e43f8","x":818.0000457763672,"y":581.9998645782471,"wires":[]},{"id":"6789b3b3.1226fc","type":"mqtt in","z":"eb725c52.8260f","name":"","topic":"stat/SumpWaterSensor/LWT","qos":"2","datatype":"auto","broker":"e5102fc8.e43f8","x":240,"y":380,"wires":[["28eacd24.bc3602","962631db.dbe","fe47b18a.048c1"]]},{"id":"28eacd24.bc3602","type":"ui_text","z":"eb725c52.8260f","group":"2b79823a.5475ee","order":1,"width":"0","height":"0","name":"SumpWaterSensor_status","label":"SumpWaterSensor Status:&nbsp","format":"{{msg.payload}}","layout":"row-center","x":730,"y":380,"wires":[]},{"id":"5375c238.d9c05c","type":"mqtt in","z":"eb725c52.8260f","name":"","topic":"stat/SumpWaterSensorInfo","qos":"2","datatype":"auto","broker":"e5102fc8.e43f8","x":250,"y":460,"wires":[["962631db.dbe","fe47b18a.048c1"]]},{"id":"962631db.dbe","type":"function","z":"eb725c52.8260f","name":"Process Info","func":"var d = new Date();\nvar temp = d.toDateString();\ntemp = temp+\", \"+d.toLocaleTimeString()\nif(msg.topic==\"stat/SumpWaterSensor/LWT\"){\n    msg.Status=msg.payload;\n    if(msg.payload==\"Offline\"){\n        global.set(\"SumpWaterSensorCPUOfflineCount\",global.get(\"SumpWaterSensorCPUOfflineCount\")+1);\n        global.set(\"SumpWaterSensorCPULastOffline\",temp);\n    }\n} else if(msg.topic.indexOf(\"Info\")>-1){\n    var UptimeJSON=JSON.parse(msg.payload);\n    var Device_Uptime=UptimeJSON.Uptime||\"N/A\";\n    if (Device_Uptime!==\"N/A\"){\n        var UpDay=Math.floor(Device_Uptime/86400);\n        Device_Uptime%=86400;\n        var UpHour=Math.floor(Device_Uptime/3600);\n        Device_Uptime%=3600;\n        var UpMin=Math.floor(Device_Uptime/60);\n        var UpSec=Math.floor(Device_Uptime%60);\n        var UptimeStr=`Uptime: ${UpDay}d:${UpHour}h:${UpMin}m:${UpSec}s`;\n        if (msg.topic.indexOf(\"SumpWaterSensor\")>-1) {\n            global.set(\"SumpWaterSensorCPUUptime\",UptimeStr);\n        }\n    }\n}\n\nmsg.payload=global.get(\"SumpWaterSensorCPUOfflineCount\").toString()||\"-\";\nmsg.LastOffline=global.get(\"SumpWaterSensorCPULastOffline\")||\"-\";\nmsg.uptime=global.get(\"SumpWaterSensorCPUUptime\");\nreturn msg;\n","outputs":"1","noerr":0,"x":510,"y":460,"wires":[["8846149a.a2c5c8"]]},{"id":"8846149a.a2c5c8","type":"ui_template","z":"eb725c52.8260f","group":"2b79823a.5475ee","name":"SumpWaterSensorCPU","order":2,"width":"6","height":"4","format":"<div align=\"center\" overflow-y=\"hidden\">\n\t<p>Offline Counts:</p>\n\t<p ng-style=\"{color: 'green'}\">{{msg.payload}}\n    </p>\n\t<p>Last Offline Time:</p>\n\t<p ng-style=\"{color: 'green'}\">{{msg.LastOffline}}\n    </p>\n\t<p ng-style=\"{color: '#1b9eb2'}\">{{msg.uptime}}\n    </p>\n</div>","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":750,"y":460,"wires":[[]]},{"id":"62bdfafa.58e354","type":"mqtt in","z":"eb725c52.8260f","name":"","topic":"tele/SumpWaterSensor","qos":"2","datatype":"auto","broker":"e5102fc8.e43f8","x":220,"y":280,"wires":[["b7ba70ba.cc1d","1508b24b.17603e","eaa13bf5.3e8ab8","fe47b18a.048c1","993aff48.2cc51","ad24e44.40f3d18"]]},{"id":"b7ba70ba.cc1d","type":"ui_text","z":"eb725c52.8260f","group":"2b79823a.5475ee","order":1,"width":"0","height":"0","name":"SumpWaterSensor_state","label":"Sensor State:&nbsp","format":"{{msg.payload}}","layout":"row-center","x":730,"y":340,"wires":[]},{"id":"87a4eea5.be77a","type":"function","z":"eb725c52.8260f","name":"GlobalSet","func":"global.set(\"NumMovements\",0);\nglobal.set(\"SumpWaterSensorCPUOfflineCount\",0);\nglobal.set(\"SumpWaterSensorCPULastOffline\",\"-\");\nreturn msg;","outputs":1,"noerr":0,"x":524.0000152587891,"y":586.5555419921875,"wires":[["de91b269.af49e"]]},{"id":"1508b24b.17603e","type":"function","z":"eb725c52.8260f","name":"SumpWaterState","func":"if (msg.payload==\"WET\") {\n    msg.payload=\"Warning, sump pump water level is too high, please check!\";\n} else {\n    msg.payload=\"sump pump water level is back to normal\";\n}\nreturn msg;\n","outputs":"1","noerr":0,"x":570,"y":280,"wires":[["4b5dc6a0.137128"]]},{"id":"4b5dc6a0.137128","type":"delay","z":"eb725c52.8260f","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"9","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":820,"y":280,"wires":[[]]},{"id":"2956e835.0cdf38","type":"sendsms","z":"eb725c52.8260f","d":true,"creds":"blah","to":"xx","fr":"xx","text":"Sump water!","unicode":false,"x":230,"y":80,"wires":[[]]},{"id":"828754c5.5e8358","type":"ui_button","z":"eb725c52.8260f","name":"","group":"2b79823a.5475ee","order":4,"width":0,"height":0,"passthru":false,"label":"Debug off","tooltip":"","color":"","bgcolor":"","icon":"","payload":"0","payloadType":"str","topic":"","x":230,"y":640,"wires":[["6a9a6efb.b59f9"]]},{"id":"9f1f2983.3d9cd8","type":"ui_button","z":"eb725c52.8260f","name":"","group":"2b79823a.5475ee","order":5,"width":0,"height":0,"passthru":false,"label":"Debug on","tooltip":"","color":"","bgcolor":"","icon":"","payload":"2","payloadType":"str","topic":"","x":230,"y":700,"wires":[["6a9a6efb.b59f9"]]},{"id":"6a9a6efb.b59f9","type":"mqtt out","z":"eb725c52.8260f","name":"","topic":"cmnd/SumpWaterSensorDebug","qos":"2","retain":"","broker":"e5102fc8.e43f8","x":750,"y":660,"wires":[]},{"id":"4a9d86f4.cd0798","type":"blynk-ws-in-read","z":"eb725c52.8260f","name":"","pin":"16","pin_all":0,"client":"fcb61c07.82a5f","x":1040,"y":320,"wires":[["b7ba70ba.cc1d"]]},{"id":"aad72b13.630d58","type":"blynk-ws-in-read","z":"eb725c52.8260f","name":"","pin":"17","pin_all":0,"client":"fcb61c07.82a5f","x":1040,"y":380,"wires":[["28eacd24.bc3602"]]},{"id":"eaa13bf5.3e8ab8","type":"blynk-ws-out-write","z":"eb725c52.8260f","name":"","pin":"20","pinmode":0,"client":"fcb61c07.82a5f","x":500,"y":120,"wires":[]},{"id":"5e6da9eb.5cbfb8","type":"blynk-ws-out-notify","z":"eb725c52.8260f","name":"Blynk notify","client":"fcb61c07.82a5f","queue":false,"rate":"60","x":810,"y":60,"wires":[]},{"id":"fe47b18a.048c1","type":"debug","z":"eb725c52.8260f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":810,"y":180,"wires":[]},{"id":"993aff48.2cc51","type":"change","z":"eb725c52.8260f","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"ONLINE","fromt":"str","to":"SumpPump online","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"WET","fromt":"str","to":"Sump wet","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"DRY","fromt":"str","to":"Sump dry","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"Offline","fromt":"str","to":"Sump offline","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":60,"wires":[["5e6da9eb.5cbfb8"]]},{"id":"de88f389.8e238","type":"mqtt out","z":"eb725c52.8260f","name":"Buzzer disable","topic":"cmnd/SumpWaterSensorBeepFreq","qos":"2","retain":"","broker":"e5102fc8.e43f8","x":700,"y":760,"wires":[]},{"id":"f02ed013.4e915","type":"ui_button","z":"eb725c52.8260f","name":"","group":"2b79823a.5475ee","order":4,"width":0,"height":0,"passthru":false,"label":"Buzzer off","tooltip":"","color":"","bgcolor":"","icon":"","payload":"0","payloadType":"str","topic":"","x":260,"y":760,"wires":[["de88f389.8e238","2e6a46f5.603b9a"]]},{"id":"80c9fcfb.8f966","type":"ui_button","z":"eb725c52.8260f","name":"","group":"2b79823a.5475ee","order":5,"width":0,"height":0,"passthru":false,"label":"Buzzer on","tooltip":"","color":"","bgcolor":"","icon":"","payload":"1","payloadType":"str","topic":"","x":260,"y":820,"wires":[["de88f389.8e238","2e6a46f5.603b9a"]]},{"id":"2e6a46f5.603b9a","type":"debug","z":"eb725c52.8260f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":570,"y":820,"wires":[]},{"id":"613c9c6.d054664","type":"counter","z":"eb725c52.8260f","name":"counter","init":"0","step":"1","lower":null,"upper":null,"mode":"increment","outputs":2,"x":1100,"y":120,"wires":[["669f8383.1cca9c","5f598744.fefdf8"],[]]},{"id":"669f8383.1cca9c","type":"ui_text","z":"eb725c52.8260f","group":"2b79823a.5475ee","order":1,"width":"0","height":"0","name":"PumpCount","label":"PumpCount:&nbsp","format":"{{msg.payload}}","layout":"row-center","x":1290,"y":120,"wires":[]},{"id":"5f598744.fefdf8","type":"debug","z":"eb725c52.8260f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1130,"y":200,"wires":[]},{"id":"ad24e44.40f3d18","type":"change","z":"eb725c52.8260f","name":"change WET to 1","rules":[{"t":"change","p":"payload","pt":"msg","from":"WET","fromt":"str","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":120,"wires":[["9a00798b.799728"]]},{"id":"9a00798b.799728","type":"switch","z":"eb725c52.8260f","name":"if DRY then stop","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"DRY","vt":"str"}],"checkall":"false","repair":false,"outputs":1,"x":920,"y":120,"wires":[["613c9c6.d054664"]]},{"id":"2b79823a.5475ee","type":"ui_group","z":"","name":"Sump Water Sensor","tab":"8a73ac79.e9e7","order":3,"disp":true,"width":"6"},{"id":"e5102fc8.e43f8","type":"mqtt-broker","z":"","name":"localhost:1883","broker":"localhost:1883","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"76aa9641.587b98","type":"nexmobasic","z":""},{"id":"fcb61c07.82a5f","type":"blynk-ws-client","z":"","name":"Blynk cloud","path":"ws://blynk-cloud.com/websockets","key":"blah","dbg_all":true,"dbg_read":false,"dbg_write":false,"dbg_notify":false,"dbg_mail":false,"dbg_prop":false,"dbg_sync":false,"dbg_bridge":false,"dbg_low":false,"dbg_pins":"","multi_cmd":false,"proxy_type":"no","proxy_url":"","enabled":true},{"id":"8a73ac79.e9e7","type":"ui_tab","z":"","name":"Sump","icon":"dashboard","order":5,"disabled":false,"hidden":false}]

You may want to have a read on how to post flows, something to do with ticks, It's at the top of the forum, makes it a lot easier on others,

So, in order to count you need to set a var into memory. Something like,
Let a = context.get('number'); // get number of times run from memory
a = a +1; // add 1 to number
context.set('number',a); // write new number to memory

You can feed the number to something on the dashboard if you want
Just a rough sketch to help you get started,

1 Like

I would also extend the comment above - have a look at setting persistent storage - so that your counters are kept across reboots/restarts.

The other option may be to log the info about when an event occured into a simple text file which you could then query further down the track (as the next stage of your project)

Something like

Date, Time, Event,
12-05-2020, 13:39, Start
12-05-2020 14:30, Stop

etc etc

Craig

1 Like

Sorry I thought I had (select all, use preformat text). Appears a mod fixed it for me? thanks!

thanks Gerry and Craig, will dig in to this and see what I can figure out, thanks for the direction!

Play with your code and if you get stuck come back and ask questions, we've all been there
Good luck

Yeah I did that - it just cleans the thread up.

Please put large code between 3 backticks

```

var format = "looks much better"

```

And inline code between single backticks ` like this `

1 Like

I do it with the DSM node to have the number of starts and the total hours in a day, it resets at midnight. just inject the modified configs on them once before use and enjoy. You,ll have to edit your settings file to make it persistent across restart/reboots. I use the msql node to log every starts and duration and put it in a grid. You can also use influxdb or other database.

Also some dashboard goodies.

grid

[{"id":"6ef014f1.c1ed6c","type":"change","z":"bf7ed4ad.050e38","name":"Change","rules":[{"t":"change","p":"payload","pt":"msg","from":"on","fromt":"str","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1160,"y":380,"wires":[["40dd51be.57543"]]},{"id":"73593b91.565604","type":"ui_template","z":"bf7ed4ad.050e38","group":"89af5a01.8f2698","name":"ON/OFF P1","order":14,"width":"3","height":"2","format":"\n\n<md-button class=\"vibrate filled touched bigfont rounded\" style=\"background-color:#333333\" >\n\n<svg width=\"60px\" height=\"60px\" version=\"1.1\" \nviewBox=\"0 0 76 76\">\n <g id=\"Button_1\">\n <rect fill=\"#4B4B4D\" width=\"76\" height=\"76\"/>\n <polygon fill=\"#1A1A1A\" stroke=\"black\" stroke-width=\"0.380524\" points=\"72,72 4,72 0,76 76,76 76,0 72,4 \"/>\n <polygon fill=\"#848688\" points=\"4,4 72,4 76,0 0,0 0,76 4,72 \"/>\n <circle fill=\"none\" stroke=\"#FFF212\" stroke-width=\"1.8\" cx=\"38\" cy=\"38\" r=\"29\"/>\n <g ng-style=\"{fill:msg.payload ==='on' ? 'green' : 'red'}\">\n <circle cx=\"38\" cy=\"38\" r=\"26\" />\n </g>\n <line fill=\"none\" stroke=\"#E6E7E8\" stroke-width=\"0.380524\" x1=\"0\" y1=\"0\" x2=\"4\" y2= \"4\" />\n <polyline fill=\"none\" stroke=\"#D2D3D5\" stroke-width=\"0.380524\" points=\"4,72 4,4 72,4 \"/>\n\n\n <g ng-style=\"{fill:msg.payload === 'on' ? 'none' : '#FEFEFE'}\">\n <text x=\"37\" y=\"44\" style=\"text-anchor:middle\" font-weight=\"normal\" font-size=\"19.0185\" font-family=\"Droid Sans\">OFF</text>\n </g>\n <g ng-style=\"{fill:msg.payload === 'on' ? '#FEFEFE' : 'none'}\">\n <text x=\"37\" y=\"44\" style=\"text-anchor:middle\" font-weight=\"normal\" font-size=\"19.0185\" font-family=\"Droid Sans\">ON</text>\n </g>\n </g>\n</svg>\n</md-button>\n\n\n","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":810,"y":340,"wires":[["17866e0.faacb92","56b520a9.a56bb","c8a426c9.19c3c8","6ef014f1.c1ed6c"]]},{"id":"f65c4c78.87389","type":"rbe","z":"bf7ed4ad.050e38","name":"","func":"rbe","gap":"","start":"","inout":"out","property":"payload","x":650,"y":340,"wires":[["73593b91.565604","1d98e67a.4efe1a"]]},{"id":"43afe65.8da6218","type":"inject","z":"bf7ed4ad.050e38","name":"","topic":"","payload":"off","payloadType":"str","repeat":"","crontab":"","once":false,"x":510,"y":360,"wires":[["f65c4c78.87389"]]},{"id":"4b9245ce.bf7aac","type":"inject","z":"bf7ed4ad.050e38","name":"","topic":"","payload":"on","payloadType":"str","repeat":"","crontab":"","once":false,"x":510,"y":320,"wires":[["f65c4c78.87389"]]},{"id":"be78e841.89df08","type":"inject","z":"bf7ed4ad.050e38","name":"reset counter","topic":"reset","payload":"reset","payloadType":"str","repeat":"","crontab":"00 00 * * *","once":false,"onceDelay":0.1,"x":820,"y":220,"wires":[["56b520a9.a56bb"]]},{"id":"56b520a9.a56bb","type":"dsm","z":"bf7ed4ad.050e38","name":"depuis 00:00","sm_config":"","x":1040,"y":220,"wires":[["66ba5437.b95a2c","40dd51be.57543"]]},{"id":"ef63bec0.4b527","type":"inject","z":"bf7ed4ad.050e38","name":"setup hour meter","topic":"set","payload":"{\"triggerInput\":\"payload\",\"currentState\":\"stopped\",\"states\":{\"stopped\":{\"on\":\"started\"},\"started\":{\"inc\":\"counting\",\"off\":\"stopped\"},\"counting\":{\"inc\":\"counting\",\"off\":\"stopped\"}},\"data\":{\"prev_time\":null,\"time\":0,\"seconds\":0,\"interval\":5},\"methods\":{\"init\":[\"sm.calc_time = function () {\",\" var now = Date.now();\",\" sm.data.time += now - sm.data.prev_time;\",\" sm.data.prev_time = now;\",\" sm.data.seconds = Math.round(sm.data.time / 1000);\",\"};\",\"sm.sec2hhmmss = function(t) {\",\" var min = t/60;\",\" var t_h = pad(parseInt(min / 60));\",\" var t_m = pad(parseInt(min % 60));\",\" var t_s = pad(Math.round(t % 60));\",\" return t_h+':'+t_m+':'+t_s;\",\"};\"],\"on\":[\"if (sm.currentState === 'started') {\",\" sm.data.prev_time = Date.now();\",\" resume('inc', msg);\",\"}\",\"output = false;\"],\"inc\":[\"timeout.interval = setTimeout(function() {\",\" sm.calc_time();\",\" msg.data = sm.data;\",\" /* msg.payload = sm.sec2hhmmss(sm.data.seconds);\",\" node.send(msg); */\",\" resume('inc', msg);\",\"}, sm.data.interval*1000);\",\"output = false;\"],\"off\":[\"clearTimeout(timeout.interval);\",\"sm.calc_time();\",\"msg.payload = sm.sec2hhmmss(sm.data.seconds);\"],\"reset\":[\"sm.data.time = 0;\",\"sm.data.seconds = 0;\",\"node.send(msg);\"],\"status\":{\"fill\":{\"get\":\"sm.currentState === 'counting' ? 'green' : 'grey';\"},\"shape\":\"dot\",\"text\":{\"get\":\"'time '+ sm.sec2hhmmss(sm.data.seconds);\"}}}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":280,"wires":[["c8a426c9.19c3c8","56b520a9.a56bb"]]},{"id":"c8a426c9.19c3c8","type":"dsm","z":"bf7ed4ad.050e38","name":"Total","sm_config":"","x":1020,"y":340,"wires":[["ca6f175b.8fbd78"]]},{"id":"ca6f175b.8fbd78","type":"ui_text","z":"bf7ed4ad.050e38","group":"2080148b.7423bc","order":0,"width":"7","height":"1","name":"","label":"P1 total Hrs:","format":"{{msg.payload}}","layout":"row-spread","x":1170,"y":340,"wires":[]},{"id":"40dd51be.57543","type":"dsm","z":"bf7ed4ad.050e38","name":"Event counter","sm_config":"","x":1370,"y":320,"wires":[["f611743b.8066e8"]]},{"id":"19c52d66.b974f3","type":"inject","z":"bf7ed4ad.050e38","name":"setup counter","topic":"set","payload":"{\"data\":{\"counter\":0},\"methods\":{\"reset\":[\"sm.data.counter = 0;\",\"node.send(msg);\"],\"onTransition\":[\"if (msg.payload === 1) {\",\" sm.data.counter++;\",\" msg.payload = sm.data.counter;\",\" output = true;\",\"node.send(msg);\",\"}\"],\"status\":{\"fill\":\"blue\",\"shape\":\"dot\",\"text\":{\"get\":\"sm.data.counter;\"}}}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1370,"y":280,"wires":[["40dd51be.57543"]]},{"id":"66ba5437.b95a2c","type":"ui_text","z":"bf7ed4ad.050e38","group":"89af5a01.8f2698","order":0,"width":"3","height":"1","name":"(5)Hrs P1 depuis 00:00","label":"Hrs:","format":"{{msg.payload}}","layout":"row-spread","x":1390,"y":220,"wires":[]},{"id":"f611743b.8066e8","type":"ui_text","z":"bf7ed4ad.050e38","group":"89af5a01.8f2698","order":0,"width":"3","height":"1","name":"DĂ©parts p1","label":"DĂ©parts:","format":"{{msg.payload}}","layout":"row-spread","x":1570,"y":320,"wires":[]},{"id":"89af5a01.8f2698","type":"ui_group","z":"","name":"Pompe 1","tab":"fabc621b.61667","order":1,"disp":true,"width":"7","collapse":false},{"id":"2080148b.7423bc","type":"ui_group","z":"","name":"Hrs Total","tab":"fabc621b.61667","order":7,"disp":true,"width":"7","collapse":false},{"id":"fabc621b.61667","type":"ui_tab","z":"","name":"poste 6","icon":"dashboard","order":8,"disabled":false,"hidden":false}]

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.