Code Monkey home page Code Monkey logo

sonarphony's Introduction

SonarPhony

It is easy to find simple depth sounders that are interoperable and have open-ish interfaces, but you would be hard-pressed to find a device that gives the full water column and provides an open interface to do so.

This is a reference implementation to communicate with Vexilar SonarPhone fish finders (http://sonarphone.mobi/).

This project, and its author(s), are in no way affiliated with Vexilar. This was created for educational purposes only on the author's personal time, and is released without any warranty whatsoever.

Discovery Method

The protocol was reverse engineered by monitoring the packets between the device and the manufacturer's app. Hex dumps of the captured packets were compared against what the app displayed and was commanding to the device. Through some trial and error, a portion of the protocol was decoded.

Screenshots

Screenshot 0 Screenshot 1 Screenshot 2

Usage

Compiling

I've only built this on Linux, but it will probably work in Windows.

Requires Qt 4 or 5.

$ git clone https://github.com/scherererer/SonarPhony.git
$ cd SonarPhony
$ qmake-qt5 -r
$ make

Running

To run, put your device in the water to turn it on, or shove a bit of wet paper cloth across the metal contacts for an in-air test (I don't recommend you do this too much, my experience has said running these in air isn't a good thing but it is for the consumer so it's probably fairly hardy). From your computer, a wifi network should appear (in my case it is T-POD-37A) and enter your wifi password as the manufacturer instructs. Then, run the program and hit the "run" button. The screen should start filling up with data.

Notes / Troubleshooting

Device Testing Limitations

This software has only been tested with the T-POD because it was the cheapest one money could buy, however I suspect the protocol will be very similar on the other variants since it has to interop with the same app. If you are using one of the other products I would be really interested to see a full log.

Passwords

One of the things I have not fully experimented with is how the "master" password protocol works, and so I strictly used the default password. If you're having trouble controlling the device or getting pings back and you changed the password, that may be why (although I haven't attempted that specific edge case yet).

sonarphony's People

Contributors

scherererer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sonarphony's Issues

Intergrate c++ file to custom android app build

i just wanna need to know about how the sonarphoney screen work I am going to design ANDROID APP using android studio

In android studio allow c++ library to design native code on the process of implementation I face struggle on-screen design

ANYONE HAVE IDEA ABOUT THE HOW THE SCREEN WORK AND HOW CAN I INTEGRATE WITH ANDROID APP

Daemon + Ideas

Can anyone help me with running the daemon, i would like to run this on boot of a raspberry pi that is inside my rc boat and output the data to a txt file.

Ultimately I would like to add a USB GPS to the raspberry pi and extend the daemon code to add the GPS coordinates to the nmea data so I can use this depth and gps data to create bathymetric maps in reefmaster.

Couple of issues trying to Build or Make

/home/sam/Git/SonarPhony/include/sonarphony/pingMsg.H:30: error: implicitly-declared ‘sonarphony::sonarMsg_t& sonarphony::sonarMsg_t::operator=(const sonarphony::sonarMsg_t&)’ is deprecated [-Werror=deprecated-copy]
30 | class pingMsg_t : public sonarMsg_t
| ^~~~~~~~~

/home/sam/Git/SonarPhony/apps/sonarphony/columnPulser.C:99: error: implicitly-declared ‘sonarphony::pingMsg_t& sonarphony::pingMsg_t::operator=(const sonarphony::pingMsg_t&)’ is deprecated [-Werror=deprecated-copy]
99 | m_lastMsg = ping_;
| ^~~~~

SP200 T-BOX Compatibility

I just set this up with my SP200 T-BOX and was not able to get it working. The GUI simply reported a continual string of unrecognized commands. Foolishly I did not try the daemon, but I would expect similar results.

@scherererer , do you have any additional documentation on the format of the data and any potential handshaking with the transducer interface? I spent a bit of time looking through some of the code, but it was a bit tough to reverse reverse engineer.

Ultimately I'm just trying to pull the depth and get it translated to NMEA. I'm not familiar with Qt, so unless the modifications are fairly straightforward, not sure I can contribute back here. But if there is an obvious place to pull this info off the wire (looks like bytes 23-25 on some kind of "ping packet" in the data stream?), I will try to accomplish via other means.

In case it is helpful to anyone else, I'm uploading a few files. The "sonarphoneoutput" ones are just the output of netcat connecting to the box on port 5000. IIRC, this one:

sonarphoneoutput.txt

was just my PI connected to the box. This one:

sonarphoneoutput2.txt

might show a record of my iPhone connecting and disconnecting (if it set some parameters or initiated actions that applied to all connected devices). And my phone was connected for the duration of this one:

sonarphoneoutput3.txt

Doubtful that will be reflected in the data, but I'm not familiar with the protocol/handshaking. Finally, this file:

2018-01-20T12_21_22.690.sonarphony.raw.txt

Is the actual log of the SonarPhony GUI. I was playing with the logging functionality off and on, so I'm not sure if anything interesting might have happened while logging.

As for the contents of the data, the sonar transducer is epoxied to the hull of my boat, and the boat was out of water, so it wasn't picking up any depth or reflections on the sonar display. I believe the ambient temperature was around 65F.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.