class DenonAvr::Receiver::Zone
Attributes
input[R]
muted[R]
name[R]
power[R]
status[R]
volume[R]
Public Class Methods
new(receiver:, name: 'MainZone')
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 6 def initialize(receiver:, name: 'MainZone') @receiver = receiver @name = name get_status end
Public Instance Methods
get_status()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 101 def get_status res = send_command(path: urls.status_lite) status_items = res.parsed_response&.fetch('item', {}) @status = status_items.each{|k,v| status_items[k] = v['value']} @input = @receiver.source_list.invert[@status['InputFuncSelect']] || @status['InputFuncSelect'] @power = @status['Power'] @muted = @status['Mute'] == 'on' ? true : false @volume = parse_volume(res.parsed_response) end
input=(input)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 82 def input=(input) begin if set_input(input).success? @muted = true else false end rescue UnknownSourceError false end end
inspect()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 111 def inspect instance_variables_to_list = [:@name, :@volume, :@input, :@power, :@muted] instance_vars_string = instance_variables_to_list.map { |v| "#{v.to_s}=#{instance_variable_get(v).inspect}" }.join(', ') "\#<#{self.class}:#{self.object_id.to_s(16).rjust(2, '0')} #{instance_vars_string}>" end
mute()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 57 def mute send_command(path: urls.command_mute_on) end
mute=(new_mute_state)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 41 def mute=(new_mute_state) if new_mute_state === true if mute.success? @muted = true else nil end elsif new_mute_state === false if unmute.success? @muted = false else nil end end end
muted?()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 65 def muted? muted end
power=(power)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 12 def power=(power) power = :on if power === true power = :off if power === false power = power.downcase.to_sym return false unless [:on, :off].include?(power) case power when :on if power_on.success? @power = POWER_ON else false end when :off if power_off.success? @power = POWER_OFF else false end end end
power_off()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 37 def power_off send_command(path: urls.command_power_standby) end
power_on()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 33 def power_on send_command(path: urls.command_power_on) end
set_input(input)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 94 def set_input(input) if @receiver.source_list[input].nil? raise UnknownSourceError.new("#{input} is not in the receiver's source mapping") end send_command(path: "#{urls.command_sel_src}#{@receiver.source_list[input]}") end
set_volume(volume)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 78 def set_volume(volume) send_command(path: sprintf(urls.command_set_volume, (volume.to_f - 80.0))) end
unmute()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 61 def unmute send_command(path: urls.command_mute_off) end
volume=(new_volume)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 69 def volume=(new_volume) res = set_volume(new_volume) if res.success? @volume = parse_volume(res.parsed_response) else false end end
Private Instance Methods
app_command(host: @host, commands: [])
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 136 def app_command(host: @host, commands: []) @receiver.app_command(commands) end
parse_volume(xml_response)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 140 def parse_volume(xml_response) volume_display = xml_response.fetch('item', nil)&.fetch('VolumeDisplay', nil) volume_display = volume_display.fetch('value', nil) if volume_display.is_a? Hash master_volume = xml_response.fetch('item', nil)&.fetch('MasterVolume', nil) master_volume = master_volume.fetch('value', nil) if master_volume.is_a? Hash master_volume = master_volume.to_f if volume_display == 'Absolute' master_volume = 80.0 + master_volume end end
send_command(path:, body: nil, method: :get)
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 132 def send_command(path:, body: nil, method: :get) @receiver.send_command(path: path, body: body, method: method) end
urls()
click to toggle source
# File lib/denon_avr/receiver/zone.rb, line 121 def urls case name when 'MainZone' MAIN_URLS when 'Zone2' ZONE2_URLS when 'Zone3' ZONE3_URLS end end