Datafield to read & control Forumslader (Bicycle Dynamo Power Bank)

The forumslader.de is one if the most powerful and versatile bicycle dynamo power bank. It has a BLE API which can be used to gather data like speed, temperature, voltage, etc. from the power bank's internal controller.

I would be useful to get and show this data on a Garmin bicycle computer like Edge1030.

Forumslader BLE is based on a Nordic nRF52832 chipset, which has Bluetooth 5.0 single mode and acts as an advertising sensor. Thus, it should be possible to pair it with an CIQ program, acting as datafield.

I am an experienced C# / C++ programmer, but not aware with Monkey C.

Anyone here who is interested to start a github open source repo for this project, together?

Or anyone who is willing to do the heavy lifting for a tbd budget?

Thanks for sharing your thoughts on this idee here!

Klaus,

Berlin/Germany

  • The first thing I'd do is insure that a garmin device can see this with BLE.  The CIQ implementation is a bit minimal.  Try this app: https://apps.garmin.com/en-US/apps/9bcc8b66-8385-4afb-b93e-f69e01422284

    There are other things to look at, such as the max size of a read is 20 bytes or so.

  • I checked it, and i can see the device, but cannot connect to it. The name of the BLE device is not display, although is has one ("FL_BLE").

    I am looking for a simple code example, to start programming and debugging. It should connect to the device with the given name "FL_BLE", read a value from the payload, and display it in a IQ datafield. Can you point me to some example, e.g. on github?

  • The SDK has two samples that use BLE.  The NordicThingy52 (a device app) and the NordicThingy52CoinCollector (a data field)  With BLEScan, do you see a UUID?  For most things I don't see a name, but with a UUID you can look for that in a scan and pair when it's found.

  • I see the device (can identify it by rssi value) and 1 UUID. But connect fails.

    With nRF connect App (Android) i see the devices's complete local name ("FL_BLE") and the same UUID. Connect works.

  • It's not uncommon that with CIQ you don't see the name.  What you want to fucus on its what you see as a UUID in CIQ and look for that when scanning.

    Do you have the BLE spec for your device?

  • There is no published spec, thus i peeked into connection by nRF connect Android App.
    After i connect to the device with nRF connect, i see the GATT handshake, and after this the payload of the device.

    Not sure, i interprete it correctly, for me it seems the device offers only one service UUID (0xffe0) and one characteristic (0xef38) which allows to enable a notification. These notifications include the raw payload of the device, which my CIQ app shall decode (beginning with "$FL5...") and process.

    Meanwhile i tried to write my first CIQ app. Can't run it in the simulator, because for BLE operation i need to get the nRF dongle before. Thus, i built a .PRG file with visual studio code an copyied it to path /garmin/Apps on my Edge1030, expecting to see the app in the IQ menu. But it's not there :-( What's going wrong here, why does the side load not work?


    V 13:38:32.515 Connecting to 78:A5:04:xx:yy:zz...
    D 13:38:32.515 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
    D 13:38:32.763 [Server callback] Connection state changed with status: 0 and new state: CONNECTED (2)
    I 13:38:32.763 [Server] Device with address 78:A5:04:xx:yy:zz connected
    D 13:38:32.767 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
    I 13:38:32.767 Connected to 78:A5:04:xx:yy:zz
    V 13:38:32.780 Discovering services...
    D 13:38:32.780 gatt.discoverServices()
    D 13:38:32.794 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    I 13:38:33.212 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
    D 13:38:33.383 [Callback] Services discovered with status: 0
    I 13:38:33.383 Services discovered
    V 13:38:33.390 Generic Access (0x1800)
    - Device Name [R] (0x2A00)
    - Appearance [R] (0x2A01)
    - Peripheral Privacy Flag [R W] (0x2A02)
    - Reconnection Address [R W] (0x2A03)
    - Peripheral Preferred Connection Parameters [R] (0x2A04)
    Generic Attribute (0x1801)
    - Service Changed [I] (0x2A05)
    Client Characteristic Configuration (0x2902)
    Unknown Service (0000ffe0-0000-1000-8000-00805f9b34fb)
    - Unknown Characteristic [N R WNR] (0000ef38-0000-1000-8000-00805f9b34fb)
    Client Characteristic Configuration (0x2902)
    Characteristic User Description (0x2901)
    D 13:38:33.390 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
    D 13:38:33.392 gatt.setCharacteristicNotification(0000ef38-0000-1000-8000-00805f9b34fb, true)
    I 13:38:33.459 Connection parameters updated (interval: 30.0ms, latency: 0, timeout: 6000ms)
    I 13:38:33.857 Notification received from 0000ef38-0000-1000-8000-00805f9b34fb, value: (0x) 24-46-4C-35-2C-30-30-43-30-30-30-2C-30-2C-30-2C-34-30-35-37, "$FL5,00C000,0,0,4057"
    A 13:38:33.857 "(0x) 24-46-4C-35-2C-30-30-43-30-30-30-2C-30-2C-30-2C-34-30-35-37, "$FL5,00C000,0,0,4057"" received

  • What type of app?  If it's a data field, once you sideload, you need to add the data field to a data screen in the activity.  Widgets and device apps are also accessed in different ways.  This IQ option is for device apps, and widgets are accesses by way of a swipe from the top on a 1030 if I recall.

  • Oh, yes, I programmed a data field, not an App. Thanks for the hint. The data field worked.
    But not to the BLE problem: I can't find the UUID of the device ("Unknown Service" 0000ffe0-0000-1000-8000-00805f9b34fb) in the scan results of the garmin. Does the garmin scan only known services? How can i connect to the device's unknown service UUID?

  • I installed the NordicThingy52 CIQ app and changed device to edge1030. The app ist listed on the device in the IQ menu, and it starts. But after i press "start scanning" is does not show any scan results, display stucks to "Device: 0/0" - i guess i do something wrong with bluetooth...

  • Did you change the UUIS in the profile manager in the Nordic sample?  It's looking for the specific UUID of the Thingy52 when scanning.