lib/tlapse/capture.rb in tlapse-0.2.1 vs lib/tlapse/capture.rb in tlapse-0.3.0
- old
+ new
@@ -1,7 +1,73 @@
+require "active_support/core_ext/numeric/time.rb"
+
module Tlapse
module Capture
- def capture_single
+ def self.capture_single(format: nil)
+ puts "The format key is not yet supported" if format
+
`gphoto2 --capture-image-and-download`
+ end
+
+ ##
+ # Calculate how many captures are needed given a duration of capture
+ # time and a desired interval between captures.
+ #
+ # @example
+ # captures_needed duration: 5.minutes, interval: 30.seconds # => 10
+ #
+ # Specify either `start_time` and `end_time` or `duration`. If both
+ # are given, `duration` is preferred.
+ #
+ # @param start_time: [Time] when to start capturing
+ # @param end_time: [Time] when to end capturing
+ # @param duration: [Duration] duration over which images are captured.
+ # If specifying, do not also specify `end_time
+ # @param interval: [Duration] time between each capture
+ # @return how many captures will be taken over the duration and interval
+ def self.captures_needed(start_time: Time.now, end_time: Time.now,
+ duration: nil, interval:)
+ unless duration
+ start_time = start_time.to_i
+ end_time = end_time.to_i
+ duration = end_time - start_time
+ end
+
+ duration / interval
+ end
+
+ ##
+ # Capture a series of timelapse images over the given duration
+ # and at the given interval.
+ #
+ # @return [String] a gphoto2 command with the desired arguments
+ def self.timelapse_command(from: Time.now, to:, interval:)
+ captures = self.captures_needed(
+ start_time: from,
+ end_time: to,
+ interval: interval
+ )
+ "gphoto2 --capture-image-and-download -I #{interval} -F #{captures}"
+ end
+
+ ##
+ # Capture a timelapse image once per interval while the sun is up.
+ #
+ # @param interval [Duration] how frequently to capture images
+ # @return [String] a gphoto2 command with the desired arguments
+ def self.timelapse_command_while_sun_is_up(interval: 5.minutes)
+ sunrise = SolarEvent.sunrise
+ sunset = SolarEvent.sunset
+ now = Time.now
+
+ # Use now as starting time if sunrise has passed
+ sunrise = now > sunrise ? now : sunrise
+
+ captures = self.captures_needed(
+ start_time: sunrise,
+ end_time: sunset,
+ interval: interval
+ )
+ "gphoto2 --capture-image-and-download -I #{interval} -F #{captures}"
end
end # Capture
end # Tlapse