ruby_home 0.2.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
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