mqtt-homeassistant 0.1.5 → 1.0.0
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/lib/mqtt/home_assistant/client.rb +140 -0
- data/lib/mqtt/home_assistant/version.rb +1 -1
- data/lib/mqtt/home_assistant.rb +546 -486
- metadata +8 -66
- data/lib/mqtt/home_assistant/homie/device.rb +0 -9
- data/lib/mqtt/home_assistant/homie/node.rb +0 -74
- data/lib/mqtt/home_assistant/homie/property.rb +0 -62
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mqtt-homeassistant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cody Cutrer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: homie-mqtt
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: byebug
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '11.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '11.0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rake
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,49 +52,7 @@ dependencies:
|
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '13.0'
|
69
|
-
|
70
|
-
name: rubocop
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.23'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.23'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rubocop-performance
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '1.12'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '1.12'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rubocop-rake
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0.6'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0.6'
|
111
|
-
description:
|
55
|
+
description:
|
112
56
|
email: cody@cutrer.com'
|
113
57
|
executables: []
|
114
58
|
extensions: []
|
@@ -116,16 +60,14 @@ extra_rdoc_files: []
|
|
116
60
|
files:
|
117
61
|
- lib/mqtt-homeassistant.rb
|
118
62
|
- lib/mqtt/home_assistant.rb
|
119
|
-
- lib/mqtt/home_assistant/
|
120
|
-
- lib/mqtt/home_assistant/homie/node.rb
|
121
|
-
- lib/mqtt/home_assistant/homie/property.rb
|
63
|
+
- lib/mqtt/home_assistant/client.rb
|
122
64
|
- lib/mqtt/home_assistant/version.rb
|
123
65
|
homepage: https://github.com/ccutrer/ruby-mqtt-homeassistant
|
124
66
|
licenses:
|
125
67
|
- MIT
|
126
68
|
metadata:
|
127
69
|
rubygems_mfa_required: 'true'
|
128
|
-
post_install_message:
|
70
|
+
post_install_message:
|
129
71
|
rdoc_options: []
|
130
72
|
require_paths:
|
131
73
|
- lib
|
@@ -140,8 +82,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
82
|
- !ruby/object:Gem::Version
|
141
83
|
version: '0'
|
142
84
|
requirements: []
|
143
|
-
rubygems_version: 3.
|
144
|
-
signing_key:
|
85
|
+
rubygems_version: 3.5.11
|
86
|
+
signing_key:
|
145
87
|
specification_version: 4
|
146
88
|
summary: Library for publishing device auto-discovery configuration for Home Assistant
|
147
89
|
via MQTT.
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module MQTT
|
4
|
-
module HomeAssistant
|
5
|
-
module Homie
|
6
|
-
module Node
|
7
|
-
{
|
8
|
-
climate: %i[action
|
9
|
-
aux
|
10
|
-
away_mode
|
11
|
-
current_temperature
|
12
|
-
fan_mode
|
13
|
-
mode
|
14
|
-
hold
|
15
|
-
power
|
16
|
-
swing_mode
|
17
|
-
temperature
|
18
|
-
temperature_high
|
19
|
-
temperature_low],
|
20
|
-
fan: [nil, :oscillation],
|
21
|
-
humidifier: [nil, :target, :mode],
|
22
|
-
light: [nil, :brightness, :color_mode, :color_temp, :effect, :hs, :rgb, :white, :xy]
|
23
|
-
}.each do |(integration, properties)|
|
24
|
-
has_nil = properties.include?(nil)
|
25
|
-
method_arguments = []
|
26
|
-
method_arguments << "property" if has_nil
|
27
|
-
method_arguments.concat(properties.compact.map { |p| "#{p}_property: nil" })
|
28
|
-
transforms = []
|
29
|
-
transforms << "property = self[property] if property.is_a?(String)"
|
30
|
-
transforms.concat(
|
31
|
-
properties.compact.map do |p|
|
32
|
-
"kwargs[:#{p}_property] = #{p}_property.is_a?(String) ? self[#{p}_property] : #{p}_property"
|
33
|
-
end
|
34
|
-
)
|
35
|
-
args_code = has_nil ? "args = [property]" : "args = []"
|
36
|
-
|
37
|
-
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
38
|
-
def hass_#{integration}(#{method_arguments.join(", ")}, device: nil, discovery_prefix: nil, **kwargs)
|
39
|
-
#{transforms.join("\n")}
|
40
|
-
discovery_prefix ||= self.device.home_assistant_discovery_prefix
|
41
|
-
device = self.device.home_assistant_device.merge(device || {}) if self.device.home_assistant_device
|
42
|
-
|
43
|
-
kwargs[:device] = device
|
44
|
-
kwargs[:discovery_prefix] = discovery_prefix
|
45
|
-
#{args_code}
|
46
|
-
if published?
|
47
|
-
HomeAssistant.publish_#{integration}(*args, **kwargs)
|
48
|
-
else
|
49
|
-
pending_hass_registrations << [:publish_#{integration}, args, kwargs]
|
50
|
-
end
|
51
|
-
end
|
52
|
-
RUBY
|
53
|
-
end
|
54
|
-
|
55
|
-
def publish
|
56
|
-
super.tap do
|
57
|
-
@pending_hass_registrations&.each do |(method, args, kwargs)|
|
58
|
-
HomeAssistant.public_send(method, *args, **kwargs)
|
59
|
-
end
|
60
|
-
@pending_hass_registrations = nil
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def pending_hass_registrations
|
67
|
-
@pending_hass_registrations ||= []
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
MQTT::Homie::Node.prepend(MQTT::HomeAssistant::Homie::Node)
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module MQTT
|
4
|
-
module HomeAssistant
|
5
|
-
module Homie
|
6
|
-
module Property
|
7
|
-
def initialize(*args, hass: nil, **kwargs)
|
8
|
-
super(*args, **kwargs)
|
9
|
-
|
10
|
-
return unless hass
|
11
|
-
|
12
|
-
case hass
|
13
|
-
when Symbol
|
14
|
-
public_send("hass_#{hass}")
|
15
|
-
when Hash
|
16
|
-
raise ArgumentError, "hass must only contain one item" unless hass.length == 1
|
17
|
-
|
18
|
-
public_send("hass_#{hass.first.first}", **hass.first.last)
|
19
|
-
else
|
20
|
-
raise ArgumentError, "hass must be a Symbol or a Hash of HASS device type to additional HASS options"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
%i[binary_sensor fan humidifier light number scene select sensor switch].each do |integration|
|
25
|
-
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
26
|
-
def hass_#{integration}(device: nil, discovery_prefix: nil, **kwargs)
|
27
|
-
discovery_prefix ||= self.device.home_assistant_discovery_prefix
|
28
|
-
device = self.device.home_assistant_device.merge(device || {}) if self.device.home_assistant_device
|
29
|
-
|
30
|
-
kwargs[:device] = device
|
31
|
-
kwargs[:discovery_prefix] = discovery_prefix
|
32
|
-
if published?
|
33
|
-
HomeAssistant.publish_#{integration}(self, **kwargs)
|
34
|
-
else
|
35
|
-
kwargs[:method] = :publish_#{integration}
|
36
|
-
pending_hass_registrations << kwargs
|
37
|
-
end
|
38
|
-
end
|
39
|
-
RUBY
|
40
|
-
end
|
41
|
-
|
42
|
-
def publish
|
43
|
-
super.tap do
|
44
|
-
@pending_hass_registrations&.each do |entity|
|
45
|
-
method = entity.delete(:method)
|
46
|
-
HomeAssistant.public_send(method, self, **entity)
|
47
|
-
end
|
48
|
-
@pending_hass_registrations = nil
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def pending_hass_registrations
|
55
|
-
@pending_hass_registrations ||= []
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
MQTT::Homie::Property.prepend(MQTT::HomeAssistant::Homie::Property)
|