Ping360 data transfer to internet


I am working on a project to transfer live data from the ping360 sonar on a Raspberry Pi 4 to the remote system’s Ping Viewer via the Internet.

I can read the live data from ping360 through a Python script. I plan to set up a data transfer application on a constant IP server in the cloud and create two REST API endpoints - one to upload data to IP:port/upload, and the other to download the data. Once the data is uploaded to the server, it will be converted to a UDP socket on a remote PC.

My question is how can the pingViewer identify the IP port where the sonar data is available?


1 Like

Hi @Sakthivelj -
Ping viewer allows you to manually specify the IP and Port to connect to, is this what you’re asking after? In this screenshot, the port is set to 1234:

screenshot, This is a manual connect, but I am wondering how it can automatically identify.

I plan to transfer data over the Internet. My idea is to create a Python script that can receive the transferred data and create a UDP socket to publish it.

Is there any other way available?

Hi @Sakthivelj -
If you install the ZeroTier extension in BlueOS, and also on the computer you’d like to receive the data with, the ping360 should be auto-discovered at its ZeroTier IP address. This does require the ROV to have internet, so if on a dive your computer’s internet connection would need to be bridged to the ethernet adapter network interface. Then, any computer in the world on the same Zero Tier network can reach the data, although performance may be impacted by bandwidth availability.

If I recall correctly the BlueRobotics devices send out some form of network discovery packet over multicast and other devices respond to this letting you know of their presence and their IP address. You can see the specifics of their implementation over at the ping-viewer repository. It should give you a rough idea of how it’s done then you can attempt to implement the same in your python script. If you do have access to an internet connection in real time, which it seems you do I’d recommend setting up a simple VPN between the two clients if possible, something like Tailscale provides a very simple solution for this. This way you get all the network traffic and don’t need to reverse engineer the discovery protocol.

1 Like

@SirJansen Thanks for sharing the information. I think Tailscale is sufficient for me. After connecting my Ping360 device and remote device, both are connected same VPN account. How can I transfer data from Ping360 to Ping Viewer?

rust bridge is not working GitHub - patrickelectric/bridges: Serial to UDP bridge.

@tony-white Thanks for sharing. I already tried this, but it didn’t work. Is there any other way possible? Even without BlueOS is fine.

You’re likely going to have to set something like a Subnet Router up, as described here. There is a chance this won’t work because of the nature of multicast and TailScale being peer to peer. Regardless this will give you access to your sub’s network. If that doesn’t work take a look at a few of the other guides they have and see if anything there matches what you’re looking for. Good luck!

1 Like

Hi @Sakthivelj -
Just to confirm, as I’ve definitely had this scenario work.
Sonar->Raspberry Pi->ZeroTier->Internet->Computer at another location (not connected to ROV, only to internet.)

ZeroTier is fine with the multicast, and the packets from the Ping process on the Raspberry Pi make it across the link, so that the Ping360 shows up in the list automatically within PingViewer.

When you tried ZeroTier, was both the BlueOS device and your remote computer connected to the same ZeroTier network?

1 Like

Thanks, @SirJansen and @tony-white for providing a detailed explanation. I appreciate it.