Il sistema di posizionamento indoor iBeacon può essere utilizzato come sistema per identificare la presenza (o l’assenza) di oggetti dotati di tag iBeacon. Node-RED ed un dispositivo USB Bluetooth 4.0 consentono di leggere la presenza di questi beacon ed eventualmente emularne uno differente (magari in funzione di altri parametri tempovarianti).
Il modulo node-red-contrib-bleacon consiste in due nodi che consentono di leggere ed emulare i tag iBeacon usando una economico adattatore USB Bluetooth 4.0.
Installazione
Il comando npm può essere utilizzato per installare il modulo localmente nella cartella dei moduli di Node-RED
1 |
npm install node-red-contrib-bleacon |
oppure nella cartella globale tramite il comando
1 |
npm install node-red-contrib-bleacon -g |
Nodi inclusi nel pacchetto
- scanBeacon effettua la scansione continua dei beacon presenti e filtrabili per UUID, Major and Minor.
- emulateBeacon emula la presenza di un iBeacons con possibilità di scegliere UUID, Major, Minor and power .
Un esempio di uso
Un semplice esempio di uso può essere ottenuto aggiungendo un nodo scanBeacon e un nodo emulateBeacon, un messaggio di testo con ON o 1 nel payload accenderà la scansione mentre un messaggio con OFF o 0 la spegnerà.
Il nodo scanBeacon restituisce un messaggio JSON per ogni beacon ricevuto contenete tutte le informazioni caratteristiche del beacon nonché la potenza ricevuta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
[ { "id": "91e8f20d.6e171", "type": "inject", "name": "", "topic": "", "payload": "on", "payloadType": "string", "repeat": "", "crontab": "", "once": true, "x": 134, "y": 330, "z": "db8c5543.2473a8", "wires": [ [ "7338fd2e.8cc704" ] ] }, { "id": "396da0a5.c6926", "type": "inject", "name": "", "topic": "", "payload": "off", "payloadType": "string", "repeat": "", "crontab": "", "once": false, "x": 136, "y": 378, "z": "db8c5543.2473a8", "wires": [ [ "7338fd2e.8cc704" ] ] }, { "id": "a2fa3c37.5d05c", "type": "json", "name": "", "x": 452, "y": 360, "z": "db8c5543.2473a8", "wires": [ [ "6fb47cbf.904b84" ] ] }, { "id": "7338fd2e.8cc704", "type": "scanBeacon", "name": "", "beacon_uuid": "", "beacon_major": "", "beacon_minor": "", "x": 291, "y": 358, "z": "db8c5543.2473a8", "wires": [ [ "a2fa3c37.5d05c" ] ] }, { "id": "fee6d9d5.011928", "type": "inject", "name": "", "topic": "", "payload": "on", "payloadType": "string", "repeat": "", "crontab": "", "once": true, "x": 132, "y": 459, "z": "db8c5543.2473a8", "wires": [ [ "5d7401ac.a28c" ] ] }, { "id": "8a86b72e.757948", "type": "inject", "name": "", "topic": "", "payload": "off", "payloadType": "string", "repeat": "", "crontab": "", "once": false, "x": 134, "y": 507, "z": "db8c5543.2473a8", "wires": [ [ "5d7401ac.a28c" ] ] }, { "id": "6fb47cbf.904b84", "type": "debug", "name": "", "active": true, "console": "false", "complete": "false", "x": 559, "y": 483, "z": "db8c5543.2473a8", "wires": [] }, { "id": "5d7401ac.a28c", "type": "emulateBeacon", "name": "", "beacon_uuid": "e2c56db5dffb48d2b060d0f5a71096e0", "beacon_major": "", "beacon_minor": "", "beacon_power": "-59", "x": 307, "y": 487, "z": "db8c5543.2473a8", "wires": [ [ "6fb47cbf.904b84" ] ] } ] |
Ovviamente queste informazioni possono essere storicizzate e salvate a piacere ed utilizzate ad esempio per riconoscere la presenza di oggetti e persone … ma questo lo lascio ad un prossimo post.