[{"id":"c261ada8.d4cd7","type":"ui_text","z":"21106466.70e60c","group":"d6a1695f.c376f8","order":1,"width":"16","height":"2","name":"CRON Description","label":"Expression Description (updates as you type)...","format":"{{msg.payload.result.description}}","layout":"col-center","x":810,"y":220,"wires":[]},{"id":"eb8003d2.ea6ef","type":"cronplus","z":"21106466.70e60c","name":"Cron Describer","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output2","outputs":2,"options":[],"x":540,"y":220,"wires":[[],["c261ada8.d4cd7"]]},{"id":"35c93639.1b4fda","type":"function","z":"21106466.70e60c","name":"describe cmd","func":"msg.payload = {\n    \"command\": \"describe\",\n    \"expression\": msg.payload\n}\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":220,"wires":[["eb8003d2.ea6ef"]]},{"id":"4cac7726.7daf48","type":"change","z":"21106466.70e60c","name":"","rules":[{"t":"set","p":"ui_add_schedule_name","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":100,"wires":[[]]},{"id":"e3b13d35.c4cfd","type":"change","z":"21106466.70e60c","name":"","rules":[{"t":"set","p":"ui_add_schedule_payload","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":140,"wires":[[]]},{"id":"d8d4beef.ba71d","type":"change","z":"21106466.70e60c","name":"","rules":[{"t":"set","p":"ui_add_schedule_expression","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":180,"wires":[[]]},{"id":"c2de3df3.b4691","type":"change","z":"21106466.70e60c","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.command","pt":"msg","to":"add","tot":"str"},{"t":"set","p":"payload.payload","pt":"msg","to":"ui_add_schedule_payload","tot":"flow"},{"t":"set","p":"payload.name","pt":"msg","to":"ui_add_schedule_name","tot":"flow"},{"t":"set","p":"payload.expression","pt":"msg","to":"ui_add_schedule_expression","tot":"flow"},{"t":"set","p":"payload.payloadType","pt":"msg","to":"str","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":300,"wires":[["81360336.f7e43","43e9895e.8605a8"]]},{"id":"81360336.f7e43","type":"cronplus","z":"21106466.70e60c","name":"dyn schedules","outputField":"payload","timeZone":"","persistDynamic":true,"commandResponseMsgOutput":"output2","outputs":2,"options":[],"x":800,"y":300,"wires":[["95207c41.96f1a"],["19c90ed9.4b4a31"]]},{"id":"88ceb596.c48648","type":"ui_toast","z":"21106466.70e60c","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"","topic":"","name":"","x":810,"y":500,"wires":[]},{"id":"51778764.7dc538","type":"catch","z":"21106466.70e60c","name":"","scope":null,"uncaught":false,"x":140,"y":500,"wires":[["bc7a8f0a.eb15c","4f492a55.ff17b4"]]},{"id":"bc7a8f0a.eb15c","type":"ui_toast","z":"21106466.70e60c","position":"top right","displayTime":"3","highlight":"red","outputs":0,"ok":"OK","cancel":"","topic":"Error...","name":"","x":350,"y":500,"wires":[]},{"id":"43e9895e.8605a8","type":"ui_button","z":"21106466.70e60c","name":"Refresh","group":"d6a1695f.c376f8","order":6,"width":"1","height":"1","passthru":true,"label":"","tooltip":"Get status of jobs","color":"","bgcolor":"","icon":"fa-refresh","payload":"","payloadType":"date","topic":"list-all","x":560,"y":320,"wires":[["81360336.f7e43"]]},{"id":"b3ad9498.ca2c88","type":"ui_text_input","z":"21106466.70e60c","name":"","label":"Expression","tooltip":"CRON expression","group":"d6a1695f.c376f8","order":3,"width":"4","height":"1","passthru":true,"mode":"text","delay":"100","topic":"","x":150,"y":180,"wires":[["35c93639.1b4fda","d8d4beef.ba71d"]]},{"id":"74693f08.e64c4","type":"ui_text_input","z":"21106466.70e60c","name":"","label":"Name","tooltip":"Schedule Name","group":"d6a1695f.c376f8","order":2,"width":"4","height":"1","passthru":true,"mode":"text","delay":"100","topic":"","x":130,"y":100,"wires":[["4cac7726.7daf48"]]},{"id":"17e038e.7419bc7","type":"ui_button","z":"21106466.70e60c","name":"","group":"d6a1695f.c376f8","order":5,"width":"3","height":"1","passthru":false,"label":"Add","tooltip":"Add or update named schedule","color":"","bgcolor":"","icon":"send","payload":"","payloadType":"str","topic":"","x":130,"y":300,"wires":[["c2de3df3.b4691"]]},{"id":"440d4e3.ab64fb","type":"ui_text_input","z":"21106466.70e60c","name":"","label":"Payload","tooltip":"Payload to send when schedule fires","group":"d6a1695f.c376f8","order":4,"width":"4","height":"1","passthru":true,"mode":"text","delay":"100","topic":"","x":140,"y":140,"wires":[["e3b13d35.c4cfd"]]},{"id":"e3ea0c.b99c05f8","type":"ui_template","z":"21106466.70e60c","group":"d6a1695f.c376f8","name":"","order":7,"width":"16","height":"5","format":"<style type=\"text/css\">\n.t1  {border-collapse:collapse;border-spacing:0;border-color:#ccc;}\n.t1 td{font-family:Arial, sans-serif;font-size:14px;padding:8px 3px;border-style:solid;border-width:0px;overflow:hidden;word-break:normal;border-top-width:1px;border-bottom-width:1px;border-color:#ccc;color:#333;background-color:#fff;}\n.t1 th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;}\n.t1 .t1-36r9{background-color:#000000;color:#ffffff;text-align:left;vertical-align:top}\n.t1 .t1-x2zo{background-color:#c0c0c0;font-size:small;text-align:left;vertical-align:top}\n.t1 .t1-o73e{background-color:#c0c0c0;font-size:small;text-align:center;vertical-align:top}\n.t1 .t1-5qt9{font-size:small;text-align:left;vertical-align:top}\n.t1 .t1-5qta{font-size:small;text-align:center;vertical-align:middle}\n</style>\n<table class=\"t1\">\n  <tr>\n    <th class=\"t1-36r9\" colspan=\"9\">CRON Schedules</th>\n  </tr>\n  <tr>\n    <td class=\"t1-x2zo\">Name</td>\n    <td class=\"t1-x2zo\">Expression</td>\n    <td class=\"t1-x2zo\">Payload</td>\n    <td class=\"t1-x2zo\">Description</td>\n    <td class=\"t1-x2zo\">Next run</td>\n    <td class=\"t1-x2zo\">State</td>\n    <td class=\"t1-o73e\">Delete</td>\n    <td class=\"t1-o73e\">Pause</td>\n    <td class=\"t1-o73e\">Resume</td>\n  </tr>\n  <tr  ng-repeat=\"item in msg.payload\">\n    <td class=\"t1-5qt9\">{{item.config.name}}</td>\n    <td class=\"t1-5qt9\" style=\"white-space: nowrap\" nowrap>{{item.config.expression}}</td>\n    <td class=\"t1-5qt9\">{{item.config.payload}}</td>\n    <td class=\"t1-5qt9\">{{item.status.description}}</td>\n    <td class=\"t1-5qt9\">{{item.status.nextDescription}}</td>\n    <td class=\"t1-5qta\"><i class=\"fa fa-{{item.status.isRunning ? 'play' : 'pause'}}\"> </i></td>\n\n   <td class=\"t1-5qta\">\n       <md-button class=\"md-raised\"\n        ng-click=\"send([[{payload:{command:'remove', name: item.config.name}}, {payload:{command:'list-all'}}]]);\"> <i class=\"fa fa-trash\"> </i></md-button>\n   </td>\n   <td class=\"t1-5qta\">\n       <md-button class=\"button\" \n       ng-click=\"send([[{payload:{command:'pause', name: item.config.name}}, {payload:{command:'list-all'}}]]);\"> <i class=\"fa fa-pause\"> </i></md-button>\n   </td>\n   <td class=\"t1-5qta\">\n       <md-button class=\"button\" \n       ng-click=\"send([[{payload:{command:'start', name: item.config.name}}, {payload:{command:'list-all'}}]]);\"> <i class=\"fa fa-play\"> </i></md-button>\n   </td>\n\n  </tr>\n\n </tbody>\n</table>\n\n<!--<table id=\"table\" class=\"table table-striped table-responsive-md btn-table\" >-->\n<!--     <tr>-->\n<!--        <th>Name</th> -->\n<!--        <th>Expression</th> -->\n<!--        <th>Payload</th> -->\n<!--        <th>Description</th>-->\n<!--        <th>Next run</th>-->\n<!--        <th>State</th>-->\n<!--        <th>Delete</th>-->\n<!--        <th>Pause</th>-->\n<!--        <th>Resume</th>-->\n<!-- </tr>-->\n<!-- <tbody>-->\n<!-- <tr ng-repeat=\"item in msg.payload\">-->\n<!--   <td >{{item.config.name}}</td>-->\n<!--   <td style=\"white-space: nowrap\" nowrap>{{item.config.expression}}</td>-->\n<!--   <td >{{item.config.payload}}</td>-->\n<!--   <td >{{item.status.description}}</td>-->\n<!--   <td >{{item.status.nextDescription}}</td>-->\n<!--   <td >{{item.status.isRunning ? 'Running' : 'Paused'}}</td>-->\n<!--   <td>-->\n<!--       <md-button class=\"md-raised\"-->\n<!--        ng-click=\"send([[{payload:{command:'remove', name: item.config.name}}, {payload:{command:'list-all'}}]]);\"> <i class=\"fa fa-trash\"> </i></md-button>-->\n<!--   </td>-->\n<!--   <td>-->\n<!--       <md-button class=\"button\" -->\n<!--       ng-click=\"send([[{payload:{command:'pause', name: item.config.name}}, {payload:{command:'list-all'}}]]);\"> <i class=\"fa fa-pause\"> </i></md-button>-->\n<!--   </td>-->\n<!--   <td>-->\n<!--       <md-button class=\"button\" -->\n<!--       ng-click=\"send([[{payload:{command:'start', name: item.config.name}}, {payload:{command:'list-all'}}]]);\"> <i class=\"fa fa-play\"> </i></md-button>-->\n<!--   </td>-->\n<!-- </tr>-->\n<!-- </tbody>-->\n<!--</table>-->\n\n","storeOutMessages":false,"fwdInMessages":false,"resendOnRefresh":false,"templateScope":"local","x":520,"y":400,"wires":[["81360336.f7e43"]]},{"id":"650dc2c3.f8ef2c","type":"function","z":"21106466.70e60c","name":"Make table data","func":"if(!msg.payload || !msg.payload.result || !msg.payload.result.length){\n    msg.payload = [];\n    return msg;\n}\n\nmsg.payload = msg.payload.result;\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":400,"wires":[["e3ea0c.b99c05f8"]]},{"id":"4f492a55.ff17b4","type":"debug","z":"21106466.70e60c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":310,"y":540,"wires":[]},{"id":"780d7131.671b7","type":"ui_template","z":"21106466.70e60c","group":"d6a1695f.c376f8","name":"CRON Info","order":8,"width":"16","height":"12","format":"<div>\n<pre>CRON Format...\n\n    s  m  h  md m  wd y\n    |  |  |  |  |  |  |\n    *  *  *  *  *  *  *    Field              Allowed values    Special symbols\n    |  |  |  |  |  |  |    -----------------  ---------------   ---------------\n    `--|--|--|--|--|--|->  Second (optional)  0-59              * / , -\n       `--|--|--|--|--|->  Minute             0-59              * / , -\n          `--|--|--|--|->  Hour               0-23              * / , -\n             `--|--|--|->  Day of Month       1-31              * / , - L W\n                `--|--|->  Month              1-12 or JAN-DEC   * / , -\n                   `--|->  Day of Week        0-7 or SUN-SAT    * / , - L #\n                      `->  Year (optional)    1970-2099         * / , -\n                \n</pre>    \n</div>\n\n<style type=\"text/css\">\n.t2  {border-collapse:collapse;border-spacing:0;border-color:#ccc;}\n.t2 td{font-family:Arial, sans-serif;font-size:14px;padding:2px 2px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#fff;}\n.t2 th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;}\n.t2 .t2-dg6o{background-color:#000000;color:#ffffff;text-align:left;vertical-align:top}\n.t2 .t2-6e8n{font-weight:bold;background-color:#c0c0c0;border-color:inherit;text-align:left;vertical-align:top}\n.t2 .t2-0pky{border-color:inherit;text-align:left;vertical-align:top}\n</style>\n<table class=\"t2\">\n  <tr>\n    <th class=\"t2-dg6o\" colspan=\"2\">Example CRON Expressions</th>\n  </tr>\n  <tr>\n    <td class=\"t2-6e8n\">Expression</td>\n    <td class=\"t2-6e8n\">Description</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">* * * * * *</td>\n    <td class=\"t2-0pky\">Every Second</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 * * * * *</td>\n    <td class=\"t2-0pky\">Every minute</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 */10 * * * *</td>\n    <td class=\"t2-0pky\">Every 10 minutes</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 */20 1 * * *</td>\n    <td class=\"t2-0pky\">Every 20 minutes, between 01:00 AM and 01:59 AM</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 15,30,45 * * * *</td>\n    <td class=\"t2-0pky\">At 15, 30, and 45 minutes past the hour</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 0 12 * * *</td>\n    <td class=\"t2-0pky\">Every day at noon - 12pm</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 0 2 29 FEB * 2020-2040</td>\n    <td class=\"t2-0pky\">At 02:00 AM, on day 29 of the month, only in February, every 4 years, 2020 through 2040</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 0 7 * *</td>\n    <td class=\"t2-0pky\">MON#1 * At 07:00 AM, on the first Monday of the month</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 0 12 * JAN,FEB,MAR,APR *</td>\n    <td class=\"t2-0pky\">Every day at noon in January, February, March and April</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">* * 1W * *</td>\n    <td class=\"t2-0pky\">Every minute, on the first weekday of the month</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">* * * * Tue#3</td>\n    <td class=\"t2-0pky\">Every minute, on the third Tuesday of the month</td>\n  </tr>\n  <tr>\n    <td class=\"t2-0pky\">0 12 * * MONL</td>\n    <td class=\"t2-0pky\">At 12:00 PM, on the last Monday of the month</td>\n  </tr>\n</table>","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":790,"y":140,"wires":[[]]},{"id":"478fbbd.cfa1c44","type":"link in","z":"21106466.70e60c","name":"Cron Events","links":["68f2f76e.aba708","95207c41.96f1a"],"x":610,"y":500,"wires":[["88ceb596.c48648","d85796ff.a49238"]],"l":true},{"id":"d85796ff.a49238","type":"debug","z":"21106466.70e60c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":770,"y":560,"wires":[]},{"id":"268d2762.906e88","type":"comment","z":"21106466.70e60c","name":"Dynamic cron schedules - setup by dashboard","info":"","x":510,"y":40,"wires":[]},{"id":"95207c41.96f1a","type":"link out","z":"21106466.70e60c","name":"","links":["478fbbd.cfa1c44"],"x":935,"y":280,"wires":[]},{"id":"a17cdbbc.8b2328","type":"ui_ui_control","z":"21106466.70e60c","name":"","events":"all","x":320,"y":340,"wires":[["43e9895e.8605a8"]]},{"id":"19c90ed9.4b4a31","type":"delay","z":"21106466.70e60c","name":"","pauseType":"delay","timeout":"200","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":150,"y":400,"wires":[["650dc2c3.f8ef2c"]]},{"id":"d6a1695f.c376f8","type":"ui_group","z":"","name":"Default","tab":"c08b5841.22f118","order":1,"disp":false,"width":"16","collapse":false},{"id":"c08b5841.22f118","type":"ui_tab","z":"","name":"CRON","icon":"dashboard","order":2,"disabled":false,"hidden":false}]