ruby_home 0.2.0 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +41 -0
  3. data/CHANGELOG.md +13 -0
  4. data/README.md +47 -84
  5. data/examples/air_purifier.rb +67 -0
  6. data/examples/air_quality_sensor.rb +120 -0
  7. data/examples/battery_service.rb +59 -0
  8. data/examples/carbon_dioxide_sensor.rb +79 -0
  9. data/examples/carbon_monoxide_sensor.rb +79 -0
  10. data/examples/contact_sensor.rb +67 -0
  11. data/examples/door.rb +49 -0
  12. data/examples/fan.rb +31 -0
  13. data/examples/fan_v2.rb +69 -0
  14. data/examples/garage_door_opener.rb +72 -0
  15. data/examples/heater_cooler.rb +93 -0
  16. data/examples/humidifier_dehumidifier.rb +89 -0
  17. data/examples/humidity_sensor.rb +63 -0
  18. data/examples/leak_sensor.rb +67 -0
  19. data/examples/light_sensor.rb +65 -0
  20. data/examples/lightbulb.rb +32 -0
  21. data/examples/lock_mechanism.rb +35 -0
  22. data/examples/motion_sensor.rb +67 -0
  23. data/examples/occupancy_sensor.rb +67 -0
  24. data/examples/outlet.rb +30 -0
  25. data/examples/security_system.rb +54 -0
  26. data/examples/smoke_sensor.rb +67 -0
  27. data/examples/switch.rb +17 -0
  28. data/examples/television.rb +78 -0
  29. data/examples/temperature_sensor.rb +63 -0
  30. data/examples/thermostat.rb +114 -0
  31. data/examples/window.rb +49 -0
  32. data/examples/window_covering.rb +73 -0
  33. data/lib/ruby_home.rb +0 -1
  34. data/lib/ruby_home/characteristic.rb +7 -1
  35. data/lib/ruby_home/config/categories.yml +39 -0
  36. data/lib/ruby_home/config/characteristics.yml +479 -3
  37. data/lib/ruby_home/config/services.yml +79 -4
  38. data/lib/ruby_home/configuration.rb +19 -0
  39. data/lib/ruby_home/dns/service.rb +2 -0
  40. data/lib/ruby_home/dns/text_record.rb +1 -1
  41. data/lib/ruby_home/errors.rb +4 -0
  42. data/lib/ruby_home/factories/characteristic_factory.rb +1 -0
  43. data/lib/ruby_home/factories/templates/characteristic_template.rb +1 -1
  44. data/lib/ruby_home/factories/templates/service_template.rb +1 -1
  45. data/lib/ruby_home/hap/server_handler.rb +4 -13
  46. data/lib/ruby_home/hap/values/uint8_value.rb +11 -1
  47. data/lib/ruby_home/http/controllers/application_controller.rb +10 -3
  48. data/lib/ruby_home/http/controllers/pair_setups_controller.rb +3 -3
  49. data/lib/ruby_home/http/controllers/pair_verifies_controller.rb +10 -12
  50. data/lib/ruby_home/http/controllers/pairings_controller.rb +1 -1
  51. data/lib/ruby_home/http/serializers/characteristic_serializer.rb +13 -5
  52. data/lib/ruby_home/http/serializers/service_serializer.rb +11 -1
  53. data/lib/ruby_home/http/services/verify_finish_service.rb +56 -0
  54. data/lib/ruby_home/http/services/verify_srp_service.rb +32 -41
  55. data/lib/ruby_home/persistable.rb +4 -12
  56. data/lib/ruby_home/service.rb +3 -0
  57. data/lib/ruby_home/version.rb +1 -1
  58. data/rubyhome.gemspec +7 -7
  59. data/sbin/service_generator.rb +12 -2
  60. metadata +65 -39
  61. data/.travis.yml +0 -31
@@ -0,0 +1,114 @@
1
+ require 'ruby_home'
2
+
3
+ accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
4
+ thermostat = RubyHome::ServiceFactory.create(:thermostat,
5
+ temperature_display_units: 0, # required
6
+ target_temperature: 18, # required
7
+ current_temperature: 18, # required
8
+ target_heating_cooling_state: 0, # required
9
+ current_heating_cooling_state: 0, # required
10
+ name: "thermostat", # optional
11
+ heating_threshold_temperature: 20, # optional
12
+ cooling_threshold_temperature: 10, # optional
13
+ target_relative_humidity: 0, # optional
14
+ current_relative_humidity: 0, # optional
15
+ )
16
+
17
+ thermostat.temperature_display_units.after_update do |temperature_display_unit|
18
+ if temperature_display_unit == 0
19
+ puts "thermostat temperature display units Celsius"
20
+ elsif temperature_display_unit == 1
21
+ puts "thermostat temperature display units Fahrenheit"
22
+ end
23
+ end
24
+
25
+ thermostat.target_temperature.after_update do |target_temperature|
26
+ puts "thermostat target_temperature #{target_temperature}"
27
+
28
+ if target_temperature.to_i > thermostat.current_temperature.to_i
29
+ thermostat.target_heating_cooling_state = 1
30
+ elsif target_temperature < thermostat.current_temperature
31
+ thermostat.target_heating_cooling_state = 2
32
+ elsif target_temperature.to_i == thermostat.current_temperature.to_i
33
+ thermostat.target_heating_cooling_state = 0
34
+ end
35
+ end
36
+
37
+ thermostat.current_temperature.after_update do |current_temperature|
38
+ puts "thermostat current_temperature #{current_temperature}"
39
+
40
+ if current_temperature.to_i < thermostat.target_temperature.to_i
41
+ thermostat.target_heating_cooling_state = 1
42
+ elsif current_temperature.to_i > thermostat.target_temperature.to_i
43
+ thermostat.target_heating_cooling_state = 2
44
+ elsif current_temperature.to_i == thermostat.target_temperature.to_i
45
+ thermostat.target_heating_cooling_state = 0
46
+ end
47
+ end
48
+
49
+ target_heating_cooling_state_values = {
50
+ 0 => 'Off',
51
+ 1 => 'Heat',
52
+ 2 => 'Cool',
53
+ 3 => 'Auto',
54
+ }
55
+ thermostat.target_heating_cooling_state.after_update do |target_heating_cooling_state|
56
+ state = target_heating_cooling_state_values[target_heating_cooling_state]
57
+ puts "heater cooler target heating cooler state is #{state}"
58
+
59
+ return if thermostat.current_heating_cooling_state == target_heating_cooling_state
60
+
61
+ if target_heating_cooling_state == 1
62
+ thermostat.current_heating_cooling_state = 1
63
+ elsif target_heating_cooling_state == 2
64
+ thermostat.current_heating_cooling_state = 2
65
+ elsif target_heating_cooling_state == 0
66
+ thermostat.current_heating_cooling_state = 0
67
+ end
68
+ end
69
+
70
+ current_heating_cooling_state_values = {
71
+ 0 => 'Off',
72
+ 1 => 'Heat',
73
+ 2 => 'Cool',
74
+ }
75
+ thermostat.current_heating_cooling_state.after_update do |current_heating_cooling_state|
76
+ state = current_heating_cooling_state_values[current_heating_cooling_state]
77
+ puts "heater cooler current heating cooler state is #{state}"
78
+ end
79
+
80
+ thermostat.heating_threshold_temperature.after_update do |heating_threshold_temperature|
81
+ # maximum_value: 25
82
+ # minimum_value: 0
83
+ # step_value: 0.1
84
+ puts "heater cooler heating threshold temperature #{heating_threshold_temperature}"
85
+ end
86
+
87
+ thermostat.cooling_threshold_temperature.after_update do |cooling_threshold_temperature|
88
+ # maximum_value: 35
89
+ # minimum_value: 10
90
+ # step_value: 0.1
91
+ puts "heater cooler cooling threshold temperature temperature #{cooling_threshold_temperature}"
92
+ end
93
+
94
+ thermostat.target_relative_humidity.after_update do |target_relative_humidity|
95
+ puts "thermostat target_relative_humidity #{target_relative_humidity}"
96
+ end
97
+
98
+ thermostat.current_relative_humidity.after_update do |current_relative_humidity|
99
+ puts "thermostat current_relative_humidity #{current_relative_humidity}"
100
+ end
101
+
102
+ Thread.new do
103
+ loop do
104
+ sleep 5
105
+
106
+ if thermostat.target_temperature.to_i > thermostat.current_temperature.to_i
107
+ thermostat.current_temperature += 1
108
+ elsif thermostat.target_temperature.to_i < thermostat.current_temperature.to_i
109
+ thermostat.current_temperature -= 1
110
+ end
111
+ end
112
+ end
113
+
114
+ RubyHome.run
@@ -0,0 +1,49 @@
1
+ require 'ruby_home'
2
+
3
+ accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
4
+ window = RubyHome::ServiceFactory.create(:window,
5
+ target_position: 0, # required
6
+ position_state: 1, # required
7
+ current_position: 0, # required
8
+ name: "window", # optional
9
+ obstruction_detected: false, # optional
10
+ )
11
+
12
+ window.target_position.after_update do |target_position|
13
+ puts "window target position #{target_position}"
14
+
15
+ if target_position < window.current_position
16
+ window.position_state = 0
17
+ elsif target_position > window.current_position
18
+ window.position_state = 1
19
+ end
20
+
21
+ sleep 1
22
+
23
+ window.current_position = target_position
24
+ window.position_state = 2
25
+ end
26
+
27
+ position_state_values = {
28
+ 0 => 'Decreasing',
29
+ 1 => 'Increasing',
30
+ 2 => 'Stopped'
31
+ }
32
+ window.position_state.after_update do |position_state|
33
+ state = position_state_values[position_state]
34
+ puts "window position state #{state}"
35
+ end
36
+
37
+ window.current_position.after_update do |current_position|
38
+ puts "window current position #{current_position}"
39
+ end
40
+
41
+ window.obstruction_detected.after_update do |obstruction_detected|
42
+ if obstruction_detected
43
+ puts "window obstruction detected"
44
+ else
45
+ puts "window no obstruction detected"
46
+ end
47
+ end
48
+
49
+ RubyHome.run
@@ -0,0 +1,73 @@
1
+ require 'ruby_home'
2
+
3
+ accessory_information = RubyHome::ServiceFactory.create(:accessory_information)
4
+ window_covering = RubyHome::ServiceFactory.create(:window_covering,
5
+ target_position: 0, # required
6
+ position_state: 1, # required
7
+ current_position: 0, # required
8
+ name: "window_covering", # optional
9
+ obstruction_detected: false, # optional
10
+ current_vertical_tilt_angle: 0, # optional
11
+ target_vertical_tilt_angle: 0, # optional
12
+ current_horizontal_tilt_angle: 0, # optional
13
+ target_horizontal_tilt_angle: 0 # optional
14
+ )
15
+
16
+ window_covering.target_position.after_update do |target_position|
17
+ puts "window covering target position #{target_position}"
18
+
19
+ if target_position < window_covering.current_position
20
+ window_covering.position_state = 0
21
+ elsif target_position > window_covering.current_position
22
+ window_covering.position_state = 1
23
+ end
24
+
25
+ sleep 1
26
+
27
+ window_covering.current_position = target_position
28
+ window_covering.position_state = 2
29
+ end
30
+
31
+ position_state_values = {
32
+ 0 => 'Decreasing',
33
+ 1 => 'Increasing',
34
+ 2 => 'Stopped'
35
+ }
36
+ window_covering.position_state.after_update do |position_state|
37
+ state = position_state_values[position_state]
38
+ puts "window covering position state #{state}"
39
+ end
40
+
41
+ window_covering.current_position.after_update do |current_position|
42
+ puts "window covering current position #{current_position}"
43
+ end
44
+
45
+ window_covering.obstruction_detected.after_update do |obstruction_detected|
46
+ if obstruction_detected
47
+ puts "window covering obstruction detected"
48
+ else
49
+ puts "window covering no obstruction detected"
50
+ end
51
+ end
52
+
53
+ window_covering.current_vertical_tilt_angle.after_update do |current_vertical_tilt_angle|
54
+ puts "window covering current_vertical_tilt_angle #{current_vertical_tilt_angle}"
55
+ end
56
+
57
+ window_covering.target_vertical_tilt_angle.after_update do |target_vertical_tilt_angle|
58
+ puts "window covering target_vertical_tilt_angle #{target_vertical_tilt_angle}"
59
+ sleep 1
60
+ window_covering.current_vertical_tilt_angle = target_vertical_tilt_angle
61
+ end
62
+
63
+ window_covering.current_horizontal_tilt_angle.after_update do |current_horizontal_tilt_angle|
64
+ puts "window covering current_horizontal_tilt_angle #{current_horizontal_tilt_angle}"
65
+ end
66
+
67
+ window_covering.target_horizontal_tilt_angle.after_update do |target_horizontal_tilt_angle|
68
+ puts "window covering target_horizontal_tilt_angle #{target_horizontal_tilt_angle}"
69
+ sleep 1
70
+ window_covering.current_horizontal_tilt_angle = target_horizontal_tilt_angle
71
+ end
72
+
73
+ RubyHome.run
@@ -1,4 +1,3 @@
1
- require 'bindata'
2
1
  require 'dnssd'
3
2
  require 'facets/hash/slice'
4
3
  require 'hkdf'
@@ -25,13 +25,14 @@ module RubyHome
25
25
  'write' => 'pw',
26
26
  }.freeze
27
27
 
28
- def initialize(uuid:, name:, description:, format:, unit:, properties:, service: , value_object: )
28
+ def initialize(uuid:, name:, description:, format:, unit:, properties:, constraints:, service: , value_object: )
29
29
  @uuid = uuid
30
30
  @name = name
31
31
  @description = description
32
32
  @format = format
33
33
  @unit = unit
34
34
  @properties = properties
35
+ @constraints = constraints
35
36
  @service = service
36
37
  @value_object = value_object
37
38
  end
@@ -44,6 +45,7 @@ module RubyHome
44
45
  :format,
45
46
  :unit,
46
47
  :properties,
48
+ :constraints,
47
49
  :instance_id,
48
50
  :value_object,
49
51
  )
@@ -66,6 +68,10 @@ module RubyHome
66
68
  service.instance_id
67
69
  end
68
70
 
71
+ def valid_values
72
+ constraints.fetch('ValidValues', {}).keys.map(&:to_i)
73
+ end
74
+
69
75
  def method_missing(method_name, *args, &block)
70
76
  value.send(method_name, *args, &block)
71
77
  end
@@ -0,0 +1,39 @@
1
+ ---
2
+ :other: 1
3
+ :bridge: 2
4
+ :fan: 3
5
+ :garage_door_opener: 4
6
+ :lightbulb: 5
7
+ :door_lock: 6
8
+ :outlet: 7
9
+ :switch: 8
10
+ :thermostat: 9
11
+ :sensor: 10
12
+ :alarm_system: 11
13
+ :security_system: 11
14
+ :door: 12
15
+ :window: 13
16
+ :window_covering: 14
17
+ :programmable_switch: 15
18
+ :range_extender: 16
19
+ :camera: 17
20
+ :ip_camera: 17
21
+ :video_doorbell: 18
22
+ :air_purifier: 19
23
+ :air_heater: 20
24
+ :air_conditioner: 21
25
+ :air_humidifier: 22
26
+ :air_dehumidifier: 23
27
+ :apple_tv: 24
28
+ :homepod: 25
29
+ :speaker: 26
30
+ :airport: 27
31
+ :sprinkler: 28
32
+ :faucet: 29
33
+ :shower_head: 30
34
+ :television: 31
35
+ :target_controller: 32
36
+ :router: 33
37
+ :audio_receiver: 34
38
+ :tv_set_top_box: 35
39
+ :tv_streaming_stick: 36
@@ -25,10 +25,23 @@
25
25
  - read
26
26
  - write
27
27
  - cnotify
28
+ - uncnotify
28
29
  :constraints:
29
30
  ValidValues:
30
31
  '0': Inactive
31
32
  '1': Active
33
+ - :name: :active_identifier
34
+ :description: Active Identifier
35
+ :uuid: 000000E7-0000-1000-8000-0026BB765291
36
+ :format: uint32
37
+ :unit: nil
38
+ :permissions:
39
+ - securedRead
40
+ :properties:
41
+ - read
42
+ - write
43
+ - cnotify
44
+ :constraints:
32
45
  - :name: :administrator_only_access
33
46
  :description: Administrator Only Access
34
47
  :uuid: 00000001-0000-1000-8000-0026BB765291
@@ -41,6 +54,7 @@
41
54
  - read
42
55
  - write
43
56
  - cnotify
57
+ - uncnotify
44
58
  :constraints:
45
59
  - :name: :air_particulate_density
46
60
  :description: Air Particulate Density
@@ -52,6 +66,7 @@
52
66
  :properties:
53
67
  - read
54
68
  - cnotify
69
+ - uncnotify
55
70
  :constraints:
56
71
  MaximumValue: 1000
57
72
  MinimumValue: 0
@@ -66,6 +81,7 @@
66
81
  :properties:
67
82
  - read
68
83
  - cnotify
84
+ - uncnotify
69
85
  :constraints:
70
86
  ValidValues:
71
87
  '0': 2.5 μm
@@ -101,6 +117,7 @@
101
117
  - read
102
118
  - write
103
119
  - cnotify
120
+ - uncnotify
104
121
  :constraints:
105
122
  - :name: :battery_level
106
123
  :description: Battery Level
@@ -112,6 +129,7 @@
112
129
  :properties:
113
130
  - read
114
131
  - cnotify
132
+ - uncnotify
115
133
  :constraints:
116
134
  MaximumValue: 100
117
135
  MinimumValue: 0
@@ -128,6 +146,7 @@
128
146
  - read
129
147
  - write
130
148
  - cnotify
149
+ - uncnotify
131
150
  :constraints:
132
151
  MaximumValue: 100
133
152
  MinimumValue: 0
@@ -157,6 +176,7 @@
157
176
  :properties:
158
177
  - read
159
178
  - cnotify
179
+ - uncnotify
160
180
  :constraints:
161
181
  MaximumValue: 100000
162
182
  MinimumValue: 0
@@ -170,6 +190,7 @@
170
190
  :properties:
171
191
  - read
172
192
  - cnotify
193
+ - uncnotify
173
194
  :constraints:
174
195
  MaximumValue: 100000
175
196
  MinimumValue: 0
@@ -198,6 +219,7 @@
198
219
  :properties:
199
220
  - read
200
221
  - cnotify
222
+ - uncnotify
201
223
  :constraints:
202
224
  MaximumValue: 100
203
225
  MinimumValue: 0
@@ -211,6 +233,7 @@
211
233
  :properties:
212
234
  - read
213
235
  - cnotify
236
+ - uncnotify
214
237
  :constraints:
215
238
  MaximumValue: 100
216
239
  MinimumValue: 0
@@ -224,11 +247,29 @@
224
247
  :properties:
225
248
  - read
226
249
  - cnotify
250
+ - uncnotify
227
251
  :constraints:
228
252
  ValidValues:
229
253
  '0': Not Charging
230
254
  '1': Charging
231
255
  '2': Not Chargeable
256
+ - :name: :closed_captions
257
+ :description: Closed Captions
258
+ :uuid: 000000DD-0000-1000-8000-0026BB765291
259
+ :format: uint8
260
+ :unit: nil
261
+ :permissions:
262
+ - securedRead
263
+ :properties:
264
+ - read
265
+ - write
266
+ - cnotify
267
+ :constraints:
268
+ MaximumValue: 1
269
+ MinimumValue: 0
270
+ ValidValues:
271
+ '0': Disabled
272
+ '1': Enabled
232
273
  - :name: :color_temperature
233
274
  :description: Color Temperature
234
275
  :uuid: 000000CE-0000-1000-8000-0026BB765291
@@ -241,10 +282,23 @@
241
282
  - read
242
283
  - write
243
284
  - cnotify
285
+ - uncnotify
244
286
  :constraints:
245
287
  MaximumValue: 500
246
288
  MinimumValue: 140
247
289
  StepValue: 1
290
+ - :name: :configured_name
291
+ :description: Configured Name
292
+ :uuid: 000000E3-0000-1000-8000-0026BB765291
293
+ :format: string
294
+ :unit: nil
295
+ :permissions:
296
+ - securedRead
297
+ :properties:
298
+ - read
299
+ - write
300
+ - cnotify
301
+ :constraints:
248
302
  - :name: :contact_sensor_state
249
303
  :description: Contact Sensor State
250
304
  :uuid: 0000006A-0000-1000-8000-0026BB765291
@@ -272,6 +326,7 @@
272
326
  - read
273
327
  - write
274
328
  - cnotify
329
+ - uncnotify
275
330
  :constraints:
276
331
  MaximumValue: 35
277
332
  MinimumValue: 10
@@ -286,6 +341,7 @@
286
341
  :properties:
287
342
  - read
288
343
  - cnotify
344
+ - uncnotify
289
345
  :constraints:
290
346
  ValidValues:
291
347
  '0': Inactive
@@ -301,6 +357,7 @@
301
357
  :properties:
302
358
  - read
303
359
  - cnotify
360
+ - uncnotify
304
361
  :constraints:
305
362
  MaximumValue: 100000
306
363
  MinimumValue: 0.0001
@@ -332,6 +389,7 @@
332
389
  :properties:
333
390
  - read
334
391
  - cnotify
392
+ - uncnotify
335
393
  :constraints:
336
394
  ValidValues:
337
395
  '0': Inactive
@@ -347,6 +405,7 @@
347
405
  :properties:
348
406
  - read
349
407
  - cnotify
408
+ - uncnotify
350
409
  :constraints:
351
410
  ValidValues:
352
411
  '0': Inactive
@@ -379,6 +438,7 @@
379
438
  :properties:
380
439
  - read
381
440
  - cnotify
441
+ - uncnotify
382
442
  :constraints:
383
443
  MaximumValue: 90
384
444
  MinimumValue: -90
@@ -393,12 +453,33 @@
393
453
  :properties:
394
454
  - read
395
455
  - cnotify
456
+ - uncnotify
396
457
  :constraints:
397
458
  ValidValues:
398
459
  '0': Inactive
399
460
  '1': Idle
400
461
  '2': Humidifying
401
462
  '3': Dehumidifying
463
+ - :name: :current_media_state
464
+ :description: Current Media State
465
+ :uuid: 000000E0-0000-1000-8000-0026BB765291
466
+ :format: uint8
467
+ :unit: nil
468
+ :permissions:
469
+ - securedRead
470
+ :properties:
471
+ - read
472
+ - cnotify
473
+ :constraints:
474
+ MaximumValue: 5
475
+ MinimumValue: 0
476
+ ValidValues:
477
+ '0': Play
478
+ '1': Pause
479
+ '2': Stop
480
+ '3':
481
+ '4': Loading
482
+ '5': Interrupted
402
483
  - :name: :current_position
403
484
  :description: Current Position
404
485
  :uuid: 0000006D-0000-1000-8000-0026BB765291
@@ -409,6 +490,7 @@
409
490
  :properties:
410
491
  - read
411
492
  - cnotify
493
+ - uncnotify
412
494
  :constraints:
413
495
  MaximumValue: 100
414
496
  MinimumValue: 0
@@ -423,6 +505,7 @@
423
505
  :properties:
424
506
  - read
425
507
  - cnotify
508
+ - uncnotify
426
509
  :constraints:
427
510
  MaximumValue: 100
428
511
  MinimumValue: 0
@@ -437,6 +520,7 @@
437
520
  :properties:
438
521
  - read
439
522
  - cnotify
523
+ - uncnotify
440
524
  :constraints:
441
525
  ValidValues:
442
526
  '0': Fixed
@@ -452,6 +536,7 @@
452
536
  :properties:
453
537
  - read
454
538
  - cnotify
539
+ - uncnotify
455
540
  :constraints:
456
541
  MaximumValue: 100
457
542
  MinimumValue: 0
@@ -466,6 +551,7 @@
466
551
  :properties:
467
552
  - read
468
553
  - cnotify
554
+ - uncnotify
469
555
  :constraints:
470
556
  MaximumValue: 90
471
557
  MinimumValue: -90
@@ -480,10 +566,29 @@
480
566
  :properties:
481
567
  - read
482
568
  - cnotify
569
+ - uncnotify
483
570
  :constraints:
484
571
  MaximumValue: 90
485
572
  MinimumValue: -90
486
573
  StepValue: 1
574
+ - :name: :current_visibility_state
575
+ :description: Current Visibility State
576
+ :uuid: 00000135-0000-1000-8000-0026BB765291
577
+ :format: uint8
578
+ :unit: nil
579
+ :permissions:
580
+ - securedRead
581
+ :properties:
582
+ - read
583
+ - cnotify
584
+ :constraints:
585
+ MaximumValue: 3
586
+ MinimumValue: 0
587
+ ValidValues:
588
+ '0': Shown
589
+ '1': Hidden
590
+ '2':
591
+ '3':
487
592
  - :name: :digital_zoom
488
593
  :description: Digital Zoom
489
594
  :uuid: 0000011D-0000-1000-8000-0026BB765291
@@ -496,7 +601,20 @@
496
601
  - read
497
602
  - write
498
603
  - cnotify
604
+ - uncnotify
499
605
  :constraints:
606
+ - :name: :display_order
607
+ :description: Display Order
608
+ :uuid: 00000136-0000-1000-8000-0026BB765291
609
+ :format: tlv8
610
+ :unit: nil
611
+ :permissions:
612
+ - securedRead
613
+ :properties:
614
+ - read
615
+ - write
616
+ - cnotify
617
+ :constraints:
500
618
  - :name: :filter_change_indication
501
619
  :description: Filter Change Indication
502
620
  :uuid: 000000AC-0000-1000-8000-0026BB765291
@@ -507,6 +625,7 @@
507
625
  :properties:
508
626
  - read
509
627
  - cnotify
628
+ - uncnotify
510
629
  :constraints:
511
630
  ValidValues:
512
631
  '0': Filter OK
@@ -521,6 +640,7 @@
521
640
  :properties:
522
641
  - read
523
642
  - cnotify
643
+ - uncnotify
524
644
  :constraints:
525
645
  MaximumValue: 100
526
646
  MinimumValue: 0
@@ -557,6 +677,7 @@
557
677
  - read
558
678
  - write
559
679
  - cnotify
680
+ - uncnotify
560
681
  :constraints:
561
682
  MaximumValue: 25
562
683
  MinimumValue: 0
@@ -583,10 +704,23 @@
583
704
  - read
584
705
  - write
585
706
  - cnotify
707
+ - uncnotify
586
708
  :constraints:
587
709
  MaximumValue: 360
588
710
  MinimumValue: 0
589
711
  StepValue: 1
712
+ - :name: :identifier
713
+ :description: Identifier
714
+ :uuid: 000000E6-0000-1000-8000-0026BB765291
715
+ :format: uint32
716
+ :unit: nil
717
+ :permissions:
718
+ - securedRead
719
+ :properties:
720
+ - read
721
+ :constraints:
722
+ MinimumValue: 0
723
+ StepValue: 1
590
724
  - :name: :identify
591
725
  :description: Identify
592
726
  :uuid: 00000014-0000-1000-8000-0026BB765291
@@ -609,6 +743,7 @@
609
743
  - read
610
744
  - write
611
745
  - cnotify
746
+ - uncnotify
612
747
  :constraints:
613
748
  - :name: :image_rotation
614
749
  :description: Image Rotation
@@ -622,10 +757,89 @@
622
757
  - read
623
758
  - write
624
759
  - cnotify
760
+ - uncnotify
625
761
  :constraints:
626
762
  MaximumValue: 270
627
763
  MinimumValue: 0
628
764
  StepValue: 90
765
+ - :name: :in_use
766
+ :description: In Use
767
+ :uuid: 000000D2-0000-1000-8000-0026BB765291
768
+ :format: uint8
769
+ :unit: nil
770
+ :permissions:
771
+ - securedRead
772
+ :properties:
773
+ - read
774
+ - cnotify
775
+ - uncnotify
776
+ :constraints:
777
+ ValidValues:
778
+ '0': Not in use
779
+ '1': In use
780
+ - :name: :input_device_type
781
+ :description: Input Device Type
782
+ :uuid: 000000DC-0000-1000-8000-0026BB765291
783
+ :format: uint8
784
+ :unit: nil
785
+ :permissions:
786
+ - securedRead
787
+ :properties:
788
+ - read
789
+ - cnotify
790
+ :constraints:
791
+ MaximumValue: 6
792
+ MinimumValue: 0
793
+ ValidValues:
794
+ '0': Other
795
+ '1': Television
796
+ '2': Recording
797
+ '3': Tuner
798
+ '4': Playback
799
+ '5': Audio System
800
+ '6':
801
+ - :name: :input_source_type
802
+ :description: Input Source Type
803
+ :uuid: 000000DB-0000-1000-8000-0026BB765291
804
+ :format: uint8
805
+ :unit: nil
806
+ :permissions:
807
+ - securedRead
808
+ :properties:
809
+ - read
810
+ - cnotify
811
+ :constraints:
812
+ MaximumValue: 10
813
+ MinimumValue: 0
814
+ ValidValues:
815
+ '0': Other
816
+ '1': Home Screen
817
+ '2': Tuner
818
+ '3': HDMI
819
+ '4': Composite Video
820
+ '5': S Video
821
+ '6': Component Video
822
+ '7': DVI
823
+ '8': Airplay
824
+ '9': USB
825
+ '10': Application
826
+ - :name: :is_configured
827
+ :description: Is Configured
828
+ :uuid: 000000D6-0000-1000-8000-0026BB765291
829
+ :format: uint8
830
+ :unit: nil
831
+ :permissions:
832
+ - securedRead
833
+ - securedWrite
834
+ :properties:
835
+ - read
836
+ - write
837
+ - cnotify
838
+ - uncnotify
839
+ :constraints:
840
+ ValidValues:
841
+ '0': Not Configured
842
+ '1': Configured
629
843
  - :name: :leak_detected
630
844
  :description: Leak Detected
631
845
  :uuid: 00000070-0000-1000-8000-0026BB765291
@@ -678,6 +892,7 @@
678
892
  :properties:
679
893
  - read
680
894
  - cnotify
895
+ - uncnotify
681
896
  :constraints:
682
897
  ValidValues:
683
898
  '0': Secured Physically, Interior
@@ -701,6 +916,7 @@
701
916
  - read
702
917
  - write
703
918
  - cnotify
919
+ - uncnotify
704
920
  :constraints:
705
921
  - :name: :lock_physical_controls
706
922
  :description: Lock Physical Controls
@@ -714,6 +930,7 @@
714
930
  - read
715
931
  - write
716
932
  - cnotify
933
+ - uncnotify
717
934
  :constraints:
718
935
  ValidValues:
719
936
  '0': Control Lock Disabled
@@ -745,6 +962,7 @@
745
962
  :properties:
746
963
  - read
747
964
  - cnotify
965
+ - uncnotify
748
966
  :constraints:
749
967
  - :name: :manufacturer
750
968
  :description: Manufacturer
@@ -790,6 +1008,7 @@
790
1008
  - read
791
1009
  - write
792
1010
  - cnotify
1011
+ - uncnotify
793
1012
  :constraints:
794
1013
  - :name: :name
795
1014
  :description: Name
@@ -813,6 +1032,7 @@
813
1032
  - read
814
1033
  - write
815
1034
  - cnotify
1035
+ - uncnotify
816
1036
  :constraints:
817
1037
  - :name: :nitrogen_dioxide_density
818
1038
  :description: Nitrogen Dioxide Density
@@ -868,6 +1088,7 @@
868
1088
  - read
869
1089
  - write
870
1090
  - cnotify
1091
+ - uncnotify
871
1092
  :constraints:
872
1093
  - :name: :optical_zoom
873
1094
  :description: Optical Zoom
@@ -881,6 +1102,7 @@
881
1102
  - read
882
1103
  - write
883
1104
  - cnotify
1105
+ - uncnotify
884
1106
  :constraints:
885
1107
  - :name: :outlet_in_use
886
1108
  :description: Outlet In Use
@@ -892,6 +1114,7 @@
892
1114
  :properties:
893
1115
  - read
894
1116
  - cnotify
1117
+ - uncnotify
895
1118
  :constraints:
896
1119
  - :name: :ozone_density
897
1120
  :description: Ozone Density
@@ -954,6 +1177,35 @@
954
1177
  - read
955
1178
  - write
956
1179
  :constraints:
1180
+ - :name: :picture_mode
1181
+ :description: Picture Mode
1182
+ :uuid: 000000E2-0000-1000-8000-0026BB765291
1183
+ :format: uint8
1184
+ :unit: nil
1185
+ :permissions:
1186
+ - securedRead
1187
+ :properties:
1188
+ - read
1189
+ - write
1190
+ - cnotify
1191
+ :constraints:
1192
+ MaximumValue: 13
1193
+ MinimumValue: 0
1194
+ ValidValues:
1195
+ '0': Other
1196
+ '1': Standard
1197
+ '2': Calibrated
1198
+ '3': Calibrated Dark
1199
+ '4': Vivid
1200
+ '5': Game
1201
+ '6': Computer
1202
+ '7': Custom
1203
+ '8':
1204
+ '9':
1205
+ '10':
1206
+ '11':
1207
+ '12':
1208
+ '13':
957
1209
  - :name: :pm10_density
958
1210
  :description: PM10 Density
959
1211
  :uuid: 000000C7-0000-1000-8000-0026BB765291
@@ -994,11 +1246,43 @@
994
1246
  :properties:
995
1247
  - read
996
1248
  - cnotify
1249
+ - uncnotify
997
1250
  :constraints:
998
1251
  ValidValues:
999
1252
  '0': Decreasing
1000
1253
  '1': Increasing
1001
1254
  '2': Stopped
1255
+ - :name: :power_mode_selection
1256
+ :description: Power Mode Selection
1257
+ :uuid: 000000DF-0000-1000-8000-0026BB765291
1258
+ :format: uint8
1259
+ :unit: nil
1260
+ :permissions:
1261
+ - securedRead
1262
+ :properties:
1263
+ - write
1264
+ :constraints:
1265
+ MaximumValue: 1
1266
+ MinimumValue: 0
1267
+ ValidValues:
1268
+ '0': Show
1269
+ '1': Hide
1270
+ - :name: :program_mode
1271
+ :description: Program Mode
1272
+ :uuid: 000000D1-0000-1000-8000-0026BB765291
1273
+ :format: uint8
1274
+ :unit: nil
1275
+ :permissions:
1276
+ - securedRead
1277
+ :properties:
1278
+ - read
1279
+ - cnotify
1280
+ - uncnotify
1281
+ :constraints:
1282
+ ValidValues:
1283
+ '0': No program scheduled
1284
+ '1': Program scheduled
1285
+ '2': Program scheduled (Manual Mode)
1002
1286
  - :name: :programmable_switch_event
1003
1287
  :description: Programmable Switch Event
1004
1288
  :uuid: 00000073-0000-1000-8000-0026BB765291
@@ -1009,6 +1293,7 @@
1009
1293
  :properties:
1010
1294
  - read
1011
1295
  - cnotify
1296
+ - uncnotify
1012
1297
  :constraints:
1013
1298
  ValidValues:
1014
1299
  '0': Single Press
@@ -1018,7 +1303,7 @@
1018
1303
  :description: Relative Humidity Dehumidifier Threshold
1019
1304
  :uuid: 000000C9-0000-1000-8000-0026BB765291
1020
1305
  :format: float
1021
- :unit: nil
1306
+ :unit: '"percentage"'
1022
1307
  :permissions:
1023
1308
  - securedRead
1024
1309
  - securedWrite
@@ -1026,6 +1311,7 @@
1026
1311
  - read
1027
1312
  - write
1028
1313
  - cnotify
1314
+ - uncnotify
1029
1315
  :constraints:
1030
1316
  MaximumValue: 100
1031
1317
  MinimumValue: 0
@@ -1034,7 +1320,7 @@
1034
1320
  :description: Relative Humidity Humidifier Threshold
1035
1321
  :uuid: 000000CA-0000-1000-8000-0026BB765291
1036
1322
  :format: float
1037
- :unit: nil
1323
+ :unit: '"percentage"'
1038
1324
  :permissions:
1039
1325
  - securedRead
1040
1326
  - securedWrite
@@ -1042,10 +1328,56 @@
1042
1328
  - read
1043
1329
  - write
1044
1330
  - cnotify
1331
+ - uncnotify
1045
1332
  :constraints:
1046
1333
  MaximumValue: 100
1047
1334
  MinimumValue: 0
1048
1335
  StepValue: 1
1336
+ - :name: :remaining_duration
1337
+ :description: Remaining Duration
1338
+ :uuid: 000000D4-0000-1000-8000-0026BB765291
1339
+ :format: uint32
1340
+ :unit: nil
1341
+ :permissions:
1342
+ - securedRead
1343
+ :properties:
1344
+ - read
1345
+ - cnotify
1346
+ - uncnotify
1347
+ :constraints:
1348
+ MaximumValue: 3600
1349
+ MinimumValue: 0
1350
+ StepValue: 1
1351
+ - :name: :remote_key
1352
+ :description: Remote Key
1353
+ :uuid: 000000E1-0000-1000-8000-0026BB765291
1354
+ :format: uint8
1355
+ :unit: nil
1356
+ :permissions:
1357
+ - securedRead
1358
+ :properties:
1359
+ - write
1360
+ :constraints:
1361
+ MaximumValue: 16
1362
+ MinimumValue: 0
1363
+ ValidValues:
1364
+ '0': Rewind
1365
+ '1': Fast Forward
1366
+ '2': Next Track
1367
+ '3': Previous Track
1368
+ '4': Arrow Up
1369
+ '5': Arrow Down
1370
+ '6': Arrow Left
1371
+ '7': Arrow Right
1372
+ '8': Select
1373
+ '9': Back
1374
+ '10': Exit
1375
+ '11': Play Pause
1376
+ '12':
1377
+ '13':
1378
+ '14':
1379
+ '15': Information
1380
+ '16':
1049
1381
  - :name: :reset_filter_indication
1050
1382
  :description: Reset Filter Indication
1051
1383
  :uuid: 000000AD-0000-1000-8000-0026BB765291
@@ -1071,6 +1403,7 @@
1071
1403
  - read
1072
1404
  - write
1073
1405
  - cnotify
1406
+ - uncnotify
1074
1407
  :constraints:
1075
1408
  ValidValues:
1076
1409
  '0': Clockwise
@@ -1087,6 +1420,7 @@
1087
1420
  - read
1088
1421
  - write
1089
1422
  - cnotify
1423
+ - uncnotify
1090
1424
  :constraints:
1091
1425
  MaximumValue: 100
1092
1426
  MinimumValue: 0
@@ -1103,6 +1437,7 @@
1103
1437
  - read
1104
1438
  - write
1105
1439
  - cnotify
1440
+ - uncnotify
1106
1441
  :constraints:
1107
1442
  MaximumValue: 100
1108
1443
  MinimumValue: 0
@@ -1117,6 +1452,7 @@
1117
1452
  :properties:
1118
1453
  - read
1119
1454
  - cnotify
1455
+ - uncnotify
1120
1456
  :constraints:
1121
1457
  MaximumValue: 1
1122
1458
  MinimumValue: 0
@@ -1151,6 +1487,7 @@
1151
1487
  - read
1152
1488
  - write
1153
1489
  - cnotify
1490
+ - uncnotify
1154
1491
  :constraints:
1155
1492
  ValidValues:
1156
1493
  '0': Stay Arm
@@ -1206,6 +1543,23 @@
1206
1543
  ValidValues:
1207
1544
  '0': Dots
1208
1545
  '1': Arabic Numerals
1546
+ - :name: :set_duration
1547
+ :description: Set Duration
1548
+ :uuid: 000000D3-0000-1000-8000-0026BB765291
1549
+ :format: uint32
1550
+ :unit: nil
1551
+ :permissions:
1552
+ - securedRead
1553
+ - securedWrite
1554
+ :properties:
1555
+ - read
1556
+ - write
1557
+ - cnotify
1558
+ - uncnotify
1559
+ :constraints:
1560
+ MaximumValue: 3600
1561
+ MinimumValue: 0
1562
+ StepValue: 1
1209
1563
  - :name: :setup_endpoints
1210
1564
  :description: Setup Endpoints
1211
1565
  :uuid: '00000118-0000-1000-8000-0026BB765291'
@@ -1231,6 +1585,22 @@
1231
1585
  ValidValues:
1232
1586
  '0': Horizontal
1233
1587
  '1': Vertical
1588
+ - :name: :sleep_discovery_mode
1589
+ :description: Sleep Discovery Mode
1590
+ :uuid: 000000E8-0000-1000-8000-0026BB765291
1591
+ :format: uint8
1592
+ :unit: nil
1593
+ :permissions:
1594
+ - securedRead
1595
+ :properties:
1596
+ - read
1597
+ - cnotify
1598
+ :constraints:
1599
+ MaximumValue: 1
1600
+ MinimumValue: 0
1601
+ ValidValues:
1602
+ '0': Not Discoverable
1603
+ '1': Always Discoverable
1234
1604
  - :name: :smoke_detected
1235
1605
  :description: Smoke Detected
1236
1606
  :uuid: 00000076-0000-1000-8000-0026BB765291
@@ -1256,6 +1626,7 @@
1256
1626
  :properties:
1257
1627
  - read
1258
1628
  - cnotify
1629
+ - uncnotify
1259
1630
  :constraints:
1260
1631
  - :name: :status_fault
1261
1632
  :description: Status Fault
@@ -1327,6 +1698,7 @@
1327
1698
  :properties:
1328
1699
  - read
1329
1700
  - cnotify
1701
+ - uncnotify
1330
1702
  :constraints:
1331
1703
  - :name: :sulphur_dioxide_density
1332
1704
  :description: Sulphur Dioxide Density
@@ -1385,6 +1757,7 @@
1385
1757
  - read
1386
1758
  - write
1387
1759
  - cnotify
1760
+ - uncnotify
1388
1761
  :constraints:
1389
1762
  ValidValues:
1390
1763
  '0': Swing Disabled
@@ -1401,6 +1774,7 @@
1401
1774
  - read
1402
1775
  - write
1403
1776
  - cnotify
1777
+ - uncnotify
1404
1778
  :constraints:
1405
1779
  ValidValues:
1406
1780
  '0': Manual
@@ -1417,6 +1791,7 @@
1417
1791
  - read
1418
1792
  - write
1419
1793
  - cnotify
1794
+ - uncnotify
1420
1795
  :constraints:
1421
1796
  ValidValues:
1422
1797
  '0': Excellent
@@ -1434,6 +1809,7 @@
1434
1809
  - read
1435
1810
  - write
1436
1811
  - cnotify
1812
+ - uncnotify
1437
1813
  :constraints:
1438
1814
  ValidValues:
1439
1815
  '0': Open
@@ -1450,6 +1826,7 @@
1450
1826
  - read
1451
1827
  - write
1452
1828
  - cnotify
1829
+ - uncnotify
1453
1830
  :constraints:
1454
1831
  ValidValues:
1455
1832
  '0': Manual
@@ -1466,6 +1843,7 @@
1466
1843
  - read
1467
1844
  - write
1468
1845
  - cnotify
1846
+ - uncnotify
1469
1847
  :constraints:
1470
1848
  ValidValues:
1471
1849
  '0': Auto
@@ -1483,6 +1861,7 @@
1483
1861
  - read
1484
1862
  - write
1485
1863
  - cnotify
1864
+ - uncnotify
1486
1865
  :constraints:
1487
1866
  ValidValues:
1488
1867
  '0': 'Off'
@@ -1501,6 +1880,7 @@
1501
1880
  - read
1502
1881
  - write
1503
1882
  - cnotify
1883
+ - uncnotify
1504
1884
  :constraints:
1505
1885
  MaximumValue: 90
1506
1886
  MinimumValue: -90
@@ -1517,11 +1897,30 @@
1517
1897
  - read
1518
1898
  - write
1519
1899
  - cnotify
1900
+ - uncnotify
1520
1901
  :constraints:
1521
1902
  ValidValues:
1522
1903
  '0': Humidifier or Dehumidifier
1523
1904
  '1': Humidifier
1524
1905
  '2': Dehumidifier
1906
+ - :name: :target_media_state
1907
+ :description: Target Media State
1908
+ :uuid: 00000137-0000-1000-8000-0026BB765291
1909
+ :format: uint8
1910
+ :unit: nil
1911
+ :permissions:
1912
+ - securedRead
1913
+ :properties:
1914
+ - read
1915
+ - write
1916
+ - cnotify
1917
+ :constraints:
1918
+ MaximumValue: 2
1919
+ MinimumValue: 0
1920
+ ValidValues:
1921
+ '0': Play
1922
+ '1': Pause
1923
+ '2': Stop
1525
1924
  - :name: :target_position
1526
1925
  :description: Target Position
1527
1926
  :uuid: 0000007C-0000-1000-8000-0026BB765291
@@ -1534,6 +1933,7 @@
1534
1933
  - read
1535
1934
  - write
1536
1935
  - cnotify
1936
+ - uncnotify
1537
1937
  :constraints:
1538
1938
  MaximumValue: 100
1539
1939
  MinimumValue: 0
@@ -1550,6 +1950,7 @@
1550
1950
  - read
1551
1951
  - write
1552
1952
  - cnotify
1953
+ - uncnotify
1553
1954
  :constraints:
1554
1955
  MaximumValue: 100
1555
1956
  MinimumValue: 0
@@ -1566,6 +1967,7 @@
1566
1967
  - read
1567
1968
  - write
1568
1969
  - cnotify
1970
+ - uncnotify
1569
1971
  :constraints:
1570
1972
  ValidValues:
1571
1973
  '0': Manual
@@ -1582,6 +1984,7 @@
1582
1984
  - read
1583
1985
  - write
1584
1986
  - cnotify
1987
+ - uncnotify
1585
1988
  :constraints:
1586
1989
  MaximumValue: 38
1587
1990
  MinimumValue: 10
@@ -1598,6 +2001,7 @@
1598
2001
  - read
1599
2002
  - write
1600
2003
  - cnotify
2004
+ - uncnotify
1601
2005
  :constraints:
1602
2006
  MaximumValue: 90
1603
2007
  MinimumValue: -90
@@ -1614,10 +2018,28 @@
1614
2018
  - read
1615
2019
  - write
1616
2020
  - cnotify
2021
+ - uncnotify
1617
2022
  :constraints:
1618
2023
  MaximumValue: 90
1619
2024
  MinimumValue: -90
1620
2025
  StepValue: 1
2026
+ - :name: :target_visibility_state
2027
+ :description: Target Visibility State
2028
+ :uuid: 00000134-0000-1000-8000-0026BB765291
2029
+ :format: uint8
2030
+ :unit: nil
2031
+ :permissions:
2032
+ - securedRead
2033
+ :properties:
2034
+ - read
2035
+ - write
2036
+ - cnotify
2037
+ :constraints:
2038
+ MaximumValue: 1
2039
+ MinimumValue: 0
2040
+ ValidValues:
2041
+ '0': Shown
2042
+ '1': Hidden
1621
2043
  - :name: :temperature_display_units
1622
2044
  :description: Temperature Display Units
1623
2045
  :uuid: 00000036-0000-1000-8000-0026BB765291
@@ -1630,10 +2052,28 @@
1630
2052
  - read
1631
2053
  - write
1632
2054
  - cnotify
2055
+ - uncnotify
1633
2056
  :constraints:
1634
2057
  ValidValues:
1635
2058
  '0': Celsius
1636
2059
  '1': Fahrenheit
2060
+ - :name: :valve_type
2061
+ :description: Valve Type
2062
+ :uuid: 000000D5-0000-1000-8000-0026BB765291
2063
+ :format: uint8
2064
+ :unit: nil
2065
+ :permissions:
2066
+ - securedRead
2067
+ :properties:
2068
+ - read
2069
+ - cnotify
2070
+ - uncnotify
2071
+ :constraints:
2072
+ ValidValues:
2073
+ '0': Generic valve
2074
+ '1': Irrigation
2075
+ '2': Shower head
2076
+ '3': Water faucet
1637
2077
  - :name: :version
1638
2078
  :description: Version
1639
2079
  :uuid: 00000037-0000-1000-8000-0026BB765291
@@ -1644,6 +2084,7 @@
1644
2084
  :properties:
1645
2085
  - read
1646
2086
  - cnotify
2087
+ - uncnotify
1647
2088
  :constraints:
1648
2089
  MaximumLength: 64
1649
2090
  - :name: :voc_density
@@ -1673,20 +2114,55 @@
1673
2114
  - read
1674
2115
  - write
1675
2116
  - cnotify
2117
+ - uncnotify
1676
2118
  :constraints:
1677
2119
  MaximumValue: 100
1678
2120
  MinimumValue: 0
1679
2121
  StepValue: 1
2122
+ - :name: :volume_control_type
2123
+ :description: Volume Control Type
2124
+ :uuid: 000000E9-0000-1000-8000-0026BB765291
2125
+ :format: uint8
2126
+ :unit: nil
2127
+ :permissions:
2128
+ - securedRead
2129
+ :properties:
2130
+ - read
2131
+ - cnotify
2132
+ :constraints:
2133
+ MaximumValue: 3
2134
+ MinimumValue: 0
2135
+ ValidValues:
2136
+ '0': None
2137
+ '1': Relative
2138
+ '2': Relative with Current
2139
+ '3': Absolute
2140
+ - :name: :volume_selector
2141
+ :description: Volume Selector
2142
+ :uuid: 000000EA-0000-1000-8000-0026BB765291
2143
+ :format: uint8
2144
+ :unit: nil
2145
+ :permissions:
2146
+ - securedRead
2147
+ :properties:
2148
+ - write
2149
+ :constraints:
2150
+ MaximumValue: 1
2151
+ MinimumValue: 0
2152
+ ValidValues:
2153
+ '0': Increment
2154
+ '1': Decrement
1680
2155
  - :name: :water_level
1681
2156
  :description: Water Level
1682
2157
  :uuid: 000000B5-0000-1000-8000-0026BB765291
1683
2158
  :format: float
1684
- :unit: nil
2159
+ :unit: '"percentage"'
1685
2160
  :permissions:
1686
2161
  - securedRead
1687
2162
  :properties:
1688
2163
  - read
1689
2164
  - cnotify
2165
+ - uncnotify
1690
2166
  :constraints:
1691
2167
  MaximumValue: 100
1692
2168
  MinimumValue: 0