2020-05-01 17:36:48 +00:00
|
|
|
|
# Smart Switch app for BangleJS
|
2020-04-30 20:31:38 +00:00
|
|
|
|
|
2020-05-01 18:00:50 +00:00
|
|
|
|
This app allows you to remotely control devices (or anything else you like!) with:
|
|
|
|
|
|
|
|
|
|
* [Bangle.js](https://www.espruino.com/Bangle.js) (Hackable JavaScript Smartwatch)
|
|
|
|
|
* [EspruinoHub](https://github.com/espruino/EspruinoHub) (Bluetooth Low Energy -> MQTT bridge)
|
|
|
|
|
* [Node-RED](https://nodered.org) (Flow-based programming tool)
|
|
|
|
|
|
2020-05-01 17:36:48 +00:00
|
|
|
|

|
|
|
|
|
|
2020-05-01 18:00:50 +00:00
|
|
|
|
* Swipe right to turn a device ON
|
|
|
|
|
* Swipe left to turn a device OFF
|
|
|
|
|
* BTN1 (top-right) - Previous device (page)
|
|
|
|
|
* BTN3 (bottom-right) - Next device (page)
|
|
|
|
|
|
|
|
|
|
> Currently, devices can only be added/removed/changed by editing them in the app's source code.
|
2020-05-01 17:36:48 +00:00
|
|
|
|
|
2020-05-01 18:00:50 +00:00
|
|
|
|
# How to use
|
2020-04-30 20:31:38 +00:00
|
|
|
|
|
2020-05-01 18:00:50 +00:00
|
|
|
|
First, you'll need a device that supports BLE.
|
2020-04-30 20:31:38 +00:00
|
|
|
|
|
|
|
|
|
Install EspruinoHub following the directions at [https://github.com/espruino/EspruinoHub](https://github.com/espruino/EspruinoHub)
|
2021-01-03 20:40:40 +00:00
|
|
|
|
|
2020-05-01 18:00:50 +00:00
|
|
|
|
Install [Node-RED](https://nodered.org/docs/getting-started)
|
|
|
|
|
|
|
|
|
|
## Example Node-RED flow
|
|
|
|
|
|
|
|
|
|
Import the following JSON into Node-RED and configure the MQTT IN node to use your EspruinoHub's MQTT instance (default port is 1883):
|
|
|
|
|
|
|
|
|
|
```JSON
|
|
|
|
|
[{"id":"87c6f73e.f22038","type":"mqtt in","z":"a256522.ca0b0b","name":"⌚️BangleJS data","topic":"/ble/advertise/ec:5a:c1:a7:fc:91/data","qos":"2","datatype":"auto","broker":"b961407a.91beb","x":860,"y":100,"wires":[["c37809de.3fc538"]]},{"id":"c37809de.3fc538","type":"function","z":"a256522.ca0b0b","name":"Set topic, remove quotes","func":"msg.topic = \"any_topic_here\";\nmsg.payload = msg.payload.replace(/['\"]+/g, \"\")\n\nreturn msg;","outputs":1,"noerr":0,"x":1070,"y":100,"wires":[["9019be89.5b6d5"]]},{"id":"9019be89.5b6d5","type":"debug","z":"a256522.ca0b0b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1250,"y":100,"wires":[]},{"id":"b961407a.91beb","type":"mqtt-broker","z":"","name":"","broker":"192.168.1.22","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"hello_there","birthQos":"0","birthPayload":"","closeTopic":"bye_now","closeQos":"0","closePayload":"true","willTopic":"bye_now","willQos":"0","willPayload":"true"}]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Replace the topic of the MQTT IN node to use the ID of your Bangle.js device, e.g:
|
|
|
|
|
|
|
|
|
|
`/ble/advertise/ec:5a:c1:a7:fc:91/data`
|
2020-04-30 20:31:38 +00:00
|
|
|
|
|
2020-05-01 18:00:50 +00:00
|
|
|
|
Once you see the MQTT IN node is configured correctly (it says `connected` below the node itself), try swiping in the Smart Switch app, and
|
|
|
|
|
you should see some data in the Debug node.
|
|
|
|
|
|
|
|
|
|
The possibilities for switching things on and off via Bangle.js are now endless. Have fun!
|
|
|
|
|
|
|
|
|
|
# How it works
|
|
|
|
|
|
|
|
|
|
This is the code that does the actual [BLE advertising](https://www.espruino.com/BLE%20Advertising) on the watch itself:
|
2020-04-30 20:31:38 +00:00
|
|
|
|
|
2020-05-01 17:36:48 +00:00
|
|
|
|
```JS
|
|
|
|
|
NRF.setAdvertising({
|
|
|
|
|
0xFFFF: [currentPage, page.state]
|
|
|
|
|
});
|
2020-04-30 20:31:38 +00:00
|
|
|
|
```
|
2020-05-01 17:36:48 +00:00
|
|
|
|
|
2020-05-01 18:00:50 +00:00
|
|
|
|
# Not working?
|
|
|
|
|
|
|
|
|
|
If you can't see any data in Node-RED after swiping, check to see if your device is advertising by visiting port 1888 of your EspruinoHub instance:
|
|
|
|
|
|
|
|
|
|
You should see something like the following:
|
2020-05-01 17:36:48 +00:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
ec:5a:c1:a7:fc:91 - Bangle.js fc91 (RSSI -83)
|
|
|
|
|
ffff => {"data":"1,1"}
|
|
|
|
|
```
|
|
|
|
|
|
2020-05-01 18:02:53 +00:00
|
|
|
|
# Any comments?
|
|
|
|
|
|
|
|
|
|
[Tweet me!](https://twitter.com/BillyWhizzkid)
|
|
|
|
|
|
2020-05-01 17:36:48 +00:00
|
|
|
|
# Future
|
|
|
|
|
|
|
|
|
|
PRs welcome!
|
|
|
|
|
|
|
|
|
|
[ ] Add an HTML GUI for configuring devices inside the Bangle.js App Loader
|
|
|
|
|
[ ] Allow enable/disable of buzz/beep on change of device state
|