-
Notifications
You must be signed in to change notification settings - Fork 14
Description
I installed ORM on a stock 4b with a touchscreen display attached and everything seems to work fine up until attempting to connect BLE heartrate. I'm using an iphone app called HRM Heart Rate Monitor that acts as a BLE go-between for the apple watch and fitness equipment.
As soon as I launch the app on my iPhone, it connects to ORM and I can see the initial heart rate reading as displayed in the app and on my watch, however ORM immediately crashes after this with an Uncaught Exception: TypeError: Cannot read properties of undefined (reading 'readUInt8') error in the log. Not sure if this is a specific compatibility issue with the HRM app's BLE implementation or something else (I do not have a separate BLE HRM to test with), but would be nice to be able to use this if possible since I already have the watch and use it for my other workouts.
Log output below with trace enabled in config.js.
Mar 22 16:34:43 rowingmonitor systemd[1]: Started openrowingmonitor.service - OpenRowingMonitor.
Mar 22 16:34:43 rowingmonitor npm[1321]: > OpenRowingMonitor@0.9.6 start
Mar 22 16:34:43 rowingmonitor npm[1321]: > node app/server.js
Mar 22 16:34:44 rowingmonitor npm[1333]: ==== Open Rowing Monitor 0.9.6 ====
Mar 22 16:34:44 rowingmonitor npm[1333]: ant plus profile: Off
Mar 22 16:34:44 rowingmonitor npm[1333]: SessionManager: Workout plan recieved with 1 interval(s)
Mar 22 16:34:44 rowingmonitor npm[1333]: Workout parser, recognised justrow interval/split
Mar 22 16:34:44 rowingmonitor npm[1333]: Activating interval settings for interval 1 of 1
Mar 22 16:34:44 rowingmonitor npm[1333]: Workout parser, recognised justrow interval/split
Mar 22 16:34:44 rowingmonitor npm[1333]: Activating split settings for split 1
Mar 22 16:34:44 rowingmonitor npm[1333]: Workout parser, recognised justrow interval/split
Mar 22 16:34:44 rowingmonitor npm[1333]: heart rate profile: BLE
Mar 22 16:34:44 rowingmonitor npm[1333]: Opening BLE manager
Mar 22 16:34:44 rowingmonitor npm[1333]: webserver running on port 80
Mar 22 16:34:44 rowingmonitor npm[1333]: Server: peripheral requested refreshPeripheralConfig
Mar 22 16:34:44 rowingmonitor npm[1333]: bluetooth profile: Concept2 PM5
Mar 22 16:34:44 rowingmonitor npm[1333]: Server: peripheral requested refreshPeripheralConfig
Mar 22 16:34:44 rowingmonitor npm[1333]: Found device (HRM App)
Mar 22 16:34:44 rowingmonitor npm[1333]: Connected to 43:2E:E7:A3:16:E2
Mar 22 16:34:45 rowingmonitor npm[1343]: Gpio-service: pin number 17, polling interval 10 us, triggered on Up flank, minimal pulse time 50 us
Mar 22 16:34:45 rowingmonitor npm[1333]: websocket client connected
Mar 22 16:34:45 rowingmonitor npm[1333]: HR device information service was discovered
Mar 22 16:34:46 rowingmonitor npm[1333]: New heart rate value: <Buffer 00 4c>
Mar 22 16:34:46 rowingmonitor npm[1333]: Uncaught Exception: TypeError: Cannot read properties of undefined (reading 'readUInt8')
Mar 22 16:34:46 rowingmonitor npm[1333]: at GattClientCharacteristic.<anonymous> (file:///opt/openrowingmonitor/app/peripherals/ble/hrm/HrmService.js:222:80)
Mar 22 16:34:46 rowingmonitor npm[1333]: at cb (/opt/openrowingmonitor/node_modules/ble-host/lib/internal/gatt.js:2206:7)
Mar 22 16:34:46 rowingmonitor npm[1333]: at /opt/openrowingmonitor/node_modules/ble-host/lib/internal/gatt.js:1781:5
Mar 22 16:34:46 rowingmonitor npm[1333]: at Object.<anonymous> (/opt/openrowingmonitor/node_modules/ble-host/lib/internal/gatt.js:1027:10)
Mar 22 16:34:46 rowingmonitor npm[1333]: at AclConnection.<anonymous> (/opt/openrowingmonitor/node_modules/ble-host/lib/ble-manager.js:1703:14)
Mar 22 16:34:46 rowingmonitor npm[1333]: at AclConnection.emit (node:events:519:28)
Mar 22 16:34:46 rowingmonitor npm[1333]: at HciSocket.onData (/opt/openrowingmonitor/node_modules/ble-host/lib/internal/adapter.js:1231:16)
Mar 22 16:34:46 rowingmonitor npm[1333]: at HciSocket.emit (node:events:519:28)
Mar 22 16:34:46 rowingmonitor npm[1333]: at /opt/openrowingmonitor/node_modules/hci-socket/lib/hci-socket.js:105:9
Mar 22 16:34:46 rowingmonitor npm[1343]: 2026-03-22 16:34:46 sigHandler: Unhandled signal 15, terminating
Mar 22 16:34:46 rowingmonitor npm[1333]: OpenRowingMonitor shutdown at 16:34, at 0.00000 seconds,distance 0.0m
Mar 22 16:34:46 rowingmonitor npm[1333]: RowingData file has not been written, as there was not enough data recorded
Mar 22 16:34:46 rowingmonitor npm[1333]: Garmin fit file has not been written, as there was not enough data recorded
Mar 22 16:34:46 rowingmonitor npm[1333]: Garmin tcx file has not been written, as there was not enough data recorded
Mar 22 16:34:46 rowingmonitor npm[1333]: shutting down all peripherals
Mar 22 16:34:46 rowingmonitor npm[1333]: Shutting down PM5 peripheral
Mar 22 16:34:46 rowingmonitor npm[1333]: Shutting down HRM peripheral
Mar 22 16:34:46 rowingmonitor npm[1333]: Terminating current HRM connection
Mar 22 16:34:46 rowingmonitor npm[1333]: Ble socket is closed
Mar 22 16:34:46 rowingmonitor systemd[1]: openrowingmonitor.service: Main process exited, code=exited, status=1/FAILURE
Mar 22 16:34:46 rowingmonitor systemd[1]: openrowingmonitor.service: Failed with result 'exit-code'.
Mar 22 16:34:46 rowingmonitor systemd[1]: openrowingmonitor.service: Consumed 2.756s CPU time.
Mar 22 16:34:46 rowingmonitor systemd[1]: openrowingmonitor.service: Scheduled restart job, restart counter is at 6.
Mar 22 16:34:46 rowingmonitor systemd[1]: Stopped openrowingmonitor.service - OpenRowingMonitor.
Mar 22 16:34:46 rowingmonitor systemd[1]: openrowingmonitor.service: Consumed 2.756s CPU time.
Mar 22 16:34:46 rowingmonitor systemd[1]: openrowingmonitor.service: Start request repeated too quickly.
Mar 22 16:34:46 rowingmonitor systemd[1]: openrowingmonitor.service: Failed with result 'exit-code'.
Mar 22 16:34:46 rowingmonitor systemd[1]: Failed to start openrowingmonitor.service - OpenRowingMonitor.