{"id":718,"date":"2023-07-28T14:19:10","date_gmt":"2023-07-28T19:19:10","guid":{"rendered":"https:\/\/n1ofz.rawding.com\/?p=718"},"modified":"2023-12-01T14:12:30","modified_gmt":"2023-12-01T19:12:30","slug":"macdoppler-multi-rig-control","status":"publish","type":"post","link":"https:\/\/n1ofz.rawding.com\/?p=718","title":{"rendered":"MacDoppler Multi Rig Control"},"content":{"rendered":"\n<p>With the FT-847 down (see the last <a href=\"https:\/\/n1ofz.rawding.com\/?p=708\">SSTV experiment)<\/a> I needed a way to have a radio simultaneously listening on one band and transmitting on another.  There are not many radios on the market that are able to do this and I think the IC-9700 is the only one in production.  I also don&#8217;t have $1800 to drop on a new IC-9700.  So I wanted to look at other options.<\/p>\n\n\n\n<p>Well it seems that MacDoppler has some support for just this situation.  You can run an instance of MacDoppler that rather than controls a rig, sends out the uplink\/downlink data via UDP.  Dog Park Software also has another app called MacDopplerRadios which allows you to connect to one radio for transmitting and another for receiving.  You could even have these radios on two different computers.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"592\" src=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.07.21-PM-1024x592.png\" alt=\"\" class=\"wp-image-720\" srcset=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.07.21-PM-1024x592.png 1024w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.07.21-PM-300x174.png 300w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.07.21-PM-768x444.png 768w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.07.21-PM-1536x888.png 1536w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.07.21-PM-2048x1185.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Here is a Mac with a FT-991A and an IC-7100 via MacDopplerRadios.  I&#8217;m using the FT-991A for the downlink and the IC-7100 for uplink.<\/p>\n\n\n\n<p>But that wasn&#8217;t enough for me.  Why not use a software defined radio (SDR) for downlink?  You get a nice pan adapter to view signals.  The issue is that the UDP output from MacDoppler is not compatible with any SDR applications.  So I set out to write a translator that takes the UDP output and converts it into a rigctl command.  Rigctl is part of the open source hamlibs and is supported by many programs like GQRX and sdrangel.  <\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.03.34-PM-1024x444.png\" alt=\"\" class=\"wp-image-721\" srcset=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.03.34-PM-1024x444.png 1024w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.03.34-PM-300x130.png 300w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.03.34-PM-768x333.png 768w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.03.34-PM-1536x666.png 1536w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-2.03.34-PM-2048x888.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<p>I wanted something that was quick to develop and deploy so I looked into a familiar platform, Node-Red. There is support for UDP in and out. Dog Park provides good documentation for the UDP broadcast so it was easy to find that it uses port 9932. So I created a listener for that port and then parse the broadcasts. I display the decoded data to a Node-Red web page and send out the downlink frequency and radio mode to a specified IP address to control the SDR. In this case I&#8217;m sending it to another Mac running sdrangel controlling a RSPdx SDR receiver.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-350\" src=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-1.58.08-PM-1024x791.png\" alt=\"\" width=\"400\"><img decoding=\"async\" src=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-1.57.44-PM-1024x788.png\" width=\"400\"><\/p>\n\n\n<p>Above are a couple pics of the Node-Red dashboard and MacDoppler behind it sending out the UDP.  The flow is located at the bottom of this post.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-3.03.16-PM-1024x559.png\" alt=\"\" class=\"wp-image-724\" srcset=\"https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-3.03.16-PM-1024x559.png 1024w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-3.03.16-PM-300x164.png 300w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-3.03.16-PM-768x419.png 768w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-3.03.16-PM-1536x838.png 1536w, https:\/\/n1ofz.rawding.com\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-28-at-3.03.16-PM-2048x1118.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Here is sdrangel being doppler corrected via my Node-Red middleware.  So the end result is now I have a couple of options to use while I figure out what to do with the FT-847.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;\n    {\n        \"id\": \"3057caa6d21dfee9\",\n        \"type\": \"tab\",\n        \"label\": \"Flow 1\",\n        \"disabled\": false,\n        \"info\": \"\",\n        \"env\": &#91;]\n    },\n    {\n        \"id\": \"a9ee49be4cc956c6\",\n        \"type\": \"udp in\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"iface\": \"\",\n        \"port\": \"9932\",\n        \"ipv\": \"udp4\",\n        \"multicast\": \"false\",\n        \"group\": \"\",\n        \"datatype\": \"utf8\",\n        \"x\": 60,\n        \"y\": 100,\n        \"wires\": &#91;\n            &#91;\n                \"6f85ad569a2c5ea0\",\n                \"8fa90f318ab10429\",\n                \"435cfd5ea3a849f9\",\n                \"965022efef60b04c\",\n                \"0cc355e842e87f5b\",\n                \"c33923cbab069e53\",\n                \"ce65baa0401c0980\",\n                \"42b410e99589af06\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"435cfd5ea3a849f9\",\n        \"type\": \"debug\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"debug 1\",\n        \"active\": true,\n        \"tosidebar\": true,\n        \"console\": false,\n        \"tostatus\": false,\n        \"complete\": \"payload\",\n        \"targetType\": \"msg\",\n        \"statusVal\": \"\",\n        \"statusType\": \"auto\",\n        \"x\": 140,\n        \"y\": 400,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"681989db1373f647\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 8,\n        \"width\": 3,\n        \"height\": 1,\n        \"name\": \"\",\n        \"label\": \"Down\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-left\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": 16,\n        \"color\": \"#000000\",\n        \"x\": 410,\n        \"y\": 80,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"6f85ad569a2c5ea0\",\n        \"type\": \"string\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"methods\": &#91;\n            {\n                \"name\": \"between\",\n                \"params\": &#91;\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"Down Mhz:\"\n                    },\n                    {\n                        \"type\": \"str\",\n                        \"value\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"prop\": \"payload\",\n        \"propout\": \"payload\",\n        \"object\": \"msg\",\n        \"objectout\": \"msg\",\n        \"x\": 230,\n        \"y\": 80,\n        \"wires\": &#91;\n            &#91;\n                \"681989db1373f647\",\n                \"ab22d0157d65f14e\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"8fa90f318ab10429\",\n        \"type\": \"string\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"methods\": &#91;\n            {\n                \"name\": \"between\",\n                \"params\": &#91;\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"Up MHz:\"\n                    },\n                    {\n                        \"type\": \"str\",\n                        \"value\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"prop\": \"payload\",\n        \"propout\": \"payload\",\n        \"object\": \"msg\",\n        \"objectout\": \"msg\",\n        \"x\": 230,\n        \"y\": 160,\n        \"wires\": &#91;\n            &#91;\n                \"34b083707bdd16c4\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"965022efef60b04c\",\n        \"type\": \"string\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"methods\": &#91;\n            {\n                \"name\": \"between\",\n                \"params\": &#91;\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"Down Mode:\"\n                    },\n                    {\n                        \"type\": \"str\",\n                        \"value\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"prop\": \"payload\",\n        \"propout\": \"payload\",\n        \"object\": \"msg\",\n        \"objectout\": \"msg\",\n        \"x\": 230,\n        \"y\": 120,\n        \"wires\": &#91;\n            &#91;\n                \"623b57a6aecb2606\",\n                \"fec86768288fb1c0\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"623b57a6aecb2606\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 9,\n        \"width\": 1,\n        \"height\": 1,\n        \"name\": \"Down Mode\",\n        \"label\": \"\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-left\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": 16,\n        \"color\": \"#000000\",\n        \"x\": 430,\n        \"y\": 120,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"34b083707bdd16c4\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 5,\n        \"width\": 3,\n        \"height\": 1,\n        \"name\": \"\",\n        \"label\": \"Up\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-left\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": 16,\n        \"color\": \"#000000\",\n        \"x\": 410,\n        \"y\": 160,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"c9e254fb49defe0f\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 6,\n        \"width\": 1,\n        \"height\": 1,\n        \"name\": \"Up Mode\",\n        \"label\": \"\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-left\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": 16,\n        \"color\": \"#000000\",\n        \"x\": 420,\n        \"y\": 200,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"0cc355e842e87f5b\",\n        \"type\": \"string\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"methods\": &#91;\n            {\n                \"name\": \"between\",\n                \"params\": &#91;\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"Up Mode:\"\n                    },\n                    {\n                        \"type\": \"str\",\n                        \"value\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"prop\": \"payload\",\n        \"propout\": \"payload\",\n        \"object\": \"msg\",\n        \"objectout\": \"msg\",\n        \"x\": 230,\n        \"y\": 200,\n        \"wires\": &#91;\n            &#91;\n                \"c9e254fb49defe0f\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"c33923cbab069e53\",\n        \"type\": \"string\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"methods\": &#91;\n            {\n                \"name\": \"between\",\n                \"params\": &#91;\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"tone:\"\n                    },\n                    {\n                        \"type\": \"str\",\n                        \"value\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"prop\": \"payload\",\n        \"propout\": \"payload\",\n        \"object\": \"msg\",\n        \"objectout\": \"msg\",\n        \"x\": 230,\n        \"y\": 240,\n        \"wires\": &#91;\n            &#91;\n                \"8cdf9749f8b1499f\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"42b410e99589af06\",\n        \"type\": \"string\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"methods\": &#91;\n            {\n                \"name\": \"between\",\n                \"params\": &#91;\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"SatName:\"\n                    },\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"]\"\n                    }\n                ]\n            }\n        ],\n        \"prop\": \"payload\",\n        \"propout\": \"payload\",\n        \"object\": \"msg\",\n        \"objectout\": \"msg\",\n        \"x\": 230,\n        \"y\": 320,\n        \"wires\": &#91;\n            &#91;\n                \"0a16535c05404024\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"ce65baa0401c0980\",\n        \"type\": \"string\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"methods\": &#91;\n            {\n                \"name\": \"between\",\n                \"params\": &#91;\n                    {\n                        \"type\": \"str\",\n                        \"value\": \"ctone:\"\n                    },\n                    {\n                        \"type\": \"str\",\n                        \"value\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"prop\": \"payload\",\n        \"propout\": \"payload\",\n        \"object\": \"msg\",\n        \"objectout\": \"msg\",\n        \"x\": 230,\n        \"y\": 280,\n        \"wires\": &#91;\n            &#91;\n                \"646a6d1b767c4071\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"0a16535c05404024\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 2,\n        \"width\": 5,\n        \"height\": 1,\n        \"name\": \"\",\n        \"label\": \"Current Sat\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-left\",\n        \"className\": \"\",\n        \"style\": true,\n        \"font\": \"Arial,Arial,Helvetica,sans-serif\",\n        \"fontSize\": \"20\",\n        \"color\": \"#000000\",\n        \"x\": 430,\n        \"y\": 320,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"8cdf9749f8b1499f\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 11,\n        \"width\": 2,\n        \"height\": 1,\n        \"name\": \"\",\n        \"label\": \"Tone\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-spread\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": 16,\n        \"color\": \"#000000\",\n        \"x\": 410,\n        \"y\": 240,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"646a6d1b767c4071\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 12,\n        \"width\": 2,\n        \"height\": 1,\n        \"name\": \"\",\n        \"label\": \"CTone\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-spread\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": 16,\n        \"color\": \"#000000\",\n        \"x\": 410,\n        \"y\": 280,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"ccde0ea77c3fb24d\",\n        \"type\": \"inject\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"d\": true,\n        \"name\": \"\",\n        \"props\": &#91;\n            {\n                \"p\": \"payload\"\n            }\n        ],\n        \"repeat\": \"1\",\n        \"crontab\": \"\",\n        \"once\": true,\n        \"onceDelay\": 0.1,\n        \"topic\": \"\",\n        \"payload\": \"\",\n        \"payloadType\": \"str\",\n        \"x\": 90,\n        \"y\": 520,\n        \"wires\": &#91;\n            &#91;\n                \"fd23c2d1e8f2bc12\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"0e30bc3aef4cd1eb\",\n        \"type\": \"tcp request\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"server\": \"${RIGADDRESS}\",\n        \"port\": \"${RIGPORT}\",\n        \"out\": \"sit\",\n        \"ret\": \"string\",\n        \"splitc\": \" \",\n        \"newline\": \"\",\n        \"trim\": false,\n        \"tls\": \"\",\n        \"x\": 480,\n        \"y\": 520,\n        \"wires\": &#91;\n            &#91;\n                \"54fdcb8ff542df3b\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"fd23c2d1e8f2bc12\",\n        \"type\": \"function\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"get frequency\",\n        \"func\": \"msg.payload = \\\"f\\\\n\\\";\\nreturn msg;\\n\",\n        \"outputs\": 1,\n        \"noerr\": 0,\n        \"initialize\": \"\",\n        \"finalize\": \"\",\n        \"libs\": &#91;],\n        \"x\": 240,\n        \"y\": 520,\n        \"wires\": &#91;\n            &#91;\n                \"0e30bc3aef4cd1eb\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"0aab057cfc2f488e\",\n        \"type\": \"function\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"get mode\",\n        \"func\": \"msg.payload = \\\"m\\\\n\\\";\\nreturn msg;\\n\",\n        \"outputs\": 1,\n        \"noerr\": 0,\n        \"initialize\": \"\",\n        \"finalize\": \"\",\n        \"libs\": &#91;],\n        \"x\": 220,\n        \"y\": 560,\n        \"wires\": &#91;\n            &#91;\n                \"62828e95d66c61ec\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"54fdcb8ff542df3b\",\n        \"type\": \"function\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"frequency manipulation\",\n        \"func\": \"msg.payload = (msg.payload\/1000000).toFixed(6);\\nreturn msg;\",\n        \"outputs\": 1,\n        \"noerr\": 0,\n        \"initialize\": \"\",\n        \"finalize\": \"\",\n        \"libs\": &#91;],\n        \"x\": 770,\n        \"y\": 520,\n        \"wires\": &#91;\n            &#91;\n                \"29255d3df04085ce\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"62828e95d66c61ec\",\n        \"type\": \"tcp request\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"server\": \"${RIGADDRESS}\",\n        \"port\": \"${RIGPORT}\",\n        \"out\": \"sit\",\n        \"ret\": \"string\",\n        \"splitc\": \" \",\n        \"newline\": \"\",\n        \"tls\": \"\",\n        \"x\": 480,\n        \"y\": 560,\n        \"wires\": &#91;\n            &#91;\n                \"c93713360f45c229\",\n                \"8424b3fdec2a1e1b\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"c93713360f45c229\",\n        \"type\": \"function\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"mode manipulation - get mode\",\n        \"func\": \"\/\/do any needed mode manipulations here\\n\\nmsg.payload = msg.payload.substring(0, msg.payload.indexOf(\\\"\\\\n\\\"));\\n\\nreturn msg;\",\n        \"outputs\": 1,\n        \"noerr\": 0,\n        \"initialize\": \"\",\n        \"finalize\": \"\",\n        \"libs\": &#91;],\n        \"x\": 790,\n        \"y\": 560,\n        \"wires\": &#91;\n            &#91;\n                \"eead0dc019bcbf2a\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"8424b3fdec2a1e1b\",\n        \"type\": \"function\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"mode manipulation - get passband\",\n        \"func\": \"\/\/do any needed mode manipulations here\\n\\nmsg.payload = msg.payload.substring(msg.payload.indexOf(\\\"\\\\n\\\") + 1);\\n\\nreturn msg;\",\n        \"outputs\": 1,\n        \"noerr\": 0,\n        \"initialize\": \"\",\n        \"finalize\": \"\",\n        \"libs\": &#91;],\n        \"x\": 800,\n        \"y\": 600,\n        \"wires\": &#91;\n            &#91;\n                \"4b49553792b76f79\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"29255d3df04085ce\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"d\": true,\n        \"group\": \"\",\n        \"order\": 1,\n        \"width\": 0,\n        \"height\": 0,\n        \"name\": \"\",\n        \"label\": \"SDR Frequency\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"row-center\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": \"\",\n        \"color\": \"#000000\",\n        \"x\": 1000,\n        \"y\": 520,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"eead0dc019bcbf2a\",\n        \"type\": \"ui_text\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"d\": true,\n        \"group\": \"\",\n        \"order\": 2,\n        \"width\": 2,\n        \"height\": 2,\n        \"name\": \"\",\n        \"label\": \"Mode\",\n        \"format\": \"{{msg.payload}}\",\n        \"layout\": \"col-center\",\n        \"className\": \"\",\n        \"style\": false,\n        \"font\": \"\",\n        \"fontSize\": \"\",\n        \"color\": \"#000000\",\n        \"x\": 1030,\n        \"y\": 560,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"4b49553792b76f79\",\n        \"type\": \"ui_gauge\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"d\": true,\n        \"name\": \"\",\n        \"group\": \"\",\n        \"order\": 4,\n        \"width\": 2,\n        \"height\": 2,\n        \"gtype\": \"gage\",\n        \"title\": \"\",\n        \"label\": \"width\",\n        \"format\": \"{{value}}\",\n        \"min\": 0,\n        \"max\": \"4000\",\n        \"colors\": &#91;\n            \"#00b500\",\n            \"#00b500\",\n            \"#00b500\"\n        ],\n        \"seg1\": \"\",\n        \"seg2\": \"\",\n        \"diff\": false,\n        \"className\": \"\",\n        \"x\": 1030,\n        \"y\": 600,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"c83be611b0abd423\",\n        \"type\": \"inject\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"d\": true,\n        \"name\": \"\",\n        \"props\": &#91;\n            {\n                \"p\": \"payload\"\n            }\n        ],\n        \"repeat\": \"2\",\n        \"crontab\": \"\",\n        \"once\": true,\n        \"onceDelay\": \"0.5\",\n        \"topic\": \"\",\n        \"payload\": \"\",\n        \"payloadType\": \"str\",\n        \"x\": 90,\n        \"y\": 560,\n        \"wires\": &#91;\n            &#91;\n                \"0aab057cfc2f488e\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"ab22d0157d65f14e\",\n        \"type\": \"function\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"set frequency\",\n        \"func\": \"msg.payload = msg.payload * 1000000\\nmsg.payload = \\\"set_freq \\\"+msg.payload+\\\"\\\\n\\\";\\nreturn msg;\\n\",\n        \"outputs\": 1,\n        \"noerr\": 0,\n        \"initialize\": \"\",\n        \"finalize\": \"\",\n        \"libs\": &#91;],\n        \"x\": 560,\n        \"y\": 60,\n        \"wires\": &#91;\n            &#91;\n                \"d37fbbb1059f494a\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"d37fbbb1059f494a\",\n        \"type\": \"tcp out\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"host\": \"${RIGADDRESS}\",\n        \"port\": \"${RIGPORT}\",\n        \"beserver\": \"client\",\n        \"base64\": false,\n        \"end\": false,\n        \"tls\": \"\",\n        \"x\": 820,\n        \"y\": 60,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"fec86768288fb1c0\",\n        \"type\": \"function\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"set mode\",\n        \"func\": \"msg.payload = \\\"set_mode \\\" + msg.payload + \\\"\\\\n\\\";\\nreturn msg;\\n\",\n        \"outputs\": 1,\n        \"noerr\": 0,\n        \"initialize\": \"\",\n        \"finalize\": \"\",\n        \"libs\": &#91;],\n        \"x\": 580,\n        \"y\": 100,\n        \"wires\": &#91;\n            &#91;\n                \"68aa6d8ed52b3386\"\n            ]\n        ]\n    },\n    {\n        \"id\": \"68aa6d8ed52b3386\",\n        \"type\": \"tcp out\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"\",\n        \"host\": \"${RIGADDRESS}\",\n        \"port\": \"${RIGPORT}\",\n        \"beserver\": \"client\",\n        \"base64\": false,\n        \"end\": false,\n        \"tls\": \"\",\n        \"x\": 820,\n        \"y\": 100,\n        \"wires\": &#91;]\n    },\n    {\n        \"id\": \"d74974c3f714ffb5\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"359ae5ed2e1fb9a7\",\n        \"order\": 3,\n        \"width\": 1,\n        \"height\": 1\n    },\n    {\n        \"id\": \"ccf4e8bf63aadd7f\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"359ae5ed2e1fb9a7\",\n        \"order\": 5,\n        \"width\": 1,\n        \"height\": 1\n    },\n    {\n        \"id\": \"ba56a02563c05a24\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"359ae5ed2e1fb9a7\",\n        \"order\": 6,\n        \"width\": 1,\n        \"height\": 1\n    },\n    {\n        \"id\": \"edc1bbe28a90547c\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"359ae5ed2e1fb9a7\",\n        \"order\": 7,\n        \"width\": 1,\n        \"height\": 1\n    },\n    {\n        \"id\": \"20574cef60bc0014\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 1,\n        \"width\": 2,\n        \"height\": 1\n    },\n    {\n        \"id\": \"8e06d95815994aaa\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 3,\n        \"width\": 3,\n        \"height\": 1\n    },\n    {\n        \"id\": \"d9d83aa8582a2c95\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 7,\n        \"width\": 1,\n        \"height\": 1\n    },\n    {\n        \"id\": \"36a36834ceb109da\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 10,\n        \"width\": 1,\n        \"height\": 1\n    },\n    {\n        \"id\": \"5f0ce9cf1297e84a\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 13,\n        \"width\": 6,\n        \"height\": 1\n    },\n    {\n        \"id\": \"910ec9e1e5eb725f\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 16,\n        \"width\": 3,\n        \"height\": 1\n    },\n    {\n        \"id\": \"3eb93d90b53ae11c\",\n        \"type\": \"ui_spacer\",\n        \"z\": \"3057caa6d21dfee9\",\n        \"name\": \"spacer\",\n        \"group\": \"fa1a3e4363b5b21d\",\n        \"order\": 18,\n        \"width\": 3,\n        \"height\": 1\n    },\n    {\n        \"id\": \"fa1a3e4363b5b21d\",\n        \"type\": \"ui_group\",\n        \"name\": \"Sat Info\",\n        \"tab\": \"de7e26f01a6c1820\",\n        \"order\": 1,\n        \"disp\": true,\n        \"width\": 10,\n        \"collapse\": false,\n        \"className\": \"\"\n    },\n    {\n        \"id\": \"de7e26f01a6c1820\",\n        \"type\": \"ui_tab\",\n        \"name\": \"UDP Info\",\n        \"icon\": \"dashboard\",\n        \"order\": 0,\n        \"disabled\": false,\n        \"hidden\": false\n    }\n]<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>With the FT-847 down (see the last SSTV experiment) I needed a way to have a radio simultaneously listening on one band and transmitting on another. There are not many radios on the market that are able to do this and I think the IC-9700 is the only one in production. I also don&#8217;t have &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/n1ofz.rawding.com\/?p=718\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8220;MacDoppler Multi Rig Control&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":723,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5],"tags":[12],"class_list":["post-718","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-radio","category-satellite","tag-sdr"],"_links":{"self":[{"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=\/wp\/v2\/posts\/718","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=718"}],"version-history":[{"count":5,"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=\/wp\/v2\/posts\/718\/revisions"}],"predecessor-version":[{"id":899,"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=\/wp\/v2\/posts\/718\/revisions\/899"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=\/wp\/v2\/media\/723"}],"wp:attachment":[{"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=718"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=718"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/n1ofz.rawding.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=718"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}