EngineMonitor is an open source project for older marine engines
SignalK seems like an ideal format to publish the data in. I would like to take the reference implementation and expand it to include engine information and publish everything over the RPI's web server.
However I can't figure out how to structure the JSON messages and would rather avoid websockets for the first iteration. I've looked for sample JSON messages for sensor values such as "Raw Water Temperature" and "Exhaust Gas Temperature"
I've installed the reference implementations: instrumentpanel-master, signalk-js-client, and simpleguages to better understand SignalK. However it doesn't seem obvious where the JSON strings are stored or what format the JSON needs to be in when returned from the RPI.
Currently the web server returns an HTML formatted table with the diagnostic data and a JSON string with the same data:{"Raw Water In" : 58.1,"Raw water Out" : 82.2,"Coolant Entering Heat Exchanger" : 173.3,"Coolant Exiting Heat Exchanger" : 132.4,"Cylinder Head" : 182.5,"Engine Room" : 88.6,"Oil " : 178.7,"Exhaust Gas" : 473.8,"RPM" : 2400}It seems with some simple changes to the structure of the JSON it could be SignalK compliant and readable by SignalK-compliant displays or web pages.Questions:1. Is this application appropriate for SignalK?
2. Where can I find the data dictionary for these types of values?
3. Are there any SignalK apps for engine diagnostic data?
Thank you for the very well documented reply. This gives me a lot to work with. I've worked with websockets in the past and found some issues with them dropping the connection, in which case it drops down to long polling.
--
You received this message because you are subscribed to a topic in the Google Groups "Signal K" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/signalk/7DCpiWnpDNM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to signalk+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Absolutely take a fork. I'm going to start committing version 2, which has the RPI integrated. For twins or gensets I'm thinking there would be an Arduino per engine, then each Arduino would talk serial to a single RPI. On the wiki there's a page for version 2 that shows the html gauges.
I have several temp sensors based on the DS18B20 chip. Basically I've drilled out s.s. bolts and embedded the chips inside with epoxy, then run a lead to the Arduino. I ran some comparisons of just epoxying a sensor chip onto the outside of a metal pipe to measure the water temp inside and it was like 40f lower than the actual fluid temp. So I'm convinced that the chip must be housed in a metal probe that is insulated from the surrounding metal to get an accurate reading. In other words the fluid can be 40f hotter inside the pipe than the surface temp of the pipe. So if the sensor is inside a metal plug screwed into a bung on the pipe is probably reading too low. Ideally the sensor would be immersed in the fluid and insulated from the metal pipes by something non metal.
I'm also going to add boost and the fuel flow meters. My setup requires two fuel meters per engine since there's a fuel return line to the tank from the pump.
With the RPI there are so many possibilities. I'm thinking about adding a music player, and reference data like tide tables, rules of the road, etc. Also add in a database with some web forms for oil change, fuel fill, and other maintenance.
Would be nice to have a data base of fishes in season on RPI as well.
I also want to be able to put the RPI in WiFi AP mode so a WiFi router is not necessary, but then also connect a gateway to any local hotspots like at the yacht club.
I'd like to add a hard drive with movies for the kids and stream via chrome cast to the flat screen in the main cabin.
So many possibilities. Wishing I was retired and wealthy to spend more time on this.
What year make and model engines do you have?
BTW, we can change the bit bucket name so it's not my name, that way we can share credit. I got the domain name zencaptain.com and was going to use it to publicise the project. So we could change the bit bucket url to anything, or use zencaptain.
What other sensors where you thinking? I was thinking about adding the liquid level sensor strips from spark fun to show levels in the diesel, water, and water tanks. Would be nice to put strain gauges under the tanks since they're so cheap and incredibly accurate, you could show flow rate with then but the retrofit is too intense.
--
Here are a few comps of the gauge design I'm thinking of implementing. As I said before, not really any gauges going on, just clean data. Would probably do a daytime and nightime view, one being dark background the other being a lighter background.
This is a single iPad sized device as the display. The waterproof eReaders are my target at the moment I think.
Here is another version of single display in portrait. Just a slightly different layout.
This is probably what I'll be shooting for. Two devices, portrait, side by side mimicing a glass helm.
These are all just photoshop mockups I just threw together. I'm sure some tweaks need to be made and I'm certain I have left off possible data.... Open to ideas good/bad/ugly.
What data format is your arduino passing to the Pi? Or I guess, how is the Pi getting the data? I understand it's a serial connection
Not exactly sure what you are referring to by tools. Could easily throw together an iOS app for this, it may even work on Android. The first version will most likely make an attempt at a dynamic html page layout that adjusts to the viewport size of the device. This way the design could be functional in handhelds (smart phone) or on tablets (iPad, android, eReader) or on 32" cabin Tv's!
I was kinda envisioning a UI editor/configurator for these pages, basically a list of checkboxes. For instance, if your boat doesn't have a freezer, then no reason for that spec to show up... So you could essentially edit and select what values show up on your version of the display. The Garmin 7616xsv on my boat now has some pretty neat configuration options where you can customize your display layout. I'd like to mimic that within reason.
Thank you for the very well documented reply. This gives me a lot to work with. I've worked with websockets in the past and found some issues with them dropping the connection, in which case it drops down to long polling. Pushing data would be better from an architectural perspective because the Arduino takes about a second to retrieve all the temperatures from the DS18B20 sensors. During this time it won't respond to requests for data. With the push approach it would not get requests, instead it would send to values over the serial wires to the RPI.This gives me a lot to work with. I'll let the group know how it goes when I have something.