Skip to content

Instantly share code, notes, and snippets.

@dexterlabora
Created August 21, 2019 13:32
Show Gist options
  • Save dexterlabora/9272a4bee34034e13c5892edf6adb4d2 to your computer and use it in GitHub Desktop.
Save dexterlabora/9272a4bee34034e13c5892edf6adb4d2 to your computer and use it in GitHub Desktop.
A simulation of WiFi and BLE probes and MQTT communication network.
[
{
"id": "c100fe2a.cb152",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Broker",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 350,
"y": 80,
"wires": []
},
{
"id": "2d4f4be6.545f04",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Device: AAAA-AAAA-AAAA",
"func": "\nmsg.device = {\n serial: \"AAAA-AAAA-AAAA\",\n name: \"Lobby\",\n tags: [\"Floor-01\", \"Guest\"]\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 580,
"y": 180,
"wires": [
[
"a2445d05.bc6f"
]
]
},
{
"id": "c831ce49.33e98",
"type": "inject",
"z": "90fbc492.9c31f8",
"name": "AP 1",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 110,
"y": 180,
"wires": [
[
"cafd49a5.43b1c8"
]
]
},
{
"id": "d04bdc6a.9a0ab",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "WiFi Clients",
"func": "msg.clients = [\n \"50:dc:e7:98:4f:5e\",\n \"3c:5c:c4:f0:99:06\",\n \"3c:da:2a:f0:89:3e\",\n \"18:fe:34:ed:8b:ea\",\n \"04:03:d6:55:a8:34\",\n \"98:18:88:00:e6:fe\",\n \"18:fe:34:fc:5a:7f\",\n \"64:16:66:35:a8:3b\",\n \"5c:cf:7f:83:c1:99\",\n \"24:18:1d:ae:4c:71\"\n];\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 530,
"y": 400,
"wires": [
[
"2e5b037d.84cd5c"
]
]
},
{
"id": "cafd49a5.43b1c8",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Network: N_1111111111111",
"func": "\nmsg.network = {\n id: \"N_1111111111111\",\n name: \"Branch-01\"\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 320,
"y": 180,
"wires": [
[
"2d4f4be6.545f04"
]
]
},
{
"id": "9ce3e99a.077288",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Broker",
"info": "",
"x": 90,
"y": 40,
"wires": []
},
{
"id": "d01c443e.e40dd8",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "BLE Clients",
"func": "msg.clients = [\n \"bb:dc:e7:98:4f:5e\",\n \"bb:5c:c4:f0:99:06\",\n \"bb:da:2a:f0:89:3e\",\n \"bb:fe:34:ed:8b:ea\",\n \"bb:03:d6:55:a8:34\",\n \"bb:18:88:00:e6:fe\",\n \"bb:fe:34:fc:5a:7f\",\n \"bb:16:66:35:a8:3b\",\n \"bb:cf:7f:83:c1:99\",\n \"bb:18:1d:ae:4c:71\"\n];\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 530,
"y": 440,
"wires": [
[
"2e5b037d.84cd5c"
]
]
},
{
"id": "74498671.f7d1a8",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "MOCK Payload",
"func": "function getRandomInt(max) {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\nconst networkId = msg.network.id;\nconst deviceSerial = msg.device.serial;\nconst device = msg.device;\nconst radio = msg.radio;\nconst service = msg.service;\nconst clientMacs = msg.clients;\n\n\nvar Mock = function(mac) {\n const _date = new Date();\n this.date = _date;\n const _now = _date.toISOString();\n // range of -30 to -90 and possibility of \"disconnected\"\n const _rssi = -90 + getRandomInt(60);\n \n this.rssi = _rssi;\n this.ts = _now;\n this.clientMac = mac;\n};\n\nconst mock = clientMacs.map(c => new Mock(c));\n \nmsg.payload = mock;\n\n\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 460,
"y": 580,
"wires": [
[
"8ba3301e.7d72d"
]
]
},
{
"id": "bb34263f.083858",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Radio: wifi",
"func": "msg.radio = \"wifi\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 350,
"y": 400,
"wires": [
[
"d04bdc6a.9a0ab"
]
]
},
{
"id": "5edccf23.e3352",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Radio: ble",
"func": "msg.radio = \"ble\"\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 340,
"y": 440,
"wires": [
[
"d01c443e.e40dd8"
]
]
},
{
"id": "7a96033f.829b7c",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Service: rssi-old",
"func": "msg.service = \"rssi\"\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 280,
"y": 580,
"wires": [
[
"74498671.f7d1a8"
]
]
},
{
"id": "d40b07e0.afa878",
"type": "mqtt out",
"z": "90fbc492.9c31f8",
"name": "",
"topic": "",
"qos": "",
"retain": "",
"broker": "cac9920e.f8df8",
"x": 750,
"y": 760,
"wires": []
},
{
"id": "3bf5db2b.951b34",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Service: count",
"func": "msg.service = \"count\"\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 280,
"y": 620,
"wires": [
[
"1b1ecfea.a5aad"
]
]
},
{
"id": "1b1ecfea.a5aad",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "MOCK Payload",
"func": "function getRandomInt(max) {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\nconst networkId = msg.network.id;\nconst deviceSerial = msg.device.serial;\nconst device = msg.device;\nconst radio = msg.radio;\nconst service = msg.service;\nconst clientMacs = msg.clients;\n\n\nvar Mock = function(clients) {\n const _date = new Date();\n const _now = _date.toISOString();\n const _count = clients.length;\n \n this.ts = _now;\n this.networkId = networkId;\n this.serial = deviceSerial;\n this.count = _count;\n};\n\nconst mock = new Mock(clientMacs);\n \nmsg.payload = mock;\n\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 460,
"y": 620,
"wires": [
[
"4147e5c3.b8415c"
]
]
},
{
"id": "a2445d05.bc6f",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "AP1",
"links": [
"c32822f5.22b11"
],
"x": 735,
"y": 180,
"wires": []
},
{
"id": "c32822f5.22b11",
"type": "link in",
"z": "90fbc492.9c31f8",
"name": "WiFi Clients",
"links": [
"a2445d05.bc6f",
"44193069.324bf",
"e1413630.c4e2b8",
"4178ccd.8cbe934",
"4b924381.22a80c"
],
"x": 75,
"y": 420,
"wires": [
[
"c862a3d1.90bf4"
]
]
},
{
"id": "8b11e3d5.70476",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Access Points",
"info": "",
"x": 110,
"y": 140,
"wires": []
},
{
"id": "207c9ed1.6a7af2",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Device: BBBB-BBBB-BBBB",
"func": "\nmsg.device = {\n serial: \"BBBB-BBBB-BBBB\",\n name: \"Reception\",\n tags: [\"Floor-01\", \"Guest\"]\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 580,
"y": 240,
"wires": [
[
"4178ccd.8cbe934"
]
]
},
{
"id": "f2c5c2b3.5f0e5",
"type": "inject",
"z": "90fbc492.9c31f8",
"name": "AP 2",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 110,
"y": 240,
"wires": [
[
"e5eadc6e.c1e7f"
]
]
},
{
"id": "e5eadc6e.c1e7f",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Network: N_1111111111111",
"func": "\nmsg.network = {\n id: \"N_1111111111111\",\n name: \"Branch-01\"\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 320,
"y": 240,
"wires": [
[
"207c9ed1.6a7af2"
]
]
},
{
"id": "baf9515b.f18f",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Device: CCCC-CCCC-CCCC",
"func": "\nmsg.device = {\n serial: \"CCCC-CCCC-CCCC\",\n name: \"Elevators\",\n tags: [\"Floor-01\", \"Guest\"]\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 580,
"y": 300,
"wires": [
[
"4b924381.22a80c"
]
]
},
{
"id": "eded4166.0fdaa",
"type": "inject",
"z": "90fbc492.9c31f8",
"name": "AP 3",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 110,
"y": 300,
"wires": [
[
"8fb297b1.bda5d8"
]
]
},
{
"id": "8fb297b1.bda5d8",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Network: N_222222222222",
"func": "\nmsg.network = {\n id: \"N_222222222222\",\n name: \"Branch-02\"\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 320,
"y": 300,
"wires": [
[
"baf9515b.f18f"
]
]
},
{
"id": "4178ccd.8cbe934",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "AP2",
"links": [
"c32822f5.22b11"
],
"x": 735,
"y": 240,
"wires": []
},
{
"id": "4b924381.22a80c",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "AP3",
"links": [
"c32822f5.22b11"
],
"x": 735,
"y": 300,
"wires": []
},
{
"id": "b92171ed.90117",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Radios and Clients",
"info": "",
"x": 130,
"y": 360,
"wires": []
},
{
"id": "1786a7cb.5452f8",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "Radios and Clients",
"links": [
"9a7cbc6a.1bfd7"
],
"x": 735,
"y": 480,
"wires": []
},
{
"id": "9a7cbc6a.1bfd7",
"type": "link in",
"z": "90fbc492.9c31f8",
"name": "",
"links": [
"1786a7cb.5452f8"
],
"x": 60,
"y": 600,
"wires": [
[
"3bf5db2b.951b34",
"e44a77e2.ec3308"
]
]
},
{
"id": "1edb4527.23556b",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Services and Mock",
"info": "",
"x": 130,
"y": 540,
"wires": []
},
{
"id": "8ba3301e.7d72d",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "Services and Mock: rssi",
"links": [
"ad9f7c37.95c95"
],
"x": 735,
"y": 580,
"wires": []
},
{
"id": "3d9da352.8d9c3c",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Publish Data to Topic",
"info": "",
"x": 140,
"y": 720,
"wires": []
},
{
"id": "ad9f7c37.95c95",
"type": "link in",
"z": "90fbc492.9c31f8",
"name": "",
"links": [
"8ba3301e.7d72d",
"4147e5c3.b8415c"
],
"x": 75,
"y": 760,
"wires": [
[
"e37a0428.ec6238"
]
]
},
{
"id": "2e5b037d.84cd5c",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Client MAC Randomizer",
"func": "// Adjust Random Settings Here\nconst clientAddMax = 0;\nconst clientRemoveMax = 0;\n\n\n\n\n// collect existing clients from state\nflow.set('clientMacs', msg.clients);\nvar clientContext = flow.get('clientMacs');\n\n// random client MAC address generator\nvar RandomClient = function(){\n return \"XX:XX:XX:XX:XX:XX\".replace(/X/g, function() {\n return \"0123456789ABCDEF\".charAt(Math.floor(Math.random() * 16))\n });\n}\n\n// add random clients\nconst clientsToAdd = Math.floor(Math.random() * clientAddMax)\nfor (let c = 0; c < clientsToAdd; c++){\n clientContext.push(RandomClient()) \n}\n\n// remove random clients\nconst clientsToRemove = Math.floor(Math.random() * clientRemoveMax)\nfor (let c = 0; c < clientsToRemove; c++){\n clientContext.pop() \n}\n\n// remember state\nflow.set('clientMacs', clientContext);\n\nmsg.clients = clientContext;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 570,
"y": 480,
"wires": [
[
"1786a7cb.5452f8",
"cc07faf5.bb7b58"
]
]
},
{
"id": "8643560b.888df8",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Workflows",
"info": "",
"x": 100,
"y": 860,
"wires": []
},
{
"id": "6cbe0189.df43a",
"type": "mqtt in",
"z": "90fbc492.9c31f8",
"name": "#",
"topic": "#",
"qos": "2",
"broker": "cac9920e.f8df8",
"x": 150,
"y": 940,
"wires": [
[
"3caac59.d4c7d3a"
]
]
},
{
"id": "4318f354.888a6c",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Sub #",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 830,
"y": 940,
"wires": []
},
{
"id": "3caac59.d4c7d3a",
"type": "json",
"z": "90fbc492.9c31f8",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 650,
"y": 940,
"wires": [
[
"4318f354.888a6c"
]
]
},
{
"id": "151baaac.7e8fe5",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Subscribe ALL",
"info": "",
"x": 160,
"y": 900,
"wires": []
},
{
"id": "e61d03e1.b1fff",
"type": "mqtt in",
"z": "90fbc492.9c31f8",
"name": "merakimr/N_1111111111111/+/wifi/count",
"topic": "merakimr/N_1111111111111/+/wifi/count",
"qos": "2",
"broker": "cac9920e.f8df8",
"x": 260,
"y": 1040,
"wires": [
[
"53090390.3cb11c"
]
]
},
{
"id": "72d39704.37bc48",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Sub WiFi Client Count",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 780,
"y": 1040,
"wires": []
},
{
"id": "53090390.3cb11c",
"type": "json",
"z": "90fbc492.9c31f8",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 530,
"y": 1040,
"wires": [
[
"72d39704.37bc48"
]
]
},
{
"id": "e5cd6388.4a029",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Subscribe: to all APs in a network, listing only WiFi client count",
"info": "",
"x": 310,
"y": 1000,
"wires": []
},
{
"id": "cc07faf5.bb7b58",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "clients",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "clients",
"x": 710,
"y": 440,
"wires": []
},
{
"id": "e37a0428.ec6238",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Topic: `merakimr/${networkId}/${deviceSerial}/${radio}/${service}`",
"func": "const networkId = msg.network.id;\nconst deviceSerial = msg.device.serial;\nconst radio = msg.radio;\nconst service = msg.service;\n\n\nmsg.topic = `merakimr/${networkId}/${deviceSerial}/${radio}/${service}`;\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 360,
"y": 760,
"wires": [
[
"d40b07e0.afa878"
]
]
},
{
"id": "93108d5a.44f2f",
"type": "mqtt out",
"z": "90fbc492.9c31f8",
"name": "",
"topic": "",
"qos": "",
"retain": "",
"broker": "cac9920e.f8df8",
"x": 750,
"y": 820,
"wires": []
},
{
"id": "f45ed708.746df8",
"type": "link in",
"z": "90fbc492.9c31f8",
"name": "Topic: clients",
"links": [
"5e0b93f6.ae9b3c",
"62493ba.ad73fc4"
],
"x": 75,
"y": 820,
"wires": [
[
"5465a667.0339a8"
]
]
},
{
"id": "5465a667.0339a8",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Topic: `merakimr/${networkId}/${deviceSerial}/${radio}/${service}/${clientId}`",
"func": "const networkId = msg.network.id;\nconst deviceSerial = msg.device.serial;\nconst device = msg.device;\nconst radio = msg.radio;\nconst service = msg.service;\n//const clientMacs = msg.clients;\nconst clientId = msg.payload.clientMac || clientId;\n\n\nmsg.topic = `merakimr/${networkId}/${deviceSerial}/${radio}/${service}/${clientId}`\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 390,
"y": 820,
"wires": [
[
"93108d5a.44f2f"
]
]
},
{
"id": "4147e5c3.b8415c",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "Services and Mock: Count",
"links": [
"ad9f7c37.95c95"
],
"x": 735,
"y": 620,
"wires": []
},
{
"id": "e44a77e2.ec3308",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Service: rssi",
"func": "msg.service = \"rssi\"\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 270,
"y": 660,
"wires": [
[
"b3dbae13.8052b"
]
]
},
{
"id": "5e0b93f6.ae9b3c",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "Services and Mock: Clients",
"links": [
"f45ed708.746df8"
],
"x": 735,
"y": 660,
"wires": []
},
{
"id": "b3dbae13.8052b",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "MOCK Payload",
"func": "function getRandomInt(max) {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\nconst networkId = msg.network.id;\nconst deviceSerial = msg.device.serial;\nconst txPower = msg.txPower;\nconst device = msg.device;\nconst radio = msg.radio;\nconst service = msg.service;\nconst clientMacs = msg.clients;\n\n\n\nvar Mock = function(mac) {\n const _date = new Date();\n this.date = _date;\n const _now = _date.toISOString();\n // range of -30 to -90 and possibility of \"disconnected\"\n const _rssi = -90 + getRandomInt(60);\n this.rssi = _rssi;\n this.txPower = txPower;\n this.ts = _now;\n this.clientMac = mac;\n this.deviceSerial = deviceSerial;\n};\n\nconst mock = clientMacs.map(c => new Mock(c));\n \nmsg.payload = mock;\n\n\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 460,
"y": 660,
"wires": [
[
"8dd832c0.831b9"
]
]
},
{
"id": "8dd832c0.831b9",
"type": "split",
"z": "90fbc492.9c31f8",
"name": "",
"splt": "\\n",
"spltType": "str",
"arraySplt": 1,
"arraySpltType": "len",
"stream": false,
"addname": "",
"x": 610,
"y": 660,
"wires": [
[
"5e0b93f6.ae9b3c"
]
]
},
{
"id": "b008d71c.66a0f8",
"type": "mqtt in",
"z": "90fbc492.9c31f8",
"name": "merakimr/N_1111111111111/+/wifi/rssi/#",
"topic": "merakimr/N_1111111111111/+/wifi/rssi/#",
"qos": "2",
"datatype": "auto",
"broker": "cac9920e.f8df8",
"x": 260,
"y": 1260,
"wires": [
[
"f9cd9001.dd155"
]
]
},
{
"id": "492e4aea.b43594",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Sub WiFi RSSI - Clients",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 770,
"y": 1260,
"wires": []
},
{
"id": "f9cd9001.dd155",
"type": "json",
"z": "90fbc492.9c31f8",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 530,
"y": 1260,
"wires": [
[
"492e4aea.b43594"
]
]
},
{
"id": "524599c5.f9f128",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Subscribe: to all APs in a network, listing all WiFi client rssi - WITH CLIENT IN TOPIC",
"info": "",
"x": 370,
"y": 1220,
"wires": []
},
{
"id": "b2908032.7f27c",
"type": "mqtt in",
"z": "90fbc492.9c31f8",
"name": "merakimr/+/YYYY-YYYY-YYYY/wifi/rssi/24:18:1d:ae:4c:71",
"topic": "merakimr/+/YYYY-YYYY-YYYY/wifi/rssi/24:18:1d:ae:4c:71",
"qos": "2",
"datatype": "auto",
"broker": "cac9920e.f8df8",
"x": 310,
"y": 1380,
"wires": [
[
"7e8002f1.be268c"
]
]
},
{
"id": "b48ed2a9.02e76",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Sub WiFi RSSI - One Client",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 760,
"y": 1380,
"wires": []
},
{
"id": "7e8002f1.be268c",
"type": "json",
"z": "90fbc492.9c31f8",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 590,
"y": 1420,
"wires": [
[
"b48ed2a9.02e76",
"f9dfa5b8.5588a8"
]
]
},
{
"id": "43be4d14.1e3254",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Subscribe: to all APs in all networks, listing only one WiFi client rssi - WITH CLIENT IN TOPIC",
"info": "",
"x": 400,
"y": 1340,
"wires": []
},
{
"id": "645be8b3.6717c8",
"type": "mqtt in",
"z": "90fbc492.9c31f8",
"name": "merakimr/N_1111111111111/+/wifi/rssi/#",
"topic": "merakimr/N_1111111111111/+/wifi/rssi/#",
"qos": "2",
"datatype": "auto",
"broker": "cac9920e.f8df8",
"x": 260,
"y": 1500,
"wires": [
[
"7ba32c39.16bb34"
]
]
},
{
"id": "3b1d849.a52a27c",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Sub WiFi RSSI - All Clients",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 760,
"y": 1500,
"wires": []
},
{
"id": "7ba32c39.16bb34",
"type": "json",
"z": "90fbc492.9c31f8",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 530,
"y": 1500,
"wires": [
[
"3b1d849.a52a27c"
]
]
},
{
"id": "e4667539.051438",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Subscribe: to all APs in a network, listing only one WiFi client rssi - WITH ALL CLIENTs IN TOPIC",
"info": "",
"x": 410,
"y": 1460,
"wires": []
},
{
"id": "e8a47cee.da2fe",
"type": "mqtt in",
"z": "90fbc492.9c31f8",
"name": "merakimr/N_1111111111111/+/ble/count",
"topic": "merakimr/N_1111111111111/+/ble/count",
"qos": "2",
"broker": "cac9920e.f8df8",
"x": 260,
"y": 1140,
"wires": [
[
"a48b2477.449c08"
]
]
},
{
"id": "f6a804f2.c513e8",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Sub BLE Client Count",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 780,
"y": 1140,
"wires": []
},
{
"id": "a48b2477.449c08",
"type": "json",
"z": "90fbc492.9c31f8",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 530,
"y": 1140,
"wires": [
[
"f6a804f2.c513e8"
]
]
},
{
"id": "650dcc6e.f87dd4",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Subscribe: to all APs in a network, listing only BLE client count",
"info": "",
"x": 310,
"y": 1100,
"wires": []
},
{
"id": "85d73acf.fd75b8",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Count Packet Size",
"func": "msg.payload = JSON.stringify(msg.payload).length;\nnode.status({fill:\"green\",shape:\"ring\",text:msg.payload});\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 510,
"y": 1960,
"wires": [
[
"390810de.c5161"
]
]
},
{
"id": "390810de.c5161",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Packet Size",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 790,
"y": 1960,
"wires": []
},
{
"id": "4c3503e2.88ba1c",
"type": "mqtt in",
"z": "90fbc492.9c31f8",
"name": "merakimr/+/AAAA-AAAA-AAAA/wifi/rssi/#",
"topic": "merakimr/+/AAAA-AAAA-AAAA/wifi/rssi/#",
"qos": "2",
"datatype": "auto",
"broker": "cac9920e.f8df8",
"x": 220,
"y": 2020,
"wires": [
[
"85d73acf.fd75b8",
"e44fdd23.01994",
"779629cd.276918",
"5601d76d.d31478"
]
]
},
{
"id": "e44fdd23.01994",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Total Count Packet Size",
"func": "var count = context.get('count') || 0;\nvar packet = JSON.stringify(msg.payload).length;\ncount += packet\nnode.status({fill:\"green\",shape:\"ring\",text:Math.round(count/1000) + \"kb\"});\ncontext.set('count', count);\nmsg.payload = count\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 530,
"y": 2020,
"wires": [
[
"7596c3bc.62fc2c"
]
]
},
{
"id": "7596c3bc.62fc2c",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Total Packet Size",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 770,
"y": 2020,
"wires": []
},
{
"id": "779629cd.276918",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "Total Packets",
"func": "var packets = context.get('packets') || 0;\npackets++\nnode.status({fill:\"green\",shape:\"ring\",text:packets});\ncontext.set('packets', packets);\nmsg.payload = packets\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 500,
"y": 2080,
"wires": [
[
"1d01423e.e6515e"
]
]
},
{
"id": "1d01423e.e6515e",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "Total Packets",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 780,
"y": 2080,
"wires": []
},
{
"id": "a0464f96.01dc",
"type": "comment",
"z": "90fbc492.9c31f8",
"name": "Analysis",
"info": "",
"x": 120,
"y": 1900,
"wires": []
},
{
"id": "c862a3d1.90bf4",
"type": "function",
"z": "90fbc492.9c31f8",
"name": "txPower",
"func": "function getRandomInt(max) {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\nmsg.txPower = 14 - getRandomInt(2);\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 180,
"y": 420,
"wires": [
[
"bb34263f.083858",
"5edccf23.e3352"
]
]
},
{
"id": "f9dfa5b8.5588a8",
"type": "link out",
"z": "90fbc492.9c31f8",
"name": "sub - wifi clients",
"links": [
"8db1148e.7e65b8",
"3299552f.0b8fea"
],
"x": 695,
"y": 1420,
"wires": []
},
{
"id": "5601d76d.d31478",
"type": "debug",
"z": "90fbc492.9c31f8",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 340,
"y": 2160,
"wires": []
},
{
"id": "2c366672.d40bca",
"type": "mosca in",
"z": "90fbc492.9c31f8",
"mqtt_port": 1883,
"mqtt_ws_port": 8080,
"name": "",
"username": "",
"password": "",
"dburl": "",
"x": 120,
"y": 80,
"wires": [
[
"c100fe2a.cb152"
]
]
},
{
"id": "cac9920e.f8df8",
"type": "mqtt-broker",
"z": "",
"name": "localhost (mosca)",
"broker": "localhost",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": true,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment