a5094920bf
- SettingsActivity: replace GATEWAY_PACKAGE / PackageManager check with
GatewayService status; show BLE device name + live :8765 probe;
buttons now restart GatewayService or redirect to setup wizard
- activity_settings.xml: rename section label to 'BILANCIA SMART',
update button text to '⚙️ Configura bilancia'
- evershelf-scale-gateway/README.md: add DEPRECATED notice (gateway is
now integrated into kiosk v1.6.0+, this app is no longer maintained)
- evershelf-kiosk/README.md: full rewrite — reflects v1.6.0, integrated
BLE gateway, 6-step wizard, permissions table, protocol reference
- README.md: update kiosk features (remove gateway APK install/launch,
add integrated BLE service), update scale section, update architecture,
add kiosk v1.6.0 entry in Recent Updates
157 lines
5.3 KiB
Markdown
157 lines
5.3 KiB
Markdown
# ~~EverShelf Scale Gateway~~ — DEPRECATED
|
|
|
|
> ⚠️ **This app is deprecated and no longer maintained.**
|
|
>
|
|
> As of **EverShelf Kiosk v1.6.0**, BLE scale support is fully integrated into the kiosk app itself. You no longer need to install or configure this separate gateway app.
|
|
>
|
|
> **If you are using the EverShelf Kiosk app** → the scale gateway runs automatically as a background service. Configure your Bluetooth scale in **step 4 of the setup wizard**.
|
|
>
|
|
> **If you are NOT using the kiosk app** (standalone Android tablet) → you may still use this APK, but no new releases will be published.
|
|
|
|
---
|
|
|
|
# EverShelf Scale Gateway (legacy)
|
|
|
|
> Android gateway app that bridges Bluetooth LE smart scales with EverShelf via WebSocket.
|
|
|
|
---
|
|
|
|
## How it works
|
|
|
|
```
|
|
Smart Scale ──(BLE)──► Android Gateway App ──(WebSocket/LAN)──► EverShelf Server ──(SSE)──► Browser
|
|
```
|
|
|
|
The app runs a local WebSocket server (port **8765**) on your Android device. The EverShelf server connects to it via a server-side relay (`api/scale_relay.php` SSE + `api/scale_ping.php` WebSocket client), avoiding mixed-content (HTTPS→WS) issues. Weight readings are streamed to the browser in real time.
|
|
|
|
> **Kiosk integration (v1.6.0+):** The gateway is now **built into the EverShelf Kiosk app** as a foreground service. This separate app is not needed when using the kiosk.
|
|
|
|
---
|
|
|
|
## Supported scale protocols
|
|
|
|
| Protocol | Service UUID | Notes |
|
|
|---|---|---|
|
|
| **Bluetooth SIG Weight Scale** | `0x181D` / char `0x2A9D` | Most compatible; works with most smart scales |
|
|
| **Bluetooth SIG Body Composition** | `0x181B` / char `0x2A9C` | Reports weight + body fat %, BMI |
|
|
| **Generic fallback** | Any notifiable characteristic | Auto-heuristic parsing for 100+ models |
|
|
|
|
### Verified compatible scales (community list)
|
|
- Xiaomi Mi Body Composition Scale 2
|
|
- Renpho Smart Body Fat Scale
|
|
- INEVIFIT Smart Body Fat Scale
|
|
- Any OpenScale-compatible scale (see [openScale supported devices](https://github.com/oliexdev/openScale/wiki/Supported-scales))
|
|
|
|
> **Your scale (B09MRXVBV6):** If it implements the standard BLE Weight Scale or Body Composition profile (very likely for modern Amazon smart scales), the gateway will connect automatically. If not, check the [openScale wiki](https://github.com/oliexdev/openScale/wiki/Supported-scales) and open an issue.
|
|
|
|
---
|
|
|
|
## Download
|
|
|
|
Download the latest APK directly: **[evershelf-scale-gateway.apk](https://github.com/dadaloop82/EverShelf/releases/latest/download/evershelf-scale-gateway.apk)**
|
|
|
|
---
|
|
|
|
## Requirements
|
|
|
|
- Android **7.0** (API 24) or later
|
|
- Bluetooth LE (BLE) support
|
|
- Both the Android device and the device running EverShelf must be on the **same Wi-Fi network**
|
|
|
|
---
|
|
|
|
## Setup (step by step)
|
|
|
|
### 1. Install the APK
|
|
Download and install the APK from the Releases page. You may need to allow "Install from unknown sources" in Android settings.
|
|
|
|
### 2. Launch the app
|
|
The app starts the WebSocket gateway server immediately. You will see the **gateway URL** (e.g. `ws://192.168.1.100:8765`) at the top.
|
|
|
|
### 3. Connect your scale
|
|
Tap **"Cerca Bilance Bluetooth"** (Find Bluetooth Scales). Make sure your scale is turned on. Tap it in the list to connect.
|
|
|
|
### 4. Configure EverShelf
|
|
In EverShelf → ⚙️ Settings → **⚖️ Bilancia Smart**:
|
|
1. Enable the toggle
|
|
2. Paste the gateway URL shown in the Android app
|
|
3. Tap **"Testa connessione"** — you should see ✅
|
|
|
|
### 5. Use it
|
|
When adding or consuming a product with unit **g** or **ml**, a **"⚖️ Leggi dalla bilancia"** button appears. Tap it, place the product on the scale, and the weight is filled in automatically.
|
|
|
|
---
|
|
|
|
## WebSocket protocol reference
|
|
|
|
All messages are JSON. The server sends these to connected clients:
|
|
|
|
```json
|
|
// Scale status update
|
|
{"type":"status","state":"connected","device":"Mi Scale 2","battery":85}
|
|
{"type":"status","state":"disconnected"}
|
|
|
|
// Weight reading (broadcast continuously while scale is active)
|
|
{"type":"weight","value":72.50,"unit":"kg","stable":true,"timestamp":1712345678000}
|
|
|
|
// Response to ping
|
|
{"type":"pong"}
|
|
```
|
|
|
|
Clients can send:
|
|
|
|
```json
|
|
{"type":"get_status"} // Request current status
|
|
{"type":"get_weight"} // Request next stable weight reading
|
|
{"type":"ping"} // Keep-alive
|
|
```
|
|
|
|
---
|
|
|
|
## Build from source
|
|
|
|
### Prerequisites
|
|
- Android Studio Hedgehog (2023.1) or later
|
|
- Java 8+
|
|
|
|
### Steps
|
|
```bash
|
|
# 1. Clone the repo
|
|
git clone https://github.com/dadaloop82/EverShelf.git
|
|
cd EverShelf/evershelf-scale-gateway
|
|
|
|
# 2. Download the Gradle wrapper (if not included)
|
|
gradle wrapper --gradle-version 8.4
|
|
|
|
# 3. Build debug APK
|
|
./gradlew assembleDebug
|
|
|
|
# APK is at: app/build/outputs/apk/debug/app-debug.apk
|
|
```
|
|
|
|
---
|
|
|
|
## Project structure
|
|
|
|
```
|
|
evershelf-scale-gateway/
|
|
├── app/src/main/
|
|
│ ├── kotlin/it/dadaloop/evershelf/scalegate/
|
|
│ │ ├── MainActivity.kt — UI, orchestration
|
|
│ │ ├── BleScaleManager.kt — BLE scanning & GATT connection
|
|
│ │ ├── ScaleProtocol.kt — Parsing for all supported protocols
|
|
│ │ └── GatewayWebSocketServer.kt — WebSocket server (Java-WebSocket)
|
|
│ ├── res/layout/
|
|
│ │ ├── activity_main.xml
|
|
│ │ └── item_device.xml
|
|
│ └── AndroidManifest.xml
|
|
├── build.gradle.kts
|
|
└── settings.gradle.kts
|
|
```
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
MIT — see [LICENSE](../LICENSE)
|