Skip to content

C# Library to communicate with the InReach Satellite API

License

Notifications You must be signed in to change notification settings

LevKochin/InreachIPC

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3dff735 · May 20, 2020

History

22 Commits
Jan 25, 2020
Jan 25, 2020
Oct 30, 2019
May 20, 2020
Oct 30, 2019
Oct 30, 2019
Jan 24, 2020
Jan 25, 2020
Jan 25, 2020

Repository files navigation

InreachIPC

License: Unlicense Build Status NuGet Badge

C# Library to communicate with the InReach Satellite API

Updates

[1/24/2020] v0.1.3 Fix erroneous serialization on subclasses
  • Prevents serialization of private attributes on subclasses where OptIn behavior was not applied.
[1/24/2020] v0.1.2 Proper response deserialization, exception handling, and support for non-attribute uri parameters
  • Breaking change: Services.Send(APIModel) has been renamed to Services.Process(APIModel)
  • Breaking change: APIMessage has been renamed to APIModel
  • Breaking change: Configuration & credentials are now set when instantiating InreachIPC.Services(...)
[1/5/2020] v0.1.1 Added a length-check for outbound messages, throws FormatException when overrun.
  • Binary messages are limited to 268 bytes
  • Text messages are limited to 160 chars

Installation

Install-Package Ayva.InreachIPC

Features

Implemented

  • Binary Messages
  • Text Messages
  • API Version Query
  • API Region Selection
  • Exception Handling
  • Response Model Deserialization

Planned

  • Outbound Message Callback
  • Location History
  • Last Known Location
  • Location Request
  • Tracking
  • Emergency Status

Supported Regions

  • InreachIPC.Config.APIEndpoint: [US, Europe, Australia, Custom]

Example

Setup the API

            //Create the API with credentials and optional endpoint
            InreachIPC.Services API = new InreachIPC.Services(username:"user@name", password:"correct horse battery staple!", region: InreachIPC.Config.RegionalEndpoints.US);

Send a version request

            //First create the API model - we'll use VersionModel for this example
            var APIVersion = new InreachIPC.Messaging.VersionModel();

            //Then send it to InreachIPC.Services to process the request & response.  The model will be populated with the result information, diagnostic information, and the response.
            Console.WriteLine($"Unprocessed APIVersion: {APIVersion}");
            Console.WriteLine($"Processed APIVersion: {await API.Process(APIVersion)}");

            /** Result:
                  Unprocessed APIVersion: {Model=VersionModel, Path=Messaging.svc/Version, Status=NEW, ID=87207750-1ac1-4459-b4b5-d0641140687e | JSON: "{}"}
                  Processed APIVersion: {Model=VersionModel, Path=Messaging.svc/Version, Status=PROCESSED, ID=87207750-1ac1-4459-b4b5-d0641140687e | JSON: "{"Build":"1.0.37.8399","Service":"Messaging","URL":"https://airdroptracker.com/IPCInbound/V1/Messaging.svc","Version":"V1"}"}
             */

            //There are a few other informational methods implemented on the APIModel type:
            //  Get the JSON-parsed & formatted result
            Console.WriteLine($"Model.GetJsonResult(): {await APIVersion.GetJsonResult()}");
            /** Result:
                  Model.GetJsonResult(): {
                    "Build": "1.0.37.8399",
                    "Service": "Messaging",
                    "URL": "https://airdroptracker.com/IPCInbound/V1/Messaging.svc",
                    "Version": "V1"
                  }
             */

            //  Get the raw result text
            Console.WriteLine($"Model.GetRawResult(): {await APIVersion.GetRawResult()}");
            /** Result:
                  Model.GetRawResult(): {"Build":"1.0.37.8399","Service":"Messaging","URL":"https:\/\/airdroptracker.com\/IPCInbound\/V1\/Messaging.svc","Version":"V1"}
             */

Send a binary/text message

            var DeviceIMEI = 555555555555555;
            var Sender = "5165559817";

            //Binary Message Example
            var binaryMessage = new InreachIPC.Messaging.BinaryMessageModel()
            {
                Messages = new List<InreachIPC.Messaging.BinaryMessageModel.Message>()
                {
                    new InreachIPC.Messaging.BinaryMessageModel.Message()
                    {
                        //Max payload is 268 bytes, recipient is the IMEI
                        Payload = new byte[3]{0x00, 0x01, 0x02},
                        Recipients = {DeviceIMEI},
                        Type = InreachIPC.Messaging.BinaryMessageModel.Message.BinaryTypeModel.Generic
                    }
                }
            };

            //Text Message Example
            var textMessage = new InreachIPC.Messaging.TextMessageModel()
            {
                Messages = new List<InreachIPC.Messaging.TextMessageModel.Message>()
                {
                    new InreachIPC.Messaging.TextMessageModel.Message()
                    {
                        MessageText = "API TextMessage Test",
                        Recipients = {DeviceIMEI},
                        Sender = Sender,
                        Timestamp = DateTime.UtcNow
                    }
                }
            };

            try
            {
                /** Final warning: These cost money/credits on plans without unlimited messaging, and require valid credentials **/
                Console.WriteLine(await API.Process(binaryMessage));
                Console.WriteLine(await API.Process(textMessage));
            }

            catch (InreachIPC.Services.InreachIPCException e)
            {
                Console.WriteLine(e);

                /** Example exception (formatted):
                      Ayva.InreachIPC.Services+InreachIPCException:
                        {
                            Message="API request failed",
                            Code=Forbidden,
                            Response={"Code":3,"Description":"","IMEI":null,"Message":"Invalid username or password","URL":"https:\/\/airdroptracker.com\/IPCInbound\/V1\/Messaging.svc\/Binary"},
                            Model={
                                Type=BinaryMessageModel,
                                Path=Messaging.svc/Binary,
                                Status=ERROR,
                                ID=652a8ad8-ee26-440f-8720-7523b751be86
                                JSON={"Messages":[{"_payload":"AAEC","Recipients":[555555555555555],"Type":1,"Payload":"AAEC"}]}
                              },
                            ServicesEndpoint=US
                        }
                 */
            }

License

Unlicense (Public Domain)

About

C# Library to communicate with the InReach Satellite API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%