[
        {
                "id": "a520b411b857ec3c",
                "type": "tab",
                "label": "ABB-GoFa-12 Demo",
                "disabled": false,
                "info": ""
        },
        {
                "id": "f3c28d7a440cbeee",
                "type": "group",
                "z": "a520b411b857ec3c",
                "name": "1 - RWS (HTTPS 443)",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#e8f4f8",
                        "fill-opacity": "0.5",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "3e11854f08f13fae",
                        "bcebb1f688bc0e41",
                        "220d685a24069293",
                        "0c6d1a0571c4d1c6",
                        "1edb510d0e1876f8",
                        "1fd0eb48da704295",
                        "50ac319274bc98bd",
                        "b8c71f7a58a6d882"
                ],
                "x": 38,
                "y": 33,
                "w": 1754,
                "h": 2519
        },
        {
                "id": "7d45abfc5ddd9ce9",
                "type": "group",
                "z": "a520b411b857ec3c",
                "name": "2 - TCP Socket (port 1025)",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#e8f5ec",
                        "fill-opacity": "0.5",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "a47af3ecc11ce0f1",
                        "33be944ad3922a76",
                        "eca82887de186755",
                        "5469b15e8a5437be",
                        "7f67148b43e52842",
                        "fafb15f93f64a3a5",
                        "5b29cf3e491568e9",
                        "d11bddb54bb63ffb"
                ],
                "x": 1828,
                "y": 33,
                "w": 2074,
                "h": 2416
        },
        {
                "id": "76d96ab02f6d28a1",
                "type": "group",
                "z": "a520b411b857ec3c",
                "name": "3 - Local (No Network)",
                "style": {
                        "stroke": "#009999",
                        "stroke-opacity": "1",
                        "fill": "#e8f5f5",
                        "fill-opacity": "0.5",
                        "label": true,
                        "label-position": "nw",
                        "color": "#009999"
                },
                "nodes": [
                        "feec6542cfd99499",
                        "8cd35590d4a969bd"
                ],
                "x": 3928,
                "y": 33,
                "w": 1944,
                "h": 529
        },
        {
                "id": "3e11854f08f13fae",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "Read Robot State",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "d8516de9eb857697",
                        "9de3e684e6b562a6",
                        "f7540734982fa672",
                        "66bbebce5cb66a02",
                        "ab09d094bb69d989",
                        "e9ecec7bab68b096",
                        "6086adff0cf098cd",
                        "e746994379b6eeae",
                        "cfb2838bc29c752a",
                        "f43f7522f2fbf350"
                ],
                "x": 609,
                "y": 59,
                "w": 772,
                "h": 247
        },
        {
                "id": "bcebb1f688bc0e41",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "Motor Control",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "cfc134b29b3a1ddc",
                        "b3ea3e9c5143868e",
                        "2bc1b79736829ae9",
                        "83f088d473233544",
                        "d319cd3e6ad9a19f",
                        "644706b5de4afbd8",
                        "fe9983f568539c79"
                ],
                "x": 574,
                "y": 344,
                "w": 787,
                "h": 192
        },
        {
                "id": "220d685a24069293",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "Save Point",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "4e662e35e35f47d5",
                        "b864dda1ead4ca6a",
                        "e872ded62773f0bd",
                        "ecd925ef7667a950",
                        "0a218717bc2a8f9c",
                        "28a3cba44de10caa",
                        "8434ed5976c14722"
                ],
                "x": 64,
                "y": 574,
                "w": 1652,
                "h": 182
        },
        {
                "id": "0c6d1a0571c4d1c6",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "System, Log & Files",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "dbf33f58110c8439",
                        "c37c9b869ae726c0",
                        "eaa6b6d92727eae9",
                        "865a5a5916ad0c8f",
                        "9b205c394b861433",
                        "3623f5cd5959379c",
                        "cc53309b8ee4604f",
                        "e84f6c9ea63e8de9",
                        "0cfc46a7f4b61ac3",
                        "579c13035cdcab3b",
                        "effe9d98cc2e5185",
                        "ebd2235e8af0ab09",
                        "a87f21b85f254699",
                        "08a06617e3edef90",
                        "4ea80dd2a7e06eda",
                        "27a80d5a9bd823a6"
                ],
                "x": 194,
                "y": 749,
                "w": 1392,
                "h": 357
        },
        {
                "id": "1edb510d0e1876f8",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "I/O Signals",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "1074c9c3ad32d19c",
                        "dae43c1e5c2f6129",
                        "978e7132586df8ef",
                        "13e89fe7c62f25d5",
                        "2af8e5f152d995c7",
                        "5aeec4a42d3fb34c",
                        "0747f7e03efa639d",
                        "5e6ace1c877d175c",
                        "ec557c787980d761",
                        "3a99ba87d8098a2b",
                        "9e20ad06b9525264"
                ],
                "x": 114,
                "y": 1144,
                "w": 1652,
                "h": 302
        },
        {
                "id": "1fd0eb48da704295",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "Lead-through",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "f4bf030b193984d3",
                        "2775041ecbf3469a",
                        "d8eeb5ac67fe8f3d",
                        "e0eded77c68b6636",
                        "cab52e59a6579f9d",
                        "4b4fca9e323e4337",
                        "177a08b6dbebd6d3"
                ],
                "x": 454,
                "y": 1539,
                "w": 872,
                "h": 192
        },
        {
                "id": "50ac319274bc98bd",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "Real-time Subscriptions",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "1ca00946206eeafb",
                        "83df9ed99783d985",
                        "ebb541122994653a",
                        "398a6fed063bb10a",
                        "29e343610d4f1e5a",
                        "5622d1be6dfdcb92",
                        "8c207bb882c398a4",
                        "37dc499ffa4a43a6",
                        "8ca53a7aa3ac77f5",
                        "00b7eaaefef41217",
                        "65d5cfd837516be5",
                        "e705c98c2351e234",
                        "afbcc99795890248",
                        "0b3f4cc207a82ba2",
                        "b567e48ac4cbd2c6",
                        "32fb7047f03bd862"
                ],
                "x": 364,
                "y": 1769,
                "w": 1057,
                "h": 360
        },
        {
                "id": "b8c71f7a58a6d882",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "f3c28d7a440cbeee",
                "name": "RAPID Execution Control",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "e61e7d7c6f24badc",
                        "91f4907292809160",
                        "9d1746004d14ee01",
                        "42bbf550e1152031",
                        "ab1f53237968ab7e",
                        "a97108324650ea50",
                        "ce18bcbff97f011f",
                        "9f5d196254062b88",
                        "27e08a030cc09a37",
                        "9f23ad4ee2dd852b",
                        "7d815b2f956cc198",
                        "a6518f5e6f9499be",
                        "2fa9f8fa83791f70",
                        "3bdc296c41906f5e",
                        "285769f68e0deca0",
                        "33ae8386ac91e848"
                ],
                "x": 109,
                "y": 2109,
                "w": 1652,
                "h": 417
        },
        {
                "id": "a47af3ecc11ce0f1",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "Move Home / Set Home",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "05ca1bf2f6e419d0",
                        "5de110dcf927f163",
                        "5f5b1c06e9c9a675",
                        "a5710e01c171abcf",
                        "a828675ccc8e13c7",
                        "95e8eef07225cad3",
                        "8d1a8f16547cdcd1"
                ],
                "x": 2294,
                "y": 59,
                "w": 817,
                "h": 199
        },
        {
                "id": "33be944ad3922a76",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "Cartesian Jog",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "7c1f73bda0f815c1",
                        "c16f9974975e2f95",
                        "b003e3a4035ba618",
                        "a8aa2ce96451e404",
                        "926daf0705a38776",
                        "28746bd7d5207b93",
                        "0d3d43f36f65d6c8",
                        "c03418fb130321a8",
                        "77c2d09e0d3f81d6",
                        "7e6c07f70728b565",
                        "0e9d6a222258da35",
                        "0ffbfe917a7cf976",
                        "11e716e01b17b53b"
                ],
                "x": 2244,
                "y": 296,
                "w": 837,
                "h": 302
        },
        {
                "id": "eca82887de186755",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "Joint Jog",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "104d59e1a0dfee53",
                        "fbc5faca21708e29",
                        "912bf3f2291ef046",
                        "2b89b53716819804",
                        "faac32a30689f326",
                        "f9dbc13580f30f9f",
                        "719e3923d0d2721a"
                ],
                "x": 2314,
                "y": 636,
                "w": 767,
                "h": 192
        },
        {
                "id": "5469b15e8a5437be",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "TCP Motion",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "9f800b8a5ff11935",
                        "8ff6b76e5cd92256",
                        "af439376afc82a5e",
                        "b5f73ae1f1c46f09",
                        "9d4044b2513ae009",
                        "aee8279f3c406416",
                        "54d722cb05f9eb52",
                        "7b0738ff563fccd4",
                        "735c4cd73c27a3a5",
                        "1b30706679e0021e",
                        "fb4438878888e93e",
                        "75a9cd8622ff8758",
                        "2edc0f4291c1dfb0",
                        "c58f95d49763bfb9",
                        "61b1e0473263485a",
                        "c1151de873c6733e",
                        "43baaf3029b4b519",
                        "558a62310d844b6d",
                        "ab99f4b30f665005"
                ],
                "x": 2044,
                "y": 866,
                "w": 1192,
                "h": 412
        },
        {
                "id": "7f67148b43e52842",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "Speed & RAPID Variables",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "47770e0abd4258c6",
                        "fac904f3b9367f13",
                        "f97f9f3f4c523597",
                        "64e6c14877789e2c",
                        "03102ef219d0cfbb",
                        "8dc35b1d7671d4ee",
                        "a8e109eb4c26640e",
                        "1eb0c9f73c5d0d36",
                        "a98a0d95595e55e2",
                        "d81006a99626060d",
                        "c813baa42e7484f7",
                        "31e5e6e65886b54b",
                        "05832570b4225120",
                        "688dd4814bb8bf6f",
                        "aa2145cb4b0a7ce2",
                        "128225c4a4d600c6",
                        "94fe4d2d0b721143",
                        "5429677fabe5d3e4",
                        "8c0f52ef41a5de81",
                        "aa29f273b40d8291",
                        "bc93e819fa24785b"
                ],
                "x": 1864,
                "y": 1316,
                "w": 1552,
                "h": 417
        },
        {
                "id": "fafb15f93f64a3a5",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "Go To Point",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "4d1142a0b0ac9d66",
                        "626efb16763f69e4",
                        "147acb27186a6aae",
                        "d41dba79da1d5c66",
                        "dbdd80bf79b9c99e",
                        "19cacaa80ccd65f3",
                        "17138ebb2106afe5"
                ],
                "x": 2004,
                "y": 1771,
                "w": 1862,
                "h": 137
        },
        {
                "id": "5b29cf3e491568e9",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "Sequence Runner",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "d7404c8410ee9cda",
                        "57eb4819de7f66a4",
                        "2f4468b2aee2d47a",
                        "6325f1bb96748c3c",
                        "107c21066029bfb4",
                        "33f97148eec902d8",
                        "0246c56c954dfbd8",
                        "4674f441889f065c",
                        "10426752437ee07d",
                        "6ff22119748b5f14",
                        "890ffde33a017e7e"
                ],
                "x": 1854,
                "y": 1946,
                "w": 2022,
                "h": 247
        },
        {
                "id": "d11bddb54bb63ffb",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "7d45abfc5ddd9ce9",
                "name": "ASI Status LED",
                "style": {
                        "stroke": "#00aa44",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#00aa44"
                },
                "nodes": [
                        "6f9a8d3643423c12",
                        "d8272f3afedc2e2b",
                        "17947859975bc08a",
                        "6d68920b93c068c7",
                        "aff252b80db6b0fa",
                        "d82ffe306ec54c12",
                        "1bc1a2da10856fd5"
                ],
                "x": 2084,
                "y": 2231,
                "w": 1112,
                "h": 192
        },
        {
                "id": "feec6542cfd99499",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "76d96ab02f6d28a1",
                "name": "Point List & Delete",
                "style": {
                        "stroke": "#009999",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#009999"
                },
                "nodes": [
                        "6e55bd3b02f94554",
                        "c09e9b0b9485ebed",
                        "081de24632110cd6",
                        "07748a5619ab98d6",
                        "6bbae6830b9a4752",
                        "d02733b447911ac0",
                        "9b16fee465ce6c51",
                        "ea9ed5c71d9782b6",
                        "a2cad4e4dbf6947f",
                        "30f22ce5f2d47e44",
                        "cd542a5c16babf8e",
                        "f67f49016ad60e07",
                        "2c5e72395be60fa3"
                ],
                "x": 3954,
                "y": 59,
                "w": 1892,
                "h": 247
        },
        {
                "id": "8cd35590d4a969bd",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "76d96ab02f6d28a1",
                "name": "Points Transfer",
                "style": {
                        "stroke": "#009999",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#009999"
                },
                "nodes": [
                        "f8797db9926ecdf2",
                        "0b55fccd776237cd",
                        "163315dd06328736",
                        "4dc67eca9254b849",
                        "b81421c84a4e2094",
                        "c149c842494bdf01",
                        "176dc3c277bf8ada"
                ],
                "x": 4064,
                "y": 344,
                "w": 1072,
                "h": 192
        },
        {
                "id": "9da1c40682401e26",
                "type": "group",
                "z": "a520b411b857ec3c",
                "name": "4 - EGM (UDP)",
                "style": {
                        "stroke": "#aa6600",
                        "stroke-opacity": "1",
                        "fill": "#f8f0e8",
                        "fill-opacity": "0.5",
                        "label": true,
                        "label-position": "nw",
                        "color": "#aa6600"
                },
                "nodes": [
                        "d985d2ec6155d7fe"
                ],
                "x": 3948,
                "y": 803,
                "w": 2244,
                "h": 254
        },
        {
                "id": "d985d2ec6155d7fe",
                "type": "group",
                "z": "a520b411b857ec3c",
                "g": "9da1c40682401e26",
                "name": "1 - EGM Session (UDP)",
                "style": {
                        "stroke": "#aa6600",
                        "stroke-opacity": "1",
                        "fill": "#ffffff",
                        "fill-opacity": "0.3",
                        "label": true,
                        "label-position": "nw",
                        "color": "#aa6600"
                },
                "nodes": [
                        "b3e23309e9d15dcd",
                        "45e54e7f8b3dd7e6",
                        "1cebd988d37a0389",
                        "10546e9e6656422d",
                        "8035823922e247e0",
                        "319180765be4ddd6",
                        "4f2fefb0e67c653a",
                        "3f5c96968e34cc50",
                        "a1cfe1a20752a8c5",
                        "db10ff8f9f4d3923",
                        "8e1c1e3158ea690c"
                ],
                "x": 3974,
                "y": 829,
                "w": 2192,
                "h": 202
        },
        {
                "id": "d8516de9eb857697",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "Input: any msg  |  Output: ctrlstate / opmode / speed / rapid / x,y,z / j1-j6",
                "info": "",
                "x": 890,
                "y": 100,
                "wires": []
        },
        {
                "id": "9de3e684e6b562a6",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "Read Status",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 155,
                "wires": [
                        [
                                "f7540734982fa672"
                        ]
                ]
        },
        {
                "id": "f7540734982fa672",
                "type": "gofa-status",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 155,
                "wires": [
                        [
                                "66bbebce5cb66a02"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "66bbebce5cb66a02",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "{ ctrlstate, opmode, speed, rapid }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 155,
                "wires": []
        },
        {
                "id": "ab09d094bb69d989",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "Read Pose",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 210,
                "wires": [
                        [
                                "e9ecec7bab68b096"
                        ]
                ]
        },
        {
                "id": "e9ecec7bab68b096",
                "type": "gofa-pose",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 210,
                "wires": [
                        [
                                "6086adff0cf098cd"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "6086adff0cf098cd",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "{ x, y, z, q1-q4, cf1/4/6/x }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 210,
                "wires": []
        },
        {
                "id": "e746994379b6eeae",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "Read Joints",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 265,
                "wires": [
                        [
                                "cfb2838bc29c752a"
                        ]
                ]
        },
        {
                "id": "cfb2838bc29c752a",
                "type": "gofa-joints",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 265,
                "wires": [
                        [
                                "f43f7522f2fbf350"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "f43f7522f2fbf350",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "3e11854f08f13fae",
                "name": "{ j1, j2, j3, j4, j5, j6 } degrees",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 265,
                "wires": []
        },
        {
                "id": "05ca1bf2f6e419d0",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "a47af3ecc11ce0f1",
                "name": "HOME: robot moves to saved home position  |  SETHOME: saves current pose as the new home",
                "info": "",
                "x": 2650,
                "y": 100,
                "wires": []
        },
        {
                "id": "5de110dcf927f163",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "a47af3ecc11ce0f1",
                "name": "Move HOME",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 162,
                "wires": [
                        [
                                "5f5b1c06e9c9a675"
                        ]
                ]
        },
        {
                "id": "5f5b1c06e9c9a675",
                "type": "gofa-move",
                "z": "a520b411b857ec3c",
                "g": "a47af3ecc11ce0f1",
                "name": "HOME",
                "robot": "cfg1",
                "command": "HOME",
                "x": 2710,
                "y": 162,
                "wires": [
                        [
                                "a5710e01c171abcf"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "a5710e01c171abcf",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "a47af3ecc11ce0f1",
                "name": "{ ok, ack:'OK:HOME' }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 162,
                "wires": []
        },
        {
                "id": "a828675ccc8e13c7",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "a47af3ecc11ce0f1",
                "name": "Set Home (here)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 217,
                "wires": [
                        [
                                "95e8eef07225cad3"
                        ]
                ]
        },
        {
                "id": "95e8eef07225cad3",
                "type": "gofa-move",
                "z": "a520b411b857ec3c",
                "g": "a47af3ecc11ce0f1",
                "name": "SETHOME",
                "robot": "cfg1",
                "command": "SETHOME",
                "x": 2710,
                "y": 217,
                "wires": [
                        [
                                "8d1a8f16547cdcd1"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "8d1a8f16547cdcd1",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "a47af3ecc11ce0f1",
                "name": "{ ok, ack:'OK:SETHOME' }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 217,
                "wires": []
        },
        {
                "id": "cfc134b29b3a1ddc",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "bcebb1f688bc0e41",
                "name": "Controls motor power via RWS  |  Override: msg.payload.action = 'motoron' | 'motoroff'",
                "info": "",
                "x": 890,
                "y": 385,
                "wires": []
        },
        {
                "id": "b3ea3e9c5143868e",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "bcebb1f688bc0e41",
                "name": "Motors ON",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 440,
                "wires": [
                        [
                                "2bc1b79736829ae9"
                        ]
                ]
        },
        {
                "id": "2bc1b79736829ae9",
                "type": "gofa-motor",
                "z": "a520b411b857ec3c",
                "g": "bcebb1f688bc0e41",
                "name": "Motors ON",
                "robot": "cfg1",
                "action": "motoron",
                "x": 960,
                "y": 440,
                "wires": [
                        [
                                "83f088d473233544"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "83f088d473233544",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "bcebb1f688bc0e41",
                "name": "{ ok:true, action:'motoron' }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 440,
                "wires": []
        },
        {
                "id": "d319cd3e6ad9a19f",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "bcebb1f688bc0e41",
                "name": "Motors OFF",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 495,
                "wires": [
                        [
                                "644706b5de4afbd8"
                        ]
                ]
        },
        {
                "id": "644706b5de4afbd8",
                "type": "gofa-motor",
                "z": "a520b411b857ec3c",
                "g": "bcebb1f688bc0e41",
                "name": "Motors OFF",
                "robot": "cfg1",
                "action": "motoroff",
                "x": 960,
                "y": 495,
                "wires": [
                        [
                                "fe9983f568539c79"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "fe9983f568539c79",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "bcebb1f688bc0e41",
                "name": "{ ok:true, action:'motoroff' }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 495,
                "wires": []
        },
        {
                "id": "7c1f73bda0f815c1",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Moves TCP relative to current pose  |  X/Y/Z = base frame mm (max 50)  |  RX/RY/RZ = tool frame deg (max 30)",
                "info": "",
                "x": 2640,
                "y": 337,
                "wires": []
        },
        {
                "id": "c16f9974975e2f95",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog X +20 mm",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 392,
                "wires": [
                        [
                                "b003e3a4035ba618"
                        ]
                ]
        },
        {
                "id": "b003e3a4035ba618",
                "type": "gofa-jog",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog X +20 mm",
                "robot": "cfg1",
                "target": "X",
                "dir": "+",
                "step": 20,
                "x": 2710,
                "y": 392,
                "wires": [
                        [
                                "a8aa2ce96451e404"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "a8aa2ce96451e404",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "{ ok, ack, token }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 392,
                "wires": []
        },
        {
                "id": "926daf0705a38776",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog Y +20 mm",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 447,
                "wires": [
                        [
                                "28746bd7d5207b93"
                        ]
                ]
        },
        {
                "id": "28746bd7d5207b93",
                "type": "gofa-jog",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog Y +20 mm",
                "robot": "cfg1",
                "target": "Y",
                "dir": "+",
                "step": 20,
                "x": 2710,
                "y": 447,
                "wires": [
                        [
                                "0d3d43f36f65d6c8"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "0d3d43f36f65d6c8",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "{ ok, ack, token }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 447,
                "wires": []
        },
        {
                "id": "c03418fb130321a8",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog Z +20 mm",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 502,
                "wires": [
                        [
                                "77c2d09e0d3f81d6"
                        ]
                ]
        },
        {
                "id": "77c2d09e0d3f81d6",
                "type": "gofa-jog",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog Z +20 mm",
                "robot": "cfg1",
                "target": "Z",
                "dir": "+",
                "step": 20,
                "x": 2710,
                "y": 502,
                "wires": [
                        [
                                "7e6c07f70728b565"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "7e6c07f70728b565",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "{ ok, ack, token }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 502,
                "wires": []
        },
        {
                "id": "0e9d6a222258da35",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog RZ +5 deg",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 557,
                "wires": [
                        [
                                "0ffbfe917a7cf976"
                        ]
                ]
        },
        {
                "id": "0ffbfe917a7cf976",
                "type": "gofa-jog",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "Jog RZ +5 deg",
                "robot": "cfg1",
                "target": "RZ",
                "dir": "+",
                "step": 5,
                "x": 2710,
                "y": 557,
                "wires": [
                        [
                                "11e716e01b17b53b"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "11e716e01b17b53b",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "33be944ad3922a76",
                "name": "{ ok, ack, token }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 557,
                "wires": []
        },
        {
                "id": "104d59e1a0dfee53",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "eca82887de186755",
                "name": "Rotates one joint by a relative angle (max 30 deg)  |  Override: msg.payload.{joint,dir,step}",
                "info": "",
                "x": 2640,
                "y": 677,
                "wires": []
        },
        {
                "id": "fbc5faca21708e29",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "eca82887de186755",
                "name": "Joint J1 +5 deg",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 732,
                "wires": [
                        [
                                "912bf3f2291ef046"
                        ]
                ]
        },
        {
                "id": "912bf3f2291ef046",
                "type": "gofa-jog",
                "z": "a520b411b857ec3c",
                "g": "eca82887de186755",
                "name": "Joint J1 +5 deg",
                "robot": "cfg1",
                "target": "J1",
                "dir": "+",
                "step": 5,
                "x": 2710,
                "y": 732,
                "wires": [
                        [
                                "2b89b53716819804"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "2b89b53716819804",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "eca82887de186755",
                "name": "{ ok, ack, token }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 732,
                "wires": []
        },
        {
                "id": "faac32a30689f326",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "eca82887de186755",
                "name": "Joint J2 +5 deg",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 787,
                "wires": [
                        [
                                "f9dbc13580f30f9f"
                        ]
                ]
        },
        {
                "id": "f9dbc13580f30f9f",
                "type": "gofa-jog",
                "z": "a520b411b857ec3c",
                "g": "eca82887de186755",
                "name": "Joint J2 +5 deg",
                "robot": "cfg1",
                "target": "J2",
                "dir": "+",
                "step": 5,
                "x": 2710,
                "y": 787,
                "wires": [
                        [
                                "719e3923d0d2721a"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "719e3923d0d2721a",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "eca82887de186755",
                "name": "{ ok, ack, token }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 787,
                "wires": []
        },
        {
                "id": "4e662e35e35f47d5",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "220d685a24069293",
                "name": "Read current pose via RWS and save it as a named point  |  Storage: Local (points.json) or On-Robot (JSON file on the robot's own disk via RWS, no local file needed)  |  Go to a saved point: TCP Socket group → Go To Point  |  List/Delete saved points: Local group → Point List & Delete",
                "info": "",
                "x": 890,
                "y": 615,
                "wires": []
        },
        {
                "id": "b864dda1ead4ca6a",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "220d685a24069293",
                "name": "1. Save Current Pose",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 670,
                "wires": [
                        [
                                "e872ded62773f0bd"
                        ]
                ]
        },
        {
                "id": "e872ded62773f0bd",
                "type": "gofa-points",
                "action": "save",
                "z": "a520b411b857ec3c",
                "g": "220d685a24069293",
                "name": "1. Save Current Pose",
                "robot": "cfg1",
                "pointName": "",
                "x": 960,
                "y": 670,
                "wires": [
                        [
                                "ecd925ef7667a950"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "ecd925ef7667a950",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "220d685a24069293",
                "name": "{ ok, point:{id,name,target}, points:[] }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 670,
                "wires": []
        },
        {
                "id": "0a218717bc2a8f9c",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "220d685a24069293",
                "name": "1b. Save Current Pose (On-Robot)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 745,
                "y": 715,
                "wires": [
                        [
                                "28a3cba44de10caa"
                        ]
                ]
        },
        {
                "id": "28a3cba44de10caa",
                "type": "gofa-points",
                "action": "save",
                "z": "a520b411b857ec3c",
                "g": "220d685a24069293",
                "name": "1b. Save Current Pose (On-Robot)",
                "robot": "cfg1",
                "pointName": "",
                "x": 1000,
                "y": 715,
                "wires": [
                        [
                                "8434ed5976c14722"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "8434ed5976c14722",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "220d685a24069293",
                "name": "{ ok, point, points } (on-robot)",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1235,
                "y": 715,
                "wires": []
        },
        {
                "id": "c09e9b0b9485ebed",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "2. List All Points",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 4435,
                "y": 155,
                "wires": [
                        [
                                "081de24632110cd6"
                        ]
                ]
        },
        {
                "id": "081de24632110cd6",
                "type": "gofa-points",
                "action": "list",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "2. List All Points",
                "robot": "cfg1",
                "x": 4670,
                "y": 155,
                "wires": [
                        [
                                "07748a5619ab98d6"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "07748a5619ab98d6",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "[ {id, name, target}, ... ]",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 4905,
                "y": 155,
                "wires": []
        },
        {
                "id": "626efb16763f69e4",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "fafb15f93f64a3a5",
                "name": "3. Go to Point",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 1867,
                "wires": [
                        [
                                "147acb27186a6aae"
                        ]
                ]
        },
        {
                "id": "147acb27186a6aae",
                "type": "gofa-points",
                "action": "go",
                "z": "a520b411b857ec3c",
                "g": "fafb15f93f64a3a5",
                "name": "3. Go to Point",
                "robot": "cfg1",
                "pointName": "Point 1",
                "x": 2710,
                "y": 1867,
                "wires": [
                        [
                                "d41dba79da1d5c66"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "d41dba79da1d5c66",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "fafb15f93f64a3a5",
                "name": "{ ok, ack, point }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 1867,
                "wires": []
        },
        {
                "id": "dbdd80bf79b9c99e",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "fafb15f93f64a3a5",
                "name": "3b. Go to Point (On-Robot)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 3230,
                "y": 1867,
                "wires": [
                        [
                                "19cacaa80ccd65f3"
                        ]
                ]
        },
        {
                "id": "19cacaa80ccd65f3",
                "type": "gofa-points",
                "action": "go",
                "z": "a520b411b857ec3c",
                "g": "fafb15f93f64a3a5",
                "name": "3b. Go to Point (On-Robot)",
                "robot": "cfg1",
                "pointName": "Point 1",
                "moveType": "J",
                "x": 3465,
                "y": 1867,
                "wires": [
                        [
                                "17138ebb2106afe5"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "17138ebb2106afe5",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "fafb15f93f64a3a5",
                "name": "{ ok, ack, point } (on-robot)",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 3700,
                "y": 1867,
                "wires": []
        },
        {
                "id": "6bbae6830b9a4752",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "4. Delete Point",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 4435,
                "y": 265,
                "wires": [
                        [
                                "d02733b447911ac0"
                        ]
                ]
        },
        {
                "id": "d02733b447911ac0",
                "type": "gofa-points",
                "action": "delete",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "4. Delete Point",
                "robot": "cfg1",
                "pointName": "Demo Point",
                "x": 4670,
                "y": 265,
                "wires": [
                        [
                                "9b16fee465ce6c51"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "9b16fee465ce6c51",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "{ ok, deleted, points:[] }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 4905,
                "y": 265,
                "wires": []
        },
        {
                "id": "ea9ed5c71d9782b6",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "2b. List All Points (On-Robot)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 5190,
                "y": 155,
                "wires": [
                        [
                                "a2cad4e4dbf6947f"
                        ]
                ]
        },
        {
                "id": "a2cad4e4dbf6947f",
                "type": "gofa-points",
                "action": "list",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "2b. List All Points (On-Robot)",
                "robot": "cfg1",
                "x": 5425,
                "y": 155,
                "wires": [
                        [
                                "30f22ce5f2d47e44"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "30f22ce5f2d47e44",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "[ {id, name, target}, ... ] (on-robot)",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 5660,
                "y": 155,
                "wires": []
        },
        {
                "id": "cd542a5c16babf8e",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "4b. Delete Point (On-Robot)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 5190,
                "y": 265,
                "wires": [
                        [
                                "f67f49016ad60e07"
                        ]
                ]
        },
        {
                "id": "f67f49016ad60e07",
                "type": "gofa-points",
                "action": "delete",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "4b. Delete Point (On-Robot)",
                "robot": "cfg1",
                "pointName": "Demo Point",
                "x": 5425,
                "y": 265,
                "wires": [
                        [
                                "2c5e72395be60fa3"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "2c5e72395be60fa3",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "{ ok, deleted, points:[] } (on-robot)",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 5660,
                "y": 265,
                "wires": []
        },
        {
                "id": "d7404c8410ee9cda",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "Run Sequence: visits each saved point in order  |  Output 1 = after each step  |  Output 2 = done/stopped  |  Stop: halts after current step  |  Left: Storage=Local  |  Right: Storage=On-Robot (fetches the whole list once per run, not once per step)",
                "info": "",
                "x": 2640,
                "y": 1987,
                "wires": []
        },
        {
                "id": "57eb4819de7f66a4",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "Run Sequence",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 2042,
                "wires": [
                        [
                                "2f4468b2aee2d47a"
                        ]
                ]
        },
        {
                "id": "2f4468b2aee2d47a",
                "type": "gofa-sequencer",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "Demo Sequence",
                "robot": "cfg1",
                "steps": [
                        {
                                "name": "Point 1"
                        },
                        {
                                "name": "Point 2"
                        }
                ],
                "dwell": 1000,
                "loop": false,
                "pingpong": false,
                "x": 2710,
                "y": 2042,
                "wires": [
                        [
                                "6325f1bb96748c3c"
                        ],
                        [
                                "107c21066029bfb4"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "6325f1bb96748c3c",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "{ step, total, name, ack }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 2042,
                "wires": []
        },
        {
                "id": "10426752437ee07d",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "Run Sequence (On-Robot)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 3230,
                "y": 2042,
                "wires": [
                        [
                                "6ff22119748b5f14"
                        ]
                ]
        },
        {
                "id": "6ff22119748b5f14",
                "type": "gofa-sequencer",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "Demo Sequence (On-Robot)",
                "robot": "cfg1",
                "steps": [
                        {
                                "name": "Point 1"
                        },
                        {
                                "name": "Point 2"
                        }
                ],
                "dwell": 1000,
                "loop": false,
                "pingpong": false,
                "x": 3465,
                "y": 2042,
                "wires": [
                        [
                                "890ffde33a017e7e"
                        ],
                        [
                                "890ffde33a017e7e"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "890ffde33a017e7e",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "step / done / stopped (on-robot)",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 3700,
                "y": 2042,
                "wires": []
        },
        {
                "id": "107c21066029bfb4",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "{ done:true } or { stopped:true }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 2097,
                "wires": []
        },
        {
                "id": "33f97148eec902d8",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "Stop Sequence",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 2152,
                "wires": [
                        [
                                "0246c56c954dfbd8"
                        ]
                ]
        },
        {
                "id": "0246c56c954dfbd8",
                "type": "gofa-stop-seq",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "",
                "robot": "cfg1",
                "x": 2710,
                "y": 2152,
                "wires": [
                        [
                                "4674f441889f065c"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "4674f441889f065c",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5b29cf3e491568e9",
                "name": "{ ok:true, message:'stop requested' }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 2152,
                "wires": []
        },
        {
                "id": "9f800b8a5ff11935",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "PING: connectivity test  |  MOVEJ: absolute joint target  |  GRIP: gripper on/off via RWS /set-value (needs Access:All on the target DO)  |  ZONE: blend radius  |  STOP: halt motion",
                "info": "",
                "x": 2640,
                "y": 907,
                "wires": []
        },
        {
                "id": "8ff6b76e5cd92256",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "Ping",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 962,
                "wires": [
                        [
                                "af439376afc82a5e"
                        ]
                ]
        },
        {
                "id": "af439376afc82a5e",
                "type": "gofa-ping",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "",
                "robot": "cfg1",
                "x": 2710,
                "y": 962,
                "wires": [
                        [
                                "b5f73ae1f1c46f09"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "b5f73ae1f1c46f09",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "{ ok, ack:'OK:PING', rtt }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 962,
                "wires": []
        },
        {
                "id": "9d4044b2513ae009",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "MoveJ [0,0,85,0,0,0]",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 1017,
                "wires": [
                        [
                                "aee8279f3c406416"
                        ]
                ]
        },
        {
                "id": "aee8279f3c406416",
                "type": "gofa-movej",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "",
                "robot": "cfg1",
                "joints": "[0,0,85,0,0,0]",
                "x": 2710,
                "y": 1017,
                "wires": [
                        [
                                "54d722cb05f9eb52"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "54d722cb05f9eb52",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "{ ok, joints:[0,0,85,0,0,0] }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 1017,
                "wires": []
        },
        {
                "id": "7b0738ff563fccd4",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "Grip ON",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 1072,
                "wires": [
                        [
                                "735c4cd73c27a3a5"
                        ]
                ]
        },
        {
                "id": "735c4cd73c27a3a5",
                "type": "gofa-grip",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "GRIPON",
                "robot": "cfg1",
                "action": "on",
                "signal": "ABB_Scalable_IO_0_DO1",
                "x": 2710,
                "y": 1072,
                "wires": [
                        [
                                "1b30706679e0021e"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "1b30706679e0021e",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "{ ok, action:'on', signal }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 1072,
                "wires": []
        },
        {
                "id": "fb4438878888e93e",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "Grip OFF",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 1127,
                "wires": [
                        [
                                "75a9cd8622ff8758"
                        ]
                ]
        },
        {
                "id": "75a9cd8622ff8758",
                "type": "gofa-grip",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "GRIPOFF",
                "robot": "cfg1",
                "action": "off",
                "signal": "ABB_Scalable_IO_0_DO1",
                "x": 2710,
                "y": 1127,
                "wires": [
                        [
                                "2edc0f4291c1dfb0"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "2edc0f4291c1dfb0",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "{ ok, action:'off', signal }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 1127,
                "wires": []
        },
        {
                "id": "c58f95d49763bfb9",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "Zone z10",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 1182,
                "wires": [
                        [
                                "61b1e0473263485a"
                        ]
                ]
        },
        {
                "id": "61b1e0473263485a",
                "type": "gofa-zone-set",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "",
                "robot": "cfg1",
                "zone": "fine",
                "x": 2710,
                "y": 1182,
                "wires": [
                        [
                                "c1151de873c6733e"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "c1151de873c6733e",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "{ ok, zone:'z10' }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 1182,
                "wires": []
        },
        {
                "id": "43baaf3029b4b519",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "Stop Motion",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2475,
                "y": 1237,
                "wires": [
                        [
                                "558a62310d844b6d"
                        ]
                ]
        },
        {
                "id": "558a62310d844b6d",
                "type": "gofa-stop-motion",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "",
                "robot": "cfg1",
                "x": 2710,
                "y": 1237,
                "wires": [
                        [
                                "ab99f4b30f665005"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "ab99f4b30f665005",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "5469b15e8a5437be",
                "name": "{ ok, ack:'OK:STOP' }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 1237,
                "wires": []
        },
        {
                "id": "fac904f3b9367f13",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "Set Speed 75%",
                "props": [],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "x": 2475,
                "y": 1412,
                "wires": [
                        [
                                "f97f9f3f4c523597"
                        ]
                ]
        },
        {
                "id": "f97f9f3f4c523597",
                "type": "gofa-speed-set",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "",
                "robot": "cfg1",
                "speed": "100",
                "x": 2650,
                "y": 1412,
                "wires": [
                        [
                                "64e6c14877789e2c"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "64e6c14877789e2c",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "{ ok, action, speed }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2885,
                "y": 1412,
                "wires": []
        },
        {
                "id": "03102ef219d0cfbb",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "Read",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2485,
                "y": 1472,
                "wires": [
                        [
                                "8dc35b1d7671d4ee"
                        ]
                ]
        },
        {
                "id": "8dc35b1d7671d4ee",
                "type": "gofa-rapid-var-read",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "",
                "robot": "cfg1",
                "task": "T_ROB1",
                "module": "MainModule",
                "variable": "nTestVar",
                "x": 2650,
                "y": 1467,
                "wires": [
                        [
                                "a8e109eb4c26640e"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "a8e109eb4c26640e",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "{ ok, variable, value, source, stale?, warning? }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2885,
                "y": 1467,
                "wires": []
        },
        {
                "id": "1eb0c9f73c5d0d36",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "Write",
                "props": [],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "x": 2485,
                "y": 1572,
                "wires": [
                        [
                                "a98a0d95595e55e2"
                        ]
                ]
        },
        {
                "id": "a98a0d95595e55e2",
                "type": "gofa-rapid-var-write",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "",
                "robot": "cfg1",
                "variable": "nTestVar",
                "value": "9",
                "x": 2635,
                "y": 1577,
                "wires": [
                        [
                                "d81006a99626060d"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "d81006a99626060d",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "{ ok, variable, value } or { ok:false }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2870,
                "y": 1577,
                "wires": []
        },
        {
                "id": "dbf33f58110c8439",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "SYSTEM-INFO: RW version + ctrl identity  |  ELOG: controller event log  |  FILE-READ: download file  |  UPLOAD-MOD: deploy RAPID .mod  |  RAPID-TASKS: list RAPID tasks + modules loaded on the controller",
                "info": "",
                "x": 890,
                "y": 790,
                "wires": []
        },
        {
                "id": "c37c9b869ae726c0",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "System Info",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 845,
                "wires": [
                        [
                                "eaa6b6d92727eae9"
                        ]
                ]
        },
        {
                "id": "eaa6b6d92727eae9",
                "type": "gofa-system-info",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 845,
                "wires": [
                        [
                                "865a5a5916ad0c8f"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "865a5a5916ad0c8f",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "{ ok, rwVersion, ctrlId, ctrlType, ctrlMac }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 845,
                "wires": []
        },
        {
                "id": "9b205c394b861433",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "Read Elog",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 900,
                "wires": [
                        [
                                "3623f5cd5959379c"
                        ]
                ]
        },
        {
                "id": "3623f5cd5959379c",
                "type": "gofa-elog",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "",
                "robot": "cfg1",
                "domain": "1",
                "count": 10,
                "x": 960,
                "y": 900,
                "wires": [
                        [
                                "cc53309b8ee4604f"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "cc53309b8ee4604f",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "{ ok, domain, entries:[{code,title,tstamp}] }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 900,
                "wires": []
        },
        {
                "id": "e84f6c9ea63e8de9",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "Read MainModule.mod",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 955,
                "wires": [
                        [
                                "0cfc46a7f4b61ac3"
                        ]
                ]
        },
        {
                "id": "0cfc46a7f4b61ac3",
                "type": "gofa-file",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "",
                "robot": "cfg1",
                "remotePath": "$HOME/Programs/MainModule.mod",
                "encoding": "utf8",
                "x": 960,
                "y": 955,
                "wires": [
                        [
                                "579c13035cdcab3b"
                        ]
                ],
                "action": "download",
                "outputPayload": true
        },
        {
                "id": "579c13035cdcab3b",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "{ ok, remotePath, content, bytes }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 955,
                "wires": []
        },
        {
                "id": "effe9d98cc2e5185",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "Upload MainModule.mod (update path!)",
                "props": [],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "x": 725,
                "y": 1010,
                "wires": [
                        [
                                "ebd2235e8af0ab09"
                        ]
                ]
        },
        {
                "id": "ebd2235e8af0ab09",
                "type": "gofa-file",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "",
                "robot": "cfg1",
                "localPath": "C:\\Users\\RD2\\nnnn\\node-red-contrib-abb-gofa\\rapid\\MainModule.mod",
                "remotePath": "$HOME/Programs/MainModuleTest.mod",
                "x": 960,
                "y": 1010,
                "wires": [
                        [
                                "a87f21b85f254699"
                        ]
                ],
                "action": "upload",
                "outputPayload": true
        },
        {
                "id": "a87f21b85f254699",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "{ ok, remotePath, bytes }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1010,
                "wires": []
        },
        {
                "id": "08a06617e3edef90",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "List Tasks & Modules",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1065,
                "wires": [
                        [
                                "4ea80dd2a7e06eda"
                        ]
                ]
        },
        {
                "id": "4ea80dd2a7e06eda",
                "type": "gofa-rapid-tasks",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "",
                "robot": "cfg1",
                "task": "T_ROB1",
                "x": 960,
                "y": 1065,
                "wires": [
                        [
                                "27a80d5a9bd823a6"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "27a80d5a9bd823a6",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "0c6d1a0571c4d1c6",
                "name": "{ ok, tasks, task, modules }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1065,
                "wires": []
        },
        {
                "id": "1074c9c3ad32d19c",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "IO-LIST: enumerate all signals  |  DI-READ: digital in  |  DO-WRITE: digital out via RWS POST .../set-value — needs an I/O board (e.g. DSQC1030) with the signal's Access Level set to All in RobotStudio, else 403",
                "info": "",
                "x": 890,
                "y": 1185,
                "wires": []
        },
        {
                "id": "dae43c1e5c2f6129",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "List All Signals",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1240,
                "wires": [
                        [
                                "978e7132586df8ef"
                        ]
                ]
        },
        {
                "id": "978e7132586df8ef",
                "type": "gofa-io-list",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 1240,
                "wires": [
                        [
                                "13e89fe7c62f25d5"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "13e89fe7c62f25d5",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "{ ok, count, signals:[{name,type,lvalue}] }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1240,
                "wires": []
        },
        {
                "id": "2af8e5f152d995c7",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "Read Asi1Button1",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1295,
                "wires": [
                        [
                                "5aeec4a42d3fb34c"
                        ]
                ]
        },
        {
                "id": "5aeec4a42d3fb34c",
                "type": "gofa-di-read",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "",
                "robot": "cfg1",
                "signal": "Asi1Button1",
                "x": 960,
                "y": 1295,
                "wires": [
                        [
                                "0747f7e03efa639d"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "0747f7e03efa639d",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "{ ok, signal, value:0|1 }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1295,
                "wires": []
        },
        {
                "id": "ec557c787980d761",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "ABB_Scalable_IO_0_DO1 = 1",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "1",
                "payloadType": "num",
                "x": 725,
                "y": 1405,
                "wires": [
                        [
                                "3a99ba87d8098a2b"
                        ]
                ]
        },
        {
                "id": "3a99ba87d8098a2b",
                "type": "gofa-do-write",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "",
                "robot": "cfg1",
                "signal": "ABB_Scalable_IO_0_DO1",
                "value": "1",
                "x": 960,
                "y": 1405,
                "wires": [
                        [
                                "9e20ad06b9525264"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "9e20ad06b9525264",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "{ ok, signal, value } or { ok:false }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1405,
                "wires": []
        },
        {
                "id": "f4bf030b193984d3",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "1fd0eb48da704295",
                "name": "Enable/disable robot lead-through (hand-guiding) via RWS  |  Requires manual mode + enable switch held on FlexPendant",
                "info": "",
                "x": 890,
                "y": 1580,
                "wires": []
        },
        {
                "id": "2775041ecbf3469a",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "1fd0eb48da704295",
                "name": "Enable Lead-through",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1635,
                "wires": [
                        [
                                "d8eeb5ac67fe8f3d"
                        ]
                ]
        },
        {
                "id": "d8eeb5ac67fe8f3d",
                "type": "gofa-leadthrough",
                "z": "a520b411b857ec3c",
                "g": "1fd0eb48da704295",
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 1635,
                "wires": [
                        [
                                "e0eded77c68b6636"
                        ]
                ],
                "action": "enable",
                "outputPayload": true
        },
        {
                "id": "e0eded77c68b6636",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "1fd0eb48da704295",
                "name": "{ ok:true }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1635,
                "wires": []
        },
        {
                "id": "cab52e59a6579f9d",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "1fd0eb48da704295",
                "name": "Disable Lead-through",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1690,
                "wires": [
                        [
                                "4b4fca9e323e4337"
                        ]
                ]
        },
        {
                "id": "4b4fca9e323e4337",
                "type": "gofa-leadthrough",
                "z": "a520b411b857ec3c",
                "g": "1fd0eb48da704295",
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 1690,
                "wires": [
                        [
                                "177a08b6dbebd6d3"
                        ]
                ],
                "action": "disable",
                "outputPayload": true
        },
        {
                "id": "177a08b6dbebd6d3",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "1fd0eb48da704295",
                "name": "{ ok:true }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1690,
                "wires": []
        },
        {
                "id": "f8797db9926ecdf2",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "8cd35590d4a969bd",
                "name": "EXPORT: dump saved-points list to msg.payload  |  IMPORT: replace list from msg.payload array (connect Export output to Import input for backup/restore)",
                "info": "",
                "x": 4600,
                "y": 385,
                "wires": []
        },
        {
                "id": "0b55fccd776237cd",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "8cd35590d4a969bd",
                "name": "Export Points",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 4435,
                "y": 440,
                "wires": [
                        [
                                "163315dd06328736"
                        ]
                ]
        },
        {
                "id": "163315dd06328736",
                "type": "gofa-points",
                "z": "a520b411b857ec3c",
                "g": "8cd35590d4a969bd",
                "name": "",
                "robot": "cfg1",
                "x": 4670,
                "y": 440,
                "wires": [
                        [
                                "4dc67eca9254b849"
                        ]
                ],
                "action": "export",
                "path": "NoPoint",
                "outputPayload": true
        },
        {
                "id": "4dc67eca9254b849",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "8cd35590d4a969bd",
                "name": "{ ok, count, points:[...] }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 4905,
                "y": 440,
                "wires": []
        },
        {
                "id": "b81421c84a4e2094",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "8cd35590d4a969bd",
                "name": "Import [] (clear all)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "[]",
                "payloadType": "json",
                "x": 4435,
                "y": 495,
                "wires": [
                        [
                                "c149c842494bdf01"
                        ]
                ]
        },
        {
                "id": "c149c842494bdf01",
                "type": "gofa-points",
                "z": "a520b411b857ec3c",
                "g": "8cd35590d4a969bd",
                "name": "",
                "robot": "cfg1",
                "x": 4670,
                "y": 495,
                "wires": [
                        [
                                "176dc3c277bf8ada"
                        ]
                ],
                "action": "import",
                "path": "2Point",
                "outputPayload": true
        },
        {
                "id": "176dc3c277bf8ada",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "8cd35590d4a969bd",
                "name": "{ ok, count }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 4905,
                "y": 495,
                "wires": []
        },
        {
                "id": "1ca00946206eeafb",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "STATE/IO: WebSocket push from controller  |  VAR/POSE: polling (toggle on/off with any input)  |  Messages stream to debug until toggled off or redeployed",
                "info": "",
                "x": 890,
                "y": 1810,
                "wires": []
        },
        {
                "id": "83df9ed99783d985",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "Subscribe ctrl-state",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1865,
                "wires": [
                        [
                                "ebb541122994653a"
                        ]
                ]
        },
        {
                "id": "ebb541122994653a",
                "type": "gofa-subscribe-state",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "",
                "robot": "cfg1",
                "oneshot": true,
                "x": 960,
                "y": 1865,
                "wires": [
                        [
                                "398a6fed063bb10a"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "398a6fed063bb10a",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "{ ok, state:'motoron'|'motoroff'|... }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1210,
                "y": 1870,
                "wires": []
        },
        {
                "id": "29e343610d4f1e5a",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "Subscribe Asi1Button1",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1920,
                "wires": [
                        [
                                "5622d1be6dfdcb92"
                        ]
                ]
        },
        {
                "id": "5622d1be6dfdcb92",
                "type": "gofa-subscribe-io",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "",
                "robot": "cfg1",
                "signal": "Asi1Button1",
                "oneshot": true,
                "x": 960,
                "y": 1920,
                "wires": [
                        [
                                "8c207bb882c398a4"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "8c207bb882c398a4",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "{ ok, signal, value:0|1 }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1920,
                "wires": []
        },
        {
                "id": "37dc499ffa4a43a6",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "Toggle poll zActive",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 1975,
                "wires": [
                        [
                                "8ca53a7aa3ac77f5"
                        ]
                ]
        },
        {
                "id": "8ca53a7aa3ac77f5",
                "type": "gofa-subscribe-var",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "",
                "robot": "cfg1",
                "task": "T_ROB1",
                "module": "MainModule",
                "variable": "zActive",
                "interval": "1000",
                "x": 960,
                "y": 1975,
                "wires": [
                        [
                                "00b7eaaefef41217"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "00b7eaaefef41217",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "{ ok, variable, value, source, stale?, warning? }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 1975,
                "wires": []
        },
        {
                "id": "65d5cfd837516be5",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "Toggle poll pose",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 2030,
                "wires": [
                        [
                                "e705c98c2351e234"
                        ]
                ]
        },
        {
                "id": "e705c98c2351e234",
                "type": "gofa-subscribe-pose",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "",
                "robot": "cfg1",
                "interval": "500",
                "x": 960,
                "y": 2030,
                "wires": [
                        [
                                "afbcc99795890248"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "afbcc99795890248",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "{ ok, x, y, z, q1, q2, q3, q4 }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 2030,
                "wires": []
        },
        {
                "id": "5e6ace1c877d175c",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "1edb510d0e1876f8",
                "name": "⚠ DO Write needs an I/O board (e.g. DSQC1030 Scalable I/O) with the target signal's Access Level set to All in RobotStudio (Controller → Configuration → I/O System → Signal) — otherwise RWS rejects the write with 403. No analog I/O exists on this controller (gofa-ai-read/gofa-ao-write were removed).",
                "info": "",
                "x": 940,
                "y": 1315,
                "wires": []
        },
        {
                "id": "e61e7d7c6f24badc",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "RAPID-EXEC: start / stop / resetpp / loadmod / activate the RAPID program  |  Requires Remote Start/Stop UAS grant (RobotStudio → Edit User Accounts) + Auto mode + Motors on  |  resetpp, loadmod, and activate acquire edit mastership automatically  |  loadmod/activate require RAPID to be STOPPED (confirmed live — HTTP 403 while running) — stop first, then loadmod/activate, then start again",
                "info": "",
                "x": 935,
                "y": 2150,
                "wires": []
        },
        {
                "id": "9d1746004d14ee01",
                "type": "gofa-rapid-exec",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "",
                "robot": "cfg1",
                "action": "resetpp",
                "x": 925,
                "y": 2245,
                "wires": [
                        [
                                "42bbf550e1152031"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "42bbf550e1152031",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "{ ok, action } or { ok:false, error }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1165,
                "y": 2245,
                "wires": []
        },
        {
                "id": "91f4907292809160",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "Reset Program",
                "props": [
                        {
                                "p": "payload"
                        },
                        {
                                "p": "topic",
                                "vt": "str"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 735,
                "y": 2245,
                "wires": [
                        [
                                "9d1746004d14ee01"
                        ]
                ]
        },
        {
                "id": "a97108324650ea50",
                "type": "gofa-rapid-exec",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "",
                "robot": "cfg1",
                "action": "start",
                "x": 885,
                "y": 2305,
                "wires": [
                        [
                                "ce18bcbff97f011f"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "ce18bcbff97f011f",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "{ ok, action } or { ok:false, error }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1165,
                "y": 2305,
                "wires": []
        },
        {
                "id": "ab1f53237968ab7e",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "Start RAPID",
                "props": [
                        {
                                "p": "payload"
                        },
                        {
                                "p": "topic",
                                "vt": "str"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 2305,
                "wires": [
                        [
                                "a97108324650ea50"
                        ]
                ]
        },
        {
                "id": "27e08a030cc09a37",
                "type": "gofa-rapid-exec",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "",
                "robot": "cfg1",
                "action": "stop",
                "x": 885,
                "y": 2365,
                "wires": [
                        [
                                "9f23ad4ee2dd852b"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "9f23ad4ee2dd852b",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "{ ok, action } or { ok:false, error }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "statusVal": "",
                "statusType": "auto",
                "x": 1165,
                "y": 2365,
                "wires": []
        },
        {
                "id": "9f5d196254062b88",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "Stop RAPID",
                "props": [
                        {
                                "p": "payload"
                        },
                        {
                                "p": "topic",
                                "vt": "str"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 2365,
                "wires": [
                        [
                                "27e08a030cc09a37"
                        ]
                ]
        },
        {
                "id": "7d815b2f956cc198",
                "type": "gofa-rapid-exec",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "",
                "robot": "cfg1",
                "action": "loadmod",
                "task": "T_ROB1",
                "modulePath": "$HOME/Programs/MainModule.mod",
                "replace": true,
                "module": "",
                "x": 895,
                "y": 2425,
                "wires": [
                        [
                                "a6518f5e6f9499be"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "a6518f5e6f9499be",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "{ ok, action, task, modulePath, module } or { ok:false, error }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1215,
                "y": 2425,
                "wires": []
        },
        {
                "id": "2fa9f8fa83791f70",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "Load Module",
                "props": [
                        {
                                "p": "payload"
                        },
                        {
                                "p": "topic",
                                "vt": "str"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 735,
                "y": 2425,
                "wires": [
                        [
                                "7d815b2f956cc198"
                        ]
                ]
        },
        {
                "id": "3bdc296c41906f5e",
                "type": "gofa-rapid-exec",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "",
                "robot": "cfg1",
                "action": "activate",
                "task": "T_ROB1",
                "module": "MainModule",
                "x": 905,
                "y": 2485,
                "wires": [
                        [
                                "285769f68e0deca0"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "285769f68e0deca0",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "{ ok, action, task, module } or { ok:false, error }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1225,
                "y": 2485,
                "wires": []
        },
        {
                "id": "33ae8386ac91e848",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "b8c71f7a58a6d882",
                "name": "Activate Module",
                "props": [
                        {
                                "p": "payload"
                        },
                        {
                                "p": "topic",
                                "vt": "str"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 745,
                "y": 2485,
                "wires": [
                        [
                                "3bdc296c41906f5e"
                        ]
                ]
        },
        {
                "id": "c813baa42e7484f7",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "Read",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2485,
                "y": 1512,
                "wires": [
                        [
                                "31e5e6e65886b54b"
                        ]
                ]
        },
        {
                "id": "31e5e6e65886b54b",
                "type": "gofa-rapid-var-read",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "",
                "robot": "cfg1",
                "task": "T_ROB1",
                "module": "MainModule",
                "variable": "sTestMsg",
                "x": 2645,
                "y": 1517,
                "wires": [
                        [
                                "05832570b4225120"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "05832570b4225120",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "{ ok, variable, value, source, stale?, warning? }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2880,
                "y": 1517,
                "wires": []
        },
        {
                "id": "128225c4a4d600c6",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "{ ok, variable, value } or { ok:false }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2890,
                "y": 1637,
                "wires": []
        },
        {
                "id": "688dd4814bb8bf6f",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "Write",
                "props": [],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "x": 2485,
                "y": 1632,
                "wires": [
                        [
                                "aa2145cb4b0a7ce2"
                        ]
                ]
        },
        {
                "id": "aa2145cb4b0a7ce2",
                "type": "gofa-rapid-var-write",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "",
                "robot": "cfg1",
                "variable": "sTestMsg",
                "value": "jwdwdd",
                "x": 2630,
                "y": 1637,
                "wires": [
                        [
                                "128225c4a4d600c6"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "47770e0abd4258c6",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "SPEED: override 1–100%  |  GETVAR/SETVAR: read/write a RAPID PERS variable by name — built-in test vars: nTestVar (num), sTestMsg (string)  |  bStopMotion below is NOT allow-listed — demonstrates the stale module-text fallback",
                "info": "",
                "x": 2640,
                "y": 1357,
                "wires": []
        },
        {
                "id": "94fe4d2d0b721143",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "Read bStopMotion (not allow-listed)",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 2485,
                "y": 1692,
                "wires": [
                        [
                                "5429677fabe5d3e4"
                        ]
                ]
        },
        {
                "id": "5429677fabe5d3e4",
                "type": "gofa-rapid-var-read",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "bStopMotion (stale demo)",
                "robot": "cfg1",
                "task": "T_ROB1",
                "module": "MainModule",
                "variable": "bStopMotion",
                "x": 2650,
                "y": 1692,
                "wires": [
                        [
                                "8c0f52ef41a5de81"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "8c0f52ef41a5de81",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "{ ok, variable, value, source:\"module-text\", stale:true, warning }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2885,
                "y": 1692,
                "wires": []
        },
        {
                "id": "4d1142a0b0ac9d66",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "fafb15f93f64a3a5",
                "name": "Look up a saved point by name/id and move to it via GOTOJ/GOTOL  |  msg.payload.moveType: \"J\" (default, joint-interpolated) or \"L\" (linear)  |  Left: Storage=Local  |  Right: Storage=On-Robot",
                "info": "",
                "x": 2640,
                "y": 1812,
                "wires": []
        },
        {
                "id": "6f9a8d3643423c12",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "d11bddb54bb63ffb",
                "name": "SETLED: color + optional hardware blink period  |  RESETLED: restore default solid green  |  blinkCount>0 runs a software-timed blink instead of the hardware period",
                "info": "",
                "x": 2640,
                "y": 2272,
                "wires": []
        },
        {
                "id": "6d68920b93c068c7",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "d11bddb54bb63ffb",
                "name": "{ ok, r, g, b, blinks }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 2327,
                "wires": []
        },
        {
                "id": "17947859975bc08a",
                "type": "gofa-asi-led",
                "z": "a520b411b857ec3c",
                "g": "d11bddb54bb63ffb",
                "name": "Set Yellow Blink",
                "robot": "cfg1",
                "red": 0,
                "grn": 0,
                "blu": 0,
                "period": 0,
                "blinkCount": 0,
                "blinkMs": 250,
                "x": 2710,
                "y": 2327,
                "wires": [
                        [
                                "6d68920b93c068c7"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "d8272f3afedc2e2b",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "d11bddb54bb63ffb",
                "name": "Set Yellow Blink",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "{\"color\":\"yellow\",\"blinkCount\":3,\"blinkMs\":250}",
                "payloadType": "json",
                "x": 2475,
                "y": 2327,
                "wires": [
                        [
                                "17947859975bc08a"
                        ]
                ]
        },
        {
                "id": "1bc1a2da10856fd5",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "d11bddb54bb63ffb",
                "name": "{ ok, reset:true }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2945,
                "y": 2382,
                "wires": []
        },
        {
                "id": "d82ffe306ec54c12",
                "type": "gofa-asi-led",
                "z": "a520b411b857ec3c",
                "g": "d11bddb54bb63ffb",
                "name": "Reset LED",
                "robot": "cfg1",
                "red": 0,
                "grn": 0,
                "blu": 0,
                "period": 0,
                "blinkCount": 0,
                "blinkMs": 250,
                "x": 2710,
                "y": 2382,
                "wires": [
                        [
                                "1bc1a2da10856fd5"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "aff252b80db6b0fa",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "d11bddb54bb63ffb",
                "name": "Reset LED",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "reset",
                "payloadType": "str",
                "x": 2475,
                "y": 2382,
                "wires": [
                        [
                                "d82ffe306ec54c12"
                        ]
                ]
        },
        {
                "id": "6e55bd3b02f94554",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "feec6542cfd99499",
                "name": "List all saved points, or remove one by name/id  |  Left column: Storage=Local, points.json on the Node-RED host  |  Right column: Storage=On-Robot, JSON file on the robot's own disk via RWS",
                "info": "",
                "x": 4600,
                "y": 100,
                "wires": []
        },
        {
                "id": "b3e23309e9d15dcd",
                "type": "comment",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "Start/Stop EGM via the Action dropdown (bare date-payload injects, same pattern as gofa-motor's Motors ON/OFF). Sine-sweep function node feeds a live target into gofa-egm-move, which forwards it to the active session (output 1) or falls back to a normal gofa-movej TCP move (output 2) if EGM isn't running.",
                "info": "",
                "x": 4800,
                "y": 870,
                "wires": []
        },
        {
                "id": "45e54e7f8b3dd7e6",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "Start EGM",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 4480,
                "y": 920,
                "wires": [
                        [
                                "1cebd988d37a0389"
                        ]
                ]
        },
        {
                "id": "1cebd988d37a0389",
                "type": "gofa-egm",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "",
                "robot": "cfg1",
                "action": "start",
                "udpPort": 6510,
                "throttleMs": 100,
                "x": 4720,
                "y": 920,
                "wires": [
                        [
                                "319180765be4ddd6",
                                "4f2fefb0e67c653a"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "10546e9e6656422d",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "Stop EGM",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 4480,
                "y": 990,
                "wires": [
                        [
                                "8035823922e247e0"
                        ]
                ]
        },
        {
                "id": "8035823922e247e0",
                "type": "gofa-egm",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "",
                "robot": "cfg1",
                "action": "stop",
                "udpPort": 6510,
                "throttleMs": 100,
                "x": 4720,
                "y": 990,
                "wires": [
                        []
                ],
                "outputPayload": true
        },
        {
                "id": "319180765be4ddd6",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "{ joints, seqno, ... }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 4970,
                "y": 900,
                "wires": []
        },
        {
                "id": "4f2fefb0e67c653a",
                "type": "function",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "Sine sweep joint 6 (±3°, 8s) -> feeds into gofa-egm-move",
                "func": "// Mirrors gofa-egm-python's nudge_joint.py: capture the pose on the\n// first feedback frame as baseline, then offset one joint with a smooth\n// sine so it returns to baseline on its own every 8s. Baseline/start are\n// stored in this node's own context, captured once per Node-RED restart\n// or redeploy (context is cleared then) -- re-pressing \"Start EGM\" after\n// a \"Stop EGM\" without redeploying resumes the same sweep rather than\n// re-baselining, which is fine for this demo.\nvar joints = msg.payload && msg.payload.joints;\nif (!Array.isArray(joints) || joints.length !== 6) return null;\n\nif (context.get('baseline') === undefined) {\n    context.set('baseline', joints);\n    context.set('start', Date.now());\n}\n\nvar baseline = context.get('baseline');\nvar elapsed = (Date.now() - context.get('start')) / 1000;\nvar target = baseline.slice();\ntarget[5] = target[5] + 3 * Math.sin(2 * Math.PI * elapsed / 8);\n\nmsg.payload = target;\nreturn msg;",
                "outputs": 1,
                "timeout": 0,
                "noerr": 0,
                "initialize": "",
                "finalize": "",
                "libs": [],
                "x": 5090,
                "y": 980,
                "wires": [
                        [
                                "3f5c96968e34cc50"
                        ]
                ]
        },
        {
                "id": "3f5c96968e34cc50",
                "type": "gofa-egm-move",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "",
                "robot": "cfg1",
                "x": 5410,
                "y": 980,
                "wires": [
                        [
                                "a1cfe1a20752a8c5"
                        ],
                        [
                                "db10ff8f9f4d3923"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "a1cfe1a20752a8c5",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "target sent (EGM active)",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 5670,
                "y": 920,
                "wires": []
        },
        {
                "id": "db10ff8f9f4d3923",
                "type": "gofa-movej",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "Fallback: MOVEJ (EGM not active)",
                "robot": "cfg1",
                "joints": "[0,0,85,0,0,0]",
                "x": 5660,
                "y": 980,
                "wires": [
                        [
                                "8e1c1e3158ea690c"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "8e1c1e3158ea690c",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "d985d2ec6155d7fe",
                "name": "{ ok, joints } (fallback move result)",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 5980,
                "y": 980,
                "wires": []
        },
        {
                "id": "cfg1",
                "type": "gofa-robot",
                "name": "ABB-GoFa-12",
                "ip": "192.168.125.1",
                "rwsPort": "443",
                "socketPort": "1025",
                "username": "Default User",
                "remotePointsPath": "$HOME/Programs/gofa_points.json",
                "backgroundPort": "1026",
                "jointLimits": "",
                "allowInsecureLiveControl": false
        },
        {
                "id": "de08822d969e37be",
                "type": "global-config",
                "env": [],
                "modules": {
                        "node-red-contrib-abb-gofa": "2.2.3"
                }
        },
        {
                "id": "0b3f4cc207a82ba2",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "Subscribe Elog",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 2085,
                "wires": [
                        [
                                "b567e48ac4cbd2c6"
                        ]
                ]
        },
        {
                "id": "b567e48ac4cbd2c6",
                "type": "gofa-subscribe-elog",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "",
                "robot": "cfg1",
                "domain": "1",
                "minSeverity": "1",
                "x": 960,
                "y": 2085,
                "wires": [
                        [
                                "32fb7047f03bd862"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "32fb7047f03bd862",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "50ac319274bc98bd",
                "name": "{ ok, domain, entry:{code,title,tstamp} }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1230,
                "y": 2085,
                "wires": []
        },
        {
                "id": "setupadmgrp01",
                "type": "group",
                "z": "a520b411b857ec3c",
                "name": "4 - Setup & Admin",
                "style": {
                        "stroke": "#0099cc",
                        "stroke-opacity": "1",
                        "fill": "#e8f4f8",
                        "fill-opacity": "0.5",
                        "label": true,
                        "label-position": "nw",
                        "color": "#0099cc"
                },
                "nodes": [
                        "setupinj01",
                        "setupnod01",
                        "setupdbg01",
                        "connsinj01",
                        "connsnod01",
                        "connsdbg01",
                        "modedinj01",
                        "modednod01",
                        "modeddbg01"
                ],
                "x": 663,
                "y": 2570,
                "w": 760,
                "h": 200
        },
        {
                "id": "setupinj01",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "name": "Run One-Click Setup",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 2600,
                "wires": [
                        [
                                "setupnod01"
                        ]
                ]
        },
        {
                "id": "setupnod01",
                "type": "gofa-setup",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "outputPayload": true,
                "name": "",
                "robot": "cfg1",
                "module": "MainModule",
                "task": "T_ROB1",
                "x": 960,
                "y": 2600,
                "wires": [
                        [
                                "setupdbg01"
                        ]
                ]
        },
        {
                "id": "setupdbg01",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "name": "{ ok, steps: [{name, ok, detail}] }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 2600,
                "wires": []
        },
        {
                "id": "connsinj01",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "name": "Check Connection",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 2660,
                "wires": [
                        [
                                "connsnod01"
                        ]
                ]
        },
        {
                "id": "connsnod01",
                "type": "gofa-connection-status",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "outputPayload": true,
                "name": "",
                "robot": "cfg1",
                "x": 960,
                "y": 2660,
                "wires": [
                        [
                                "connsdbg01"
                        ]
                ]
        },
        {
                "id": "connsdbg01",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "name": "{ overall, rws, socket }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 2660,
                "wires": []
        },
        {
                "id": "modedinj01",
                "type": "inject",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "name": "Re-upload Edited File",
                "props": [
                        {
                                "p": "payload"
                        }
                ],
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "x": 725,
                "y": 2720,
                "wires": [
                        [
                                "modednod01"
                        ]
                ]
        },
        {
                "id": "modednod01",
                "type": "gofa-mod-edit",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "outputPayload": true,
                "name": "",
                "robot": "cfg1",
                "remotePath": "$HOME/Programs/gofa_demo_note.mod",
                "content": "MODULE GofaDemoNote\n    ! Written by the gofa-mod-edit demo node.\n    ! Open this node to browse/edit files on the controller.\nENDMODULE\n",
                "x": 960,
                "y": 2720,
                "wires": [
                        [
                                "modeddbg01"
                        ]
                ]
        },
        {
                "id": "modeddbg01",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "setupadmgrp01",
                "name": "{ ok, remotePath, bytes }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 1195,
                "y": 2720,
                "wires": []
        },
        {
                "id": "aa29f273b40d8291",
                "type": "gofa-speed-set",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "Read Speed",
                "robot": "cfg1",
                "action": "read",
                "x": 2650,
                "y": 1452,
                "wires": [
                        [
                                "bc93e819fa24785b"
                        ]
                ],
                "outputPayload": true
        },
        {
                "id": "bc93e819fa24785b",
                "type": "debug",
                "z": "a520b411b857ec3c",
                "g": "7f67148b43e52842",
                "name": "{ ok, action:'read', speed }",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "payload",
                "targetType": "msg",
                "x": 2885,
                "y": 1452,
                "wires": []
        }
]
