SensorPush HT1 – fully local Bluetooth integration with onboard history backfill (no cloud, no account)
I built a local Bluetooth integration for the SensorPush HT1 temperature and humidity sensor. No SensorPush account, no cloud, no internet required.
What it does
The HT1 broadcasts temperature and humidity over Bluetooth every second to anyone listening – no pairing required. This integration receives that data directly and updates your entities in real time.
Every 30 minutes (configurable), it briefly connects to the sensor via GATT to read battery level and download the onboard history. The HT1 stores weeks of per-minute readings in onboard flash memory. This integration retrieves all records newer than the last known timestamp and injects them into Home Assistant’s long-term statistics, giving you a continuous temperature and humidity record stretching back to when the battery was last replaced.
How this differs from other HT1 integrations
Other community implementations of the HT1 stop at passive Bluetooth advertisements – they receive the temperature and humidity broadcast and nothing else. That works, but it leaves most of what the HT1 is capable of on the table.
This integration goes further:
- Battery level and voltage – retrieved via GATT connection. You know when the battery needs replacing before the sensor goes silent.
- Signal strength (RSSI) – useful for diagnosing placement and range issues.
- Onboard history backfill (this is the big one) The HT1 stores weeks of per-minute readings in onboard flash memory. No other HA integration retrieves this data. On first setup, the entire contents of the flash are injected into Home Assistant’s long-term statistics automatically. After that, every poll retrieves any records newer than the last known timestamp and fills them in. The result is a continuous, gap-free record of temperature and humidity going back to when the battery was last replaced..even covering time before HA was installed.
The history download protocol was not publicly documented anywhere prior to this integration. The characteristic UUIDs involved (ef090009 and ef09000a) are listed as RESERVED in SensorPush’s own BLE API reference with no further detail. The protocol was determined through direct BLE probing and behavioral testing.
Entities
| Entity | Default | Description |
|---|---|---|
| Temperature | Enabled | Live reading from passive BLE advertisement |
| Humidity | Enabled | Live reading from passive BLE advertisement |
| Battery | Enabled | Battery percentage |
| Battery Voltage | Disabled | Raw battery voltage in volts |
| Signal Strength | Disabled | RSSI in dBm |
Installation
Manual: download the latest release, unzip it, and copy the custom_components/sensorpush_ht1/
folder into your HA config directory. Restart Home Assistant.
HACS: add https://github.com/wxfield/ha-sensorpush-ht1 as a custom repository with category Integration.
Full instructions and protocol documentation are in my README.
Note for existing SensorPush app/cloud users
This integration is independent of the SensorPush cloud. Both can coexist. Passive advertisements are received by anyone simultaneously. Only the periodic GATT connection (battery + history) is exclusive. If the app happens to be syncing at the same moment HA polls, that poll is skipped and retried at the next interval. If you want to preserve your cloud history before switching, export it from the app first. The HT1 requires no pairing..there is nothing to unpair.
Requirements
- Home Assistant 2024.1.0 or later
- Bluetooth adapter accessible to HA
- SensorPush HT1 in range