From 15dc357b09a85f6652c76957d0f30f0939cf13c9 Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Wed, 23 Jan 2019 17:35:20 +0100 Subject: [PATCH 1/5] Add support for CloudProtocol v2 Add support for CloudProtocol v2 by using CBOR label names for SenML objects property names. This is required to support https://github.com/bcmi-labs/ArduinoCloudThing/pull/6 (the same change on the ArduinoCloudThing library for sketches). --- src/index.js | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 0ec5a52..6afa7d2 100644 --- a/src/index.js +++ b/src/index.js @@ -331,7 +331,68 @@ const closeCloudMonitor = (deviceId) => { return unsubscribe(cloudMonitorOutputTopic); }; -const sendProperty = (thingId, name, value, timestamp) => { +const toCloudProtocolV2 = (cborValue) => { + const cloudV2CBORValue = {}; + let cborLabel = null; + + Object.keys(cborValue).forEach((label) => { + switch (label) { + case 'bn': + cborLabel = -2; + break; + case 'bt': + cborLabel = -3; + break; + case 'bu': + cborLabel = -4; + break; + case 'bv': + cborLabel = -5; + break; + case 'bs': + cborLabel = -6; + break; + case 'bver': + cborLabel = -1; + break; + case 'n': + cborLabel = 0; + break; + case 'u': + cborLabel = 1; + break; + case 'v': + cborLabel = 2; + break; + case 'vs': + cborLabel = 3; + break; + case 'vb': + cborLabel = 4; + break; + case 'vd': + cborLabel = 8; + break; + case 's': + cborLabel = 5; + break; + case 't': + cborLabel = 6; + break; + case 'ut': + cborLabel = 7; + break; + default: + cborLabel = label; + } + + cloudV2CBORValue[cborLabel] = cborValue[label]; + }); + + return cloudV2CBORValue; +}; + +const sendProperty = (thingId, name, value, timestamp, useCloudProtocolV2 = true) => { const propertyInputTopic = `/a/t/${thingId}/e/i`; if (timestamp && !Number.isInteger(timestamp)) { @@ -342,7 +403,7 @@ const sendProperty = (thingId, name, value, timestamp) => { throw new Error('Name must be a valid string'); } - const cborValue = { + let cborValue = { bt: timestamp || new Date().getTime(), n: name, }; @@ -361,10 +422,14 @@ const sendProperty = (thingId, name, value, timestamp) => { break; } + if (useCloudProtocolV2) { + cborValue = toCloudProtocolV2(cborValue); + } + return sendMessage(propertyInputTopic, CBOR.encode([cborValue])); }; -const getSenml = (deviceId, name, value, timestamp) => { +const getSenml = (deviceId, name, value, timestamp, useCloudProtocolV2 = true) => { if (timestamp && !Number.isInteger(timestamp)) { throw new Error('Timestamp must be Integer'); } @@ -395,6 +460,12 @@ const getSenml = (deviceId, name, value, timestamp) => { default: break; } + + + if (useCloudProtocolV2) { + return toCloudProtocolV2(senMl); + } + return senMl; }; From 7ca0d138a93d8e91f4c4495272f2522d31d80daf Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Wed, 23 Jan 2019 16:26:29 +0100 Subject: [PATCH 2/5] Change existing tests to forcibly use the v1 CloudProtocol version --- test/cbor.test.js | 78 ++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/test/cbor.test.js b/test/cbor.test.js index 6536223..a53261b 100644 --- a/test/cbor.test.js +++ b/test/cbor.test.js @@ -33,11 +33,13 @@ const base64toHEX = (base64) => { return HEX; }; +// CloudProtocol v1 + it('Generate a valid cbor for a senml string property with basename', () => { const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x73,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -46,9 +48,9 @@ it('Generate a valid cbor for a senml string property with basename', () => { it('Generate a valid cbor for a senml string property without basename', () => { const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x76,0x73,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,'; - const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -58,9 +60,9 @@ it('Generate a valid cbor for a senml string property without basename', () => { it('Generate a valid cbor for a senml unsigned int property with basename', () => { const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x03,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -70,9 +72,9 @@ it('Generate a valid cbor for a senml unsigned int property with basename', () = it('Generate a valid cbor for a senml unsigned int property without basename', () => { const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x76,0x03,'; - const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -81,9 +83,9 @@ it('Generate a valid cbor for a senml unsigned int property without basename', ( it('Generate a valid cbor for a senml signed int property with basename', () => { const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x22,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -92,9 +94,9 @@ it('Generate a valid cbor for a senml signed int property with basename', () => it('Generate a valid cbor for a senml signed int property without basename', () => { const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x76,0x22,'; - const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -104,9 +106,9 @@ it('Generate a valid cbor for a senml signed int property without basename', () it('Generate a valid cbor for a senml float property with basename', () => { const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -115,9 +117,9 @@ it('Generate a valid cbor for a senml float property with basename', () => { it('Generate a valid cbor for a senml float property without basename', () => { const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x76,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,'; - const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -127,9 +129,9 @@ it('Generate a valid cbor for a senml float property without basename', () => { it('Generate a valid cbor for a senml double property with basename', () => { const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -138,9 +140,9 @@ it('Generate a valid cbor for a senml double property with basename', () => { it('Generate a valid cbor for a senml double property without basename', () => { const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x76,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,'; - const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -149,9 +151,9 @@ it('Generate a valid cbor for a senml double property without basename', () => { it('Generate a valid cbor for a senml boolean property with basename', () => { const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x62,0xF5,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -160,9 +162,9 @@ it('Generate a valid cbor for a senml boolean property with basename', () => { it('Generate a valid cbor for a senml boolean property without basename', () => { const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x76,0x62,0xF5,'; - const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, false); console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -172,15 +174,15 @@ it('Generate a valid cbor for a senml boolean property without basename', () => it('Generate a valid cbor for multiple properties with basename', () => { const output = '0x86,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x04,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x23,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x73,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x62,0xF5,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,'; - const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp); - const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp); - const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp); - const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp); - const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp); - const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp); + const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp, false); + const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp, false); + const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp, false); + const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp, false); + const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, false); + const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp, false); const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; console.log(senMl); - const cborbase64 = ArduinoCloud.getCborValue(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl, false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); @@ -190,15 +192,15 @@ it('Generate a valid cbor for multiple properties with basename', () => { it('Generate a valid cbor for multiple properties with basename', () => { const output = '0x86,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x76,0x04,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x76,0x23,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x76,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x76,0x73,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x76,0x62,0xF5,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x76,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,'; - const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp); - const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp); - const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp); - const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp); - const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp); - const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp); + const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp, false); + const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp, false); + const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp, false); + const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp, false); + const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, false); + const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp, false); const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; console.log(senMl); - const cborbase64 = ArduinoCloud.getCborValue(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl, false); console.log(cborbase64); const cborHex = base64toHEX(cborbase64); console.log(cborHex); From 1a48772ad5a18749cc969a18b56b77ba90e81953 Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Wed, 23 Jan 2019 17:36:22 +0100 Subject: [PATCH 3/5] Add unit tests for the CloudProtocol v2 CBOR conversion --- test/cbor.test.js | 175 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) diff --git a/test/cbor.test.js b/test/cbor.test.js index a53261b..65f62e0 100644 --- a/test/cbor.test.js +++ b/test/cbor.test.js @@ -206,3 +206,178 @@ it('Generate a valid cbor for multiple properties with basename', () => { console.log(cborHex); expect(cborHex).toStrictEqual(output); }); + + +// CloudProtocol v2 + +it('[CloudProtocol v2] Generate a valid cbor for a senml string property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + +it('[CloudProtocol v2] Generate a valid cbor for a senml string property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + + +it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + + +it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + +it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + +it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + + +it('[CloudProtocol v2] Generate a valid cbor for a senml float property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + +it('[CloudProtocol v2] Generate a valid cbor for a senml float property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + + +it('[CloudProtocol v2] Generate a valid cbor for a senml double property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + +it('[CloudProtocol v2] Generate a valid cbor for a senml double property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + +it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + +it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + + +it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { + const output = '0x86,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp); + const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp); + const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp); + const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp); + const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp); + const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp); + const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; + console.log(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); + + +it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { + const output = '0x86,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp); + const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp); + const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp); + const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp); + const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp); + const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp); + const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; + console.log(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); +}); From f6450286035b78d8bde52a47b6487a9e3e11debb Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Mon, 4 Feb 2019 15:19:19 +0100 Subject: [PATCH 4/5] Keep using CloudProtocol v1 by default --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 6afa7d2..1c4ad0c 100644 --- a/src/index.js +++ b/src/index.js @@ -392,7 +392,7 @@ const toCloudProtocolV2 = (cborValue) => { return cloudV2CBORValue; }; -const sendProperty = (thingId, name, value, timestamp, useCloudProtocolV2 = true) => { +const sendProperty = (thingId, name, value, timestamp, useCloudProtocolV2 = false) => { const propertyInputTopic = `/a/t/${thingId}/e/i`; if (timestamp && !Number.isInteger(timestamp)) { @@ -429,7 +429,7 @@ const sendProperty = (thingId, name, value, timestamp, useCloudProtocolV2 = true return sendMessage(propertyInputTopic, CBOR.encode([cborValue])); }; -const getSenml = (deviceId, name, value, timestamp, useCloudProtocolV2 = true) => { +const getSenml = (deviceId, name, value, timestamp, useCloudProtocolV2 = false) => { if (timestamp && !Number.isInteger(timestamp)) { throw new Error('Timestamp must be Integer'); } From 3907380e57a3284a5c314a66e65a4d3678e144cb Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Mon, 4 Feb 2019 15:27:32 +0100 Subject: [PATCH 5/5] Set explicitly useCloudProtocolV2 to true on test --- test/cbor.test.js | 48 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/test/cbor.test.js b/test/cbor.test.js index 65f62e0..d6f60bb 100644 --- a/test/cbor.test.js +++ b/test/cbor.test.js @@ -212,7 +212,7 @@ it('Generate a valid cbor for multiple properties with basename', () => { it('[CloudProtocol v2] Generate a valid cbor for a senml string property with basename', () => { const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -223,7 +223,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml string property with ba it('[CloudProtocol v2] Generate a valid cbor for a senml string property without basename', () => { const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -235,7 +235,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml string property without it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property with basename', () => { const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -247,7 +247,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property w it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property without basename', () => { const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -258,7 +258,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property w it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property with basename', () => { const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -269,7 +269,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property wit it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property without basename', () => { const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -281,7 +281,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property wit it('[CloudProtocol v2] Generate a valid cbor for a senml float property with basename', () => { const output = '0x81,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -292,7 +292,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml float property with bas it('[CloudProtocol v2] Generate a valid cbor for a senml float property without basename', () => { const output = '0x81,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -304,7 +304,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml float property without it('[CloudProtocol v2] Generate a valid cbor for a senml double property with basename', () => { const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -315,7 +315,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml double property with ba it('[CloudProtocol v2] Generate a valid cbor for a senml double property without basename', () => { const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -326,7 +326,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml double property without it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property with basename', () => { const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp); + const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -337,7 +337,7 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property with b it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property without basename', () => { const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp); + const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, true); console.log([senMl]); const cborbase64 = ArduinoCloud.getCborValue([senMl]); console.log(cborbase64); @@ -349,12 +349,12 @@ it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property withou it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { const output = '0x86,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp); - const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp); - const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp); - const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp); - const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp); - const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp); + const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp, true); + const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp, true); + const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp, true); + const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp, true); + const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, true); + const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp, true); const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; console.log(senMl); const cborbase64 = ArduinoCloud.getCborValue(senMl); @@ -367,12 +367,12 @@ it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basena it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { const output = '0x86,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp); - const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp); - const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp); - const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp); - const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp); - const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp); + const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp, true); + const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp, true); + const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp, true); + const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp, true); + const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, true); + const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp, true); const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; console.log(senMl); const cborbase64 = ArduinoCloud.getCborValue(senMl);