Module: Sonos::Endpoint::Alarm

Included in:
Device::Speaker
Defined in:
lib/sonos/endpoint/alarm.rb

Constant Summary collapse

ALARM_CLOCK_ENDPOINT =
'/AlarmClock/Control'
ALARM_CLOCK_XMLNS =
'urn:schemas-upnp-org:service:AlarmClock:1'

Instance Method Summary collapse

Instance Method Details

#create_alarm(startLocalTime, duration, recurrence, enabled, roomUuid, playMode, volume, includeLinkedZones, programUri, programMetaData) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/sonos/endpoint/alarm.rb', line 33

def create_alarm(startLocalTime, duration, recurrence, enabled, roomUuid, playMode, volume, includeLinkedZones, programUri, )
  options = {:StartLocalTime => startLocalTime, :Duration => duration,
             :Recurrence => recurrence, :Enabled => enabled, :RoomUUID => roomUuid,
             :PlayMode => playMode, :Volume => volume, :IncludeLinkedZones => includeLinkedZones,
             :ProgramURI => programUri, :ProgramMetaData => }
  parse_response send_alarm_message('CreateAlarm', convert_hash_to_xml(options))
end

#destroy_alarm(id) ⇒ Object



41
42
43
# File 'lib/sonos/endpoint/alarm.rb', line 41

def destroy_alarm(id)
  parse_response send_alarm_message('DestroyAlarm', "<ID>#{id}</ID>")
end

#disable_alarm(id) ⇒ Object



63
64
65
66
67
# File 'lib/sonos/endpoint/alarm.rb', line 63

def disable_alarm(id)
  alarm_hash = list_alarms[id]
  alarm_hash[:Enabled] = '0'
  parse_response send_alarm_message('UpdateAlarm', convert_hash_to_xml(alarm_hash))
end

#enable_alarm(id) ⇒ Object



57
58
59
60
61
# File 'lib/sonos/endpoint/alarm.rb', line 57

def enable_alarm(id)
  alarm_hash = list_alarms[id]
  alarm_hash[:Enabled] = '1'
  parse_response send_alarm_message('UpdateAlarm', convert_hash_to_xml(alarm_hash))
end

#is_alarm_enabled?(id) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/sonos/endpoint/alarm.rb', line 53

def is_alarm_enabled?(id)
  list_alarms[id][:Enabled]
end

#list_alarmsObject

List the alarms that have been defined



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/sonos/endpoint/alarm.rb', line 6

def list_alarms
  hash_of_alarm_hashes = {}
  response = send_alarm_message('ListAlarms')
  alarm_list_reader = Nokogiri::XML::Reader(response.to_hash[:list_alarms_response][:current_alarm_list])
  alarm_list_reader.each do |alarm_node|
    id = alarm_node.attribute('ID')
    unless id.nil?
      alarm_hash = {
          :ID => id,
          # UpdateAlarm expects 'StartLocalTime', but the ListAlarm response attribute is 'StartTime'
          :StartLocalTime => alarm_node.attribute('StartTime'),
          :Duration => alarm_node.attribute('Duration'),
          :Recurrence => alarm_node.attribute('Recurrence'),
          :Enabled => alarm_node.attribute('Enabled'),
          :RoomUUID => alarm_node.attribute('RoomUUID'),
          :PlayMode => alarm_node.attribute('PlayMode'),
          :Volume => alarm_node.attribute('Volume'),
          :IncludeLinkedZones => alarm_node.attribute('IncludeLinkedZones'),
          :ProgramURI => alarm_node.attribute('ProgramURI'),
          :ProgramMetaData => alarm_node.attribute('ProgramMetaData')
      }
      hash_of_alarm_hashes[id] = alarm_hash
    end
  end
  hash_of_alarm_hashes
end

#set_alarm_volume(id, volume) ⇒ Object



69
70
71
72
73
# File 'lib/sonos/endpoint/alarm.rb', line 69

def set_alarm_volume(id, volume)
  alarm_hash = list_alarms[id]
  alarm_hash[:Volume] = volume
  parse_response send_alarm_message('UpdateAlarm', convert_hash_to_xml(alarm_hash))
end

#update_alarm(id, startLocalTime, duration, recurrence, enabled, roomUuid, playMode, volume, includeLinkedZones, programUri, programMetaData) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/sonos/endpoint/alarm.rb', line 45

def update_alarm(id, startLocalTime, duration, recurrence, enabled, roomUuid, playMode, volume, includeLinkedZones, programUri, )
  alarm_hash = {:ID => id, :StartLocalTime => startLocalTime, :Duration => duration,
                :Recurrence => recurrence, :Enabled => enabled, :RoomUUID => roomUuid,
                :PlayMode => playMode, :Volume => volume, :IncludeLinkedZones => includeLinkedZones,
                :ProgramURI => programUri, :ProgramMetaData => }
  parse_response send_alarm_message('UpdateAlarm', convert_hash_to_xml(alarm_hash))
end