class Zoney::Zone
Constants
- ZONE_DECODER_REGEX
Attributes
number_of_amplifiers[R]
port[R]
Public Class Methods
new(port: "/dev/ttyUSB0", number_of_amplifiers: 1)
click to toggle source
# File lib/zoney/zone.rb, line 20 def initialize(port: "/dev/ttyUSB0", number_of_amplifiers: 1) @port = port @number_of_amplifiers = number_of_amplifiers end
Public Instance Methods
all()
click to toggle source
# File lib/zoney/zone.rb, line 25 def all @zones ||= begin data_string = [] number_of_amplifiers.times do |amplifier_number| amp_number = amplifier_number + 1 carriage_returns = "\r" * amp_number data_string << "?#{amp_number}0#{carriage_returns}\n" end write_data(string: data_string.join) && sleep(1) decoded_response end end
change_bass_level(zone_number:, level:)
click to toggle source
# File lib/zoney/zone.rb, line 80 def change_bass_level(zone_number:, level:) update_attribute( zone_number: zone_number, attribute: "bs", value: level, ) end
change_source(zone_number:, source_number:)
click to toggle source
# File lib/zoney/zone.rb, line 64 def change_source(zone_number:, source_number:) update_attribute( zone_number: zone_number, attribute: "ch", value: source_number, ) end
change_treble_level(zone_number:, level:)
click to toggle source
# File lib/zoney/zone.rb, line 88 def change_treble_level(zone_number:, level:) update_attribute( zone_number: zone_number, attribute: "tr", value: level, ) end
change_volume_level(zone_number:, level:)
click to toggle source
# File lib/zoney/zone.rb, line 72 def change_volume_level(zone_number:, level:) update_attribute( zone_number: zone_number, attribute: "vo", value: level, ) end
find(zone_number:)
click to toggle source
# File lib/zoney/zone.rb, line 41 def find(zone_number:) data_string = "?#{zone_number}\r\n" write_data(string: data_string) && sleep(1) decoded_response[0] end
mute(zone_number:)
click to toggle source
# File lib/zoney/zone.rb, line 56 def mute(zone_number:) update_attribute(zone_number: zone_number, attribute: "mu", value: "01") end
power_off(zone_number:)
click to toggle source
# File lib/zoney/zone.rb, line 52 def power_off(zone_number:) update_attribute(zone_number: zone_number, attribute: "pr", value: "00") end
power_on(zone_number:)
click to toggle source
# File lib/zoney/zone.rb, line 48 def power_on(zone_number:) update_attribute(zone_number: zone_number, attribute: "pr", value: "01") end
unmute(zone_number:)
click to toggle source
# File lib/zoney/zone.rb, line 60 def unmute(zone_number:) update_attribute(zone_number: zone_number, attribute: "mu", value: "00") end
update_attribute(zone_number:, attribute:, value:)
click to toggle source
# File lib/zoney/zone.rb, line 96 def update_attribute(zone_number:, attribute:, value:) serial_port.write("<#{zone_number}#{attribute}#{padded_number(value)}\r") end
Private Instance Methods
decoded_response()
click to toggle source
# File lib/zoney/zone.rb, line 116 def decoded_response split_data = read_data.split("\n") zone_map = split_data.map { |datum| datum.match(ZONE_DECODER_REGEX) }.compact zone_map.map do |zone| { balance: zone[9], bass_level: zone[8], dt: zone[5], keypad: zone[11], mute: zone[4], pa: zone[2], power: zone[3], source: zone[10], treble_level: zone[7], volume_level: zone[6], zone_number: zone[1], } end end
padded_number(number)
click to toggle source
# File lib/zoney/zone.rb, line 138 def padded_number(number) stringified_number = number.to_s if stringified_number.length < 2 "0#{stringified_number}" else stringified_number end end
read_data()
click to toggle source
# File lib/zoney/zone.rb, line 108 def read_data serial_port.read(10_000) end
serial_port()
click to toggle source
# File lib/zoney/zone.rb, line 104 def serial_port @_serial_port ||= Serial.new(port) end
write_data(string:)
click to toggle source
# File lib/zoney/zone.rb, line 112 def write_data(string:) serial_port.write(string) end