@jooby-dev/jooby-codec v2024.325.1353
Jooby message encoders/decoders
This library contains message encoders and decoders for Jooby LoRaWAN devices.
Installation
Install required dependencies:
npm install jooby-codec
This will provide 2 classes of codecs:
- analog
- OBIS observer
Usage of analog codecs
Add to the project:
import {commands, message} from 'jooby-codec/analog';
// output all available commands tree
console.log(commands);
// all uplink commands
console.log(commands.uplink);
// one particular command
console.log(commands.uplink.CurrentMC);
// output main namespace for work with messages
console.log(message);
But it's better to add only necessary commands to the project:
// to get only downlink commands
import {downlink} from 'jooby-codec/analog/commands';
// or slightly more efficient
import * as downlink from 'jooby-codec/analog/commands/downlink';
// to get one particular command
import SetTime2000 from 'jooby-codec/analog/commands/downlink/SetTime2000.js';
The last approach is preferred as it is more efficient and will init only a necessary commands.
It's possible to parse messages either from raw Uint8Array or HEX string:
Parse downlink message:
import {directions, hardwareTypes} from 'jooby-codec/analog/constants';
// from byte array
const messageData = message.fromBytes(
new Uint8Array([
0x02, 0x05, 0x4e, 0x00, 0x01, 0xe2, 0x40,
0x02, 0x05, 0x4e, 0x00, 0x01, 0xe2, 0x40,
0x55
]),
directions.DOWNLINK
);
// or from hex string
const messageData = message.fromHex(
'02 05 4e 00 01 e2 40 02 05 4e 00 01 e2 40 55',
directions.DOWNLINK
);
// decoded data with commands and checksum
console.log(messageData);
/*{
commands: [
{ data: [Object], command: [SetTime2000] },
{ data: [Object], command: [SetTime2000] }
],
lrc: { expected: 85, actual: 85 },
isValid: true
}*/
Parse uplink message:
const messageData = message.fromHex(
'02 01 01 18 06 0f 83 01 08 0a 0c 16 08 2f 97 0f 83 01 08 0a 0c ef',
directions.UPLINK
);
It's possible to parse message with autodetect direction:
// It is highly recommended to use a specific direction.
// AUTO is used here just for example.
const messageData = message.fromHex(
'02 01 01 18 06 0f 83 01 08 0a 0c 16 08 2f 97 0f 83 01 08 0a 0c ef',
directions.AUTO
);
// or even shorter as message.TYPE_AUTO is default behavior
const messageData = message.fromHex(
'02 01 01 18 06 0f 83 01 08 0a 0c 16 08 2f 97 0f 83 01 08 0a 0c ef'
);
It's best to avoid using message.TYPE_AUTO due to performance penalty.
Prepare command and get encoded data:
import SoftRestart from 'jooby-codec/analog/commands/downlink/SoftRestart.js';
import SetTime2000 from 'jooby-codec/analog/commands/downlink/SetTime2000.js';
const command = new SetTime2000({sequenceNumber: 5, seconds: 9462957});
// output command binary in hex representation
// 02 05 05 00 90 64 ad
console.log(command.toHex());
// [2, 5, 5, 0, 144, 100, 173]
console.log(command.toBytes());
Combine a message from commands:
const messageBytes = message.toBytes([
new SetTime2000({sequenceNumber: 78, seconds: 123456}),
new SoftRestart()
]);
or to get in a hex format:
import DayMC from 'jooby-codec/analog/commands/uplink/DayMC.js';
import LastEvent from 'jooby-codec/analog/commands/uplink/LastEvent.js';
const commandInstancesArray = [
new LastEvent(
{
sequenceNumber: 32,
status: {
isBatteryLow: true,
isButtonReleased: false,
isConnectionLost: true,
isMagneticInfluence: false
}
},
hardwareTypes.GASI3
),
new DayMC({
startTime2000: 756604800,
channelList: [
{value: 131, index: 3},
{value: 8, index: 5},
{value: 10, index: 7},
{value: 12, index: 1}
]
})
];
const messageBytes = message.toHex(commandInstancesArray, {prefix: '0x'});
// 0x62 0x20 0x09 0x16 0x09 0x2f 0x97 0xaa 0x01 0x0c 0x83 0x01 0x08 0x0a 0x9e
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
3 months ago
3 months ago
3 months ago
6 months ago
7 months ago
6 months ago
6 months ago
8 months ago
8 months ago
6 months ago
10 months ago
10 months ago
5 months ago
6 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
11 months ago
11 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago