dji_mqtt_connect 0.1.12 → 0.1.13
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/Gemfile.lock +1 -1
- data/lib/dji_mqtt_connect/client.rb +5 -0
- data/lib/dji_mqtt_connect/factories.rb +358 -2
- data/lib/dji_mqtt_connect/marshals/thing/product/services_reply_marshal.rb +47 -0
- data/lib/dji_mqtt_connect/messages/thing/product/events/cover_close.rb +65 -0
- data/lib/dji_mqtt_connect/messages/thing/product/events/cover_open.rb +65 -0
- data/lib/dji_mqtt_connect/messages/thing/product/events/device_exit_homing_notify.rb +36 -0
- data/lib/dji_mqtt_connect/messages/thing/product/events/device_log.rb +20 -0
- data/lib/dji_mqtt_connect/messages/thing/product/{file_upload_callback_events_message.rb → events/file_upload_callback.rb} +0 -7
- data/lib/dji_mqtt_connect/messages/thing/product/{fileupload_progress_events_message.rb → events/fileupload_progress.rb} +4 -11
- data/lib/dji_mqtt_connect/messages/thing/product/events/flighttask_progress.rb +67 -0
- data/lib/dji_mqtt_connect/messages/thing/product/events/flighttask_ready.rb +15 -0
- 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
- data/lib/dji_mqtt_connect/messages/thing/product/events_message.rb +7 -0
- data/lib/dji_mqtt_connect/messages/thing/product/events_reply_message.rb +3 -0
- data/lib/dji_mqtt_connect/messages/thing/product/requests/flighttask_resource_get.rb +15 -0
- data/lib/dji_mqtt_connect/messages/thing/product/requests_reply/flighttask_resource_get.rb +44 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/alarm_state_switch.rb +29 -0
- data/lib/dji_mqtt_connect/messages/thing/product/{cover_close_services_message.rb → services/cover_close.rb} +2 -5
- data/lib/dji_mqtt_connect/messages/thing/product/{cover_open_services_message.rb → services/cover_open.rb} +2 -5
- data/lib/dji_mqtt_connect/messages/thing/product/services/debug_mode_close.rb +20 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/debug_mode_open.rb +20 -0
- data/lib/dji_mqtt_connect/messages/thing/product/{fileupload_list_services_message.rb → services/fileupload_list.rb} +1 -4
- data/lib/dji_mqtt_connect/messages/thing/product/{fileupload_start_services_message.rb → services/fileupload_start.rb} +1 -5
- data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_execute.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_pause.rb +20 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_prepare.rb +86 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_recovery.rb +22 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/flighttask_undo.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/return_home.rb +25 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services/return_home_cancel.rb +28 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_message.rb +14 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/alarm_state_switch.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/cover_close.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/cover_open.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/debug_mode_close.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/debug_mode_open.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_execute.rb +9 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_pause.rb +9 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_prepare.rb +9 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_recovery.rb +9 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/flighttask_undo.rb +9 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/return_home.rb +27 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply/return_home_cancel.rb +9 -0
- data/lib/dji_mqtt_connect/messages/thing/product/services_reply_message.rb +23 -0
- data/lib/dji_mqtt_connect/topics/thing/product/services_reply.rb +40 -0
- data/lib/dji_mqtt_connect/types.rb +2 -0
- data/lib/dji_mqtt_connect/version.rb +1 -1
- data/lib/dji_mqtt_connect.rb +61 -26
- metadata +60 -26
- /data/lib/dji_mqtt_connect/messages/sys/product/{update_topo_status_message.rb → status/update_topo.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/sys/product/{update_topo_status_reply_message.rb → status_reply/update_topo.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{hms_events_message.rb → events/hms.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{status_code_events_message.rb → events/status_code.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{dock_osd_message.rb → osd/dock.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{drone_osd_message.rb → osd/drone.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{remote_osd_message.rb → osd/remote.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{airport_bind_status_requests_message.rb → requests/airport_bind_status.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_bind_requests_message.rb → requests/airport_organization_bind.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_get_requests_message.rb → requests/airport_organization_get.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{config_requests_message.rb → requests/config.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{storage_config_get_requests_message.rb → requests/storage_config_get.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{airport_bind_status_requests_reply_message.rb → requests_reply/airport_bind_status.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_bind_requests_reply_message.rb → requests_reply/airport_organization_bind.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{airport_organization_get_requests_reply_message.rb → requests_reply/airport_organization_get.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{config_requests_reply_message.rb → requests_reply/config.rb} +0 -0
- /data/lib/dji_mqtt_connect/messages/thing/product/{storage_config_get_requests_reply_message.rb → requests_reply/storage_config_get.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bce94ddd2e510ce30f293372def6fbfd54916a2bfcd18968ebd99b5d017b4aed
|
4
|
+
data.tar.gz: 9377ad974ca8a62082e28e72b1f2b00fe598ddeaa1ad5f16ebbf6371d5546412
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0a86b3fe0a3be72cf761c40e23ac869a65a177431699389daf8c2282d9136b443bc19e35650ab701c6b4261ddccbcb2ff53f2bf653b76e07e62dc8a82168495
|
7
|
+
data.tar.gz: 0a6cd2977635c78779d9be386f82d9fb68e26e9fc30a230a314129589bfeb9342ecb59328a6291c5765ce4ea71a63bc1e68119ed3c0db2257afa54b21c85f480
|
data/Gemfile.lock
CHANGED
@@ -71,6 +71,11 @@ module DjiMqttConnect
|
|
71
71
|
Thing::Product::ServicesTopicRepository.new(self)
|
72
72
|
end
|
73
73
|
|
74
|
+
# Handles topic thing/product/#{pid}/services_reply
|
75
|
+
def thing_product_services_reply_topic
|
76
|
+
Thing::Product::ServicesReplyTopicRepository.new(self)
|
77
|
+
end
|
78
|
+
|
74
79
|
attr_reader :mqtt_client
|
75
80
|
end
|
76
81
|
end
|
@@ -6,6 +6,24 @@ module DjiMqttConnect
|
|
6
6
|
module Factories
|
7
7
|
# Events
|
8
8
|
|
9
|
+
def build_device_exit_homing_notify_events_message
|
10
|
+
message_data = {
|
11
|
+
action: 1,
|
12
|
+
sn: "DOCK01",
|
13
|
+
reason: "0"
|
14
|
+
}
|
15
|
+
Thing::Product::DeviceExitHomingNotifyEventsMessage.new(
|
16
|
+
_method: "device_exit_homing_notify",
|
17
|
+
bid: Message.generate_bid,
|
18
|
+
tid: Message.generate_tid,
|
19
|
+
need_reply: 1,
|
20
|
+
gateway: "GATEWAY01",
|
21
|
+
timestamp: Message.current_timestamp,
|
22
|
+
data: message_data,
|
23
|
+
_data: message_data
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
9
27
|
def build_file_upload_callback_events_message
|
10
28
|
message_data = {
|
11
29
|
file: {
|
@@ -57,7 +75,7 @@ module DjiMqttConnect
|
|
57
75
|
fingerprint: "4f65b891f3bc09bdb6d4c36a996b532d",
|
58
76
|
progress: {
|
59
77
|
current_step: 19,
|
60
|
-
|
78
|
+
progress: 100,
|
61
79
|
finish_time: 1655781395926,
|
62
80
|
upload_rate: 0,
|
63
81
|
result: 0,
|
@@ -73,7 +91,7 @@ module DjiMqttConnect
|
|
73
91
|
progress: {
|
74
92
|
current_step: 19,
|
75
93
|
total_step: 30,
|
76
|
-
|
94
|
+
progress: 100,
|
77
95
|
finish_time: 1655781395926,
|
78
96
|
upload_rate: 0,
|
79
97
|
result: 0,
|
@@ -98,6 +116,63 @@ module DjiMqttConnect
|
|
98
116
|
)
|
99
117
|
end
|
100
118
|
|
119
|
+
def build_flighttask_progress_events_message
|
120
|
+
message_data = {
|
121
|
+
output: {
|
122
|
+
ext: {
|
123
|
+
current_waypoint_index: 3,
|
124
|
+
media_count: 6,
|
125
|
+
track_id: "track_id",
|
126
|
+
flight_id: "flight_id",
|
127
|
+
break_point: {
|
128
|
+
index: 1,
|
129
|
+
state: 0,
|
130
|
+
progress: 0.34,
|
131
|
+
wayline_id: 0,
|
132
|
+
break_reason: 1,
|
133
|
+
latitude: 23.4,
|
134
|
+
longitude: 113.99,
|
135
|
+
height: 100.23,
|
136
|
+
attitude_head: 30
|
137
|
+
}
|
138
|
+
},
|
139
|
+
progress: {
|
140
|
+
current_step: 19,
|
141
|
+
percent: 100
|
142
|
+
},
|
143
|
+
status: "ok"
|
144
|
+
},
|
145
|
+
result: 0
|
146
|
+
}
|
147
|
+
|
148
|
+
Thing::Product::FlighttaskProgressEventsMessage.new(
|
149
|
+
bid: Message.generate_bid,
|
150
|
+
tid: Message.generate_tid,
|
151
|
+
data: message_data,
|
152
|
+
_data: message_data,
|
153
|
+
_method: "flighttask_progress",
|
154
|
+
timestamp: Message.current_timestamp
|
155
|
+
)
|
156
|
+
end
|
157
|
+
|
158
|
+
def build_flighttask_ready_events_message
|
159
|
+
message_data = {
|
160
|
+
flight_ids: [
|
161
|
+
SecureRandom.uuid,
|
162
|
+
SecureRandom.uuid
|
163
|
+
]
|
164
|
+
}
|
165
|
+
|
166
|
+
Thing::Product::FlighttaskReadyEventsMessage.new(
|
167
|
+
bid: Message.generate_bid,
|
168
|
+
tid: Message.generate_tid,
|
169
|
+
data: message_data,
|
170
|
+
_data: message_data,
|
171
|
+
_method: "flighttask_ready",
|
172
|
+
timestamp: Message.current_timestamp
|
173
|
+
)
|
174
|
+
end
|
175
|
+
|
101
176
|
def build_highest_priority_upload_flighttask_media_events_message
|
102
177
|
message_data = {
|
103
178
|
flight_id: SecureRandom.uuid
|
@@ -302,6 +377,33 @@ module DjiMqttConnect
|
|
302
377
|
)
|
303
378
|
end
|
304
379
|
|
380
|
+
def build_thing_product_flighttask_resource_get_requests_message
|
381
|
+
message_data = {
|
382
|
+
flight_id: SecureRandom.uuid
|
383
|
+
}
|
384
|
+
|
385
|
+
Thing::Product::FlighttaskResourceGetRequestsMessage.new(
|
386
|
+
tid: Message.generate_tid,
|
387
|
+
bid: Message.generate_bid,
|
388
|
+
timestamp: Message.current_timestamp,
|
389
|
+
_method: "flighttask_resource_get",
|
390
|
+
data: message_data,
|
391
|
+
_data: message_data
|
392
|
+
)
|
393
|
+
end
|
394
|
+
|
395
|
+
def build_thing_product_flighttask_resource_get_requests_reply_message
|
396
|
+
flighttask_resource_get_request = build_thing_product_flighttask_resource_get_requests_message
|
397
|
+
Thing::Product::FlighttaskResourceGetRequestsReplyMessage.build_for(
|
398
|
+
flighttask_resource_get_request,
|
399
|
+
result: 0,
|
400
|
+
file: {
|
401
|
+
fingerprint: "signxxxx",
|
402
|
+
url: "https://xx.oss-cn-hangzhou.aliyuncs.com/xx.kmz?Expires=xx&OSSAccessKeyId=xxx&Signature=xxx"
|
403
|
+
}
|
404
|
+
)
|
405
|
+
end
|
406
|
+
|
305
407
|
def build_thing_product_storage_config_get_requests_message
|
306
408
|
message_data = {
|
307
409
|
module: 0
|
@@ -341,6 +443,10 @@ module DjiMqttConnect
|
|
341
443
|
|
342
444
|
# Services
|
343
445
|
|
446
|
+
def build_thing_product_alarm_state_switch_services_message
|
447
|
+
Thing::Product::AlarmStateSwitchServicesMessage.build(action: Thing::Product::AlarmStateSwitchServicesMessage::ACTION_OPEN)
|
448
|
+
end
|
449
|
+
|
344
450
|
def build_thing_product_cover_close_services_message
|
345
451
|
Thing::Product::CoverCloseServicesMessage.build
|
346
452
|
end
|
@@ -349,6 +455,14 @@ module DjiMqttConnect
|
|
349
455
|
Thing::Product::CoverOpenServicesMessage.build
|
350
456
|
end
|
351
457
|
|
458
|
+
def build_thing_product_debug_mode_close_services_message
|
459
|
+
Thing::Product::DebugModeCloseServicesMessage.build
|
460
|
+
end
|
461
|
+
|
462
|
+
def build_thing_product_debug_mode_open_services_message
|
463
|
+
Thing::Product::DebugModeOpenServicesMessage.build
|
464
|
+
end
|
465
|
+
|
352
466
|
def build_thing_product_fileupload_list_services_message
|
353
467
|
Thing::Product::FileuploadListServicesMessage.build(
|
354
468
|
module_list: [0, 3]
|
@@ -394,5 +508,247 @@ module DjiMqttConnect
|
|
394
508
|
}
|
395
509
|
)
|
396
510
|
end
|
511
|
+
|
512
|
+
def build_thing_product_flighttask_execute_services_message
|
513
|
+
Thing::Product::FlighttaskExecuteServicesMessage.build(flight_id: SecureRandom.uuid)
|
514
|
+
end
|
515
|
+
|
516
|
+
def build_thing_product_flighttask_pause_services_message
|
517
|
+
Thing::Product::FlighttaskPauseServicesMessage.build
|
518
|
+
end
|
519
|
+
|
520
|
+
def build_thing_product_flighttask_prepare_services_message
|
521
|
+
Thing::Product::FlighttaskPrepareServicesMessage.build(
|
522
|
+
data: {
|
523
|
+
execute_time: 1234567890123,
|
524
|
+
flight_id: "xxxxxxx",
|
525
|
+
task_type: 2,
|
526
|
+
wayline_type: 0,
|
527
|
+
file: {
|
528
|
+
url: "https://xxx.com/xxxx",
|
529
|
+
fingerprint: "xxxx"
|
530
|
+
},
|
531
|
+
ready_conditions: {
|
532
|
+
battery_capacity: 90,
|
533
|
+
begin_time: 1234567890123,
|
534
|
+
end_time: 1234567890123
|
535
|
+
},
|
536
|
+
executable_conditions: {
|
537
|
+
storage_capacity: 1000
|
538
|
+
},
|
539
|
+
break_point: {
|
540
|
+
index: 1,
|
541
|
+
state: 0,
|
542
|
+
progress: 0.34,
|
543
|
+
wayline_id: 0
|
544
|
+
},
|
545
|
+
rth_altitude: 100,
|
546
|
+
out_of_control_action: 0,
|
547
|
+
exit_wayline_when_rc_lost: 0
|
548
|
+
}
|
549
|
+
)
|
550
|
+
end
|
551
|
+
|
552
|
+
def build_thing_product_flighttask_recovery_services_message
|
553
|
+
Thing::Product::FlighttaskRecoveryServicesMessage.build
|
554
|
+
end
|
555
|
+
|
556
|
+
def build_thing_product_flighttask_undo_services_message
|
557
|
+
Thing::Product::FlighttaskUndoServicesMessage.build(
|
558
|
+
flight_ids: [SecureRandom.uuid, SecureRandom.uuid]
|
559
|
+
)
|
560
|
+
end
|
561
|
+
|
562
|
+
def build_thing_product_return_home_services_message
|
563
|
+
Thing::Product::ReturnHomeServicesMessage.build
|
564
|
+
end
|
565
|
+
|
566
|
+
def build_thing_product_return_home_cancel_services_message
|
567
|
+
Thing::Product::ReturnHomeCancelServicesMessage.build
|
568
|
+
end
|
569
|
+
|
570
|
+
def build_thing_product_alarm_state_switch_services_reply_message
|
571
|
+
message_data = {
|
572
|
+
result: 0,
|
573
|
+
output: {
|
574
|
+
status: "in_progress"
|
575
|
+
}
|
576
|
+
}
|
577
|
+
|
578
|
+
Thing::Product::AlarmStateSwitchServicesReplyMessage.new(
|
579
|
+
bid: Message.generate_bid,
|
580
|
+
tid: Message.generate_tid,
|
581
|
+
timestamp: Message.current_timestamp,
|
582
|
+
_method: "alarm_state_switch",
|
583
|
+
data: message_data,
|
584
|
+
_data: message_data
|
585
|
+
)
|
586
|
+
end
|
587
|
+
|
588
|
+
def build_thing_product_cover_close_services_reply_message
|
589
|
+
message_data = {
|
590
|
+
result: 0,
|
591
|
+
output: {
|
592
|
+
status: "in_progress"
|
593
|
+
}
|
594
|
+
}
|
595
|
+
|
596
|
+
Thing::Product::CoverCloseServicesReplyMessage.new(
|
597
|
+
bid: Message.generate_bid,
|
598
|
+
tid: Message.generate_tid,
|
599
|
+
timestamp: Message.current_timestamp,
|
600
|
+
_method: "cover_close",
|
601
|
+
data: message_data,
|
602
|
+
_data: message_data
|
603
|
+
)
|
604
|
+
end
|
605
|
+
|
606
|
+
def build_thing_product_cover_open_services_reply_message
|
607
|
+
message_data = {
|
608
|
+
result: 0,
|
609
|
+
output: {
|
610
|
+
status: "ok"
|
611
|
+
}
|
612
|
+
}
|
613
|
+
|
614
|
+
Thing::Product::CoverOpenServicesReplyMessage.new(
|
615
|
+
bid: Message.generate_bid,
|
616
|
+
tid: Message.generate_tid,
|
617
|
+
timestamp: Message.current_timestamp,
|
618
|
+
_method: "cover_open",
|
619
|
+
data: message_data,
|
620
|
+
_data: message_data
|
621
|
+
)
|
622
|
+
end
|
623
|
+
|
624
|
+
def build_thing_product_debug_mode_close_services_reply_message
|
625
|
+
message_data = {
|
626
|
+
result: 0,
|
627
|
+
output: {
|
628
|
+
status: "ok"
|
629
|
+
}
|
630
|
+
}
|
631
|
+
|
632
|
+
Thing::Product::DebugModeCloseServicesReplyMessage.new(
|
633
|
+
bid: Message.generate_bid,
|
634
|
+
tid: Message.generate_tid,
|
635
|
+
timestamp: Message.current_timestamp,
|
636
|
+
_method: "debug_mode_close",
|
637
|
+
data: message_data,
|
638
|
+
_data: message_data
|
639
|
+
)
|
640
|
+
end
|
641
|
+
|
642
|
+
def build_thing_product_debug_mode_open_services_reply_message
|
643
|
+
message_data = {
|
644
|
+
result: 0,
|
645
|
+
output: {
|
646
|
+
status: "in_progress"
|
647
|
+
}
|
648
|
+
}
|
649
|
+
|
650
|
+
Thing::Product::DebugModeOpenServicesReplyMessage.new(
|
651
|
+
bid: Message.generate_bid,
|
652
|
+
tid: Message.generate_tid,
|
653
|
+
timestamp: Message.current_timestamp,
|
654
|
+
_method: "debug_mode_open",
|
655
|
+
data: message_data,
|
656
|
+
_data: message_data
|
657
|
+
)
|
658
|
+
end
|
659
|
+
|
660
|
+
def build_thing_product_flighttask_prepare_services_reply_message
|
661
|
+
message_data = {result: 0}
|
662
|
+
|
663
|
+
Thing::Product::FlighttaskPrepareServicesReplyMessage.new(
|
664
|
+
bid: Message.generate_bid,
|
665
|
+
tid: Message.generate_tid,
|
666
|
+
timestamp: Message.current_timestamp,
|
667
|
+
_method: "flighttask_prepare",
|
668
|
+
_data: message_data,
|
669
|
+
data: message_data
|
670
|
+
)
|
671
|
+
end
|
672
|
+
|
673
|
+
def build_thing_product_flighttask_execute_services_reply_message
|
674
|
+
message_data = {result: 0}
|
675
|
+
|
676
|
+
Thing::Product::FlighttaskExecuteServicesReplyMessage.new(
|
677
|
+
bid: Message.generate_bid,
|
678
|
+
tid: Message.generate_tid,
|
679
|
+
timestamp: Message.current_timestamp,
|
680
|
+
_method: "flighttask_execute",
|
681
|
+
_data: message_data,
|
682
|
+
data: message_data
|
683
|
+
)
|
684
|
+
end
|
685
|
+
|
686
|
+
def build_thing_product_flighttask_undo_services_reply_message
|
687
|
+
message_data = {result: 0}
|
688
|
+
|
689
|
+
Thing::Product::FlighttaskUndoServicesReplyMessage.new(
|
690
|
+
bid: Message.generate_bid,
|
691
|
+
tid: Message.generate_tid,
|
692
|
+
timestamp: Message.current_timestamp,
|
693
|
+
_method: "flighttask_undo",
|
694
|
+
_data: message_data,
|
695
|
+
data: message_data
|
696
|
+
)
|
697
|
+
end
|
698
|
+
|
699
|
+
def build_thing_product_flighttask_pause_services_reply_message
|
700
|
+
message_data = {result: 0}
|
701
|
+
|
702
|
+
Thing::Product::FlighttaskPauseServicesReplyMessage.new(
|
703
|
+
bid: Message.generate_bid,
|
704
|
+
tid: Message.generate_tid,
|
705
|
+
timestamp: Message.current_timestamp,
|
706
|
+
_method: "flighttask_pause",
|
707
|
+
_data: message_data,
|
708
|
+
data: message_data
|
709
|
+
)
|
710
|
+
end
|
711
|
+
|
712
|
+
def build_thing_product_flighttask_recovery_services_reply_message
|
713
|
+
message_data = {result: 0}
|
714
|
+
|
715
|
+
Thing::Product::FlighttaskRecoveryServicesReplyMessage.new(
|
716
|
+
bid: Message.generate_bid,
|
717
|
+
tid: Message.generate_tid,
|
718
|
+
timestamp: Message.current_timestamp,
|
719
|
+
_method: "flighttask_recovery",
|
720
|
+
_data: message_data,
|
721
|
+
data: message_data
|
722
|
+
)
|
723
|
+
end
|
724
|
+
|
725
|
+
def build_thing_product_return_home_services_reply_message
|
726
|
+
message_data = {
|
727
|
+
result: 0,
|
728
|
+
output: {status: "ok"}
|
729
|
+
}
|
730
|
+
|
731
|
+
Thing::Product::ReturnHomeServicesReplyMessage.new(
|
732
|
+
bid: Message.generate_bid,
|
733
|
+
tid: Message.generate_tid,
|
734
|
+
timestamp: Message.current_timestamp,
|
735
|
+
_method: "return_home",
|
736
|
+
_data: message_data,
|
737
|
+
data: message_data
|
738
|
+
)
|
739
|
+
end
|
740
|
+
|
741
|
+
def build_thing_product_return_home_cancel_services_reply_message
|
742
|
+
message_data = {result: 0}
|
743
|
+
|
744
|
+
Thing::Product::ReturnHomeCancelServicesReplyMessage.new(
|
745
|
+
bid: Message.generate_bid,
|
746
|
+
tid: Message.generate_tid,
|
747
|
+
timestamp: Message.current_timestamp,
|
748
|
+
_method: "return_home_cancel",
|
749
|
+
_data: message_data,
|
750
|
+
data: message_data
|
751
|
+
)
|
752
|
+
end
|
397
753
|
end
|
398
754
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "dry-struct"
|
4
|
+
require "dry-transformer"
|
5
|
+
require "json"
|
6
|
+
|
7
|
+
module DjiMqttConnect
|
8
|
+
module Thing::Product
|
9
|
+
class ServicesReplyMarshal < MessageMarshal
|
10
|
+
include Utils::MessageParsing
|
11
|
+
|
12
|
+
# Rename pesky `method` argument to `_method` and makes a copy of the raw data
|
13
|
+
class AttributeTransformer < Dry::Transformer::Pipe
|
14
|
+
import Dry::Transformer::HashTransformations
|
15
|
+
|
16
|
+
define! do
|
17
|
+
copy_keys "data" => "_data"
|
18
|
+
rename_keys "method" => "_method"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Attempts to look a the method attribute, and builds a specific Message class for the message
|
23
|
+
def load(raw_message)
|
24
|
+
# Parse the message from JSON
|
25
|
+
parsed_message = JSON.parse(raw_message)
|
26
|
+
|
27
|
+
# Transform the message
|
28
|
+
transformed_message = attribute_transformer.call(parsed_message)
|
29
|
+
message_method = transformed_message["_method"]
|
30
|
+
|
31
|
+
# Build an instance of the class, or a generic message from the current class
|
32
|
+
message_class = message_class_from_message_method(message_method, ServicesReplyMessage)
|
33
|
+
message_class.new transformed_message
|
34
|
+
rescue JSON::ParserError => e
|
35
|
+
raise ParseError.new(e, "Unable to parse message as JSON")
|
36
|
+
rescue Dry::Struct::Error => e
|
37
|
+
raise ParseError.new(e, "Unexpected #{message_class} payload")
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def attribute_transformer
|
43
|
+
@attribute_transformer ||= AttributeTransformer.new
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DjiMqttConnect
|
4
|
+
module Thing::Product
|
5
|
+
class CoverCloseEventsMessage < EventsMessage
|
6
|
+
attribute :_method, Types::String.enum("cover_close")
|
7
|
+
|
8
|
+
attribute :data do
|
9
|
+
attribute :result, Types::Integer
|
10
|
+
|
11
|
+
attribute :output do
|
12
|
+
# {"sent":"sent","in_progress":"in progress","ok":"success","paused":"paused","rejected":"rejected","failed":"failed","canceled":"canceled or stopped","timeout":"timeout"}
|
13
|
+
attribute :status, Types::String.enum(
|
14
|
+
"sent",
|
15
|
+
"in_progress",
|
16
|
+
"ok",
|
17
|
+
"paused",
|
18
|
+
"rejected",
|
19
|
+
"failed",
|
20
|
+
"canceled",
|
21
|
+
"timeout"
|
22
|
+
)
|
23
|
+
|
24
|
+
attribute :progress do
|
25
|
+
# {"min":"0","max":"100","step":"1"}
|
26
|
+
attribute :percent, Types::Integer.constrained(gteq: 0, lteq: 100)
|
27
|
+
|
28
|
+
attribute? :current_step, Types::Integer
|
29
|
+
|
30
|
+
attribute? :total_steps, Types::Integer
|
31
|
+
|
32
|
+
# {"get_bid":"Get bid","check_work_mode":"Check whether to enter remote debugging mode","check_task_state":"Check if the DJI Dock is free","land_mcu_reboot":"Land MCU reboot","rain_mcu_reboot":"Weather station MCU reboot","core_mcu_reboot":"Central control MCU reboot","sdr_reboot":"SDR reboot","write_reboot_param_file":"Write reboot flag","get_drone_power_state":"Get battery charge state","close_putter":"Close the putter","check_wired_connect_state":"Get aircraft state","open_drone":"Open the plane","open_alarm":"Open sound and light alarm","check_scram_state":"Check if the emergency stop switch is pressed","open_cover":"Open the hatch","check_drone_sdr_connect_state":"Establish SDR wireless connection","turn_on_drone":"Turn the plane on","drone_paddle_forward":"Turn on forward paddle","close_cover":"Close the hatch","drone_paddle_reverse":"Turn on reverse paddle","drone_paddle_stop":"Stop Paddle Rotation","free_putter":"Free Putter","stop_charge":"Stop charging"}
|
33
|
+
attribute? :step_key, Types::String.enum(
|
34
|
+
"get_bid",
|
35
|
+
"check_work_mode",
|
36
|
+
"check_task_state",
|
37
|
+
"land_mcu_reboot",
|
38
|
+
"rain_mcu_reboot",
|
39
|
+
"core_mcu_reboot",
|
40
|
+
"sdr_reboot",
|
41
|
+
"write_reboot_param_file",
|
42
|
+
"get_drone_power_state",
|
43
|
+
"close_putter",
|
44
|
+
"check_wired_connect_state",
|
45
|
+
"open_drone",
|
46
|
+
"open_alarm",
|
47
|
+
"check_scram_state",
|
48
|
+
"open_cover",
|
49
|
+
"check_drone_sdr_connect_state",
|
50
|
+
"turn_on_drone",
|
51
|
+
"drone_paddle_forward",
|
52
|
+
"close_cover",
|
53
|
+
"drone_paddle_reverse",
|
54
|
+
"drone_paddle_stop",
|
55
|
+
"free_putter",
|
56
|
+
"stop_charge"
|
57
|
+
)
|
58
|
+
|
59
|
+
attribute? :step_result, Types::Integer
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DjiMqttConnect
|
4
|
+
module Thing::Product
|
5
|
+
class CoverOpenEventsMessage < EventsMessage
|
6
|
+
attribute :_method, Types::String.enum("cover_open")
|
7
|
+
|
8
|
+
attribute :data do
|
9
|
+
attribute :result, Types::Integer
|
10
|
+
|
11
|
+
attribute :output do
|
12
|
+
# {"sent":"sent","in_progress":"in progress","ok":"success","paused":"paused","rejected":"rejected","failed":"failed","canceled":"canceled or stopped","timeout":"timeout"}
|
13
|
+
attribute :status, Types::String.enum(
|
14
|
+
"sent",
|
15
|
+
"in_progress",
|
16
|
+
"ok",
|
17
|
+
"paused",
|
18
|
+
"rejected",
|
19
|
+
"failed",
|
20
|
+
"canceled",
|
21
|
+
"timeout"
|
22
|
+
)
|
23
|
+
|
24
|
+
attribute :progress do
|
25
|
+
# {"min":"0","max":"100","step":"1"}
|
26
|
+
attribute :percent, Types::Integer.constrained(gteq: 0, lteq: 100)
|
27
|
+
|
28
|
+
attribute? :current_step, Types::Integer
|
29
|
+
|
30
|
+
attribute? :total_steps, Types::Integer
|
31
|
+
|
32
|
+
# {"get_bid":"Get bid","check_work_mode":"Check whether to enter remote debugging mode","check_task_state":"Check if the DJI Dock is free","land_mcu_reboot":"Land MCU reboot","rain_mcu_reboot":"Weather station MCU reboot","core_mcu_reboot":"Central control MCU reboot","sdr_reboot":"SDR reboot","write_reboot_param_file":"Write reboot flag","get_drone_power_state":"Get battery charge state","close_putter":"Close the putter","check_wired_connect_state":"Get aircraft state","open_drone":"Open the plane","open_alarm":"Open sound and light alarm","check_scram_state":"Check if the emergency stop switch is pressed","open_cover":"Open the hatch","check_drone_sdr_connect_state":"Establish SDR wireless connection","turn_on_drone":"Turn the plane on","drone_paddle_forward":"Turn on forward paddle","close_cover":"Close the hatch","drone_paddle_reverse":"Turn on reverse paddle","drone_paddle_stop":"Stop Paddle Rotation","free_putter":"Free Putter","stop_charge":"Stop charging"}
|
33
|
+
attribute? :step_key, Types::String.enum(
|
34
|
+
"get_bid",
|
35
|
+
"check_work_mode",
|
36
|
+
"check_task_state",
|
37
|
+
"land_mcu_reboot",
|
38
|
+
"rain_mcu_reboot",
|
39
|
+
"core_mcu_reboot",
|
40
|
+
"sdr_reboot",
|
41
|
+
"write_reboot_param_file",
|
42
|
+
"get_drone_power_state",
|
43
|
+
"close_putter",
|
44
|
+
"check_wired_connect_state",
|
45
|
+
"open_drone",
|
46
|
+
"open_alarm",
|
47
|
+
"check_scram_state",
|
48
|
+
"open_cover",
|
49
|
+
"check_drone_sdr_connect_state",
|
50
|
+
"turn_on_drone",
|
51
|
+
"drone_paddle_forward",
|
52
|
+
"close_cover",
|
53
|
+
"drone_paddle_reverse",
|
54
|
+
"drone_paddle_stop",
|
55
|
+
"free_putter",
|
56
|
+
"stop_charge"
|
57
|
+
)
|
58
|
+
|
59
|
+
attribute? :step_result, Types::Integer
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DjiMqttConnect
|
4
|
+
module Thing::Product
|
5
|
+
# Notification of device exits the Return to Home (RTH) state
|
6
|
+
# https://developer.dji.com/doc/cloud-api-tutorial/en/server-api-reference/mqtt/thing-model/gateway/dock/wayline.html#notification-of-device-exits-the-return-to-home-rth-state
|
7
|
+
class DeviceExitHomingNotifyEventsMessage < EventsMessage
|
8
|
+
ENTERING_EXIT_RTH_STATE_ACTION = 1
|
9
|
+
EXIT_EXITING_RTH_STATE_ACTION = 0
|
10
|
+
|
11
|
+
attribute :_method, Types::String.enum("device_exit_homing_notify")
|
12
|
+
|
13
|
+
attribute :data do
|
14
|
+
# {"1":"Enter exiting RTH state"},{"0":"Exit exiting RTH state"}
|
15
|
+
attribute :action, Types::Coercible::Integer.enum(EXIT_EXITING_RTH_STATE_ACTION, ENTERING_EXIT_RTH_STATE_ACTION)
|
16
|
+
|
17
|
+
attribute :sn, Types::SerialNumber
|
18
|
+
|
19
|
+
# {"0":"Add joystick throttle","1":"Add joystick pitch","2":"The initialization of behavior tree is failed","3":"Surrounded by obstacles","4":"Flight restriction is triggered","5":"Obstacle is too closed","6":"No GPS signal","7":"The output flag of GPS and VIO location is false","8":"The error of GPS and VIO fusion position is too large","9":"Backtrack in a short distance","10":"Trigger the RTH in a short distance"}
|
20
|
+
attribute :reason, Types::Coercible::Integer.enum(
|
21
|
+
ADD_JOYSTICK_THROTTLE_REASON = 0,
|
22
|
+
ADD_JOYSTICK_PITCH_REASON = 1,
|
23
|
+
THE_INITIALIZATION_OF_BEHAVIOR_TREE_IS_FAILED_REASON = 2,
|
24
|
+
SURROUNDED_BY_OBSTACLES_REASON = 3,
|
25
|
+
FLIGHT_RESTRICTION_IS_TRIGGERED_REASON = 4,
|
26
|
+
OBSTACLE_IS_TOO_CLOSE_REASON = 5,
|
27
|
+
NO_GPS_SIGNAL_REASON = 6,
|
28
|
+
THE_OUTPUT_FLAG_OF_GPS_AND_VIO_LOCATION_IS_FALSE_REASON = 7,
|
29
|
+
THE_ERROR_OF_GPS_AND_VIO_FUSION_POSITION_IS_TOO_LARGE_REASON = 8,
|
30
|
+
BACKTRACK_IN_A_SHORT_DISTANCE_REASON = 9,
|
31
|
+
TRIGGER_THE_RTH_IN_A_SHORT_DISTANCE_REASON = 10
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DjiMqttConnect
|
4
|
+
module Thing::Product
|
5
|
+
class DeviceLogEventsMessage < ServicesReplyMessage
|
6
|
+
# BID is not always included in message
|
7
|
+
attribute? :bid, Types::UUID
|
8
|
+
|
9
|
+
attribute :_method, Types::String.enum("device_log")
|
10
|
+
|
11
|
+
attribute :data do
|
12
|
+
attribute :level, Types::Integer
|
13
|
+
attribute :key, Types::Integer
|
14
|
+
attribute :module, Types::Integer
|
15
|
+
attribute :create_time, Types::Timestamp
|
16
|
+
attribute :args, Types::Hash
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|