homie-mqtt 1.3.0 → 1.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mqtt/homie/device.rb +5 -2
- data/lib/mqtt/homie/property.rb +26 -3
- data/lib/mqtt/homie/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe33f7f3d3d6588a385857dfad083584df0de5af3e66e540732dc3307b7d8a0f
|
4
|
+
data.tar.gz: ba032b7b5760ac2a71915ebbbc4e3671cceff13bcf3b75bba3181b86a0b3c015
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7dabb99327ba052edef139511680ab1a9c5c90e21ce0c3229585e238846f5a2f6abd42365bb2f73cf43767b55e41ad091d45d1c5003fd86d91599d52e73347f
|
7
|
+
data.tar.gz: a302d00a71bcde1495604da147e2d0e200a0dc686a074cd285e95d1861bc334007cd94a45d79d206c19c80dc5bd93dcec504c07488ae362cc94d592986663a8f
|
data/lib/mqtt/homie/device.rb
CHANGED
@@ -6,6 +6,8 @@ module MQTT
|
|
6
6
|
module Homie
|
7
7
|
class Device < Base
|
8
8
|
attr_reader :root_topic, :state, :mqtt
|
9
|
+
attr_accessor :logger
|
10
|
+
attr_accessor :out_of_band_topic_proc
|
9
11
|
|
10
12
|
def initialize(id, name, root_topic: nil, mqtt: nil, clear_topics: true, &block)
|
11
13
|
super(id, name)
|
@@ -13,7 +15,7 @@ module MQTT
|
|
13
15
|
@state = :init
|
14
16
|
@nodes = {}
|
15
17
|
@published = false
|
16
|
-
@
|
18
|
+
@out_of_band_topic_proc = block
|
17
19
|
mqtt = MQTT::Client.new(mqtt) if mqtt.is_a?(String)
|
18
20
|
@mqtt = mqtt || MQTT::Client.new
|
19
21
|
@mqtt.set_will("#{topic}/$state", "lost", retain: true, qos: 1)
|
@@ -87,12 +89,13 @@ module MQTT
|
|
87
89
|
Thread.current.report_on_exception = false
|
88
90
|
|
89
91
|
mqtt.get do |packet|
|
92
|
+
logger&.debug("received packet at #{packet.topic} with payload #{packet.payload.inspect}")
|
90
93
|
match = packet.topic.match(topic_regex)
|
91
94
|
node = @nodes[match[:node]] if match
|
92
95
|
property = node[match[:property]] if node
|
93
96
|
|
94
97
|
unless property&.settable?
|
95
|
-
@
|
98
|
+
@out_of_band_topic_proc&.call(packet.topic, packet.payload)
|
96
99
|
next
|
97
100
|
end
|
98
101
|
|
data/lib/mqtt/homie/property.rb
CHANGED
@@ -6,7 +6,7 @@ module MQTT
|
|
6
6
|
attr_reader :node, :datatype, :format, :unit, :value
|
7
7
|
|
8
8
|
def initialize(node, id, name, datatype, value = nil, format: nil, retained: true, unit: nil, &block)
|
9
|
-
raise ArgumentError, "Invalid Homie datatype" unless %
|
9
|
+
raise ArgumentError, "Invalid Homie datatype" unless %i[string integer float boolean enum color datetime duration].include?(datatype)
|
10
10
|
raise ArgumentError, "retained must be boolean" unless [true, false].include?(retained)
|
11
11
|
format = format.join(",") if format.is_a?(Array) && datatype == :enum
|
12
12
|
if %i{integer float}.include?(datatype) && format.is_a?(Range)
|
@@ -51,7 +51,7 @@ module MQTT
|
|
51
51
|
def value=(value)
|
52
52
|
if @value != value
|
53
53
|
@value = value if retained?
|
54
|
-
|
54
|
+
publish_value if @published
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -109,6 +109,18 @@ module MQTT
|
|
109
109
|
elsif format == 'hsv'
|
110
110
|
return if value.first > 360 || value[1..2].max > 100
|
111
111
|
end
|
112
|
+
when :datetime
|
113
|
+
begin
|
114
|
+
value = Time.parse(value)
|
115
|
+
rescue ArgumentError
|
116
|
+
return
|
117
|
+
end
|
118
|
+
when :duration
|
119
|
+
begin
|
120
|
+
value = ActiveSupport::Duration.parse(value)
|
121
|
+
rescue ActiveSupport::Duration::ISO8601Parser::ParsingError
|
122
|
+
return
|
123
|
+
end
|
112
124
|
end
|
113
125
|
|
114
126
|
@block.arity == 2 ? @block.call(value, self) : @block.call(value)
|
@@ -128,7 +140,7 @@ module MQTT
|
|
128
140
|
mqtt.publish("#{topic}/$settable", "true", retain: true, qos: 1) if settable?
|
129
141
|
mqtt.publish("#{topic}/$retained", "false", retain: true, qos: 1) unless retained?
|
130
142
|
mqtt.publish("#{topic}/$unit", unit, retain: true, qos: 1) if unit
|
131
|
-
|
143
|
+
publish_value unless value.nil?
|
132
144
|
subscribe
|
133
145
|
end
|
134
146
|
|
@@ -152,6 +164,17 @@ module MQTT
|
|
152
164
|
mqtt.unsubscribe("#{topic}/set") if settable?
|
153
165
|
mqtt.publish(topic, retain: retained?, qos: 0) if !value.nil? && retained?
|
154
166
|
end
|
167
|
+
|
168
|
+
private
|
169
|
+
|
170
|
+
def publish_value
|
171
|
+
serialized = value
|
172
|
+
serialized = serialized&.iso8601 if %i[datetime duration].include?(datatype)
|
173
|
+
serialized = serialized.to_s
|
174
|
+
|
175
|
+
node.device.logger&.debug("publishing #{serialized.inspect} to #{topic}")
|
176
|
+
mqtt.publish(topic, serialized, retain: retained?, qos: 1)
|
177
|
+
end
|
155
178
|
end
|
156
179
|
end
|
157
180
|
end
|
data/lib/mqtt/homie/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: homie-mqtt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cody Cutrer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mqtt-ccutrer
|