Mavlink2Rest

Build status Build status Test Cargo download Crate info Documentation

mavlink2rest creates a REST server that provides mavlink information from a mavlink source.

The current version supports the ardupilotmega dialect, that includes common, icarous and uavionix.

Install :zap:

Downloads :package:

Endpoints

Pages

API

Examples

Get all messages:

sh curl --request GET http://0.0.0.0:8088/mavlink\?pretty\=true # The output is huge, you can get it here: https://gist.github.com/patrickelectric/26a407c4e7749cdaa58d06b52212cb1e

Get attitude:

sh curl --request GET http://0.0.0.0:8088/mavlink/ATTITUDE?pretty=true ```js { "messageinformation": { "counter": 46460, "frequency": 7.966392517089844, "time": { "firstmessage": "2020-03-28T12:47:52.315383-03:00", "lastmessage": "2020-03-28T14:25:04.905914-03:00" } }, "pitch": 0.004207547288388014, "pitchspeed": 0.0010630330070853233, "roll": 0.004168820567429066, "rollspeed": 0.0009180732304230332, "timeboot_ms": 6185568, "type": "ATTITUDE", "yaw": -1.5562472343444824, "yawspeed": 0.0009576341835781932 } ````

Get time of last ATTITUDE message:

sh curl --request GET http://0.0.0.0:8088/mavlink/ATTITUDE/message_information/time/last_message?pretty=true js "2020-03-28T14:28:51.577853-03:00"

Get a message structure example:

sh curl --request GET http://0.0.0.0:8088/helper/message/ATTITUDE\?pretty\=true js { "header": { "system_id": 255, "component_id": 0, "sequence": 0 }, "message": { "type": "ATTITUDE", "time_boot_ms": 0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0, "rollspeed": 0.0, "pitchspeed": 0.0, "yawspeed": 0.0 } }

Request vehicle to be armed:

sh # ARM: param1 is 1.0 curl --request POST http://0.0.0.0:8088/mavlink -H "Content-Type: application/json" --data \ '{ "header": { "system_id": 1, "component_id": 1, "sequence": 0 }, "message": { "type":"COMMAND_LONG", "param1":1.0, "param2":0.0,"param3":0.0,"param4":0.0,"param5":0.0,"param6":0.0,"param7":0.0, "command":{ "type":"MAV_CMD_COMPONENT_ARM_DISARM" }, "target_system":0, "target_component":0, "confirmation":0 } }'

Request vehicle to be disarmed:

sh # ARM: param1 is 0.0 curl --request POST http://0.0.0.0:8088/mavlink -H "Content-Type: application/json" --data \ '{ "header": { "system_id": 1, "component_id": 1, "sequence": 0 }, "message": { "type":"COMMAND_LONG", "param1":0.0, "param2":0.0,"param3":0.0,"param4":0.0,"param5":0.0,"param6":0.0,"param7":0.0, "command":{ "type":"MAV_CMD_COMPONENT_ARM_DISARM" }, "target_system":0, "target_component":0, "confirmation":0 } }'

Note: For any invalid GET, you'll receive a 404 response with the error message. Note: The endpoints that allow GET and provides a JSON output, also allow the usage of the query parameter pretty with a boolean value true or false, E.g: http://0.0.0.0:8088/helper/message/COMMAND_LONG?pretty=true

Websocket

It's also possible to connect multiple websockets with the following path /ws/mavlink, the endpoint also accepts the query parameter filter, the filter value should be a regex that matches MAVLink message names, E.g: /ws/mavlink?filter=RC_.* will match RCCHANNELSRAW and RC_CHANNELS, resulting in the following output: json { // First message "chan10_raw": 0, "chan11_raw": 0, "chan12_raw": 0, "chan13_raw": 0, "chan14_raw": 0, "chan15_raw": 0, "chan16_raw": 0, "chan17_raw": 0, "chan18_raw": 0, "chan1_raw": 1500, "chan2_raw": 1500, "chan3_raw": 1500, "chan4_raw": 1500, "chan5_raw": 1500, "chan6_raw": 1500, "chan7_raw": 1500, "chan8_raw": 1500, "chan9_raw": 0, "chancount": 16, "message_information": { "counter": 3732, "frequency": 4.0, "time": { "first_message": "2020-09-01T20:36:24.088099-03:00", "last_message": "2020-09-01T20:51:57.278901-03:00" } }, "rssi": 0, "time_boot_ms": 3122812, "type": "RC_CHANNELS" } { // Second message "chan1_raw": 1500, "chan2_raw": 1500, "chan3_raw": 1500, "chan4_raw": 1500, "chan5_raw": 1500, "chan6_raw": 1500, "chan7_raw": 1500, "chan8_raw": 1500, "message_information": { "counter": 3732, "frequency": 4.0, "time": { "first_message": "2020-09-01T20:36:24.088310-03:00", "last_message": "2020-09-01T20:51:57.279438-03:00" } }, "port": 0, "rssi": 0, "time_boot_ms": 3122812, "type": "RC_CHANNELS_RAW" } For a demonstration, please check the example under the examples filder: websocket_client.py