Remote boat monitoring over the web

Okay... It's late in the day here but to clarify, I was looking into getting the boat telemetry available to a lot of people on the internet.

Ah, missed that bit! Changes everything, doesn't look there's an easy signalk app to do that.


It will be nice to get GPS position, boat speed and wind angle/strength viewable on the internet and perhaps camera picture every so often as well..

Just been playing around with sailblogs.com which should do the trick. You can send updates via email with position, sog,cog & windspeed.
https://www.sailblogs.com/wiki/index.php/Using_SailBlogs_Remote
Looks a little complex to do by hand every day but a little node-red which is built into openplotter and signalk should automate the process to the press of a button.

VkNsITf.png


You can view in google earth as well by the looks of it.
 
Last edited:
Ah, missed that bit! Changes everything, doesn't look there's an easy signalk app to do that.

There would've been if I hadn't have taken a "proper" job 2 years ago and shelved "the project"....

Although regarding signalk, if transmitting data over a satphone I'll suggest that the SignalK stance that resource constraints are irrelevant Because WiFi falls apart a little
 
There would've been if I hadn't have taken a "proper" job 2 years ago and shelved "the project"....

Although regarding signalk, if transmitting data over a satphone I'll suggest that the SignalK stance that resource constraints are irrelevant Because WiFi falls apart a little

Thread in signalk slack at the moment about writing a signalk app to create the email body to saildocs though node-red could do that without breaking sweat. Email looks about 900bytes so not too bad over winlink or a sat phone. You can email image attachments as well, if you wallet is that big for sat data ;)

Ditch that proper job & come join the real world ;)


PS looks like 35 euros a year for sailblogs to get the map and everything.
 
Last edited:
Thread in signalk slack at the moment about writing a signalk app to create the email body to saildocs though node-red could do that without breaking sweat. Email looks about 900bytes so not too bad over winlink or a sat phone.

I believe what you're saying they're doing here is translating SignalK to a text representation because it takes less space to describe a piece of data in English than it does in SignalK. I discussed that with the SignalK developers a few years back. Our opinions differed.
 
I believe what you're saying they're doing here is translating SignalK to a text representation because it takes less space to describe a piece of data in English than it does in SignalK. I discussed that with the SignalK developers a few years back. Our opinions differed.

Not quite, for sailblogs there's a text format which the email needs to be in so no choice but to grab the sigK data and insert it into some text. SigK size isn't a problem onboard, a years worth of data is probably less than a few seconds of youtube cat video :)

https://www.sailblogs.com/wiki/index.php/Using_SailBlogs_Remote
 
SigK size isn't a problem onboard, a years worth of data is probably less than a few seconds of youtube cat video :)

People largely don't watch cat videos over links where data is expensive which in some cases includes gsm and almost always includes sat phones. If someone implemented a native SignalK cloud service, I wouldn't be fond of spending 20x more than I needed to to send data. Moreover on the receiving side, cloud service providers charge customers by the GB for data transfer and storage. You might regard your wifi network as a fixed cost and your 1TB drive can hold all the data you need, but if a service has 10000 users updating their data every minute, that 20x-more-bytes-than-necessary is going to translate into a painful cost to the service provider.
 
Last edited:
People largely don't watch cat videos over links where data is expensive which in some cases includes gsm and almost always includes sat phones. If someone implemented a native SignalK cloud service, I wouldn't be fond of spending 20x more than I needed to to send data. Moreover on the receiving side, cloud service providers charge customers by the GB for data transfer and storage. You might regard your wifi network as a fixed cost and your 1TB drive can hold all the data you need, but if a service has 10000 users updating their data every minute, that 20x-more-bytes-than-necessary is going to translate into a painful cost to the service provider.
The sigK server has an MQTT app so you can send the data in as small a tranport as there is, just need to sort some sort of way to view - loads of IOT services now some which can take MQTT. Though it's not really a big problem to begin with for boat monitoring, just send a few bits of data which are really interesting every ten minutes or hour or whatever. Bottom line for anyone interested is it's free. it works and it's easy to keep an eye on your boat for a non programmer for a lot less than the cost of a waterproof jacket :cool:
 
The sigK server has an MQTT app so you can send the data in as small a tranport as there is

It's not the transport overhead that's the issue it's the data format! You're still sticking 160 bytes into an mqtt message to represent data which could easily be represented in 8.

(although this is rather off-topic so I won't continue banging on about it...:-)
 
Last edited:
It's not the transport overhead that's the issue it's the data format! You're still sticking 160 bytes into an mqtt message to represent data which could easily be represented in 8.

(although this is rather off-topic so I won't continue banging on about it...:-)
Just send the number then :)
2 nodes or 3 if you want the throttle the data.
 
Works then :cool:

Just had the Pi automatically updating sailblogs with lat & long from signalk at the press of a button in node-red. Bit of a runaround as sigK lat/long is decimal & sailblogs will only accept something like this - COMMAND1:position:70 0.0'N:45 0.0'W

Edit - Didn't see anything in the documentation but sailblogs does seem to accept decimal degrees with minus for S & W .

Had to turn on accept less secure apps as well in google. Works OK in RMS express ham email, just tried over the web but should be fine over the ham airways as well.

So sorted, update a blog from anywhere on the seven seas. :cool:
 
Last edited:
Just had the Pi automatically updating sailblogs with lat & long from signalk at the press of a button in node-red.

Correct me if I'm wrong (i might have misunderstood) but I believe that SignalK (the format) is irrelevant here and you're talking about the SignalK server application. You feed in nmea data (NMEA-0183?) it converts it to SignalK then converts it into the format required by sailblogs to send. Arguably you could have easily bypassed the server and done NMEA-0183 to sailblogs conversion in a trivial script in your language of choice.
 
Arguably you could have easily bypassed the server and done NMEA-0183 to sailblogs conversion in a trivial script in your language of choice.

Maybe trivial for you programmers ;), but nowhere near as easy as using sigK, no need to look at every nmea message to find the one you want then write something to parse through that to extract the data then create some text with that. SigK has node-red built in it's just one node to get the data, I've done it before with raw NMEA0183 and it's a right pain compared with sigK/node red.
Will be easy still when someone gets round to writing a sigK app to do it :cool:
 
Martin_J - this works if you get round to having a play with node-red, might need to download the signalk node-red app then run it from the signalk webapps, then ctrl i to insert this code below. Will likely throw some errors about nodes not available, you can load any missing in settings | manage pallete. Just set up for lat/long/sog & cog so far.


Code:
[/COLOR][    {
        "id": "2f0fe77f.56ec98",
        "type": "inject",
        "z": "f792bbef.555918",
        "name": "",
        "topic": "YourCodeFromSailblogs",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 100,
        "y": 300,
        "wires": [
            [
                "f41b2c72.8875b"
            ]
        ]
    },
    {
        "id": "c02e5d3c.9aa95",
        "type": "debug",
        "z": "f792bbef.555918",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "x": 730,
        "y": 320,
        "wires": []
    },
    {
        "id": "c0df6cf6.e801c",
        "type": "e-mail",
        "z": "f792bbef.555918",
        "server": "smtp.gmail.com",
        "port": "465",
        "secure": true,
        "name": "remote8@sailblogs.com",
        "dname": "",
        "x": 690,
        "y": 380,
        "wires": []
    },
    {
        "id": "dc4258b9.f5bd38",
        "type": "signalk-on-delta",
        "z": "f792bbef.555918",
        "name": "",
        "context": "vessels.self",
        "flatten": true,
        "x": 120,
        "y": 180,
        "wires": [
            [
                "903ef199.919be",
                "61ccad7f.b5b4c4"
            ]
        ]
    },
    {
        "id": "f41b2c72.8875b",
        "type": "moment",
        "z": "f792bbef.555918",
        "name": "",
        "topic": "",
        "input": "payload",
        "inputType": "msg",
        "inTz": "Etc/UTC",
        "adjAmount": 0,
        "adjType": "days",
        "adjDir": "add",
        "format": "M/D/YYYY",
        "locale": "en_GB",
        "output": "timeformatted",
        "outputType": "msg",
        "outTz": "Etc/UTC",
        "x": 220,
        "y": 360,
        "wires": [
            [
                "158ee7d4.9fc268"
            ]
        ]
    },
    {
        "id": "903ef199.919be",
        "type": "debug",
        "z": "f792bbef.555918",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "x": 130,
        "y": 240,
        "wires": []
    },
    {
        "id": "61ccad7f.b5b4c4",
        "type": "function",
        "z": "f792bbef.555918",
        "name": "",
        "func": "switch (msg.topic){\n    case \"navigation.position\":\n        global.set(\"latlong\", msg.payload);\n        break;\n    case \"navigation.courseOverGroundTrue\":\n        global.set(\"cog\", msg.payload);\n        break;\n    case \"navigation.speedOverGround\":\n        global.set(\"sog\", msg.payload);\n        break;\n}\n\n\n\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 330,
        "y": 180,
        "wires": [
            []
        ]
    },
    {
        "id": "158ee7d4.9fc268",
        "type": "function",
        "z": "f792bbef.555918",
        "name": "CreateEmail",
        "func": "var latlong=global.get('latlong') || {};\nvar lat = latlong.latitude || 0;\nvar long  = latlong.longitude || 0;\nvar sog = global.get('sog') || 0;\nvar cog = global.get('cog') || 0;\n\n\n\nmsg.payload =\"COMMAND1:position:\" + lat.toFixed(4) + \":\" + long.toFixed(4) + \"\\r\\n\";\nmsg.payload = msg.payload + \"COMMAND2:pdata:\" +  sog + \"|\" + cog + \"|22|270 \\r\\n\";\nmsg.payload = msg.payload + \"DATE:\" + msg.timeformatted +  \"\\r\\n\";\nmsg.payload = msg.payload + \"TITLE: This is a test remote post number 555 \\r\\n\";\nmsg.payload = msg.payload + \"LOCATION: The Boat \\r\\n\";\nmsg.payload = msg.payload + \"AUTHOR: PB \\r\\n\";\nmsg.payload = msg.payload + \"BODY: This is a test of the remote processor. If all goes well, this message will appear in my weblog very short.\\r\\n\";\nmsg.payload = msg.payload + \"###\\r\\n\";\n\nreturn msg;\n\n",
        "outputs": 1,
        "noerr": 0,
        "x": 470,
        "y": 320,
        "wires": [
            [
                "c02e5d3c.9aa95",
                "c0df6cf6.e801c"
            ]
        ]
    }

][COLOR=#000000]
 
Sailblogs does look good and I was about to set up an account... Then spent the weekend wondering about setting up a web site from scratch to take messages by MQTT.

Just had a busy weekend but I'll need a bit of time to study that code.. And what to do with it!
 
Sailblogs does look good and I was about to set up an account... Then spent the weekend wondering about setting up a web site from scratch to take messages by MQTT.

Just had a busy weekend but I'll need a bit of time to study that code.. And what to do with it!
After a bit of time looking at sailblogs it's seems really basic these days, but simple and just what i was after which is mainly for sending position updates via email offshore which offer a little more than winlink. The google earth feed is a new addition as well. Worth $35 a year for me. Must be loads of IOT sites around you could use to make your own though, or WordPress, or from scratch.
 
Last edited:
Decided to take another look at this.

How do you actually sign in/register to signalk cloud? I've got my token, and know my data is being uploaded but how to I login?
 
I didn't actually use SignalK cloud. I tested all mine with demo.thingsboard.io

It provides me with an MQTT token, allowed me to view telemetry as it was received by Thingsboard and could then display on a programmable page. All free.. I actually got it working with test data a few months ago but then never got around to plugging it in on board. Realised I'd have to leave the wind instruments on to see live data.

Just realised now though that I can leave the nmea2000 backbone on but turn off the individual analogue wind displays.

If you don't get an answer about signal k cloud then look at thingsboard and I be able to help further. I'll try and get the teensy connected tonight and sending data to the cloud via a 3g dongle.

Thingsboard also allows telemetry via http packets if easier.
 
Decided to take another look at this.

How do you actually sign in/register to signalk cloud? I've got my token, and know my data is being uploaded but how to I login?
Can't remember if I did or not, looking again I'm not logged in but the boat email is showing as a provider. Then in mxtommy kip don't select restrict to own vessel and the paths are in there with my mmsi number.
 
Top