During live testing, I think I ran into something completely unrelated regarind fit file writing in the 0.9.7 branch — I know it's in active dev, but I have no means to DM and put it on your radar in case you don't know about it @JaapvanEkris:
Jan 26 18:25:38 rowingmonitor npm[855]: Activating split settings for split 2
Jan 26 18:25:38 rowingmonitor npm[855]: Raw data-file has been saved as data/recordings/2026/01/2026-01-27_02-19-59_raw.csv.gz
Jan 26 18:25:38 rowingmonitor npm[855]: RowingData-file has been saved as data/recordings/2026/01/2026-01-27_02-19-59_rowingData.csv
Jan 26 18:25:38 rowingmonitor npm[855]: Uncaught Exception: TypeError: Cannot read properties of undefined (reading 'num')
Jan 26 18:25:38 rowingmonitor npm[855]: at /opt/openrowingmonitor/node_modules/@markw65/fit-file-writer/build/src/fit-encode.js:1:3947>
Jan 26 18:25:38 rowingmonitor npm[855]: at Array.sort (<anonymous>)
Jan 26 18:25:38 rowingmonitor npm[855]: at S.writeMessage (/opt/openrowingmonitor/node_modules/@markw65/fit-file-writer/build/src/fit->
Jan 26 18:25:38 rowingmonitor npm[855]: at createActiveSplit (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:672:14)
Jan 26 18:25:38 rowingmonitor npm[855]: at writeSplits (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:612:15)
Jan 26 18:25:38 rowingmonitor npm[855]: at workoutToFit (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:457:11)
Jan 26 18:25:38 rowingmonitor npm[855]: at async Object.fileContent (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:354:21)
Jan 26 18:25:38 rowingmonitor npm[855]: at async Object.writeFile (file:///opt/openrowingmonitor/app/recorders/fileWriter.js:34:25)
Jan 26 18:25:38 rowingmonitor npm[855]: at async writeRecordings (file:///opt/openrowingmonitor/app/recorders/recordingManager.js:172:>
Jan 26 18:25:38 rowingmonitor npm[864]: 2026-01-26 18:25:38 sigHandler: Unhandled signal 15, terminating
Jan 26 18:25:38 rowingmonitor npm[855]: OpenRowingMonitor shutdown at 18:25, at 335.28646 seconds,distance 1064.2m
Jan 26 18:25:38 rowingmonitor npm[855]: Raw data-file has been saved as data/recordings/2026/01/2026-01-27_02-19-59_raw.csv.gz
Jan 26 18:25:38 rowingmonitor npm[855]: RowingData-file has been saved as data/recordings/2026/01/2026-01-27_02-19-59_rowingData.csv
Jan 26 18:25:38 rowingmonitor npm[855]: /opt/openrowingmonitor/node_modules/@markw65/fit-file-writer/build/src/fit-encode.js:1
Jan 26 18:25:38 rowingmonitor npm[855]: "use strict";var x=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var R=Object.getOwn>
Jan 26 18:25:38 rowingmonitor npm[855]: _hour:5,degreesCelsius:6,degrees_celsius:6,degreesFarenheit:7,degrees_farenheit:7,zone:8,gear:9,rp>
Jan 26 18:25:38 rowingmonitor npm[855]: 33,plank_with_leg_lift:133,reversePlankWithLegPull:134,reverse_plank_with_leg_pull:134,_min:0,_max>
Jan 26 18:25:38 rowingmonitor npm[855]: igh_value:{num:1,name:"high_value",type:"uint16",array:"false",scale:1,offset:0,units:"watts",bits>
Jan 26 18:25:38 rowingmonitor npm[855]: ce_position:{num:108,name:"avg_cadence_position",type:"uint8",array:"true",scale:1,offset:0,units:>
Jan 26 18:25:38 rowingmonitor npm[855]: ts:!1,subFields:[]},distance:{num:4,name:"distance",type:"uint32",array:"false",scale:100,offset:0>
Jan 26 18:25:38 rowingmonitor npm[855]: t:0,units:"rpm",bits:[],components:[],isAccumulated:!1,hasComponents:!1,subFields:[]},manufacturer>
Jan 26 18:25:38 rowingmonitor npm[855]: ource_type:{num:19,name:"heart_rate_source_type",type:"source_type",array:"false",scale:1,offset:0>
Jan 26 18:25:38 rowingmonitor npm[855]: ld ${e.key}`)}else if(typeof a=="number")l=a;else if(d?.mask){let _=a;l=_.value,_.options?.forEach>
Jan 26 18:25:38 rowingmonitor npm[855]: >
Jan 26 18:25:38 rowingmonitor npm[855]: TypeError: Cannot read properties of undefined (reading 'num')
Jan 26 18:25:38 rowingmonitor npm[855]: at /opt/openrowingmonitor/node_modules/@markw65/fit-file-writer/build/src/fit-encode.js:1:3947>
Jan 26 18:25:38 rowingmonitor npm[855]: at Array.sort (<anonymous>)
Jan 26 18:25:38 rowingmonitor npm[855]: at S.writeMessage (/opt/openrowingmonitor/node_modules/@markw65/fit-file-writer/build/src/fit->
Jan 26 18:25:38 rowingmonitor npm[855]: at createActiveSplit (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:672:14)
Jan 26 18:25:38 rowingmonitor npm[855]: at writeSplits (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:612:15)
Jan 26 18:25:38 rowingmonitor npm[855]: at workoutToFit (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:457:11)
Jan 26 18:25:38 rowingmonitor npm[855]: at async Object.fileContent (file:///opt/openrowingmonitor/app/recorders/fitRecorder.js:354:21)
Jan 26 18:25:38 rowingmonitor npm[855]: at async Object.writeFile (file:///opt/openrowingmonitor/app/recorders/fileWriter.js:34:25)
Jan 26 18:25:38 rowingmonitor npm[855]: at async writeRecordings (file:///opt/openrowingmonitor/app/recorders/recordingManager.js:172:>
Jan 26 18:25:38 rowingmonitor npm[855]: at async Object.handleCommand (file:///opt/openrowingmonitor/app/recorders/recordingManager.js>
Jan 26 18:25:38 rowingmonitor npm[855]: Node.js v22.21.0
Jan 26 18:25:38 rowingmonitor systemd[1]: openrowingmonitor.service: Main process exited, code=exited, status=1/FAILURE
Jan 26 18:25:38 rowingmonitor npm[855]: Activating split settings for split 2
Jan 26 18:25:38 rowingmonitor npm[855]: Raw data-file has been saved as data/recordings/2026/01/2026-01-27_02-19-59_raw.csv.gz
As far as I know, I was just picking up the handle and yanking 🤷. Really, this came up while I was calibrating things for the the thread over in #140
So it was a secondary thing I caught while testing the new UI and calibrating.
During live testing, I think I ran into something completely unrelated regarind fit file writing in the
0.9.7branch — I know it's in active dev, but I have no means to DM and put it on your radar in case you don't know about it @JaapvanEkris:As far as I know, I was just picking up the handle and yanking 🤷. Really, this came up while I was calibrating things for the the thread over in #140
If I recall, the order went:
flyWheelInertia), restart ORMRowingEngineunderlogLevelwith a lowercase r. Update, and disablefitFileswhile I'm at it. Restart ORMSo it was a secondary thing I caught while testing the new UI and calibrating.
Originally posted by @DXCanas in #171 (comment)