dji_mqtt_connect 0.1.4.1 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fbb1f6a5cee41059ec3528a88ec50e9d0c558c41280024d45556fcab092d6508
4
- data.tar.gz: d7b5bd0c3e7d06e098b0c384d40175d1e284290ee12a4de1a316c91da01157e6
3
+ metadata.gz: f3489491c80c51e9cbebab42f61424b155f1f4d59d33a148e2b44e7a4c614656
4
+ data.tar.gz: 8a54082a6edf3be34c1ddb1db361d1d684638e1570eb0a68a69ed21c7f13da1f
5
5
  SHA512:
6
- metadata.gz: 931690b396410a56c174dc004a64c466e843d9f48d6cb6467a74d3e02116c68bc97390791d586f65db2a8cafa00263e8eff420481ffe52ff3e61d8b20bd403f2
7
- data.tar.gz: 4356a30715205936278d0a1ef01e997b9551131ae1e581dd094008b1129f80de93aa2d8713fc843bb4d5bc5074140a769447d7ff4214ed8af5a1f2bfc44a2f43
6
+ metadata.gz: 6881b79bc2c695280c83d1ed70515cd26a8aa842a6676c3775b038f42b36eac76712462606676239638a626a838e7a8ecfdfae64004dd6401c23d37d0ce2605a
7
+ data.tar.gz: c1f9ae6a703e2143feb06798566e1297a2e883f438ab78d1713e9392380b090c359a85b93707e7d341de9e7822509b83446e904b9c567b63e91b0806eaec56fb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dji_mqtt_connect (0.1.4.1)
4
+ dji_mqtt_connect (0.1.6)
5
5
  activesupport (>= 6.0, <= 8)
6
6
  dry-struct (~> 1.6)
7
7
  dry-transformer (~> 1.0)
@@ -13,10 +13,8 @@ module DjiMqttConnect
13
13
  import Dry::Transformer::HashTransformations
14
14
 
15
15
  define! do
16
- symbolize_keys
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 = message_class_from_method_value(parsed_message, StatusMessage)
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
- symbolize_keys
19
+ # Keep a copy of the original data hash
20
+ copy_keys "data" => "_data"
18
21
 
19
- copy_keys data: :_data
20
- rename_keys method: :_method
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 = message_class_from_method_value(parsed_message, EventsMessage)
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
- symbolize_keys
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 = message_class_from_method_value(parsed_message, RequestsMessage)
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 message_class_from_method_value(parsed_message, generic_class)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DjiMqttConnect
4
- VERSION = "0.1.4.1"
4
+ VERSION = "0.1.6"
5
5
  end
@@ -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.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-16 00:00:00.000000000 Z
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