class Domotics::Core::Dimmer

Constants

DEFAULT_LEVEL
MAX_LEVEL
MAX_STEPS
MIN_LEVEL
STEP_DELAY
STEP_SIZE

Public Class Methods

new(args = {}) click to toggle source
Calls superclass method Domotics::Core::Element::new
# File lib/domotics/core/element/dimmer.rb, line 11
def initialize(args = {})
  @type = args[:type] || :dimmer
  @fade_lock = Mutex.new
  @fade_thread = nil
  args[:driver] = "PWMPin"
  load_driver args
  super
end

Public Instance Methods

bright(value = nil) click to toggle source

Increase brightness level (value 0-100%)

# File lib/domotics/core/element/dimmer.rb, line 45
def bright(value = nil)
  if value
    set_state value * MAX_LEVEL / 100
  else
    set_state state + STEP_SIZE
  end
end
dim(value = nil) click to toggle source

Decrease brightness level (value 0-100%)

# File lib/domotics/core/element/dimmer.rb, line 37
def dim(value = nil)
  if value
    set_state value * MAX_LEVEL / 100
  else
    set_state state - STEP_SIZE
  end
end
fade_to(value = DEFAULT_LEVEL, speed_divisor = 1) click to toggle source
# File lib/domotics/core/element/dimmer.rb, line 57
def fade_to(value = DEFAULT_LEVEL, speed_divisor = 1)
  @fade_lock.synchronize do
    @fade_thread.kill if @fade_thread and @fade_thread.alive?
    @fade_thread = Thread.new do
      op = (value - state) >= 0 ? :+ : :-
      steps = ((value - state).abs / STEP_SIZE.to_f).round
      steps.times do
        set_state(state.public_send(op, STEP_SIZE), kill_fader: :no)
        sleep speed_divisor * STEP_DELAY
      end
      @fade_lock.synchronize { @fade_thread = nil }
    end
  end
  @fade_thread
end
off() click to toggle source
# File lib/domotics/core/element/dimmer.rb, line 53
def off
  set_state MIN_LEVEL unless state == MIN_LEVEL
end
set_state(value = DEFAULT_LEVEL, opt = {}) click to toggle source
Calls superclass method Domotics::Core::Element#set_state
# File lib/domotics/core/element/dimmer.rb, line 24
def set_state(value = DEFAULT_LEVEL, opt = {})
  unless opt[:kill_fader] == :no
    @fade_lock.synchronize do
      @fade_thread.kill if @fade_thread and @fade_thread.alive?
    end
  end
  if value.is_a? Integer
    value = MIN_LEVEL if value < MIN_LEVEL
    value = MAX_LEVEL if value > MAX_LEVEL
  end
  super value
end
state() click to toggle source
Calls superclass method Domotics::Core::Element#state
# File lib/domotics/core/element/dimmer.rb, line 20
def state
  st = super
  st.is_a?(Integer) ? st : 0
end