Native Android application for diagnostic exploration of Inhemeter proprietary BLE electricity meters.
- Language: Kotlin
- UI: Jetpack Compose (Material 3)
- Architecture: MVVM + Repository
- BLE: Direct
BluetoothGattAPI (No 3rd-party libs) - Local Storage: Room (Traffic logging + Sessions)
- Min SDK: 26 (Android 8.0)
- Target SDK: 34
Active device discovery with real-time RSSI updates. Automatically highlights target Meter devices (Name: IHM9037284645308).
Hierarchical view of all discovered services and characteristics. Supports raw reads and provides entry point for proprietary writes.
Safe interface for sending HEX payloads.
- Validation: Rejects invalid HEX input.
- Confirmation: Requires explicit user consent before any write operation.
- Quick Payloads: Shortcuts for common diagnostic bytes (00, 01, FF).
Persistent log of all TX (Client-to-Server) and RX (Server-to-Client) traffic.
- Directional Coloring: TX in Green, RX in Blue.
- Filtering: Live search by UUID or payload HEX.
- Export: Writes
.txtpacket logs to the device Downloads folder.
One-tap diagnostic read of the 4 most critical proprietary characteristics:
- Status Byte (
5f78df94) - Value A (
64b4e8b5) - Value B (
42c3dfdd) - Value C (
b7de1eea)
- Launch MeterProbe.
- Grant requested Bluetooth and Location permissions.
- Tap the Bluetooth icon in the top bar to start scanning.
- Locate the device named IHM9037284645308 and tap it.
- The device will automatically connect, negotiate MTU, and discover services.
- Navigate to the GATT Explorer.
- Select a proprietary characteristic.
- Use the Read button to capture raw responses.
- Use the Write button to enter the Console.
- Enter suspected HEX commands and observe the results in the Traffic Logs tab.
- Navigate to the Logs tab.
- Tap the Download icon in the top bar.
- Find the file
MeterProbe_log_<timestamp>.txtin your device's Downloads folder.
- Zero Automatic Writes: Not even upon connection. All writes are user-initiated.
- Confirmation Requirement: Every write triggers an
AlertDialogto prevent accidental commands. - GATT Queueing: Implements a serial queue for all operations to prevent GATT concurrency errors (Error 133).