diff --git a/shared_files/node-red/aryaos_flows.json b/shared_files/node-red/aryaos_flows.json new file mode 100644 index 0000000..a5cc0db --- /dev/null +++ b/shared_files/node-red/aryaos_flows.json @@ -0,0 +1,7650 @@ +[ + { + "id": "1d5c7046712ea9d2", + "type": "tab", + "label": "Control", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "94cf869050128770", + "type": "tab", + "label": "Dashboard", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "9c4ba3cbc4bd87fa", + "type": "tab", + "label": "Maps", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "76732e91104cd622", + "type": "tab", + "label": "I/O", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "4fa67ac9ec0c7369", + "type": "tab", + "label": "Config", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "de725ec24f79b6b7", + "type": "tab", + "label": "TFR", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "898f970d26b5049d", + "type": "tab", + "label": "TAK", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "f8d4ccf4360ea706", + "type": "tab", + "label": "Sit(x)", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "f83d0c6d58d0338c", + "type": "tab", + "label": "Recorder", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "23030b6ea0597f64", + "type": "tab", + "label": "Update", + "disabled": false, + "info": "", + "env": [] + }, + { + "id": "bd418afe09349324", + "type": "group", + "z": "1d5c7046712ea9d2", + "name": "DANGER ZONE", + "style": { + "fill": "#ffbfbf", + "label": true + }, + "nodes": [ + "683a2b05.736204", + "1cf31554.2aaa63", + "38e53dbf.ca594a", + "c409cae5.8e4128", + "811dc61136e8046d", + "0be2a009aadd225d" + ], + "x": 734, + "y": 631.5, + "w": 472, + "h": 217 + }, + { + "id": "c5409a5d2b5e28d5", + "type": "group", + "z": "4fa67ac9ec0c7369", + "style": { + "stroke": "#999999", + "stroke-opacity": "1", + "fill": "none", + "fill-opacity": "1", + "label": true, + "label-position": "nw", + "color": "#a4a4a4" + }, + "nodes": [ + "2d8066d127cb6c44", + "df765e01751751eb", + "bb55ecc1c7a7da19" + ], + "x": 464, + "y": 59, + "w": 302, + "h": 82 + }, + { + "id": "a247d145bc97ec4e", + "type": "group", + "z": "4fa67ac9ec0c7369", + "style": { + "stroke": "#999999", + "stroke-opacity": "1", + "fill": "none", + "fill-opacity": "1", + "label": true, + "label-position": "nw", + "color": "#a4a4a4" + }, + "nodes": [ + "cb87c8b4398c815d", + "90bbf3ddaabf55d6", + "70a02ab5c732adf0", + "8f90b1c209f39ff8", + "e435961c35c6c50f", + "a693d594320c6842" + ], + "x": 454, + "y": 159, + "w": 392, + "h": 162 + }, + { + "id": "fb90e60944764ed9", + "type": "group", + "z": "94cf869050128770", + "name": "GPS Fix Dashboard Item", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "69bd079907c39f3c", + "73eb77cde2c7a709", + "7c69f96954e99a9b", + "de2c209dbe934060", + "f20627a1cbc79171", + "1190f05a50aad89c", + "43958e20b7e848a3" + ], + "x": 34, + "y": 379, + "w": 692, + "h": 162 + }, + { + "id": "a1d4fe25968a5368", + "type": "group", + "z": "94cf869050128770", + "name": "Throttled Status", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "67c1aa629a2e95af", + "4f64ec7db13ee424", + "4338acd2934924cc" + ], + "x": 494, + "y": 559, + "w": 632, + "h": 109.5 + }, + { + "id": "45da34b7e4bdb957", + "type": "group", + "z": "94cf869050128770", + "name": "", + "style": { + "fill": "#bfdbef", + "label": true + }, + "nodes": [ + "095368571cbf1fcf", + "c82e38d047199cb5", + "16d10d070ec070d9", + "20787a00729ffe5f", + "c1b4f4996f5aa122", + "7750039932acdcc7", + "e0d87a55d461c609", + "8db81499fdb5170a", + "681d2876a7db4f51", + "d85368cd75bb347e" + ], + "x": 34, + "y": 19, + "w": 652, + "h": 202 + }, + { + "id": "75d810e2c34e3c4f", + "type": "group", + "z": "94cf869050128770", + "name": "SDR Lookup", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "24d11b12327e6147", + "b36b3af7a720fa09", + "c694287e0ecfdb11", + "ab8919275dc5a1bb", + "65b80260e6a12016" + ], + "x": 34, + "y": 239, + "w": 592, + "h": 122 + }, + { + "id": "e3b3a9c137f6b1a8", + "type": "group", + "z": "94cf869050128770", + "name": "Uptime", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "16419a36256c9583", + "b1d1259dd556c68a", + "267687b40c52261e" + ], + "x": 34, + "y": 571.5, + "w": 452, + "h": 97 + }, + { + "id": "e165fa1b9bca5292", + "type": "group", + "z": "76732e91104cd622", + "name": "aircraft.json", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "5f6eab2d3d6ad9be", + "64fa2c00f63bdd53", + "b068a436f07cc0bd", + "99dfc7e97f5f8d47", + "b3d1b7bf5a4edba2", + "ce3be08760e15920", + "65a40de620905bad", + "573961361f4ac80b", + "61a91ec3d8b3f82b" + ], + "x": 34, + "y": 419, + "w": 682, + "h": 242 + }, + { + "id": "265b840ea6186ecf", + "type": "group", + "z": "76732e91104cd622", + "style": { + "stroke": "#999999", + "stroke-opacity": "1", + "fill": "none", + "fill-opacity": "1", + "label": true, + "label-position": "nw", + "color": "#a4a4a4" + }, + "nodes": [ + "a5dbb71f6d17579d", + "4aa3f8001760c96a", + "e0a7e9ef71a6f0e8", + "bd6f79df66f3f373", + "089a5c1ffeafe91b", + "58edafa9ab997436" + ], + "x": 54, + "y": 759, + "w": 452, + "h": 262 + }, + { + "id": "1d17f399c2310113", + "type": "group", + "z": "94cf869050128770", + "name": "Hostname", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "4a87ab6388bffac2", + "1fca29d62080fdd9", + "5d6ab3c272199b94", + "dc3fd8b497972cae", + "2d5d9381afea8c59", + "6ee20da0ae45fefa" + ], + "x": 554, + "y": 679, + "w": 912, + "h": 122 + }, + { + "id": "d34772b1b10233f2", + "type": "group", + "z": "94cf869050128770", + "name": "QR Code", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "9f8119755cf73778", + "a1642742e713d559", + "8a9319936729c649", + "cbbe264f84b53680" + ], + "x": 744, + "y": 439, + "w": 582, + "h": 82 + }, + { + "id": "3de15a4313928391", + "type": "group", + "z": "94cf869050128770", + "name": "Docker", + "style": { + "fill": "#bfdbef", + "label": true, + "color": "#000000" + }, + "nodes": [ + "808f9f656a06999e", + "b2825e8d13e21f82", + "d033dfa14fa3a005" + ], + "x": 34, + "y": 691.5, + "w": 472, + "h": 97 + }, + { + "id": "edc83286b603d84a", + "type": "ui_tab", + "name": "Dashboard", + "icon": "dashboard", + "order": 3, + "disabled": false, + "hidden": false + }, + { + "id": "e828481c0c713837", + "type": "ui_base", + "theme": { + "name": "theme-light", + "lightTheme": { + "default": "#0094CE", + "baseColor": "#0094CE", + "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif", + "edited": true, + "reset": false + }, + "darkTheme": { + "default": "#097479", + "baseColor": "#097479", + "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif", + "edited": false + }, + "customTheme": { + "name": "Untitled Theme 1", + "default": "#4B7930", + "baseColor": "#4B7930", + "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif" + }, + "themeState": { + "base-color": { + "default": "#0094CE", + "value": "#0094CE", + "edited": false + }, + "page-titlebar-backgroundColor": { + "value": "#0094CE", + "edited": false + }, + "page-backgroundColor": { + "value": "#fafafa", + "edited": false + }, + "page-sidebar-backgroundColor": { + "value": "#ffffff", + "edited": false + }, + "group-textColor": { + "value": "#1bbfff", + "edited": false + }, + "group-borderColor": { + "value": "#ffffff", + "edited": false + }, + "group-backgroundColor": { + "value": "#ffffff", + "edited": false + }, + "widget-textColor": { + "value": "#111111", + "edited": false + }, + "widget-backgroundColor": { + "value": "#0094ce", + "edited": false + }, + "widget-borderColor": { + "value": "#ffffff", + "edited": false + }, + "base-font": { + "value": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif" + } + }, + "angularTheme": { + "primary": "indigo", + "accents": "blue", + "warn": "red", + "background": "grey", + "palette": "light" + } + }, + "site": { + "name": "AryaOS Dashboard", + "hideToolbar": "false", + "allowSwipe": "false", + "lockMenu": "false", + "allowTempTheme": "true", + "dateFormat": "DD/MM/YYYY", + "sizes": { + "sx": 48, + "sy": 48, + "gx": 6, + "gy": 6, + "cx": 6, + "cy": 6, + "px": 0, + "py": 0 + } + } + }, + { + "id": "1890881e.83819", + "type": "ui_group", + "name": "Col 1", + "tab": "c3173234.2636e", + "order": 1, + "disp": false, + "width": "6", + "collapse": false, + "className": "" + }, + { + "id": "9a96a8b1.92db78", + "type": "ui_group", + "name": "Col 2", + "tab": "c3173234.2636e", + "order": 2, + "disp": false, + "width": "6", + "collapse": false, + "className": "" + }, + { + "id": "72fc319.cc425d", + "type": "ui_group", + "name": "Col 3", + "tab": "c3173234.2636e", + "order": 3, + "disp": false, + "width": "6", + "collapse": false, + "className": "" + }, + { + "id": "c3173234.2636e", + "type": "ui_tab", + "name": "OS Status", + "icon": "dashboard", + "order": 6, + "disabled": false, + "hidden": false + }, + { + "id": "98514ac85fb371eb", + "type": "ui_tab", + "name": "Debug Logs", + "icon": "dashboard", + "order": 7, + "disabled": false, + "hidden": false + }, + { + "id": "985cb816630d7e12", + "type": "ui_group", + "name": "Group 1", + "tab": "98514ac85fb371eb", + "order": 1, + "disp": false, + "width": "20", + "collapse": false, + "className": "" + }, + { + "id": "1a1f481e736717f6", + "type": "ui_tab", + "name": "Config", + "icon": "dashboard", + "order": 5, + "disabled": false, + "hidden": false + }, + { + "id": "ea29ae5e99fd702f", + "type": "ui_group", + "name": "adsbcot Config", + "tab": "1a1f481e736717f6", + "order": 3, + "disp": true, + "width": 6, + "collapse": false, + "className": "" + }, + { + "id": "c9b3e02a2ade5f4f", + "type": "ui_group", + "name": "AryaOS Config", + "tab": "1a1f481e736717f6", + "order": 2, + "disp": true, + "width": 8, + "collapse": false, + "className": "" + }, + { + "id": "d39a9c40a9e39a06", + "type": "ui_group", + "name": "DANGER ZONE", + "tab": "3883fa5a5cd96180", + "order": 3, + "disp": true, + "width": "10", + "collapse": false, + "className": "" + }, + { + "id": "4f5d2f631860ad85", + "type": "ui_group", + "name": "TAK Users", + "tab": "f26ff01359312d83", + "order": 1, + "disp": true, + "width": "12", + "collapse": false, + "className": "" + }, + { + "id": "f26ff01359312d83", + "type": "ui_tab", + "name": "TAK", + "icon": "dashboard", + "order": 8, + "disabled": false, + "hidden": false + }, + { + "id": "2ff2aec393c0b08b", + "type": "ui_link", + "name": "Home", + "link": "http://AryaOS.local", + "icon": "open_in_browser", + "target": "newtab", + "order": 1 + }, + { + "id": "3883fa5a5cd96180", + "type": "ui_tab", + "name": "Admin", + "icon": "dashboard", + "order": 4, + "disabled": false, + "hidden": false + }, + { + "id": "1027f32817e150a0", + "type": "ui_group", + "name": "Control", + "tab": "1a1f481e736717f6", + "order": 1, + "disp": false, + "width": "6", + "collapse": false, + "className": "" + }, + { + "id": "20776b02c778704b", + "type": "ui_link", + "name": "Recorder", + "link": "http://aryaos.local/logs/", + "icon": "open_in_browser", + "target": "newtab", + "order": 2 + }, + { + "id": "5fe7b630bc270f5d", + "type": "ui_group", + "name": "lincot", + "tab": "1a1f481e736717f6", + "order": 4, + "disp": true, + "width": 6, + "collapse": false, + "className": "" + }, + { + "id": "fa4e075e1fa30638", + "type": "ui_group", + "name": "Status", + "tab": "edc83286b603d84a", + "order": 1, + "disp": true, + "width": "10", + "collapse": false, + "className": "" + }, + { + "id": "f9087e66bb4cd9b2", + "type": "ui_group", + "name": "Control", + "tab": "edc83286b603d84a", + "order": 2, + "disp": true, + "width": "10", + "collapse": false, + "className": "" + }, + { + "id": "f61e7642f6395af5", + "type": "ui_tab", + "name": "Update", + "icon": "dashboard", + "disabled": false, + "hidden": false + }, + { + "id": "27bb63a809345efc", + "type": "ui_group", + "name": "Default", + "tab": "f61e7642f6395af5", + "order": 1, + "disp": true, + "width": "20", + "collapse": false, + "className": "" + }, + { + "id": "de218d79fd1bbdd4", + "type": "ui_spacer", + "z": "4fa67ac9ec0c7369", + "name": "spacer", + "group": "c9b3e02a2ade5f4f", + "order": 5, + "width": "8", + "height": "1" + }, + { + "id": "01bbd1a84045b069", + "type": "ui_group", + "name": "Command Logs", + "tab": "3883fa5a5cd96180", + "order": 2, + "disp": true, + "width": "10", + "collapse": false, + "className": "" + }, + { + "id": "59dd599c93f49d9b", + "type": "ui_spacer", + "z": "1d5c7046712ea9d2", + "name": "spacer", + "group": "d39a9c40a9e39a06", + "order": 2, + "width": 2, + "height": 1 + }, + { + "id": "087bafabfc3d14f1", + "type": "ui_spacer", + "z": "1d5c7046712ea9d2", + "name": "spacer", + "group": "d39a9c40a9e39a06", + "order": 4, + "width": 2, + "height": 1 + }, + { + "id": "683a2b05.736204", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "g": "bd418afe09349324", + "name": "", + "group": "d39a9c40a9e39a06", + "order": 3, + "width": 4, + "height": 1, + "passthru": false, + "label": "Reboot", + "tooltip": "", + "color": "black", + "bgcolor": "yellow", + "className": "", + "icon": "", + "payload": "", + "payloadType": "str", + "topic": "", + "topicType": "str", + "x": 820, + "y": 740, + "wires": [ + [ + "1cf31554.2aaa63" + ] + ] + }, + { + "id": "1cf31554.2aaa63", + "type": "exec", + "z": "1d5c7046712ea9d2", + "g": "bd418afe09349324", + "command": "sudo /sbin/reboot", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "Reboot", + "x": 1000, + "y": 740, + "wires": [ + [], + [], + [] + ] + }, + { + "id": "38e53dbf.ca594a", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "g": "bd418afe09349324", + "name": "", + "group": "d39a9c40a9e39a06", + "order": 1, + "width": 4, + "height": 1, + "passthru": false, + "label": "Shutdown", + "tooltip": "", + "color": "", + "bgcolor": "red", + "className": "", + "icon": "", + "payload": "", + "payloadType": "str", + "topic": "", + "topicType": "str", + "x": 830, + "y": 800, + "wires": [ + [ + "c409cae5.8e4128" + ] + ] + }, + { + "id": "c409cae5.8e4128", + "type": "exec", + "z": "1d5c7046712ea9d2", + "g": "bd418afe09349324", + "command": "sudo /sbin/shutdown -h now", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "Shutdown", + "x": 1010, + "y": 800, + "wires": [ + [], + [], + [] + ] + }, + { + "id": "08b06bdbca165793", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart adsbcot", + "group": "f9087e66bb4cd9b2", + "order": 11, + "width": 4, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "adsbcot", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 430, + "y": 620, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "811dc61136e8046d", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "g": "bd418afe09349324", + "name": "", + "group": "f9087e66bb4cd9b2", + "order": 7, + "width": 4, + "height": 1, + "passthru": false, + "label": "Reset WiFi", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "comitup", + "payloadType": "str", + "topic": "", + "topicType": "str", + "x": 830, + "y": 680, + "wires": [ + [ + "0be2a009aadd225d" + ] + ] + }, + { + "id": "0be2a009aadd225d", + "type": "exec", + "z": "1d5c7046712ea9d2", + "g": "bd418afe09349324", + "command": "/usr/local/sbin/wifi-nuke.py", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 1060, + "y": 680, + "wires": [ + [ + "3493a1a21d11eab7" + ], + [ + "6949a7f7b06e7070" + ], + [ + "90ed4f84f5e592ba" + ] + ] + }, + { + "id": "f37f9b80fb0791de", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart dump1090-fa", + "group": "f9087e66bb4cd9b2", + "order": 21, + "width": 3, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dump1090-fa", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 240, + "y": 880, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "87d746e00381cae2", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart dump978-fa", + "group": "f9087e66bb4cd9b2", + "order": 37, + "width": 4, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dump978-fa", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 180, + "y": 980, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "88eaf8eb64d89ff4", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable adsbcot", + "group": "f9087e66bb4cd9b2", + "order": 10, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "adsbcot", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 430, + "y": 580, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "3493a1a21d11eab7", + "type": "ui_template", + "z": "1d5c7046712ea9d2", + "group": "01bbd1a84045b069", + "name": "Command STDOUT", + "order": 3, + "width": 10, + "height": 5, + "format": "Command STDOUT:\n
\n
\n", + "storeOutMessages": false, + "fwdInMessages": true, + "resendOnRefresh": false, + "templateScope": "local", + "className": "", + "x": 1360, + "y": 440, + "wires": [ + [] + ] + }, + { + "id": "892008ebaff339b8", + "type": "function", + "z": "1d5c7046712ea9d2", + "name": "send systemctl cmd", + "func": "let pl = msg.payload;\nlet cmd;\nfor (cmd of msg.cmds) {\n msg.payload = `sudo /bin/systemctl ${cmd} ${pl}`\n node.send(msg);\n}\n", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 700, + "y": 500, + "wires": [ + [ + "c54c8c00ef81cc1e" + ] + ] + }, + { + "id": "6949a7f7b06e7070", + "type": "ui_template", + "z": "1d5c7046712ea9d2", + "group": "01bbd1a84045b069", + "name": "Command STDERR", + "order": 4, + "width": 10, + "height": 5, + "format": "Command STDERR:\n
\n
\n", + "storeOutMessages": false, + "fwdInMessages": true, + "resendOnRefresh": false, + "templateScope": "local", + "className": "", + "x": 1360, + "y": 480, + "wires": [ + [] + ] + }, + { + "id": "3e098904e91c0153", + "type": "ui_text", + "z": "1d5c7046712ea9d2", + "group": "01bbd1a84045b069", + "order": 1, + "width": 10, + "height": 1, + "name": "", + "label": "Last Command", + "format": "\"{{msg.payload}}\"", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Lucida Sans Typewriter,Lucida Console,Monaco,monospace", + "fontSize": 16, + "color": "#000000", + "x": 1120, + "y": 380, + "wires": [] + }, + { + "id": "90ed4f84f5e592ba", + "type": "ui_text", + "z": "1d5c7046712ea9d2", + "group": "01bbd1a84045b069", + "order": 2, + "width": 10, + "height": 1, + "name": "", + "label": "Exit Code", + "format": "{{msg.payload.code}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 1320, + "y": 520, + "wires": [] + }, + { + "id": "c54c8c00ef81cc1e", + "type": "delay", + "z": "1d5c7046712ea9d2", + "name": "", + "pauseType": "delay", + "timeout": "4", + "timeoutUnits": "seconds", + "rate": "1", + "nbRateUnits": "1", + "rateUnits": "second", + "randomFirst": "1", + "randomLast": "5", + "randomUnits": "seconds", + "drop": false, + "allowrate": false, + "outputs": 1, + "x": 900, + "y": 500, + "wires": [ + [ + "3e098904e91c0153", + "3880190e670fb806", + "89b46799e22ef74c" + ] + ] + }, + { + "id": "384961823b4116f8", + "type": "function", + "z": "1d5c7046712ea9d2", + "name": "Set restart CMDS", + "func": "msg.cmds = [\"restart\"]\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 470, + "y": 480, + "wires": [ + [ + "892008ebaff339b8" + ] + ] + }, + { + "id": "3f668133edf0f84f", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable adsbcot", + "group": "f9087e66bb4cd9b2", + "order": 12, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "adsbcot", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 430, + "y": 540, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "cbbce818d3e35f27", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable dump1090-fa", + "group": "f9087e66bb4cd9b2", + "order": 20, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dump1090-fa", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 240, + "y": 840, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "a89b330a230704e0", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable dump1090-fa", + "group": "f9087e66bb4cd9b2", + "order": 22, + "width": 3, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dump1090-fa", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 240, + "y": 920, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "df17c4d78bfccd39", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable dump978-fa", + "group": "f9087e66bb4cd9b2", + "order": 36, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dump978-fa", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 180, + "y": 1060, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "6f76752d1b604a7a", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable dump978-fa", + "group": "f9087e66bb4cd9b2", + "order": 38, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dump978-fa", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 190, + "y": 1020, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "4507524764f2e670", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "", + "group": "f9087e66bb4cd9b2", + "order": 6, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable WiFi", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "", + "payloadType": "str", + "topic": "", + "topicType": "str", + "x": 610, + "y": 260, + "wires": [ + [ + "f8a415dbee252311" + ] + ] + }, + { + "id": "f8a415dbee252311", + "type": "function", + "z": "1d5c7046712ea9d2", + "name": "set cmds", + "func": "node.send({ \"payload\": \"sudo /bin/systemctl disable comitup\" })\nnode.send({ \"payload\": \"sudo /bin/systemctl stop comitup\" })\nnode.send({ \"payload\": \"/usr/local/sbin/wifi-nuke.py\" })\nnode.send({ \"payload\": \"sudo /usr/bin/nmcli device disconnect wlan0\" })\n", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 760, + "y": 260, + "wires": [ + [ + "89b46799e22ef74c", + "3e098904e91c0153" + ] + ] + }, + { + "id": "3880190e670fb806", + "type": "debug", + "z": "1d5c7046712ea9d2", + "name": "debug 6", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 1100, + "y": 520, + "wires": [] + }, + { + "id": "89b46799e22ef74c", + "type": "exec", + "z": "1d5c7046712ea9d2", + "command": "", + "addpay": "payload", + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 1090, + "y": 440, + "wires": [ + [ + "3493a1a21d11eab7" + ], + [ + "6949a7f7b06e7070" + ], + [ + "90ed4f84f5e592ba", + "05b15b7858e7cbca" + ] + ] + }, + { + "id": "191a64ffb1ef6aac", + "type": "link in", + "z": "1d5c7046712ea9d2", + "name": "Control In", + "links": [ + "bb55ecc1c7a7da19" + ], + "x": 825, + "y": 340, + "wires": [ + [ + "89b46799e22ef74c", + "3e098904e91c0153" + ] + ] + }, + { + "id": "6b7e442910d1d689", + "type": "function", + "z": "1d5c7046712ea9d2", + "name": "Restart Daemons", + "func": "const daemons = [\"adsbcot\", \"lincot\"];\nlet daemon\nfor (daemon of daemons) {\n node.send({ \"payload\": daemon})\n}", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 270, + "y": 480, + "wires": [ + [ + "384961823b4116f8" + ] + ] + }, + { + "id": "af90dbace757338b", + "type": "link in", + "z": "1d5c7046712ea9d2", + "name": "Control systemctl In", + "links": [ + "7ec81fe075691fa0" + ], + "x": 145, + "y": 480, + "wires": [ + [ + "6b7e442910d1d689" + ] + ] + }, + { + "id": "05b15b7858e7cbca", + "type": "link out", + "z": "1d5c7046712ea9d2", + "name": "Exec Out", + "mode": "link", + "links": [ + "4317408c7b784c0b" + ], + "x": 1205, + "y": 280, + "wires": [] + }, + { + "id": "37f5c4d1bb24f9e6", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart readsb", + "group": "f9087e66bb4cd9b2", + "order": 17, + "width": 3, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "readsb", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 340, + "y": 780, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "ed16625464077060", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable readsb", + "group": "f9087e66bb4cd9b2", + "order": 16, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "readsb", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 340, + "y": 740, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "7a51c3912e23af57", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable readsb", + "group": "f9087e66bb4cd9b2", + "order": 18, + "width": 3, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "readsb", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 340, + "y": 700, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "ec8563d3c093ce78", + "type": "function", + "z": "1d5c7046712ea9d2", + "name": "Set CMDS", + "func": "let cmds = \"\"\n\nswitch (msg.topic) {\n case \"enable\":\n cmds = [\"enable\", \"start\"]\n break\n case \"disable\":\n cmds = [\"disable\", \"stop\"]\n break\n case \"restart\":\n cmds = [\"restart\"]\n break\n default:\n break\n}\n\n\nmsg.cmds = cmds\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 570, + "y": 1040, + "wires": [ + [ + "892008ebaff339b8" + ] + ] + }, + { + "id": "8c1bc2c88f0deda1", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart Node-RED", + "group": "f9087e66bb4cd9b2", + "order": 25, + "width": 4, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "nodered", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 230, + "y": 1120, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "f752b25886f124fc", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable Node-RED", + "group": "f9087e66bb4cd9b2", + "order": 24, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "nodered", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 230, + "y": 1200, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "4c6c8944f810f549", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable Node-RED", + "group": "f9087e66bb4cd9b2", + "order": 26, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "nodered", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 230, + "y": 1160, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "49dd21993eb40575", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart lincot", + "group": "f9087e66bb4cd9b2", + "order": 29, + "width": 4, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "lincot", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 260, + "y": 1280, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "1705375d70d3114e", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable lincot", + "group": "f9087e66bb4cd9b2", + "order": 28, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "lincot", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 260, + "y": 1360, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "d7a8d6efef1f9e28", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable lincot", + "group": "f9087e66bb4cd9b2", + "order": 30, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "lincot", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 260, + "y": 1320, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "b9352e86c36440c2", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart gpsd", + "group": "f9087e66bb4cd9b2", + "order": 33, + "width": 4, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "gpsd", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 330, + "y": 1420, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "5924d9e81efa421c", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable gpsd", + "group": "f9087e66bb4cd9b2", + "order": 32, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "gpsd", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 330, + "y": 1500, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "0b1ad5c1909d96d3", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable gpsd", + "group": "f9087e66bb4cd9b2", + "order": 34, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "gpsd", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 330, + "y": 1460, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "e8d964e7b344a009", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart aiscot", + "group": "f9087e66bb4cd9b2", + "order": 41, + "width": 4, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "aiscot", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 380, + "y": 1600, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "cdf495d24dca37ad", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable aiscot", + "group": "f9087e66bb4cd9b2", + "order": 40, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "aiscot", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 380, + "y": 1680, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "b616c13f08bb9dc2", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable aiscot", + "group": "f9087e66bb4cd9b2", + "order": 42, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "aiscot", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 380, + "y": 1640, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "d3d073a637fa7533", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Restart dronecot", + "group": "f9087e66bb4cd9b2", + "order": 45, + "width": 4, + "height": 1, + "passthru": false, + "label": "Restart", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dronecot", + "payloadType": "str", + "topic": "restart", + "topicType": "str", + "x": 610, + "y": 1400, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "aec366735b90c72c", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Disable dronecot", + "group": "f9087e66bb4cd9b2", + "order": 44, + "width": 2, + "height": 1, + "passthru": false, + "label": "Disable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dronecot", + "payloadType": "str", + "topic": "disable", + "topicType": "str", + "x": 610, + "y": 1480, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "a8563af155324cda", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "Enable dronecot", + "group": "f9087e66bb4cd9b2", + "order": 46, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "dronecot", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 610, + "y": 1440, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "179f0beec75125b2", + "type": "ui_button", + "z": "1d5c7046712ea9d2", + "name": "WiFi Enable", + "group": "f9087e66bb4cd9b2", + "order": 8, + "width": 4, + "height": 1, + "passthru": false, + "label": "Enable", + "tooltip": "", + "color": "black", + "bgcolor": "white", + "className": "", + "icon": "", + "payload": "comitup", + "payloadType": "str", + "topic": "enable", + "topicType": "str", + "x": 590, + "y": 1540, + "wires": [ + [ + "ec8563d3c093ce78" + ] + ] + }, + { + "id": "095368571cbf1fcf", + "type": "ui_chart", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "name": "Current Aircraft", + "group": "fa4e075e1fa30638", + "order": 14, + "width": 10, + "height": 5, + "label": "Current ADS-B Aircraft", + "chartType": "line", + "legend": "false", + "xformat": "HH:mm:ss", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "", + "ymax": "", + "removeOlder": 1, + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "useUTC": true, + "colors": [ + "#1f77b4", + "#aec7e8", + "#ff7f0e", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "outputs": 1, + "useDifferentColor": false, + "className": "", + "x": 460, + "y": 100, + "wires": [ + [] + ] + }, + { + "id": "c82e38d047199cb5", + "type": "function", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "name": "Current Aircraft Count", + "func": "let pl = msg.payload;\n\nlet payloads = [\n { payload: pl.aircraft.length },\n { payload: pl.messages },\n { payload: pl.now }\n]\n\nreturn payloads;", + "outputs": 3, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 240, + "y": 120, + "wires": [ + [ + "095368571cbf1fcf", + "7750039932acdcc7" + ], + [ + "16d10d070ec070d9" + ], + [ + "8db81499fdb5170a" + ] + ] + }, + { + "id": "16d10d070ec070d9", + "type": "ui_text", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "group": "fa4e075e1fa30638", + "order": 12, + "width": 5, + "height": 1, + "name": "", + "label": "Total ADS-B Messages", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 490, + "y": 140, + "wires": [] + }, + { + "id": "2653a0b0.26d638", + "type": "ui_gauge", + "z": "94cf869050128770", + "name": "", + "group": "1890881e.83819", + "order": 2, + "width": 0, + "height": 0, + "gtype": "gage", + "title": "CPU Temperature", + "label": "C", + "format": "{{value}}", + "min": 0, + "max": "100", + "colors": [ + "#00b500", + "#e6e600", + "#ca3838" + ], + "x": 695.5, + "y": 851.75, + "wires": [] + }, + { + "id": "fba68adf.14e13", + "type": "exec", + "z": "94cf869050128770", + "command": "vcgencmd measure_temp", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "name": "RPi Temp.", + "x": 315.5, + "y": 871.75, + "wires": [ + [ + "fa5b499.e176cb8" + ], + [], + [] + ] + }, + { + "id": "7c8379de.068868", + "type": "inject", + "z": "94cf869050128770", + "name": "", + "props": [ + { + "p": "payload", + "v": "", + "vt": "date" + }, + { + "p": "topic", + "v": "", + "vt": "str" + } + ], + "repeat": "10", + "crontab": "", + "once": false, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 110, + "y": 900, + "wires": [ + [ + "fba68adf.14e13", + "972ece2a.3dbe8", + "6242be99.26ac88" + ] + ] + }, + { + "id": "fa5b499.e176cb8", + "type": "function", + "z": "94cf869050128770", + "name": "", + "func": "str = msg.payload\nmsg.payload = str.substring(5,9);\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 485.5, + "y": 851.75, + "wires": [ + [ + "2653a0b0.26d638", + "28b64a2c.b32116" + ] + ] + }, + { + "id": "28b64a2c.b32116", + "type": "ui_chart", + "z": "94cf869050128770", + "name": "CPU Temperature", + "group": "1890881e.83819", + "order": 3, + "width": 0, + "height": 0, + "label": "CPU Temperature", + "chartType": "line", + "legend": "false", + "xformat": "HH:mm:ss", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "", + "ymax": "", + "removeOlder": "24", + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "useUTC": false, + "colors": [ + "#1f77b4", + "#aec7e8", + "#ff7f0e", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "outputs": 1, + "useDifferentColor": false, + "className": "", + "x": 695.5, + "y": 891.75, + "wires": [ + [] + ] + }, + { + "id": "972ece2a.3dbe8", + "type": "exec", + "z": "94cf869050128770", + "command": "top -d 0.5 -b -n2 | grep \"Cpu(s)\"| awk '{print $2 + $4}'", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "CPU Load", + "x": 315.5, + "y": 931.75, + "wires": [ + [ + "a5da1eb0f58fe89a" + ], + [], + [] + ] + }, + { + "id": "6242be99.26ac88", + "type": "exec", + "z": "94cf869050128770", + "command": "free | grep Mem | awk '{print 100*($3+$5+$6)/$2}'", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "Free Memory", + "x": 315.5, + "y": 991.75, + "wires": [ + [ + "77573ff2f632057f" + ], + [], + [] + ] + }, + { + "id": "b9372186.ed1a5", + "type": "ui_gauge", + "z": "94cf869050128770", + "name": "", + "group": "1890881e.83819", + "order": 1, + "width": 0, + "height": 0, + "gtype": "gage", + "title": "Processor", + "label": "CPU", + "format": "{{value}}", + "min": 0, + "max": "100", + "colors": [ + "#00b500", + "#e6e600", + "#ca3838" + ], + "x": 665.5, + "y": 931.75, + "wires": [] + }, + { + "id": "9b301b09.8c0468", + "type": "ui_gauge", + "z": "94cf869050128770", + "name": "Memory", + "group": "9a96a8b1.92db78", + "order": 1, + "width": 0, + "height": 0, + "gtype": "gage", + "title": "Memory", + "label": "RAM", + "format": "{{value}}", + "min": 0, + "max": "100", + "colors": [ + "#00b500", + "#e6e600", + "#ca3838" + ], + "seg1": "", + "seg2": "", + "diff": false, + "className": "", + "x": 625.5, + "y": 991.75, + "wires": [] + }, + { + "id": "270f61f0.9af05e", + "type": "exec", + "z": "94cf869050128770", + "command": "df -h", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "name": "Disk Usage", + "x": 315.5, + "y": 1131.75, + "wires": [ + [ + "d70b7556.a0a9e" + ], + [], + [] + ] + }, + { + "id": "7ca6ecb.7512014", + "type": "ui_gauge", + "z": "94cf869050128770", + "name": "", + "group": "72fc319.cc425d", + "order": 1, + "width": 0, + "height": 0, + "gtype": "gage", + "title": "Disk", + "label": "Usage", + "format": "{{value}}", + "min": 0, + "max": "100", + "colors": [ + "#00b500", + "#e6e600", + "#ca3838" + ], + "x": 635.5, + "y": 1131.75, + "wires": [] + }, + { + "id": "d70b7556.a0a9e", + "type": "function", + "z": "94cf869050128770", + "name": "", + "func": "var re = /([0-9]{2})%/\nvar idx = msg.payload.search(re);\nvar str = msg.payload;\nif (idx >=0) {\n str = msg.payload.substring(idx, idx + 2);\n}\nmsg.payload = str;\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 495.5, + "y": 1131.75, + "wires": [ + [ + "7ca6ecb.7512014" + ] + ] + }, + { + "id": "59103f97.07fed", + "type": "inject", + "z": "94cf869050128770", + "name": "", + "repeat": "60", + "crontab": "", + "once": false, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 115.5, + "y": 1131.75, + "wires": [ + [ + "270f61f0.9af05e" + ] + ] + }, + { + "id": "77573ff2f632057f", + "type": "function", + "z": "94cf869050128770", + "name": "function 1", + "func": "msg.payload = parseFloat(msg.payload).toFixed(1)\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 485.5, + "y": 991.75, + "wires": [ + [ + "9b301b09.8c0468" + ] + ] + }, + { + "id": "a5da1eb0f58fe89a", + "type": "function", + "z": "94cf869050128770", + "name": "Average CPUs", + "func": "const pl = msg.payload;\n\nconst loads = pl.split(\"\\n\").filter(n => n)\n\nvar total = 0;\nfor (var i = 0; i < loads.length; i++) {\n total += loads[i];\n}\nvar avg = total / loads.length;\n\n\nmsg.payload = loads;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 505.5, + "y": 931.75, + "wires": [ + [ + "b9372186.ed1a5" + ] + ] + }, + { + "id": "20787a00729ffe5f", + "type": "link in", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "name": "Dashboard In", + "links": [ + "64fa2c00f63bdd53" + ], + "x": 105, + "y": 120, + "wires": [ + [ + "c82e38d047199cb5" + ] + ] + }, + { + "id": "c1b4f4996f5aa122", + "type": "comment", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "name": "ADS-B Dashboard", + "info": "", + "x": 150, + "y": 60, + "wires": [] + }, + { + "id": "7750039932acdcc7", + "type": "ui_text", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "group": "fa4e075e1fa30638", + "order": 11, + "width": 5, + "height": 1, + "name": "Current Tracks", + "label": "Current Tracks", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 460, + "y": 60, + "wires": [] + }, + { + "id": "43b182ea252f059a", + "type": "inject", + "z": "94cf869050128770", + "name": "", + "props": [], + "repeat": "300", + "crontab": "", + "once": true, + "onceDelay": "30", + "topic": "", + "x": 110, + "y": 1380, + "wires": [ + [ + "a8c763426a388421" + ] + ] + }, + { + "id": "a8c763426a388421", + "type": "exec", + "z": "94cf869050128770", + "command": "gpsctl", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "5", + "winHide": false, + "name": "gpsctl", + "x": 290, + "y": 1380, + "wires": [ + [ + "6ffc305ab7e20ec7", + "5fad15ef4b61bca7" + ], + [ + "5fad15ef4b61bca7" + ], + [ + "5fad15ef4b61bca7" + ] + ] + }, + { + "id": "6ffc305ab7e20ec7", + "type": "ui_text", + "z": "94cf869050128770", + "group": "fa4e075e1fa30638", + "order": 8, + "width": 10, + "height": 1, + "name": "GPSCTL", + "label": "GPS Device:", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 460, + "y": 1360, + "wires": [] + }, + { + "id": "73eb77cde2c7a709", + "type": "exec", + "z": "94cf869050128770", + "g": "fb90e60944764ed9", + "command": "gpspipe --json -n 5", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "30", + "winHide": false, + "name": "gpspipe", + "x": 160, + "y": 480, + "wires": [ + [ + "7c69f96954e99a9b" + ], + [], + [] + ] + }, + { + "id": "69bd079907c39f3c", + "type": "inject", + "z": "94cf869050128770", + "g": "fb90e60944764ed9", + "name": "", + "props": [], + "repeat": "30", + "crontab": "", + "once": true, + "onceDelay": "", + "topic": "", + "x": 130, + "y": 420, + "wires": [ + [ + "73eb77cde2c7a709" + ] + ] + }, + { + "id": "de2c209dbe934060", + "type": "json", + "z": "94cf869050128770", + "g": "fb90e60944764ed9", + "name": "", + "property": "payload", + "action": "", + "pretty": false, + "x": 310, + "y": 500, + "wires": [ + [ + "f20627a1cbc79171" + ] + ] + }, + { + "id": "1190f05a50aad89c", + "type": "function", + "z": "94cf869050128770", + "g": "fb90e60944764ed9", + "name": "GPS Mode Lookup", + "func": "// https://gpsd.gitlab.io/gpsd/gpsd_json.html\n\nconst pl = msg.payload;\n\nmsg.payload = \"Invalid Mode\";\n\nswitch (parseInt(pl.mode)) { \n case 0:\n msg.payload = \"UNKNOWN\";\n break;\n case 1:\n msg.payload = \"NO FIX\";\n break;\n case 2:\n msg.payload = \"2D\";\n break;\n case 3:\n msg.payload = \"3D\";\n break;\n default:\n msg.payload = \"Invalid Mode\";\n break;\n}\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 510, + "y": 500, + "wires": [ + [ + "43958e20b7e848a3" + ] + ] + }, + { + "id": "24d11b12327e6147", + "type": "exec", + "z": "94cf869050128770", + "g": "75d810e2c34e3c4f", + "command": "rtl_test", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "5", + "winHide": false, + "name": "rtl_test", + "x": 250, + "y": 300, + "wires": [ + [ + "c694287e0ecfdb11" + ], + [ + "c694287e0ecfdb11" + ], + [] + ] + }, + { + "id": "b36b3af7a720fa09", + "type": "inject", + "z": "94cf869050128770", + "g": "75d810e2c34e3c4f", + "name": "30s", + "props": [], + "repeat": "30", + "crontab": "", + "once": true, + "onceDelay": "", + "topic": "", + "x": 130, + "y": 300, + "wires": [ + [ + "24d11b12327e6147" + ] + ] + }, + { + "id": "c694287e0ecfdb11", + "type": "function", + "z": "94cf869050128770", + "g": "75d810e2c34e3c4f", + "name": "SDR List", + "func": "// 2>&1|grep -A2 Found|tail -n 2\n\n/*\n * This function takes in an input string and a search term. \n * \n * It then splits the input string into an array of lines, \n * finds the index of the line that contains the search term, \n * and returns the next two lines after the matched line, \n * separated by newlines. \n * \n * If the search term is not found or if there are not enough \n * lines after the match, it returns null.\n*/\nfunction grepA2(inputString, searchTerm) {\n // Split the input string by newlines\n const lines = inputString.split('\\n');\n // Find the index of the matched line\n const index = lines.findIndex(line => line.includes(searchTerm));\n\n if (index !== -1 && index < lines.length - 2) {\n // Return the next two lines after the matched line\n return lines.slice(index + 1, index + 3).join('\\n');\n } else {\n // Return null if the searchTerm is not found or if there are not enough lines after the match\n return null;\n }\n}\n\nlet pl = grepA2(msg.payload, \"Found\");\n\nif (typeof pl !== undefined && pl !== null) {\n msg.payload = pl.split(\"\\n\");\n return msg;\n}\n", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 400, + "y": 300, + "wires": [ + [ + "ab8919275dc5a1bb", + "65b80260e6a12016" + ] + ] + }, + { + "id": "ab8919275dc5a1bb", + "type": "ui_text", + "z": "94cf869050128770", + "g": "75d810e2c34e3c4f", + "group": "fa4e075e1fa30638", + "order": 6, + "width": 10, + "height": 1, + "name": "SDR 1", + "label": "SDR 1:", + "format": "{{msg.payload[0]}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 550, + "y": 280, + "wires": [] + }, + { + "id": "65b80260e6a12016", + "type": "ui_text", + "z": "94cf869050128770", + "g": "75d810e2c34e3c4f", + "group": "fa4e075e1fa30638", + "order": 7, + "width": 10, + "height": 1, + "name": "SDR 2", + "label": "SDR 2:", + "format": "{{msg.payload[1]}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 550, + "y": 320, + "wires": [] + }, + { + "id": "5dd1990becedf2b0", + "type": "inject", + "z": "94cf869050128770", + "name": "", + "props": [], + "repeat": "300", + "crontab": "", + "once": true, + "onceDelay": "", + "topic": "", + "x": 110, + "y": 1220, + "wires": [ + [ + "b1397733b1721b33" + ] + ] + }, + { + "id": "b1397733b1721b33", + "type": "exec", + "z": "94cf869050128770", + "command": "lsusb|sort", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 300, + "y": 1220, + "wires": [ + [ + "3261a8dfedfae96d" + ], + [], + [] + ] + }, + { + "id": "3261a8dfedfae96d", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "USB Devices", + "order": 1, + "width": 20, + "height": 4, + "format": "USB Devices\n\n
", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 470, + "y": 1200, + "wires": [ + [] + ] + }, + { + "id": "ca3080fa414c682a", + "type": "inject", + "z": "94cf869050128770", + "name": "", + "props": [], + "repeat": "300", + "crontab": "", + "once": true, + "onceDelay": "", + "topic": "", + "x": 110, + "y": 1280, + "wires": [ + [ + "b8c830dc7384cd97" + ] + ] + }, + { + "id": "b8c830dc7384cd97", + "type": "exec", + "z": "94cf869050128770", + "command": "dmesg|egrep -vi '(^$)'|tail -10", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 360, + "y": 1280, + "wires": [ + [ + "a37cfd5ee5320ebf" + ], + [], + [] + ] + }, + { + "id": "a37cfd5ee5320ebf", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "dmesg Tail", + "order": 3, + "width": 20, + "height": 6, + "format": "dmesg Tail\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 610, + "y": 1260, + "wires": [ + [] + ] + }, + { + "id": "43958e20b7e848a3", + "type": "ui_text", + "z": "94cf869050128770", + "g": "fb90e60944764ed9", + "group": "fa4e075e1fa30638", + "order": 9, + "width": 10, + "height": 1, + "name": "GPS Fix?", + "label": "GPS Mode/Fix:", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 640, + "y": 460, + "wires": [] + }, + { + "id": "67c1aa629a2e95af", + "type": "exec", + "z": "94cf869050128770", + "g": "a1d4fe25968a5368", + "command": "/usr/local/sbin/get_throttled.sh", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 790, + "y": 620, + "wires": [ + [ + "4f64ec7db13ee424" + ], + [], + [] + ] + }, + { + "id": "4f64ec7db13ee424", + "type": "ui_template", + "z": "94cf869050128770", + "g": "a1d4fe25968a5368", + "group": "fa4e075e1fa30638", + "name": "Throttle Status", + "order": 10, + "width": 10, + "height": 3, + "format": "Throttle Status\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1020, + "y": 600, + "wires": [ + [] + ] + }, + { + "id": "4338acd2934924cc", + "type": "inject", + "z": "94cf869050128770", + "g": "a1d4fe25968a5368", + "name": "", + "props": [], + "repeat": "300", + "crontab": "", + "once": true, + "onceDelay": "", + "topic": "", + "x": 590, + "y": 620, + "wires": [ + [ + "67c1aa629a2e95af" + ] + ] + }, + { + "id": "16419a36256c9583", + "type": "inject", + "z": "94cf869050128770", + "g": "e3b3a9c137f6b1a8", + "name": "1m", + "props": [], + "repeat": "60", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "", + "x": 130, + "y": 620, + "wires": [ + [ + "b1d1259dd556c68a" + ] + ] + }, + { + "id": "b1d1259dd556c68a", + "type": "exec", + "z": "94cf869050128770", + "g": "e3b3a9c137f6b1a8", + "command": "uptime", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 250, + "y": 620, + "wires": [ + [ + "267687b40c52261e" + ], + [], + [] + ] + }, + { + "id": "267687b40c52261e", + "type": "ui_text", + "z": "94cf869050128770", + "g": "e3b3a9c137f6b1a8", + "group": "fa4e075e1fa30638", + "order": 5, + "width": 10, + "height": 1, + "name": "", + "label": "Uptime: ", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 400, + "y": 620, + "wires": [] + }, + { + "id": "4dfeafb5656bdb04", + "type": "template", + "z": "94cf869050128770", + "name": "Services", + "field": "payload", + "fieldType": "msg", + "format": "handlebars", + "syntax": "mustache", + "template": "[\n \"adsbcot\",\n \"dump1090-fa\",\n \"dump978-fa\",\n \"comitup\",\n \"lincot\",\n \"nodered\",\n \"gpsd\",\n \"readsb\",\n \"aiscot\",\n \"dronecot\",\n \"skyaware\",\n \"tar1090\"\n]", + "output": "str", + "x": 240, + "y": 1960, + "wires": [ + [ + "b4b0c83c63e4b4ff" + ] + ] + }, + { + "id": "285ece519bd3976f", + "type": "inject", + "z": "94cf869050128770", + "name": "30s", + "props": [], + "repeat": "30", + "crontab": "", + "once": true, + "onceDelay": "", + "topic": "", + "x": 90, + "y": 2000, + "wires": [ + [ + "4dfeafb5656bdb04" + ] + ] + }, + { + "id": "e93dc524c636e92d", + "type": "split", + "z": "94cf869050128770", + "name": "", + "splt": "\\n", + "spltType": "str", + "arraySplt": 1, + "arraySpltType": "len", + "stream": false, + "addname": "", + "x": 410, + "y": 1960, + "wires": [ + [ + "88070f84d9e74504" + ] + ] + }, + { + "id": "b4b0c83c63e4b4ff", + "type": "json", + "z": "94cf869050128770", + "name": "", + "property": "payload", + "action": "", + "pretty": false, + "x": 250, + "y": 2000, + "wires": [ + [ + "e93dc524c636e92d" + ] + ] + }, + { + "id": "88070f84d9e74504", + "type": "change", + "z": "94cf869050128770", + "name": "Set service", + "rules": [ + { + "t": "set", + "p": "service", + "pt": "msg", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 430, + "y": 2000, + "wires": [ + [ + "668b9fe6695a20aa" + ] + ] + }, + { + "id": "668b9fe6695a20aa", + "type": "exec", + "z": "94cf869050128770", + "command": "systemctl status", + "addpay": "payload", + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 420, + "y": 2200, + "wires": [ + [ + "4f78a58561400bb1" + ], + [], + [ + "37f21d650f5fda44" + ] + ] + }, + { + "id": "fb5bade2bfe9eabc", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "comitup Status", + "order": 4, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1100, + "y": 1860, + "wires": [ + [] + ] + }, + { + "id": "8fb99c80179472f1", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 5, + "width": 10, + "height": 1, + "name": "WiFi Status", + "label": " WiFi", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1030, + "y": 2320, + "wires": [] + }, + { + "id": "37f21d650f5fda44", + "type": "function", + "z": "94cf869050128770", + "name": "Set HTML Payload", + "func": "const pl = msg.payload;\nconst code = pl.code;\n\nswitch (code) {\n case 0:\n msg.payload = `OK (${code})`;\n msg.icon = \"fa-check\"\n msg.color = \"green\"\n break;\n case 3:\n msg.payload = `Disabled (${code})`;\n msg.icon = \"fa-exclamation\"\n msg.color = \"orange\"\n break;\n default:\n msg.payload = `NOT OK (${code})`\n msg.icon = \"fa-times-circle\"\n msg.color = \"red\"\n break;\n}\n\nmsg.payload = ` ${msg.payload}`\n\nreturn msg;\n", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 630, + "y": 2440, + "wires": [ + [ + "07a741936395d2ef" + ] + ] + }, + { + "id": "4f78a58561400bb1", + "type": "switch", + "z": "94cf869050128770", + "name": "", + "property": "service", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "comitup", + "vt": "str" + }, + { + "t": "eq", + "v": "adsbcot", + "vt": "str" + }, + { + "t": "eq", + "v": "dump1090-fa", + "vt": "str" + }, + { + "t": "eq", + "v": "dump978-fa", + "vt": "str" + }, + { + "t": "eq", + "v": "nodered", + "vt": "str" + }, + { + "t": "eq", + "v": "lincot", + "vt": "str" + }, + { + "t": "eq", + "v": "gpsd", + "vt": "str" + }, + { + "t": "eq", + "v": "readsb", + "vt": "str" + }, + { + "t": "eq", + "v": "aiscot", + "vt": "str" + }, + { + "t": "eq", + "v": "dronecot", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 10, + "x": 870, + "y": 2000, + "wires": [ + [ + "fb5bade2bfe9eabc" + ], + [ + "cbdfeead972e8093" + ], + [ + "b885c5ed4275cf9d" + ], + [ + "3519c43830c4630c" + ], + [ + "cc9530f61b75f0a5" + ], + [ + "ef95bf31be708221" + ], + [ + "281c50f4b51a5007" + ], + [ + "a7b69d374027ce65" + ], + [ + "16a7f78a221b3c35" + ], + [ + "6747ef8e64eadae2" + ] + ] + }, + { + "id": "07a741936395d2ef", + "type": "switch", + "z": "94cf869050128770", + "name": "", + "property": "service", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "comitup", + "vt": "str" + }, + { + "t": "eq", + "v": "adsbcot", + "vt": "str" + }, + { + "t": "eq", + "v": "dump1090-fa", + "vt": "str" + }, + { + "t": "eq", + "v": "dump978-fa", + "vt": "str" + }, + { + "t": "eq", + "v": "nodered", + "vt": "str" + }, + { + "t": "eq", + "v": "lincot", + "vt": "str" + }, + { + "t": "eq", + "v": "gpsd", + "vt": "str" + }, + { + "t": "eq", + "v": "readsb", + "vt": "str" + }, + { + "t": "eq", + "v": "aiscot", + "vt": "str" + }, + { + "t": "eq", + "v": "dronecot", + "vt": "str" + }, + { + "t": "eq", + "v": "skyaware", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 11, + "x": 810, + "y": 2440, + "wires": [ + [ + "8fb99c80179472f1" + ], + [ + "385cbd3192ee530c" + ], + [ + "5775a3037267290d" + ], + [ + "1350c123dc081083" + ], + [ + "61e60948ad456327" + ], + [ + "95220eabc9aa718f" + ], + [ + "bad2ad8d9170ec43" + ], + [ + "8130292204e4ea17" + ], + [ + "8dd2023c1e89fb63" + ], + [ + "777555c9c8d0b55f" + ], + [] + ] + }, + { + "id": "cbdfeead972e8093", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "adsbcot Status", + "order": 5, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1110, + "y": 1900, + "wires": [ + [] + ] + }, + { + "id": "385cbd3192ee530c", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 9, + "width": 10, + "height": 1, + "name": "Aircraft to TAK Gateway (adsbcot)", + "label": "Aircraft to TAK Gateway", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1110, + "y": 2360, + "wires": [] + }, + { + "id": "5775a3037267290d", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 19, + "width": 8, + "height": 1, + "name": "F/A ADS-B Decoder (dump1090-fa)", + "label": "dump1090-fa (flightaware)", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1100, + "y": 2400, + "wires": [] + }, + { + "id": "1350c123dc081083", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 35, + "width": 0, + "height": 0, + "name": "F/A UAT Decoder (dump978-fa)", + "label": "Flightaware UAT Decoder", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1090, + "y": 2440, + "wires": [] + }, + { + "id": "61e60948ad456327", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 23, + "width": 0, + "height": 0, + "name": "Dashboard (Node-RED)", + "label": "Dashboards (Node-RED)", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1070, + "y": 2480, + "wires": [] + }, + { + "id": "b885c5ed4275cf9d", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "dump1090-fa Status", + "order": 6, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1120, + "y": 1940, + "wires": [ + [] + ] + }, + { + "id": "3519c43830c4630c", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "dump978-fa Status", + "order": 7, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1110, + "y": 1980, + "wires": [ + [] + ] + }, + { + "id": "cc9530f61b75f0a5", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "Node-RED Status", + "order": 8, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1110, + "y": 2020, + "wires": [ + [] + ] + }, + { + "id": "ef95bf31be708221", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "lincot Status", + "order": 9, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1100, + "y": 2060, + "wires": [ + [] + ] + }, + { + "id": "95220eabc9aa718f", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 27, + "width": 0, + "height": 0, + "name": "Device TAK Beacon", + "label": "Device TAK Beacon", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1050, + "y": 2520, + "wires": [] + }, + { + "id": "281c50f4b51a5007", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "gpsd Status", + "order": 10, + "width": 20, + "height": 4, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1090, + "y": 2100, + "wires": [ + [] + ] + }, + { + "id": "bad2ad8d9170ec43", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 31, + "width": 0, + "height": 0, + "name": "GPS", + "label": "GPS", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1010, + "y": 2560, + "wires": [] + }, + { + "id": "4317408c7b784c0b", + "type": "link in", + "z": "94cf869050128770", + "name": "Dashboard Status In", + "links": [ + "05b15b7858e7cbca" + ], + "x": 125, + "y": 1960, + "wires": [ + [ + "4dfeafb5656bdb04" + ] + ] + }, + { + "id": "eba6db50839b1dd3", + "type": "inject", + "z": "94cf869050128770", + "name": "", + "props": [], + "repeat": "30", + "crontab": "", + "once": true, + "onceDelay": "0.5", + "topic": "", + "x": 130, + "y": 1560, + "wires": [ + [ + "fe13b1777995e549" + ] + ] + }, + { + "id": "fe13b1777995e549", + "type": "exec", + "z": "94cf869050128770", + "command": "ip -json addr", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 310, + "y": 1560, + "wires": [ + [ + "a8c5db14c632752a" + ], + [], + [] + ] + }, + { + "id": "a8c5db14c632752a", + "type": "json", + "z": "94cf869050128770", + "name": "", + "property": "payload", + "action": "", + "pretty": false, + "x": 450, + "y": 1560, + "wires": [ + [ + "96eaefd7b076e52f" + ] + ] + }, + { + "id": "2273e07e235feb5f", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "IP Interfaces", + "order": 2, + "width": 5, + "height": 4, + "format": "IP Interfaces\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 730, + "y": 1560, + "wires": [ + [] + ] + }, + { + "id": "96eaefd7b076e52f", + "type": "function", + "z": "94cf869050128770", + "name": "Format", + "func": "const pl = msg.payload\n\nconst lo0 = pl[0]\nconst eth0 = pl[1]\nconst wlan0 = pl[2]\n\nif (eth0.addr_info.length > 0) {\n eth0.ip = eth0.addr_info[0].local || \"[NO IP]\"\n}\n\nif (wlan0.addr_info.length > 0) {\n wlan0.ip = wlan0.addr_info[0].local || \"[NO IP]\"\n}\n\nmsg.payload = `${eth0.ifname}: ${eth0.ip}\\n\n${wlan0.ifname}: ${wlan0.ip}`;\n\nreturn msg;\n\n", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 580, + "y": 1560, + "wires": [ + [ + "2273e07e235feb5f", + "08b0c289b467c651" + ] + ] + }, + { + "id": "08b0c289b467c651", + "type": "ui_template", + "z": "94cf869050128770", + "group": "fa4e075e1fa30638", + "name": "IP Interfaces", + "order": 4, + "width": 5, + "height": 2, + "format": "IP Interfaces\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 730, + "y": 1600, + "wires": [ + [] + ] + }, + { + "id": "9f8119755cf73778", + "type": "qrcode-generator", + "z": "94cf869050128770", + "g": "d34772b1b10233f2", + "name": "", + "qrtype": "wifi2qr", + "text2qrText": "", + "ssid": "", + "hiddenssid": false, + "wifitype": "", + "phonenum": "", + "smsphonenum": "", + "smstext": "", + "mailto": "", + "mailsubject": "", + "mailbody": "", + "latitude": "", + "longitude": "", + "colorlight": "#ffffff", + "colordark": "#000000", + "printstatus": true, + "x": 1070, + "y": 480, + "wires": [ + [ + "cbbe264f84b53680" + ] + ] + }, + { + "id": "a1642742e713d559", + "type": "link in", + "z": "94cf869050128770", + "g": "d34772b1b10233f2", + "name": "QR Code In", + "links": [ + "b104d679e8967f58" + ], + "x": 785, + "y": 480, + "wires": [ + [ + "8a9319936729c649" + ] + ] + }, + { + "id": "8a9319936729c649", + "type": "function", + "z": "94cf869050128770", + "g": "d34772b1b10233f2", + "name": "Set URL", + "func": "const pl = msg.payload\nlet nodeId = pl.match(/NODE_ID=(?[^\\n\\r]+)/).groups.nodeId\nlet ssid = `AryaOS-${nodeId.substr(-4, 4)}`\n\nlet wifiUrl = `WIFI:S:${ssid};T:;P:;H:false;`\nmsg.qrcodeinput = wifiUrl\nmsg.ssid = ssid\nreturn msg;\n", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 900, + "y": 480, + "wires": [ + [ + "9f8119755cf73778" + ] + ] + }, + { + "id": "cbbe264f84b53680", + "type": "ui_template", + "z": "94cf869050128770", + "g": "d34772b1b10233f2", + "group": "fa4e075e1fa30638", + "name": "QR Code", + "order": 2, + "width": 5, + "height": 4, + "format": "
Join AryaOS Wifi: \n
{{msg.ssid}}
", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1240, + "y": 480, + "wires": [ + [] + ] + }, + { + "id": "a7b69d374027ce65", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "readsb Status", + "order": 11, + "width": 20, + "height": 4, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1100, + "y": 2140, + "wires": [ + [] + ] + }, + { + "id": "8130292204e4ea17", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 15, + "width": 8, + "height": 1, + "name": "ADSB/X ADS-B Decoder (readsb)", + "label": "readsb (adsbexchange)", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1100, + "y": 2600, + "wires": [] + }, + { + "id": "16a7f78a221b3c35", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "aiscot Status", + "order": 9, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1100, + "y": 2180, + "wires": [ + [] + ] + }, + { + "id": "6747ef8e64eadae2", + "type": "ui_template", + "z": "94cf869050128770", + "group": "985cb816630d7e12", + "name": "dronecot Status", + "order": 9, + "width": 20, + "height": 5, + "format": "
Status
\n
\n", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1110, + "y": 2220, + "wires": [ + [] + ] + }, + { + "id": "8dd2023c1e89fb63", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 39, + "width": 0, + "height": 0, + "name": "AIS to CoT (aiscot)", + "label": "AIS to CoT (aiscot)", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1060, + "y": 2640, + "wires": [] + }, + { + "id": "777555c9c8d0b55f", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 43, + "width": 0, + "height": 0, + "name": "Remote ID to CoT (dronecot)", + "label": "Remote ID to CoT (dronecot)", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 1090, + "y": 2680, + "wires": [] + }, + { + "id": "808f9f656a06999e", + "type": "inject", + "z": "94cf869050128770", + "g": "3de15a4313928391", + "name": "30s", + "props": [], + "repeat": "30", + "crontab": "", + "once": true, + "onceDelay": "", + "topic": "", + "x": 130, + "y": 740, + "wires": [ + [ + "b2825e8d13e21f82" + ] + ] + }, + { + "id": "b2825e8d13e21f82", + "type": "exec", + "z": "94cf869050128770", + "g": "3de15a4313928391", + "command": "docker ps", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 260, + "y": 740, + "wires": [ + [ + "d033dfa14fa3a005" + ], + [], + [] + ] + }, + { + "id": "d033dfa14fa3a005", + "type": "ui_template", + "z": "94cf869050128770", + "g": "3de15a4313928391", + "group": "985cb816630d7e12", + "name": "Docker PS", + "order": 1, + "width": 20, + "height": 4, + "format": "Docker PS\n\n
", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 410, + "y": 740, + "wires": [ + [] + ] + }, + { + "id": "ab90271f7830e67f", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 13, + "width": 10, + "height": 1, + "name": "", + "label": "Aircraft Decoder", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 620, + "y": 2660, + "wires": [] + }, + { + "id": "5cfdb012b7c10a7c", + "type": "ui_text", + "z": "94cf869050128770", + "group": "f9087e66bb4cd9b2", + "order": 14, + "width": 2, + "height": 4, + "name": "", + "label": "Mutually Exclusive (Choose One)", + "format": "", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Narrow,Nimbus Sans L,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 680, + "y": 2700, + "wires": [] + }, + { + "id": "e0d87a55d461c609", + "type": "ui_text", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "group": "fa4e075e1fa30638", + "order": 13, + "width": 10, + "height": 1, + "name": "Last Update", + "label": "Last Update (secs.)", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 590, + "y": 180, + "wires": [] + }, + { + "id": "8db81499fdb5170a", + "type": "function", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "name": "Get Delta", + "func": "let pl = msg.payload\nflow.set(\"lastUpdate\", pl)\n\n// let now = new Date(Date.now()).toISOString()\nlet now = Date.now()\nlet delta = now*1000 - (pl/1000)\n\nmsg.payload = parseInt(now/1000 - pl)\n\n\nreturn msg;\n\n", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 440, + "y": 180, + "wires": [ + [ + "e0d87a55d461c609" + ] + ] + }, + { + "id": "681d2876a7db4f51", + "type": "inject", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "name": "10s", + "props": [], + "repeat": "10", + "crontab": "", + "once": true, + "onceDelay": "5", + "topic": "", + "x": 130, + "y": 180, + "wires": [ + [ + "d85368cd75bb347e" + ] + ] + }, + { + "id": "d85368cd75bb347e", + "type": "change", + "z": "94cf869050128770", + "g": "45da34b7e4bdb957", + "name": "lastUpdate", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "lastUpdate", + "tot": "flow" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 270, + "y": 180, + "wires": [ + [ + "8db81499fdb5170a" + ] + ] + }, + { + "id": "5fad15ef4b61bca7", + "type": "debug", + "z": "94cf869050128770", + "name": "debug 30", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 460, + "y": 1400, + "wires": [] + }, + { + "id": "7c69f96954e99a9b", + "type": "split", + "z": "94cf869050128770", + "g": "fb90e60944764ed9", + "name": "", + "splt": "\\n", + "spltType": "str", + "arraySplt": 1, + "arraySpltType": "len", + "stream": false, + "addname": "", + "x": 290, + "y": 460, + "wires": [ + [ + "de2c209dbe934060" + ] + ] + }, + { + "id": "f20627a1cbc79171", + "type": "switch", + "z": "94cf869050128770", + "g": "fb90e60944764ed9", + "name": "Class", + "property": "payload.class", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "TPV", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 1, + "x": 450, + "y": 460, + "wires": [ + [ + "1190f05a50aad89c" + ] + ] + }, + { + "id": "4a87ab6388bffac2", + "type": "exec", + "z": "94cf869050128770", + "g": "1d17f399c2310113", + "command": "hostnamectl --json=pretty status", + "addpay": false, + "append": "", + "useSpawn": "", + "timer": "", + "winHide": false, + "name": "", + "x": 860, + "y": 740, + "wires": [ + [ + "5d6ab3c272199b94", + "6ee20da0ae45fefa" + ], + [], + [] + ] + }, + { + "id": "1fca29d62080fdd9", + "type": "inject", + "z": "94cf869050128770", + "g": "1d17f399c2310113", + "name": "1m", + "props": [], + "repeat": "60", + "crontab": "", + "once": true, + "onceDelay": "0.5", + "topic": "", + "x": 650, + "y": 740, + "wires": [ + [ + "4a87ab6388bffac2" + ] + ] + }, + { + "id": "5d6ab3c272199b94", + "type": "ui_template", + "z": "94cf869050128770", + "g": "1d17f399c2310113", + "group": "985cb816630d7e12", + "name": "Hostnamectl", + "order": 14, + "width": "10", + "height": "10", + "format": "Hostnamectl\n
\n
\n
\n
", + "storeOutMessages": true, + "fwdInMessages": true, + "resendOnRefresh": true, + "templateScope": "local", + "className": "", + "x": 1090, + "y": 760, + "wires": [ + [] + ] + }, + { + "id": "dc3fd8b497972cae", + "type": "ui_text", + "z": "94cf869050128770", + "g": "1d17f399c2310113", + "group": "fa4e075e1fa30638", + "order": 3, + "width": 5, + "height": 1, + "name": "Hostname", + "label": "Hostname:", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 1370, + "y": 720, + "wires": [] + }, + { + "id": "2d5d9381afea8c59", + "type": "change", + "z": "94cf869050128770", + "g": "1d17f399c2310113", + "name": "Hostname", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "payload.Hostname", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1210, + "y": 720, + "wires": [ + [ + "dc3fd8b497972cae" + ] + ] + }, + { + "id": "6ee20da0ae45fefa", + "type": "json", + "z": "94cf869050128770", + "g": "1d17f399c2310113", + "name": "", + "property": "payload", + "action": "", + "pretty": false, + "x": 1070, + "y": 720, + "wires": [ + [ + "2d5d9381afea8c59" + ] + ] + }, + { + "id": "605314ea7983779d", + "type": "worldmap", + "z": "9c4ba3cbc4bd87fa", + "name": "AryaOS Map", + "lat": "37.16611", + "lon": "-119.44944", + "zoom": "6", + "layer": "Custom", + "cluster": "", + "maxage": "", + "usermenu": "show", + "layers": "show", + "panit": "false", + "panlock": "false", + "zoomlock": "false", + "hiderightclick": "false", + "coords": "deg", + "showgrid": "true", + "showruler": "false", + "allowFileDrop": "false", + "path": "/AryaOS-map", + "overlist": "DR,CO,RA,DN,BU,RW,SN,AC,TL,HM", + "maplist": "OSMG,OSMC,OSMH,EsriC,EsriS,EsriT,EsriO,EsriDG,NatGeo,UKOS,OpTop,HB,AN,ST,SW", + "mapname": "CalFire Airbases", + "mapurl": "http://AryaOS.local/calfire_airbases/{z}/{x}/{y}.png", + "mapopt": "", + "mapwms": true, + "x": 550, + "y": 120, + "wires": [] + }, + { + "id": "828d600baacf7776", + "type": "tak2wm", + "z": "9c4ba3cbc4bd87fa", + "name": "TAK2Worldmap", + "x": 360, + "y": 120, + "wires": [ + [ + "605314ea7983779d" + ] + ] + }, + { + "id": "2934adb02aeb8158", + "type": "link in", + "z": "9c4ba3cbc4bd87fa", + "name": "Maps In", + "links": [ + "64fa2c00f63bdd53" + ], + "x": 185, + "y": 280, + "wires": [ + [ + "21fbad99be695a04" + ] + ] + }, + { + "id": "d15baed95c725e8c", + "type": "worldmap", + "z": "9c4ba3cbc4bd87fa", + "name": "AryaOS Map", + "lat": "37.16611", + "lon": "-119.44944", + "zoom": "6", + "layer": "Custom", + "cluster": "", + "maxage": "", + "usermenu": "show", + "layers": "show", + "panit": "false", + "panlock": "false", + "zoomlock": "false", + "hiderightclick": "false", + "coords": "deg", + "showgrid": "true", + "showruler": "false", + "allowFileDrop": "false", + "path": "/map", + "overlist": "DR,CO,RA,DN,BU,RW,SN,AC,TL,HM", + "maplist": "OSMG,OSMC,OSMH,EsriC,EsriS,EsriT,EsriO,EsriDG,NatGeo,UKOS,OpTop,HB,AN,ST,SW", + "mapname": "CalFire Airbases", + "mapurl": "http://AryaOS.local/calfire_airbases/{z}/{x}/{y}.png", + "mapopt": "", + "mapwms": true, + "x": 550, + "y": 340, + "wires": [] + }, + { + "id": "37a3c25966f0b291", + "type": "ui_worldmap", + "z": "9c4ba3cbc4bd87fa", + "group": "fa4e075e1fa30638", + "order": 15, + "width": 0, + "height": 0, + "name": "", + "lat": "37.16611", + "lon": "-119.44944", + "zoom": "6", + "layer": "Custom", + "cluster": "", + "maxage": "", + "usermenu": "hide", + "layers": "hide", + "panit": "false", + "panlock": "false", + "zoomlock": "false", + "hiderightclick": "true", + "coords": "none", + "showgrid": "false", + "showruler": "false", + "allowFileDrop": "false", + "path": "/ui-map", + "overlist": "DR,CO,RA,DN,HM", + "maplist": "OSMG,OSMC,EsriC,EsriS,EsriT,EsriDG,UKOS", + "mapname": "CalFire Airbases", + "mapurl": "http://AryaOS.local/calfire_airbases/{z}/{x}/{y}.png", + "mapopt": "", + "mapwms": true, + "x": 540, + "y": 280, + "wires": [] + }, + { + "id": "134821138a2acfc2", + "type": "split", + "z": "9c4ba3cbc4bd87fa", + "name": "", + "splt": "\\n", + "spltType": "str", + "arraySplt": 1, + "arraySpltType": "len", + "stream": false, + "addname": "", + "x": 130, + "y": 340, + "wires": [ + [ + "41bb4c5c359af191" + ] + ] + }, + { + "id": "21fbad99be695a04", + "type": "change", + "z": "9c4ba3cbc4bd87fa", + "name": "", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "payload.aircraft", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 300, + "y": 280, + "wires": [ + [ + "134821138a2acfc2" + ] + ] + }, + { + "id": "41bb4c5c359af191", + "type": "change", + "z": "9c4ba3cbc4bd87fa", + "name": "", + "rules": [ + { + "t": "set", + "p": "payload.name", + "pt": "msg", + "to": "payload.hex", + "tot": "msg" + }, + { + "t": "set", + "p": "payload.icon", + "pt": "msg", + "to": ":airplane:", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 300, + "y": 340, + "wires": [ + [ + "d15baed95c725e8c", + "37a3c25966f0b291" + ] + ] + }, + { + "id": "3ffffc180cc204dd", + "type": "link in", + "z": "9c4ba3cbc4bd87fa", + "name": "Maps In", + "links": [ + "089a5c1ffeafe91b" + ], + "x": 185, + "y": 120, + "wires": [ + [ + "828d600baacf7776" + ] + ] + }, + { + "id": "da9ab22b6c479887", + "type": "inject", + "z": "9c4ba3cbc4bd87fa", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 300, + "y": 560, + "wires": [ + [ + "c63bb0b151b470de" + ] + ] + }, + { + "id": "c63bb0b151b470de", + "type": "function", + "z": "9c4ba3cbc4bd87fa", + "name": "function 3", + "func": "var imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\nmsg.payload = { command: { }}\nmsg.payload.command.map = {\n overlay: \"test test\",\n url: 'https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\n bounds: imageBounds,\n opt: { opacity:0.8, attribution:\"© test test\" }\n};\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 460, + "y": 560, + "wires": [ + [ + "d15baed95c725e8c" + ] + ] + }, + { + "id": "5f6eab2d3d6ad9be", + "type": "json", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "", + "property": "payload", + "action": "", + "pretty": false, + "x": 570, + "y": 580, + "wires": [ + [ + "64fa2c00f63bdd53" + ] + ] + }, + { + "id": "64fa2c00f63bdd53", + "type": "link out", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "aircraft Out", + "mode": "link", + "links": [ + "20787a00729ffe5f", + "2934adb02aeb8158", + "24b067af1a8cbf7d" + ], + "x": 675, + "y": 540, + "wires": [] + }, + { + "id": "b068a436f07cc0bd", + "type": "watch", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "", + "files": "/run/adsb", + "recursive": "", + "x": 120, + "y": 460, + "wires": [ + [ + "b3d1b7bf5a4edba2" + ] + ] + }, + { + "id": "99dfc7e97f5f8d47", + "type": "file in", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "", + "filename": "payload", + "filenameType": "msg", + "format": "utf8", + "chunk": false, + "sendError": false, + "encoding": "none", + "allProps": false, + "x": 540, + "y": 540, + "wires": [ + [ + "5f6eab2d3d6ad9be" + ] + ] + }, + { + "id": "ba3910d8c8793f4d", + "type": "watch", + "z": "76732e91104cd622", + "name": "", + "files": "/etc/default/adsbcot", + "recursive": "", + "x": 150, + "y": 160, + "wires": [ + [ + "4e74c03efbd3034e", + "7ec81fe075691fa0" + ] + ] + }, + { + "id": "99875f9d26d1f50e", + "type": "link out", + "z": "76732e91104cd622", + "name": "adsbcot-config.txt Out", + "mode": "link", + "links": [ + "09f4ad56eb3fd133" + ], + "x": 445, + "y": 140, + "wires": [] + }, + { + "id": "5f868835544d4788", + "type": "inject", + "z": "76732e91104cd622", + "name": "/etc/default/adsbcot", + "props": [ + { + "p": "payload" + } + ], + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "", + "payload": "/etc/default/adsbcot", + "payloadType": "str", + "x": 150, + "y": 120, + "wires": [ + [ + "4e74c03efbd3034e" + ] + ] + }, + { + "id": "1948aec0539f51d7", + "type": "watch", + "z": "76732e91104cd622", + "name": "", + "files": "/etc/default/aryaos", + "recursive": "", + "x": 140, + "y": 260, + "wires": [ + [ + "11af02e57d6dc86d", + "7ec81fe075691fa0" + ] + ] + }, + { + "id": "11af02e57d6dc86d", + "type": "file in", + "z": "76732e91104cd622", + "name": "", + "filename": "payload", + "filenameType": "msg", + "format": "utf8", + "chunk": false, + "sendError": false, + "encoding": "none", + "allProps": false, + "x": 340, + "y": 260, + "wires": [ + [ + "b104d679e8967f58" + ] + ] + }, + { + "id": "b104d679e8967f58", + "type": "link out", + "z": "76732e91104cd622", + "name": "aryaos-config.txt Out", + "mode": "link", + "links": [ + "a1642742e713d559", + "09f4ad56eb3fd133" + ], + "x": 445, + "y": 240, + "wires": [] + }, + { + "id": "1bbbc97101f3d953", + "type": "inject", + "z": "76732e91104cd622", + "name": "", + "props": [ + { + "p": "payload" + } + ], + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "", + "payload": "/etc/default/aryaos", + "payloadType": "str", + "x": 140, + "y": 220, + "wires": [ + [ + "11af02e57d6dc86d" + ] + ] + }, + { + "id": "4aa3f8001760c96a", + "type": "udp in", + "z": "76732e91104cd622", + "g": "265b840ea6186ecf", + "name": "", + "iface": "", + "port": "6969", + "ipv": "udp4", + "multicast": "true", + "group": "239.2.3.1", + "datatype": "buffer", + "x": 170, + "y": 800, + "wires": [ + [ + "089a5c1ffeafe91b" + ] + ] + }, + { + "id": "e0a7e9ef71a6f0e8", + "type": "udp in", + "z": "76732e91104cd622", + "g": "265b840ea6186ecf", + "name": "", + "iface": "wlan0", + "port": "6969", + "ipv": "udp4", + "multicast": "true", + "group": "239.2.3.1", + "datatype": "buffer", + "x": 170, + "y": 860, + "wires": [ + [ + "089a5c1ffeafe91b" + ] + ] + }, + { + "id": "bd6f79df66f3f373", + "type": "udp in", + "z": "76732e91104cd622", + "g": "265b840ea6186ecf", + "name": "", + "iface": "eth0", + "port": "6969", + "ipv": "udp4", + "multicast": "true", + "group": "239.2.3.1", + "datatype": "buffer", + "x": 170, + "y": 920, + "wires": [ + [ + "089a5c1ffeafe91b" + ] + ] + }, + { + "id": "089a5c1ffeafe91b", + "type": "link out", + "z": "76732e91104cd622", + "g": "265b840ea6186ecf", + "name": "Network TAK In", + "mode": "link", + "links": [ + "7c699e7f158dc0d5", + "3ffffc180cc204dd", + "dc87e7e88303ec78" + ], + "x": 365, + "y": 860, + "wires": [] + }, + { + "id": "662e281141324f13", + "type": "watch", + "z": "76732e91104cd622", + "name": "", + "files": "tmpConf", + "recursive": "", + "x": 100, + "y": 320, + "wires": [ + [ + "18674460572a0475" + ] + ] + }, + { + "id": "8ef58d62e7fd687c", + "type": "link out", + "z": "76732e91104cd622", + "name": "tmp-XXXX-config.txt Out", + "mode": "link", + "links": [ + "df765e01751751eb" + ], + "x": 515, + "y": 320, + "wires": [] + }, + { + "id": "1aa83bf16aa07349", + "type": "file in", + "z": "76732e91104cd622", + "name": "", + "filename": "confPath", + "filenameType": "msg", + "format": "utf8", + "chunk": false, + "sendError": false, + "encoding": "none", + "allProps": false, + "x": 420, + "y": 320, + "wires": [ + [ + "8ef58d62e7fd687c" + ] + ] + }, + { + "id": "4e74c03efbd3034e", + "type": "file in", + "z": "76732e91104cd622", + "name": "", + "filename": "payload", + "filenameType": "msg", + "format": "utf8", + "chunk": false, + "sendError": false, + "encoding": "none", + "allProps": false, + "x": 340, + "y": 140, + "wires": [ + [ + "99875f9d26d1f50e" + ] + ] + }, + { + "id": "18674460572a0475", + "type": "function", + "z": "76732e91104cd622", + "name": "Set Config Path", + "func": "msg.confPath = `/home/node-red/${msg.payload}`;\n\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 260, + "y": 320, + "wires": [ + [ + "1aa83bf16aa07349" + ] + ] + }, + { + "id": "7ec81fe075691fa0", + "type": "link out", + "z": "76732e91104cd622", + "name": "Configs Out", + "mode": "link", + "links": [ + "af90dbace757338b" + ], + "x": 315, + "y": 200, + "wires": [] + }, + { + "id": "58edafa9ab997436", + "type": "link in", + "z": "76732e91104cd622", + "g": "265b840ea6186ecf", + "name": "Out to Mesh SA", + "links": [ + "ddb201c5df845268" + ], + "x": 225, + "y": 980, + "wires": [ + [ + "a5dbb71f6d17579d" + ] + ] + }, + { + "id": "a5dbb71f6d17579d", + "type": "udp out", + "z": "76732e91104cd622", + "g": "265b840ea6186ecf", + "name": "", + "addr": "239.2.3.1", + "iface": "", + "port": "6969", + "ipv": "udp4", + "outport": "", + "base64": false, + "multicast": "multi", + "x": 390, + "y": 980, + "wires": [] + }, + { + "id": "b3d1b7bf5a4edba2", + "type": "switch", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "aircraft.json?", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "/run/adsb/aircraft.json", + "vt": "str" + }, + { + "t": "eq", + "v": "/run/dump1090/aircraft.json", + "vt": "str" + }, + { + "t": "eq", + "v": "/run/dump1090-fa/aircraft.json", + "vt": "str" + }, + { + "t": "eq", + "v": "/run/dump1090-mutability/aircraft.json", + "vt": "str" + }, + { + "t": "eq", + "v": "/run/readsb/aircraft.json", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 5, + "x": 370, + "y": 540, + "wires": [ + [ + "99dfc7e97f5f8d47" + ], + [ + "99dfc7e97f5f8d47" + ], + [ + "99dfc7e97f5f8d47" + ], + [ + "99dfc7e97f5f8d47" + ], + [ + "99dfc7e97f5f8d47" + ] + ] + }, + { + "id": "ce3be08760e15920", + "type": "watch", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "", + "files": "/run/readsb", + "recursive": "", + "x": 130, + "y": 500, + "wires": [ + [ + "b3d1b7bf5a4edba2" + ] + ] + }, + { + "id": "65a40de620905bad", + "type": "watch", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "", + "files": "/run/dump1090", + "recursive": "", + "x": 140, + "y": 540, + "wires": [ + [ + "b3d1b7bf5a4edba2" + ] + ] + }, + { + "id": "573961361f4ac80b", + "type": "watch", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "", + "files": "/run/dump1090-fa", + "recursive": "", + "x": 150, + "y": 580, + "wires": [ + [ + "b3d1b7bf5a4edba2" + ] + ] + }, + { + "id": "61a91ec3d8b3f82b", + "type": "watch", + "z": "76732e91104cd622", + "g": "e165fa1b9bca5292", + "name": "", + "files": "/run/dump1090-mutability", + "recursive": "", + "x": 170, + "y": 620, + "wires": [ + [ + "b3d1b7bf5a4edba2" + ] + ] + }, + { + "id": "ede3aeb67d70b53d", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "FEED_URL", + "tooltip": "Where are we getting ADS-B tracks?", + "group": "ea29ae5e99fd702f", + "order": 1, + "width": 6, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "FEED_URL", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 610, + "y": 400, + "wires": [ + [ + "9b8548552e7fbfa4" + ] + ] + }, + { + "id": "20bb4cfcf85404b9", + "type": "function", + "z": "4fa67ac9ec0c7369", + "name": "Read Conf K/V", + "func": "const EOL = \"\\n\"; // FIXME: Should be os.EOL.\nconst pl = msg.payload;\nconst readEnvVars = () => pl.split(EOL);\n\nlet configs = flow.get(\"configs\") || {};\nlet config = configs[msg.filename]\n\n/**\n * Finds the key in conf files and returns the corresponding value\n *\n * @param {string} key Key to find\n * @returns {string|null} Value of the key\n */\nconst getConfValue = (key) => {\n // find the line that contains the key (exact match)\n const matchedLine = readEnvVars().find((/** @type {string} */ line) => line.split(\"=\")[0] === key);\n\n // split the line (delimiter is '=') and return the item at index 2\n return matchedLine !== undefined ? matchedLine.split(\"=\")[1] : null;\n};\n\n\nlet k;\n\nfor (k of Object.keys(config)) {\n let confVal = getConfValue(k)\n if (confVal) {\n config[k] = confVal\n }\n}\n\nconfigs[msg.filename] = config\nflow.set(\"configs\", configs)\n\nmsg.payload = config;\n\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 260, + "y": 360, + "wires": [ + [ + "7790857cd1c02015" + ] + ] + }, + { + "id": "7790857cd1c02015", + "type": "split", + "z": "4fa67ac9ec0c7369", + "name": "", + "splt": "\\n", + "spltType": "str", + "arraySplt": 1, + "arraySpltType": "len", + "stream": false, + "addname": "", + "x": 230, + "y": 400, + "wires": [ + [ + "b87a918bdc4910dc" + ] + ] + }, + { + "id": "b29ad47e816eeb8a", + "type": "switch", + "z": "4fa67ac9ec0c7369", + "name": "", + "property": "topic", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "NODE_ID", + "vt": "str" + }, + { + "t": "eq", + "v": "FEED_URL", + "vt": "str" + }, + { + "t": "eq", + "v": "ALT_UPPER", + "vt": "str" + }, + { + "t": "eq", + "v": "ALT_LOWER", + "vt": "str" + }, + { + "t": "eq", + "v": "COT_URL", + "vt": "str" + }, + { + "t": "eq", + "v": "PYTAK_MULTICAST_LOCAL_ADDR", + "vt": "str" + }, + { + "t": "eq", + "v": "STATIC_ALT", + "vt": "str" + }, + { + "t": "eq", + "v": "STATIC_LAT", + "vt": "str" + }, + { + "t": "eq", + "v": "STATIC_LON", + "vt": "str" + }, + { + "t": "eq", + "v": "COT_ACCESS", + "vt": "str" + }, + { + "t": "eq", + "v": "COT_STALE", + "vt": "str" + }, + { + "t": "eq", + "v": "TFR_STATE", + "vt": "str" + }, + { + "t": "eq", + "v": "TAK_PROTO", + "vt": "str" + }, + { + "t": "eq", + "v": "DEBUG", + "vt": "str" + }, + { + "t": "eq", + "v": "FTS_COMPAT", + "vt": "str" + }, + { + "t": "eq", + "v": "PYTAK_TLS_CLIENT_CERT", + "vt": "str" + }, + { + "t": "eq", + "v": "PYTAK_TLS_CLIENT_KEY", + "vt": "str" + }, + { + "t": "eq", + "v": "PYTAK_TLS_CLIENT_PASSWORD", + "vt": "str" + }, + { + "t": "eq", + "v": "PYTAK_TLS_DONT_VERIFY", + "vt": "str" + }, + { + "t": "eq", + "v": "PYTAK_TLS_DONT_CHECK_HOSTNAME", + "vt": "str" + }, + { + "t": "eq", + "v": "PYTAK_TLS_CLIENT_CAFILE", + "vt": "str" + }, + { + "t": "else" + } + ], + "checkall": "true", + "repair": false, + "outputs": 22, + "x": 370, + "y": 680, + "wires": [ + [ + "2f521601ceea7ce4" + ], + [ + "ede3aeb67d70b53d" + ], + [ + "cdd18c9e97866deb" + ], + [ + "270527e3d2b0c57e" + ], + [ + "09fb1bd40272d0af" + ], + [ + "2f25f0b243e59af1" + ], + [ + "5ad11569a70069c4" + ], + [ + "7b2591633f69cff2" + ], + [ + "f1a4b452b8ad0ff2" + ], + [ + "7e3b2c1fde544a53" + ], + [], + [ + "c12e71dc514f0676", + "fddcfcce5a422433" + ], + [], + [], + [], + [ + "436315b0476f70b0" + ], + [ + "d7ddc89a64e3aae4" + ], + [ + "5f39214bc42e56a0" + ], + [ + "754c14a86b211411" + ], + [ + "3558984684b19247" + ], + [ + "2eebb8889f9ea032" + ], + [ + "83d408b06d1af375" + ] + ] + }, + { + "id": "09fb1bd40272d0af", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "COT_URL", + "tooltip": "Where are we sending Cursor on Target?", + "group": "c9b3e02a2ade5f4f", + "order": 1, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "COT_URL", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 600, + "y": 540, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "b87a918bdc4910dc", + "type": "switch", + "z": "4fa67ac9ec0c7369", + "name": "", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "nnull" + } + ], + "checkall": "true", + "repair": false, + "outputs": 1, + "x": 230, + "y": 440, + "wires": [ + [ + "bcd4f9fe3ff42a97" + ] + ] + }, + { + "id": "2f25f0b243e59af1", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "PYTAK_MULTICAST_LOCAL_ADDR", + "tooltip": "", + "group": "c9b3e02a2ade5f4f", + "order": 4, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "PYTAK_MULTICAST_LOCAL_ADDR", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 690, + "y": 580, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "2f521601ceea7ce4", + "type": "ui_text", + "z": "4fa67ac9ec0c7369", + "group": "fa4e075e1fa30638", + "order": 1, + "width": 5, + "height": 1, + "name": "", + "label": "Node ID: ", + "format": "{{msg.payload}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 600, + "y": 360, + "wires": [] + }, + { + "id": "cdd18c9e97866deb", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "ALT_UPPER", + "tooltip": "Upper Altitude Limit, geometric (GNSS / INS) altitude in feet referenced to the WGS84 ellipsoid.", + "group": "ea29ae5e99fd702f", + "order": 2, + "width": 6, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "ALT_UPPER", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 610, + "y": 440, + "wires": [ + [ + "9b8548552e7fbfa4" + ] + ] + }, + { + "id": "270527e3d2b0c57e", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "ALT_LOWER", + "tooltip": "Lower Altitude Limit, geometric (GNSS / INS) altitude in feet referenced to the WGS84 ellipsoid.", + "group": "ea29ae5e99fd702f", + "order": 3, + "width": 6, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "ALT_LOWER", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 610, + "y": 480, + "wires": [ + [ + "9b8548552e7fbfa4" + ] + ] + }, + { + "id": "cb87c8b4398c815d", + "type": "ui_button", + "z": "4fa67ac9ec0c7369", + "g": "a247d145bc97ec4e", + "name": "", + "group": "1027f32817e150a0", + "order": 1, + "width": 0, + "height": 0, + "passthru": false, + "label": "Save Changes & Restart", + "tooltip": "", + "color": "", + "bgcolor": "", + "className": "", + "icon": "", + "payload": "configs", + "payloadType": "flow", + "topic": "topic", + "topicType": "msg", + "x": 590, + "y": 200, + "wires": [ + [ + "a693d594320c6842", + "631f87c4233853a4" + ] + ] + }, + { + "id": "bcd4f9fe3ff42a97", + "type": "change", + "z": "4fa67ac9ec0c7369", + "name": "", + "rules": [ + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "parts.key", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 180, + "y": 680, + "wires": [ + [ + "b29ad47e816eeb8a" + ] + ] + }, + { + "id": "90bbf3ddaabf55d6", + "type": "function", + "z": "4fa67ac9ec0c7369", + "g": "a247d145bc97ec4e", + "name": "Remove nulls", + "func": "const pl = msg.payload;\nlet newpl = {};\n\nfor (const [key, value] of Object.entries(pl)) {\n if (value !== null) {\n newpl[key] = value\n }\n}\n\nmsg.payload = newpl;\n\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 560, + "y": 240, + "wires": [ + [ + "8f90b1c209f39ff8" + ] + ] + }, + { + "id": "70a02ab5c732adf0", + "type": "file", + "z": "4fa67ac9ec0c7369", + "g": "a247d145bc97ec4e", + "name": "", + "filename": "tmpConfPath", + "filenameType": "msg", + "appendNewline": true, + "createDir": false, + "overwriteFile": "true", + "encoding": "none", + "x": 700, + "y": 280, + "wires": [ + [ + "83463f13b20d8ef3" + ] + ] + }, + { + "id": "8f90b1c209f39ff8", + "type": "function", + "z": "4fa67ac9ec0c7369", + "g": "a247d145bc97ec4e", + "name": "Format ENV file", + "func": "const pl = msg.payload;\nlet newpl = `# ${msg.topic} Automatically created by AryaOS Dashboard.`;\n\nfor (const [key, value] of Object.entries(pl)) {\n if (value !== null) {\n newpl = `${newpl}\\n${key}=${value}`\n }\n}\n\nmsg.payload = newpl;\n\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 740, + "y": 240, + "wires": [ + [ + "e435961c35c6c50f" + ] + ] + }, + { + "id": "e435961c35c6c50f", + "type": "function", + "z": "4fa67ac9ec0c7369", + "g": "a247d145bc97ec4e", + "name": "Use tmp file", + "func": "msg.tmpConfPath = msg.topic.replace(\"/etc/\", \"tmpConf/\")\n\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 550, + "y": 280, + "wires": [ + [ + "70a02ab5c732adf0" + ] + ] + }, + { + "id": "df765e01751751eb", + "type": "link in", + "z": "4fa67ac9ec0c7369", + "g": "c5409a5d2b5e28d5", + "name": "adsbcot-config.txt In", + "links": [ + "8ef58d62e7fd687c" + ], + "x": 505, + "y": 100, + "wires": [ + [ + "2d8066d127cb6c44", + "59b872f3a0bdee19" + ] + ] + }, + { + "id": "2d8066d127cb6c44", + "type": "function", + "z": "4fa67ac9ec0c7369", + "g": "c5409a5d2b5e28d5", + "name": "Set Cmd", + "func": "let realName = msg.filename.replace(\"tmpConf/\", \"/etc/\").replace(\"/home/node-red/\", \"\")\nmsg.payload = `sudo cp ${msg.filename} ${realName}`\n\nreturn msg;", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 620, + "y": 100, + "wires": [ + [ + "bb55ecc1c7a7da19", + "59b872f3a0bdee19" + ] + ] + }, + { + "id": "436315b0476f70b0", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "PYTAK_TLS_CLIENT_CERT", + "tooltip": "PEM TLS Client Cert", + "group": "c9b3e02a2ade5f4f", + "order": 6, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "PYTAK_TLS_CLIENT_CERT", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 620, + "y": 940, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "9ebdda528d43e0ed", + "type": "ui_button", + "z": "4fa67ac9ec0c7369", + "name": "", + "group": "1027f32817e150a0", + "order": 2, + "width": 0, + "height": 0, + "passthru": true, + "label": "Load Configs", + "tooltip": "", + "color": "", + "bgcolor": "green", + "className": "", + "icon": "", + "payload": "configs", + "payloadType": "flow", + "topic": "topic", + "topicType": "msg", + "x": 260, + "y": 200, + "wires": [ + [ + "9c77b6745bbb256f" + ] + ] + }, + { + "id": "f03da47ad91841c2", + "type": "split", + "z": "4fa67ac9ec0c7369", + "name": "", + "splt": "\\n", + "spltType": "str", + "arraySplt": 1, + "arraySpltType": "len", + "stream": false, + "addname": "topic", + "x": 230, + "y": 280, + "wires": [ + [ + "1c2d5f5bc8a23c60" + ] + ] + }, + { + "id": "1c2d5f5bc8a23c60", + "type": "file in", + "z": "4fa67ac9ec0c7369", + "name": "", + "filename": "payload", + "filenameType": "msg", + "format": "utf8", + "chunk": false, + "sendError": false, + "encoding": "none", + "allProps": false, + "x": 240, + "y": 320, + "wires": [ + [ + "20bb4cfcf85404b9" + ] + ] + }, + { + "id": "bb55ecc1c7a7da19", + "type": "link out", + "z": "4fa67ac9ec0c7369", + "g": "c5409a5d2b5e28d5", + "name": "Save Config Out", + "mode": "link", + "links": [ + "191a64ffb1ef6aac" + ], + "x": 725, + "y": 100, + "wires": [] + }, + { + "id": "21b1f508196e9b5a", + "type": "inject", + "z": "4fa67ac9ec0c7369", + "name": "", + "props": [], + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "", + "x": 150, + "y": 120, + "wires": [ + [ + "38dd95c8bf4641c3" + ] + ] + }, + { + "id": "38dd95c8bf4641c3", + "type": "function", + "z": "4fa67ac9ec0c7369", + "name": "Set Configs", + "func": "let configs = {\n \"/etc/default/adsbcot\": {\n FEED_URL: \"file:///run/adsb/aircraft.json\", \n POLL_INTERVAL: null, \n ALT_UPPER: null, \n ALT_LOWER: null\n },\n \"/etc/default/aryaos\": {\n NODE_ID: null,\n COT_URL: \"udp+wo://239.2.3.1:6969\",\n PYTAK_MULTICAST_LOCAL_ADDR: \"0.0.0.0\",\n PYTAK_TLS_CLIENT_CERT: null,\n WIFI_AP_IP: \"10.41.0.1\",\n COT_ACCESS: \"UNCLASSIFIED\",\n STATIC_LAT: null,\n STATIC_LON: null,\n STATIC_ALT: null,\n TFR_STATE: \"CA\",\n PYTAK_TLS_CLIENT_KEY: null,\n PYTAK_TLS_DONT_VERIFY: null,\n PYTAK_TLS_DONT_CHECK_HOSTNAME: null,\n PYTAK_TLS_CLIENT_CAFILE: null,\n PYTAK_TLS_CLIENT_PASSWORD: null,\n\n },\n \"/etc/default/lincot\": {\n GPS_INFO_CMD: null,\n CALLSIGN: null\n }\n}\n\nflow.set(\"configs\", configs)\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 250, + "y": 160, + "wires": [ + [ + "9ebdda528d43e0ed" + ] + ] + }, + { + "id": "9c77b6745bbb256f", + "type": "function", + "z": "4fa67ac9ec0c7369", + "name": "Set Files", + "func": "const configs = flow.get(\"configs\") || {}\nmsg.payload = Object.keys(configs)\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 240, + "y": 240, + "wires": [ + [ + "f03da47ad91841c2" + ] + ] + }, + { + "id": "9b8548552e7fbfa4", + "type": "change", + "z": "4fa67ac9ec0c7369", + "name": "/etc/default/adsbcot", + "rules": [ + { + "t": "set", + "p": "filename", + "pt": "msg", + "to": "/etc/default/adsbcot", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 850, + "y": 440, + "wires": [ + [ + "e0a10c197bb93cee" + ] + ] + }, + { + "id": "52d59a8a443b3363", + "type": "change", + "z": "4fa67ac9ec0c7369", + "name": "/etc/default/aryaos", + "rules": [ + { + "t": "set", + "p": "filename", + "pt": "msg", + "to": "/etc/default/aryaos", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1090, + "y": 660, + "wires": [ + [ + "e0a10c197bb93cee", + "86b92497c8d0f36c" + ] + ] + }, + { + "id": "a693d594320c6842", + "type": "split", + "z": "4fa67ac9ec0c7369", + "g": "a247d145bc97ec4e", + "name": "", + "splt": "\\n", + "spltType": "str", + "arraySplt": 1, + "arraySpltType": "len", + "stream": false, + "addname": "topic", + "x": 770, + "y": 200, + "wires": [ + [ + "90bbf3ddaabf55d6" + ] + ] + }, + { + "id": "09f4ad56eb3fd133", + "type": "link in", + "z": "4fa67ac9ec0c7369", + "name": "Config in", + "links": [ + "99875f9d26d1f50e", + "b104d679e8967f58" + ], + "x": 105, + "y": 240, + "wires": [ + [ + "9c77b6745bbb256f" + ] + ] + }, + { + "id": "e0a10c197bb93cee", + "type": "function", + "z": "4fa67ac9ec0c7369", + "name": "Set Configs", + "func": "let configs = flow.get(\"configs\") || {};\n\nconfigs[msg.filename][msg.topic] = msg.payload\n\nflow.set(\"configs\", configs)\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1390, + "y": 640, + "wires": [ + [ + "8e27fbfb0a2496bb" + ] + ] + }, + { + "id": "5ad11569a70069c4", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "STATIC_ALT", + "tooltip": "", + "group": "5fe7b630bc270f5d", + "order": 2, + "width": 6, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "STATIC_ALT", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 610, + "y": 640, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "7b2591633f69cff2", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "STATIC_LAT", + "tooltip": "", + "group": "5fe7b630bc270f5d", + "order": 3, + "width": 6, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "STATIC_LAT", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 610, + "y": 680, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "f1a4b452b8ad0ff2", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "STATIC_LON", + "tooltip": "", + "group": "5fe7b630bc270f5d", + "order": 4, + "width": 6, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "STATIC_LON", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 610, + "y": 720, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "631f87c4233853a4", + "type": "debug", + "z": "4fa67ac9ec0c7369", + "name": "debug 13", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 900, + "y": 140, + "wires": [] + }, + { + "id": "59b872f3a0bdee19", + "type": "debug", + "z": "4fa67ac9ec0c7369", + "name": "debug 14", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 860, + "y": 60, + "wires": [] + }, + { + "id": "83463f13b20d8ef3", + "type": "debug", + "z": "4fa67ac9ec0c7369", + "name": "debug 16", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 900, + "y": 320, + "wires": [] + }, + { + "id": "ff7a0b0653db330b", + "type": "ui_switch", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "Use Static Position?", + "tooltip": "", + "group": "5fe7b630bc270f5d", + "order": 1, + "width": 6, + "height": 1, + "passthru": true, + "decouple": "false", + "topic": "GPS_INFO_CMD", + "topicType": "str", + "style": "", + "onvalue": "/usr/local/bin/get_position.sh", + "onvalueType": "str", + "onicon": "", + "oncolor": "", + "offvalue": "null", + "offvalueType": "json", + "officon": "", + "offcolor": "", + "animate": false, + "className": "", + "x": 1120, + "y": 860, + "wires": [ + [ + "68268787596399d6" + ] + ] + }, + { + "id": "68268787596399d6", + "type": "change", + "z": "4fa67ac9ec0c7369", + "name": "/etc/default/lincot", + "rules": [ + { + "t": "set", + "p": "filename", + "pt": "msg", + "to": "/etc/default/lincot", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1350, + "y": 860, + "wires": [ + [ + "e0a10c197bb93cee" + ] + ] + }, + { + "id": "8e27fbfb0a2496bb", + "type": "debug", + "z": "4fa67ac9ec0c7369", + "name": "debug 18", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1480, + "y": 480, + "wires": [] + }, + { + "id": "7e3b2c1fde544a53", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "COT_ACCESS", + "tooltip": "", + "group": "c9b3e02a2ade5f4f", + "order": 2, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "COT_ACCESS", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 620, + "y": 760, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "c12e71dc514f0676", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "TFR_STATE", + "tooltip": "", + "group": "c9b3e02a2ade5f4f", + "order": 3, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "TFR_STATE", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 610, + "y": 800, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "fddcfcce5a422433", + "type": "change", + "z": "4fa67ac9ec0c7369", + "name": "TFR_STATE", + "rules": [ + { + "t": "set", + "p": "TFR_STATE", + "pt": "global", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 610, + "y": 840, + "wires": [ + [] + ] + }, + { + "id": "d7ddc89a64e3aae4", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "PYTAK_TLS_CLIENT_KEY", + "tooltip": "(optional) PEM TLS Client Private Key", + "group": "c9b3e02a2ade5f4f", + "order": 7, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "PYTAK_TLS_CLIENT_KEY", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 620, + "y": 980, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "5f39214bc42e56a0", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "PYTAK_TLS_CLIENT_PASSWORD", + "tooltip": "(optional) TLS Client encrypted Private Key password", + "group": "c9b3e02a2ade5f4f", + "order": 8, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "PYTAK_TLS_CLIENT_PASSWORD", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 640, + "y": 1020, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "754c14a86b211411", + "type": "ui_switch", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "TLS Don't Verify Server Cert", + "tooltip": "", + "group": "c9b3e02a2ade5f4f", + "order": 9, + "width": 6, + "height": 1, + "passthru": true, + "decouple": "false", + "topic": "PYTAK_TLS_DONT_VERIFY", + "topicType": "str", + "style": "", + "onvalue": "true", + "onvalueType": "bool", + "onicon": "", + "oncolor": "", + "offvalue": "false", + "offvalueType": "bool", + "officon": "", + "offcolor": "", + "animate": false, + "className": "", + "x": 600, + "y": 1100, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "3558984684b19247", + "type": "ui_switch", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "TLS Don't Check Server Cert CN", + "tooltip": "", + "group": "c9b3e02a2ade5f4f", + "order": 10, + "width": 6, + "height": 1, + "passthru": true, + "decouple": "false", + "topic": "PYTAK_TLS_DONT_CHECK_HOSTNAME", + "topicType": "str", + "style": "", + "onvalue": "true", + "onvalueType": "bool", + "onicon": "", + "oncolor": "", + "offvalue": "false", + "offvalueType": "bool", + "officon": "", + "offcolor": "", + "animate": false, + "className": "", + "x": 620, + "y": 1140, + "wires": [ + [ + "52d59a8a443b3363" + ] + ] + }, + { + "id": "86b92497c8d0f36c", + "type": "debug", + "z": "4fa67ac9ec0c7369", + "name": "debug 28", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 1160, + "y": 740, + "wires": [] + }, + { + "id": "2eebb8889f9ea032", + "type": "ui_text_input", + "z": "4fa67ac9ec0c7369", + "name": "", + "label": "PYTAK_TLS_CLIENT_CAFILE", + "tooltip": "(optional) TLS CA Trust Store", + "group": "c9b3e02a2ade5f4f", + "order": 8, + "width": 8, + "height": 1, + "passthru": true, + "mode": "text", + "delay": 300, + "topic": "PYTAK_TLS_CLIENT_CAFILE", + "sendOnBlur": true, + "className": "", + "topicType": "str", + "x": 630, + "y": 1060, + "wires": [ + [] + ] + }, + { + "id": "83d408b06d1af375", + "type": "debug", + "z": "4fa67ac9ec0c7369", + "name": "debug 29", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 240, + "y": 900, + "wires": [] + }, + { + "id": "eeab9ac6513e2cdf", + "type": "parsrer", + "z": "de725ec24f79b6b7", + "name": "", + "state": "", + "destUid": "", + "takMission": "", + "datasyncSave": false, + "creatorUid": "", + "takServerUrl": "", + "missionApiPort": 8443, + "x": 430, + "y": 200, + "wires": [ + [ + "cedca169d6844f15" + ], + [], + [] + ] + }, + { + "id": "1adb2eef7b22719d", + "type": "inject", + "z": "de725ec24f79b6b7", + "name": "", + "props": [], + "repeat": "3600", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "", + "x": 110, + "y": 200, + "wires": [ + [ + "2f99864e0fa97b18" + ] + ] + }, + { + "id": "1e6eb6f93066814d", + "type": "debug", + "z": "de725ec24f79b6b7", + "name": "debug 9", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 600, + "y": 120, + "wires": [] + }, + { + "id": "ddb201c5df845268", + "type": "link out", + "z": "de725ec24f79b6b7", + "name": "TFR Out", + "mode": "link", + "links": [ + "58edafa9ab997436", + "dc87e7e88303ec78" + ], + "x": 665, + "y": 200, + "wires": [] + }, + { + "id": "cedca169d6844f15", + "type": "tak", + "z": "de725ec24f79b6b7", + "name": "TAK", + "x": 570, + "y": 200, + "wires": [ + [ + "ddb201c5df845268", + "1e6eb6f93066814d" + ], + [], + [] + ] + }, + { + "id": "2f99864e0fa97b18", + "type": "change", + "z": "de725ec24f79b6b7", + "name": "", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "TFR_STATE", + "tot": "global" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 260, + "y": 200, + "wires": [ + [ + "eeab9ac6513e2cdf", + "d45bfee76b7ca4be" + ] + ] + }, + { + "id": "d45bfee76b7ca4be", + "type": "debug", + "z": "de725ec24f79b6b7", + "name": "debug 19", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 240, + "y": 120, + "wires": [] + }, + { + "id": "cedb612803ec48f3", + "type": "ui_table", + "z": "898f970d26b5049d", + "group": "4f5d2f631860ad85", + "name": "", + "order": 3, + "width": "12", + "height": "15", + "columns": [ + { + "field": "id", + "title": "id", + "width": "2", + "align": "center", + "formatter": "rownum", + "formatterParams": { + "target": "_blank" + } + }, + { + "field": "label", + "title": "Label", + "width": "", + "align": "left", + "formatter": "plaintext", + "formatterParams": { + "target": "_blank" + } + }, + { + "field": "lastUpdate", + "title": "Updated", + "width": "", + "align": "left", + "formatter": "plaintext", + "formatterParams": { + "target": "_blank" + } + }, + { + "field": "battery", + "title": "Bat", + "width": "", + "align": "left", + "formatter": "progress", + "formatterParams": { + "target": "_blank" + } + }, + { + "field": "battery", + "title": "Bat%", + "width": "5", + "align": "left", + "formatter": "plaintext", + "formatterParams": { + "target": "_blank" + } + } + ], + "outputs": 1, + "cts": true, + "x": 750, + "y": 220, + "wires": [ + [] + ] + }, + { + "id": "1a05840c28615402", + "type": "function", + "z": "898f970d26b5049d", + "name": "Update User Table", + "func": "let pl = msg.payload;\n\nmsg.payload = {\n command: \"updateOrAddData\",\n arguments: [\n [\n {\n \"id\": pl.name,\n \"label\": pl.label || pl.name,\n \"lastUpdate\": pl.lastUpdate,\n 'battery': pl.battery\n }\n ]\n ]\n}\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 570, + "y": 220, + "wires": [ + [ + "cedb612803ec48f3", + "089d8cf88cede906" + ] + ] + }, + { + "id": "ca452dfdb255ad66", + "type": "ui_chart", + "z": "898f970d26b5049d", + "name": "", + "group": "4f5d2f631860ad85", + "order": 2, + "width": 0, + "height": 0, + "label": "chart", + "chartType": "line", + "legend": "true", + "xformat": "HH:mm", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "", + "ymax": "", + "removeOlder": "3", + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "useUTC": false, + "colors": [ + "#1f77b4", + "#aec7e8", + "#ff7f0e", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "outputs": 1, + "useDifferentColor": false, + "className": "", + "x": 750, + "y": 260, + "wires": [ + [] + ] + }, + { + "id": "95a794098ccf72a6", + "type": "function", + "z": "898f970d26b5049d", + "name": "Update Battery Graph", + "func": "let pl = msg.payload;\n\nmsg.payload = {\n command: \"updateOrAddData\",\n arguments: [\n [\n {\n \"id\": pl.name,\n \"label\": pl.label || pl.name,\n \"lastUpdate\": pl.lastUpdate,\n 'battery': pl.battery\n }\n ]\n ]\n}\n\nmsg.topic = pl.label || pl.name;\nmsg.payload = pl.battery;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 580, + "y": 260, + "wires": [ + [ + "ca452dfdb255ad66" + ] + ] + }, + { + "id": "7c699e7f158dc0d5", + "type": "link in", + "z": "898f970d26b5049d", + "name": "TAK Dashboard In", + "links": [ + "089a5c1ffeafe91b" + ], + "x": 175, + "y": 240, + "wires": [ + [ + "ddb04bc04415d51e" + ] + ] + }, + { + "id": "ddb04bc04415d51e", + "type": "tak2wm", + "z": "898f970d26b5049d", + "name": "TAK2Worldmap", + "x": 300, + "y": 240, + "wires": [ + [ + "1a05840c28615402", + "95a794098ccf72a6", + "16f795d55dda4729" + ] + ] + }, + { + "id": "089d8cf88cede906", + "type": "debug", + "z": "898f970d26b5049d", + "name": "debug 4", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 700, + "y": 160, + "wires": [] + }, + { + "id": "16f795d55dda4729", + "type": "debug", + "z": "898f970d26b5049d", + "name": "debug 5", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 460, + "y": 140, + "wires": [] + }, + { + "id": "dc87e7e88303ec78", + "type": "link in", + "z": "f8d4ccf4360ea706", + "name": "Sit(x) In", + "links": [ + "089a5c1ffeafe91b", + "ddb201c5df845268" + ], + "x": 175, + "y": 100, + "wires": [ + [ + "7ff44de3e1b9f7ce" + ] + ] + }, + { + "id": "7ff44de3e1b9f7ce", + "type": "tak", + "z": "f8d4ccf4360ea706", + "name": "TAK", + "x": 270, + "y": 100, + "wires": [ + [ + "d13138584cc78f08" + ], + [], + [] + ] + }, + { + "id": "d13138584cc78f08", + "type": "tak", + "z": "f8d4ccf4360ea706", + "name": "TAK", + "x": 390, + "y": 100, + "wires": [ + [ + "058bbbd3ada7d52d" + ], + [], + [] + ] + }, + { + "id": "058bbbd3ada7d52d", + "type": "Sit(x) Node", + "z": "f8d4ccf4360ea706", + "d": true, + "name": "", + "sitx_config": "", + "x": 530, + "y": 100, + "wires": [ + [] + ] + }, + { + "id": "4194294f579cd489", + "type": "inject", + "z": "f83d0c6d58d0338c", + "name": "Recorder tempo", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "1", + "crontab": "", + "once": true, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 210, + "y": 60, + "wires": [ + [ + "7aebc40599793b82", + "23cecfd9fe2ca333" + ] + ] + }, + { + "id": "24b067af1a8cbf7d", + "type": "link in", + "z": "f83d0c6d58d0338c", + "name": "Recorder In", + "links": [ + "64fa2c00f63bdd53" + ], + "x": 185, + "y": 200, + "wires": [ + [ + "9d614ce21a98acb3", + "503bc8cc58c93e82" + ] + ] + }, + { + "id": "74eb25f411edeb7c", + "type": "ui_button", + "z": "f83d0c6d58d0338c", + "name": "Start Recorder", + "group": "f9087e66bb4cd9b2", + "order": 4, + "width": 4, + "height": 1, + "passthru": true, + "label": "Start", + "tooltip": "Starts aircraft data recorder.", + "color": "white", + "bgcolor": "green", + "className": "", + "icon": "save", + "payload": "true", + "payloadType": "bool", + "topic": "topic", + "topicType": "msg", + "x": 280, + "y": 340, + "wires": [ + [ + "1fdb87ae7ebff0c2" + ] + ] + }, + { + "id": "0445d10019fc7ebc", + "type": "ui_button", + "z": "f83d0c6d58d0338c", + "name": "Stop Recorder", + "group": "f9087e66bb4cd9b2", + "order": 2, + "width": 4, + "height": 1, + "passthru": true, + "label": "Stop", + "tooltip": "Stops aircraft data recorder.", + "color": "white", + "bgcolor": "red", + "className": "", + "icon": "stop", + "payload": "false", + "payloadType": "bool", + "topic": "topic", + "topicType": "msg", + "x": 280, + "y": 380, + "wires": [ + [ + "1fdb87ae7ebff0c2" + ] + ] + }, + { + "id": "77267e91ba9895c4", + "type": "debug", + "z": "f83d0c6d58d0338c", + "name": "debug 23", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 340, + "y": 180, + "wires": [] + }, + { + "id": "d467e586e80afacc", + "type": "debug", + "z": "f83d0c6d58d0338c", + "name": "debug 24", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 700, + "y": 180, + "wires": [] + }, + { + "id": "4a8dd2ec585b8b08", + "type": "file", + "z": "f83d0c6d58d0338c", + "name": "Write to recorderFile", + "filename": "recorderFile", + "filenameType": "msg", + "appendNewline": true, + "createDir": false, + "overwriteFile": "false", + "encoding": "none", + "x": 920, + "y": 220, + "wires": [ + [] + ] + }, + { + "id": "7aebc40599793b82", + "type": "change", + "z": "f83d0c6d58d0338c", + "name": "Set Tempo", + "rules": [ + { + "t": "set", + "p": "tempo", + "pt": "flow", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 390, + "y": 60, + "wires": [ + [] + ] + }, + { + "id": "1fdb87ae7ebff0c2", + "type": "change", + "z": "f83d0c6d58d0338c", + "name": "", + "rules": [ + { + "t": "set", + "p": "record", + "pt": "flow", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 460, + "y": 360, + "wires": [ + [ + "f5c0e9070d94faaa" + ] + ] + }, + { + "id": "9d614ce21a98acb3", + "type": "switch", + "z": "f83d0c6d58d0338c", + "name": "Record?", + "property": "record", + "propertyType": "flow", + "rules": [ + { + "t": "true" + } + ], + "checkall": "true", + "repair": false, + "outputs": 1, + "x": 340, + "y": 220, + "wires": [ + [ + "77267e91ba9895c4", + "dad736f60e319e91" + ] + ] + }, + { + "id": "e6bdb76d8afa8684", + "type": "function", + "z": "f83d0c6d58d0338c", + "name": "Set Logfile", + "func": "let tempo = flow.get(\"tempo\")\n\nmsg.recorderFile = `/var/www/html/logs/${tempo}.json`\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 710, + "y": 220, + "wires": [ + [ + "4a8dd2ec585b8b08", + "d467e586e80afacc" + ] + ] + }, + { + "id": "5eb1994652b0b429", + "type": "change", + "z": "f83d0c6d58d0338c", + "name": "", + "rules": [ + { + "t": "set", + "p": "messages", + "pt": "flow", + "to": "payload.messages", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 730, + "y": 140, + "wires": [ + [] + ] + }, + { + "id": "f5c0e9070d94faaa", + "type": "debug", + "z": "f83d0c6d58d0338c", + "name": "debug 25", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 640, + "y": 360, + "wires": [] + }, + { + "id": "dad736f60e319e91", + "type": "switch", + "z": "f83d0c6d58d0338c", + "name": "", + "property": "payload.messages", + "propertyType": "msg", + "rules": [ + { + "t": "gt", + "v": "messages", + "vt": "flow" + } + ], + "checkall": "true", + "repair": false, + "outputs": 1, + "x": 510, + "y": 220, + "wires": [ + [ + "e6bdb76d8afa8684", + "574f933135269f64", + "5eb1994652b0b429" + ] + ] + }, + { + "id": "574f933135269f64", + "type": "debug", + "z": "f83d0c6d58d0338c", + "name": "debug 26", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 520, + "y": 180, + "wires": [] + }, + { + "id": "503bc8cc58c93e82", + "type": "delay", + "z": "f83d0c6d58d0338c", + "name": "", + "pauseType": "delay", + "timeout": "5", + "timeoutUnits": "seconds", + "rate": "1", + "nbRateUnits": "1", + "rateUnits": "second", + "randomFirst": "1", + "randomLast": "5", + "randomUnits": "seconds", + "drop": false, + "allowrate": false, + "outputs": 1, + "x": 300, + "y": 140, + "wires": [ + [ + "5eb1994652b0b429" + ] + ] + }, + { + "id": "61c09a2c6f3c80a3", + "type": "inject", + "z": "f83d0c6d58d0338c", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 300, + "y": 580, + "wires": [ + [] + ] + }, + { + "id": "23cecfd9fe2ca333", + "type": "function", + "z": "f83d0c6d58d0338c", + "name": "Set HTML Payload", + "func": "const pl = msg.payload;\nconst record = flow.get(\"record\");\n\nif (record) { \n msg.payload = `Running`;\n msg.icon = \"fa-check\"\n msg.color = \"green\"\n} else {\n msg.payload = `Stopped`\n msg.icon = \"fa-times-circle\"\n msg.color = \"red\"\n}\n\nmsg.payload = ` ${msg.payload}`\n\nreturn msg;\n", + "outputs": 1, + "timeout": "", + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 490, + "y": 580, + "wires": [ + [ + "40e21166afb5b8b6", + "6f2f64ae56a63c02" + ] + ] + }, + { + "id": "40e21166afb5b8b6", + "type": "ui_text", + "z": "f83d0c6d58d0338c", + "group": "f9087e66bb4cd9b2", + "order": 1, + "width": 0, + "height": 0, + "name": "Recorder Status", + "label": "Recorder", + "format": "{{msg.payload}}", + "layout": "row-spread", + "className": "", + "style": true, + "font": "Arial Black,Arial Black,Gadget,sans-serif", + "fontSize": 16, + "color": "#000000", + "x": 660, + "y": 580, + "wires": [] + }, + { + "id": "6f2f64ae56a63c02", + "type": "debug", + "z": "f83d0c6d58d0338c", + "name": "debug 27", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "false", + "statusVal": "", + "statusType": "auto", + "x": 700, + "y": 500, + "wires": [] + }, + { + "id": "efa512ccb1363505", + "type": "ui_button", + "z": "f83d0c6d58d0338c", + "name": "Clear Recordings", + "group": "f9087e66bb4cd9b2", + "order": 3, + "width": 2, + "height": 1, + "passthru": true, + "label": "Clear", + "tooltip": "Deletes recorded aircraft data.", + "color": "white", + "bgcolor": "orange", + "className": "", + "icon": "report_problem", + "payload": "true", + "payloadType": "bool", + "topic": "topic", + "topicType": "msg", + "x": 290, + "y": 420, + "wires": [ + [ + "8e531d285fbd8d0c" + ] + ] + }, + { + "id": "8e531d285fbd8d0c", + "type": "exec", + "z": "f83d0c6d58d0338c", + "command": "rm /var/www/html/logs/*.json", + "addpay": "", + "append": "", + "useSpawn": "false", + "timer": "", + "winHide": false, + "oldrc": false, + "name": "", + "x": 520, + "y": 420, + "wires": [ + [], + [], + [] + ] + }, + { + "id": "229e4c198ef7face", + "type": "ui_upload", + "z": "23030b6ea0597f64", + "group": "27bb63a809345efc", + "title": "", + "accept": "", + "name": "Upload Update File", + "order": 1, + "width": 20, + "height": 5, + "chunk": "256", + "transfer": "binary", + "x": 270, + "y": 180, + "wires": [ + [ + "b429cfd28b62e327" + ] + ] + }, + { + "id": "b429cfd28b62e327", + "type": "file", + "z": "23030b6ea0597f64", + "name": "", + "filename": "update.deb", + "filenameType": "str", + "appendNewline": false, + "createDir": false, + "overwriteFile": "true", + "encoding": "none", + "x": 450, + "y": 180, + "wires": [ + [] + ] + }, + { + "id": "db6e39d922bbf958", + "type": "ui_button", + "z": "23030b6ea0597f64", + "name": "", + "group": "27bb63a809345efc", + "order": 3, + "width": 10, + "height": 2, + "passthru": false, + "label": "Install Update", + "tooltip": "", + "color": "white", + "bgcolor": "red", + "className": "", + "icon": "", + "payload": "", + "payloadType": "str", + "topic": "topic", + "topicType": "msg", + "x": 160, + "y": 380, + "wires": [ + [ + "a8c125a909b9b5fd" + ] + ] + }, + { + "id": "a8c125a909b9b5fd", + "type": "exec", + "z": "23030b6ea0597f64", + "command": "sudo /usr/bin/dpkg -i /home/node-red/update.deb", + "addpay": "", + "append": "", + "useSpawn": "false", + "timer": "", + "winHide": false, + "oldrc": false, + "name": "", + "x": 470, + "y": 380, + "wires": [ + [ + "71da818d8a38bd27" + ], + [ + "25ef05fa4774108a" + ], + [ + "e11b2f05dab0b45d" + ] + ] + }, + { + "id": "71da818d8a38bd27", + "type": "ui_template", + "z": "23030b6ea0597f64", + "group": "27bb63a809345efc", + "name": "Update stdout", + "order": 5, + "width": 20, + "height": 5, + "format": "
\n", + "storeOutMessages": false, + "fwdInMessages": true, + "resendOnRefresh": false, + "templateScope": "local", + "className": "", + "x": 840, + "y": 320, + "wires": [ + [] + ] + }, + { + "id": "25ef05fa4774108a", + "type": "ui_template", + "z": "23030b6ea0597f64", + "group": "27bb63a809345efc", + "name": "Update stderr", + "order": 6, + "width": 20, + "height": 5, + "format": "
\n", + "storeOutMessages": false, + "fwdInMessages": true, + "resendOnRefresh": false, + "templateScope": "local", + "className": "", + "x": 840, + "y": 360, + "wires": [ + [] + ] + }, + { + "id": "e11b2f05dab0b45d", + "type": "ui_text", + "z": "23030b6ea0597f64", + "group": "27bb63a809345efc", + "order": 4, + "width": 20, + "height": 2, + "name": "", + "label": "Update Exit Code", + "format": "{{msg.payload.code}}", + "layout": "row-left", + "className": "", + "style": false, + "font": "", + "fontSize": 16, + "color": "#000000", + "x": 850, + "y": 400, + "wires": [] + }, + { + "id": "81ad0fbe7e8a753f", + "type": "exec", + "z": "23030b6ea0597f64", + "command": "", + "addpay": "payload", + "append": "", + "useSpawn": "false", + "timer": "", + "winHide": false, + "oldrc": false, + "name": "", + "x": 570, + "y": 300, + "wires": [ + [ + "71da818d8a38bd27" + ], + [ + "25ef05fa4774108a" + ], + [ + "e11b2f05dab0b45d" + ] + ] + }, + { + "id": "72c3a6edcd13cef8", + "type": "ui_button", + "z": "23030b6ea0597f64", + "name": "", + "group": "27bb63a809345efc", + "order": 2, + "width": 10, + "height": 2, + "passthru": false, + "label": "Check Update", + "tooltip": "", + "color": "white", + "bgcolor": "green", + "className": "", + "icon": "", + "payload": "", + "payloadType": "str", + "topic": "topic", + "topicType": "msg", + "x": 260, + "y": 300, + "wires": [ + [ + "bb2a573b92dfd8df" + ] + ] + }, + { + "id": "bb2a573b92dfd8df", + "type": "function", + "z": "23030b6ea0597f64", + "name": "Set Paylaoad", + "func": "msg.payload = 'ls -al update.deb;md5sum update.deb;file update.deb'\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 430, + "y": 300, + "wires": [ + [ + "81ad0fbe7e8a753f" + ] + ] + } +] \ No newline at end of file