dji_mqtt_connect 0.1.4.1 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/dji_mqtt_connect/marshals/sys/product/status_marshal.rb +4 -5
- data/lib/dji_mqtt_connect/marshals/thing/product/events_marshal.rb +42 -4
- data/lib/dji_mqtt_connect/marshals/thing/product/requests_marshal.rb +4 -5
- data/lib/dji_mqtt_connect/messages/thing/product/hms_events_message.rb +2 -2
- data/lib/dji_mqtt_connect/messages/thing/product/status_code_events_message.rb +16 -0
- data/lib/dji_mqtt_connect/utils/message_parsing.rb +1 -2
- data/lib/dji_mqtt_connect/version.rb +1 -1
- data/lib/dji_mqtt_connect.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3489491c80c51e9cbebab42f61424b155f1f4d59d33a148e2b44e7a4c614656
|
4
|
+
data.tar.gz: 8a54082a6edf3be34c1ddb1db361d1d684638e1570eb0a68a69ed21c7f13da1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6881b79bc2c695280c83d1ed70515cd26a8aa842a6676c3775b038f42b36eac76712462606676239638a626a838e7a8ecfdfae64004dd6401c23d37d0ce2605a
|
7
|
+
data.tar.gz: c1f9ae6a703e2143feb06798566e1297a2e883f438ab78d1713e9392380b090c359a85b93707e7d341de9e7822509b83446e904b9c567b63e91b0806eaec56fb
|
data/Gemfile.lock
CHANGED
@@ -13,10 +13,8 @@ module DjiMqttConnect
|
|
13
13
|
import Dry::Transformer::HashTransformations
|
14
14
|
|
15
15
|
define! do
|
16
|
-
|
17
|
-
|
18
|
-
copy_keys data: :_data
|
19
|
-
rename_keys method: :_method
|
16
|
+
copy_keys "data" => "_data"
|
17
|
+
rename_keys "method" => "_method"
|
20
18
|
end
|
21
19
|
end
|
22
20
|
|
@@ -27,9 +25,10 @@ module DjiMqttConnect
|
|
27
25
|
|
28
26
|
# Transform the message
|
29
27
|
transformed_message = attribute_transformer.call(parsed_message)
|
28
|
+
message_method = transformed_message["_method"]
|
30
29
|
|
31
30
|
# Build an instance of the class, or a generic message from the current class
|
32
|
-
message_class =
|
31
|
+
message_class = message_class_from_message_method(message_method, StatusMessage)
|
33
32
|
message_class.new transformed_message
|
34
33
|
rescue JSON::ParserError => e
|
35
34
|
raise ParseError.new(e, "Unable to parse message as JSON")
|
@@ -11,13 +11,50 @@ module DjiMqttConnect
|
|
11
11
|
|
12
12
|
# Rename pesky `method` argument to `_method` and makes a copy of the raw data
|
13
13
|
class AttributeTransformer < Dry::Transformer::Pipe
|
14
|
+
import Dry::Transformer::Conditional
|
15
|
+
import Dry::Transformer::ArrayTransformations
|
14
16
|
import Dry::Transformer::HashTransformations
|
15
17
|
|
16
18
|
define! do
|
17
|
-
|
19
|
+
# Keep a copy of the original data hash
|
20
|
+
copy_keys "data" => "_data"
|
18
21
|
|
19
|
-
|
20
|
-
|
22
|
+
# Fix the legacy hms message
|
23
|
+
guard ->(message) { message.dig("data", "method") == "hms" } do
|
24
|
+
map_value "data" do
|
25
|
+
reject_keys ["event"]
|
26
|
+
|
27
|
+
map_value "output" do
|
28
|
+
map_value "codes" do
|
29
|
+
map_array do
|
30
|
+
nest "args", ["component_index", "sensor_index"]
|
31
|
+
|
32
|
+
map_value "id", ->(id) { "0x#{id}" }
|
33
|
+
rename_keys "id" => "code"
|
34
|
+
|
35
|
+
deep_merge({"module" => 3}) # hardcoded to hms module
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
unwrap "output", ["codes"]
|
41
|
+
|
42
|
+
rename_keys "codes" => "list"
|
43
|
+
end
|
44
|
+
|
45
|
+
unwrap "data", ["method"]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Fix the legacy status code message
|
49
|
+
guard ->(message) { message.dig("data", "method") == "status_code" } do
|
50
|
+
map_value "data" do
|
51
|
+
unwrap "output", ["codes"]
|
52
|
+
end
|
53
|
+
|
54
|
+
unwrap "data", ["method"]
|
55
|
+
end
|
56
|
+
|
57
|
+
rename_keys "method" => "_method"
|
21
58
|
end
|
22
59
|
end
|
23
60
|
|
@@ -28,9 +65,10 @@ module DjiMqttConnect
|
|
28
65
|
|
29
66
|
# Transform the message
|
30
67
|
transformed_message = attribute_transformer.call(parsed_message)
|
68
|
+
message_method = transformed_message["_method"]
|
31
69
|
|
32
70
|
# Build an instance of the class, or a generic message from the current class
|
33
|
-
message_class =
|
71
|
+
message_class = message_class_from_message_method(message_method, EventsMessage)
|
34
72
|
message_class.new transformed_message
|
35
73
|
rescue JSON::ParserError => e
|
36
74
|
raise ParseError.new(e, "Unable to parse message as JSON")
|
@@ -14,10 +14,8 @@ module DjiMqttConnect
|
|
14
14
|
import Dry::Transformer::HashTransformations
|
15
15
|
|
16
16
|
define! do
|
17
|
-
|
18
|
-
|
19
|
-
copy_keys data: :_data
|
20
|
-
rename_keys method: :_method
|
17
|
+
copy_keys "data" => "_data"
|
18
|
+
rename_keys "method" => "_method"
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
@@ -28,9 +26,10 @@ module DjiMqttConnect
|
|
28
26
|
|
29
27
|
# Transform the message
|
30
28
|
transformed_message = attribute_transformer.call(parsed_message)
|
29
|
+
message_method = transformed_message["_method"]
|
31
30
|
|
32
31
|
# Build an instance of the class, or a generic message from the current class
|
33
|
-
message_class =
|
32
|
+
message_class = message_class_from_message_method(message_method, RequestsMessage)
|
34
33
|
message_class.new transformed_message
|
35
34
|
rescue JSON::ParserError => e
|
36
35
|
raise ParseError.new(e, "Unable to parse message as JSON")
|
@@ -14,12 +14,12 @@ module DjiMqttConnect
|
|
14
14
|
attribute :module, Types::Integer.enum(0, 1, 2, 3)
|
15
15
|
|
16
16
|
# {"0":"on the ground","1":"in the sky"}
|
17
|
-
attribute :in_the_sky, Types::Integer.enum(0, 1)
|
17
|
+
attribute? :in_the_sky, Types::Integer.enum(0, 1)
|
18
18
|
|
19
19
|
attribute :code, Types::String
|
20
20
|
|
21
21
|
# {"0":"No","1":"Yes"}
|
22
|
-
attribute :imminent, Types::Integer.enum(0, 1)
|
22
|
+
attribute? :imminent, Types::Integer.enum(0, 1)
|
23
23
|
|
24
24
|
attribute :args do
|
25
25
|
attribute :component_index, Types::Integer
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DjiMqttConnect
|
4
|
+
module Thing::Product
|
5
|
+
# NOTE: Message is not documented, but observed from M30 Drones
|
6
|
+
class StatusCodeEventsMessage < EventsMessage
|
7
|
+
attribute :_method, Types::String.enum("status_code")
|
8
|
+
|
9
|
+
attribute :data do
|
10
|
+
attribute :codes, Types::Array do
|
11
|
+
attribute :id, Types::Integer
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -5,8 +5,7 @@ module DjiMqttConnect
|
|
5
5
|
module MessageParsing
|
6
6
|
private
|
7
7
|
|
8
|
-
def
|
9
|
-
message_method = parsed_message["method"]
|
8
|
+
def message_class_from_message_method(message_method, generic_class)
|
10
9
|
return generic_class if message_method.blank?
|
11
10
|
|
12
11
|
# update_topo => UpdateTopo
|
data/lib/dji_mqtt_connect.rb
CHANGED
@@ -34,6 +34,7 @@ module DjiMqttConnect
|
|
34
34
|
module Product
|
35
35
|
# Messages
|
36
36
|
autoload :HmsEventsMessage, "dji_mqtt_connect/messages/thing/product/hms_events_message"
|
37
|
+
autoload :StatusCodeEventsMessage, "dji_mqtt_connect/messages/thing/product/status_code_events_message"
|
37
38
|
autoload :EventsMessage, "dji_mqtt_connect/messages/thing/product/events_message"
|
38
39
|
|
39
40
|
autoload :OsdMessage, "dji_mqtt_connect/messages/thing/product/osd_message"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dji_mqtt_connect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sphere Drones
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/dji_mqtt_connect/messages/thing/product/osd_message.rb
|
133
133
|
- lib/dji_mqtt_connect/messages/thing/product/remote_osd_message.rb
|
134
134
|
- lib/dji_mqtt_connect/messages/thing/product/requests_message.rb
|
135
|
+
- lib/dji_mqtt_connect/messages/thing/product/status_code_events_message.rb
|
135
136
|
- lib/dji_mqtt_connect/messages/thing/product/storage_config_get_requests_message.rb
|
136
137
|
- lib/dji_mqtt_connect/messages/thing/product/storage_config_get_requests_reply_message.rb
|
137
138
|
- lib/dji_mqtt_connect/mixins/latitude_conditional.rb
|