https://github.com/cafjs/caf_iot_gatt
CAF library to access BLE GATT services
https://github.com/cafjs/caf_iot_gatt
Last synced: 5 months ago
JSON representation
CAF library to access BLE GATT services
- Host: GitHub
- URL: https://github.com/cafjs/caf_iot_gatt
- Owner: cafjs
- Created: 2017-09-18T04:52:28.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2022-11-28T23:45:46.000Z (over 3 years ago)
- Last Synced: 2025-09-20T04:59:42.940Z (9 months ago)
- Language: JavaScript
- Size: 72.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-2.0.txt
Awesome Lists containing this project
README
# Caf.js
Co-design cloud assistants with your web app and IoT devices.
See https://www.cafjs.com
## Library for Bluetooth GATT Services
A library to access Bluetooth GATT services from an IoT device, or a browser using the Web Bluetooth API (Chrome).
## Dependencies Warning
To eliminate expensive dependencies for apps in the workspace that do not need `caf_iot_gatt`, the packages `@abandonware/noble@^1.9.2-7`, `readable-stream@^2.3.7`, and `@abandonware/bluetooth-hci-socket@^0.5.3-1`have been declared as optional dependencies even though they are always needed.
Applications that depend on `caf_iot_gatt` should also include these dependencies in package.json as normal dependencies.
## API
lib/proxy_iot_gatt.js
## Configuration Example
### iot.json
```
{
"module": "caf_iot_gatt#plug_iot",
"name": "gatt",
"description": "Access BLE GATT services.",
"env" : {
"maxRetries" : "$._.env.maxRetries",
"retryDelay" : "$._.env.retryDelay",
"findCharactTimeout" : "process.env.FIND_CHARACT_TIMEOUT||4000",
"RWCharactTimeout" : "process.env.RW_CHARACT_TIMEOUT||2000"
},
"components" : [
{
"module": "caf_iot_gatt#proxy_iot",
"name": "proxy",
"description": "Proxy to access GATT services.",
"env" : {
}
}
]
}
```
## Debugging Web Bluetooth API on Chrome
The Web Bluetooth API is only available with `https` or a `localhost` address, and it will not work with our usual `http://*.localtest.me` local address.
It is also blocked for cross-origin iframes, and the app needs to be in its own tab. This is the reason all the examples (see `caf_helloiotbrowser2`) spawn a new page when Bluetooth activates.
In the rest of this discussion we are referring to the URL of this new page, e.g., `http://root-helloiotbrowser2.localtest.me/...`.
In Chrome (and only in Chrome) you can have subdomains in localhost, e.g., `root-helloiotbrowser2.localhost`, and they correctly resolve to the local interface. When running in local mode, i.e., after `cafjs run`, the application is always exposed on local port 3003.
Therefore, a hack to get Web Bluetooth API to work in local mode is as follows:
-Run your app locally as usual, spawn the window with Bluetooth code. It will have an address of the form `http://root-.localtest.me/...&token=...`
-Replace `localtest.me` by `localhost:3003` in the Chrome address bar and reload. Leave the rest of the URL as it is, e.g.:
```
http://root-.localhost:3003/... &token=...
```
And now Web Bluetooth is working!