Monday, November 18, 2013

Now we've setup the ad-hoc network from the Raspberry PI reading the NMEA Data, we can simultaneously access the data, from several devices connected on the ad-hoc network defined on the boat, from the Raspberry PI itself:

Swing Console from a laptop

OpenCPN from a laptop

HTML Console from a laptop

HTML Console from an iPad

HTML Console from an iPhone

All the pictures above were taken with all the programs on the devices running simultaneously.
A small glitch I need to address: Android does not want to connect to an ad-hoc network. I need to fix that, more to come soon.

Saturday, November 9, 2013

The last step - after this one - was not as straight forward. But finally, everything works fine.
The idea was to use PI4J to read the serial port (/dev/ttyAMA0). All the tests I made with PI4J were all very positive, but apparently, there is a bug when the baud rate is 4800. And unfortunately, this is the one we need.
But as reading a USB port (/dev/ttyUSB0) was not a problem, a simple adapter (serial 9 pin to USB) fixed everything. And on Linux (Raspberry PI runs Linux, a tweaked version of Debian), no driver or any such thing is required. Plug it in, and boom! It works.

The Raspberry PI reads the serial port with the headless console, and rebroadcasts everything appropriately.
The NMEA Console and OpenCPN can use TCP to get the data, The html5 Console uses HTML..., everything goes seamlessly. For less than 700mA. And around $50.
We will detail later all the steps to go through to get this done anywhere. This is just an easy check list.
And we'll built a nice box to host all this. The Raspberry, an optional small screen, and possibly a small keyboard.
More soon.

And just to give you a taste of what will come next,node.js works like a charm on the Raspberry PI, and the WebSocket protocol works as if it had been designed for this platform... That is going to seriously rock.

To summarize

Serial ports (most of the data we're interested in come through a serial port) are accessed exclusively. Only one program at a time can access the data. I had the problem on the ketch, when the cartography soft was accessing the data port (to plot the boat on the chart), the console (the one evaluating current and performances) had to wait.

The laptop you can use to read the data draws a substantial amount of electricity (around 10W is not unusual).

Several devices on the boat (tactician, driver, navigator, trimmers) might need to have simultaneous access to the data, and they might need to be already processed and smoothed (damped)

The various devices needing access to the data might not run the same Operating System (MacOS, iOS, Android, Windows, Linux...). We assumed here that they have a network access, and a browser supporting HTML5 (the tests I made for this particular point are positive).
So, here is the story:

The Raspberry PI creates its own ad-hoc network when it boots, and you start on it a utility that reads the data from the serial (or whatever) port connected to the NMEA station

The data are read, and stored on the raspberry in some cache (a hashmap).

The data are logged (optional), and processed (true wind is calculated, current is evaluated, VMG - on the wind or on the mark, performance, are evaluated). Those data are cached as well. Those calculations require some parameters to be set (max leeway, deviation curves, polars of the boat, some coefficients for the instruments, etc), they are available on the Raspberry PI.

The data rebroadcasted on TCP, UDP, and HTML (also possibly RMI; I dropped GPSd). You can select one or more of those channels for rebroadcasting.

Basically, this is all the RaspPi is doing.

The SD card containing the OS of the PI needs to be 4Gb big, minimal recommended. Mine is 8, and it can go beyond 32. This allows DAYS of logging.

Now, when a device from the boat wants to see what's going on (i.e. visualize the data), it connects to the boat's ad-hoc network.
Then, depending on its possibilities and needs, it can use the NMEA Console (that one can read any channel for its data input), or the HTML5 Console (at the bottom of this page).

The chart plotting program (like OpenCPN) can use the exact same data stream.
And when you're done watching your device, you can turn it off, hibernate it, what not, the RaspPi keeps reading and broadcasting.

The RaspPi does not take more than 700mA.
And it costs less than $50.
The RaspPi does not need any keyboard or screen. (I use SSH from a laptop to start the reading program on it).
The main points are:

Low consumption (and low price, if it makes any sense in this context)

Data rebroadcasting

Logging (ages of logging).
I log VWR, RMC, MWV, RMB, VHW, VLW, HDG, MTW and GLL. It's about 1 Mb per hour.
One day would be 24 Mb. One week around 168 Mb. Peanuts.

I have a lot of data, some logged during our Polynesian trip, I can replay them. This story seems to work.

I was very interested during the recent America's Cup, to see all the crews watching several kind of devices..., many had those displays on their fore-arms, tacticians had some iPad-like devices, fasten on their bellies with some shock-cords and velcro..., it kind of rang a bell!
Those boats had for sure way more sensors that just an NMEA station (up to 3000 sensors for Oracle, I heard), but I believe that there is already a LOT to do with the data you can get from a regular NMEA station.

Once the ad-hoc network is setup, the crew members can even use their smart phone to access it, and visualize the HTML5 Console.
That actually enhances one point: All the technology is here - nothing has been built or invented specially for this project. It's all about getting access to it with existing devices and techniques. Everyone (including me!) now has a smartphone, Linux has been around for ages, NMEA is one of the (if not THE) oldest standards in IT... And again, a small device you can get for less that $50 makes it all possible!
I like that.

Friday, November 8, 2013

We've had quite a few tropical phenomenons in the Pacific since the end of August...
Here is a list - still open - of what we've had, along with the time they were active, and their highest strength.
Wind speeds are in knots. 60 G 75 is to be read 60 knots, gusting 75 knots.

As a reminder, a hurricane (force 12 on the Beaufort scale) is over 64 knots.
Over 64 knots, it's a Category One hurricane.
Over 82 knots, it's a Category Two hurricane.
Over 95 knots, it's a Category Three hurricane.
Over 112 knots, it's a Category Four hurricane.
Over 136 knots, it's a Category Five hurricane.

Hurricanes and Typhoons are similar phenomenons. Hurricanes belong to the East Pacific, Typhoons to the West Pacific.

We also note that the Beaufort scale does not mention any such thing as a "Super Storm". You have Storm, Violent Storm, and Hurricane...
"Super Storm" is something invented by some journalists.

Thursday, November 7, 2013

Apparently, the soft has been installed as root, and some write permissions are not granted to everyone.
That makes it difficult to write on the file system, like when downloading a file!
To fix that, you need to go to a Console, and enter the following commands:

Monday, November 4, 2013

This post will demonstrate how to connect a Raspberry PI on some NMEA input - a GPS in this case - to re-broadcast all its data using other protocols, HTTP and TCP in this case.
The cool thing about this configuration is that:

As many devices as you want can access the NMEA data

The Raspberry PI only draws 700 mA

When they're done using rthe NMEA data, devices (laptops, tablets...) can shutdown, the NMEA data will still be read and available whenever a device connects on the Raspberry Pi's network

The NMEA data being read can also be logged on the Raspberry PI, if necessary.

We assume that you already have a Raspberry PI, along with its power supply (AC or DC, whatever).
We will show how to setup everything so the Raspberryt PI reads the NMEA data, and re-broadcasts them. As an example, we will show how to consume them from OpenCPN.
We will also need to edit several configuration files and other scripts. You can use any editor you wish, "nano" can do the job, I myself prefer "vi". At the end of the day, that's the same, only the result is important.

Requirements

First, flash the SD card, as explained here.
I used the Raspbian image. Comes with Java.
Next, we will require several softwares to be installed on the Raspberry PI, some are necessary, others are convenient.

An FTP server

This one will be very convenient when you will need to transfer files on you Raspberry PI.
To install, type:

OlivSoft

You have just installed the libraries you need to use the serial ports (Serial or USB), now we need to modify the launching script to take that in account.
Make sure you have the last version of the soft, up to date.
It is available on Google Code, in the download section.
The best way to do that is probably to install it on a box connected to the internet, and to let the software update itself.
Then you can transfer all the directory where it is installed (using FTP) on the Raspberry PI.
Once this is done, navigate to the all-scripts directory, and edit the script named olivsoft.
You can add a line in the menu:

Notice that /dev/ttyUSB0 is the USB port the GPS in connected on. In this case, the data will be re-broadcasted on TCP, port 7001, as well as on HTTP port 9999.
We will see below how to start the program.

Run it

Connect the things first:

Only the Wireless dongle is in

Plug the SD Card in (contains the OS)

Plug in the GPS

Connect the power supply

Connecting the power supply will boot the device. Now, wait a couple of seconds for Linux to boot, and we are going to connect to the Raspberry PI from another machine, using ssh.
Notice in the steps above, that there is no mouse, no keyboard, and no screen connected on the Raspberry PI. We could have done so.
But we didn't.
To demonstarte the full compatibility of this scenario, we will do the subsequent operations from a Windows box.

Connect to the Raspberry PI's ad-hoc network

The wireless networks are usually available in the Windows taskbar. If not, open your Network Control Panel, you'll find it there.

Notice the network's name (RPiOnTheBoat), this is the one you defined.
Then, we will use ssh (PuTTY) to start the re-broadcast:

Connect with your username (default: pi) and password (default: raspberry), and cd to olivsoft, and start the script olivsoft:

Prompt> ./olivsoft

It's on its way! You can leave the session if you wish, the process will keep going.
To stop it:
Re-connect on the Raspberry PI with ssh
Find the process, by typing:

Prompt> ps -ef | grep java

Then send it a SIGTERM signal:

Prompt> kill -SIGTERM 2493

Where 2493 is the process id. This way, the process will shut down nicely (by design, it understands that signal, which would be a Ctrl+C from the command line).

The process being up and running, define a network connection in OpenCPN:

Notice the Address, the one you have defined.
Click Apply...

See the top right, the GPS is connected. As you can see in the NMEA log.
You can connect like this with as many devices as you want.
Voilà!

Next, we will try with the full NMEA station, with Pi4j.
Then the HTML5 console will also be available, from http://192.168.1.1:9999/html5/console.html.