mqtt-homie 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/README.md +67 -65
- data/lib/mqtt/homie/client.rb +173 -173
- data/lib/mqtt/homie/device.rb +108 -108
- data/lib/mqtt/homie/device_builder.rb +38 -38
- data/lib/mqtt/homie/homie_attribute.rb +125 -125
- data/lib/mqtt/homie/homie_object.rb +17 -17
- data/lib/mqtt/homie/network.rb +43 -42
- data/lib/mqtt/homie/node.rb +26 -26
- data/lib/mqtt/homie/property.rb +48 -48
- data/lib/mqtt/homie/version.rb +5 -5
- data/lib/mqtt/homie.rb +29 -29
- data/mqtt-homie.gemspec +36 -37
- metadata +25 -41
- data/Gemfile.lock +0 -45
data/lib/mqtt/homie/node.rb
CHANGED
@@ -1,26 +1,26 @@
|
|
1
|
-
module MQTT
|
2
|
-
module Homie
|
3
|
-
class Node < HomieObject
|
4
|
-
homie_id
|
5
|
-
homie_attr :name, required: true
|
6
|
-
homie_attr :type, required: true
|
7
|
-
homie_attr :properties, datatype: Array, required: true, immutable: true
|
8
|
-
|
9
|
-
def property(id)
|
10
|
-
@properties.find { |i| i.id == id }
|
11
|
-
end
|
12
|
-
|
13
|
-
def homie_attributes
|
14
|
-
data = super
|
15
|
-
|
16
|
-
@properties.each do |p|
|
17
|
-
p.homie_attributes.each do |k, v|
|
18
|
-
data[p.topic + "/" + k] = v
|
19
|
-
end
|
20
|
-
data[p.topic] = p.value
|
21
|
-
end
|
22
|
-
data
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
1
|
+
module MQTT
|
2
|
+
module Homie
|
3
|
+
class Node < HomieObject
|
4
|
+
homie_id
|
5
|
+
homie_attr :name, required: true
|
6
|
+
homie_attr :type, required: true
|
7
|
+
homie_attr :properties, datatype: Array, required: true, immutable: true
|
8
|
+
|
9
|
+
def property(id)
|
10
|
+
@properties.find { |i| i.id == id }
|
11
|
+
end
|
12
|
+
|
13
|
+
def homie_attributes
|
14
|
+
data = super
|
15
|
+
|
16
|
+
@properties.each do |p|
|
17
|
+
p.homie_attributes.each do |k, v|
|
18
|
+
data[p.topic + "/" + k] = v
|
19
|
+
end
|
20
|
+
data[p.topic] = p.value
|
21
|
+
end
|
22
|
+
data
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/mqtt/homie/property.rb
CHANGED
@@ -1,48 +1,48 @@
|
|
1
|
-
require "observer"
|
2
|
-
|
3
|
-
module MQTT
|
4
|
-
module Homie
|
5
|
-
class Property < HomieObject
|
6
|
-
include Observable
|
7
|
-
|
8
|
-
DATA_TYPES = [:integer, :float, :boolean, :string, :enum, :color]
|
9
|
-
|
10
|
-
homie_id
|
11
|
-
homie_attr :name, default: ""
|
12
|
-
homie_attr :settable, default: false, datatype: :boolean
|
13
|
-
homie_attr :retained, default: true, datatype: :boolean
|
14
|
-
homie_attr :datatype, default: :string, enum: DATA_TYPES, datatype: Symbol
|
15
|
-
homie_attr :unit, default: ""
|
16
|
-
homie_attr :format, required: lambda { |i| [:enum, :color].include?(i.datatype) }
|
17
|
-
|
18
|
-
attr_reader :value
|
19
|
-
|
20
|
-
def initialize(options = {})
|
21
|
-
options = options.dup
|
22
|
-
|
23
|
-
# enum shortcut
|
24
|
-
if enum = options.delete(:enum)
|
25
|
-
options[:datatype] = :enum
|
26
|
-
options[:format] = enum.collect { |i| i.to_s }.join(",")
|
27
|
-
end
|
28
|
-
|
29
|
-
super(options)
|
30
|
-
|
31
|
-
@value = options[:value]
|
32
|
-
end
|
33
|
-
|
34
|
-
def value=(value)
|
35
|
-
# TODO: check value conforms to expected datatype and format?
|
36
|
-
if value != @value
|
37
|
-
@value = value
|
38
|
-
changed
|
39
|
-
notify_observers(Time.now, self)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def settable?
|
44
|
-
@settable
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
1
|
+
require "observer"
|
2
|
+
|
3
|
+
module MQTT
|
4
|
+
module Homie
|
5
|
+
class Property < HomieObject
|
6
|
+
include Observable
|
7
|
+
|
8
|
+
DATA_TYPES = [:integer, :float, :boolean, :string, :enum, :color]
|
9
|
+
|
10
|
+
homie_id
|
11
|
+
homie_attr :name, default: ""
|
12
|
+
homie_attr :settable, default: false, datatype: :boolean
|
13
|
+
homie_attr :retained, default: true, datatype: :boolean
|
14
|
+
homie_attr :datatype, default: :string, enum: DATA_TYPES, datatype: Symbol
|
15
|
+
homie_attr :unit, default: ""
|
16
|
+
homie_attr :format, required: lambda { |i| [:enum, :color].include?(i.datatype) }
|
17
|
+
|
18
|
+
attr_reader :value
|
19
|
+
|
20
|
+
def initialize(options = {})
|
21
|
+
options = options.dup
|
22
|
+
|
23
|
+
# enum shortcut
|
24
|
+
if enum = options.delete(:enum)
|
25
|
+
options[:datatype] = :enum
|
26
|
+
options[:format] = enum.collect { |i| i.to_s }.join(",")
|
27
|
+
end
|
28
|
+
|
29
|
+
super(options)
|
30
|
+
|
31
|
+
@value = options[:value]
|
32
|
+
end
|
33
|
+
|
34
|
+
def value=(value)
|
35
|
+
# TODO: check value conforms to expected datatype and format?
|
36
|
+
if value != @value
|
37
|
+
@value = value
|
38
|
+
changed
|
39
|
+
notify_observers(Time.now, self)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def settable?
|
44
|
+
@settable
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/mqtt/homie/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
module MQTT
|
2
|
-
module Homie
|
3
|
-
VERSION = "0.1.
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module MQTT
|
2
|
+
module Homie
|
3
|
+
VERSION = "0.1.2"
|
4
|
+
end
|
5
|
+
end
|
data/lib/mqtt/homie.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
|
-
require "mqtt"
|
2
|
-
require "mqtt/homie/version"
|
3
|
-
|
4
|
-
module MQTT
|
5
|
-
module Homie
|
6
|
-
class Error < StandardError; end
|
7
|
-
|
8
|
-
class << self
|
9
|
-
attr_accessor :logger
|
10
|
-
|
11
|
-
def debug(message)
|
12
|
-
logger.debug(message) if logger
|
13
|
-
end
|
14
|
-
|
15
|
-
def device_builder(options = {})
|
16
|
-
MQTT::Homie::DeviceBuilder.new(options)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
require "mqtt/homie/homie_attribute"
|
23
|
-
require "mqtt/homie/homie_object"
|
24
|
-
require "mqtt/homie/network"
|
25
|
-
require "mqtt/homie/property"
|
26
|
-
require "mqtt/homie/node"
|
27
|
-
require "mqtt/homie/device"
|
28
|
-
require "mqtt/homie/client"
|
29
|
-
require "mqtt/homie/device_builder"
|
1
|
+
require "mqtt"
|
2
|
+
require "mqtt/homie/version"
|
3
|
+
|
4
|
+
module MQTT
|
5
|
+
module Homie
|
6
|
+
class Error < StandardError; end
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_accessor :logger
|
10
|
+
|
11
|
+
def debug(message)
|
12
|
+
logger.debug(message) if logger
|
13
|
+
end
|
14
|
+
|
15
|
+
def device_builder(options = {})
|
16
|
+
MQTT::Homie::DeviceBuilder.new(options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
require "mqtt/homie/homie_attribute"
|
23
|
+
require "mqtt/homie/homie_object"
|
24
|
+
require "mqtt/homie/network"
|
25
|
+
require "mqtt/homie/property"
|
26
|
+
require "mqtt/homie/node"
|
27
|
+
require "mqtt/homie/device"
|
28
|
+
require "mqtt/homie/client"
|
29
|
+
require "mqtt/homie/device_builder"
|
data/mqtt-homie.gemspec
CHANGED
@@ -1,37 +1,36 @@
|
|
1
|
-
lib = File.expand_path("lib", __dir__)
|
2
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require "mqtt/homie/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |spec|
|
6
|
-
spec.name = "mqtt-homie"
|
7
|
-
spec.version = MQTT::Homie::VERSION
|
8
|
-
spec.authors = ["Andrew Williams"]
|
9
|
-
spec.email = ["sobakasu@gmail.com"]
|
10
|
-
|
11
|
-
spec.summary = %q{A ruby interface for creating a device conforming to the MQTT Homie convention.}
|
12
|
-
spec.homepage = "https://github.com/sobakasu/mqtt-homie"
|
13
|
-
spec.license = "MIT"
|
14
|
-
|
15
|
-
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
|
-
|
17
|
-
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
-
spec.metadata["source_code_uri"] = "https://github.com/sobakasu/mqtt-homie"
|
19
|
-
spec.metadata["changelog_uri"] = "https://github.com/sobakasu/mqtt-homie/CHANGELOG"
|
20
|
-
|
21
|
-
# Specify which files should be added to the gem when it is released.
|
22
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
-
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
24
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
-
end
|
26
|
-
spec.bindir = "exe"
|
27
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
-
spec.require_paths = ["lib"]
|
29
|
-
|
30
|
-
spec.add_development_dependency "
|
31
|
-
spec.add_development_dependency "
|
32
|
-
|
33
|
-
|
34
|
-
spec.add_dependency "
|
35
|
-
spec.add_dependency "
|
36
|
-
|
37
|
-
end
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "mqtt/homie/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "mqtt-homie"
|
7
|
+
spec.version = MQTT::Homie::VERSION
|
8
|
+
spec.authors = ["Andrew Williams"]
|
9
|
+
spec.email = ["sobakasu@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{A ruby interface for creating a device conforming to the MQTT Homie convention.}
|
12
|
+
spec.homepage = "https://github.com/sobakasu/mqtt-homie"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
|
+
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = "https://github.com/sobakasu/mqtt-homie"
|
19
|
+
spec.metadata["changelog_uri"] = "https://github.com/sobakasu/mqtt-homie/CHANGELOG"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
end
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_development_dependency "rake"
|
31
|
+
spec.add_development_dependency "rspec"
|
32
|
+
|
33
|
+
spec.add_dependency "mqtt", "~> 0.6"
|
34
|
+
spec.add_dependency "sys-uname"
|
35
|
+
spec.add_dependency "macaddr"
|
36
|
+
end
|
metadata
CHANGED
@@ -1,100 +1,86 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mqtt-homie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Williams
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '2.0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '2.0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
19
|
+
version: '0'
|
34
20
|
type: :development
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- - "
|
24
|
+
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
26
|
+
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rspec
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- - "
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
33
|
+
version: '0'
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- - "
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
40
|
+
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: mqtt
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0.
|
47
|
+
version: '0.6'
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0.
|
54
|
+
version: '0.6'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: sys-uname
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- - "
|
59
|
+
- - ">="
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
61
|
+
version: '0'
|
76
62
|
type: :runtime
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- - "
|
66
|
+
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
68
|
+
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: macaddr
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- - "
|
73
|
+
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '0'
|
90
76
|
type: :runtime
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- - "
|
80
|
+
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
97
|
-
description:
|
82
|
+
version: '0'
|
83
|
+
description:
|
98
84
|
email:
|
99
85
|
- sobakasu@gmail.com
|
100
86
|
executables: []
|
@@ -106,7 +92,6 @@ files:
|
|
106
92
|
- ".travis.yml"
|
107
93
|
- CODE_OF_CONDUCT.md
|
108
94
|
- Gemfile
|
109
|
-
- Gemfile.lock
|
110
95
|
- LICENSE.txt
|
111
96
|
- README.md
|
112
97
|
- Rakefile
|
@@ -131,7 +116,7 @@ metadata:
|
|
131
116
|
homepage_uri: https://github.com/sobakasu/mqtt-homie
|
132
117
|
source_code_uri: https://github.com/sobakasu/mqtt-homie
|
133
118
|
changelog_uri: https://github.com/sobakasu/mqtt-homie/CHANGELOG
|
134
|
-
post_install_message:
|
119
|
+
post_install_message:
|
135
120
|
rdoc_options: []
|
136
121
|
require_paths:
|
137
122
|
- lib
|
@@ -146,9 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
131
|
- !ruby/object:Gem::Version
|
147
132
|
version: '0'
|
148
133
|
requirements: []
|
149
|
-
|
150
|
-
|
151
|
-
signing_key:
|
134
|
+
rubygems_version: 3.3.15
|
135
|
+
signing_key:
|
152
136
|
specification_version: 4
|
153
137
|
summary: A ruby interface for creating a device conforming to the MQTT Homie convention.
|
154
138
|
test_files: []
|
data/Gemfile.lock
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
mqtt-homie (0.1.0)
|
5
|
-
macaddr (~> 1.1)
|
6
|
-
mqtt (~> 0.5)
|
7
|
-
sys-uname (~> 1.0)
|
8
|
-
|
9
|
-
GEM
|
10
|
-
remote: https://rubygems.org/
|
11
|
-
specs:
|
12
|
-
diff-lcs (1.3)
|
13
|
-
ffi (1.11.1-x64-mingw32)
|
14
|
-
macaddr (1.7.2)
|
15
|
-
systemu (~> 2.6.5)
|
16
|
-
mqtt (0.5.0)
|
17
|
-
rake (10.5.0)
|
18
|
-
rspec (3.8.0)
|
19
|
-
rspec-core (~> 3.8.0)
|
20
|
-
rspec-expectations (~> 3.8.0)
|
21
|
-
rspec-mocks (~> 3.8.0)
|
22
|
-
rspec-core (3.8.1)
|
23
|
-
rspec-support (~> 3.8.0)
|
24
|
-
rspec-expectations (3.8.4)
|
25
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
26
|
-
rspec-support (~> 3.8.0)
|
27
|
-
rspec-mocks (3.8.1)
|
28
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
-
rspec-support (~> 3.8.0)
|
30
|
-
rspec-support (3.8.2)
|
31
|
-
sys-uname (1.0.4)
|
32
|
-
ffi (>= 1.0.0)
|
33
|
-
systemu (2.6.5)
|
34
|
-
|
35
|
-
PLATFORMS
|
36
|
-
x64-mingw32
|
37
|
-
|
38
|
-
DEPENDENCIES
|
39
|
-
bundler (~> 2.0)
|
40
|
-
mqtt-homie!
|
41
|
-
rake (~> 10.0)
|
42
|
-
rspec (~> 3.0)
|
43
|
-
|
44
|
-
BUNDLED WITH
|
45
|
-
2.0.2
|