Fit4Ruby ======== Fit4Ruby is a Ruby libary to read and write FIT files. It is currently only tested with FIT files generated by the Garmin Forerunner 620. This libary is still work in progress and probably not yet ready to be used in your application. However, you are welcome to try it and send me comments and patches. Usage ----- You can create an Activity. ``` require 'fit4ruby' a = Fit4Ruby::Activity.new a.total_timer_time = 30 * 60 a.new_user_profile({ :age => 33, :height => 1.78, :weight => 73.0, :gender => 'male', :activity_class => 4.0, :max_hr => 178 }) a.new_event({ :event => 'timer', :event_type => 'start_time' }) a.new_device_info({ :device_index => 0 }) a.new_device_info({ :device_index => 1, :battery_status => 'ok' }) ts = Time.now 0.upto(a.total_timer_time / 60) do |mins| ts += 60 a.new_record({ :timestamp => ts, :position_lat => 51.5512 - mins * 0.0008, :position_long => 11.647 + mins * 0.002, :distance => 200.0 * mins, :altitude => 100 + mins * 0.5, :speed => 3.1, :vertical_oscillation => 9 + mins * 0.02, :stance_time => 235.0 * mins * 0.01, :stance_time_percent => 32.0, :heart_rate => 140 + mins, :cadence => 75, :activity_type => 'running', :fractional_cadence => (mins % 2) / 2.0 }) if mins > 0 && mins % 5 == 0 a.new_lap({ :timestamp => ts }) end end a.new_session({ :timestamp => ts }) a.new_event({ :timestamp => ts, :event => 'recovery_time', :event_type => 'marker', :data => 2160 }) a.new_event({ :timestamp => ts, :event => 'vo2max', :event_type => 'marker', :data => 52 }) a.new_event({ :timestamp => ts, :event => 'timer', :event_type => 'stop_all' }) a.new_device_info({ :timestamp => ts, :device_index => 0 }) ts += 1 a.new_device_info({ :timestamp => ts, :device_index => 1, :battery_status => 'low' }) ts += 120 a.new_event({ :timestamp => ts, :event => 'recovery_hr', :event_type => 'marker', :data => 132 }) ``` Now you can have the accumulated data for laps and sessions computed. ``` a.aggregate ``` Save it to a file. ``` Fit4Ruby.write('TEST.FIT', a) ``` Or read an Activity from a file. ``` a = Fit4Ruby.read('TEST.FIT') ``` Then you can access the data in the file. ``` a.records.each do |r| puts "Latitude: #{r['position_lat']}" puts "Longitude: #{r['position_long']}" end ``` Please see lib/fit4ruby/GlobalFitMessages.rb for the data fields that are supported for the various FIT record types. License ------- See [COPYING](COPYING) file.