Controlling BLE ceiling light with HA

Hello @blmcg,
I am not sure what kind of “how-to” you would like, several can be done:

  • Global how-to including how to use esphome and flash ESP32 devices, I am not sure this would be relevant as this is probably better to see esphome doc for this.
  • How to use the component ble_adv_controller in esphome: there is a light doc with a description of the options in my temporary repo here (PR on going on the main repo from owner). Tell me if this is not enough and what you would like to see in it.

Rgds

Im new to using ESPhome so i dont get it yet, so step 1-3 dont make sense to me.
But yes, how to use the ble_adv_controller component.

so when im pairing the light to the esp32 i go by this process and it doesn’t seem to work.

  1. turn on switch on the wall.
  2. press the setup button on remote
  3. press pair in home assistant.

i have also tried

  1. turn on switch on the wall.
  2. press pair in home assistant.

is my only option left to keep trying different variants reflash and tests?

my lamp does use fanlamp pro. can not seem to find a manufature on it.

I updated the doc to clarify what this component was and how to use it with ESPHome and an ESP32 microcontroller. Once you will get used to using ESPHome with the links to the documentation and start guide given, the configuration examples of the ble_adv_controller should be self- explanatory.

Hi @tosh.krl, I updated the doc to specify more in detail the pairing procedure and the fact you indeed need to test variants one by one. For FanLamp Pro app, the latest variant is v3, but a lot of users reported that variant v1b was the working one for them.

Concerning the pairing button, the one in Home Assistant is the one to be used within 5s after having powered on the light.

got it will keep working at it…

this is the light that my wife bought.

https://www.amazon.com/dp/B0D297458G?psc=1&ref=ppx_yo2ov_dt_b_product_details

can confirm i just got this light and fan running using v3 variant.

thanks all!

2 Likes

This also worked with my STERREN ceiling fan that I picked up on Amazon.

Sterren Ceiling Fan

@NicoIIT so its been working pretty well, except I cannot go from fan being in off position to 16% which is speed #1. It seems fine going from any other speed to #1 but not from the off position. Strange, i know, any ideas?

Hi @Maxcodesthings , I did (lots) of updates in the last week, including the review of the Fan algo. Have you tried to update / rebuild from last version ?

Great question. Let me try new version and get back to you. Thanks!

MAJOR new change including:

  • Multiple Pairing using different variants, to simplify your life @tosh.krl ! see the doc
  • Dynamic configuration of Variant from Home Assistant,
  • (tech) Multiplexed advertising allowing to advertise (in fact by repeated sequence of 100ms) several messages, such as pairing in all encoding variants or control of several devices at the same time
  • Fan Oscillation for FanLamp v2/v3
  • (tech) Reviewed Color Temperature and Brightness computation and handling
  • (tech) Better support for transitions and high rate commands for lights
  • Updated Doc for all those features

I need help to test and provide feedback, positive and/or negative ! :smile:

EDIT: due to unforeseen impacts the change has been moved to the ‘dev’ branch pending bug resolution.

EDIT2: Bug corrected ! All features available on main Branch.

2 Likes

Awesome job! For fear of upsetting the wife, ill try it out when u get it into main :wink:.
The previous release did fix my issues btw, the fan feels snappier now.

1 Like

Hello,

I have a fan/light with FanLamp Pro application which is working properly.

I bought this ESP32 for usb : https://es.aliexpress.com/item/1005006612858501.html?spm=a2g0o.order_list.order_list_main.5.41a5194dSAMnO9&gatewayAdapt=glo2esp

esphome:
  name: daiconesp
  friendly_name: DaiconESP

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Daiconesp Fallback Hotspot"
    password: "xxxxxxxxxxxx"

captive_portal:

external_components:
  - source: github://NicoIIT/esphome-components@main

ble_adv_controller:
  # A controller per device, or per remote in fact as it has the same role
  - id: my_controller
    # encoding: could be any of 'zhijia', 'fanlamp_pro', 'smartlamp_pro' (the 2 last are the same)
    encoding: fanlamp_pro
    # variant: variant of the encoding 
    # For ZhiJia: Can be v0 (MSC16), v1 (MSC26) or v2 (MSC26A), default is v2
    # For Fanlamp: Can be any of 'v1a', 'v1b', 'v2' or 'v3', depending on how old your lamp is... Default is 'v3'
    variant: v3
    # max_duration (default 3000, range 300 -> 10000): the maximum duration during which the command is advertized.
    # if a command is received before the 'max_duration' but after the 'duration', it is processed immediately 
    # Increasing this parameter will have no major consequences, the component will just keep advertize the command
    # Could be interesting at pairing time to have the pairing command advertized for a long time
    max_duration: 3000
    # duration (default 200, range 100 -> 500): the MINIMUM duration during which the command is sent.
    # if a command is received before the 'duration' it is queued and processed later, 
    # if there is already a similar command pending, in this case the pending command is removed from the queue
    # Increasing this parameter will make the combination of commands slower. See 'Dynamic Configuration'.
    duration: 200
    # reversed: reversing the cold / warm at encoding time, needed for some controllers
    # default to false
    reversed: false
    # forced_id: provide the 4 bytes identifier key extracted from your app phone traffic 
    # to share the same key than the phone
    # example: 0xBFF62757
    # For ZhiJia, default to 0xC630B8 which was the value hard-coded in ble_adv_light component. Max 0xFFFFFF.
    # For FanLamp: default to 0, uses the hash id computed by esphome from the id/name of the controller
    forced_id: 0
    # show_config (default true): shows the dynamic configuration in the device info page in Home Automation
    show_config: true

light:
  - platform: ble_adv_controller
    # ble_adv_controller_id: the ID of your controller
    ble_adv_controller_id: my_controller
    # name: the name as it will appear in Home Assistant
    name: First Light
    # min_brightness: % minimum brightness supported by the light before it shuts done
    # just setup this value to 0, then test your lamp by decreasing the brightness percent by percent. 
    # when it switches off, you have the min_brightness to setup here.
    # Default to 21%
    min_brightness: 21%
    # send_brightness_after_color_temperature_change: refresh the brightness after the color temperature was changed.
    # workaround for issue https://github.com/aronsky/esphome-components/issues/18
    send_brightness_after_color_temperature_change: false

fan:
  - platform: ble_adv_controller
    ble_adv_controller_id: my_controller
    name: my fan
    # speed_count: the number of speed level available on your remote / app. Can be 0 / 3 / 6.
    # if not properly setup the remote and this component does not behave properly together
    # only speed 6 is available for zhijia, and this is the default
    speed_count: 6
    # use_direction: ability to change the fan direction forward / reverse.
    # default to true, not available for zhijia
    use_direction: true
    # use_oscillation: ability to start / stop the fan oscillation.
    # default to false, only available for FanLamp v2 / v3
    use_oscillation: false

button:
  - platform: ble_adv_controller
    ble_adv_controller_id: my_controller
    name: Pair
    # cmd: the action to be executed when the button is pressed
    # any of 'pair', 'unpair', 'custom', 'light_on', ...
    cmd: pair

In the ‘Logs’ I can see how the commands are sent when pressing the buttons my HA has created.
But it does not work.
There is no way to make the ‘pair’ button work.
I have tried all the ‘variants’, multiple ‘durations’ and nothing.

Any suggestions or tests I can do?

Just to get ride of the potentiality, could you confirm you followed the same procedure to pair your device than the one you used to pair with the phone app, meaning power off/on the light and press pair button within the 5s? And are you using the latest version of the component deployed yesterday and allowing to use dynamic configuration? If yes I will need the logs of the pairing to start investigations.

Hello,

Yes, I have done the same procedure as the mobile app.
In fact, I have ‘deleted’ the link from the mobile app, even from the remote control that comes with the fan.
I have added them back, no problems.

But nothing, I can’t manage to link this way with the ESP32.

By the way, the version I had installed was 2-3 days old, but I just installed the latest one (I understand that with the yaml I have, it is enough to reinstall, right?) And it still doesn’t work.

Here is the startup log and the one-time pairing attempt.

INFO ESPHome 2024.7.2
INFO Reading configuration /config/esphome/daiconesp.yaml...
INFO Starting log output from 192.168.1.102 using esphome API
INFO Successfully connected to daiconesp @ 192.168.1.102 in 0.149s
INFO Successful handshake with daiconesp @ 192.168.1.102 in 0.087s
[09:48:56][I][app:100]: ESPHome version 2024.7.2 compiled on Jul 31 2024, 09:42:48
[09:48:56][C][wifi:599]: WiFi:
[09:48:56][C][wifi:427]:   Local MAC: E8:6B:EA:36:77:54
[09:48:56][C][wifi:432]:   SSID: [redacted]
[09:48:56][C][wifi:435]:   IP Address: 192.168.1.102
[09:48:56][C][wifi:439]:   BSSID: [redacted]
[09:48:56][C][wifi:440]:   Hostname: 'daiconesp'
[09:48:56][C][wifi:442]:   Signal strength: -73 dB ▂▄▆█
[09:48:56][C][wifi:446]:   Channel: 1
[09:48:56][C][wifi:447]:   Subnet: 255.255.255.0
[09:48:56][C][wifi:448]:   Gateway: 192.168.1.1
[09:48:56][C][wifi:449]:   DNS1: 80.58.61.250
[09:48:56][C][wifi:450]:   DNS2: 80.58.61.254
[09:48:56][C][logger:185]: Logger:
[09:48:56][C][logger:186]:   Level: DEBUG
[09:48:56][C][logger:188]:   Log Baud Rate: 115200
[09:48:56][C][logger:189]:   Hardware UART: UART0
[09:48:56][C][light:103]: Light 'First Light'
[09:48:56][C][light:105]:   Default Transition Length: 0.0s
[09:48:56][C][light:106]:   Gamma Correct: 2.80
[09:48:56][C][ble_adv_light:024]: BleAdvLight
[09:48:56][C][ble_adv_light:149]:   Controller 'my_controller'
[09:48:56][C][ble_adv_light:026]:   Base Light 'First Light'
[09:48:56][C][ble_adv_light:027]:   Cold White Temperature: 167.000000 mireds
[09:48:56][C][ble_adv_light:028]:   Warm White Temperature: 333.000000 mireds
[09:48:56][C][ble_adv_light:029]:   Minimum Brightness: 0xA0000000
[09:48:56][C][ble_adv_fan:022]: BleAdvFan 'my fan'
[09:48:56][C][ble_adv_fan:149]:   Controller 'my_controller'
[09:48:56][C][ble_adv_button:011]: BleAdvButton 'Pair'
[09:48:56][C][ble_adv_button:149]:   Controller 'my_controller'
[09:48:56][C][esp32_ble:383]: ESP32 BLE:
[09:48:56][C][esp32_ble:385]:   MAC address: E8:6B:EA:36:77:56
[09:48:56][C][esp32_ble:386]:   IO Capability: none
[09:48:56][C][ble_adv_controller:052]: BleAdvController 'my_controller'
[09:48:56][C][ble_adv_controller:053]:   Hash ID '388E6F12'
[09:48:56][C][ble_adv_controller:054]:   Transmission Min Duration: 0 ms
[09:48:56][C][ble_adv_controller:055]:   Transmission Max Duration: 3000 ms
[09:48:56][C][ble_adv_controller:056]:   Transmission Sequencing Duration: 50 ms
[09:48:56][C][ble_adv_controller:057]:   Configuration visible: YES
[09:48:56][C][captive_portal:088]: Captive Portal:
[09:48:56][C][mdns:116]: mDNS:
[09:48:56][C][mdns:117]:   Hostname: daiconesp
[09:48:56][C][esphome.ota:073]: Over-The-Air updates:
[09:48:56][C][esphome.ota:074]:   Address: daiconesp.local:3232
[09:48:56][C][esphome.ota:075]:   Version: 2
[09:48:56][C][esphome.ota:078]:   Password configured
[09:48:56][C][safe_mode:018]: Safe Mode:
[09:48:56][C][safe_mode:020]:   Boot considered successful after 60 seconds
[09:48:56][C][safe_mode:021]:   Invoke after 10 boot attempts
[09:48:56][C][safe_mode:023]:   Remain in safe mode for 300 seconds
[09:48:56][C][api:139]: API Server:
[09:48:56][C][api:140]:   Address: daiconesp.local:6053
[09:48:56][C][api:142]:   Using noise encryption: YES
[09:49:14][D][button:010]: 'Pair' Pressed.
[09:49:14][D][ble_adv_button:016]: BleAdvButton::press_action called
[09:49:14][D][fanlamp_pro:241]: FanLamp - v1a - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [18,96,129]
[09:49:14][D][fanlamp_pro:241]: FanLamp - v1b - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [18,96,129]
[09:49:14][D][fanlamp_pro:295]: FanLamp - v2 - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [0,0,0,0]
[09:49:14][D][fanlamp_pro:295]: FanLamp - v3 - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [0,0,0,0]
[09:49:14][D][ble_adv_controller:130]: my_controller - request start advertising: 77.F8.B6.5F.2B.5E.00.FC.31.51.CC.F2.9E.40.22.4A.BB.FC.02.D0.C5.A6.ED.B2.A8.1A (26)
[09:49:14][D][ble_adv_controller:130]: my_controller - request start advertising: F9.08.49.13.F0.69.25.4E.31.51.BA.AE.D0.0E.6C.CD.BA.7C.71.41.16.3A.0A.2A.C0.4C (26)
[09:49:14][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.0A.EB.31.BE.3E.DC.A0.03.A9.E3.C2.0E.9B.5C.9E.D4.BA.0F.29.31.D6.CA (26)
[09:49:14][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.DC.34.11.01.D1.48.49.24.92.29.9E.03.16.84.E6.32.91.B6.04.5B.33.D2 (26)
[09:49:14][W][component:237]: Component ble_adv_controller took a long time for an operation (55 ms).
[09:49:14][W][component:238]: Components should block for at most 30 ms.

@NicoIIT awesome news about the update…im still pretty new to all this, but will try to update today and report back. Do i just rebuild in esphome then ota to the esp32?

Also i have a glowrium aquarium light the runs both ble and wifi??

Could i use this some how to control it via ble?

I can get the uuids for the services and the raw data but no clue what comes next.

1 Like

Hi @daicon, I did some small correction, could you give it a new try?

To be sure to have the last version you should have this for the external_components:

external_components:
  - source: github://NicoIIT/esphome-components@main
    refresh: 0s

It automatically updates to the last version on each build (once a day by default).

To update to last version, yes you just need to rebuild and flash / ota, just be sure you have refresh: 0s in your external_components options (see my previous post).

The component only works for devices using BLE Advertising (ADV) to communicate, and that can be controlled by either ‘FanLamp pro’, ‘LamSmart Pro’ or ‘Zhi Jia’ phone app. If it is not the case of your lights then they cannot be controlled by this component.

AFAIK there is an HA component called LED BLE which is handling BLE lights using service uuids, maybe it could feet your needs, or you could request a change to integrate your brand.
Hope it helps!

Nothing… same result.

I just installed the latest version.
I haven’t added the “refresh: 0s” (It’s not necessary, right?)
But the source is correct.

I’m attaching the log from the installation, up to two attempts I’ve made with the pair :frowning:

INFO ESPHome 2024.7.3
INFO Reading configuration /config/esphome/daiconesp.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing daiconesp (board: esp32dev; framework: arduino; platform: platformio/[email protected])
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.3
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.2.2
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- noise-c @ 0.1.4
RAM:   [==        ]  16.2% (used 52968 bytes from 327680 bytes)
Flash: [========= ]  90.3% (used 1656649 bytes from 1835008 bytes)
========================= [SUCCESS] Took 5.80 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.1.102
INFO Uploading /data/build/daiconesp/.pioenvs/daiconesp/firmware.bin (1662416 bytes)
Uploading: [============================================================] 100% Done...


INFO Upload took 15.03 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.1.102 using esphome API
INFO Successfully connected to daiconesp @ 192.168.1.102 in 11.322s
INFO Successful handshake with daiconesp @ 192.168.1.102 in 0.087s
[09:57:23][I][app:100]: ESPHome version 2024.7.3 compiled on Aug  1 2024, 09:34:56
[09:57:23][C][wifi:599]: WiFi:
[09:57:23][C][wifi:427]:   Local MAC: E8:6B:EA:36:77:54
[09:57:23][C][wifi:432]:   SSID: [redacted]
[09:57:23][C][wifi:435]:   IP Address: 192.168.1.102
[09:57:23][C][wifi:439]:   BSSID: [redacted]
[09:57:23][C][wifi:440]:   Hostname: 'daiconesp'
[09:57:23][C][wifi:442]:   Signal strength: -73 dB ▂▄▆█
[09:57:23][C][wifi:446]:   Channel: 1
[09:57:23][C][wifi:447]:   Subnet: 255.255.255.0
[09:57:23][C][wifi:448]:   Gateway: 192.168.1.1
[09:57:23][C][wifi:449]:   DNS1: 80.58.61.250
[09:57:23][C][wifi:450]:   DNS2: 80.58.61.254
[09:57:23][C][logger:185]: Logger:
[09:57:23][C][logger:186]:   Level: DEBUG
[09:57:23][C][logger:188]:   Log Baud Rate: 115200
[09:57:23][C][logger:189]:   Hardware UART: UART0
[09:57:23][C][light:103]: Light 'First Light'
[09:57:23][C][light:105]:   Default Transition Length: 0.0s
[09:57:23][C][light:106]:   Gamma Correct: 2.80
[09:57:23][C][ble_adv_light:024]: BleAdvLight
[09:57:23][C][ble_adv_light:149]:   Controller 'my_controller'
[09:57:23][C][ble_adv_light:026]:   Base Light 'First Light'
[09:57:23][C][ble_adv_light:027]:   Cold White Temperature: 167.000000 mireds
[09:57:23][C][ble_adv_light:028]:   Warm White Temperature: 333.000000 mireds
[09:57:23][C][ble_adv_light:029]:   Minimum Brightness: 0xA0000000
[09:57:23][C][ble_adv_fan:022]: BleAdvFan 'my fan'
[09:57:23][C][ble_adv_fan:149]:   Controller 'my_controller'
[09:57:23][C][ble_adv_button:011]: BleAdvButton 'Pair'
[09:57:23][C][ble_adv_button:149]:   Controller 'my_controller'
[09:57:23][C][esp32_ble:383]: ESP32 BLE:
[09:57:23][C][esp32_ble:385]:   MAC address: E8:6B:EA:36:77:56
[09:57:23][C][esp32_ble:386]:   IO Capability: none
[09:57:23][C][ble_adv_controller:052]: BleAdvController 'my_controller'
[09:57:23][C][ble_adv_controller:053]:   Hash ID '388E6F12'
[09:57:23][C][ble_adv_controller:054]:   Transmission Min Duration: 0 ms
[09:57:23][C][ble_adv_controller:055]:   Transmission Max Duration: 3000 ms
[09:57:23][C][ble_adv_controller:056]:   Transmission Sequencing Duration: 50 ms
[09:57:23][C][ble_adv_controller:057]:   Configuration visible: YES
[09:57:23][C][captive_portal:088]: Captive Portal:
[09:57:23][C][mdns:116]: mDNS:
[09:57:23][C][mdns:117]:   Hostname: daiconesp
[09:57:23][C][esphome.ota:073]: Over-The-Air updates:
[09:57:23][C][esphome.ota:074]:   Address: daiconesp.local:3232
[09:57:23][C][esphome.ota:075]:   Version: 2
[09:57:23][C][esphome.ota:078]:   Password configured
[09:57:23][C][safe_mode:018]: Safe Mode:
[09:57:23][C][safe_mode:020]:   Boot considered successful after 60 seconds
[09:57:23][C][safe_mode:021]:   Invoke after 10 boot attempts
[09:57:23][C][safe_mode:023]:   Remain in safe mode for 300 seconds
[09:57:23][C][api:139]: API Server:
[09:57:23][C][api:140]:   Address: daiconesp.local:6053
[09:57:23][C][api:142]:   Using noise encryption: YES
[09:58:16][I][safe_mode:041]: Boot seems successful; resetting boot loop counter
[09:58:16][D][esp32.preferences:114]: Saving 1 preferences to flash...
[09:58:16][D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[10:00:08][D][api.connection:197]: Home Assistant 2024.7.4 (192.168.1.51) requested disconnected
[10:00:08][D][api:102]: Accepted 192.168.1.51
[10:00:08][D][api.connection:1375]: Home Assistant 2024.7.4 (192.168.1.51): Connected successfully
[10:00:18][D][select:062]: 'my_controller - Encoding' - Setting
[10:00:18][D][select:115]: 'my_controller - Encoding' - Set selected option to: FanLamp - All
[10:00:18][D][select:015]: 'my_controller - Encoding': Sending state FanLamp - All (index 0)
[10:00:22][D][button:010]: 'Pair' Pressed.
[10:00:22][D][ble_adv_button:016]: BleAdvButton::press_action called
[10:00:22][D][fanlamp_pro:241]: FanLamp - v1a - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [18,96,129]
[10:00:22][D][fanlamp_pro:241]: FanLamp - v1b - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [18,96,129]
[10:00:22][D][fanlamp_pro:295]: FanLamp - v2 - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [0,0,0,0]
[10:00:22][D][fanlamp_pro:295]: FanLamp - v3 - ID: '0x388E6F12', tx: 1, Command: '0x28', Args: [0,0,0,0]
[10:00:22][D][ble_adv_controller:130]: my_controller - request start advertising: 77.F8.B6.5F.2B.5E.00.FC.31.51.CC.F2.9E.40.22.4A.BB.FC.02.D0.C5.A6.ED.B2.A8.1A (26)
[10:00:22][D][ble_adv_controller:130]: my_controller - request start advertising: F9.08.49.13.F0.69.25.4E.31.51.BA.AE.D0.0E.6C.CD.BA.7C.71.41.16.3A.0A.2A.C0.4C (26)
[10:00:22][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.0A.EB.31.BE.3E.DC.A0.03.A9.E3.C2.0E.9B.5C.9E.D4.BA.0F.29.31.D6.CA (26)
[10:00:22][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.DC.34.11.01.D1.48.49.24.92.29.9E.03.16.84.E6.32.91.B6.04.5B.33.D2 (26)
[10:00:22][W][component:237]: Component ble_adv_controller took a long time for an operation (63 ms).
[10:00:22][W][component:238]: Components should block for at most 30 ms.
[10:00:24][D][button:010]: 'Pair' Pressed.
[10:00:24][D][ble_adv_button:016]: BleAdvButton::press_action called
[10:00:24][D][fanlamp_pro:241]: FanLamp - v1a - ID: '0x388E6F12', tx: 2, Command: '0x28', Args: [18,96,129]
[10:00:24][D][fanlamp_pro:241]: FanLamp - v1b - ID: '0x388E6F12', tx: 2, Command: '0x28', Args: [18,96,129]
[10:00:24][D][fanlamp_pro:295]: FanLamp - v2 - ID: '0x388E6F12', tx: 2, Command: '0x28', Args: [0,0,0,0]
[10:00:24][D][fanlamp_pro:295]: FanLamp - v3 - ID: '0x388E6F12', tx: 2, Command: '0x28', Args: [0,0,0,0]
[10:00:24][W][component:237]: Component api took a long time for an operation (51 ms).
[10:00:24][W][component:238]: Components should block for at most 30 ms.
[10:00:24][D][ble_adv_controller:142]: my_controller - request stop advertising
[10:00:24][D][ble_adv_controller:130]: my_controller - request start advertising: 77.F8.B6.5F.2B.5E.00.FC.31.51.CC.F2.9E.40.22.4A.7B.FC.DC.0E.4E.78.63.6F.8E.3F (26)
[10:00:24][D][ble_adv_controller:130]: my_controller - request start advertising: F9.08.49.13.F0.69.25.4E.31.51.BA.AE.D0.0E.6C.CD.BA.BC.71.3D.6A.AB.76.45.14.4C (26)
[10:00:24][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.25.49.FE.EF.F5.40.9A.D4.7D.15.29.A9.00.E9.CD.DC.1F.FB.D8.59.88.DE (26)
[10:00:24][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.AF.49.AB.71.EC.02.7C.57.7A.C0.8A.83.4F.DA.1D.0F.C3.FB.68.48.3C.7D (26)
[10:00:24][W][component:237]: Component ble_adv_controller took a long time for an operation (63 ms).
[10:00:24][W][component:238]: Components should block for at most 30 ms.
[10:00:25][D][button:010]: 'Pair' Pressed.
[10:00:25][D][ble_adv_button:016]: BleAdvButton::press_action called
[10:00:25][D][fanlamp_pro:241]: FanLamp - v1a - ID: '0x388E6F12', tx: 3, Command: '0x28', Args: [18,96,129]
[10:00:25][D][fanlamp_pro:241]: FanLamp - v1b - ID: '0x388E6F12', tx: 3, Command: '0x28', Args: [18,96,129]
[10:00:25][D][fanlamp_pro:295]: FanLamp - v2 - ID: '0x388E6F12', tx: 3, Command: '0x28', Args: [0,0,0,0]
[10:00:25][D][fanlamp_pro:295]: FanLamp - v3 - ID: '0x388E6F12', tx: 3, Command: '0x28', Args: [0,0,0,0]
[10:00:25][D][ble_adv_controller:142]: my_controller - request stop advertising
[10:00:25][D][ble_adv_controller:130]: my_controller - request start advertising: 77.F8.B6.5F.2B.5E.00.FC.31.51.CC.F2.9E.40.22.4A.FB.FC.14.C6.9E.B0.2B.62.73.A4 (26)
[10:00:25][D][ble_adv_controller:130]: my_controller - request start advertising: F9.08.49.13.F0.69.25.4E.31.51.BA.AE.D0.0E.6C.CD.BA.3C.71.DC.8B.B8.97.E6.D9.4C (26)
[10:00:25][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.0B.99.DA.CF.5C.88.80.12.3B.D0.1C.FC.27.A9.3A.A5.38.2D.3F.D4.B5.33 (26)
[10:00:25][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.33.BE.2E.B0.3E.56.25.F1.C0.24.99.5E.9C.D6.B8.5F.10.14.2B.A5.B1.07 (26)
[10:00:25][W][component:237]: Component ble_adv_controller took a long time for an operation (62 ms).
[10:00:25][W][component:238]: Components should block for at most 30 ms.
[10:00:28][D][ble_adv_controller:142]: my_controller - request stop advertising
[10:00:30][D][number:054]: 'my_controller - Duration' - Setting number value
[10:00:30][D][number:113]:   New number value: 500.000000
[10:00:30][D][number:012]: 'my_controller - Duration': Sending state 500.000000
[10:00:40][D][button:010]: 'Pair' Pressed.
[10:00:40][D][ble_adv_button:016]: BleAdvButton::press_action called
[10:00:40][D][fanlamp_pro:241]: FanLamp - v1a - ID: '0x388E6F12', tx: 4, Command: '0x28', Args: [18,96,129]
[10:00:40][D][fanlamp_pro:241]: FanLamp - v1b - ID: '0x388E6F12', tx: 4, Command: '0x28', Args: [18,96,129]
[10:00:40][D][fanlamp_pro:295]: FanLamp - v2 - ID: '0x388E6F12', tx: 4, Command: '0x28', Args: [0,0,0,0]
[10:00:40][D][fanlamp_pro:295]: FanLamp - v3 - ID: '0x388E6F12', tx: 4, Command: '0x28', Args: [0,0,0,0]
[10:00:40][D][ble_adv_controller:130]: my_controller - request start advertising: 77.F8.B6.5F.2B.5E.00.FC.31.51.CC.F2.9E.40.22.4A.1B.FC.7E.AC.A9.DA.44.60.5F.57 (26)
[10:00:40][D][ble_adv_controller:130]: my_controller - request start advertising: F9.08.49.13.F0.69.25.4E.31.51.BA.AE.D0.0E.6C.CD.BA.DC.71.1C.4B.D7.57.9D.E1.4C (26)
[10:00:40][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.4A.FB.EF.E7.3C.7A.63.44.3C.00.A8.01.E8.CC.DD.1E.FA.1A.D9.6F.3C.E3 (26)
[10:00:40][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.5C.48.45.8C.A4.21.51.A7.8B.23.A2.4B.6F.7E.BD.16.21.62.7A.2F.26.E1 (26)
[10:00:40][W][component:237]: Component ble_adv_controller took a long time for an operation (53 ms).
[10:00:40][W][component:238]: Components should block for at most 30 ms.
[10:00:41][D][button:010]: 'Pair' Pressed.
[10:00:41][D][ble_adv_button:016]: BleAdvButton::press_action called
[10:00:42][D][fanlamp_pro:241]: FanLamp - v1a - ID: '0x388E6F12', tx: 5, Command: '0x28', Args: [18,96,129]
[10:00:42][D][fanlamp_pro:241]: FanLamp - v1b - ID: '0x388E6F12', tx: 5, Command: '0x28', Args: [18,96,129]
[10:00:42][D][fanlamp_pro:295]: FanLamp - v2 - ID: '0x388E6F12', tx: 5, Command: '0x28', Args: [0,0,0,0]
[10:00:42][D][fanlamp_pro:295]: FanLamp - v3 - ID: '0x388E6F12', tx: 5, Command: '0x28', Args: [0,0,0,0]
[10:00:42][W][component:237]: Component api took a long time for an operation (52 ms).
[10:00:42][W][component:238]: Components should block for at most 30 ms.
[10:00:42][D][ble_adv_controller:142]: my_controller - request stop advertising
[10:00:42][D][ble_adv_controller:130]: my_controller - request start advertising: 77.F8.B6.5F.2B.5E.00.FC.31.51.CC.F2.9E.40.22.4A.9B.FC.98.4A.14.3C.24.1F.64.CD (26)
[10:00:42][D][ble_adv_controller:130]: my_controller - request start advertising: F9.08.49.13.F0.69.25.4E.31.51.BA.AE.D0.0E.6C.CD.BA.5C.71.B3.E4.2F.F8.27.FF.4C (26)
[10:00:42][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.BA.2C.B6.2A.2C.C3.40.FF.0B.B6.59.9B.D1.BF.0A.1A.13.DB.2C.70.A6.53 (26)
[10:00:42][D][ble_adv_controller:130]: my_controller - request start advertising: F0.08.10.80.94.B5.A1.63.94.09.33.0B.A0.17.A2.B7.25.47.4E.4A.5A.D0.A5.2C.E7.5E (26)
[10:00:42][W][component:237]: Component ble_adv_controller took a long time for an operation (52 ms).
[10:00:42][W][component:238]: Components should block for at most 30 ms.
[10:00:45][D][ble_adv_controller:142]: my_controller - request stop advertising
[10:00:45][D][number:054]: 'my_controller - Duration' - Setting number value
[10:00:45][D][number:113]:   New number value: 240.000000
[10:00:45][D][number:012]: 'my_controller - Duration': Sending state 240.000000