Faactory.Channels.JT808
0.6.1
dotnet add package Faactory.Channels.JT808 --version 0.6.1
NuGet\Install-Package Faactory.Channels.JT808 -Version 0.6.1
<PackageReference Include="Faactory.Channels.JT808" Version="0.6.1" />
<PackageVersion Include="Faactory.Channels.JT808" Version="0.6.1" />
<PackageReference Include="Faactory.Channels.JT808" />
paket add Faactory.Channels.JT808 --version 0.6.1
#r "nuget: Faactory.Channels.JT808, 0.6.1"
#:package Faactory.Channels.JT808@0.6.1
#addin nuget:?package=Faactory.Channels.JT808&version=0.6.1
#tool nuget:?package=Faactory.Channels.JT808&version=0.6.1
Channels - JT/T 808 Protocol
This project contains a set of Channels adapters to decode data encoded with JT/T 808 protocol.
Although production-ready, this library is a work in progress. Things might change, break, or behave unpredictably. Use at your own risk.
Learn more about Channels.
Getting started
Install the package from NuGet
dotnet add package Faactory.Channels.JT808
To enable decoding of JT808 packets on the input pipeline, we just need to register the respective middleware with the channel pipeline. We do that with an extension method.
IChannelBuilder builder = ...;
builder.AddJT808Middleware();
With the middleware registered, implement your own middleware to handle the decoded messages.
Generally, if there's a specific reader in place, messages are delivered as a Message<T> where T is the model for the specific data.
Unsupported or unknown JT/T 808 message types are forwarded as BinaryMessage, allowing custom adapters or handlers to process proprietary extensions or non-implemented messages.
For non-implemented or custom protocol messages, an adapter should be written and added to the input pipeline, thus adapting a BinaryMessage into something else. This is usually preferred to handling it directly on a handler.
After decoding, the middleware emits the following message types:
Message<GeneralResponse>Message<TerminalRegistration>Message<TerminalAuthentication>Message<TerminalLogout>Message<TerminalAttributeResponse>Message<TerminalParameterResponse>Message<LocationInformation>Message<LocationInformationQueryResponse>Message<BatchLocationInformation>Message<UplinkPassthroughData>
All supported inbound messages are acknowledged automatically by the middleware, except for TerminalRegistration and TerminalAuthentication, which must be acknowledged explicitly by the application.
Sending Messages
To send a message to the device, the easiest (and recommended) way is to make use of the IMessageBuilder interface. To obtain an instance, call the GetMessageBuilder() extension method on IChannel or IChannelContext.
public class MyHandler : ChannelHandler<Message<TerminalAuthentication>>
{
// ...
public override async Task ExecuteAsync( IChannelContext context, Message<TerminalAuthentication> message )
{
// ...
EncodedMessage acknowledge = context.GetMessageBuilder()
.Platform.Response( message, OperationResult.Success );
context.Output.Write( acknowledge.Buffer );
// ...
}
}
Message Encapsulation
If a message is encapsulated (split across multiple packages), decoding is deferred until all packages are received. An internal encapsulation service reassembles the packages and pushes a single reconstructed message into the pipeline.
DateTime and Timezones
The JT/T 808 protocol does not specify a default timezone for the dates and times. It also does not specify the timezone of the data sent by the device. This means, unfortunately, that the timestamps cannot be interpreted correctly unless the device timezone is known beforehand.
For this reason, the library decodes the dates and times with an unspecified timezone. It is up to the implementer to determine the correct timezone of the device and convert them accordingly.
A good approach is to add the timezone to the device's registration metadata. This information can then be read by the identity handler and stored in the channel's data. This way, the timezone can be retrieved and used by the other handlers to convert the dates and times to the correct timezone. Naturally, the device's configuration must match the information stored in the registration metadata, otherwise the dates and times will be incorrect.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Faactory.Channels.Core (>= 2.9.0)
- Microsoft.Extensions.Options (>= 10.0.9)
- System.Runtime.Caching (>= 10.0.9)
-
net9.0
- Faactory.Channels.Core (>= 2.9.0)
- Microsoft.Extensions.Options (>= 10.0.9)
- System.Runtime.Caching (>= 10.0.9)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.6.1 | 168 | 7/17/2026 |
| 0.6.0 | 143 | 7/9/2026 |
| 0.5.6 | 115 | 7/8/2026 |
| 0.5.5 | 133 | 6/23/2026 |
| 0.5.4 | 107 | 6/23/2026 |
| 0.5.3 | 105 | 6/23/2026 |
| 0.5.2 | 116 | 6/23/2026 |
| 0.5.1 | 115 | 6/22/2026 |
| 0.5.0 | 122 | 6/22/2026 |
| 0.4.0 | 112 | 6/16/2026 |
| 0.3.8 | 114 | 6/1/2026 |
| 0.3.7 | 117 | 6/1/2026 |
| 0.3.6 | 110 | 5/26/2026 |
| 0.3.5 | 112 | 5/25/2026 |
| 0.3.4 | 104 | 5/25/2026 |
| 0.3.3 | 109 | 5/19/2026 |
| 0.3.2 | 109 | 5/18/2026 |
| 0.3.1 | 100 | 5/18/2026 |
| 0.3.0 | 107 | 5/18/2026 |
| 0.2.1 | 125 | 2/25/2026 |