ruby_home 0.2.1 → 0.2.6

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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +41 -0
  3. data/.gitignore +2 -2
  4. data/.rubocop.yml +2 -9
  5. data/.standard.yml +3 -0
  6. data/CHANGELOG.md +18 -0
  7. data/Gemfile +2 -2
  8. data/README.md +40 -77
  9. data/Rakefile +4 -4
  10. data/examples/air_purifier.rb +66 -0
  11. data/examples/air_quality_sensor.rb +119 -0
  12. data/examples/battery_service.rb +58 -0
  13. data/examples/carbon_dioxide_sensor.rb +78 -0
  14. data/examples/carbon_monoxide_sensor.rb +78 -0
  15. data/examples/contact_sensor.rb +66 -0
  16. data/examples/door.rb +48 -0
  17. data/examples/fan.rb +30 -0
  18. data/examples/fan_v2.rb +68 -0
  19. data/examples/garage_door_opener.rb +71 -0
  20. data/examples/heater_cooler.rb +92 -0
  21. data/examples/humidifier_dehumidifier.rb +88 -0
  22. data/examples/humidity_sensor.rb +62 -0
  23. data/examples/leak_sensor.rb +66 -0
  24. data/examples/light_sensor.rb +64 -0
  25. data/examples/lightbulb.rb +31 -0
  26. data/examples/lock_mechanism.rb +34 -0
  27. data/examples/motion_sensor.rb +66 -0
  28. data/examples/occupancy_sensor.rb +66 -0
  29. data/examples/outlet.rb +29 -0
  30. data/examples/security_system.rb +53 -0
  31. data/examples/smoke_sensor.rb +66 -0
  32. data/examples/switch.rb +16 -0
  33. data/examples/television.rb +73 -0
  34. data/examples/temperature_sensor.rb +62 -0
  35. data/examples/thermostat.rb +113 -0
  36. data/examples/window.rb +48 -0
  37. data/examples/window_covering.rb +72 -0
  38. data/lib/ruby_home.rb +21 -22
  39. data/lib/ruby_home/accessory.rb +1 -1
  40. data/lib/ruby_home/accessory_collection.rb +6 -6
  41. data/lib/ruby_home/accessory_info.rb +18 -18
  42. data/lib/ruby_home/characteristic.rb +13 -7
  43. data/lib/ruby_home/characteristic_collection.rb +13 -13
  44. data/lib/ruby_home/config/categories.yml +39 -0
  45. data/lib/ruby_home/config/characteristics.yml +190 -319
  46. data/lib/ruby_home/config/manual_characteristics.yml +278 -0
  47. data/lib/ruby_home/config/manual_services.yml +45 -0
  48. data/lib/ruby_home/config/services.yml +338 -304
  49. data/lib/ruby_home/configuration.rb +21 -2
  50. data/lib/ruby_home/device_id.rb +3 -3
  51. data/lib/ruby_home/dns/service.rb +4 -6
  52. data/lib/ruby_home/dns/text_record.rb +10 -10
  53. data/lib/ruby_home/errors.rb +1 -0
  54. data/lib/ruby_home/factories/characteristic_factory.rb +38 -37
  55. data/lib/ruby_home/factories/service_factory.rb +72 -72
  56. data/lib/ruby_home/factories/templates/characteristic_template.rb +6 -6
  57. data/lib/ruby_home/factories/templates/service_template.rb +12 -11
  58. data/lib/ruby_home/hap/crypto/chacha20poly1305.rb +2 -2
  59. data/lib/ruby_home/hap/crypto/hkdf.rb +4 -4
  60. data/lib/ruby_home/hap/crypto/session_key.rb +7 -7
  61. data/lib/ruby_home/hap/decrypter.rb +8 -8
  62. data/lib/ruby_home/hap/encrypter.rb +5 -6
  63. data/lib/ruby_home/hap/ev_response.rb +17 -17
  64. data/lib/ruby_home/hap/hap_request.rb +1 -1
  65. data/lib/ruby_home/hap/server.rb +4 -4
  66. data/lib/ruby_home/hap/server_handler.rb +8 -10
  67. data/lib/ruby_home/hap/session.rb +22 -22
  68. data/lib/ruby_home/hap/values/base_value.rb +3 -3
  69. data/lib/ruby_home/hap/values/bool_value.rb +4 -4
  70. data/lib/ruby_home/hap/values/float_value.rb +4 -4
  71. data/lib/ruby_home/hap/values/identify_value.rb +1 -1
  72. data/lib/ruby_home/hap/values/int32_value.rb +4 -4
  73. data/lib/ruby_home/hap/values/null_value.rb +1 -1
  74. data/lib/ruby_home/hap/values/string_value.rb +11 -11
  75. data/lib/ruby_home/hap/values/uint32_value.rb +5 -5
  76. data/lib/ruby_home/hap/values/uint8_value.rb +14 -14
  77. data/lib/ruby_home/hex_helper.rb +3 -3
  78. data/lib/ruby_home/http/application.rb +7 -7
  79. data/lib/ruby_home/http/controllers/accessories_controller.rb +3 -3
  80. data/lib/ruby_home/http/controllers/application_controller.rb +6 -6
  81. data/lib/ruby_home/http/controllers/characteristics_controller.rb +29 -29
  82. data/lib/ruby_home/http/controllers/identify_controller.rb +10 -10
  83. data/lib/ruby_home/http/controllers/pair_setups_controller.rb +19 -19
  84. data/lib/ruby_home/http/controllers/pair_verifies_controller.rb +9 -9
  85. data/lib/ruby_home/http/controllers/pairings_controller.rb +6 -6
  86. data/lib/ruby_home/http/serializers/accessory_serializer.rb +5 -5
  87. data/lib/ruby_home/http/serializers/characteristic_serializer.rb +27 -19
  88. data/lib/ruby_home/http/serializers/characteristic_value_serializer.rb +5 -5
  89. data/lib/ruby_home/http/serializers/object_serializer.rb +1 -1
  90. data/lib/ruby_home/http/serializers/service_serializer.rb +19 -9
  91. data/lib/ruby_home/http/serializers/uuid_helper.rb +2 -2
  92. data/lib/ruby_home/http/services/session_notifier.rb +8 -8
  93. data/lib/ruby_home/http/services/start_srp_service.rb +3 -3
  94. data/lib/ruby_home/http/services/verify_finish_service.rb +22 -22
  95. data/lib/ruby_home/http/services/verify_srp_service.rb +22 -22
  96. data/lib/ruby_home/identifier_cache.rb +4 -5
  97. data/lib/ruby_home/password.rb +14 -14
  98. data/lib/ruby_home/persistable.rb +19 -12
  99. data/lib/ruby_home/service.rb +5 -2
  100. data/lib/ruby_home/service_collection.rb +1 -1
  101. data/lib/ruby_home/version.rb +1 -1
  102. data/rubyhome.gemspec +31 -31
  103. data/sbin/characteristic_generator.rb +22 -24
  104. data/sbin/service_generator.rb +38 -19
  105. metadata +85 -44
  106. data/.travis.yml +0 -31
@@ -1,16 +1,17 @@
1
- require 'facets/cattr'
1
+ require "facets/cattr"
2
2
 
3
3
  module RubyHome
4
4
  module Persistable
5
5
  def self.included(base)
6
6
  base.send(:cattr_accessor, :source)
7
+ base.send(:cattr_accessor, :cache)
7
8
  base.extend(ClassMethods)
8
9
  end
9
10
 
10
11
  module ClassMethods
11
12
  def persisted
12
- if yaml = read
13
- new(yaml)
13
+ if (yaml = read)
14
+ new(**yaml)
14
15
  end
15
16
  end
16
17
 
@@ -19,23 +20,29 @@ module RubyHome
19
20
  end
20
21
 
21
22
  def write(collection)
22
- File.open(source, 'w') {|f| f.write(collection.to_yaml) }
23
+ self.cache = collection
24
+ persist
25
+
26
+ true
23
27
  end
24
28
 
25
- def read
26
- return false unless file_exists?
29
+ def persist
30
+ File.write(source, cache.to_yaml)
31
+ end
27
32
 
33
+ def read_persisted
28
34
  YAML.load_file(source)
35
+ rescue Errno::ENOENT
36
+ false
29
37
  end
30
38
 
31
- def truncate
32
- return false unless file_exists?
33
-
34
- File.truncate(source, 0)
39
+ def read
40
+ self.cache ||= read_persisted
35
41
  end
36
42
 
37
- def file_exists?
38
- File.exists?(source)
43
+ def reset
44
+ self.cache = nil
45
+ persist
39
46
  end
40
47
  end
41
48
 
@@ -1,10 +1,10 @@
1
- require_relative 'service_collection'
1
+ require_relative "service_collection"
2
2
 
3
3
  module RubyHome
4
4
  class DuplicateServiceError < StandardError; end
5
5
 
6
6
  class Service
7
- def initialize(accessory: , primary: false, hidden: false, name:, description:, uuid:)
7
+ def initialize(accessory:, name:, description:, uuid:, primary: false, hidden: false)
8
8
  @accessory = accessory
9
9
  @primary = primary
10
10
  @hidden = hidden
@@ -12,6 +12,7 @@ module RubyHome
12
12
  @description = description
13
13
  @uuid = uuid
14
14
  @characteristics = CharacteristicCollection.new
15
+ @linked = []
15
16
  end
16
17
 
17
18
  attr_reader(
@@ -25,6 +26,8 @@ module RubyHome
25
26
  :instance_id
26
27
  )
27
28
 
29
+ attr_accessor :linked
30
+
28
31
  def instance_id=(new_id)
29
32
  raise DuplicateServiceError if accessory.contains_instance_id?(new_id)
30
33
 
@@ -20,6 +20,6 @@ module RubyHome
20
20
 
21
21
  private
22
22
 
23
- attr_reader :services
23
+ attr_reader :services
24
24
  end
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module RubyHome
2
- VERSION = '0.2.1'
2
+ VERSION = "0.2.6"
3
3
  end
data/rubyhome.gemspec CHANGED
@@ -1,45 +1,45 @@
1
-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'ruby_home/version'
3
+ require "ruby_home/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = 'ruby_home'
8
- spec.version = RubyHome::VERSION
9
- spec.authors = ['Karl Entwistle']
10
- spec.email = ['karl@entwistle.com']
11
- spec.summary = 'Ruby HomeKit support'
12
- spec.description = <<~DESCRIPTION
6
+ spec.name = "ruby_home"
7
+ spec.version = RubyHome::VERSION
8
+ spec.authors = ["Karl Entwistle"]
9
+ spec.email = ["karl@entwistle.com"]
10
+ spec.summary = "Ruby HomeKit support"
11
+ spec.description = <<~DESCRIPTION
13
12
  RubyHome is a lightweight service you can run on your home network that
14
13
  emulates the iOS HomeKit API. It supports community contributed plugins, which
15
14
  are modules that provide a bridge from HomeKit to various 3rd-party APIs
16
15
  provided by manufacturers of smart home devices.
17
16
  DESCRIPTION
18
- spec.homepage = 'https://github.com/karlentwistle/ruby_home'
19
- spec.license = 'MIT'
17
+ spec.homepage = "https://github.com/karlentwistle/ruby_home"
18
+ spec.license = "MIT"
20
19
 
21
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
22
21
  f.match(%r{^(test|spec|features)/})
23
22
  end
24
- spec.bindir = 'bin'
25
- spec.executables = ['ruby_home']
26
- spec.require_paths = ['lib']
27
- spec.required_ruby_version = '>= 2.4.1'
23
+ spec.bindir = "bin"
24
+ spec.executables = ["ruby_home"]
25
+ spec.require_paths = ["lib"]
26
+ spec.required_ruby_version = ">= 2.5.0"
28
27
 
29
- spec.add_dependency 'bindata', '~> 2.4', '>= 2.4.3'
30
- spec.add_dependency 'dnssd', '~> 3.0'
31
- spec.add_dependency 'facets', '~> 3.1'
32
- spec.add_dependency 'hkdf', '~> 0.3.0'
33
- spec.add_dependency 'oj', '3.7.12'
34
- spec.add_dependency 'rbnacl', '~> 6.0'
35
- spec.add_dependency 'ruby_home-srp', '~> 1.3'
36
- spec.add_dependency 'ruby_home-tlv', '~> 0.1.0'
37
- spec.add_dependency 'sinatra', '2.0.5'
38
- spec.add_dependency 'wisper', '~> 2.0'
28
+ spec.add_dependency "dnssd", "~> 3.0"
29
+ spec.add_dependency "facets", "~> 3.1"
30
+ spec.add_dependency "hkdf", "~> 1.0.0"
31
+ spec.add_dependency "oj", "~> 3.10"
32
+ spec.add_dependency "rbnacl", "~> 7.0"
33
+ spec.add_dependency "ruby_home-srp", "~> 1.3"
34
+ spec.add_dependency "ruby_home-tlv", "~> 0.1"
35
+ spec.add_dependency "sinatra", "~> 2.0"
36
+ spec.add_dependency "webrick", "~> 1.7"
37
+ spec.add_dependency "wisper", "~> 2.0"
39
38
 
40
- spec.add_development_dependency 'byebug', '~> 11.0'
41
- spec.add_development_dependency 'plist', '~> 3.4'
42
- spec.add_development_dependency 'rack-test', '~> 1.1.0'
43
- spec.add_development_dependency 'rake', '~> 12.3'
44
- spec.add_development_dependency 'rspec', '~> 3.0'
39
+ spec.add_development_dependency "byebug", "~> 11.0"
40
+ spec.add_development_dependency "plist", "~> 3.4"
41
+ spec.add_development_dependency "rack-test", "~> 1.1.0"
42
+ spec.add_development_dependency "rake", "~> 13.0"
43
+ spec.add_development_dependency "rspec", "~> 3.0"
44
+ spec.add_development_dependency "standard", "~> 1.0"
45
45
  end
@@ -1,39 +1,39 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'byebug'
4
- require 'plist'
5
- require 'yaml'
3
+ require "byebug"
4
+ require "plist"
5
+ require "yaml"
6
6
 
7
7
  module RubyHome
8
8
  class CharacteristicGenerator
9
9
  class << self
10
10
  def run
11
11
  convert_binary_plist
12
- File.open(file_path, 'w') do |file|
12
+ File.open(file_path, "w") do |file|
13
13
  file.write generate_characteristics.to_yaml
14
14
  end
15
15
  end
16
16
 
17
17
  def generate_characteristics
18
- parsed_xml['Characteristics'].map do |characteristics_xml|
18
+ parsed_xml["Characteristics"].map do |characteristics_xml|
19
19
  new(characteristics_xml).generate_characteristic_hash
20
20
  end
21
21
  end
22
22
 
23
23
  def convert_binary_plist
24
24
  system([
25
- 'plutil -convert xml1 -o',
26
- '/tmp/Accessory.xml',
25
+ "plutil -convert xml1 -o",
26
+ "/tmp/Accessory.xml",
27
27
  "\'/Applications/Utilities/HomeKit\ Accessory\ Simulator.app/Contents/Frameworks/HAPAccessoryKit.framework/Versions/A/Resources/default.metadata.plist\'"
28
- ].join(' '))
28
+ ].join(" "))
29
29
  end
30
30
 
31
31
  def parsed_xml
32
- Plist.parse_xml('/tmp/Accessory.xml')
32
+ Plist.parse_xml("/tmp/Accessory.xml")
33
33
  end
34
34
 
35
35
  def file_path
36
- File.dirname(__FILE__) + '/../lib/ruby_home/config/characteristics.yml'
36
+ File.dirname(__FILE__) + "/../lib/ruby_home/config/characteristics.yml"
37
37
  end
38
38
  end
39
39
 
@@ -41,7 +41,6 @@ module RubyHome
41
41
  @constraints = xml["Constraints"]
42
42
  @format = xml["Format"]
43
43
  @name = xml["Name"]
44
- @permissions = xml["Permissions"]
45
44
  @properties = xml["Properties"]
46
45
  @uuid = xml["UUID"]
47
46
  @unit = xml["Unit"]
@@ -54,29 +53,28 @@ module RubyHome
54
53
  uuid: uuid,
55
54
  format: format,
56
55
  unit: sanitized_unit,
57
- permissions: permissions,
58
56
  properties: properties,
59
- constraints: constraints,
57
+ constraints: constraints
60
58
  }
61
59
  end
62
60
 
63
61
  private
64
62
 
65
- def sanitized_name
66
- name.downcase.gsub(' ', '_').gsub('.', '_')
67
- end
63
+ def sanitized_name
64
+ name.downcase.tr(" ", "_").tr(".", "_")
65
+ end
68
66
 
69
- def sanitized_unit
70
- if unit
71
- "\"#{unit}\""
72
- else
73
- "nil"
74
- end
67
+ def sanitized_unit
68
+ if unit
69
+ "\"#{unit}\""
70
+ else
71
+ "nil"
75
72
  end
73
+ end
76
74
 
77
- private
75
+ private
78
76
 
79
- attr_reader :constraints, :format, :name, :permissions, :properties, :uuid, :unit
77
+ attr_reader :constraints, :format, :name, :properties, :uuid, :unit
80
78
  end
81
79
  end
82
80
 
@@ -1,46 +1,47 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'byebug'
4
- require 'plist'
5
- require 'yaml'
3
+ require "byebug"
4
+ require "plist"
5
+ require "yaml"
6
+ require_relative "../lib/ruby_home"
6
7
 
7
8
  module RubyHome
8
9
  class ServiceGenerator
9
10
  class << self
10
11
  def run
11
12
  convert_binary_plist
12
- File.open(file_path, 'w') do |file|
13
+ File.open(file_path, "w") do |file|
13
14
  file.write generate_services.to_yaml
14
15
  end
15
16
  end
16
17
 
17
18
  def generate_services
18
- parsed_xml['Services'].map do |services_xml|
19
+ parsed_xml["Services"].map do |services_xml|
19
20
  new(services_xml).generate_service_hash
20
21
  end
21
22
  end
22
23
 
23
24
  def convert_binary_plist
24
25
  system([
25
- 'plutil -convert xml1 -o',
26
- '/tmp/Accessory.xml',
26
+ "plutil -convert xml1 -o",
27
+ "/tmp/Accessory.xml",
27
28
  "\'/Applications/Utilities/HomeKit\ Accessory\ Simulator.app/Contents/Frameworks/HAPAccessoryKit.framework/Versions/A/Resources/default.metadata.plist\'"
28
- ].join(' '))
29
+ ].join(" "))
29
30
  end
30
31
 
31
32
  def parsed_xml
32
- Plist.parse_xml('/tmp/Accessory.xml')
33
+ Plist.parse_xml("/tmp/Accessory.xml")
33
34
  end
34
35
 
35
36
  def file_path
36
- File.dirname(__FILE__) + '/../lib/ruby_home/config/services.yml'
37
+ File.dirname(__FILE__) + "/../lib/ruby_home/config/services.yml"
37
38
  end
38
39
  end
39
40
 
40
41
  def initialize(xml)
41
42
  @name = xml["Name"]
42
- @optional_characteristics = xml["OptionalCharacteristics"]
43
- @required_characteristics = xml["RequiredCharacteristics"]
43
+ @optional_characteristic_uuids = xml["OptionalCharacteristics"]
44
+ @required_characteristic_uuids = xml["RequiredCharacteristics"]
44
45
  @uuid = xml["UUID"]
45
46
  end
46
47
 
@@ -49,20 +50,38 @@ module RubyHome
49
50
  name: sanitized_name.to_sym,
50
51
  description: name,
51
52
  uuid: uuid,
52
- optional_characteristics_uuids: optional_characteristics,
53
- required_characteristics_uuids: required_characteristics,
53
+ optional_characteristic_names: optional_characteristic_names.sort,
54
+ required_characteristic_names: required_characteristic_names.sort
54
55
  }
55
56
  end
56
57
 
57
58
  private
58
59
 
59
- def sanitized_name
60
- name.downcase.gsub(' ', '_')
61
- end
60
+ def sanitized_name
61
+ name.downcase.tr(" ", "_")
62
+ end
63
+
64
+ def optional_characteristic_names
65
+ optional_characteristic_uuids.map do |uuid|
66
+ RubyHome::CharacteristicTemplate.find_by(uuid: uuid).name
67
+ end + additional_optional_characteristic_names
68
+ end
69
+
70
+ ADDITIONAL_OPTIONAL_CHARACTERISTIC_NAMES = {
71
+ "lightbulb" => [:color_temperature]
72
+ }.freeze
62
73
 
63
- private
74
+ def additional_optional_characteristic_names
75
+ ADDITIONAL_OPTIONAL_CHARACTERISTIC_NAMES.fetch(sanitized_name, [])
76
+ end
77
+
78
+ def required_characteristic_names
79
+ required_characteristic_uuids.map do |uuid|
80
+ RubyHome::CharacteristicTemplate.find_by(uuid: uuid).name
81
+ end
82
+ end
64
83
 
65
- attr_reader :name, :optional_characteristics, :required_characteristics, :uuid
84
+ attr_reader :name, :required_characteristic_uuids, :optional_characteristic_uuids, :uuid
66
85
  end
67
86
  end
68
87
 
metadata CHANGED
@@ -1,35 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_home
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Entwistle
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-07 00:00:00.000000000 Z
11
+ date: 2021-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bindata
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.4'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 2.4.3
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '2.4'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 2.4.3
33
13
  - !ruby/object:Gem::Dependency
34
14
  name: dnssd
35
15
  requirement: !ruby/object:Gem::Requirement
@@ -64,42 +44,42 @@ dependencies:
64
44
  requirements:
65
45
  - - "~>"
66
46
  - !ruby/object:Gem::Version
67
- version: 0.3.0
47
+ version: 1.0.0
68
48
  type: :runtime
69
49
  prerelease: false
70
50
  version_requirements: !ruby/object:Gem::Requirement
71
51
  requirements:
72
52
  - - "~>"
73
53
  - !ruby/object:Gem::Version
74
- version: 0.3.0
54
+ version: 1.0.0
75
55
  - !ruby/object:Gem::Dependency
76
56
  name: oj
77
57
  requirement: !ruby/object:Gem::Requirement
78
58
  requirements:
79
- - - '='
59
+ - - "~>"
80
60
  - !ruby/object:Gem::Version
81
- version: 3.7.12
61
+ version: '3.10'
82
62
  type: :runtime
83
63
  prerelease: false
84
64
  version_requirements: !ruby/object:Gem::Requirement
85
65
  requirements:
86
- - - '='
66
+ - - "~>"
87
67
  - !ruby/object:Gem::Version
88
- version: 3.7.12
68
+ version: '3.10'
89
69
  - !ruby/object:Gem::Dependency
90
70
  name: rbnacl
91
71
  requirement: !ruby/object:Gem::Requirement
92
72
  requirements:
93
73
  - - "~>"
94
74
  - !ruby/object:Gem::Version
95
- version: '6.0'
75
+ version: '7.0'
96
76
  type: :runtime
97
77
  prerelease: false
98
78
  version_requirements: !ruby/object:Gem::Requirement
99
79
  requirements:
100
80
  - - "~>"
101
81
  - !ruby/object:Gem::Version
102
- version: '6.0'
82
+ version: '7.0'
103
83
  - !ruby/object:Gem::Dependency
104
84
  name: ruby_home-srp
105
85
  requirement: !ruby/object:Gem::Requirement
@@ -120,28 +100,42 @@ dependencies:
120
100
  requirements:
121
101
  - - "~>"
122
102
  - !ruby/object:Gem::Version
123
- version: 0.1.0
103
+ version: '0.1'
124
104
  type: :runtime
125
105
  prerelease: false
126
106
  version_requirements: !ruby/object:Gem::Requirement
127
107
  requirements:
128
108
  - - "~>"
129
109
  - !ruby/object:Gem::Version
130
- version: 0.1.0
110
+ version: '0.1'
131
111
  - !ruby/object:Gem::Dependency
132
112
  name: sinatra
133
113
  requirement: !ruby/object:Gem::Requirement
134
114
  requirements:
135
- - - '='
115
+ - - "~>"
136
116
  - !ruby/object:Gem::Version
137
- version: 2.0.5
117
+ version: '2.0'
138
118
  type: :runtime
139
119
  prerelease: false
140
120
  version_requirements: !ruby/object:Gem::Requirement
141
121
  requirements:
142
- - - '='
122
+ - - "~>"
143
123
  - !ruby/object:Gem::Version
144
- version: 2.0.5
124
+ version: '2.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webrick
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.7'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.7'
145
139
  - !ruby/object:Gem::Dependency
146
140
  name: wisper
147
141
  requirement: !ruby/object:Gem::Requirement
@@ -204,14 +198,14 @@ dependencies:
204
198
  requirements:
205
199
  - - "~>"
206
200
  - !ruby/object:Gem::Version
207
- version: '12.3'
201
+ version: '13.0'
208
202
  type: :development
209
203
  prerelease: false
210
204
  version_requirements: !ruby/object:Gem::Requirement
211
205
  requirements:
212
206
  - - "~>"
213
207
  - !ruby/object:Gem::Version
214
- version: '12.3'
208
+ version: '13.0'
215
209
  - !ruby/object:Gem::Dependency
216
210
  name: rspec
217
211
  requirement: !ruby/object:Gem::Requirement
@@ -226,6 +220,20 @@ dependencies:
226
220
  - - "~>"
227
221
  - !ruby/object:Gem::Version
228
222
  version: '3.0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: standard
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '1.0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '1.0'
229
237
  description: |
230
238
  RubyHome is a lightweight service you can run on your home network that
231
239
  emulates the iOS HomeKit API. It supports community contributed plugins, which
@@ -238,11 +246,13 @@ executables:
238
246
  extensions: []
239
247
  extra_rdoc_files: []
240
248
  files:
249
+ - ".github/workflows/tests.yml"
241
250
  - ".gitignore"
242
251
  - ".hound.yml"
243
252
  - ".rspec"
244
253
  - ".rubocop.yml"
245
- - ".travis.yml"
254
+ - ".standard.yml"
255
+ - CHANGELOG.md
246
256
  - Gemfile
247
257
  - LICENSE
248
258
  - README.md
@@ -250,13 +260,44 @@ files:
250
260
  - bin/console
251
261
  - bin/ruby_home
252
262
  - bin/setup
263
+ - examples/air_purifier.rb
264
+ - examples/air_quality_sensor.rb
265
+ - examples/battery_service.rb
266
+ - examples/carbon_dioxide_sensor.rb
267
+ - examples/carbon_monoxide_sensor.rb
268
+ - examples/contact_sensor.rb
269
+ - examples/door.rb
270
+ - examples/fan.rb
271
+ - examples/fan_v2.rb
272
+ - examples/garage_door_opener.rb
273
+ - examples/heater_cooler.rb
274
+ - examples/humidifier_dehumidifier.rb
275
+ - examples/humidity_sensor.rb
276
+ - examples/leak_sensor.rb
277
+ - examples/light_sensor.rb
278
+ - examples/lightbulb.rb
279
+ - examples/lock_mechanism.rb
280
+ - examples/motion_sensor.rb
281
+ - examples/occupancy_sensor.rb
282
+ - examples/outlet.rb
283
+ - examples/security_system.rb
284
+ - examples/smoke_sensor.rb
285
+ - examples/switch.rb
286
+ - examples/television.rb
287
+ - examples/temperature_sensor.rb
288
+ - examples/thermostat.rb
289
+ - examples/window.rb
290
+ - examples/window_covering.rb
253
291
  - lib/ruby_home.rb
254
292
  - lib/ruby_home/accessory.rb
255
293
  - lib/ruby_home/accessory_collection.rb
256
294
  - lib/ruby_home/accessory_info.rb
257
295
  - lib/ruby_home/characteristic.rb
258
296
  - lib/ruby_home/characteristic_collection.rb
297
+ - lib/ruby_home/config/categories.yml
259
298
  - lib/ruby_home/config/characteristics.yml
299
+ - lib/ruby_home/config/manual_characteristics.yml
300
+ - lib/ruby_home/config/manual_services.yml
260
301
  - lib/ruby_home/config/services.yml
261
302
  - lib/ruby_home/configuration.rb
262
303
  - lib/ruby_home/device_id.rb
@@ -320,7 +361,7 @@ homepage: https://github.com/karlentwistle/ruby_home
320
361
  licenses:
321
362
  - MIT
322
363
  metadata: {}
323
- post_install_message:
364
+ post_install_message:
324
365
  rdoc_options: []
325
366
  require_paths:
326
367
  - lib
@@ -328,15 +369,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
328
369
  requirements:
329
370
  - - ">="
330
371
  - !ruby/object:Gem::Version
331
- version: 2.4.1
372
+ version: 2.5.0
332
373
  required_rubygems_version: !ruby/object:Gem::Requirement
333
374
  requirements:
334
375
  - - ">="
335
376
  - !ruby/object:Gem::Version
336
377
  version: '0'
337
378
  requirements: []
338
- rubygems_version: 3.0.1
339
- signing_key:
379
+ rubygems_version: 3.2.15
380
+ signing_key:
340
381
  specification_version: 4
341
382
  summary: Ruby HomeKit support
342
383
  test_files: []