<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.pg540.org/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nl">
		<id>https://www.pg540.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pe2jko</id>
		<title>Projectgroep .540 - Gebruikersbijdragen [nl]</title>
		<link rel="self" type="application/atom+xml" href="https://www.pg540.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pe2jko"/>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Speciaal:Bijdragen/Pe2jko"/>
		<updated>2026-04-23T15:58:48Z</updated>
		<subtitle>Gebruikersbijdragen</subtitle>
		<generator>MediaWiki 1.23.2</generator>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-09-04T20:01:26Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the [https://www.claudemcp.com/ Model Context Protocol].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end [https://github.com/f4exb/sdrangel/wiki SDRangel]. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRangel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows-11 laptop with WSL2 Ubuntu flavor (24.04).&lt;br /&gt;
&lt;br /&gt;
'''Hardware recommendation''' Due to LLM 16 Gbyte memory&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;br /&gt;
&lt;br /&gt;
Example of the &amp;quot;man in the middle&amp;quot; confirmation popup what will be changed according to the knowledge of the LLM. The blue chat window was my request, the popup appears in the right top corner with the buttons &amp;quot;Cancel or Execute&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp4.png]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-09-04T19:54:48Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end [https://github.com/f4exb/sdrangel/wiki SDRangel]. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRangel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows-11 laptop with WSL2 Ubuntu flavor (24.04).&lt;br /&gt;
&lt;br /&gt;
'''Hardware recommendation''' Due to LLM 16 Gbyte memory&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;br /&gt;
&lt;br /&gt;
Example of the &amp;quot;man in the middle&amp;quot; confirmation popup what will be changed according to the knowledge of the LLM. The blue chat window was my request, the popup appears in the right top corner with the buttons &amp;quot;Cancel or Execute&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp4.png]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:41:58Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end [https://github.com/f4exb/sdrangel/wiki SDRangel]. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows-11 laptop with WSL2 Ubuntu flavor (24.04).&lt;br /&gt;
&lt;br /&gt;
'''Hardware recommendation''' Due to LLM 16 Gbyte memory&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;br /&gt;
&lt;br /&gt;
Example of the &amp;quot;man in the middle&amp;quot; confirmation popup what will be changed according to the knowledge of the LLM. The blue chat window was my request, the popup appears in the right top corner with the buttons &amp;quot;Cancel or Execute&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp4.png]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:40:43Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end [https://github.com/f4exb/sdrangel/wiki SDRangel]. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows-11 laptop with WSL2 Ubuntu flavor (24.04).&lt;br /&gt;
&lt;br /&gt;
'''Hardware recommendation''' Due to LLM 16 Gbyte memory&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;br /&gt;
&lt;br /&gt;
Example of the &amp;quot;man in the middle&amp;quot; confirmation popup what will be changed according to the knowledge of the LLM.&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp4.png]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Bestand:Mcp4.png</id>
		<title>Bestand:Mcp4.png</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Bestand:Mcp4.png"/>
				<updated>2025-08-26T18:37:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:25:57Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end [https://github.com/f4exb/sdrangel/wiki SDRangel]. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows-11 laptop with WSL2 Ubuntu flavor (24.04).&lt;br /&gt;
&lt;br /&gt;
'''Hardware recommendation''' Due to LLM 16 Gbyte memory&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:21:09Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end [https://github.com/f4exb/sdrangel/wiki SDRangel]. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL2 Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:20:16Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end [https://github.com/f4exb/sdrangel/wiki SDRangel]. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:19:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible] As this system is quite flexible it has the potential to become quite powerfull. The Ollama local LLM with 1.7b Qwen model is quite responsive, but it can take a second before the tokens are written when it needs to report the status or a list of commands. The results are not always 100% but with fine tuning and create perhaps some pre-sets which can be called from the LLM if he knows that they exist would make it very easy to operate. If you are interested and have ideas let me know.&lt;br /&gt;
&lt;br /&gt;
'73,JKO&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:13:22Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;br /&gt;
&lt;br /&gt;
The flow contains may debug (green nodes) to check it's payload input. Experiments can be done with other models with more parameters or models in the cloud [https://aws.amazon.com/blogs/machine-learning/unlocking-the-power-of-model-context-protocol-mcp-on-aws/ which are MCP compatible]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T18:07:35Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;br /&gt;
&lt;br /&gt;
The Node-Red flow. The Red and purple nodes belong to the MCP server. The brown nodes are the API calls to SDRangel to make changes to the settings. Currently only 1 channel is implemented as proof. The other nodes are for default settings en a &amp;quot;man in the middle&amp;quot;. As sometimes LLM decisions are not correct we need to verify which changes it is going to execute. Therefor a notification window will pop up asking you/me to approve or cancel the change requested by the LLM. The LLM can set all parameters at once or one per client request. It depends what is asked. If I ask &amp;quot;change freq to 100 Mhz and set gain to 12 Db&amp;quot; it will change 2 parameters for the current control set for SDRangel. If I ask &amp;quot;I would like to listen to commercial Braodcast Station Veronica , set optimum parameters&amp;quot; the LLM might set 5 or 6 parameters at the same time. As not always correct the &amp;quot;man in the middle&amp;quot; (you) can decide to execute or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Mcp3.png]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Bestand:Mcp3.png</id>
		<title>Bestand:Mcp3.png</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Bestand:Mcp3.png"/>
				<updated>2025-08-26T17:58:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T17:55:47Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Node-red mcp server have a specific registry node which will tell the LLM in what format it can request the server to provide more information. It is called a &amp;quot;JSON Schema&amp;quot;. This is also a JSON file. The LLM will parse this file and as it also contains a description what a specific entry is repsonsible for the LLM decide what to return to the MCP server.&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T17:48:19Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
{  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T17:47:43Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : &lt;br /&gt;
&lt;br /&gt;
The MCP relay configuration is calling the MCP server running in Node-red. As this is a SSE oriented server and the bridge needs an &amp;quot;STDIO&amp;quot; communication the mcp-proxy is used. Therefore the JSON config for the bridge is simpel &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{  &amp;quot;mcpServers&amp;quot;: {&lt;br /&gt;
      &amp;quot;mcp-proxy&amp;quot;: {&lt;br /&gt;
         &amp;quot;command&amp;quot;: &amp;quot;mcp-proxy&amp;quot;,&lt;br /&gt;
         &amp;quot;args&amp;quot;: [&lt;br /&gt;
             &amp;quot;http://ip-address-node-red:8001/mcp&amp;quot;,&lt;br /&gt;
             &amp;quot;--transport=streamablehttp&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T17:35:05Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- [https://nodered.org/docs/getting-started/windows Node-Red]''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/sparfenyuk/mcp-proxy mcp-proxy]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- [https://ollama.com/download/windows Ollama with model Qwen3:1.7b]'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/f4exb/sdrangel SDRangel]''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : TBD&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-26T17:31:57Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- Node-Red''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- [https://github.com/jonigl/ollama-mcp-bridge Ollama-mcp-bridge]''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- mcp-proxy''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- SDRangel''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : TBD&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:55:44Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was also discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel. Client requests like &amp;quot;Setup Pluto on channel 10 to transmit to QO-100 on 333 kilosamples&amp;quot;, or &amp;quot;I would to listen to Radio Veronica on FM band, setup best parameters&amp;quot; or &amp;quot;Scan 20 meter band SSB mode and show map&amp;quot;, or &amp;quot;increase volume&amp;quot; as possible client requests.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- Node-Red''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- Ollama-mcp-bridge''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- mcp-proxy''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- SDRangel''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : TBD&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:48:13Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard 2 Chat.&lt;br /&gt;
&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- Node-Red''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- Ollama-mcp-bridge''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- mcp-proxy''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- SDRangel''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : TBD&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:45:04Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Example of simpel client commands to SDRangel:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Client interaction example :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- Node-Red''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- Ollama-mcp-bridge''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- mcp-proxy''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- SDRangel''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : TBD&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:43:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Voorbeeld van simpele besturing van parameters:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Voorbeeld van een vraag aan SDRangel :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- Node-Red''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- Ollama-mcp-bridge''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- mcp-proxy''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- SDRangel''' in Windows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
High level process:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MCP bridge connect to MCP server provided by Node-Red (mcp-server node), and collect all published tools and provide this information to Ollama. Node-red Chat ( Dashboard-2 UI Chat node) client type a question or command in natural language. Chat completion request is send to the bridge, the bridge forward to Ollama. If the Language model decide to call the published tools node-red MCP server node will receive it and specific operation can be performed for example sending an API command to SDRangel. Feedback of the MCP server response will be forwarded again to Ollama LLM and formulate an answer or summarize the action performed and return it to the client.&lt;br /&gt;
&lt;br /&gt;
Specific and examples : TBD&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:29:57Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Voorbeeld van simpele besturing van parameters:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Voorbeeld van een vraag aan SDRangel :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''- Node-Red''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''- Ollama-mcp-bridge''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- mcp-proxy''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''- ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''- SDRangel''' in Windows&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:28:59Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Voorbeeld van simpele besturing van parameters:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Voorbeeld van een vraag aan SDRangel :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''Node-Red''' in Windows&lt;br /&gt;
&lt;br /&gt;
'''Ollama-mcp-bridge''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''mcp-proxy'''' in Ubuntu&lt;br /&gt;
&lt;br /&gt;
'''ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
&lt;br /&gt;
'''SDRangel''' in Windows&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:28:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Voorbeeld van simpele besturing van parameters:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Voorbeeld van een vraag aan SDRangel :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Detailed explanation and system flows will be discussed here. Following components are used :&lt;br /&gt;
&lt;br /&gt;
'''Node-Red''' in Windows&lt;br /&gt;
'''Ollama-mcp-bridge''' in Ubuntu&lt;br /&gt;
'''mcp-proxy'''' in Ubuntu&lt;br /&gt;
'''ollama with model Qwen3:17b'''  in Windows&lt;br /&gt;
'''SDRangel''' in Windows&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:19:21Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Voorbeeld van simpele besturing van parameters:&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
Voorbeeld van een vraag aan SDRangel :&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp2.png&lt;br /&gt;
&lt;br /&gt;
Content :&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Bestand:Mcp2.png</id>
		<title>Bestand:Mcp2.png</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Bestand:Mcp2.png"/>
				<updated>2025-08-25T19:17:53Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:15:30Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[ File:Mcp1.png ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content :&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:14:34Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[File:Mcp1.png]&lt;br /&gt;
&lt;br /&gt;
Content :&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Bestand:Mcp1.png</id>
		<title>Bestand:Mcp1.png</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Bestand:Mcp1.png"/>
				<updated>2025-08-25T19:12:33Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: voorbeeld&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;voorbeeld&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T19:00:05Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel operated by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and operate the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
Content :&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP</id>
		<title>SDRAngel driven by Ollama LLM using MCP</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/SDRAngel_driven_by_Ollama_LLM_using_MCP"/>
				<updated>2025-08-25T18:58:34Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: Nieuwe pagina aangemaakt met 'SDRangel driven and controlled by Ollama Local Language Model using the Model Context Protocol.   '''Info @''' joopk@hccnet.nl  Experiment using an AI Local Languag...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SDRangel driven and controlled by Ollama Local Language Model using the Model Context Protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
Experiment using an AI Local Language model to control and drive the sophisticated signal analyzer front-end SDRangel. Controlling SDRangel while Talking/typing to it in natural language was the goal of this experiment. The system use different components which will be discussed/shown in this Wiki article.&lt;br /&gt;
&lt;br /&gt;
Using AI in radio amateur world is a topic which was als discussed on the 49th International Amateur Radio Exhibition in Friedrichshafen. A lecture about AI Agents and Reasoning models was given by Jochen Berns, DL1YBL. This inspired me to experiment with MCP servers and Ollama trying to see how AI can help operate a rather sophisticated program like SDRandel.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : SDRangel, Ollama, Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Windows laptop with WSL Ubuntu flavor.&lt;br /&gt;
&lt;br /&gt;
Content :&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Hoofdpagina</id>
		<title>Hoofdpagina</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Hoofdpagina"/>
				<updated>2025-08-25T18:36:43Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: /* Aantekeningen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
'''Dit is de project Wiki van de projectgroep .540'''&lt;br /&gt;
&lt;br /&gt;
Voor de [https://www.qsl.net/pa0sny/vijfveertigDutch.html  homepage van de .540 klik hier].&lt;br /&gt;
&lt;br /&gt;
[[Huisfrequenties]]&lt;br /&gt;
&lt;br /&gt;
== Activiteiten ==&lt;br /&gt;
Om op de hoogte te blijven van de activiteiten van de projectgroep 540, aboneer u dan op de nieuws emaillijst.&lt;br /&gt;
Voor instructies zie: [[E-mail]]&lt;br /&gt;
&lt;br /&gt;
== Projecten ==&lt;br /&gt;
* [[Universele Zender Project]]&lt;br /&gt;
* [[Nokia Repeater]]&lt;br /&gt;
* [[Lima SDR]]&lt;br /&gt;
* [[Offset parabool antenne met patch straler voor 13 cm (WiFi) ]]&lt;br /&gt;
* [[Stralers voor 23 cm, 13 cm en 3 cm voor in parabool ]]&lt;br /&gt;
* [[Opzet DVB-S Print voor Raspberry PI ]]&lt;br /&gt;
&lt;br /&gt;
* [[SETUP-DATV DVB-S Print for Raspberry PI in the English language ]]&lt;br /&gt;
&lt;br /&gt;
* [[Grafische interface voor LEANDVB ]]&lt;br /&gt;
&lt;br /&gt;
* [[DVB-S zender met 1x Raspberry PI3 en RPIDATV ]]&lt;br /&gt;
&lt;br /&gt;
* [[ Experimenten met parabool antenne's voor ontvangst 10 GHz (D)ATV ]]&lt;br /&gt;
&lt;br /&gt;
* [[ The PG540 Spotnik Network ]]&lt;br /&gt;
&lt;br /&gt;
* [[ LoRa APRS Tracker and I-Gate ]]&lt;br /&gt;
&lt;br /&gt;
== Aantekeningen ==&lt;br /&gt;
* [[Quangcheng UV-K5, UV-K6]]&lt;br /&gt;
* [[USBTV ruis op monitor]]&lt;br /&gt;
* [[LNB overzicht]]&lt;br /&gt;
* [[Huisfrequenties]]&lt;br /&gt;
* [[FPGA development kits]]&lt;br /&gt;
* [[Digilite-ZL]]&lt;br /&gt;
* [[Digilite-Raspberry Pi 2x2]]&lt;br /&gt;
* [[Software defined radio]]&lt;br /&gt;
* [[PLL LNB]]&lt;br /&gt;
* [[HackRF notities]]&lt;br /&gt;
* [[USRP B200]]&lt;br /&gt;
* [[DVB-S]]&lt;br /&gt;
* [[DVB-S2]]&lt;br /&gt;
* [[DVB-S USB ontvanger Hauppage DEC3000]]&lt;br /&gt;
* [[GnuRadio]]&lt;br /&gt;
* [[Digitale ingang]]&lt;br /&gt;
* [http://www.webcamsue.nl/atv/ Digitale (D)ATV streams NL en WWW Global * tip!] &lt;br /&gt;
* [[LimeSDR interface to SVXlink using GNUradio]]&lt;br /&gt;
* [[DVB-T 2 Mhz Ham-Mode instellingen op PI6ZDM]]&lt;br /&gt;
* [[DVB-S 2KS DATV-Express instellingen op PI6HLM]]&lt;br /&gt;
* [[Yaesu FT-2311 23cm FM]]&lt;br /&gt;
* [[RPITX interface to SVXlink using GNUradio]]&lt;br /&gt;
* [[ADALM-PLUTO (SDR rx/tx) notes]]&lt;br /&gt;
* [[Eshail 2 ontvangen met een LNB en de RTL-SDR]]&lt;br /&gt;
* [http://www.pabr.org/radio/lnblineup/lnblineup.en.html#lo Uitgebreide PLL LNB Informatie * tip! ]&lt;br /&gt;
* [https://uhf-satcom.com/blog/patch_antenna Zelfbouw Es'hail-2 Oscar 100 Dual Band Patch Antenna]&lt;br /&gt;
* Homemade polarmount by HB9CVG, het PDF document:  [[media:20190508_Polar_Mount.pdf]]&lt;br /&gt;
* [[Nano VNA user guide]]&lt;br /&gt;
* [[Adalm Pluto en Debian linux]]&lt;br /&gt;
* [[Adaptive power control using MQTT (DATV on QO-100)]]&lt;br /&gt;
* [[Rocket Combi Antenna QO-100]]&lt;br /&gt;
* [[100W LED lamp]]&lt;br /&gt;
* [[Portsdown4 Node-red interface]]&lt;br /&gt;
* [[10GHz eenvoudig qrv met een HB100]]&lt;br /&gt;
* [[LongMynd to Nextion Interface]]&lt;br /&gt;
* [[Nokia RD40]]&lt;br /&gt;
* [[RFE for PlutoDVB2]]&lt;br /&gt;
* [[SDRAngel driven by Ollama LLM using MCP]]&lt;br /&gt;
&lt;br /&gt;
== Andere sites van de 540 groep ==&lt;br /&gt;
* [https://www.qsl.net/pa0sny/vijfveertigDutch.html  Homepage]&lt;br /&gt;
&lt;br /&gt;
== Archief ==&lt;br /&gt;
* [[Dag voor de Radio Amateur (DvdRA) 2014]]&lt;br /&gt;
&lt;br /&gt;
== Hulp ==&lt;br /&gt;
&lt;br /&gt;
Raadpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handleiding] voor informatie over het gebruik van de wikisoftware.&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/LongMynd_to_Nextion_Interface</id>
		<title>LongMynd to Nextion Interface</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/LongMynd_to_Nextion_Interface"/>
				<updated>2025-04-03T19:33:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Longmynd to Nextion Interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What is LongMynd @''' [https://wiki.batc.org.uk/LongMynd_Receive_Software LongMynd BATC information]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Receiving part of my QO-100 station is build around Longmynd on PI4 close to my dish. Frequency/Symbolrate selection is done via [https://github.com/m0dts/QO-100-WB-Live-Tune QO-100-WB-Live-Tune from M0DTS] and works fantastic. My experiment was trying to use HMI interface touch screen (Nextion 7 inch) controlling my complete QO-100 station incl the Longmynd tuner. Following flowchart (hardware) is used (only RX is explained here) :&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Flow-nextion-quicktune.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I choose the resolution of my interface maximum 14 channels. In each channel only 1Ms/s, 500Ks/s,333Ks/s can be detected. QO-100 WB Quicktune in Winterhill mode will scan the band each 2seconds and output via ethernet frequency and Symbolrate (on port 9900). This information is captured by the RPI-4 connected to the Nextion HMI display. It is being handled by Node-Red to make the decision what image to display on the Nextion. If the frequency is within specific window I determine what channel the station is received. If channel is for example 10, then I take into consideration the Symbolrate, if 333 Ks/s I display small green square, if 500Ks/s I use another picture with green wider bard, if 1 Ms/s even wider green bar. Each 8 seconds I clear all images on screen and recalculate what Quicktune is telling me. When I would like to see the station I touch the green bar and on the Nextion, a red indicator is drawn to let me know which channel is currently selected. Then I send command to Longmynd to tune to that frequency with that Symbolrate. The output ( video ) is captured in VLC or SMplayer on my PC. Due to the fact that I wrote also an MQTT interface publishing all information from Longmynd received station , I can easily show that on the Nextion display, showing MER/D value, Station name and FEC. Due to the fact that I also installed Node-red on my PC I am able to start/stop SMplayer in order to stop/start showing the stream (video). 3x Node-red, 1x Mosquitto and 1PC and 2 RPI-4 are working together. &lt;br /&gt;
Sending commands to Nextion from Node-red is made out of 2 blocks, a function convert payload to ascii values and adding 3x code 255 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var str = msg.payload;&lt;br /&gt;
var buf = []&lt;br /&gt;
for (var i=0, l = str.length; i &amp;lt; l; i++) {&lt;br /&gt;
    var ascii =str.charCodeAt(i);&lt;br /&gt;
    buf.push(ascii);&lt;br /&gt;
}&lt;br /&gt;
buf.push(255);&lt;br /&gt;
buf.push(255);&lt;br /&gt;
buf.push(255);&lt;br /&gt;
msg.payload = new Buffer(buf);&lt;br /&gt;
return msg;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-function-tx.png]]&lt;br /&gt;
&lt;br /&gt;
Thats is feed into a serial out node. For receiving values from Nextion also a Serial node is used, but then a serial in node. This is first send to a switch which will detect which ID is touched on the Nextion. Each element will get a unique ID and send to Node-red. The switch will determine where this  ID is needed. For example if the first channel is touched then it will go the a function &amp;quot;touch channel 1&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
code=parseInt(waarde,16)&lt;br /&gt;
if (code == 301) {&lt;br /&gt;
tune=&amp;quot;[GlobalMsg],Freq=10492750,Offset=9750000,Doppler=0,Srate=333,WideScan=0,LowSR=0,DVBmode=Auto,FPlug=A,Voltage=0,22kHz=Of&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
if (code == 501) {&lt;br /&gt;
tune=&amp;quot;[GlobalMsg],Freq=10492750,Offset=9750000,Doppler=0,Srate=500,WideScan=0,LowSR=0,DVBmode=Auto,FPlug=A,Voltage=0,22kHz=Of&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
if (code == 1001) {&lt;br /&gt;
tune=&amp;quot;[GlobalMsg],Freq=10492750,Offset=9750000,Doppler=0,Srate=1000,WideScan=0,LowSR=0,DVBmode=Auto,FPlug=A,Voltage=0,22kHz=Of&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
msg.payload=tune&lt;br /&gt;
return msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In Nextion UI I define that when channel 1 is touched, code 301/501/1001 is send. In the same time QuickTune will tell Node-red if it is a 333/500/1000 Ks/s station on channel 1. I disable touch function for graphic element which is not the correct value. So if it is a 333ks/s station I disable the graphic element for 500ks and also the one for 1000 Ks. So when I touch channel 1, only element 333ks/s is visible and Nextion will send value 301 to my RX receive node, the function will create the string for Longmynd to tune to that frequency with that samplerate. If a station of 500ks appear on channel 5 for example, I make the 333ks and 1000ks/s inactive, and only the 500ks/s become visible. If I touch it, Nextion will send 505, the vaulie is then intepreted by the function as 500ks/s station on channel 5. It creates the string which is send over ethernet to Longmynd. This now works on all 14 channels.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-switch-flow.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Focus blocks will move a small red square indicating what channel is touched. This is handy so I can see which channel is selected. It will only move a smal red square in horizontal axis.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Port9900-nextion.png]]&lt;br /&gt;
&lt;br /&gt;
Above Node-red blocks listen to Quicktune port 9900 and will split each message to the correct Symbolrate and frequency. These blocks take care that the correct image is displayed on nextion. As I mentioned there are 3 different size green blocks, the 333ks is the smallest, the 1000ks/ the biggest. So visually it can be seen quite quickly if it is 333/500/1000ks. It is also take that the green block is shown on the right channel. This in general the functioning of this experiment.&lt;br /&gt;
Nextion design UI interface with all graphic elements activated (here are also the control for the Pluto and powerstages and portsdown4, but not explaned in this document)  :&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-design-complete.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nextion interface after boot. I disable all TX settings because by default the transmitter is OFF. Below you see the graphic elements showing channels which are occupied, on the first 9 channels there can be 3 different Symbolrate stations, therefore 3 graphic elements with different width are on top of eachother, I make them visible or hide them whatever s currently active. If station of 1000KS. transmit on channel 5 then I disable the 333ks on channel 4 and 6, and disable the 500ks element on channel 4 and 6, then make element 1000ks/s visible on channel 5, if I tocuh it then Longmyd will get the command to go there and show the stream.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-rx-only.png]]&lt;br /&gt;
&lt;br /&gt;
Experiment succeeded. Lessons : element ID by Nextion UI design software is changing whenever you add elements/switches/text/and so on. The nodes in Node-red are relying on the correct ID, so it happened few times that I had to define the correct ID to the correct Switch node. The ID numbers are generated from top left to top bottem and each element will get is't number automatically. Giving names to each element makes it easier to read what it is doing. Designing graphic elements was something new and I think that in other projects perhaps I will use Boxy SVG, looks quite powerfull. The experiment was fun, and again show that Node-Red/MQtt is super powerfull and handy for Ham radio use.&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2</id>
		<title>RFE for PlutoDVB2</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2"/>
				<updated>2025-03-17T19:38:21Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Radio Front-End for PlutoDVB2 from F5OEO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
This radio front-end is created to experiment with DATV Pluto firmware V2 from F5OEO (Evariste). The firmware is mainly controlled via [https://en.wikipedia.org/wiki/MQTT MQTT messaging], and there are many MQTT clients available to control this firmware. One of the clients is Node-Red which I use for some time for many other projects to control devices which I use for the hobby. Due to the many improvements and features I needed a simple user-interface to control this Firmware. This resulted in this basic front-end. It controls the transmitter and controls the receiver in case a DATV tuner is connected to Pluto. In case Tutione tuner is connected the received stream is redirected 230.0.0.2 on port1234. So this can be made visible for example with command '''ffplay udp://230.0.0.2:1234 ''' or VLC pointing to that URL.&lt;br /&gt;
Let me know if you would like to receive the flows, please send me a mail.&lt;br /&gt;
&lt;br /&gt;
'''Update''' : Michel de HB9DUG added a flow which links to the Receiver flow. The original receive frequency was selectable only with dropdown menu. This is not so flexible, Michel took the output of our [https://github.com/m0dts/QO-100-WB-Live-Tune QuickTune tool] and linked it to the Frequency and Samplerate input. So if you click on a station in Quicktune, the tuner will move freq and set correct Samplerate. Thanks Michel. Please see below the flow from Michel.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Raspberry PI4.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File:Rfe-plutodvb2-2.jpg ]]&lt;br /&gt;
&lt;br /&gt;
When the new firmware is loaded to the Pluto it is needed to add your Callsign one time in order the RFE to talk to Pluto. Therefore you can make an SSH connection using Putty for example to Pluto. Issue the command '''fw_setenv call YourCall''', then '''reboot''' the Pluto. Then the flow should be able to talk with Pluto.&lt;br /&gt;
As every installation is different the correct IP address has to be entered in the MQTT node in Node-red.&lt;br /&gt;
&lt;br /&gt;
In the flow search for following icon and double-click :&lt;br /&gt;
[[File:Mqtt-icon.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then select the edit button to define name and IP address, fill in your address from the Pluto :&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The click on Update.&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Please see my current hardware setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Plutdvb2-schematic.jpg]]&lt;br /&gt;
&lt;br /&gt;
QuickTune interface flow chart from Michel HB9DUG which links to freq input and samplerate input controlling the DATV Tuner connected to Pluto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Hb9dug-ext.jpg]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/LongMynd_to_Nextion_Interface</id>
		<title>LongMynd to Nextion Interface</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/LongMynd_to_Nextion_Interface"/>
				<updated>2025-03-17T19:37:48Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Longmynd to Nextion Interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What is LongMynd @''' [https://wiki.batc.org.uk/LongMynd_Receive_Software LongMynd BATC information]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Receiving part of my QO-100 station is build around Longmynd on PI4 close to my dish. Frequency/Symbolrate selection is done via [https://github.com/m0dts/QO-100-WB-Live-Tune QO-100-WB-Live-Tune from M0DTS] and works fantastic. My experiment was trying to use HMI interface touch screen (Nextion 7 inch) controlling my complete QO-100 station incl the Longmynd tuner. Following flowchart (hardware) is used (only RX is explained here) :&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Flow-nextion-quicktune.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I choose the resolution of my interface maximum 14 channels. In each channel only 1Ms/s, 500Ks/s,333Ks/s can be detected. QO-100 WB Quicktune in Winterhill mode will scan the band each 2seconds and output via ethernet frequency and Symbolrate (on port 9900). This information is captured by the RPI-4 connected to the Nextion HMI display. It is being handled by Node-Red to make the decision what image to display on the Nextion. If the frequency is within specific window I determine what channel the station is received. If channel is for example 10, then I take into consideration the Symbolrate, if 333 Ks/s I display small green square, if 500Ks/s I use another picture with green wider bard, if 1 Ms/s even wider green bar. Each 8 seconds I clear all images on screen and recalculate what Quicktune is telling me. When I would like to see the station I touch the green bar and on the Nextion, a red indicator is drawn to let me know which channel is currently selected. Then I send command to Longmynd to tune to that frequency with that Symbolrate. The output ( video ) is captured in VLC or SMplayer on my PC. Due to the fact that I wrote also an MQTT interface publishing all information from Longmynd received station , I can easily show that on the Nextion display, showing MER/D value, Station name and FEC. Due to the fact that I also installed Node-red on my PC I am able to start/stop SMplayer in order to stop/start showing the stream (video). 3x Node-red, 1x Mosquitto and 1PC and 2 RPI-4 are working together. &lt;br /&gt;
Sending commands to Nextion from Node-red is made out of 2 blocks, a function convert payload to ascii values and adding 3x code 255 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var str = msg.payload;&lt;br /&gt;
var buf = []&lt;br /&gt;
for (var i=0, l = str.length; i &amp;lt; l; i++) {&lt;br /&gt;
    var ascii =str.charCodeAt(i);&lt;br /&gt;
    buf.push(ascii);&lt;br /&gt;
}&lt;br /&gt;
buf.push(255);&lt;br /&gt;
buf.push(255);&lt;br /&gt;
buf.push(255);&lt;br /&gt;
msg.payload = new Buffer(buf);&lt;br /&gt;
return msg;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-function-tx.png]]&lt;br /&gt;
&lt;br /&gt;
Thats is feed into a serial out node. For receiving values from Nextion also a Serial node is used, but then a serial in node. This is first send to a switch which will detect which ID is touched on the Nextion. Each element will get a unique ID and send to Node-red. The switch will determine where this  ID is needed. For example if the first channel is touched then it will go the a function &amp;quot;touch channel 1&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
code=parseInt(waarde,16)&lt;br /&gt;
if (code == 301) {&lt;br /&gt;
tune=&amp;quot;[GlobalMsg],Freq=10492750,Offset=9750000,Doppler=0,Srate=333,WideScan=0,LowSR=0,DVBmode=Auto,FPlug=A,Voltage=0,22kHz=Of&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
if (code == 501) {&lt;br /&gt;
tune=&amp;quot;[GlobalMsg],Freq=10492750,Offset=9750000,Doppler=0,Srate=500,WideScan=0,LowSR=0,DVBmode=Auto,FPlug=A,Voltage=0,22kHz=Of&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
if (code == 1001) {&lt;br /&gt;
tune=&amp;quot;[GlobalMsg],Freq=10492750,Offset=9750000,Doppler=0,Srate=1000,WideScan=0,LowSR=0,DVBmode=Auto,FPlug=A,Voltage=0,22kHz=Of&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
msg.payload=tune&lt;br /&gt;
return msg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In Nextion UI I define that when channel 1 is touched, code 301/501/1001 is send. In the same time QuickTune will tell Node-red if it is a 333/500/1000 Ks/s station on channel 1. I disable touch function for graphic element which is not the correct value. So if it is a 333ks/s station I disable the graphic element for 500ks and also the one for 1000 Ks. So when I touch channel 1, only element 333ks/s is visible and Nextion will send value 301 to my RX receive node, the function will create the string for Longmynd to tune to that frequency with that samplerate. If a station of 500ks appear on channel 5 for example, I make the 333ks and 1000ks/s inactive, and only the 500ks/s become visible. If I touch it, Nextion will send 505, the vaulie is then intepreted by the function as 500ks/s station on channel 5. It creates the string which is send over ethernet to Longmynd. This now works on all 14 channels.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-switch-flow.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Focus blocks will move a small red square indicating what channel is touched. This is handy so I can see which channel is selected. It will only move a smal red square in horizontal axis.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Port9900-nextion.png]]&lt;br /&gt;
&lt;br /&gt;
Above Node-red blocks listen to Quicktune port 9900 and will split each message to the correct Symbolrate and frequency. These blocks take care that the correct image is displayed on nextion. As I mentioned there are 3 different size green blocks, the 333ks is the smallest, the 1000ks/ the biggest. So visually it can be seen quite quickly if it is 333/500/1000ks. It is also take that the green block is shown on the right channel. This in general the functioning of this experiment.&lt;br /&gt;
Nextion design UI interface with all graphic elements activated (here are also the control for the Pluto and powerstages and portsdown4, but not explaned in this document)  :&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-design-complete.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nextion interface after boot. I disable all TX settings because by default the transmitter is OFF. Below you see the graphic elements showing channels which are occupied, on the first 9 channels there can be 3 different Symbolrate stations, therefore 3 graphic elements with different width are on top of eachother, I make them visible or hide them whatever s currently active. If station of 1000KS. transmit on channel 5 then I disable the 333ks on channel 4 and 6, and disable the 500ks element on channel 4 and 6, then make element 1000ks/s visible on channel 5, if I tocuh it then Longmyd will get the command to go there and show the stream.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Nextion-rx-only.png]]&lt;br /&gt;
&lt;br /&gt;
Experiment succeeded. Lessons : element ID by Nextion UI design software is changing whenever you add elements/switches/text/and so on. The nodes in Node-red are relying on the correct ID, so it happened few times that I had to define the correct ID to the correct Switch node. The ID numbers are generated from top left to top bottem and each element will get is't number automatically. Giving names to each element makes it easier to read what it is doing. Designing graphic elements was something new and I think that in other projects perhaps I will use Boxy SVG, looks quite powerfull. The experiment was fun, and again show that Node-Red/MQtt is super powerfull and handy for Ham radio use.&lt;br /&gt;
&lt;br /&gt;
'''Info @''' pe2jko@pg540.org&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Adaptive_power_control_using_MQTT_(DATV_on_QO-100)</id>
		<title>Adaptive power control using MQTT (DATV on QO-100)</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Adaptive_power_control_using_MQTT_(DATV_on_QO-100)"/>
				<updated>2025-03-17T19:37:15Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Automatic Adaptive power settings for DATV on WB Transponder QO-100'''&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
'''Credit''' F5OEO, Evariste&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Hardware Equipment used :'''&lt;br /&gt;
&lt;br /&gt;
1.1m offset dish&lt;br /&gt;
&lt;br /&gt;
[https://wiki.batc.org.uk/MiniTiouner_hardware_Version_2 Tutioune V.2 tuner BATC]&lt;br /&gt;
&lt;br /&gt;
Raspberry PI4&lt;br /&gt;
&lt;br /&gt;
Pluto + Amplifier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Software used :'''&lt;br /&gt;
&lt;br /&gt;
Longmynd DATV receiver software [https://github.com/myorangedragon/longmynd ( Source on GitHub )]&lt;br /&gt;
&lt;br /&gt;
Node-Red [https://nodered.org/docs/getting-started/windows Starting point install Node-Red on PC)]&lt;br /&gt;
&lt;br /&gt;
F5OEO firmware v.0303 ( still in beta, March 2021 )&lt;br /&gt;
&lt;br /&gt;
UDP message conversion LongMynd to MQTT ( source available , please send mail )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Advantages : '''&lt;br /&gt;
&lt;br /&gt;
1) When crowded Transponder DATV station remains with constant powerlevel, easy for other receiving stations to have signal @ minimum Snr level.&lt;br /&gt;
&lt;br /&gt;
2) With changing weather conditions power level is adjusted acordingly, rain/snow have no influence for receiving stations.&lt;br /&gt;
&lt;br /&gt;
3) Automatic power level when changing fec or samplerate.&lt;br /&gt;
&lt;br /&gt;
4) Effective use of Transponder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Method of Operation :'''&lt;br /&gt;
&lt;br /&gt;
System is using MQTT messaging to receive Snr values from LongMynd receiver and sending messages to modulator setting powerlevels. This setup create a locked loop and when defining the correct levels system is automatic and stays between defined levels. &lt;br /&gt;
When swiching on the DATV modulator , LongMynd receiver must be tuned to same frequency and setup with the correct SampleRate. ( Currently it is manual, but plan is to make this also automatic ). &lt;br /&gt;
When tuned the LongMynd will detect a lock and start sending MQTT messages to central broker (in my case running on a Raspebrry PI3). Node-red ( in my case on PC ) subscribe to this topic. Settings of Modulation code and Fec determine the minimum Snr.&lt;br /&gt;
This value + 1 dB is set as min_snr value. Max_snr value is 1 dB higher then min_snr. This will give a 1dB window and minimum D1 on receiver. Then when receiving Snr drops below the min_snr the modulator&lt;br /&gt;
will be told to step up it's power. Once it reaches the min_snr it stops increasing power. When receiving Snr is above snr_max then modulator will reduce it's power output. System is dynamic so when other samplerate &lt;br /&gt;
or fec is choosen the system calculate min_snr and max_snr and modulator start to adjust to find the correct power leven to be just above the min_snr value. Same time dus to changed Fec/Samplerate&lt;br /&gt;
the transport stream has to be stopped and calculated and started again. The modulator add null packets during that process and modulator continue to output.&lt;br /&gt;
To prevent overshoot or undershoot of powerlevel message limit was introduced to 1 message per 2 seconds. So power adjustments are slow. Dynamic power can be switched on/off using Gate node.&lt;br /&gt;
&lt;br /&gt;
LongMynd currently is not supporting MQTT messages, therefore an convertor was made between the standard UDP messaging build into LongMynd and MQTT. Information from LongMynd is converted to MQTT &lt;br /&gt;
using the opensource [https://github.com/LiamBindle/MQTT-C MQTT-C implementation ]. This program runs on Raspebrry PI4 together with LongMynd software.&lt;br /&gt;
&lt;br /&gt;
Modulator from F5OEO starting with Firmware 0303 supports MQTT messaging and Node-Red on PC subscribe to topics on the local MQTT broker on Pluto device and also publish messages on the local Pluto MQTT broker.&lt;br /&gt;
For example to set the power level. The flexible Node-Red will make all the connections and build the GUI around this solution.&lt;br /&gt;
&lt;br /&gt;
Please see some Node-Red examples :&lt;br /&gt;
&lt;br /&gt;
'''Full Dashboard March 2021'''&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Mqtt-pluto-dashboard.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
''' Global settings for FFMPEG ''' :&lt;br /&gt;
&lt;br /&gt;
These 3 parameters are captured in order to pass to a batch file which tell FFMPEG what to do. Resolution, Frames per second and Mode. The batch file will select the correct input sources depending on this setting. The output of these nodes are going to other tab where the paramaters are send to the batch file. I write the settings to a local file, so when the system starts up it will remember what was the last settings. Each time you change the global setting the file linked will be overwritten with the new setting.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Mqtt-global-ffmpeg.PNG|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pluto MQTT Status flow'''&lt;br /&gt;
&lt;br /&gt;
Pluto have it's own MQTT broker inside which will plublish messages. In this flow I connect to Pluto mqtt broker and sunscribe to few topics. There are many topics, this is for me the most important ones. MQTT.fx client can help you finding out which topics are availbel, becuase there is a scan feature inside. The full list is not yet available. But from the flow you can see the ones I use. Just use a nice GUI widget to show the content.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Mqtt-pluto-status.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Adaptive Power control flow'''&lt;br /&gt;
&lt;br /&gt;
It starts with subscribe to the MER topic ( the LongMynd tuner will send messages about its received value when locked ). This will be send into a GATE node, this node will block or allow payload to travel through the gate. A function will compare the MER value to min_snr and max_snr. If it is between these threshold it will send &amp;quot;OK&amp;quot; , when it is too low it will send &amp;quot;UP&amp;quot;, when it is too high it will send a &amp;quot;DOWN&amp;quot; message. Then I added a limit Node to limit the amount of messages to 1 message each 2 seconds. This message will be send to second funciton node who will drive the power of the Pluto. As the power window is from -60 to 0 I am counting up or down with steps of 1. SO if I receive message UP then I increase ( more closer to 0 ) the value, when I receive a DOWN message I will reduce power by decrease the value. I set the absolute minimum and maximum values to -18, becuase I don't want to burn my AMP. So the counting down will stop at -18. That is the highest possible value I send to Pluto power. In addition the LongMynd receiver must be tuned to the frequency and the samplerate of the transmitter, otherwise it can't lock. Once we go &amp;quot;on air&amp;quot; then UDP message with frequency and smaplerate values ( similar to the QuickTune appiication ) are being send to Raspberry PI4 with Longmynd. It will tune automatically. So now both receiver and transmiter are in sync.&lt;br /&gt;
&lt;br /&gt;
'''Function what to do of MER is lower or higher then threshold:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mer = msg.payload&lt;br /&gt;
var pwr&lt;br /&gt;
var min = flow.get(&amp;quot;min_db&amp;quot;);&lt;br /&gt;
var max = flow.get(&amp;quot;max_db&amp;quot;);&lt;br /&gt;
var mm = parseFloat(mer).toFixed(2);&lt;br /&gt;
if (mm &amp;gt;= min) {&lt;br /&gt;
    if (mm &amp;lt;= max) {&lt;br /&gt;
        msg.topic = &amp;quot;OK&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
        msg.topic = &amp;quot;DOWN&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
} else {&lt;br /&gt;
    msg.topic = &amp;quot;UP&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return msg;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Function to in/decrease power level depending on status (UP/DOWN/OK):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var count = flow.get(&amp;quot;count&amp;quot;)||-40;&lt;br /&gt;
&lt;br /&gt;
if (msg.topic === &amp;quot;init&amp;quot;) {&lt;br /&gt;
 count = msg.payload;&lt;br /&gt;
 &lt;br /&gt;
} else if ((msg.topic === &amp;quot;UP&amp;quot;) &amp;amp;&amp;amp; (count&amp;lt; -18)) {&lt;br /&gt;
 count++;&lt;br /&gt;
} else if ((msg.topic === &amp;quot;DOWN&amp;quot;) &amp;amp;&amp;amp; (count &amp;gt; -60)) {&lt;br /&gt;
 count--;&lt;br /&gt;
} else if ((msg.topic === &amp;quot;OK&amp;quot;) ) {&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
// Save the new value back to context so it will be available next time&lt;br /&gt;
flow.set('count',count);&lt;br /&gt;
// Update the message payload and return - no need to create a new msg&lt;br /&gt;
msg.payload = count;&lt;br /&gt;
return msg;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Scary complete flow, don't be afraid'''&lt;br /&gt;
&lt;br /&gt;
This is the full flow controlling some more devices, as I also can switch on/off my pre-amp and final amp. Called &amp;quot;trap1/2/3&amp;quot;. Please see the incoming MQTT nodes, the functions and UI output widgets. Also the nodes are included to define the min_snr and max_snr values. I write 2 files in a directory which contains the value of FEC and Modulation Code ( QPSK/8PSK etc ), these 2 parameters define the miniumum Snr required to receive the signal. For example QPSK Fec 1/2 needs 1 dB above the noise. A batch file input = fec and modcode, output is Snr value. This Snr value I read into the flow and add 1dB for min_snr and +2 dB for max_snr values. This in theory will bring the receiver on D1 receive level. ( Snr - min required Snr = D value ). So in the flow the min_snr and max_snr is feed into the Function to define UP/DOWN/OK messages. So this is all dynamic, means that if I change the FEC or Modulation Code automatically the Pluto will adapt to this min_snr and max_snr values by increasing or decreasing the Pluto Power levels. ( min = -60, max = 0 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Mqtt-control-flow.PNG|900px]]&lt;br /&gt;
&lt;br /&gt;
'''Connections to manually set parameters in Pluto using MQTT :'''&lt;br /&gt;
&lt;br /&gt;
In this flow I am able to set other parameters in Pluto using MQTT publish messages. Also the connections are visible to write the snr_min and snr_max values and the process to stop/start ffmpeg. This is required becuase when dynamically change the fec/samplerate first FFMPEG needs to be killed , then the new minimum samplerate ( calculated by the Pluto ) needs to be given as muxrate. If you don't do it, then video/audio will be intermittant. As with this new firmmware from F5OEO we can change it on the fly without stopping and  starting the the transmissing. F5OEO add null packets when input stream is missing. &lt;br /&gt;
&lt;br /&gt;
[[Bestand:Mqtt_settings.PNG|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Conclusion''':&lt;br /&gt;
&lt;br /&gt;
Although very nice feature works nice. Beatifull to see it work when transponder is busy and strong signal arrive and disappear. The output power of Pluto changes with small steps. This setup require some experience with Node-Red, but there is so much information on internet how to build flows and how to create functions that it is not too difficult. Question ? pe2jko@pg540.org&lt;br /&gt;
&lt;br /&gt;
'73&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/RPITX_interface_to_SVXlink_using_GNUradio</id>
		<title>RPITX interface to SVXlink using GNUradio</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/RPITX_interface_to_SVXlink_using_GNUradio"/>
				<updated>2025-03-17T19:36:27Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Interface RPITX to SVXlink.'''&lt;br /&gt;
[[Bestand:Rpitx-plaatje.jpg | thumb ]]&lt;br /&gt;
Inspired from the setup of the Spotnik made by [https://f5nlg.wordpress.com/2016/01/06/svx-boutique/ F5NLG] and the Reflector technique from [https://github.com/sm0svx/svxlink/wiki SVXlink] and the French reflector network hereby the description of the experimental interface between [https://github.com/F5OEO/rpitx/tree/v2beta RPITX from F5OEO] and SVXlink using GNUradio. The GNUradio flowchart was made with examples [https://github.com/ha7ilm/rpitx-app-note from these application notes] . SVXlink have UDP input and output possibilities and these are used to input/output to GNUradio blocks.  Setup I use is RX on 433.540 Mhz and TX is on 438.775 Mhz. I use a Wouxun transceiver ( dual band ) to communicate. TX is set to 433.540 and receive is set to 438.775 in the 70cm amateur band.&lt;br /&gt;
&lt;br /&gt;
'''Picture test setup show green case contain 7inch touch screen, inside the blue case is Raspberry PI3 B+, extension cable to RTL dongle and small brown cable connected to PIN7 as transmit antenna'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Equipment used''' : As SBC I use the [https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/ RPI model 3B+] (with Rasbian Stretch) and as receiver I use the [https://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/ RTL dongle V3 from RTL-SDR.com] No other hardware is required.&lt;br /&gt;
&lt;br /&gt;
'''Functional Description''' : The receiver side is all handled by allready existing functionality in SVXLink using Ddr receiver. All configuration is well documented in  [http://www.svxlink.org/doc/man/man5/svxlink.conf.5.html svxlink.conf]. The transmitter part interface is made out of 3 components. The audio coming from SVXlink TX1 is routed via UDP port 1235 to GNUradio, the PTT is routed to PseudoTTY port /home/pi/ptt and the TCP output port 8011 of GNUradio IQ stream is routed to RPITX. When SVXlink wants to transmit it sends a charackter T to the PseudoTTY device ( PTT ON ), a perl script which is started after the start of SVXlink will monitor this PseudoTTY and once it will see the character T it will execute other script starting first RPITX snd then Python GNUradio script. This will switch on the transmitter and audio is routed to RPITX. When SVXlink need to stop transmitting then the character R is send by SVXlink to the PseudoTTY and received by the script monitoring the PTY. It will kill RPITX and Python GNUradio script. As it takes a bit of time to start RPITX ( initializing the PLL ) and starting the TCP listener and starting Python some extra delay is given to SVXLink in the configuration.&lt;br /&gt;
&lt;br /&gt;
'''Questions ?:''' please mail to joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
'''Scripts and schematic GNUradio flowchart :''' &lt;br /&gt;
&lt;br /&gt;
[[Bestand:Rpitx_grc.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''' Perl Script which listen on the PTY port from TX1'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# @file    nhrcx.pl&lt;br /&gt;
# @brief   Perl-script to link a NHRCx controller to SvxLink over&lt;br /&gt;
#          Linux pseudo tty's&lt;br /&gt;
# @author  Adi Bier / DL1HRC&lt;br /&gt;
# @date    2014-05-01&lt;br /&gt;
#&lt;br /&gt;
# Run this script after starting SvxLink. Do not configure the&lt;br /&gt;
# links in the /dev directory.&lt;br /&gt;
#&lt;br /&gt;
# SvxLink - A Multi Purpose Voice Services System for Ham Radio Use&lt;br /&gt;
# Copyright (C) 2004-2014  Tobias Blomberg / SM0SVX&lt;br /&gt;
# Adjusted PE2JKO to control RPITX&lt;br /&gt;
&lt;br /&gt;
use Time::HiRes qw(usleep);&lt;br /&gt;
#use Device::SerialPort;&lt;br /&gt;
use IO::File;&lt;br /&gt;
&lt;br /&gt;
$ptt_port   = &amp;quot;/home/pi/ptt&amp;quot;;&lt;br /&gt;
$logfile    = &amp;quot;/tmp/nhrc-x.log&amp;quot;;&lt;br /&gt;
$DEBUG      = 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$PTT = openPtty(&amp;quot;$ptt_port&amp;quot;); #  ptt port from SvxLink&lt;br /&gt;
&lt;br /&gt;
while (1) {&lt;br /&gt;
&lt;br /&gt;
  $PTT-&amp;gt;read($p, 1);&lt;br /&gt;
  if ($p gt ' ') {&lt;br /&gt;
    $message = $p;&lt;br /&gt;
    if ($p ne 'T') {&lt;br /&gt;
      system(&amp;quot;/home/pi/rpitx/stop_tx.sh&amp;quot;);&lt;br /&gt;
      &amp;amp;writelog(&amp;quot;UIT&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($p ne 'R') {&lt;br /&gt;
      system(&amp;quot;/home/pi/rpitx/start_tx.sh&amp;quot;);&lt;br /&gt;
      &amp;amp;writelog(&amp;quot;AAN&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;writelog(&amp;quot;PTT-command: $p&amp;quot;);&lt;br /&gt;
    undef $p;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  usleep(10000);&lt;br /&gt;
}&lt;br /&gt;
close($PTT);&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
sub openPtty {&lt;br /&gt;
  my $fh = IO::File-&amp;gt;new($_[0], O_NONBLOCK|O_RDWR);&lt;br /&gt;
  if (!(defined $fh)) {&lt;br /&gt;
    &amp;amp;writelog(&amp;quot;Can not open $_[0]&amp;quot;);&lt;br /&gt;
    print &amp;quot;Can not open $_[0]\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  $fh-&amp;gt;autoflush(1);&lt;br /&gt;
  &amp;amp;writelog(&amp;quot;opening $_[0] OK&amp;quot;);&lt;br /&gt;
  return $fh;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub writelog {&lt;br /&gt;
  if ($DEBUG) {&lt;br /&gt;
    open(LOG,&amp;quot;&amp;gt;&amp;gt;$logfile&amp;quot;);&lt;br /&gt;
      print LOG $_[0],&amp;quot;\n&amp;quot;;&lt;br /&gt;
    close(LOG);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The startup script starts first svxlink, this opens the PTY port and then the perl script which monitor the charakters (T and R)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;start&amp;quot;&lt;br /&gt;
/home/pi/reflector/src/build/bin/svxlink &amp;amp;&lt;br /&gt;
sleep 1&lt;br /&gt;
/home/pi/ptt.pl &amp;amp;&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Script start_tx.sh will be called when ptt.pl detect that PTT should be switched on'''&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo test&lt;br /&gt;
nc -l 8011 | sudo /home/pi/rpitx/rpitx -i- -m IQFLOAT -f 438775 &amp;amp;&lt;br /&gt;
python /home/pi/rpitx_interface.py &amp;amp;&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Stop_tx.sh script called when SVXlink want to stop sending, so I kill processes'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;stop&amp;quot;&lt;br /&gt;
sudo killall nc python rpitx&lt;br /&gt;
exit 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SVXlink configuration changes are :'''&lt;br /&gt;
&lt;br /&gt;
In [RX1] of svxlink.conf configure TYPE=Ddr, SIGLEV_DET=DDR, SIGLEV_DET=2.61, SIGLEV_OFFSET=150, FQ=433540000, WBRX=WbRX1&lt;br /&gt;
&lt;br /&gt;
In [WbRX1] put TYPE=RtlUSB, DEV_MATCH=0, HOST=localhost, PORT=1234, CENTER_FQ=433540000, GAIN=3.7,PEAK_METER=1, SAMPLE_RATE=960000&lt;br /&gt;
&lt;br /&gt;
In [TX1] put TYPE=LOCAL, AUDIO_DEV=udp:127.0.0.1:1235, AUDO_CHANNEL=0, PTT_TYPE=PTY, PTT_PTY=/home/pi/ptt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are the most important and relevant settings which need to be set.&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/DVB-S_2KS_DATV-Express_instellingen_op_PI6HLM</id>
		<title>DVB-S 2KS DATV-Express instellingen op PI6HLM</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/DVB-S_2KS_DATV-Express_instellingen_op_PI6HLM"/>
				<updated>2025-03-17T19:35:55Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Instellingen DVB-S voor PI6HLM.'''&lt;br /&gt;
[[Bestand:DATV-Express.JPG | thumb ]]&lt;br /&gt;
'''Datum December 2018'''&lt;br /&gt;
&lt;br /&gt;
PI6HLM ATV repeater heeft diverse digitale ingangen, o.a. een DVB-S ingang op 1252.6 Mhz en 436 Mhz. De gebruikte DVB ontvanger is een Tandberg ontvanger. Deze ontvanger is vast ingesteld op 200Ks/S, Fec 1/2, Service ID 1. Op deze Wiki pagina vind je de instellingen voor een specifieke DVB-S opstelling van een [https://www.crowdsupply.com/lime-micro/limesdr-mini LimeSDR mini] en [https://www.datv-express.com/ DATV-Express software]. Hoofdzakelijk kun je hier de instellingen van DATV-Express terugvinden. Voor vragen e-mail naar joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Bestand:DATV-Express.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Bestand:video_capture_settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:video_codec_settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:audio_capture_settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:audio_codec_settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Output_format.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:SI_Table_Settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Express_settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:DVB-S_settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/LimeSDR_interface_to_SVXlink_using_GNUradio</id>
		<title>LimeSDR interface to SVXlink using GNUradio</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/LimeSDR_interface_to_SVXlink_using_GNUradio"/>
				<updated>2025-03-17T19:35:18Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Interface SVXlink to LimeSDR.'''&lt;br /&gt;
[[Bestand:20180426_084801_resized.jpg | thumb ]]&lt;br /&gt;
Inspired from the setup of the Spotnik made by [https://f5nlg.wordpress.com/2016/01/06/svx-boutique/ F5NLG] and the Reflector technique from [https://github.com/sm0svx/svxlink/wiki SVXlink] and the French reflector network hereby the description of the experimental interface between SVXlink and [https://www.crowdsupply.com/lime-micro/limesdr-mini LimeSDR tranceiver] using GNUradio. The GNUradio flowchart was made with examples from OZ9AEC (NBFM TX/RX) and Michael DK5HH. SVXlink have UDP input and output possibilities and these are used to input/output to GNUradio blocks. The LimeSDR used in my setup is the LimeSDR mini (only 1 TX and 1 RX channel). Setup I use is RX on 430.540 Mhz and TX is on 438.775 Mhz. I use a Wouxun transceiver ( dual band ) to communicate. TX is set to 430.540 and receive is set to 438.775. (Simplex frequencies also possible)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
SVXlink TX audio is send to UDP Source and modulated in NBFM to the Osmocom block for the LimeSDR and audio is transmitted on 438.775. &lt;br /&gt;
&lt;br /&gt;
SVXlink RX audio is feed from UDP sink received from the Osmocom receiver block on 430.540 Mhz and converted with NBFM receiver.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
SVXLink.conf RX1 can be setup as AUDIO_DEV=udp:127.0.0.1:1234&lt;br /&gt;
&lt;br /&gt;
SVXLink.conf TX1 can be setup as AUDIO_DEV=udp:127.0.0.1:1235&lt;br /&gt;
&lt;br /&gt;
SVXlink audio interface op 16Khz&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
GNUradio block parameters are adjusted for this specific setup and are depending on antenne setup/distance from Portofoon and LimeSDR. These paramaters most likely need adjustments. Computer used with this setup is [https://www.udoo.org/udoo-x86/ UDOO X86 Advanced Plus] (50% CPU load) with Ubuntu 16 using GNUradio 3.7.12. &lt;br /&gt;
&lt;br /&gt;
'''Update''' now setup is used with Raspberry PI 2. See thumbnail picture how it looks like.&lt;br /&gt;
&lt;br /&gt;
Information how to build and use latest released SDR stack from source : [http://blog.reds.ch/?p=43 Building a full SDR stack from source for LimeSDR]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot_from_2018-03-17_20-47-40.png]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot_from_2018-03-17_20-46-56.png]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Any questions mail to joopk@hccnet.nl&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/DVB-T_2_Mhz_Ham-Mode_instellingen_op_PI6ZDM</id>
		<title>DVB-T 2 Mhz Ham-Mode instellingen op PI6ZDM</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/DVB-T_2_Mhz_Ham-Mode_instellingen_op_PI6ZDM"/>
				<updated>2025-03-17T19:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Instellingen DVB-T voor PI6ZDM.'''&lt;br /&gt;
[[Bestand:hides.png | thumb ]]&lt;br /&gt;
'''Datum October 2018'''&lt;br /&gt;
&lt;br /&gt;
PI6ZDM ATV repeater heeft diverse digitale ingangen, o.a. een DVB-T ingang op 1265 Mhz. De gebruikte DVB ontvanger is een [http://www.hides.com.tw/product_HV120_eng.html Hides ontvanger]. Deze ontvanger kent diverse modes waaronder de zogenaamde HAM modes, welke buiten de commerciele toepassingen vallen. Daarmee kan de bandbreedte instellingen gewijzigd worden, Normaliter zijn 6,7,8 Mhz bandbreedte gebruikelijk, deze ontvanger ondersteund ook 2,3,4 en 5 Mhz. Op deze Wiki pagina vind je de instellingen voor een specifieke DVB-T opstelling van een [https://www.crowdsupply.com/lime-micro/limesdr-mini LimeSDR mini] en [https://www.datv-express.com/ DATV-Express software]. Hoofdzakelijk kun je hier de instellingen van DATV-Express terugvinden. Voor vragen e-mail naar joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Bestand:video_capture.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:video-codec.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:audio_capture.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:audio-codec.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:output_format.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:si_tables.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:express_seetings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:DVB-T_settings.JPG]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Grafische_interface_voor_LEANDVB</id>
		<title>Grafische interface voor LEANDVB</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Grafische_interface_voor_LEANDVB"/>
				<updated>2025-03-17T19:33:25Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Grafische Interface voor LEANSDR V5.0'''&lt;br /&gt;
&lt;br /&gt;
[Originele link naar LEANSDR  http://www.pabr.org/radio/leandvb/leandvb.en.html]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Lean18_compl.png]]  Schermafbeelding Python Script&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Update September 2019:''' DVBS2 added to the User-interface. LEANDVB capability to decode DVBS-2 was added and therefore the necessary changes were implemented in this latest Wrapper for LeanDVB. This python script is depending on the leandvb software which needs to be compiled first. Once succesfully compiled this script can be copied in your home directory. Also copy &amp;quot;logo.png&amp;quot; [[Media:Logo_lean.png]] (please rename the logo_lean to logon.png) and lean_stop script in your home directory. Functional description, you can start the script by typing &amp;quot;python lean18.py&amp;quot; ( without the quotes ). The script will setup default paramaters suitable for DVBS2. In the same command shell the program and also Leandvb writes messages, in case of start up problems please read the messages. First thin is to goto settings and please fill in the path where the script can find leansdr and ldcp_tool. As a start you can keep the defaults. Later you can tweak parameters for example the gain or the specific DVBS2 parameters. The purpose of these parameters can be found on the website of Leandvb. Here you find what is Inpipe, RRC reject filters and roll off factors. This script only will pass these settings on when leandvb needs to be started. Python script will write a file in your home directory called &amp;quot;leanlastrun&amp;quot; and is used to keep the configuration when the program was used. What the python script is doing is to read all the settings and create a small shell script with the parameters needed to decode DVBS or DVBS2 and then it is executed. The shell file which is created is called &amp;quot;runlean&amp;quot;. It is an open file which you can investigate what parameters is being given to leandvb.&lt;br /&gt;
Once leandvb is running and can decode the stream then is it piped to &amp;quot;ffplay&amp;quot;. It is a very fast program to show the video. If you click on &amp;quot;stop&amp;quot; then the script will close ffplay and leandvb. Then you have the possibility to select other settings ( for xample another frequency ) and hit start again and so on. Prerequite is LEANDVB with DVBS2 capabilities compiled, then FFPLAY , and Python. In order to show the logo you have to run &amp;quot;sudo apt-get install python-imaging-tk. You can create your own logo to be displayed, just create a png file of approx 180x180 pixels and then copy the file logo.png in your home directory. The Python script is open and can be changed to your own needs. motivation to extend this python script with DVBS-2 was due to the launch of Oscar-100, a radio amateur transponder with WideBand DATV frequency space. This can be received by leandvb and an RTL dongle. Also thanks to Nico (ON7NDR) for his testing and recommendations, he tested directly with stations on Oscar-100. You can copy paste the script below in a file, then name it lean18.py , save it in your home directory. Then type &amp;quot;chmod +x lean18.py&amp;quot; (without the quotes) then you can run it from a command shell by typing ./lean18.py. Or you can type &amp;quot;python lean18.py&amp;quot;. PS the name is not important, you can name it what you like. In case you would to receive a zip file with the content please let me know by mail pe2jko@pg540.org and will send you a zip file. Note : In order to install and work with leandvb and this wrapper a reasonable knowledge of Linux is required. Please see below some pictures of succesfull received stations from Eshail-2 Oscar-100. Thanks to Nico !&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Uitgebreide Installatie instructies LEANDVB en LEANDVB Interface van Nico ON7NDR''' Hierbij de zeer uitgebreide installatie instructies inclusief illustraties en schermafbeeldingen. Prachtig stukje werk ! --&amp;gt; [[Media:Deel_1_installeren_van_leandvb_in_ubuntu_18.pdf| Deel 1, Leandvb installatie]] --&amp;gt; [[Media:Deel_2_de_Grafische_Interface.pdf| Deel 2 grafisch interface installatie]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Update Oktober 2017:''' Toegevoegd LimeSDR frontend. Keuze nu uit RTL-SDR of LimeSDR input. Dankzij de aanpassing van de maker van LEANSDR om 16 bit int´s te ondersteunen maakt het mogelijk om ook andere SDR radios te gebruiken. In combinatie met voorbeeldsource van LimeSuite ( BasicRX.cpp ) was het makkelijk om de LimeSDR te gebruiken als front-end. Ik heb in de settings nu een keuze mogelijkheid of je met de RTL of de Lime wilt ontvangen, als je de lime kiest kun je antenne input, bandbreedte en gain instellen. De IQ samples worden naar een pipe geschreven en Leandvb neemt die pipe als input data. Source beschikbaar als je ermee wilt werken. Testen met hoge samplerates zijn nog niet gedaan, alle sample rates van 2000 KS/s tot aan 150 Ks/s werken prima. Op deze manier wordt het mogelijk om op 13cm en 9cm ook DATV te ontvangen.&lt;br /&gt;
&lt;br /&gt;
'''Motivatie:''' LEANDVB is eigenlijk geschreven om de ISS te volgen en een DVB-S opname te maken zodra hij binnen bereik komt met behulp van een RTL SDR dongle. Software wordt aangestuurd door parameters op de command line. Om eenvoudiger het programma te kunnen gebruiken heb ik er een Python script omheen gemaakt waardoor de meest gebruikte parameters ingesteld kunnen worden in daarvoor gemaakte invoer velden. Ik zal het hier beschrijven en delen op deze pagina. Een aantal parameters zijn belangrijk, de ontvangst frequentie, de sample rate en de afwijking van de RTL dongel. (Erg belangrijk bij lage sample rates). Voor deze parameters zijn 3 aparte invoervelden gemaakt, daarnaast kun je opgeven of je de automatische gain aan wilt zetten en of je low sample rate gaat gebruiken, bv 250 KS/s. Script berekend de sample rate die de RTL dongel mag gebruiken. Uiteindelijk maakt dit programma een opstart bestand genaamd ¨runlean¨ en gaat dit opstarten als op button ¨execute¨ klikt. De ingestelde parameters worden ook opgeslagen in een bestand genaamd ¨leanlastrun¨, dit bestand wordt ingelezen als je het programma weer opstart, anders zou je telkens weer de parameters moeten ingeven en dat vinden wij niet zo leuk. Dit script start ook meteen leandvb op, dus je krijgt meteen wat te zien als je op ëxecute¨ klikt. Om een andere instelling te activeren moet je eerst leandvb en eventueel een schermafbeelding sluiten ( kruisje sluiten activeren in 1 van de leandvb windows). PS, als je geen ffplay hebt dan kun je dit vervangen door mplayer in het script. &lt;br /&gt;
&lt;br /&gt;
'''Installatie tips:''' Zie hieronder de source, als je dit copy-paste in een bestand en in dezelfde directory zet als leandv en je geeft het bv de naam ¨leandv-gui.py¨ dan kun je dat bestand een vlag geven dat het opgestart kan worden als je er dubbel op klikt, commando = sudo chmod +x leandvb-gui.py , een andere mogelijkheid om het op te starten is het volgende commando : sudo python leandvb-gui.py . Als je een kleine jpg image van 180x180 pixels genaamd logo.jpg in dezelfde directory zet krijg je een mooi plaatje in de rechter bovenhoek. Als je het er niet inzet blijft die plek leeg.&lt;br /&gt;
&lt;br /&gt;
Ontwikkeld voor Raspberry PI3 (rasbian) en UBUNTU 14.04 of hoger, kan zijn dat bepaalde modules nodig zijn, die kunnen over het algemeen dmv de bekende sudo apt-get commandoś geinstalleerd worden. In ieder geval is sudo apt-get install python-imaging-tk package noodzakelijk dit is om het logo zichtbaar te maken wat overigens zelf te bepalen is, kun je bv je call in zetten (hi)). Voor deze geweldige Software only DVB ontvanger is enige kennis van Linux noodzakelijk. Voordeel is dat je alles kunt aanpassen naar je eigen idee en smaak.&lt;br /&gt;
&lt;br /&gt;
'''Testen:''' 2000 KS/s op Raspberry PI 3 is haalbaar in geval je hem op no-preprocessing zet. F4DAV heeft heel veel verbeteringen aangebracht en instelmogelijkheden. Dit geeft flexibiliteit en inzetmogelijkhden op diverse hardware platvormen. Computer systemen met veel rekenpower kunnen de functie Max Sensitivity gebruiken, Raspberry PI kun je zonder pre-processing of GUI nog een hoge sample rate zichtbaar maken. Zeer flexibel en afhankelijk van ontvangst signaal nivo en kwaliteit kun je een zo optimale instelling kiezen. Als je vragen hebt over de grafische schil, stuur een mail naar joopk@hccnet.nl en probeer je te helpen. Voor deze software is goede kennis van Linux noodzakelijk om op te zetten. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
from Tkinter import *&lt;br /&gt;
from PIL import ImageTk, Image&lt;br /&gt;
from os.path import expanduser&lt;br /&gt;
home = expanduser(&amp;quot;~&amp;quot;)&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Simple UI voor LEANDVB, DVBS receiver.&lt;br /&gt;
# requires sudo apt-get install python-imaging-tk package&lt;br /&gt;
# keep everything in your home directory&lt;br /&gt;
# if you add a 180x180 pixels file called logo.png it will be&lt;br /&gt;
# showed in richt corner.&lt;br /&gt;
# Leandvb by F4DAV (github leansdr)&lt;br /&gt;
# Wrapper by pe2jko@540.org&lt;br /&gt;
&lt;br /&gt;
master = Tk()&lt;br /&gt;
master.title('LeanDVB DVBS + DVBS2 interface')&lt;br /&gt;
&lt;br /&gt;
parameters = &amp;quot;&amp;quot;&lt;br /&gt;
lengte=0&lt;br /&gt;
parameter1_conv1=0&lt;br /&gt;
parameter2_conv2=0&lt;br /&gt;
parameter3_conv3= &amp;quot;&amp;quot;&lt;br /&gt;
print &amp;quot;Home directory = &amp;quot; + home&lt;br /&gt;
if os.path.isfile(home+&amp;quot;/leanlastrun&amp;quot;):&lt;br /&gt;
    file = open(home+&amp;quot;/leanlastrun&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    parameter1 = file.readline() #freq&lt;br /&gt;
    parameter2 = file.readline() #samplerate&lt;br /&gt;
    parameter3 = file.readline() #fec&lt;br /&gt;
    parameter6 = file.readline() #tune&lt;br /&gt;
    parameter4 = file.readline() #fastlock&lt;br /&gt;
    parameter5 = file.readline() #lowsr&lt;br /&gt;
    parameter7 = file.readline() #viterbi&lt;br /&gt;
    parameter8 = file.readline() #Gui&lt;br /&gt;
    parameter9 = file.readline() #dvbs2&lt;br /&gt;
    parameter10 = file.readline() #max sensitive&lt;br /&gt;
    parameter11 = file.readline() #hard-metric&lt;br /&gt;
    parameter12 = file.readline() #rtl0&lt;br /&gt;
    parameter13 = file.readline() #rtl1&lt;br /&gt;
    parameter14 = file.readline() #pad leandvb&lt;br /&gt;
    parameter15 = file.readline() #ppm&lt;br /&gt;
    parameter16 = file.readline() #ant&lt;br /&gt;
    parameter17 = file.readline() #gain_lime&lt;br /&gt;
    parameter18 = file.readline() #gain_lime_bandbreedte&lt;br /&gt;
    parameter19 = file.readline() #gain_rtl&lt;br /&gt;
    parameter20 = file.readline() #viewer&lt;br /&gt;
    parameter21 = file.readline() #rolloff_factor&lt;br /&gt;
    parameter22 = file.readline() #rrc_rej&lt;br /&gt;
    parameter23 = file.readline() #nhelpers&lt;br /&gt;
    parameter24 = file.readline() #inpipe&lt;br /&gt;
    parameter25 = file.readline() &lt;br /&gt;
&lt;br /&gt;
    parameter1_conv1 = str(parameter1[:-1])&lt;br /&gt;
    parameter2_conv2 = int(parameter2)&lt;br /&gt;
    parameter3_conv3 = str(parameter3[:3])&lt;br /&gt;
    parameter4_conv4 = int (parameter6)&lt;br /&gt;
    parameter16_conv = str(parameter16[:-1])&lt;br /&gt;
    parameter17_conv = str(parameter17[:-1])&lt;br /&gt;
    parameter18_conv = str(parameter18[:-1])&lt;br /&gt;
    parameter19_conv = str(parameter19[:-1])&lt;br /&gt;
    parameter20_conv = str(parameter20[:-1])&lt;br /&gt;
    parameter21_conv = str(parameter21[:-1])&lt;br /&gt;
    parameter22_conv = str(parameter22[:-1])&lt;br /&gt;
    parameter23_conv = str(parameter23[:-1])&lt;br /&gt;
    parameter24_conv = str(parameter24[:-1])&lt;br /&gt;
    file.close()&lt;br /&gt;
else:&lt;br /&gt;
    parameter1_conv1 = 1252&lt;br /&gt;
    parameter2_conv2 = 2000&lt;br /&gt;
    parameter3_conv3 = &amp;quot;1/2&amp;quot;&lt;br /&gt;
    parameter4_conv4 = 0&lt;br /&gt;
    parameter1 = &amp;quot;1252&amp;quot;&lt;br /&gt;
    parameter2 = &amp;quot;2000&amp;quot;&lt;br /&gt;
    parameter3 = 1&lt;br /&gt;
    parameter4 = 1&lt;br /&gt;
    parameter5 = 1&lt;br /&gt;
    parameter6 = 0&lt;br /&gt;
    parameter7 = 0&lt;br /&gt;
    parameter8 = 1&lt;br /&gt;
    parameter9 = 1&lt;br /&gt;
    parameter10 = 0&lt;br /&gt;
    parameter11 = 0&lt;br /&gt;
    parameter12 = 1&lt;br /&gt;
    parameter13 = 0&lt;br /&gt;
    parameter14 = home+&amp;quot;/leansdr/src/apps/ &amp;quot;&lt;br /&gt;
    parameter15 = 1&lt;br /&gt;
    parameter16_conv = 1&lt;br /&gt;
    parameter17_conv = &amp;quot;0.5&amp;quot;&lt;br /&gt;
    parameter18_conv = &amp;quot;3500000&amp;quot;&lt;br /&gt;
    parameter19_conv = &amp;quot;0&amp;quot;&lt;br /&gt;
    parameter20_conv = &amp;quot;ffplay&amp;quot;&lt;br /&gt;
    parameter21_conv = &amp;quot;0.35&amp;quot;&lt;br /&gt;
    parameter22_conv = &amp;quot;20&amp;quot;&lt;br /&gt;
    parameter23_conv = &amp;quot;4&amp;quot;&lt;br /&gt;
    parameter24_conv = &amp;quot;1000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
var1 = IntVar()&lt;br /&gt;
Checkbutton(master, font = &amp;quot;Verdana 13 italic&amp;quot;, text=&amp;quot;Fastlock&amp;quot;, variable=var1).grid(row=5, sticky=W)&lt;br /&gt;
var2 = IntVar()&lt;br /&gt;
Checkbutton(master, font = &amp;quot;Verdana 13 italic&amp;quot; ,text=&amp;quot;Low SR&amp;quot;, variable=var2).grid(row=5, column=1, sticky=W)&lt;br /&gt;
var3 = IntVar()&lt;br /&gt;
Checkbutton(master, font = &amp;quot;Verdana 13 italic&amp;quot; ,text=&amp;quot;Viterbi&amp;quot;, variable=var3).grid(row=5, column=1, sticky=E)&lt;br /&gt;
var4 = IntVar()&lt;br /&gt;
#Checkbutton(master, font = &amp;quot;Verdana 13 italic&amp;quot; ,text=&amp;quot;Hard-Metric&amp;quot;, variable=var4).grid(row=5, column=1)&lt;br /&gt;
&lt;br /&gt;
Label(master,font = &amp;quot;Verdana 10 italic&amp;quot;, text=&amp;quot;-----------------------&amp;quot;).grid(row=4,column=0)&lt;br /&gt;
Label(master,font = &amp;quot;Verdana 10 italic&amp;quot;, text=&amp;quot;---------------------------------------------------------&amp;quot;).grid(row=4,column=1)&lt;br /&gt;
var5 = IntVar()&lt;br /&gt;
Checkbutton(master, font = &amp;quot;Verdana 13 italic&amp;quot;, text=&amp;quot;Gui&amp;quot;, variable=var5).grid(row=7, sticky=W)&lt;br /&gt;
var6 = IntVar()&lt;br /&gt;
Checkbutton(master, font = &amp;quot;Verdana 13 italic&amp;quot; ,text=&amp;quot;DVBS-2&amp;quot;, variable=var6).grid(row=7, column=1, sticky=W)&lt;br /&gt;
var7 = IntVar()&lt;br /&gt;
Checkbutton(master, font = &amp;quot;Verdana 13 italic&amp;quot; ,text=&amp;quot;Max sensitive&amp;quot;, variable=var7).grid(row=7, column=1, sticky=E)&lt;br /&gt;
Label(master,font = &amp;quot;Verdana 8 italic&amp;quot;, text=&amp;quot;&amp;quot;).grid(row=6,column=0)&lt;br /&gt;
Label(master,font = &amp;quot;Verdana 8 italic&amp;quot;, text=&amp;quot;&amp;quot;).grid(row=8,column=0)&lt;br /&gt;
&lt;br /&gt;
rtl0 = IntVar()&lt;br /&gt;
rtl1 = IntVar()&lt;br /&gt;
ppm = IntVar()&lt;br /&gt;
padlean = StringVar()&lt;br /&gt;
ant = StringVar()&lt;br /&gt;
gain_rtl = StringVar()&lt;br /&gt;
gain_lime = StringVar()&lt;br /&gt;
viewer = StringVar()&lt;br /&gt;
rolloff_factor = StringVar()&lt;br /&gt;
rrc_rej_factor = StringVar()&lt;br /&gt;
nhelpers = StringVar()&lt;br /&gt;
inpipe = StringVar()&lt;br /&gt;
bandbreedte_lime = StringVar()&lt;br /&gt;
var1.set(int(parameter4))&lt;br /&gt;
var2.set(int(parameter5))&lt;br /&gt;
var3.set(int(parameter7))&lt;br /&gt;
var4.set(int(parameter11))&lt;br /&gt;
var5.set(int(parameter8))&lt;br /&gt;
var6.set(int(parameter9))&lt;br /&gt;
var7.set(int(parameter10))&lt;br /&gt;
rtl0.set(int(parameter12))&lt;br /&gt;
rtl1.set(int(parameter13))&lt;br /&gt;
padlean.set(str(parameter14[:-1]))&lt;br /&gt;
ppm.set(int(parameter15))&lt;br /&gt;
ant.set(parameter16_conv)&lt;br /&gt;
gain_lime.set(parameter17_conv)&lt;br /&gt;
bandbreedte_lime.set(parameter18_conv)&lt;br /&gt;
gain_rtl.set(parameter19_conv)&lt;br /&gt;
viewer.set(parameter20_conv)&lt;br /&gt;
rolloff_factor.set(parameter21_conv)&lt;br /&gt;
rrc_rej_factor.set(parameter22_conv)&lt;br /&gt;
nhelpers.set(parameter23_conv)&lt;br /&gt;
inpipe.set(parameter24_conv)&lt;br /&gt;
e = Entry(master, font = &amp;quot;Verdana 15 bold&amp;quot;)&lt;br /&gt;
f = Entry(master, font = &amp;quot;Verdana 15 bold&amp;quot;)&lt;br /&gt;
g = Entry(master, font = &amp;quot;Verdana 15 bold&amp;quot;)&lt;br /&gt;
h = Entry(master, font = &amp;quot;Verdana 15 bold&amp;quot;)&lt;br /&gt;
e.insert(0, parameter1_conv1)&lt;br /&gt;
f.insert(0, parameter2_conv2)&lt;br /&gt;
g.insert(0, parameter3_conv3)&lt;br /&gt;
h.insert(0, parameter4_conv4)&lt;br /&gt;
e.grid(row=0, column=1)&lt;br /&gt;
f.grid(row=1, column=1)&lt;br /&gt;
g.grid(row=2, column=1)&lt;br /&gt;
h.grid(row=3, column=1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
e.focus_set()&lt;br /&gt;
if os.path.isfile(home+&amp;quot;/logo.png&amp;quot;):&lt;br /&gt;
    im = Image.open(home+'/logo.png')&lt;br /&gt;
    photo = ImageTk.PhotoImage(im)&lt;br /&gt;
    label = Label(image=photo)&lt;br /&gt;
    label.image = photo&lt;br /&gt;
    label.grid(row=0, column=3, columnspan=2, rowspan=3,sticky=W+E+N+S, padx=5, pady=5)&lt;br /&gt;
&lt;br /&gt;
def einde():&lt;br /&gt;
   save_parms()&lt;br /&gt;
   master.destroy()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def preset1():&lt;br /&gt;
    top = Toplevel()&lt;br /&gt;
    top.title(&amp;quot;Default Settings&amp;quot;)&lt;br /&gt;
    top.geometry(&amp;quot;400x400+30+30&amp;quot;)    &lt;br /&gt;
    top.transient(master)&lt;br /&gt;
#    C1 = Checkbutton(top, font = &amp;quot;Verdana 11 italic&amp;quot;, text=&amp;quot;RTL=0&amp;quot;, variable=rtl0)&lt;br /&gt;
#    C1.pack()&lt;br /&gt;
#    C2 = Checkbutton(top, font = &amp;quot;Verdana 11 italic&amp;quot;, text=&amp;quot;LimeSDR=1&amp;quot;, variable=rtl1)&lt;br /&gt;
#    C2.pack()&lt;br /&gt;
    kk= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Path to Leansdr :&amp;quot;)&lt;br /&gt;
    kk.pack()&lt;br /&gt;
    i = Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=35, textvariable=padlean)&lt;br /&gt;
    i.pack()&lt;br /&gt;
&lt;br /&gt;
#    kl= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;------------&amp;quot;)&lt;br /&gt;
#    kl.pack()&lt;br /&gt;
&lt;br /&gt;
    kk= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;PPM offset RTL0&amp;quot;)&lt;br /&gt;
    kk.pack() &lt;br /&gt;
&lt;br /&gt;
    j = Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=ppm)&lt;br /&gt;
    j.pack()&lt;br /&gt;
&lt;br /&gt;
#    kn= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Antenne Lime&amp;quot;)&lt;br /&gt;
#    kn.pack() &lt;br /&gt;
&lt;br /&gt;
#    k= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=ant)&lt;br /&gt;
#    k.pack()&lt;br /&gt;
&lt;br /&gt;
#    km= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Gain Lime&amp;quot;)&lt;br /&gt;
#    km.pack() &lt;br /&gt;
&lt;br /&gt;
#    l= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=gain_lime)&lt;br /&gt;
#    l.pack()&lt;br /&gt;
&lt;br /&gt;
#    lm= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Bandbreedte Lime&amp;quot;)&lt;br /&gt;
#    lm.pack() &lt;br /&gt;
&lt;br /&gt;
#    kp= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=bandbreedte_lime)&lt;br /&gt;
#    kp.pack() &lt;br /&gt;
&lt;br /&gt;
    noo= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Gain RTL (0=Auto)&amp;quot;)&lt;br /&gt;
    noo.pack() &lt;br /&gt;
&lt;br /&gt;
    oo= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=gain_rtl)&lt;br /&gt;
    oo.pack() &lt;br /&gt;
&lt;br /&gt;
    qoo= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Roll Off Factor (DVBS2)&amp;quot;)&lt;br /&gt;
    qoo.pack() &lt;br /&gt;
&lt;br /&gt;
    qp= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=rolloff_factor)&lt;br /&gt;
    qp.pack() &lt;br /&gt;
&lt;br /&gt;
    qooo= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;RRC Rej Factor (DVBS2)&amp;quot;)&lt;br /&gt;
    qooo.pack() &lt;br /&gt;
&lt;br /&gt;
    qpp= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=rrc_rej_factor)&lt;br /&gt;
    qpp.pack() &lt;br /&gt;
&lt;br /&gt;
    qooop= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Nhelpers (DVBS2)&amp;quot;)&lt;br /&gt;
    qooop.pack() &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    qppp= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=nhelpers)&lt;br /&gt;
    qppp.pack() &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    oooop= Label(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, text=&amp;quot;Inpipe (DVBS2)&amp;quot;)&lt;br /&gt;
    oooop.pack() &lt;br /&gt;
&lt;br /&gt;
    qqppp= Entry(top, font = &amp;quot;Verdana 10&amp;quot;,width=15, textvariable=inpipe)&lt;br /&gt;
    qqppp.pack() &lt;br /&gt;
&lt;br /&gt;
#    okl= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;Viewer&amp;quot;)&lt;br /&gt;
#    okl.pack()&lt;br /&gt;
&lt;br /&gt;
#    okll= Entry(top, font = &amp;quot;Verdana 10&amp;quot;, width=15, textvariable=viewer)&lt;br /&gt;
#    okll.pack() &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    kll= Label(top, font = &amp;quot;Verdana 10&amp;quot;, text=&amp;quot;------------&amp;quot;)&lt;br /&gt;
    kll.pack()&lt;br /&gt;
    topButton0 = Button(top, bg=&amp;quot;yellow&amp;quot;, text=&amp;quot;SAVE&amp;quot;, command = lambda:[save_parms(),top.destroy()])&lt;br /&gt;
    topButton0.pack()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#    topButton = Button(top, text=&amp;quot;CLOSE&amp;quot;, command = top.destroy)&lt;br /&gt;
#    topButton.pack(side = BOTTOM )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def save_parms():&lt;br /&gt;
    sub = &amp;quot;&amp;quot;&lt;br /&gt;
    samplerate = 0&lt;br /&gt;
    freq = 0&lt;br /&gt;
    tune = 0&lt;br /&gt;
    fastlock = var1.get()&lt;br /&gt;
    lowsr = var2.get()&lt;br /&gt;
    viterbi = var3.get()&lt;br /&gt;
    gui = var5.get()&lt;br /&gt;
    dvbs2 = var6.get()&lt;br /&gt;
    maxprocess = var7.get()&lt;br /&gt;
    hardmetric = var4.get()&lt;br /&gt;
    rtldongle0 = rtl0.get()&lt;br /&gt;
    rtldongle1 = rtl1.get()&lt;br /&gt;
    leanpad = padlean.get()&lt;br /&gt;
    srsubstring = f.get()&lt;br /&gt;
    tunesubstring = str(1)&lt;br /&gt;
    opslaanfreq= e.get()&lt;br /&gt;
    fsubstring = float(e.get())&lt;br /&gt;
    tunesubstring = str(1)&lt;br /&gt;
    freq = fsubstring * 1000000&lt;br /&gt;
    freqfinal=int(freq)&lt;br /&gt;
    freq_lime=str(fsubstring)+&amp;quot;M&amp;quot;&lt;br /&gt;
    samplerate = int(srsubstring) * 1000&lt;br /&gt;
    fec = tkvar3.get()&lt;br /&gt;
    tune = h.get()&lt;br /&gt;
    ppmwaarde = ppm.get()&lt;br /&gt;
    antennewaarde = ant.get()&lt;br /&gt;
    gain_rtlwaarde = gain_rtl.get()&lt;br /&gt;
    gain_limewaarde = gain_lime.get()&lt;br /&gt;
    viewer_waarde = viewer.get()&lt;br /&gt;
    rolloff_factorwaarde = rolloff_factor.get()&lt;br /&gt;
    rrc_rej_factorwaarde = rrc_rej_factor.get()&lt;br /&gt;
    bandbreedte_limewaarde = bandbreedte_lime.get()&lt;br /&gt;
    nhelpers_waarde = nhelpers.get()&lt;br /&gt;
    inpipe_waarde = inpipe.get()&lt;br /&gt;
    file = open(home+&amp;quot;/runlean&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    file.write(&amp;quot;#!/bin/sh \n\n&amp;quot;)&lt;br /&gt;
    file.write(sub)&lt;br /&gt;
    file.close()&lt;br /&gt;
    file = open(home+&amp;quot;/leanlastrun&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    file.write(str(opslaanfreq) + &amp;quot;\n&amp;quot;)    &lt;br /&gt;
    file.write(srsubstring + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(fec + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(tune + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(fastlock) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(lowsr) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(viterbi) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(gui) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(dvbs2) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(maxprocess) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(hardmetric) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rtldongle0) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rtldongle1) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(leanpad) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(ppmwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(antennewaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(gain_limewaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(bandbreedte_limewaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(gain_rtlwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(viewer_waarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rolloff_factorwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rrc_rej_factorwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(nhelpers_waarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(inpipe_waarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(tunesubstring + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.close()&lt;br /&gt;
&lt;br /&gt;
def stop():&lt;br /&gt;
    os.system(home+&amp;quot;/lean_stop&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def callback():&lt;br /&gt;
    ppmwaarde = ppm.get()&lt;br /&gt;
    sub = &amp;quot;&amp;quot;&lt;br /&gt;
    sub1 = &amp;quot;&amp;quot;&lt;br /&gt;
    view = &amp;quot;&amp;quot;&lt;br /&gt;
    dvbs2string = &amp;quot;&amp;quot;&lt;br /&gt;
    samplerate = 0&lt;br /&gt;
    freq = 0&lt;br /&gt;
    tune = 0&lt;br /&gt;
    fastlock = var1.get()&lt;br /&gt;
    lowsr = var2.get()&lt;br /&gt;
    viterbi = var3.get()&lt;br /&gt;
    gui = var5.get()&lt;br /&gt;
    dvbs2 = var6.get()&lt;br /&gt;
    maxprocess = var7.get()&lt;br /&gt;
    hardmetric = var4.get()&lt;br /&gt;
    rtldongle0 = rtl0.get()&lt;br /&gt;
    rtldongle1 = rtl1.get()&lt;br /&gt;
    leanpad = padlean.get()&lt;br /&gt;
    antennewaarde = ant.get()&lt;br /&gt;
    gain_limewaarde = gain_lime.get()&lt;br /&gt;
    gain_rtlwaarde = gain_rtl.get()&lt;br /&gt;
    viewer_waarde = viewer.get()&lt;br /&gt;
    rolloff_factorwaarde = rolloff_factor.get()&lt;br /&gt;
    rrc_rej_factorwaarde = rrc_rej_factor.get()&lt;br /&gt;
    nhelpers_waarde = nhelpers.get()&lt;br /&gt;
    inpipe_waarde = inpipe.get()&lt;br /&gt;
    bandbreedte_limewaarde = bandbreedte_lime.get()&lt;br /&gt;
    if (viewer_waarde == &amp;quot;ffplay&amp;quot;):&lt;br /&gt;
	view = &amp;quot;ffplay -v 0&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
	view = &amp;quot;mplayer&amp;quot;&lt;br /&gt;
    if (lowsr == 1):&lt;br /&gt;
        bandbreedte = 1800000&lt;br /&gt;
    else:&lt;br /&gt;
        bandbreedte = 2400000&lt;br /&gt;
    if (fastlock == 1):&lt;br /&gt;
        fastlockstring = &amp;quot;--fastlock&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        fastlockstring = &amp;quot;&amp;quot;&lt;br /&gt;
    if (viterbi == 1):&lt;br /&gt;
        viterbistring = &amp;quot;--viterbi&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        viterbistring = &amp;quot;&amp;quot;&lt;br /&gt;
    if (gui == 1):&lt;br /&gt;
        guistring = &amp;quot;--gui&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        guistring = &amp;quot;&amp;quot;&lt;br /&gt;
    if (dvbs2 == 1):&lt;br /&gt;
        dvbs2string = &amp;quot;-S2&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        dvbs2string = &amp;quot;-S&amp;quot;&lt;br /&gt;
    if (maxprocess == 1):&lt;br /&gt;
        maxprocessstring = &amp;quot;--hq&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        maxprocessstring = &amp;quot;&amp;quot;&lt;br /&gt;
    if (hardmetric == 1):&lt;br /&gt;
        hardmetricstring = &amp;quot;--hard-metric&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        hardmetricstring = &amp;quot;&amp;quot;&lt;br /&gt;
    if (rtldongle0 == 1):&lt;br /&gt;
        rtlstring = &amp;quot;0&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        rtlstring = &amp;quot;1&amp;quot;&lt;br /&gt;
    srsubstring = f.get()&lt;br /&gt;
    opslaanfreq= e.get()&lt;br /&gt;
    fsubstring = float(e.get())&lt;br /&gt;
    tunesubstring = str(1)&lt;br /&gt;
    freq = fsubstring * 1000000&lt;br /&gt;
    freqfinal=int(freq)&lt;br /&gt;
    freq_lime=str(fsubstring)+&amp;quot;M&amp;quot;&lt;br /&gt;
    samplerate = int(srsubstring) * 1000&lt;br /&gt;
    fec = tkvar3.get()&lt;br /&gt;
    tune = h.get( )&lt;br /&gt;
    if (rtldongle0 == 1):&lt;br /&gt;
	if (dvbs2 == 1):&lt;br /&gt;
    		sub = &amp;quot;rtl_sdr -d &amp;quot; + rtlstring + &amp;quot; -f &amp;quot;  + str(freqfinal) + &amp;quot; -g &amp;quot; + gain_rtlwaarde +  &amp;quot; -s &amp;quot; + str(bandbreedte) + &amp;quot; -p &amp;quot; + str(ppmwaarde) + &amp;quot; - | &amp;quot; + str(leanpad) + &amp;quot;leandvb&amp;quot; + &amp;quot; &amp;quot; + guistring + &amp;quot; &amp;quot; + maxprocessstring + &amp;quot; &amp;quot; + viterbistring + &amp;quot; &amp;quot; + hardmetricstring + &amp;quot; &amp;quot; + fastlockstring + &amp;quot; --tune &amp;quot; + tune + &amp;quot; --standard DVB&amp;quot; + dvbs2string + &amp;quot; --ldpc-helper &amp;quot; + str(leanpad) + &amp;quot;ldpc_tool  --inpipe &amp;quot; + str(inpipe_waarde) + &amp;quot; --nhelpers &amp;quot; +str(nhelpers_waarde) + &amp;quot; --sampler rrc --rrc-rej &amp;quot; + str(rrc_rej_factorwaarde) + &amp;quot; -v --roll-off &amp;quot; + str(rolloff_factorwaarde) + &amp;quot; --sr &amp;quot; + str(samplerate) + &amp;quot; -f &amp;quot; + str(bandbreedte) + &amp;quot; | ffplay -v 0  - \n&amp;quot; &lt;br /&gt;
	else:&lt;br /&gt;
		sub = &amp;quot;rtl_sdr -d &amp;quot; + rtlstring + &amp;quot; -f &amp;quot;  + str(freqfinal) + &amp;quot; -g &amp;quot; + gain_rtlwaarde +  &amp;quot; -s &amp;quot; + str(bandbreedte) + &amp;quot; -p &amp;quot; + str(ppmwaarde) + &amp;quot; - | &amp;quot; + str(leanpad) + &amp;quot;leandvb&amp;quot; + &amp;quot; &amp;quot; + guistring + &amp;quot; &amp;quot; + maxprocessstring + &amp;quot; &amp;quot; + viterbistring + &amp;quot; &amp;quot; + hardmetricstring + &amp;quot; &amp;quot; + fastlockstring + &amp;quot; --tune &amp;quot; + tune + &amp;quot; --cr &amp;quot; + str(fec) + &amp;quot; --standard DVB&amp;quot; + dvbs2string + &amp;quot; -v --sr &amp;quot; + str(samplerate) + &amp;quot; -f &amp;quot; + str(bandbreedte) + &amp;quot; | &amp;quot; + str(view) + &amp;quot; - \n&amp;quot; &lt;br /&gt;
    else:&lt;br /&gt;
        sub1 = home+&amp;quot;/LimeSuite/builddir/bin/basicRX -a &amp;quot; + antennewaarde + &amp;quot; -r &amp;quot; + bandbreedte_limewaarde + &amp;quot; -g &amp;quot; + gain_limewaarde + &amp;quot; -f &amp;quot; + freq_lime + &amp;quot; -o 16 -b 3000000 &amp;amp;&amp;quot;&lt;br /&gt;
        sub = &amp;quot;cat ~/experiment | &amp;quot; + str(leanpad) + &amp;quot; &amp;quot; + guistring + &amp;quot; &amp;quot; + maxprocessstring + &amp;quot; &amp;quot; + viterbistring + &amp;quot; &amp;quot; + hardmetricstring + &amp;quot; &amp;quot; + fastlockstring + &amp;quot; --tune &amp;quot; + tune + &amp;quot; --cr &amp;quot; + str(fec) + &amp;quot; --sr &amp;quot; + str(samplerate) + &amp;quot; -f &amp;quot; +bandbreedte_limewaarde + &amp;quot; --s16 | ffplay -v 0 - &amp;amp;&amp;quot;&lt;br /&gt;
    file = open(home+&amp;quot;/runlean&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    file.write(&amp;quot;#!/bin/sh \n\n&amp;quot;)&lt;br /&gt;
    file.write(sub1)&lt;br /&gt;
    file.write(&amp;quot;\n\n&amp;quot;)&lt;br /&gt;
    file.write(sub)&lt;br /&gt;
    file.close()&lt;br /&gt;
    file = open(home+&amp;quot;/leanlastrun&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    file.write(str(opslaanfreq) + &amp;quot;\n&amp;quot;)    &lt;br /&gt;
    file.write(srsubstring + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(fec + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(tune + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(fastlock) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(lowsr) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(viterbi) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(gui) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(dvbs2) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(maxprocess) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(hardmetric) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rtldongle0) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rtldongle1) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(leanpad) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(ppmwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(antennewaarde) +&amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(gain_limewaarde) +&amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(bandbreedte_limewaarde) +&amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(gain_rtlwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(viewer_waarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rolloff_factorwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(rrc_rej_factorwaarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(nhelpers_waarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(str(inpipe_waarde) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.write(tunesubstring + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    file.close()&lt;br /&gt;
    os.system(&amp;quot;sh &amp;quot; + home + &amp;quot;/runlean &amp;amp;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Button(master,font = &amp;quot;Verdana 11 italic&amp;quot;, text='EXIT', command=einde).grid(row=7, column=3,sticky=E)&lt;br /&gt;
Button(master, font = &amp;quot;Verdana 11 italic&amp;quot;,highlightbackground='red',text='START', command=callback).grid(row=7, column=3,sticky=W)&lt;br /&gt;
Button(master, font = &amp;quot;Verdana 11 italic&amp;quot;,text='STOP', command=stop).grid(row=7, column=4,sticky=W)&lt;br /&gt;
Button(master, font = &amp;quot;Verdana 11 italic&amp;quot;,fg='red',highlightbackground='blue',text='    Settings    ', command=preset1).grid(row=5, column=3)&lt;br /&gt;
#Button(master, font = &amp;quot;Verdana 11 italic&amp;quot;,fg='red',highlightbackground='blue',text='  Save Settings ', command=save_parms).grid(row=5, column=3)&lt;br /&gt;
#Button(master, font = &amp;quot;Verdana 9 italic&amp;quot;,fg='red',highlightbackground='blue',text='UI options', command=preset3).grid(row=2, column=5, ipady=5,sticky=E, ipadx=5)&lt;br /&gt;
#Button(master, font = &amp;quot;Verdana 9 italic&amp;quot;,fg='red',highlightbackground='blue',text='General Options', command=preset4).grid(row=3, column=5, ipady=5,sticky=E,ipadx=5)&lt;br /&gt;
&lt;br /&gt;
tkvar1 = StringVar(master)&lt;br /&gt;
 &lt;br /&gt;
# Frequency Dropdown&lt;br /&gt;
choices1 = { '1252','1257','1260','436','437','1255','1252.600','1280','1250','1253'}&lt;br /&gt;
&lt;br /&gt;
tkvar1.set(parameter1[:-1]) # set the default option&lt;br /&gt;
 &lt;br /&gt;
popupMenu = OptionMenu(master, tkvar1, *choices1)&lt;br /&gt;
Label(master, text=&amp;quot; Frequency &amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 0, column = 0)&lt;br /&gt;
Label(master, text=&amp;quot;MHz&amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 0, column = 2,sticky=W)&lt;br /&gt;
popupMenu.grid(row = 0, column =1, sticky=E)&lt;br /&gt;
 &lt;br /&gt;
# on change dropdown value&lt;br /&gt;
def change_dropdown1(*args):&lt;br /&gt;
    print( tkvar1.get() )&lt;br /&gt;
    e.delete(0, END)&lt;br /&gt;
    e.insert(0, tkvar1.get())&lt;br /&gt;
    &lt;br /&gt;
 &lt;br /&gt;
# link function to change dropdown&lt;br /&gt;
tkvar1.trace('w', change_dropdown1)&lt;br /&gt;
&lt;br /&gt;
tkvar2 = StringVar(master)&lt;br /&gt;
 &lt;br /&gt;
# SampleRate&lt;br /&gt;
choices2 = { '33', '66','125','150','250','333','400','500','600','750','1000','1500','2000','2083','3000','4000','4340','5000'}&lt;br /&gt;
&lt;br /&gt;
tkvar2.set(parameter2[:-1]) # set the default option&lt;br /&gt;
 &lt;br /&gt;
popupMenu = OptionMenu(master, tkvar2, *choices2)&lt;br /&gt;
Label(master, text=&amp;quot; Samplerate &amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 1, column = 0)&lt;br /&gt;
Label(master, text=&amp;quot;S/R&amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 1, column = 2,sticky=W)&lt;br /&gt;
popupMenu.grid(row = 1, column =1, sticky=E)&lt;br /&gt;
 &lt;br /&gt;
# on change dropdown value&lt;br /&gt;
def change_dropdown2(*args):&lt;br /&gt;
    print( tkvar2.get() )&lt;br /&gt;
    f.delete(0, END)&lt;br /&gt;
    f.insert(0, tkvar2.get())&lt;br /&gt;
    &lt;br /&gt;
 &lt;br /&gt;
# link function to change dropdown&lt;br /&gt;
tkvar2.trace('w', change_dropdown2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tkvar3 = StringVar(master)&lt;br /&gt;
# Fec&lt;br /&gt;
choices3 = { '1/2','2/3','3/4','5/6','6/7','7/8' }&lt;br /&gt;
tkvar3.set(parameter3_conv3)&lt;br /&gt;
popupMenu = OptionMenu(master, tkvar3, *choices3)&lt;br /&gt;
Label(master, text=&amp;quot;FEC (auto@dvbs2)&amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 2, column = 0)&lt;br /&gt;
Label(master, text=&amp;quot;Div&amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 2, column = 2,sticky=W)&lt;br /&gt;
popupMenu.grid(row = 2, column =1, sticky=E)&lt;br /&gt;
 &lt;br /&gt;
# on change dropdown value&lt;br /&gt;
def change_dropdown3(*args):&lt;br /&gt;
    print( tkvar3.get() )&lt;br /&gt;
    g.delete(0, END)&lt;br /&gt;
    g.insert(0, tkvar3.get())&lt;br /&gt;
    &lt;br /&gt;
 &lt;br /&gt;
# link function to change dropdown&lt;br /&gt;
tkvar3.trace('w', change_dropdown3)&lt;br /&gt;
&lt;br /&gt;
tkvar4 = StringVar(master)&lt;br /&gt;
# Tune&lt;br /&gt;
choices4 = { '100','500','1000','2000','5000','10000','-100','-500','-1000','-2000','-5000','-10000'}&lt;br /&gt;
tkvar4.set(parameter4_conv4) # set the default option&lt;br /&gt;
 &lt;br /&gt;
popupMenu = OptionMenu(master, tkvar4, *choices4)&lt;br /&gt;
Label(master, text=&amp;quot;Tune&amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 3, column = 0)&lt;br /&gt;
Label(master, text=&amp;quot;Hz&amp;quot;, font = &amp;quot;Verdana 14 italic&amp;quot;).grid(row = 3, column = 2,sticky=W)&lt;br /&gt;
popupMenu.grid(row = 3, column =1, sticky=E)&lt;br /&gt;
 &lt;br /&gt;
# on change dropdown value&lt;br /&gt;
def change_dropdown4(*args):&lt;br /&gt;
    print(  )&lt;br /&gt;
    h.delete(0, END)&lt;br /&gt;
    h.insert(0, tkvar4.get())&lt;br /&gt;
    &lt;br /&gt;
 &lt;br /&gt;
# link function to change dropdown&lt;br /&gt;
tkvar4.trace('w', change_dropdown4)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mainloop()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
STOP SCRIPT &lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
Stop Script, copy past in a file, copy it in your home directory and type &amp;quot;chmod +x lean_stop&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
killall rtl_sdr&lt;br /&gt;
killall ffplay&lt;br /&gt;
killall leandvb&lt;br /&gt;
killall basicRX&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Contellatie8pskleandvb.png]]&lt;br /&gt;
----&lt;br /&gt;
[[Bestand:8psk_sq6qv.png]]&lt;br /&gt;
----&lt;br /&gt;
[[Bestand:Db2bg.png]]&lt;br /&gt;
----&lt;br /&gt;
[[Bestand:Dc0xh.png]]&lt;br /&gt;
----&lt;br /&gt;
[[Bestand:Dvbs.png]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Digilite-Raspberry_Pi_2x2</id>
		<title>Digilite-Raspberry Pi 2x2</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Digilite-Raspberry_Pi_2x2"/>
				<updated>2025-03-17T19:32:31Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''[Hardware]'''&lt;br /&gt;
Hierbij de beschrijving van mijn experimenten met RaspBerry PI model B+ en Raspberry Model 2 (v1.1) om IQ signalen door te geven aan bepaald gedeelte van de [http://www.g8ajn.tv/dlindex.html Digilite hardware], met name de Quadrature modulator AD8346. Na het beschikbaar komen van [http://f5oeo.fr/UglyDATV01.pdf UglyDATV] werden daar vrij snel goede resultaten mee behaald. De I en Q signalen van de Raspberry Pi model B+ (v1.2) worden aangeboden op de digilite PCB achter de 74ACT574, en vlak voor het Nyquest filter.Daarbij heb ik weerstanden R6/R8/R9/R10 verwijderd zodat de verbinding naar de 74ACT574 los kwamen te zitten, de PIC processor en de USB waren er al uit, dus uiteindelijk wordt alleen de Quadrature modulator gebruikt. Al vrij snel na het uitkomen van het snellere model [https://www.raspberrypi.org/products/raspberry-pi-2-model-b/ Raspberry PI 2] werden testen gedaan met het creeeren van de benodigde transport streams zodat het idee werd geboren om gebruik te maken van 2 Raspberry PI's. De eerste zorgt voor de DVB-S encoding dmv UglyDATV en de tweede RPI zorgt voor de transport stream. Op deze manier ontstaat een standalone DVB-S zender. De onderlinge communicatie wordt uitgevoerd door een crosslink netwerk kabel. De Raspberry Web camera is aangesloten op de snelste Raspberry PI 2 die dus de stream verzorgt. ''Note :'' testen met andere Nyquest filter waardes (dan 4 Ms/s) lieten zien dat RPI I en Q uitgang onvoldoende gebufferd waren en derhalve geen goede resultaten gaven.&lt;br /&gt;
&lt;br /&gt;
'''[Software]''' voor meer uitleg of vragen mail naar [[Gebruiker:Pe2jko| Joop Koopman]], Haarlem, JO22HI, E-mail address [mailto:JOOPK@HCCNET.NL joopk@hccnet.nl]&lt;br /&gt;
&lt;br /&gt;
In de eerste Raspberry PI ( model b+ ) draait een image van UglyDTV, daarbij maak ik gebruik van MNC ( ik denk een multicast netwerk receiver, was ook bijgeleverd in het UglyDATV image ) en de eigenlijk DVB-S encoder met de juiste pararmeters. 3 regels code :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfifo /tmp/netfifo&lt;br /&gt;
sudo /home/pi/UglyDATV/UglyDATV /tmp/netfifo 2083 1 0 0 &amp;amp;&lt;br /&gt;
/home/pi/UglyDATV/mnc -l -i eth0 -p 1234  239.0.0.1 &amp;gt;  /tmp/netfifo &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
De tweede Raspberry PI ( model 2 ) verzorgt de transport stream. De transport stream wordt dmv &amp;quot;tsudpsend&amp;quot; naar het multicast address gestuurd. (makkelijk als je bv dit wilt terug kijken via &amp;quot;mplayer udp://239.0.0.1:1234&amp;quot;)  &lt;br /&gt;
Er worden diverse streams gemaakt allemaal voor specifieke doeleinden. Deze streams worden opgestart / geselecteerd dmv een Wifi (dmv een Wifi dongle in de 2e Raspberry PI ( model 2 ). Een mobiele telefoon als router (Wifi hotspot) zorgt voor de SSH verbinding naar beide Raspberry PI's &lt;br /&gt;
&lt;br /&gt;
'''Voorbeeld''' H.264 stream voor SR 2083, met Webcam en audio via USB audio dongle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfifo /tmp/audio2.es&lt;br /&gt;
mkfifo /tmp/audio2.pes&lt;br /&gt;
mkfifo /tmp/video.es&lt;br /&gt;
mkfifo /tmp/video2.ts&lt;br /&gt;
mkfifo /tmp/audio2.ts&lt;br /&gt;
mkfifo /tmp/mux2.ts&lt;br /&gt;
mkfifo /tmp/buffer2.ts&lt;br /&gt;
mkfifo /tmp/testbeeld2.es&lt;br /&gt;
mkfifo /tmp/testbeeld2.pes&lt;br /&gt;
mkfifo /tmp/testbeeld2.ts&lt;br /&gt;
sudo nice -n -30 raspivid -s -n -w 720 -h 572 -b 1630000 -t 0 -pf high -fps 25 -g 12 -ih -o /tmp/video.es &amp;amp;&lt;br /&gt;
sudo nice -n -30 ffmpeg -analyzeduration 0 -probesize 2048 -r 25 -fpsprobesize 0 -max_delay 40000 -i /tmp/video.es -f h264 -r 25 -minrate 1630k -maxrate 1630k -bufsize 20K -vcodec copy -bufsize 20K -f mpegts  -mpegts_original_network_id 1 -mpegts_transport_stream_id 1 -mpegts_service_id 101 -streamid 0:101 -muxrate 1630000 -y /tmp/testbeeld2.es &amp;amp;&lt;br /&gt;
sudo nice -n -30 avconv -loglevel quiet -f alsa -i plughw:1 -vn -acodec mp2 -ab 128k -ar 48000 -f mp2 -y /tmp/audio2.es &amp;amp;&lt;br /&gt;
/usr/local/bin/esaudio2pes /tmp/audio2.es 1152 48000 384 -1 3600 &amp;gt; /tmp/audio2.pes &amp;amp;&lt;br /&gt;
/usr/local/bin/pesaudio2ts 102 1152 48000 384 0 /tmp/audio2.pes &amp;gt; /tmp/audio2.ts &amp;amp;&lt;br /&gt;
/usr/local/bin/tscbrmuxer b:188000 /tmp/audio2.ts b:1630000 /tmp/testbeeld2.es b:3008 /home/pi/tables/d_101_102/pat.ts b:1500 /home/pi/tables/d_101_102/pmt.ts b:1500 /home/pi/tables/d_101_102/sdt.ts b:1400 /home/pi/tables/d_101_102/nit.ts o:1919628 /home/pi/null.ts &amp;gt; /tmp/mux2.ts &amp;amp;&lt;br /&gt;
/usr/local/bin/tspcrstamp /tmp/mux2.ts 1919628 &amp;gt; /tmp/buffer2.ts &amp;amp;&lt;br /&gt;
/usr/local/bin/tsudpsend /tmp/buffer2.ts 239.0.0.1 1234 1919628 &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Voorbeeld''' MPEG2 stream voor SR 2083, met Webcam still images elke 800 ms en audio via USB audio dongle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfifo /tmp/audio2.es&lt;br /&gt;
mkfifo /tmp/audio2.pes&lt;br /&gt;
mkfifo /tmp/video.es&lt;br /&gt;
mkfifo /tmp/video2.ts&lt;br /&gt;
mkfifo /tmp/audio2.ts&lt;br /&gt;
mkfifo /tmp/mux2.ts&lt;br /&gt;
mkfifo /tmp/buffer2.ts&lt;br /&gt;
mkfifo /tmp/testbeeld2.es&lt;br /&gt;
mkfifo /tmp/testbeeld2.pes&lt;br /&gt;
mkfifo /tmp/testbeeld2.ts&lt;br /&gt;
raspistill --nopreview -w 720 -h 576 -q 5 -o /tmp/pic.jpg -tl 800 -t 9999999 -th 0:0:0 &amp;amp;&lt;br /&gt;
sudo nice -n -30 avconv -loglevel quiet -loop 1 -f image2 -r 1 -i /tmp/pic.jpg -r 25 -an -s 720x576 -aspect 4:3 -vf drawtext=fontsize=44:fontcolor=Yellow:fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:text='PE2JKO D-ATV':x=80:y=60:box=1:boxcolor=0x00000256@0 -b 1300k -vcodec mpeg2video -f mpeg2video -y /tmp/testbeeld2.es &amp;amp;&lt;br /&gt;
sudo nice -n -30 avconv -loglevel quiet -f alsa -i plughw:1 -vn -acodec mp2 -ab 128k -ar 48000 -f mp2 -y /tmp/audio2.es &amp;amp;&lt;br /&gt;
/usr/local/bin/esvideompeg2pes /tmp/testbeeld2.es &amp;gt; /tmp/testbeeld2.pes &amp;amp;&lt;br /&gt;
/usr/local/bin/esaudio2pes /tmp/audio2.es 1152 48000 384 -1 3600 &amp;gt; /tmp/audio2.pes &amp;amp;&lt;br /&gt;
/usr/local/bin/pesvideo2ts 101 25 112 1630000 0 /tmp/testbeeld2.pes &amp;gt; /tmp/testbeeld2.ts &amp;amp;&lt;br /&gt;
/usr/local/bin/pesaudio2ts 102 1152 48000 384 0 /tmp/audio2.pes &amp;gt; /tmp/audio2.ts &amp;amp;&lt;br /&gt;
/usr/local/bin/tscbrmuxer b:188000 /tmp/audio2.ts b:1630000 /tmp/testbeeld2.ts b:3008 /home/pi/tables/v101_a102/pat.ts b:1500 /home/pi/tables/v101_a102/pmt.ts b:1500 /home/pi/tables/v101_a102/sdt.ts b:1400 /home/pi/tables/v101_a102/nit.ts o:1919628 /home/pi/null.ts &amp;gt; /tmp/mux2.ts &amp;amp;&lt;br /&gt;
/usr/local/bin/tspcrstamp /tmp/mux2.ts 1919628 &amp;gt; /tmp/buffer2.ts &amp;amp;&lt;br /&gt;
/usr/local/bin/tsudpsend /tmp/buffer2.ts 239.0.0.1 1234 1919628 &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''PE2JKO uitvoering'', op de foto wordt de Hauppage MPEG2 encoder '''niet''' gebruikt (grote printplaat met tuner blikje).&lt;br /&gt;
[[Bestand:RPI-DVB.jpg]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/DVB-S_zender_met_1x_Raspberry_PI3_en_RPIDATV</id>
		<title>DVB-S zender met 1x Raspberry PI3 en RPIDATV</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/DVB-S_zender_met_1x_Raspberry_PI3_en_RPIDATV"/>
				<updated>2025-03-17T19:31:07Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Bestand:Pi3-dvb-screen.png]] [[Bestand:Pi3-dvb-screen2.png]]&lt;br /&gt;
----&lt;br /&gt;
Schermafbeelding van Python Script VCO lock op 1260 MHz en 2e Schermafbeelding van Python script op 436 Mhz en Multicast stream aktief&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beschrijving :'''&lt;br /&gt;
&lt;br /&gt;
DVB-S zender op basis van Raspberry PI-3, DVB-S opzet printje van PA0RJV, VCO 35 Mhz-4400 Mhz, software van F5OEO, RPIDATV en besturing van PE2JKO. Enige rvaring met Linux en Raspberry PI is aanbevolen, &lt;br /&gt;
&lt;br /&gt;
'''Bronnen :'''&lt;br /&gt;
&lt;br /&gt;
''Raspberry PI-3 -'' https://www.sossolutions.nl/raspberry-pi-model-3b?gclid=COjLtLXNis4CFcKVGwodEoAK0g&lt;br /&gt;
&lt;br /&gt;
''DVB-S opzet printje PA0RJV -'' http://www.pg540.org/wiki/index.php/SETUP-DATV_DVB-S_Print_for_Raspberry_PI_in_the_English_language&lt;br /&gt;
&lt;br /&gt;
''VCO 35-4400 Mhz ADF4351-development-board op AliExpress'' [http://nl.aliexpress.com/item/35M-4-4G-signal-source-ADF4351-development-board-control-FOR-frequency-sweep/32496544061.html?spm=2114.010208.3.1.PgyQZa&amp;amp;ws_ab_test=searchweb201556_7,searchweb201602_1_10057_10056_10037_10055_10049_301_10059_10058_10032_10017_405_404_106_10040_105_104_10060_103_102,searchweb201603_1&amp;amp;btsid=8839c8b8-0564-416e-877e-bfb9374ef721 ALI ]&lt;br /&gt;
&lt;br /&gt;
''RPIDATV -'' https://github.com/F5OEO/rpidatv&lt;br /&gt;
&lt;br /&gt;
In een vorige bouw beschrijving van een DATV zender heb ik gebruik gemaakt van 2 Raspberry PI computers, een RPI die als modulator dient (met UglyDATV) en een RPI-2 die zorg draagt voor het maken van de streams gebruik makend van multicast. Dit ontwerp is gebaseerd op 1 Raspberry PI-3, die verzorgt de stream en ook de DVB-S modulator en de besturing. Ik maak gebruik van basis elementen welke terug te vinden zijn als bron vermeldingen. Eigen ontwerp is de besturing van VCO en aansturing van de streams. Zal dus op dit gebied proberen te beschrijven wat er gebeurd. Informatie inzake bronvermeldingen is er volop op internet te vinden, daar ga ik hier niet dieper op in. &lt;br /&gt;
&lt;br /&gt;
'''Motivatie:'''&lt;br /&gt;
&lt;br /&gt;
De VCO is een belangrijk onderdeel van een DVB-S zender en frequentie instelling dient eenvoudig te zijn en waar je op kunt vertrouwen, er zijn al voldoende variabelen die succes van DVB-S kunnen beinvloeden, dus VCO moet gewoon werken. Ik wilde dit door de Raspberry PI-3 besturen. Niet gehinderd door enige kennis heb ik het als volgt opgelost, ik heb ervoor gezorgd dat de ingebouwde bleutooth UART van de Raspberry PI-3 wordt uitgeschakeld waardoor UART naar de GPIO pennen kunnen worden gebruikt. Op GPIOpin 14 en 15 kan ik daardoor dmv een programma geschreven in C commandoś sturen naar een Atmega-8 die ik als opsteekprintje op de Raspberry PI-3 heb gemonteerd. Het programma stuurt inhoudt van een file naar die Atmega-8, de ATmega8 ontvangt deze frequentie instellingen en zet de registers van de ADF4351. De VCO vertelt of ie gelocked is en schrijft een file terug op de Raspberry PI-3. Een Python script zorgt nu om het geheel met elkaar samen te laten werken. Het python script is gebouwd om dmv een muis of touch screen in te stellen wat de frequentie moet zijn en welke stream er moet worden opgestart. De besturing is goed leesbaar en daardoor ook aanpasbaar naar je eigen wensen. Een VCO lock of (unlock) wordt grafisch weergegeven door een groene of rode box van de frequentie weergave. Als deze groen is dan is dat een indicatie dat de VCO gelocked is, als het rood is dan is de frequrentie niet in lock en zal DVB-S niet goed worden ontvangen. Op dit moment kun je kiezen uit 7 verschillende streams en 4 verschillende frequenties. Dat is engiszins gelimiteerd, maar voldoende op dit moment voor mijn toepassing, uitbreiding is onbeperkt mogelijk vanwege gebruik van Python. &lt;br /&gt;
&lt;br /&gt;
Wat is belangrijk, het bouwen van het opzet printje voor de Rasperry PI waarop een atmega8 zit, die zit met 5 draden aan de VCO printje van AliExpress, de ADF4351. LE/Data/Clock/MUXOUT/5v/GND. [[Bestand:Screenshot_from_2016-07-25_22-42-45.png|thumb]] Het programma serpush.c leest uit een file (~/freq) de frequentie, die stuurt ie via RS232 naar ATmega8 en die stuurt weer de 5 registers aan afhankelijk van de gewenste frequentie. De source van de ATMEGA8 is ook beschikbaar. Die is door dmv Bascom (Basic Compiler) gemaakt (E-MAIL naar joopk@hccnet.nl). Als de frequentie is ontvangen worden de registers gezet en zal de ADF4351 melden of ie gelocked is, dat stuurt het opzet boardje terug en wordt door de raspberry PI-3 herkent/opgeslagen in de file ~/lock.&lt;br /&gt;
&lt;br /&gt;
'''Gebruikte controle files :''' &lt;br /&gt;
&lt;br /&gt;
''freq''		bepaalt frequentie van VCO (bv 1252.50)&lt;br /&gt;
&lt;br /&gt;
''lock''		bepaalt of VCO gelocked is ( 1 = locked, 0 = unlocked)&lt;br /&gt;
&lt;br /&gt;
''rate''		status geselecteerde stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Het opzet printje heb ik zodanig gemaakt dat de 5v van de pennen van de GPIO komt, omdat ik een ATMEGA8 gebruik moet ik er wel voor zorgen dat de verbinding naar VCO board dmv een spanningsdeler van 5v naar 3.3 volt gaat want het VCO boardje wil graag 3.3v signalen zien. Ik verbind de de TX van GPIO pin naar de RX van de ATMEGA8 en de RX van de rapsberry PI3 naar de TX van de ATMEGA8. Het opzet printje verzorgt ook de spanning naar het VCO boardje. De ATMEGA8 werkt met een kristal (niet zo kritisch, best = 7,3728 MHz) en heeft een connector om inline te programmeren (ISP). Zodra printje aan gaat zal er worden geluisterd op 300 baud naar de Raspberry PI3, zodra een frequentie wordt ontvangen ( in het formaat xxxx.xx ( 2 cijfers achter de comma ), dwz per 100 Khz ) worden de juiste register waardes berekend om de ADF4351 in te stellen. Het programma op de Raspberry pi-3 genaamd serpush.c ontvangt ook of de VCO gelocked is en als ie gelocked is schrijft ie een 1 in de file ~/lock. Dus in 1 sessie wordt frequentie doorgegeven aan de ATMEGA8 en de ATMEGA8 stuurt de lock status weer terug. Dat is alles.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
''Source serpush.c, compileren dmv commando = cc serpush.c -o serpush''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    int main(int argc, char ** argv) {&lt;br /&gt;
&lt;br /&gt;
      int fdr;&lt;br /&gt;
&lt;br /&gt;
      fdr = open(&amp;quot;/home/pi/freq&amp;quot;,O_RDONLY); &lt;br /&gt;
      if (fdr == -1) {&lt;br /&gt;
        perror(&amp;quot;open_port: Unable to open /home/pi/freq - &amp;quot;);&lt;br /&gt;
        return(-1);&lt;br /&gt;
      }&lt;br /&gt;
      char buf1[256];&lt;br /&gt;
      int n1; &lt;br /&gt;
      n1 = read(fdr, (void*)buf1, 255);&lt;br /&gt;
      if (n1 &amp;lt; 0) {&lt;br /&gt;
        perror(&amp;quot;Read failed - &amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
      } else if (n1 == 0) printf(&amp;quot;No data on port\n&amp;quot;);&lt;br /&gt;
      else {&lt;br /&gt;
        buf1[n1] = '\0';&lt;br /&gt;
        printf(&amp;quot;%i bytes read : %s&amp;quot;, n1, buf1);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      int fd = open_port();&lt;br /&gt;
      change_bps(fd); &lt;br /&gt;
&lt;br /&gt;
    // Write to the port&lt;br /&gt;
      int n = write(fd,buf1,9);&lt;br /&gt;
      if (n &amp;lt; 0) {&lt;br /&gt;
        perror(&amp;quot;Write failed - &amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Read up to 255 characters from the port if they are there&lt;br /&gt;
      char buf[256];&lt;br /&gt;
      n = read(fd, (void*)buf, 255);&lt;br /&gt;
      if (n &amp;lt; 0) {&lt;br /&gt;
        perror(&amp;quot;Read failed - &amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
      } else if (n == 0) printf(&amp;quot;No data on port\n&amp;quot;);&lt;br /&gt;
      else {&lt;br /&gt;
        buf[n] = '\0';&lt;br /&gt;
        printf(&amp;quot;%i bytes read : %s&amp;quot;, n, buf);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Don't forget to clean up&lt;br /&gt;
      close(fd);&lt;br /&gt;
      close(fdr);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void change_bps(int fd)&lt;br /&gt;
{&lt;br /&gt;
    struct termios options;&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * Get the current options for the port...&lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
    tcgetattr(fd, &amp;amp;options);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * Set the baud rates to ...&lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
        cfsetispeed(&amp;amp;options, B300);&lt;br /&gt;
        cfsetospeed(&amp;amp;options, B300);&lt;br /&gt;
        tcsetattr(fd, TCSADRAIN, &amp;amp;options);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    int&lt;br /&gt;
    open_port(void)&lt;br /&gt;
    {&lt;br /&gt;
      int fd; /* File descriptor for the port */&lt;br /&gt;
      fd = open(&amp;quot;/dev/ttyAMA0&amp;quot;, O_RDWR | O_NOCTTY | O_NDELAY);&lt;br /&gt;
      if (fd == -1)&lt;br /&gt;
      {&lt;br /&gt;
        perror(&amp;quot;open_port: Unable to open /dev/ttyS0 - &amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
        fcntl(fd, F_SETFL, 0);&lt;br /&gt;
      return (fd);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Python besturing source, hiermee kun je dmv de muis of touchscreen de juiste stream selecteren en de juiste frequentie instellen. :'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import Tkinter&lt;br /&gt;
import subprocess&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
from Tkinter import *&lt;br /&gt;
from Tkinter import BOTH, W, NW, SUNKEN, TOP, X, FLAT, LEFT&lt;br /&gt;
&lt;br /&gt;
top = Tkinter.Tk()&lt;br /&gt;
&lt;br /&gt;
time1 = ''&lt;br /&gt;
clock = Label(top, font=('Purisa', 12), bg='powder blue')&lt;br /&gt;
clock.pack(fill=BOTH, expand=1)&lt;br /&gt;
&lt;br /&gt;
def tick():&lt;br /&gt;
    global time1&lt;br /&gt;
    time2 = time.strftime('%H:%M:%S')&lt;br /&gt;
    if time2 != time1:&lt;br /&gt;
        time1 = time2&lt;br /&gt;
        clock.config(text=time2)&lt;br /&gt;
    clock.after(200, tick)&lt;br /&gt;
&lt;br /&gt;
def helloCallBack():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/436000', shell=True)&lt;br /&gt;
   text = openInstrucktion()&lt;br /&gt;
   W.insert(&amp;quot;1.0&amp;quot;, text)&lt;br /&gt;
   W.insert(&amp;quot;1.10&amp;quot;, &amp;quot; MHz&amp;quot;)&lt;br /&gt;
   resultaat = lock()&lt;br /&gt;
   if resultaat == &amp;quot;LOCKED&amp;quot;:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;green2&amp;quot;)&lt;br /&gt;
   else:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;red&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
def helloCallBack2():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/1257000', shell=True)&lt;br /&gt;
   text = openInstrucktion()&lt;br /&gt;
   W.insert(&amp;quot;1.0&amp;quot;, text)&lt;br /&gt;
   W.insert(&amp;quot;1.10&amp;quot;, &amp;quot; MHz&amp;quot;)&lt;br /&gt;
   resultaat = lock()&lt;br /&gt;
   if resultaat == &amp;quot;LOCKED&amp;quot;:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;green2&amp;quot;)&lt;br /&gt;
   else:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;red&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def helloCallBack3():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/1260000', shell=True)&lt;br /&gt;
   text = openInstrucktion()&lt;br /&gt;
   W.insert(&amp;quot;1.0&amp;quot;, text)&lt;br /&gt;
   W.insert(&amp;quot;1.10&amp;quot;, &amp;quot; MHz&amp;quot;)&lt;br /&gt;
   resultaat = lock()&lt;br /&gt;
   if resultaat == &amp;quot;LOCKED&amp;quot;:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;green2&amp;quot;)&lt;br /&gt;
   else:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;red&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def helloCallBack4():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/1252500', shell=True)&lt;br /&gt;
   text = openInstrucktion()&lt;br /&gt;
   W.insert(&amp;quot;1.0&amp;quot;, text)&lt;br /&gt;
   W.insert(&amp;quot;1.10&amp;quot;, &amp;quot; MHz&amp;quot;)&lt;br /&gt;
   resultaat = lock()&lt;br /&gt;
   if resultaat == &amp;quot;LOCKED&amp;quot;:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;green2&amp;quot;)&lt;br /&gt;
   else:&lt;br /&gt;
       W.tag_add(&amp;quot;here&amp;quot;,&amp;quot;1.0&amp;quot;, END)&lt;br /&gt;
       W.tag_config(&amp;quot;here&amp;quot;, background = &amp;quot;red&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def helloCallBack5():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/sr2000-X11', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;orange&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def helloCallBack6():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/sr2000-testbeeld', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;orange&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def helloCallBack7():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/sr2000-testbeeld-hamradio', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;orange&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def helloCallBack8():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/sr2083-X11', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;orange&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def helloCallBack9():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/sr2083-testbeeld', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;orange&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def helloCallBack10():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/sr250-X11-fec12', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;orange&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def helloCallBack11():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/sr250-X11-fec78', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;orange&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def openInstrucktion():&lt;br /&gt;
    f= open(&amp;quot;/home/pi/freq&amp;quot;)&lt;br /&gt;
    text = f.read()&lt;br /&gt;
    return text&lt;br /&gt;
def openInstrucktion2():&lt;br /&gt;
    f= open(&amp;quot;/home/pi/rate&amp;quot;)&lt;br /&gt;
    text2 = f.read()&lt;br /&gt;
    return text2&lt;br /&gt;
&lt;br /&gt;
def lock():&lt;br /&gt;
    f= open(&amp;quot;/home/pi/lock&amp;quot;)&lt;br /&gt;
    text3 = f.read()&lt;br /&gt;
    if text3 == &amp;quot;1\n&amp;quot;:&lt;br /&gt;
    	resultaat = &amp;quot;LOCKED&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
    	resultaat = &amp;quot;UNLOCKED&amp;quot;&lt;br /&gt;
    return resultaat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def blink(rectangle, canvas):&lt;br /&gt;
    for i in range(3):&lt;br /&gt;
        canvas.itemconfigure(rectangle, fill = &amp;quot;red&amp;quot;)&lt;br /&gt;
        sleep(1)&lt;br /&gt;
        canvas.itemconfigure(rectangle, fill = &amp;quot;white&amp;quot;)&lt;br /&gt;
        sleep(1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def helloCallBack99():&lt;br /&gt;
   subprocess.call('/home/pi/Desktop/stop', shell=True)&lt;br /&gt;
   text2 = openInstrucktion2()&lt;br /&gt;
   V.insert(&amp;quot;1.0&amp;quot;, text2)&lt;br /&gt;
   V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
   V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
   V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
   F.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   G.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   H.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   I.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   J.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   K.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
   L.configure(background = &amp;quot;light grey&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
canvas = Canvas(width = 300, height = 50, bg = 'powder blue')&lt;br /&gt;
canvas.pack(expand = YES, fill = BOTH)&lt;br /&gt;
canvas.create_text(5,25 ,anchor= &amp;quot;w&amp;quot; ,font=(&amp;quot;Purisa&amp;quot;,20), text= &amp;quot;PE2JKO, D-ATV Raspberry PI 3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
B = Tkinter.Button(top, text =&amp;quot;436 MHz&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,12), command = helloCallBack)&lt;br /&gt;
C = Tkinter.Button(top, text =&amp;quot;1257 MHz&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,12), command = helloCallBack2)&lt;br /&gt;
D = Tkinter.Button(top, text =&amp;quot;1260 MHz&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,12), command = helloCallBack3)&lt;br /&gt;
E = Tkinter.Button(top, text =&amp;quot;1252.60 MHz&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,12), command = helloCallBack4)&lt;br /&gt;
F = Tkinter.Button(top, text =&amp;quot;2000KS/s X11&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,14), command = helloCallBack5)&lt;br /&gt;
G = Tkinter.Button(top, text =&amp;quot;2000KS/s TESTBEELD&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,14), command = helloCallBack6)&lt;br /&gt;
H = Tkinter.Button(top, text =&amp;quot;2000KS/s TESTBEELD HAMRADIO&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,14), command = helloCallBack7)&lt;br /&gt;
I = Tkinter.Button(top, text =&amp;quot;2083KS/s X11&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,14), command = helloCallBack8)&lt;br /&gt;
J = Tkinter.Button(top, text =&amp;quot;2083KS/s TESTBEELD&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,14), command = helloCallBack9)&lt;br /&gt;
K = Tkinter.Button(top, text =&amp;quot;250 KS/s X11 FEC 1/2&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,14), command = helloCallBack10)&lt;br /&gt;
L = Tkinter.Button(top, text =&amp;quot;250 KS/s X11 FEC 7/8&amp;quot;, font=(&amp;quot;Helvetica&amp;quot;,14), command = helloCallBack11)&lt;br /&gt;
Z = Tkinter.Button(top, text =&amp;quot;STOP&amp;quot;, fg=&amp;quot;red&amp;quot;, font=(&amp;quot;Helvetica-bold&amp;quot;,18),command = helloCallBack99)&lt;br /&gt;
text = openInstrucktion()&lt;br /&gt;
text2 = openInstrucktion2()&lt;br /&gt;
&lt;br /&gt;
resultaat = lock()&lt;br /&gt;
if resultaat == &amp;quot;LOCKED&amp;quot;:&lt;br /&gt;
   W = Text(top ,height=1, bg = &amp;quot;green2&amp;quot;, width=11,font=(&amp;quot;Helvetica&amp;quot;,32))&lt;br /&gt;
else:&lt;br /&gt;
   W = Text(top ,height=1, bg = &amp;quot;red&amp;quot;, width=11,font=(&amp;quot;Helvetica&amp;quot;,32))&lt;br /&gt;
W.insert(&amp;quot;1.0&amp;quot;, text)&lt;br /&gt;
W.insert(&amp;quot;1.10&amp;quot;, &amp;quot; MHz&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
V = Text(top ,height=1, bg = &amp;quot;light grey&amp;quot;, fg = &amp;quot;blue&amp;quot;, width=18,font=(&amp;quot;Helvetica&amp;quot;,28))&lt;br /&gt;
V.tag_configure(&amp;quot;center&amp;quot;, justify='center')&lt;br /&gt;
V.tag_add(&amp;quot;center&amp;quot;, 1.0, &amp;quot;end&amp;quot;)&lt;br /&gt;
V.insert(END,text2, &amp;quot;center&amp;quot;)&lt;br /&gt;
W.pack()&lt;br /&gt;
V.pack()&lt;br /&gt;
F.pack(fill=X)&lt;br /&gt;
G.pack(fill=X)&lt;br /&gt;
H.pack(fill=X)&lt;br /&gt;
I.pack(fill=X)&lt;br /&gt;
J.pack(fill=X)&lt;br /&gt;
K.pack(fill=X)&lt;br /&gt;
L.pack(fill=X)&lt;br /&gt;
Z.pack(fill=X)&lt;br /&gt;
B.pack(in_=top, side=LEFT)&lt;br /&gt;
C.pack(in_=top, side=LEFT)&lt;br /&gt;
D.pack(in_=top, side=LEFT)&lt;br /&gt;
E.pack(in_=top, side=LEFT)&lt;br /&gt;
&lt;br /&gt;
tick()&lt;br /&gt;
top.mainloop()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Voorbeeldscript om stream aan te roepen en in een controlfile de naam te plaatsen :'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
sudo /home/pi/stop&lt;br /&gt;
echo &amp;quot;2000 Ks/s, FEC 1/2&amp;quot; &amp;gt; /home/pi/rate&lt;br /&gt;
/home/pi/sr2000-x11-direct&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Voorbeeldscript om frequentie aan te passen :'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;436.00&amp;quot; &amp;gt; /home/pi/freq&lt;br /&gt;
/home/pi/serpush | tail -c 2 | cat - &amp;gt; /home/pi/lock&lt;br /&gt;
sleep 1&lt;br /&gt;
/home/pi/serpush | tail -c 2 | cat - &amp;gt; /home/pi/lock&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Voorbeeldscript om stream op te starten, in dit geval een stukje desktop (X11grab) (''opgepast'' is een hele lange string!!, berekend voor 250Ks/s) :'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
mkfifo /tmp/video2.ts&lt;br /&gt;
&lt;br /&gt;
sudo nice -n -30 arecord -f S16_LE -r 48000 -c 1 -M -D plughw:1 | sudo nice -n -30 ffmpeg -itsoffset -00:00:0.8 -analyzeduration 0 -probesize 2048 -fpsprobesize 0 -ac 1 -thread_queue_size 512 -i - -f x11grab -i :0.0+0,0 -framerate 25 -video_size 300x288 -fflags nobuffer -s 300x288 -b:v 200k -minrate:v 200k -maxrate:v 200k -vcodec mpeg2video -blocksize 1880 -strict experimental -async 2 -acodec mp2 -ab 32K -ar 48k -ac 1 -flags -global_header -f mpegts -blocksize 1880 -mpegts_original_network_id 1 -mpegts_transport_stream_id 1 -mpegts_service_id 1 -mpegts_pmt_start_pid 1001 -mpegts_start_pid 101 -metadata service_provider=PE2JKO -metadata service_name=PE2jko -muxrate 230392 -y /tmp/video2.ts &amp;amp;&lt;br /&gt;
&lt;br /&gt;
sudo /home/pi/rpidatv/bin/rpidatv -i /tmp/video2.ts -s 250 -c 1/2 -m IQ -f 0 -x 12 -y 13 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Portsdown4_Node-red_interface</id>
		<title>Portsdown4 Node-red interface</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Portsdown4_Node-red_interface"/>
				<updated>2025-03-17T19:29:24Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Portsdown4 Node-red interface'''&lt;br /&gt;
&lt;br /&gt;
'''Info @''' joopk@hccnet.nl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Hardware Equipment used :'''&lt;br /&gt;
&lt;br /&gt;
*Raspberry PI4&lt;br /&gt;
&lt;br /&gt;
'''Software  used :'''&lt;br /&gt;
&lt;br /&gt;
*Raspberry PI OS with Desktop and recommended Software&lt;br /&gt;
&lt;br /&gt;
*Installed remote desktop &amp;quot;xrdp&amp;quot; on RPI&lt;br /&gt;
&lt;br /&gt;
*Portsdown4 Software from Github [[https://github.com/BritishAmateurTelevisionClub/portsdown4]]&lt;br /&gt;
&lt;br /&gt;
In the OS by default Node-Red is included, I only added the [[https://flows.nodered.org/node/node-red-dashboard UI Buttons]]&lt;br /&gt;
&lt;br /&gt;
Portsdown4 configuration and settings normally are done via Touchscreen. Portsdown4 have many settings and currently I only need few main settings, this I added to a small dashboard. The setup is simple, first I create a set of &amp;quot;default&amp;quot; config parameters in the flow. Then at same time I read /home/pi/rpidatv/scripts/portsdown_config.txt and each line will be split and feed to the correct UI interface. When there is a change of 1 of parameters I write the full set of flow parameters back to same file. ( /home/pi/rpidatv/scripts/portsdown_config.txt ). I added few extra buttons to restart Portsdown4 or Shutdown the PI. I haven't added all touchscreen buttons and options, only the ones currently needed are in.&lt;br /&gt;
&lt;br /&gt;
So in few steps :&lt;br /&gt;
*Install OS&lt;br /&gt;
*Install rdpx (optional)&lt;br /&gt;
*Install Portsdown4&lt;br /&gt;
*Setup Portsdown4 with your settings like call&lt;br /&gt;
*Check if it works&lt;br /&gt;
*Enable Node-Red to start when booting&lt;br /&gt;
*Add Node-red UI Buttons&lt;br /&gt;
*Import the Flow&lt;br /&gt;
*Open the Webpage of the UI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In case more settings are required please let me know.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Node-red1-portsdown.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The FLOW, if you need the json, let me know.&lt;br /&gt;
&lt;br /&gt;
[[Bestand:Node-red2-portsdown.JPG]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2</id>
		<title>RFE for PlutoDVB2</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2"/>
				<updated>2023-07-22T17:31:08Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Radio Front-End for PlutoDVB2 from F5OEO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' pe2jko@pg540.org&lt;br /&gt;
&lt;br /&gt;
This radio front-end is created to experiment with DATV Pluto firmware V2 from F5OEO (Evariste). The firmware is mainly controlled via [https://en.wikipedia.org/wiki/MQTT MQTT messaging], and there are many MQTT clients available to control this firmware. One of the clients is Node-Red which I use for some time for many other projects to control devices which I use for the hobby. Due to the many improvements and features I needed a simple user-interface to control this Firmware. This resulted in this basic front-end. It controls the transmitter and controls the receiver in case a DATV tuner is connected to Pluto. In case Tutione tuner is connected the received stream is redirected 230.0.0.2 on port1234. So this can be made visible for example with command '''ffplay udp://230.0.0.2:1234 ''' or VLC pointing to that URL.&lt;br /&gt;
Let me know if you would like to receive the flows, please send me a mail.&lt;br /&gt;
&lt;br /&gt;
'''Update''' : Michel de HB9DUG added a flow which links to the Receiver flow. The original receive frequency was selectable only with dropdown menu. This is not so flexible, Michel took the output of our [https://github.com/m0dts/QO-100-WB-Live-Tune QuickTune tool] and linked it to the Frequency and Samplerate input. So if you click on a station in Quicktune, the tuner will move freq and set correct Samplerate. Thanks Michel. Please see below the flow from Michel.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Raspberry PI4.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File:Rfe-plutodvb2-2.jpg ]]&lt;br /&gt;
&lt;br /&gt;
When the new firmware is loaded to the Pluto it is needed to add your Callsign one time in order the RFE to talk to Pluto. Therefore you can make an SSH connection using Putty for example to Pluto. Issue the command '''fw_setenv call YourCall''', then '''reboot''' the Pluto. Then the flow should be able to talk with Pluto.&lt;br /&gt;
As every installation is different the correct IP address has to be entered in the MQTT node in Node-red.&lt;br /&gt;
&lt;br /&gt;
In the flow search for following icon and double-click :&lt;br /&gt;
[[File:Mqtt-icon.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then select the edit button to define name and IP address, fill in your address from the Pluto :&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The click on Update.&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Please see my current hardware setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Plutdvb2-schematic.jpg]]&lt;br /&gt;
&lt;br /&gt;
QuickTune interface flow chart from Michel HB9DUG which links to freq input and samplerate input controlling the DATV Tuner connected to Pluto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Hb9dug-ext.jpg]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2</id>
		<title>RFE for PlutoDVB2</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2"/>
				<updated>2023-07-22T17:30:17Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Radio Front-End for PlutoDVB2 from F5OEO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' pe2jko@pg540.org&lt;br /&gt;
&lt;br /&gt;
This radio front-end is created to experiment with DATV Pluto firmware V2 from F5OEO (Evariste). The firmware is mainly controlled via [https://en.wikipedia.org/wiki/MQTT MQTT messaging], and there are many MQTT clients available to control this firmware. One of the clients is Node-Red which I use for some time for many other projects to control devices which I use for the hobby. Due to the many improvements and features I needed a simple user-interface to control this Firmware. This resulted in this basic front-end. It controls the transmitter and controls the receiver in case a DATV tuner is connected to Pluto. In case Tutione tuner is connected the received stream is redirected 230.0.0.2 on port1234. So this can be made visible for example with command '''ffplay udp://230.0.0.2:1234 ''' or VLC pointing to that URL.&lt;br /&gt;
Let me know if you would like to receive the flows, please send me a mail.&lt;br /&gt;
&lt;br /&gt;
'''Update''' : Michel de HB9DUG added a flow which links to the Receiver flow. The receive frequency was selectable only with dropdown menu. This is not so flexible, Michel took the output of our [https://github.com/m0dts/QO-100-WB-Live-Tune QuickTune tool] and linked it to the Frequency and Samplerate input. So if you click on a station in Quicktune, the tuner will move freq and set correct Samplerate. Thanks Michel. Please see below the flow from Michel.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Raspberry PI4.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File:Rfe-plutodvb2-2.jpg ]]&lt;br /&gt;
&lt;br /&gt;
When the new firmware is loaded to the Pluto it is needed to add your Callsign one time in order the RFE to talk to Pluto. Therefore you can make an SSH connection using Putty for example to Pluto. Issue the command '''fw_setenv call YourCall''', then '''reboot''' the Pluto. Then the flow should be able to talk with Pluto.&lt;br /&gt;
As every installation is different the correct IP address has to be entered in the MQTT node in Node-red.&lt;br /&gt;
&lt;br /&gt;
In the flow search for following icon and double-click :&lt;br /&gt;
[[File:Mqtt-icon.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then select the edit button to define name and IP address, fill in your address from the Pluto :&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The click on Update.&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Please see my current hardware setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Plutdvb2-schematic.jpg]]&lt;br /&gt;
&lt;br /&gt;
QuickTune interface flow chart from Michel HB9DUG which links to freq input and samplerate input controlling the DATV Tuner connected to Pluto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Hb9dug-ext.jpg]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2</id>
		<title>RFE for PlutoDVB2</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2"/>
				<updated>2023-07-22T17:29:55Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Radio Front-End for PlutoDVB2 from F5OEO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' pe2jko@pg540.org&lt;br /&gt;
&lt;br /&gt;
This radio front-end is created to experiment with DATV Pluto firmware V2 from F5OEO (Evariste). The firmware is mainly controlled via [https://en.wikipedia.org/wiki/MQTT MQTT messaging], and there are many MQTT clients available to control this firmware. One of the clients is Node-Red which I use for some time for many other projects to control devices which I use for the hobby. Due to the many improvements and features I needed a simple user-interface to control this Firmware. This resulted in this basic front-end. It controls the transmitter and controls the receiver in case a DATV tuner is connected to Pluto. In case Tutione tuner is connected the received stream is redirected 230.0.0.2 on port1234. So this can be made visible for example with command '''ffplay udp://230.0.0.2:1234 ''' or VLC pointing to that URL.&lt;br /&gt;
Let me know if you would like to receive the flows, please send me a mail.&lt;br /&gt;
&lt;br /&gt;
Update : Michel de HB9DUG added a flow which links to the Receiver flow. The receive frequency was selectable only with dropdown menu. This is not so flexible, Michel took the output of our [https://github.com/m0dts/QO-100-WB-Live-Tune QuickTune tool] and linked it to the Frequency and Samplerate input. So if you click on a station in Quicktune, the tuner will move freq and set correct Samplerate. Thanks Michel. Please see below the flow from Michel.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Raspberry PI4.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File:Rfe-plutodvb2-2.jpg ]]&lt;br /&gt;
&lt;br /&gt;
When the new firmware is loaded to the Pluto it is needed to add your Callsign one time in order the RFE to talk to Pluto. Therefore you can make an SSH connection using Putty for example to Pluto. Issue the command '''fw_setenv call YourCall''', then '''reboot''' the Pluto. Then the flow should be able to talk with Pluto.&lt;br /&gt;
As every installation is different the correct IP address has to be entered in the MQTT node in Node-red.&lt;br /&gt;
&lt;br /&gt;
In the flow search for following icon and double-click :&lt;br /&gt;
[[File:Mqtt-icon.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then select the edit button to define name and IP address, fill in your address from the Pluto :&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The click on Update.&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Please see my current hardware setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Plutdvb2-schematic.jpg]]&lt;br /&gt;
&lt;br /&gt;
QuickTune interface flow chart from Michel HB9DUG which links to freq input and samplerate input controlling the DATV Tuner connected to Pluto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Hb9dug-ext.jpg]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/Bestand:Hb9dug-ext.jpg</id>
		<title>Bestand:Hb9dug-ext.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/Bestand:Hb9dug-ext.jpg"/>
				<updated>2023-07-22T17:26:52Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2</id>
		<title>RFE for PlutoDVB2</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2"/>
				<updated>2023-07-22T17:25:46Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Radio Front-End for PlutoDVB2 from F5OEO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' pe2jko@pg540.org&lt;br /&gt;
&lt;br /&gt;
This radio front-end is created to experiment with DATV Pluto firmware V2 from F5OEO (Evariste). The firmware is mainly controlled via [https://en.wikipedia.org/wiki/MQTT MQTT messaging], and there are many MQTT clients available to control this firmware. One of the clients is Node-Red which I use for some time for many other projects to control devices which I use for the hobby. Due to the many improvements and features I needed a simple user-interface to control this Firmware. This resulted in this basic front-end. It controls the transmitter and controls the receiver in case a DATV tuner is connected to Pluto. In case Tutione tuner is connected the received stream is redirected 230.0.0.2 on port1234. So this can be made visible for example with command '''ffplay udp://230.0.0.2:1234 ''' or VLC pointing to that URL.&lt;br /&gt;
Let me know if you would like to receive the flows, please send me a mail.&lt;br /&gt;
&lt;br /&gt;
Update : Michel de HB9DUG added a flow which links to the Receiver flow. The receive frequency was selectable only with dropdown menu. This is not so flexible, Michel took the output of our QuickTune tool and linked it to the Frequency and Samplerate input. So if you click on a station in Quicktune, the tuner will move freq and set correct Samplerate. Thanks Michel. Please see below the flow from Michel.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Raspberry PI4.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File:Rfe-plutodvb2-2.jpg ]]&lt;br /&gt;
&lt;br /&gt;
When the new firmware is loaded to the Pluto it is needed to add your Callsign one time in order the RFE to talk to Pluto. Therefore you can make an SSH connection using Putty for example to Pluto. Issue the command '''fw_setenv call YourCall''', then '''reboot''' the Pluto. Then the flow should be able to talk with Pluto.&lt;br /&gt;
As every installation is different the correct IP address has to be entered in the MQTT node in Node-red.&lt;br /&gt;
&lt;br /&gt;
In the flow search for following icon and double-click :&lt;br /&gt;
[[File:Mqtt-icon.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then select the edit button to define name and IP address, fill in your address from the Pluto :&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The click on Update.&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Please see my current hardware setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Plutdvb2-schematic.jpg]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	<entry>
		<id>https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2</id>
		<title>RFE for PlutoDVB2</title>
		<link rel="alternate" type="text/html" href="https://www.pg540.org/wiki/index.php/RFE_for_PlutoDVB2"/>
				<updated>2023-07-22T17:21:45Z</updated>
		
		<summary type="html">&lt;p&gt;Pe2jko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Radio Front-End for PlutoDVB2 from F5OEO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info @''' pe2jko@pg540.org&lt;br /&gt;
&lt;br /&gt;
This radio front-end is created to experiment with DATV Pluto firmware V2 from F5OEO (Evariste). The firmware is mainly controlled via [https://en.wikipedia.org/wiki/MQTT MQTT messaging], and there are many MQTT clients available to control this firmware. One of the clients is Node-Red which I use for some time for many other projects to control devices which I use for the hobby. Due to the many improvements and features I needed a simple user-interface to control this Firmware. This resulted in this basic front-end. It controls the transmitter and controls the receiver in case a DATV tuner is connected to Pluto. In case Tutione tuner is connected the received stream is redirected 230.0.0.2 on port1234. So this can be made visible for example with command '''ffplay udp://230.0.0.2:1234 ''' or VLC pointing to that URL.&lt;br /&gt;
Let me know if you would like to receive the flows, please send me a mail.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Main components''' : Node-Red, UI Dashboard.&lt;br /&gt;
'''Installed on''' Raspberry PI4.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[File:Rfe-plutodvb2-2.jpg ]]&lt;br /&gt;
&lt;br /&gt;
When the new firmware is loaded to the Pluto it is needed to add your Callsign one time in order the RFE to talk to Pluto. Therefore you can make an SSH connection using Putty for example to Pluto. Issue the command '''fw_setenv call YourCall''', then '''reboot''' the Pluto. Then the flow should be able to talk with Pluto.&lt;br /&gt;
As every installation is different the correct IP address has to be entered in the MQTT node in Node-red.&lt;br /&gt;
&lt;br /&gt;
In the flow search for following icon and double-click :&lt;br /&gt;
[[File:Mqtt-icon.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then select the edit button to define name and IP address, fill in your address from the Pluto :&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The click on Update.&lt;br /&gt;
&lt;br /&gt;
[[File:Mqtt-icon3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Please see my current hardware setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Plutdvb2-schematic.jpg]]&lt;/div&gt;</summary>
		<author><name>Pe2jko</name></author>	</entry>

	</feed>