From 008210710c53f9ff1d0bc6d178a6250367c077af Mon Sep 17 00:00:00 2001 From: Mateus Silva Date: Fri, 16 Aug 2024 09:42:30 -0300 Subject: [PATCH 1/2] Work in progress --- decoders/network/globalstar/assets/xpto.txt | 0 decoders/network/globalstar/description.md | 0 decoders/network/globalstar/network.jsonc | 15 +++++++ .../globalstar/v1.0.0/payload-config.jsonc | 12 ++++++ .../network/globalstar/v1.0.0/payload.test.ts | 39 +++++++++++++++++++ decoders/network/globalstar/v1.0.0/payload.ts | 27 +++++++++++++ 6 files changed, 93 insertions(+) create mode 100644 decoders/network/globalstar/assets/xpto.txt create mode 100644 decoders/network/globalstar/description.md create mode 100644 decoders/network/globalstar/network.jsonc create mode 100644 decoders/network/globalstar/v1.0.0/payload-config.jsonc create mode 100644 decoders/network/globalstar/v1.0.0/payload.test.ts create mode 100644 decoders/network/globalstar/v1.0.0/payload.ts diff --git a/decoders/network/globalstar/assets/xpto.txt b/decoders/network/globalstar/assets/xpto.txt new file mode 100644 index 00000000..e69de29b diff --git a/decoders/network/globalstar/description.md b/decoders/network/globalstar/description.md new file mode 100644 index 00000000..e69de29b diff --git a/decoders/network/globalstar/network.jsonc b/decoders/network/globalstar/network.jsonc new file mode 100644 index 00000000..4c7fc40a --- /dev/null +++ b/decoders/network/globalstar/network.jsonc @@ -0,0 +1,15 @@ +{ + "$schema": "../../../schema/network.json", + "name": "KPN Things", + "images": { + "logo": "", + "icon": "", + "banner": "" + }, + "versions": { + "v1.0.0": { + "src": "./v1.0.0/payload.ts", + "manifest": "./v1.0.0/payload-config.jsonc" + } + } +} diff --git a/decoders/network/globalstar/v1.0.0/payload-config.jsonc b/decoders/network/globalstar/v1.0.0/payload-config.jsonc new file mode 100644 index 00000000..d1cd3181 --- /dev/null +++ b/decoders/network/globalstar/v1.0.0/payload-config.jsonc @@ -0,0 +1,12 @@ +{ + "$schema": "../../../../schema/network_details.json", + "description": "../description.md", + "serial_number_config": { + "required": true, + "label": "EUI / IMEI / UUID", + "case": "upper" + }, + "device_parameters": [], + "middleware_endpoint": "kpn.middleware.tago.io", + "documentation_url": "https://help.tago.io/portal/en/community/topic/how-to-integrate-with-kpn-things" +} diff --git a/decoders/network/globalstar/v1.0.0/payload.test.ts b/decoders/network/globalstar/v1.0.0/payload.test.ts new file mode 100644 index 00000000..cddc39a5 --- /dev/null +++ b/decoders/network/globalstar/v1.0.0/payload.test.ts @@ -0,0 +1,39 @@ +import { describe, test, expect, beforeEach } from "vitest"; +import { readFileSync } from "fs"; +import { join } from "path"; +import { DataToSend } from "@tago-io/sdk/lib/types"; +import * as ts from "typescript"; + +const file = readFileSync(join(__dirname, "./payload.ts")); +const transpiledCode = ts.transpile(file.toString()); + +let payload: DataToSend[] = []; + +describe("Globalstar Payload Validation", () => { + beforeEach(() => { + payload = [ + { + variable: "globalstar_payload", + value: + '[{"bn":"urn:dev:DVNUUID:737b588b-547e-45d3-96d0-f79723291bf1:","bt":1713193637,"n":"battery","u":"%","vs":"32.0"},{"n":"accelerationX","u":"m/s2","v":0.39},{"n":"accelerationY","u":"m/s2","v":3.64},{"n":"accelerationZ","u":"m/s2","v":9.46},{"n":"latitude","u":"lat","v":51.90725},{"n":"longitude","u":"lon","v":4.48934}]', + unit: "", + metadata: {}, + }, + ]; + }); + + test("Check all output variables for acceleration", () => { + const result = eval(transpiledCode); + + expect(result).toEqual( + expect.arrayContaining([ + expect.objectContaining({ variable: "battery", value: "32.0", unit: "%", time: new Date(1713193637 * 1000) }), + expect.objectContaining({ variable: "accelerationX", value: 0.39, unit: "m/s2", time: new Date(1713193637 * 1000) }), + expect.objectContaining({ variable: "accelerationY", value: 3.64, unit: "m/s2", time: new Date(1713193637 * 1000) }), + expect.objectContaining({ variable: "accelerationZ", value: 9.46, unit: "m/s2", time: new Date(1713193637 * 1000) }), + expect.objectContaining({ variable: "latitude", value: 51.90725, unit: "lat", time: new Date(1713193637 * 1000) }), + expect.objectContaining({ variable: "longitude", value: 4.48934, unit: "lon", time: new Date(1713193637 * 1000) }), + ]) + ); + }); +}); diff --git a/decoders/network/globalstar/v1.0.0/payload.ts b/decoders/network/globalstar/v1.0.0/payload.ts new file mode 100644 index 00000000..b438523a --- /dev/null +++ b/decoders/network/globalstar/v1.0.0/payload.ts @@ -0,0 +1,27 @@ +import { DataToSend } from "@tago-io/sdk/lib/types"; + +declare let payload: DataToSend[]; + +/** + * @description Decodes the SenML payload + * @param {SenML[]} senMLObj - SenML object + */ +function decoder(senMLObj: any[]) { + // * to be implemented +} + +// Handle Received Data +const kpnPayload = payload.find((x) => x.variable === "globalstar_payload"); + +if (kpnPayload) { + try { + const contentJSON = JSON.parse(kpnPayload.value as string); + const parsedData = decoder(contentJSON); + // payload = parsedData; + } catch (error) { + // Print the error to the Live Inspector. + // console.error(error); + // Return the variable parse_error for debugging. + payload = [{ variable: "parse_error", value: error.message }]; + } +} From 7b929f658910ba510a2b17da9a5d83f3ac5099dd Mon Sep 17 00:00:00 2001 From: Mateus Silva Date: Wed, 21 Aug 2024 17:05:32 -0300 Subject: [PATCH 2/2] Add Globalstar SmartOne C connector --- .../globalstar/smartone-c/assets/logo.png | Bin 0 -> 67440 bytes .../globalstar/smartone-c/connector.jsonc | 13 +++ .../globalstar/smartone-c/description.md | 1 + .../smartone-c/v1.0.0/payload-config.jsonc | 11 ++ .../smartone-c/v1.0.0/payload.test.ts | 74 +++++++++++++ .../globalstar/smartone-c/v1.0.0/payload.ts | 99 ++++++++++++++++++ 6 files changed, 198 insertions(+) create mode 100644 decoders/connector/globalstar/smartone-c/assets/logo.png create mode 100644 decoders/connector/globalstar/smartone-c/connector.jsonc create mode 100644 decoders/connector/globalstar/smartone-c/description.md create mode 100644 decoders/connector/globalstar/smartone-c/v1.0.0/payload-config.jsonc create mode 100644 decoders/connector/globalstar/smartone-c/v1.0.0/payload.test.ts create mode 100644 decoders/connector/globalstar/smartone-c/v1.0.0/payload.ts diff --git a/decoders/connector/globalstar/smartone-c/assets/logo.png b/decoders/connector/globalstar/smartone-c/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..26ee838ba2e690a602bc9fedd0bafa2a45d75e98 GIT binary patch literal 67440 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,>iyazg6jBGtL=M`KHqU;gtOfAH#8{eRm#fAvd9 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

AETXo1($;a<*%rk8s25XI(qg@_F}Gvq6ar4ZYR9 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 { + beforeEach(() => { + payload = []; + }); + + test("Check all output variables", () => { + payload = [{ variable: "globalstar_payload", value: "002B5372BFF12F0A02", unit: "", metadata: {} }]; + const result = eval(transpiledCode); + + expect(result).toEqual( + expect.arrayContaining([ + expect.objectContaining({ variable: "globalstar_payload", value: "002B5372BFF12F0A02", unit: "", metadata: {} }), + expect.objectContaining({ variable: "battery_state", value: "Good" }), + expect.objectContaining({ variable: "gps_data_valid", value: "Valid" }), + expect.objectContaining({ variable: "missed_input_1", value: 0 }), + expect.objectContaining({ variable: "missed_input_2", value: 0 }), + expect.objectContaining({ variable: "gps_fail_counter", value: 0 }), + expect.objectContaining({ + variable: "location", + value: "30.46356439590454,-90.0813889503479", + location: { type: "Point", coordinates: [-90.0813889503479, 30.46356439590454] }, + }), + expect.objectContaining({ variable: "message_type", value: "Location Message" }), + ]) + ); + }); + + test("Check all output variables - location", () => { + payload = [{ variable: "globalstar_payload", value: "C02B5387BFF129090C", unit: "", metadata: {} }]; + const result = eval(transpiledCode); + + expect(result).toEqual( + expect.arrayContaining([ + expect.objectContaining({ variable: "globalstar_payload", value: "C02B5387BFF129090C", unit: "", metadata: {} }), + expect.objectContaining({ variable: "battery_state", value: "Good" }), + expect.objectContaining({ variable: "gps_data_valid", value: "Valid" }), + expect.objectContaining({ variable: "missed_input_1", value: 0 }), + expect.objectContaining({ variable: "missed_input_2", value: 0 }), + expect.objectContaining({ variable: "gps_fail_counter", value: 3 }), + expect.objectContaining({ + variable: "location", + value: "30.463789701461792,-90.08151769638062", + location: { type: "Point", coordinates: [-90.08151769638062, 30.463789701461792] }, + }), + expect.objectContaining({ variable: "message_type", value: "Location Message" }), + ]) + ); + }); + + test("Shall not be parsed", () => { + payload = [{ variable: "shallnotpass", value: "invalid_payload" }]; + const result = eval(transpiledCode); + + expect(result).toEqual(undefined); + }); + + test("Invalid Payload", () => { + payload = [{ variable: "payload", value: "invalid_payload", unit: "", metadata: {} }]; + const result = eval(transpiledCode); + + expect(result).toEqual([{ variable: "parse_error", value: "Invalid payload size" }]); + }); +}); diff --git a/decoders/connector/globalstar/smartone-c/v1.0.0/payload.ts b/decoders/connector/globalstar/smartone-c/v1.0.0/payload.ts new file mode 100644 index 00000000..5509976d --- /dev/null +++ b/decoders/connector/globalstar/smartone-c/v1.0.0/payload.ts @@ -0,0 +1,99 @@ +import { Data, DataToSend } from "@tago-io/sdk/lib/types"; + +declare let payload: DataToSend[]; + +function calculateLatitude(lat: number): number { + const degreePerCountLat = 90.0 / Math.pow(2, 23); + let latitude = lat * degreePerCountLat; + + if (latitude > 90) { + latitude = 180 - latitude; + } + + return latitude; +} + +function calculateLongitude(long: number): number { + const degreePerCountLong = 180.0 / Math.pow(2, 23); + let longitude = long * degreePerCountLong; + + if (longitude > 180) { + longitude = longitude - 360; + } + + return longitude; +} + +interface DecodedData extends Pick {} + +function ParsePayload(payload: string, group: string | undefined, receivedTime: Date | string | undefined): DecodedData[] { + const buffer = Buffer.from(payload, "hex"); + // const buffer = payload as unknown as Buffer; + + if (buffer.length < 2) { + throw new Error("Invalid payload size"); + } + + const data: DecodedData[] = []; + const checkTime = receivedTime || new Date().toISOString(); + const time = new Date(checkTime); + + const batteryState = (buffer.readUInt8(0) & 0x04) >> 2; + const gpsDataValid = (buffer.readUInt8(0) & 0x08) >> 3; + const missedInput1 = (buffer.readUInt8(0) & 0x10) >> 4; + const missedInput2 = (buffer.readUInt8(0) & 0x20) >> 5; + const gpsFailCounter = (buffer.readUInt8(0) & 0xc0) >> 6; + + const latitude = calculateLatitude(buffer.readIntBE(1, 3)); + const longitude = calculateLongitude(buffer.readIntBE(4, 3)); + + data.push({ variable: "battery_state", value: batteryState ? "Replace" : "Good", group, time }); + data.push({ variable: "gps_data_valid", value: gpsDataValid ? "Invalid" : "Valid", group, time }); + data.push({ variable: "missed_input_1", value: missedInput1, group, time }); + data.push({ variable: "missed_input_2", value: missedInput2, group, time }); + data.push({ variable: "gps_fail_counter", value: gpsFailCounter, group, time }); + data.push({ variable: "location", value: `${latitude},${longitude}`, location: { type: "Point", coordinates: [longitude, latitude] }, group, time }); + + const messageSubtype = (buffer.readUInt8(7) & 0xf0) >> 4; + + switch (messageSubtype) { + case 0: + data.push({ variable: "message_type", value: "Location Message", group, time }); + break; + case 1: + data.push({ variable: "message_type", value: "Device Turned On Message", group, time }); + break; + case 2: + data.push({ variable: "message_type", value: "Change of Location Area Alert Message", group, time }); + break; + case 3: + data.push({ variable: "message_type", value: "Input Status Changed Message", group, time }); + break; + case 4: + data.push({ variable: "message_type", value: "Undesired Input State Message", group, time }); + break; + case 5: + data.push({ variable: "message_type", value: "Re-Center Message", group, time }); + break; + default: + data.push({ variable: "message_type", value: "Unknown", group, time }); + break; + } + + return data; +} + +// Handle Received Data +const payload_raw = payload.find((x) => ["payload_raw", "payload", "data", "globalstar_payload"].includes(x.variable)); + +if (payload_raw) { + try { + const parsedData = ParsePayload(payload_raw.value as string, payload_raw.group, payload_raw.time); + payload = payload.concat(parsedData); + } catch (e) { + // Print the error to the Live Inspector. + console.error(e); + // Return the variable parse_error for debugging. + payload = [{ variable: "parse_error", value: e.message }]; + } +}