Async Bluetooth reader for Fresh Intellivent SKY sensors and settings.
The reader API replaces the legacy FreshIntelliVent connection/write API.
Existing callers need to follow the migration guide.
From the repository root:
poetry install
poetry run python examples/read.py --authenticateThe script prompts for an existing authentication key without echoing it.
Use --address to select a known fan. See examples for
scanning and pairing to obtain a key.
In application code:
import asyncio
import os
from pyfreshintellivent import FreshIntelliventBluetoothDeviceData
from pyfreshintellivent.scanner import scan
async def main() -> None:
device = await scan(timeout=10)
if device is None:
raise RuntimeError("No supported fan discovered")
reader = FreshIntelliventBluetoothDeviceData(
authentication_code=os.environ["FRESH_AUTH_CODE"],
max_attempts=1,
)
result = await reader.update_device(device)
print(f"RPM: {result.sensors.rpm}, mode: {result.sensors.mode}")
asyncio.run(main())Reuse one reader per device for repeated polling. Applications that manage
Bluetooth themselves can pass their own BLEDevice; Home Assistant integrations
should obtain it through HA's Bluetooth manager.
- SKY sensor and configuration reads with an existing authentication key.
- RPM, operating mode, device-reported temperature, raw sensor fields and configuration models.
- Name-based SKY and ICE discovery. ICE reads remain provisional; see the device support.
- Configuration packet encoders in
SkyModeParser. These return bytes; the library does not send or confirm setting changes.
Humidity percentage is unavailable: humidity_raw, voc_raw and light_raw
have no validated conversion to physical units. Temperature uses the dedicated
protocol field; sensor placement and measurement accuracy remain unverified.
See the protocol reference for services, characteristics
and packet layouts.
- API, pairing and error handling
- Migration from the legacy API
- Bluetooth protocol
- Device support and hardware verification
- Development
Supported Python versions are declared in package metadata.
Licensed under Apache 2.0.
