dji_mqtt_connect 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/dji_mqtt_connect/client.rb +5 -0
  4. data/lib/dji_mqtt_connect/factories.rb +358 -2
  5. data/lib/dji_mqtt_connect/marshals/thing/product/services_reply_marshal.rb +47 -0
  6. data/lib/dji_mqtt_connect/messages/thing/product/events/cover_close.rb +65 -0
  7. data/lib/dji_mqtt_connect/messages/thing/product/events/cover_open.rb +65 -0
  8. data/lib/dji_mqtt_connect/messages/thing/product/events/device_exit_homing_notify.rb +36 -0
  9. data/lib/dji_mqtt_connect/messages/thing/product/events/device_log.rb +20 -0
  10. data/lib/dji_mqtt_connect/messages/thing/product/{file_upload_callback_events_message.rb → events/file_upload_callback.rb} +0 -7
  11. data/lib/dji_mqtt_connect/messages/thing/product/{fileupload_progress_events_message.rb → events/fileupload_progress.rb} +4 -11
  12. data/lib/dji_mqtt_connect/messages/thing/product/events/flighttask_progress.rb +67 -0
  13. data/lib/dji_mqtt_connect/messages/thing/product/events/flighttask_ready.rb +15 -0
  14. data/lib/dji_mqtt_connect/messages/thing/product/{highest_priority_upload_flighttask_media_events_message.rb → events/highest_priority_upload_flighttask_media.rb} +0 -7
  15. data/lib/dji_mqtt_connect/messages/thing/product/events_message.rb +7 -0
  16. data/lib/dji_mqtt_connect/messages/thing/product/events_reply_message.rb +3 -0
  17. data/lib/dji_mqtt_connect/messages/thing/product/requests/flighttask_resource_get.rb +15 -0
  18. data/lib/dji_mqtt_connect/messages/thing/product/requests_reply/flighttask_resource_get.rb +44 -0
  19. data/lib/dji_mqtt_connect/messages/thing/product/services/alarm_state_switch.rb +29 -0
  20. data/lib/dji_mqtt_connect/messages/thing/product/{cover_close_services_message.rb → services/cover_close.rb} +2 -5
  21. data/lib/dji_mqtt_connect/messages/thing/product/{cover_open_services_message.rb → services/cover_open.rb} +2 -5
  22. data/lib/dji_mqtt_connect/messages/thing/product/services/debug_mode_close.rb +20 -0
  23. data/lib/dji_mqtt_connect/messages/thing/product/services/debug_mode_open.rb +20 -0
  24. data/lib/dji_mqtt_connect/messages/thing/product/{fileupload_list_services_message.rb → services/fileupload_list.rb} +1 -4
  25. data/lib/dji_mqtt_connect/messages/thing/product/{fileupload_start_services_message.rb → services/fileupload_start.rb} +1 -5
  26. data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_execute.rb +27 -0
  27. data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_pause.rb +20 -0
  28. data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_prepare.rb +86 -0
  29. data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_recovery.rb +22 -0
  30. data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_undo.rb +27 -0
  31. data/lib/dji_mqtt_connect/messages/thing/product/services/return_home.rb +25 -0
  32. data/lib/dji_mqtt_connect/messages/thing/product/services/return_home_cancel.rb +28 -0
  33. data/lib/dji_mqtt_connect/messages/thing/product/services_message.rb +14 -0
  34. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/alarm_state_switch.rb +27 -0
  35. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/cover_close.rb +27 -0
  36. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/cover_open.rb +27 -0
  37. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/debug_mode_close.rb +27 -0
  38. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/debug_mode_open.rb +27 -0
  39. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_execute.rb +9 -0
  40. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_pause.rb +9 -0
  41. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_prepare.rb +9 -0
  42. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_recovery.rb +9 -0
  43. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_undo.rb +9 -0
  44. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/return_home.rb +27 -0
  45. data/lib/dji_mqtt_connect/messages/thing/product/services_reply/return_home_cancel.rb +9 -0
  46. data/lib/dji_mqtt_connect/messages/thing/product/services_reply_message.rb +23 -0
  47. data/lib/dji_mqtt_connect/topics/thing/product/services_reply.rb +40 -0
  48. data/lib/dji_mqtt_connect/types.rb +2 -0
  49. data/lib/dji_mqtt_connect/version.rb +1 -1
  50. data/lib/dji_mqtt_connect.rb +61 -26
  51. metadata +60 -26
  52. /data/lib/dji_mqtt_connect/messages/sys/product/{update_topo_status_message.rb → status/update_topo.rb} +0 -0
  53. /data/lib/dji_mqtt_connect/messages/sys/product/{update_topo_status_reply_message.rb → status_reply/update_topo.rb} +0 -0
  54. /data/lib/dji_mqtt_connect/messages/thing/product/{hms_events_message.rb → events/hms.rb} +0 -0
  55. /data/lib/dji_mqtt_connect/messages/thing/product/{status_code_events_message.rb → events/status_code.rb} +0 -0
  56. /data/lib/dji_mqtt_connect/messages/thing/product/{dock_osd_message.rb → osd/dock.rb} +0 -0
  57. /data/lib/dji_mqtt_connect/messages/thing/product/{drone_osd_message.rb → osd/drone.rb} +0 -0
  58. /data/lib/dji_mqtt_connect/messages/thing/product/{remote_osd_message.rb → osd/remote.rb} +0 -0
  59. /data/lib/dji_mqtt_connect/messages/thing/product/{airport_bind_status_requests_message.rb → requests/airport_bind_status.rb} +0 -0
  60. /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_bind_requests_message.rb → requests/airport_organization_bind.rb} +0 -0
  61. /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_get_requests_message.rb → requests/airport_organization_get.rb} +0 -0
  62. /data/lib/dji_mqtt_connect/messages/thing/product/{config_requests_message.rb → requests/config.rb} +0 -0
  63. /data/lib/dji_mqtt_connect/messages/thing/product/{storage_config_get_requests_message.rb → requests/storage_config_get.rb} +0 -0
  64. /data/lib/dji_mqtt_connect/messages/thing/product/{airport_bind_status_requests_reply_message.rb → requests_reply/airport_bind_status.rb} +0 -0
  65. /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_bind_requests_reply_message.rb → requests_reply/airport_organization_bind.rb} +0 -0
  66. /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_get_requests_reply_message.rb → requests_reply/airport_organization_get.rb} +0 -0
  67. /data/lib/dji_mqtt_connect/messages/thing/product/{config_requests_reply_message.rb → requests_reply/config.rb} +0 -0
  68. /data/lib/dji_mqtt_connect/messages/thing/product/{storage_config_get_requests_reply_message.rb → requests_reply/storage_config_get.rb} +0 -0
@@ -5,9 +5,6 @@ module DjiMqttConnect
5
5
  class FileUploadCallbackEventsMessage < EventsMessage
6
6
  attribute :_method, Types::String.enum("file_upload_callback")
7
7
 
8
- # NOTE: Not documented, but appears in examples
9
- attribute? :need_reply, Types::Integer.enum(0, 1)
10
-
11
8
  attribute :data do
12
9
  attribute :file do
13
10
  attribute :object_key, Types::String
@@ -51,10 +48,6 @@ module DjiMqttConnect
51
48
 
52
49
  attribute :result, Types::Integer
53
50
  end
54
-
55
- def need_reply?
56
- need_reply == 1
57
- end
58
51
  end
59
52
  end
60
53
  end
@@ -6,9 +6,6 @@ module DjiMqttConnect
6
6
  class FileuploadProgressEventsMessage < EventsMessage
7
7
  attribute :_method, Types::String.enum("fileupload_progress")
8
8
 
9
- # NOTE: Not documented, but appears in examples
10
- attribute? :need_reply, Types::Integer.enum(0, 1)
11
-
12
9
  attribute :data do
13
10
  attribute :output do
14
11
  attribute :ext do
@@ -19,15 +16,15 @@ module DjiMqttConnect
19
16
  attribute :size, Types::Integer
20
17
  attribute :device_sn, Types::String
21
18
  attribute :key, Types::String
22
- attribute :fingerprint, Types::String
19
+ attribute? :fingerprint, Types::String
23
20
 
24
21
  attribute :progress do
25
22
  attribute :current_step, Types::Integer
26
23
  attribute? :total_step, Types::Integer
27
- attribute :prgress, Types::Integer
28
- attribute :finish_time, Types::Timestamp
24
+ attribute :progress, Types::Integer
25
+ attribute? :finish_time, Types::Timestamp
29
26
  attribute :upload_rate, Types::Integer
30
- attribute :result, Types::Integer
27
+ attribute? :result, Types::Integer
31
28
  attribute :status, Types::String
32
29
  end
33
30
  end
@@ -35,10 +32,6 @@ module DjiMqttConnect
35
32
  attribute :status, Types::String
36
33
  end
37
34
  end
38
-
39
- def need_reply?
40
- need_reply == 1
41
- end
42
35
  end
43
36
  end
44
37
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Report wayline task progress
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#report-wayline-task-progress
7
+ class FlighttaskProgressEventsMessage < EventsMessage
8
+ attribute :_method, Types::String.enum("flighttask_progress")
9
+
10
+ attribute :data do
11
+ attribute :output do
12
+ attribute :ext do
13
+ attribute :current_waypoint_index, Types::Integer
14
+ attribute :media_count, Types::Integer
15
+ attribute :track_id, Types::String
16
+ attribute :flight_id, Types::String
17
+
18
+ attribute :break_point do
19
+ attribute :index, Types::Integer
20
+
21
+ # {"0":"On the wayline segment","1":"On the waypoint"}
22
+ attribute :state, Types::Integer.enum(0, 1)
23
+
24
+ # {"min":"0","max":"1.0"}
25
+ attribute :progress, Types::JSON::Decimal.constrained(gteq: 0, lteq: 1.0)
26
+
27
+ attribute :wayline_id, Types::Integer
28
+
29
+ attribute :break_reason, Types::Integer
30
+
31
+ attribute :latitude, Types::Latitude
32
+ attribute :longitude, Types::Longitude
33
+
34
+ # {"unit":"m","unitName":"meter"}
35
+ attribute :height, Types::JSON::Decimal
36
+
37
+ attribute :attitude_head, Types::Integer
38
+ end
39
+ end
40
+
41
+ # {"partially_done":"partially done","sent":"sent","in_progress":"in progress","ok":"success","paused":"paused","rejected":"rejected","failed":"failed","canceled":"canceled or stopped","timeout":"timeout"}
42
+ attribute :status, Types::String.enum(
43
+ "partially_done",
44
+ "sent",
45
+ "in_progress",
46
+ "ok",
47
+ "paused",
48
+ "rejected",
49
+ "failed",
50
+ "canceled",
51
+ "timeout"
52
+ )
53
+
54
+ attribute :progress do
55
+ # {"0-4":"MissionCenter starting, checking and resuming","5-18":"Waiting state","19, 20":"Task executing","21-29":"Returning to home","30-39":"Pulling logs","Others":"Interaction completed"}
56
+ attribute :current_step, Types::Integer
57
+
58
+ # {"min":"0","max":"100","step":"1"}
59
+ attribute :percent, Types::Integer.constrained(gteq: 0, lteq: 100)
60
+ end
61
+ end
62
+
63
+ attribute :result, Types::Integer
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Notification of task readiness
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#notification-of-task-readiness
7
+ class FlighttaskReadyEventsMessage < EventsMessage
8
+ attribute :_method, Types::String.enum("flighttask_ready")
9
+
10
+ attribute :data do
11
+ attribute :flight_ids, Types::Array.of(Types::String)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -5,16 +5,9 @@ module DjiMqttConnect
5
5
  class HighestPriorityUploadFlighttaskMediaEventsMessage < EventsMessage
6
6
  attribute :_method, Types::String.enum("highest_priority_upload_flighttask_media")
7
7
 
8
- # NOTE: Not documented, but appears in examples
9
- attribute? :need_reply, Types::Integer.enum(0, 1)
10
-
11
8
  attribute :data do
12
9
  attribute :flight_id, Types::String
13
10
  end
14
-
15
- def need_reply?
16
- need_reply == 1
17
- end
18
11
  end
19
12
  end
20
13
  end
@@ -7,9 +7,16 @@ module DjiMqttConnect
7
7
  attribute :tid, Types::UUID
8
8
  attribute :timestamp, Types::Timestamp
9
9
 
10
+ # NOTE: Included in most events messages, requires a reply on the events_reply topic if true
11
+ attribute? :need_reply, Types::Integer.enum(0, 1)
12
+
10
13
  attribute :_data, Types::Hash
11
14
  attribute :_method, Types::String
12
15
 
16
+ def need_reply?
17
+ need_reply == 1
18
+ end
19
+
13
20
  def to_s
14
21
  # Include data method for Generic messages
15
22
  instance_of?(EventsMessage) ? "#{super}[#{_method}]" : super
@@ -22,8 +22,11 @@ module DjiMqttConnect
22
22
  attribute :timestamp, Types::Timestamp
23
23
 
24
24
  attribute :_method, Types::String.enum(
25
+ "device_exit_homing_notify",
25
26
  "file_upload_callback",
26
27
  "fileupload_progress",
28
+ "flighttask_progress",
29
+ "flighttask_ready",
27
30
  "highest_priority_upload_flighttask_media"
28
31
  )
29
32
 
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Get the wayline task resource
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#get-the-wayline-task-resource
7
+ class FlighttaskResourceGetRequestsMessage < RequestsMessage
8
+ attribute :_method, Types::String.enum("flighttask_resource_get")
9
+
10
+ attribute :data do
11
+ attribute :flight_id, Types::String
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Get the wayline task resource
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#get-the-wayline-task-resource
7
+ class FlighttaskResourceGetRequestsReplyMessage < Message
8
+ def self.build_for(airport_organization_get_message, file:, result: 0)
9
+ new(
10
+ _method: airport_organization_get_message._method,
11
+ tid: airport_organization_get_message.tid,
12
+ bid: airport_organization_get_message.bid,
13
+ timestamp: current_timestamp,
14
+ data: {
15
+ result: result,
16
+ output: {
17
+ file: file
18
+ }
19
+ }
20
+ )
21
+ end
22
+
23
+ attribute :tid, Types::UUID
24
+ attribute :bid, Types::UUID
25
+ attribute :timestamp, Types::Timestamp
26
+
27
+ attribute :_method, Types::String.enum("flighttask_resource_get")
28
+
29
+ attribute :data do
30
+ attribute :result, Types::Integer
31
+
32
+ attribute :output do
33
+ attribute :file do
34
+ # File MD5 signature
35
+ attribute :fingerprint, Types::String
36
+
37
+ # File URL
38
+ attribute :url, Types::String
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ class AlarmStateSwitchServicesMessage < ServicesMessage
6
+ ACTION_OPEN = 1
7
+ ACTION_CLOSE = 0
8
+
9
+ def self.build(action:, bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
10
+ new(
11
+ bid: bid,
12
+ tid: tid,
13
+ timestamp: timestamp,
14
+ _method: "alarm_state_switch",
15
+ data: {
16
+ action: action
17
+ }
18
+ )
19
+ end
20
+
21
+ attribute :_method, Types::String.enum("alarm_state_switch")
22
+
23
+ attribute :data do
24
+ # {"0":"Close","1":"Open"}
25
+ attribute :action, Types::Integer.enum(ACTION_CLOSE, ACTION_OPEN)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module DjiMqttConnect
4
4
  module Thing::Product
5
- class CoverCloseServicesMessage < Message
5
+ class CoverCloseServicesMessage < ServicesMessage
6
6
  def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
7
7
  new(
8
8
  bid: bid,
@@ -12,11 +12,8 @@ module DjiMqttConnect
12
12
  )
13
13
  end
14
14
 
15
- attribute :tid, Types::UUID
16
- attribute :bid, Types::UUID
17
- attribute :timestamp, Types::Timestamp
18
-
19
15
  attribute :_method, Types::String.enum("cover_close")
16
+
20
17
  attribute :data, Types::Hash.default({}.freeze)
21
18
  end
22
19
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module DjiMqttConnect
4
4
  module Thing::Product
5
- class CoverOpenServicesMessage < Message
5
+ class CoverOpenServicesMessage < ServicesMessage
6
6
  def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
7
7
  new(
8
8
  bid: bid,
@@ -12,11 +12,8 @@ module DjiMqttConnect
12
12
  )
13
13
  end
14
14
 
15
- attribute :tid, Types::UUID
16
- attribute :bid, Types::UUID
17
- attribute :timestamp, Types::Timestamp
18
-
19
15
  attribute :_method, Types::String.enum("cover_open")
16
+
20
17
  attribute :data, Types::Hash.default({}.freeze)
21
18
  end
22
19
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ class DebugModeCloseServicesMessage < ServicesMessage
6
+ def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
7
+ new(
8
+ bid: bid,
9
+ tid: tid,
10
+ timestamp: timestamp,
11
+ _method: "debug_mode_close"
12
+ )
13
+ end
14
+
15
+ attribute :_method, Types::String.enum("debug_mode_close")
16
+
17
+ attribute :data, Types::Hash.default({}.freeze)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ class DebugModeOpenServicesMessage < ServicesMessage
6
+ def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
7
+ new(
8
+ bid: bid,
9
+ tid: tid,
10
+ timestamp: timestamp,
11
+ _method: "debug_mode_open"
12
+ )
13
+ end
14
+
15
+ attribute :_method, Types::String.enum("debug_mode_open")
16
+
17
+ attribute :data, Types::Hash.default({}.freeze)
18
+ end
19
+ end
20
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module DjiMqttConnect
4
4
  module Thing::Product
5
- class FileuploadListServicesMessage < Message
5
+ class FileuploadListServicesMessage < ServicesMessage
6
6
  def self.build(module_list:, bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
7
7
  new(
8
8
  _method: "fileupload_list",
@@ -17,9 +17,6 @@ module DjiMqttConnect
17
17
 
18
18
  attribute :_method, Types::String.enum("fileupload_list")
19
19
 
20
- attribute :tid, Types::UUID
21
- attribute :bid, Types::UUID
22
- attribute :timestamp, Types::Timestamp
23
20
  attribute :data do
24
21
  attribute :module_list, Types::Array.of(Types::Coercible::String.enum("0", "3"))
25
22
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module DjiMqttConnect
4
4
  module Thing::Product
5
- class FileuploadStartServicesMessage < Message
5
+ class FileuploadStartServicesMessage < ServicesMessage
6
6
  def self.build(data:, bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
7
7
  new(
8
8
  _method: "fileupload_start",
@@ -15,10 +15,6 @@ module DjiMqttConnect
15
15
 
16
16
  attribute :_method, Types::String.enum("fileupload_start")
17
17
 
18
- attribute :tid, Types::UUID
19
- attribute :bid, Types::UUID
20
- attribute :timestamp, Types::Timestamp
21
-
22
18
  attribute :data do
23
19
  attribute :endpoint, Types::String
24
20
  attribute :bucket, Types::String
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Execute wayline task
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#execute-wayline-task
7
+ class FlighttaskExecuteServicesMessage < ServicesMessage
8
+ def self.build(flight_id:, bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
9
+ new(
10
+ bid: bid,
11
+ tid: tid,
12
+ timestamp: timestamp,
13
+ _method: "flighttask_execute",
14
+ data: {
15
+ flight_id: flight_id
16
+ }
17
+ )
18
+ end
19
+
20
+ attribute :_method, Types::String.enum("flighttask_execute")
21
+
22
+ attribute :data do
23
+ attribute :flight_id, Types::String
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ class FlighttaskPauseServicesMessage < ServicesMessage
6
+ def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
7
+ new(
8
+ bid: bid,
9
+ tid: tid,
10
+ timestamp: timestamp,
11
+ _method: "flighttask_pause"
12
+ )
13
+ end
14
+
15
+ attribute :_method, Types::String.enum("flighttask_pause")
16
+
17
+ attribute :data, Types::Hash.default({}.freeze)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Issue wayline task
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#issue-wayline-task
7
+ class FlighttaskPrepareServicesMessage < ServicesMessage
8
+ def self.build(data:, bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
9
+ new(
10
+ bid: bid,
11
+ tid: tid,
12
+ timestamp: timestamp,
13
+ _method: "flighttask_prepare",
14
+ data: data
15
+ )
16
+ end
17
+
18
+ attribute :_method, Types::String.enum("flighttask_prepare")
19
+
20
+ attribute :data do
21
+ # Millisecond timestamp of task execution time.
22
+ # Optional field. When the task_type is 0 or 1, it is required. When the task_type is 2, it is not required.
23
+ attribute? :execute_time, Types::Timestamp
24
+
25
+ attribute :flight_id, Types::String
26
+
27
+ # The execution time of immediate task and timed task are defined by execute_time.
28
+ # The conditional task supports the task readiness condition defined by ready_conditions.
29
+ # The task can be executed if conditions are satisfied within a specified period.
30
+ # Immediate task has the highest priority.
31
+ # Timed task and conditional task have the same priority.
32
+ # {"0":"Immediate task","1":"Timed task","2":"Conditional task"}
33
+ attribute :task_type, Types::Integer.enum(0, 1, 2)
34
+
35
+ # {"0":"Normal waypoint wayline"}
36
+ attribute :wayline_type, Types::Integer.enum(0)
37
+
38
+ attribute :file do
39
+ # File MD5 signature
40
+ attribute :fingerprint, Types::String
41
+
42
+ # File URL
43
+ attribute :url, Types::String
44
+ end
45
+
46
+ # Optional field. For conditional task (which means the task_type is 2), this field is required. For other types of tasks, this field is ignored.
47
+ # After the conditional task is issued, device will check whether the ready_conditions are satisfied or not at a fixed frequency.
48
+ # If conditions are satisfied, flighttask_ready event will be sent.
49
+ # When the device side receives the flighttask_execute command, conditions of the ready_conditions of task will be checked whether they are all satisfied.
50
+ attribute? :ready_conditions do
51
+ attribute? :battery_capacity, Types::Integer
52
+
53
+ attribute? :begin_time, Types::Timestamp
54
+
55
+ attribute? :end_time, Types::Timestamp
56
+ end
57
+
58
+ # Optional field. Pre-check conditions added for task execution on the device side. If any condition is not satisfied, execution will fail.
59
+ attribute? :executable_conditions do
60
+ attribute :storage_capacity, Types::Integer
61
+ end
62
+
63
+ # Optional field for resuming interrupted wayline task. If specified, the wayline task will start executing from the breakpoint position indicated by the field.
64
+ attribute? :break_point do
65
+ attribute :index, Types::Integer
66
+
67
+ # {"0":"On the wayline segment","1":"On the waypoint"}
68
+ attribute :state, Types::Integer.enum(0, 1)
69
+
70
+ attribute :progress, Types::Float.constrained(gteq: 0, lteq: 1.0)
71
+
72
+ attribute :wayline_id, Types::Integer
73
+ end
74
+
75
+ # {"unit":"meter","min":20,"max":1500}
76
+ attribute :rth_altitude, Types::Integer.constrained(gteq: 20, lteq: 1500)
77
+
78
+ # {"0":"Return to Home (RTH)","1":"Hovering","2":"Landing"}
79
+ attribute :out_of_control_action, Types::Integer.enum(0, 1, 2)
80
+
81
+ # {"0":"Continue executing the wayline task","1":"Exit the wayline task and execute the remote controller out of control action"}
82
+ attribute :exit_wayline_when_rc_lost, Types::Integer.enum(0, 1)
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Resume wayline task
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#resume-wayline-task
7
+ class FlighttaskRecoveryServicesMessage < ServicesMessage
8
+ def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
9
+ new(
10
+ bid: bid,
11
+ tid: tid,
12
+ timestamp: timestamp,
13
+ _method: "flighttask_recovery"
14
+ )
15
+ end
16
+
17
+ attribute :_method, Types::String.enum("flighttask_recovery")
18
+
19
+ attribute :data, Types::Hash.default({}.freeze)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Cancel wayline task
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#cancel-wayline-task
7
+ class FlighttaskUndoServicesMessage < ServicesMessage
8
+ def self.build(flight_ids:, bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
9
+ new(
10
+ bid: bid,
11
+ tid: tid,
12
+ timestamp: timestamp,
13
+ _method: "flighttask_undo",
14
+ data: {
15
+ flight_ids: flight_ids
16
+ }
17
+ )
18
+ end
19
+
20
+ attribute :_method, Types::String.enum("flighttask_undo")
21
+
22
+ attribute :data do
23
+ attribute :flight_ids, Types::Array.of(Types::String)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Return to Home (RTH)
6
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#return-to-home-rth
7
+ class ReturnHomeServicesMessage < Message
8
+ def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
9
+ new(
10
+ bid: bid,
11
+ tid: tid,
12
+ timestamp: timestamp,
13
+ _method: "return_home"
14
+ )
15
+ end
16
+
17
+ attribute :tid, Types::UUID
18
+ attribute :bid, Types::UUID
19
+ attribute :timestamp, Types::Timestamp
20
+
21
+ attribute :_method, Types::String.enum("return_home")
22
+ attribute :data, Types::Hash.default({}.freeze)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ # Cancel return to home
6
+ #
7
+ # After returning to home, the aircraft will exit the wayline mode. At this point, if the return-to-home command is canceled, the aircraft will hover.
8
+ #
9
+ # https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#cancel-return-to-home
10
+ class ReturnHomeCancelServicesMessage < Message
11
+ def self.build(bid: generate_bid, tid: generate_tid, timestamp: current_timestamp)
12
+ new(
13
+ bid: bid,
14
+ tid: tid,
15
+ timestamp: timestamp,
16
+ _method: "return_home_cancel"
17
+ )
18
+ end
19
+
20
+ attribute :tid, Types::UUID
21
+ attribute :bid, Types::UUID
22
+ attribute :timestamp, Types::Timestamp
23
+
24
+ attribute :_method, Types::String.enum("return_home_cancel")
25
+ attribute :data, Types::Hash.default({}.freeze)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DjiMqttConnect
4
+ module Thing::Product
5
+ class ServicesMessage < Message
6
+ # Ensure all values are accepted
7
+ schema schema.strict
8
+
9
+ attribute :tid, Types::UUID
10
+ attribute :bid, Types::UUID
11
+ attribute :timestamp, Types::Timestamp
12
+ end
13
+ end
14
+ end