Configuring remote operations on Wizkers:Radio


#1

Pending a full video tutorial, here are a couple of steps you can follow to fully configure “Netlink” operations on Wizkers:Radio. Please report if you succeed creating a remote connection using this guide!

We will use the KX3 as the reference instrument for this tutorial. This is a radio we have thoroughly tested with remote operations.

Step 0

The setup is as follows:

  • On your computer: Wizkers:Radio running, connected to your KX3
  • Phone/tablet/other computer: Wizkers:Radio running

Step 1 - Computer side

You should configure your KX3 as usual on Wizkers:Radio, using a USB or TCP/IP connection in case you are using a “Piglet” style device. Check that the KX3 is detected and can be controlled locally.

Head over to “Data Output” and click on the large “+” icon on the “New Output” tile:

Select “Network Link” as the “Type”, and in the “Output Settings” tab below, use “0.0.0.0” as the IP address. You can leave the port as 1432 or use a higher value if you wish - 8090 should usually work on a lot of machines, the idea is to use a number that is not used by another service. If you are not sure, leave this at 1432.

Click on “Save” and go back to “Data Outputs”. You now need to enable this output by clicking on the big red “DISABLED” button, so that it turns green:

Now, go back to the main screen (click on the “Wizkers:Radio” heading on the top yellow menu bar) and connect your KX3.

The last thing to do is to note your computer’s IP address or network name, you will need it in the next step.

This should be it for the computer side.

Remote computer/tablet/phone

Now head over to your other device. This can be any device that is running Wizkers:Radio, from another computer to a tablet to a Chromebook…

On this other device, create a “KX3” instrument, and in the “Serial Port” dropdown, pick “Wizkers Netlink”. Use your main computer’s network name or IP address and make sure the TCP/IP port is the same as the one you picked in the previous step - 1432 by default -:

Click on “Save” then “Select”, which will bring you back to the home screen.

You should now be able to click on the “Connect” button, and if all goes well, you will be connected to your remote KX3.

Working for you?

Please report on this thread if those instructions are working for you!


#2

@Sledhead @wb6vac Just created this tutorial thread for KX3 remote operations: can you take a look and let me know if you manage to connect remotely? I want this to become as easy to use as possible, so your feedback is much appreciated!


#3

Ed
I tried it again and still no connect. I am seeing in the upper right corner a red box that says “no tcp client”, which I do not remember from before (but that was long ago) Thats message is on both machines. For info the remote desk top is win 10 and the kx3 is connected to a win 8.1 laptop.
doug


#4

Ed
I just noticed a few min ago that the two computers were not at the same wizkers rev level, the auto update just completed, and now the red box “no tcp client” message is gone, but I still can not connect.
doug


#5

Ed,
I set up as described and it is working fine for me. That means I can control the radio from remote. But what would I need to do in order to get as well the audio forwarded to my remote device? Thanks for the effort spent into it.
73, Thomas (DL1LPZ)


#6

Thanks for the report, @Thomas_Patzold ! Audio is coming up using WebRTC - there is an experimental WebRTC plugin on Wizkers, but it requires a connection broker and is kind of a pain to setup. But the basics are in place, it is mostly a matter of having enough time to execute on the roadmap :slight_smile:


#7

Hi Ed,
on which device the connection broker would be needed? And why? At least inside my own network I can map ports to the right machine via entry router.

It would be cool if it would be possible to have the output stream in the end forwarded to a remote laptop running wsjr-x. :slight_smile:

Cheers, Thomas


#8

Still not working for me The remote hangs on “opening” after clicking on connect to remote KX3. I am useing 2 Windows 10 PC’s.


#9

Hi Sledhead,
did you allow on your firewall incoming traffic towards Wizkers on the PC where the radio is connected?

73, Thomas


#10

Hi Thomas
My firewall is being managed by Norton Security, however I see no provision to allow traffic to Wizkers.
Wizkers does not show up as an installed app probably because Wizkers runs in the Chrome runtime inside
of windows ( I think) At any rate I disabled Norton Firewall and still no luck.
73, sledhead (AB1UY)


#11

Hi Sledhead,
I had that issue as well when using the App inside of Chrome. Even allowing access to Chrome in the FW didn’t help. Since I updated to the “real” stand alone Wizkers program (I’m running MacOS) I can manage it directly in the FW as own program and suddenly it worked for me.

73, Thomas (DL1LPZ)


#12

I GIVE UP!! I’m sure it is simple enough for most YOUNG minds with computer savvy. Tried to follow exactly but I’m sure there are hidden meanings that are not apparent to me after viewing other comments.
Thanks for trying to teach old dogs new tricks BUT I guess I’ll have to be content with a K3/0 to get the full benefits of this fine radio.
73,
Griff…N5AG


#13

I don’t think there is a standalone version for Windows yet. For now I am using RemoteHams and
It works well and has audio too, but I think it only works on Windows. I like the idea of a browser app
That is platform independent. I have both Windows
And Ubuntu Linux on my home network.

73’s
AB1UY


#14

Ed,

I’ve been working on the remote option with the LP-100A and have not been able to get a full connection. I know the VPN works. The two Elecraft servers I have running for the KPA500 and KAT500 are both working fine thru the VPN. The Wizkers:Radio connects to the LP-100A, the Data Output is Enabled, but when I try to connect with the remote Wizkers:radio in Wizkers Netlink mode it just sits there “Opening” and never times out. I added exceptions to the Firewall and even totally disable both ends to see if they were block the ports, but no difference. Any ideas??

KK9N


#15

@KK9N I will test on my own setup and report, stay tuned.


#16

Ed, I also tried this. And connection does not come up. I have the following setup:

Wizkers running on a RPI, with Network Link output configured and enabled on port 9000, KX3 is connected and Wizkers radio is operative.

RPI connected to WIFI, WIFI router accepts incoming SSH from my client machine to RPI.

On client: SSH port tunneling is set up to forward local port 9000 to RPI 127.0.0.1:9000, client can connect to localhost port 9000 (tested with telnet localhost 9000) so it means that TCP connection between client and RPI port 9000 is up.

On client: Wizkers chrome app setup with Serialport: Wizkers Netlink, and pointing to 127.0.0.1 port 9000.

On client, when pressing Connect to instrument. It just hangs forever. Button shows “OPENING…”

Did you test your own setup and make it work? Its 28 days since your last update.

Update: Even if Data Output is configered on the RPI, the RPI is not listening on the given port. I tried with nc -D -v 127.0.0.1 9000 on the RPI and the Networklink wich is enabled on port 9000 is not listening. Is it possible to get any debug output from the chrome app?

Second update: I enabled debug mode in chromium… And after pressing connect to radio, I get an error message saying:
Error, Port error - driver triggered an error, trying to recover. Details: system_error. And the raspberry does not have any process listening on the port specified in the Data Output setting.

If I disable the Data output, the error message does not appear.

Update 3 today: after examining the error. It seems that the default listening port for netlink is missing as permission in the manifest file for the application. After adding the 1452 port to the permission list for listening sockets an refreshing the extension. Then wizkers actually listen on that port withouth getting any “Does not have permission” errors… Next issue: The client will not connect to the remote end… Looking more into that tomorrow.

Update 4: Remote end does not connect to server because of javascript errors:
Error in response to sockets.tcp.create: Error: Invocation of form sockets.tcp.connect(integer, string, string, function) doesn’t match definition sockets.tcp.connect(integer socketId, string peerAddress, integer peerPort, function callback)
at Object.n [as callback] (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/connections/chromeTcpSerial.js:1:524)
at r.open (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/connections/chromeTcpSerial.js:1:1754)
at A (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/instruments/elecraft/driver_backend.js:1:1952)
at openPort (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/instruments/elecraft/driver_backend.js:1:2018)
at s (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/main-chrome.js:13:28328)
at chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/instruments/elecraft/elecraft.js:1:715
at Object.execCb (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/lib/require.js:1:12370)
at b.check (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/lib/require.js:1:6500)

73 LA8OGA


#17

Error messages for my post above… I guess it can help to track down the issue… Looks like it has something to do with permissions… :
extensions::platformApp:17 history.pushState is not available in packaged apps.(anonymous function) @ extensions::platformApp:17
driver_backend.js:62 [Netlink Output plugin] Setup a new instance
tcp_server.js:56 undefined
tcp_server.js:45 Unable to listen to socket. Resultcode=undefinederror @ tcp_server.js:45
extensions::lastError:134 Unchecked runtime.lastError while running sockets.tcpServer.listen: Does not have permission
at Object.onCreate (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/lib/tcp_server.js:118:20)reportIfUnchecked @ extensions::lastError:134
extensions::uncaught_exception_handler:8 Error in response to serial.send: TypeError: Cannot read property ‘error’ of undefined
at Object.callback (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/connections/chromeSerial.js:1:226)
at o (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/connections/chromeSerial.js:1:191)
at Object.callback (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/connections/chromeSerial.js:1:290)handler @ extensions::uncaught_exception_handler:8
extensions::lastError:134 Unchecked runtime.lastError while running serial.send: Serial connection not found.
at o (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/connections/chromeSerial.js:1:191)
at Object.callback (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/connections/chromeSerial.js:1:290)reportIfUnchecked @ extensions::lastError:134
driver_backend.js:78 [netlink] Closing existing server
4chrome.html#:1 Refused to execute inline event handler because it violates the following Content Security Policy directive: “default-src ‘self’ blob: filesystem: chrome-extension-resource:”. Either the ‘unsafe-inline’ keyword, a hash (‘sha256-…’), or a nonce (‘nonce-…’) is required to enable inline execution. Note also that ‘script-src’ was not explicitly set, so ‘default-src’ is used as a fallback.

tcp_server.js:45 Unable to listen to socket. Resultcode=undefinederror @ tcp_server.js:45
extensions::lastError:134 Unchecked runtime.lastError while running sockets.tcpServer.listen: Does not have permission
at Object.onCreate (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/lib/tcp_server.js:118:20)reportIfUnchecked @ extensions::lastError:134
driver_backend.js:78 [netlink] Closing existing server
driver_backend.js:62 [Netlink Output plugin] Setup a new instance
tcp_server.js:56 undefined
tcp_server.js:45 Unable to listen to socket. Resultcode=undefinederror @ tcp_server.js:45
extensions::lastError:134 Unchecked runtime.lastError while running sockets.tcpServer.listen: Does not have permission
at Object.onCreate (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/lib/tcp_server.js:118:20)reportIfUnchecked @ extensions::lastError:134
driver_backend.js:78 [netlink] Closing existing server
driver_backend.js:62 [Netlink Output plugin] Setup a new instance
tcp_server.js:56 undefined
tcp_server.js:45 Unable to listen to socket. Resultcode=undefinederror @ tcp_server.js:45
extensions::lastError:134 Unchecked runtime.lastError while running sockets.tcpServer.listen: Does not have permission
at Object.onCreate (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/lib/tcp_server.js:118:20)reportIfUnchecked @ extensions::lastError:134
driver_backend.js:78 [netlink] Closing existing server
driver_backend.js:62 [Netlink Output plugin] Setup a new instance
tcp_server.js:56 undefined
tcp_server.js:45 Unable to listen to socket. Resultcode=undefinederror @ tcp_server.js:45
extensions::lastError:134 Unchecked runtime.lastError while running sockets.tcpServer.listen: Does not have permission
at Object.onCreate (chrome-extension://fcgffipkclebcbafpgmaonlchdocnchb/www/js/app/lib/tcp_server.js:118:20)reportIfUnchecked @ extensions::lastError:134
10chrome.html#:1 Refused to execute inline event handler because it violates the following Content Security Policy directive: “default-src ‘self’ blob: filesystem: chrome-extension-resource:”. Either the ‘unsafe-inline’ keyword, a hash (‘sha256-…’), or a nonce (‘nonce-…’) is required to enable inline execution. Note also that ‘script-src’ was not explicitly set, so ‘default-src’ is used as a fallback.


#18

In order to make remote work (chrome app to chrome app), I had to do the following changes:
Radio end (server side):
Add port numbers to manifest.json, additions in bold:
“tcpServer”: {
“listen”: [ “:1452”, “:4532”, “:12345” ]
}
If wanted, although not a good solution, add attribute to script tag in chrome.html to remove warnings about inline-execution:

For client: Change chromeTcpSerial.js: chrome.sockets.tcp.connect(p,u,**parseInt(d)**,c) (this file is obfuscated, just locate the string: chrome.sockets.tcp.connect 73 DE LA8OGA