An ESPHome custom component for controlling a Novy Pureline Pro extractor hood over Bluetooth Low Energy (BLE) via an ESP32.
This integration is based on reverse-engineering the communication between the official mobile app and the extractor hood.
https://github.com/bwynants/hass-purelinepro is similar, but is a HA integration
Tested with Novy Pureline Pro and Novy Cloud extractor
To discover the MAC address, service UUIDs, and iBeacon UUIDs, use the following ESPHome configuration:
esp32_ble_tracker:
on_ble_advertise:
- then:
logger:
level: VERY_VERBOSECheck the ESPHome logs to identify the MAC address associated with your Pureline Pro extractor hood.
external_components:
- source:
type: git
url: https://github.com/bwynants/purelinepro
ref: main
components: [purelinepro]Place the component in your ESPHome components/ directory:
external_components:
- source:
type: local
path: componentsesp32_ble_tracker:
scan_parameters:
interval: 1100ms
window: 1100ms
active: falseReplace the MAC address with your device's address:
ble_client:
- mac_address: "00:00:00:00:00:00"
id: purelinepro_ble_idpurelinepro:
- id: novydampkap
ble_client_id: purelinepro_ble_idRecirculate: Toggles between normal and recirculate mode.Enabled: Enables/disables BLE connection (disable to pair with another device).
switch:
- platform: purelinepro
purelinepro_id: novydampkap
recirculate:
name: Recirculate
enabled:
name: EnabledSingle light (combines white/ambient), supports color and brightness control.
light:
- platform: purelinepro
purelinepro_id: novydampkap
name: "Extractor Light"
id: extractor_light
restore_mode: RESTORE_DEFAULT_OFFUseful remote-like actions:
power: simulates power of remotedelayed_off: if clicked it sets the fan to 25% and puts it off after 5 minutesset_default_light: sets default light for ambi or white, if ambi or white mode is not active it does nothing....ambi_light: start ambi light modewhite_light: start white light modeset_default_speed: sets default speedreset_grease: resets grease filter timer
button:
- platform: purelinepro
purelinepro_id: novydampkap
power:
name: "Power Toggle"
delayed_off:
name: "Delayed Off"
reset_grease:
name: "Reset Grease"
set_default_light:
name: "Set Default Light"
set_default_speed:
name: "Set Default Speed"
ambi_light:
name: "Ambi Light"
white_light:
name: "White Light"fan:
- platform: purelinepro
purelinepro_id: novydampkap
name: "Extractor Fan"
id: extractor_fan
restore_mode: RESTORE_DEFAULT_OFFMonitor extractor hood status and usage:
off_timer: when in cooldown mode, this gives how long remaining before offboost_timer: when in boost mode (fan +75%) this is the remaing time before the fan speed gets loweredgrease_timer: remainig time before grease filter needs cleaningoperating_hours_led: total hours the leds where onoperating_hours_fan: total hours the fan was on
sensor:
- platform: purelinepro
purelinepro_id: novydampkap
off_timer:
name: Off Timer
boost_timer:
name: Boost Timer
grease_timer:
name: Grease Timer
operating_hours_led:
name: LED Hours
operating_hours_fan:
name: Fan Hourscleangrease: Indicates when the grease filter needs cleaning.
binary_sensor:
- platform: purelinepro
purelinepro_id: novydampkap
cleangrease:
name: Clean Grease
disabled_by_default: false- When using light_transition for smooth transitions in Bubble Card sliders, the light crashes because too many requests are sent in a short time.
This project is licensed under the MIT License. See LICENSE for details.
Thanks to the open-source community for tools and documentation that made this reverse engineering effort possible.