Ant+ FE-C broadcasting? #71
Replies: 10 comments 97 replies
-
Hi Carlito, I don't know if this is possible (I am not familiar with the ANT+ implementation as that is Lars' cup of tea. A workaround might be to upload your data to Garmin directly from ORM. As a workaround, the tcx file can be uploaded by hand, or automatically by using tools like https://github.com/La0/garmin-uploader I use RowsAndAll as an intermediate stage (you can e-mail workouts with much more detailed info in the csv), which can upload to Garmin as well (my current route). |
Beta Was this translation helpful? Give feedback.
-
Garmin supports any rowing machine with ANT+ and can capture
You can't even imagine how many of us are looking for such connectivity with our current not-so-smart rowing machines. |
Beta Was this translation helpful? Give feedback.
-
Open Rowing Monitor currently supports broadcasting the metrics via different BLE protocols (two FTMS protocols and parts of the C2 PM protocol). These can be broadcasted with Raspis native BLE chip. It might be possible to broadcast via Ant+ FE-C as well (with additional Ant+ Hardware attached to the Raspi). But to be honest that's probably nothing I personally would invest time in, as I don't use devices that require Ant+ FE-C. Open Rowing Monitor does not generate Improving the Concept2 PM implementation is definitely something that would be great! This proprietary protocol is kind of hard to nail correctly as the spec leaves some room for interpretation. Also I haven't implemented the whole spec, as there are some really fancy metrics inside it that are difficult (if at all possible) to extract from the physics engine. Different apps use different parts of these metrics so it is very app specific if the integration works or not. However there is definitely room for improvement, feel free to experiment with it and report or fix stuff that you find. |
Beta Was this translation helpful? Give feedback.
-
Seeing that ANT+ broadcasting is competely uncharted territory here, I don't consider it a viable option. I would be the first to provide a data structure to test, but in all honesty I'm not looking forward to reverse engineer yet another propriatary protocol (PM5-BLE has proven to be tough enough as it is from a data elements perspectve, where Lars found/adopted a great base product to begin with and that isn't even working flawlessly yet either), especially if nobody has documented anything about it. What is the goal here? Get as much data into Garmin connect as possible? I get the feeling people get stuck in a specific way of getting data to Garmin, instead of the higher goal to just get data into Garmin. The ANT+ IMHO is a disappointing strategy to begin with as the datafield extra isn't that interesting to begin with, and my experience wth ANT+ connections between ORM and Garmin is dissapointing to say the least. Because it might be doable to create a FIT file as some people have reverse engineered the rowing elements of FIT already and perhaps even desirable as several sites also accept FIT and some additional fields might be interesting. When I manually upload FIT file from C2's logbook to Garmin, all recorded fields are nicely filled, suggesting that these fields fro the FIT are indeed used. What's the opinion about such a strategy here? |
Beta Was this translation helpful? Give feedback.
-
I figured out how to report correct distance (that is conscious about the changes to the drag factor) via BLE cycling speed and cadence service and cycling power service. This would help people that want to record activities on their smart watches which do not support FTMS (e.g. many Garmin watches), without having to implement ANT FEC. Its surprisingly straight forward, I will create a pull request in the upcoming weeks. I have one question: should i create it against Jaap's version or to the original ORM? The implementation is fully independent of the rowing engine. They work by broadcasting certain data that allows the client to calculate the necessary metrics:
The actual distance, speed, cadence etc. metrics are not exposed directly but rather converted to "wheel revolution count" in a way that when the "wheel circumference" is set to the appropriate length on the client (e.g. to 10mm) it can actually calculate the speed and distance by looking at the deltas of the rotation count that occurred over a known delta time. The only limitation (at least on the Garmin watches) is that those watches only connect to these sensors when cycling activity is selected, but the activity type can be changed to rowing in Garmin Connect. Alternatively the FIT file produced by the watch may be manipulated directly (for this I actually created a nodejs UI app that uses a C# console app implementing the FIT SDK). Of course this is a workaround but learning Ant+ FEC with zero experience turned out to be quite a pain due to the lack of good examples... (I have not given up on it just not quire there yet :) |
Beta Was this translation helpful? Give feedback.
-
So I'm probably jumping the gun on this, but Abasz's work got me thinking again, and I'm probably going to jinx myself here, but I just successfully recorded a session with Open Rowing Monitor broadcasting metrics over Ant+ to my Garmin Watch I need to sense check a few other things and record a proper rowing session before I share the code, but here's the example activity: Anyways, exciting developments ahead! |
Beta Was this translation helpful? Give feedback.
-
Okay, I am ready to show the work I've done to have the Open Rowing Monitor broadcast rowing metrics over ANT+ This allows a user with a Garmin watch to connect to the rowing machine, and have the following metrics recorded as part of their indoor rowing activity:
All of these fields are recorded as "native" Garmin fields, which means you get all the usual comparison metrics as well (Time in Power Zones, distance per stroke etc) So I guess the main question is, Why do this? So why use ANT? Why not just use the FTMS BLE functionality? Okay, enough jibber jabber. You can find my code below. I'm not a developer by any means, so apologies in advance for the mess I've created. Also, as you may note from the URL below, this branch is using the new engine as developed by Jaap, so keep that in mind if you're wanting to try it out, because if you don't understand some of the changes introduced by the new engine your metrics will go crazy! Oh and also, full credit to the only example I could find of someone building an ANT Server goes to PTX2, who built a Bicycle Power Meter broadcaster, which formed the basis of what I did to build my Fitness Equipment server. You can find their work linked here If you want to try it out then when your rowing machine is up and running you'll need to first search for the Ant Server on your watch. For the Fenix 6 you'd do this by going to [Sensors & Accessories], then [Add New], then choose [Smart Trainer]. So, a few things to note:
So what's my ultimate end goal with this? @Abasz @Scx8R5SvSlYB3xcM0psn |
Beta Was this translation helpful? Give feedback.
-
WOW! Chrismas must have come a couple of weeks early! WOW! I'll start testing today (the play phase) and see if I can incorporate @Abasz pull-request in a week or two (a have a bit of work in the coming weeks). I'll certanly will be playing with this. @carlito1979 : I'll start playing with this as well, but we'll have to figure out how to place it in the architecture. As BLE and ANT can coexist (by your design :)), and you indicate the ANT+ is powerhungry (probably it will ramp up the CPU cycles), it makes sense to isolate it as a seperate process. So spawning it into a dedicated server like you done now would make much sense. In working on the PREEMPT version, I stumbled on an approach of CPU isolation: basically you give specific processes their own dedicated CPU (as the RPI 4B has 4), isolating it from other disturbing factors. Giving the GPIO-thread (which is high frequency AND time critical) its own CPU makes sense, and putting a high CPU consuming server in a stand-alone service on a dedicated CPU also makes sense. But I think @laberning should have the final say in this approach. I can inmagine that he wants to do some code refactoring and review the message subscription model here. Currently, RowingStatistics.js is aware of the (two) types of clients (web en pheripiral) and their implementation specifics (i.e. their frequency). There is a case to be made to add a third, making it web, BLEpheripiral and ANTpheripiral and get on with our lives. There is also a strong case to be made to simplify this and fix it at the other end: RowingStatistics already has different types of messages it broadcasts across a messagebus, and the subscribers should decide for themselves what messages they accept and in what frequency. The later is a bit cleaner as it rids RowingStatistics from some implementation knowledge, but it potentially is much more CPU intensive for the pheripirals. |
Beta Was this translation helpful? Give feedback.
-
I completed the rework of the peripherals (and addition of the ANT profile) as well as tested the code and the different modes. There are two things:
What have been done:
Code is available here: https://github.com/Abasz/openrowingmonitor/tree/extend-peripherals A side note: at some point there needs to be a decision whether ES6 classes or original functions declarations should be used (my preference would be to refactor the whole code to ES6 classes as that is, in my view, cleaner to maintain) because it is a mix now (it was already a mix in the original version, so I kept the logic as is). Also the server.js is becoming a mess so that needs a refactor as well at some point, separating out features. |
Beta Was this translation helpful? Give feedback.
-
@JaapvanEkris I did a test on the C2 with ANT+ Trainer on my Garmin FR255 with the indoor rowing profile, and total distance was spot on for me (there is 5m difference that is due to the fact that I stopped the activity on the watch a sec after the interval training finished).: But splits did not transfer to the watch from the workout for me (but the C2 I used had old firmware actually so it is possible that there has been changes). On the watch the whole workout is one lap. |
Beta Was this translation helpful? Give feedback.
-
Hi there. I understand if I get an ant+ usb stick I’ll be able to connect to an ant+ heart rate monitor, but I was wondering if anyone knew if it would be feasible to broadcast an ant+ signal with the fe-c profile so my Garmin Fenix 6 watch could pick up the data?
The PM5 monitor on the concept2 rower can do this
https://www.concept2.com/news/connecting-garmin-devices-to-pm5
I realise I can do this via the BLE FTMS implementation and using a ciq data field like ardurower to do this, but the ant+ fe-c signal is native and allows full integration of power, speed and pace into the indoor rower fit files.
Beta Was this translation helpful? Give feedback.
All reactions