ESPHome component for Ikea Idasen desk control

Overview

This component creates a bluetooth bridge for an Ikea Idasen desk that uses a Linak controller with ESPHome and an ESP32 device.

Cover integration Linak Desk Card
Home Assistant Desk Controller

The desk is controlled using the cover integration or Linak Desk Card which is available in HACS in Home assistant.

Installation

Copy the idasen_desk_controller directory into your ESPHome custom_components directory (creating it if it does not exist). For the first connection you will need to press the pairing button on the desk.

Dependencies

This component requires an ESP32 device.

Configuration

idasen_desk_controller:
    # Desk controller bluetooth mac address
    # -----------
    # Required
    mac_address: "00:00:00:00:00:00"

cover:
  - platform: idasen_desk_controller
    name: "Desk"

sensor:
  - platform: idasen_desk_controller
    desk_height:
      # Height in cm
      name: "Desk Height"

binary_sensor:
  # Desk bluetooth connection
  - platform: idasen_desk_controller
    name: "Desk Connection"
    type: CONNECTION
  # Desk moving status
  - platform: idasen_desk_controller
    name: "Desk Moving"
    type: MOVING

Troubleshooting

If you experience Wifi deconnexion, try to activate the wifi fast connect option.

wifi:
  ssid: ...
  password: ...
  fast_connect: true

References

Comments
  • Crash after initial connection

    Crash after initial connection

    Hi all, I'm running into this issue with my ESP32 controlling my desk. The setup is a AZDelivery NodeMCU. I tried playing with build flags etc to resolve the issue but this keeps on happening. Any idea what may cause this behavior?

    Cheers, Tim

    [10:53:55][C][idasen_desk_controller:053]: BLE Device found: Name: Tim Desk, Address: e9:43:60:ec:XX:XX, txPower: -8
    [10:53:55][C][idasen_desk_controller:122]: Connecting client to device e9:43:60:ec:XX:XX
    [10:53:57][C][idasen_desk_controller:126]: Fail to connect to client
    [10:53:59][C][idasen_desk_controller:122]: Connecting client to device e9:43:60:ec:XX:XX
    [10:53:59][D][binary_sensor:036]: 'Office ESP Desk Desk Connection': Sending state ON
    [10:53:59][C][idasen_desk_controller:132]: Retrieve input remote characteristic.
    [10:54:01][E][BLERemoteCharacteristic.cpp:274] retrieveDescriptors(): esp_ble_gattc_get_all_descr: Unknown
    [10:54:01][E][BLERemoteCharacteristic.cpp:274] retrieveDescriptors(): esp_ble_gattc_get_all_descr: Unknown
    [10:54:01][E][BLERemoteCharacteristic.cpp:274] retrieveDescriptors(): esp_ble_gattc_get_all_descr: Unknown
    [10:54:01][E][BLERemoteCharacteristic.cpp:274] retrieveDescriptors(): esp_ble_gattc_get_all_descr: Unknown
    [10:54:01][C][idasen_desk_controller:137]: Retrieve output remote characteristic.
    [10:54:01][E][BLERemoteCharacteristic.cpp:274] retrieveDescriptors(): esp_ble_gattc_get_all_descr: Unknown
    [10:54:01][E][BLERemoteService.cpp:185] retrieveCharacteristics(): esp_ble_gattc_get_all_char: Unknown
    [10:54:01][C][idasen_desk_controller:142]: Register notification callback on output characteristic.
    [10:54:01][C][idasen_desk_controller:148]Guru Meditation Error: Core  0 panic'ed (InstrFetchProhibited). Exception was unhandled.
    [10:54:01]Core 0 register dump:
    [10:54:01]PC      : 0x801979c0  PS      : 0x00060930  A0      : 0x801738b2  A1      : 0x3ffec440
    [10:54:01]A2      : 0x3ffec4a4  A3      : 0x3fff411c  A4      : 0x00060320  A5      : 0x00000000
    [10:54:01]A6      : 0x00000001  A7      : 0x00000026  A8      : 0x801a32df  A9      : 0x3ffec3f0
    [10:54:01]A10     : 0x3fff411c  A11     : 0x00000270  A12     : 0x00000000  A13     : 0x3fff4140
    [10:54:01]A14     : 0x3fff40cc  A15     : 0x00000009  SAR     : 0x00000010  EXCCAUSE: 0x00000014
    [10:54:01]EXCVADDR: 0x801979c0  LBEG    : 0x4000c28c  LEND    : 0x4000c296  LCOUNT  : 0x00000000
    [10:54:01]
    [10:54:01]Backtrace: 0x401979c0:0x3ffec440 0x401738af:0x3ffec460 0x40179a2f:0x3ffec480 0x401784e6:0x3ffec4a0 0x40198c05:0x3ffec4c0 0x4019620e:0x3ffec750 0x401979bd:0x3ffec770 0x40198c17:0x3ffeca00 0x4019620e:0x3ffecc90 0x401979bd:0x3ffeccb0 0x40198c17:0x3ffecf40 0x4019620e:0x3ffed1d0 0x401979bd:0x3ffed1f0 0x40198c17:0x3ffed480 0x4019620e:0x3ffed710 0x401979bd:0x3ffed730 0x40198f4b:0x3ffed9c0 0x40199133:0x3ffedc50 0x4019620e:0x3ffedc70 0x4019634d:0x3ffedc90 0x4019e92a:0x3ffedcb0 0x4017378a:0x3ffedcd0 0x4008e8c5:0x3ffedd00
    WARNING Found stack trace! Trying to decode it
    WARNING Decoded 0x401979c0: bta_gattc_pop_command_to_send at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1519
    WARNING Decoded 0x401738af: btu_free_timer at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/stack/btu/btu_task.c:504
    WARNING Decoded 0x40179a2f: gatt_clcb_dealloc at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/stack/gatt/gatt_utils.c:1761
    WARNING Decoded 0x401784e6: GATTC_Write at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/stack/gatt/gatt_api.c:1040
    WARNING Decoded 0x40198c05: bta_gattc_write at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1163
    WARNING Decoded 0x4019620e: bta_gattc_sm_execute at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_main.c:288
    WARNING Decoded 0x401979bd: bta_gattc_pop_command_to_send at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1519
    WARNING Decoded 0x40198c17: bta_gattc_write at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1170
    WARNING Decoded 0x4019620e: bta_gattc_sm_execute at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_main.c:288
    WARNING Decoded 0x401979bd: bta_gattc_pop_command_to_send at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1519
    WARNING Decoded 0x40198c17: bta_gattc_write at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1170
    WARNING Decoded 0x4019620e: bta_gattc_sm_execute at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_main.c:288
    WARNING Decoded 0x401979bd: bta_gattc_pop_command_to_send at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1519
    WARNING Decoded 0x40198c17: bta_gattc_write at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1170
    WARNING Decoded 0x4019620e: bta_gattc_sm_execute at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_main.c:288
    WARNING Decoded 0x401979bd: bta_gattc_pop_command_to_send at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1519
    WARNING Decoded 0x40198f4b: bta_gattc_write_cmpl at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1302
    WARNING Decoded 0x40199133: bta_gattc_op_cmpl at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_act.c:1423
    WARNING Decoded 0x4019620e: bta_gattc_sm_execute at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_main.c:288
    WARNING Decoded 0x4019634d: bta_gattc_hdl_event at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/gatt/bta_gattc_main.c:397
    WARNING Decoded 0x4019e92a: bta_sys_event at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/bta/sys/bta_sys_main.c:496
    WARNING Decoded 0x4017378a: btu_task_thread_handler at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/stack/btu/btu_task.c:233
    WARNING Decoded 0x4008e8c5: vPortTaskWrapper at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port.c:355 (discriminator 1)
    
    opened by SeraphimSerapis 14
  • No height / moving sensor updates

    No height / moving sensor updates

    The height and moving sensors don't update their values in Home Assistant. The height sensor always shows 14cm and the moving sensor "not moving" - everything else seems to work perfectly fine.

    My config is exactly the example code from README.md (exept the names) and my log doesn't show anything weird:

    ESPHome Log
    [21:29:07][C][idasen_desk_controller:096]: Idasen Desk Controller:
    [21:29:07][C][idasen_desk_controller:097]:   Mac address: XX:XX:XX:XX:XX:XX
    [21:29:07][C][idasen_desk_controller:098]:   Desk height 'AZ Desk Workstation Height'
    [21:29:07][C][idasen_desk_controller:098]:     Unit of Measurement: 'cm'
    [21:29:07][C][idasen_desk_controller:098]:     Accuracy Decimals: 0
    [21:29:07][C][idasen_desk_controller:098]:     Icon: 'mdi:arrow-up-down'
    [21:29:07][C][idasen_desk_controller:099]:   Desk moving 'AZ Desk Workstation Moving'
    [21:29:07][C][idasen_desk_controller:099]:     Device Class: 'moving'
    [21:29:07][C][idasen_desk_controller:100]:   Desk connection 'AZ Desk Workstation Connection'
    [21:29:07][C][idasen_desk_controller:100]:     Device Class: 'connectivity'
    [21:29:07][C][idasen_desk_controller:101]:   Desk 'AZ Desk Workstation'
    [21:29:07][C][idasen_desk_controller:109]: Start scanning devices...
    [21:29:07][C][idasen_desk_controller:052]: BLE Device found: Name: Desk Caro, Address: XXXXXX, txPower: -8
    [21:29:07][C][idasen_desk_controller:052]: BLE Device found: Name: , Address: 192.168.XX.XX, manufacturer data: 4c001005471c7e6b36, txPower: 12
    [21:29:07][C][idasen_desk_controller:052]: BLE Device found: Name: Desk Nico, Address: 192.168.XX.XX, txPower: -8
    
    
    
    [21:40:46][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:46][D][cover:080]:   Position: 0%
    [21:40:46][D][idasen_desk_controller:180]: Cover control - START - position 0.000000 - target 0 - current 53
    [21:40:46][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:40:46][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:46][D][cover:076]:   Command: STOP
    [21:40:46][D][idasen_desk_controller:191]: Cover control - STOP
    [21:40:49][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:49][D][cover:080]:   Position: 0%
    [21:40:49][D][idasen_desk_controller:180]: Cover control - START - position 0.000000 - target 0 - current 53
    [21:40:49][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:49][D][cover:076]:   Command: STOP
    [21:40:49][D][idasen_desk_controller:191]: Cover control - STOP
    [21:40:49][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:49][D][cover:080]:   Position: 0%
    [21:40:49][D][idasen_desk_controller:180]: Cover control - START - position 0.000000 - target 0 - current 53
    [21:40:50][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:40:50][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:40:50][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:40:50][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:40:50][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:40:50][D][idasen_desk_controller:209]: Update Desk - Move from 52 to 0
    [21:40:50][D][idasen_desk_controller:209]: Update Desk - Move from 52 to 0
    [21:40:51][D][idasen_desk_controller:209]: Update Desk - Move from 51 to 0
    [21:40:51][D][idasen_desk_controller:209]: Update Desk - Move from 51 to 0
    [21:40:51][D][idasen_desk_controller:209]: Update Desk - Move from 50 to 0
    [21:40:51][D][idasen_desk_controller:209]: Update Desk - Move from 50 to 0
    [21:40:51][D][idasen_desk_controller:209]: Update Desk - Move from 49 to 0
    [21:40:51][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:51][D][cover:076]:   Command: STOP
    [21:40:51][D][idasen_desk_controller:191]: Cover control - STOP
    [21:40:52][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:52][D][cover:080]:   Position: 100%
    [21:40:52][D][idasen_desk_controller:180]: Cover control - START - position 1.000000 - target 65 - current 48
    [21:40:52][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 65
    [21:40:52][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 65
    [21:40:53][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 65
    [21:40:53][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 65
    [21:40:53][D][idasen_desk_controller:209]: Update Desk - Move from 49 to 65
    [21:40:53][D][idasen_desk_controller:209]: Update Desk - Move from 49 to 65
    [21:40:53][D][idasen_desk_controller:209]: Update Desk - Move from 49 to 65
    [21:40:53][D][idasen_desk_controller:209]: Update Desk - Move from 49 to 65
    [21:40:53][D][idasen_desk_controller:209]: Update Desk - Move from 50 to 65
    [21:40:54][D][idasen_desk_controller:209]: Update Desk - Move from 50 to 65
    [21:40:54][D][idasen_desk_controller:209]: Update Desk - Move from 51 to 65
    [21:40:54][D][idasen_desk_controller:209]: Update Desk - Move from 51 to 65
    [21:40:54][D][idasen_desk_controller:209]: Update Desk - Move from 51 to 65
    [21:40:54][D][idasen_desk_controller:209]: Update Desk - Move from 52 to 65
    [21:40:54][D][idasen_desk_controller:209]: Update Desk - Move from 52 to 65
    [21:40:55][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 65
    [21:40:55][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 65
    [21:40:55][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 65
    [21:40:55][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 65
    [21:40:55][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 65
    [21:40:55][D][idasen_desk_controller:209]: Update Desk - Move from 55 to 65
    [21:40:55][D][idasen_desk_controller:209]: Update Desk - Move from 55 to 65
    [21:40:56][D][idasen_desk_controller:209]: Update Desk - Move from 56 to 65
    [21:40:56][D][idasen_desk_controller:209]: Update Desk - Move from 56 to 65
    [21:40:56][D][idasen_desk_controller:209]: Update Desk - Move from 56 to 65
    [21:40:56][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:40:56][D][cover:076]:   Command: STOP
    [21:40:56][D][idasen_desk_controller:191]: Cover control - STOP
    [21:41:03][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:41:03][D][cover:080]:   Position: 0%
    [21:41:03][D][idasen_desk_controller:180]: Cover control - START - position 0.000000 - target 0 - current 57
    [21:41:04][D][idasen_desk_controller:209]: Update Desk - Move from 57 to 0
    [21:41:04][D][idasen_desk_controller:209]: Update Desk - Move from 57 to 0
    [21:41:04][D][idasen_desk_controller:209]: Update Desk - Move from 57 to 0
    [21:41:04][D][idasen_desk_controller:209]: Update Desk - Move from 57 to 0
    [21:41:04][D][idasen_desk_controller:209]: Update Desk - Move from 57 to 0
    [21:41:04][D][idasen_desk_controller:209]: Update Desk - Move from 56 to 0
    [21:41:04][D][idasen_desk_controller:209]: Update Desk - Move from 56 to 0
    [21:41:05][D][idasen_desk_controller:209]: Update Desk - Move from 56 to 0
    [21:41:05][D][idasen_desk_controller:209]: Update Desk - Move from 55 to 0
    [21:41:05][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:41:05][D][cover:076]:   Command: STOP
    [21:41:05][D][idasen_desk_controller:191]: Cover control - STOP
    [21:41:35][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:41:35][D][cover:080]:   Position: 0%
    [21:41:35][D][idasen_desk_controller:180]: Cover control - START - position 0.000000 - target 0 - current 54
    [21:41:35][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 0
    [21:41:35][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 0
    [21:41:35][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 0
    [21:41:35][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 0
    [21:41:35][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 0
    [21:41:35][D][idasen_desk_controller:209]: Update Desk - Move from 54 to 0
    [21:41:36][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:41:36][D][idasen_desk_controller:209]: Update Desk - Move from 53 to 0
    [21:41:36][D][idasen_desk_controller:209]: Update Desk - Move from 52 to 0
    [21:41:36][D][idasen_desk_controller:209]: Update Desk - Move from 52 to 0
    [21:41:36][D][idasen_desk_controller:209]: Update Desk - Move from 51 to 0
    [21:41:36][D][idasen_desk_controller:209]: Update Desk - Move from 50 to 0
    [21:41:37][D][idasen_desk_controller:209]: Update Desk - Move from 50 to 0
    [21:41:37][D][idasen_desk_controller:209]: Update Desk - Move from 49 to 0
    [21:41:37][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:41:37][D][cover:076]:   Command: STOP
    [21:41:37][D][idasen_desk_controller:191]: Cover control - STOP
    [21:41:39][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:41:39][D][cover:080]:   Position: 71%
    [21:41:39][D][idasen_desk_controller:180]: Cover control - START - position 0.710000 - target 46 - current 48
    [21:41:39][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:39][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:39][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:39][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:39][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:39][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:40][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:40][D][idasen_desk_controller:209]: Update Desk - Move from 48 to 46
    [21:41:40][D][idasen_desk_controller:209]: Update Desk - Move from 47 to 46
    [21:41:40][D][idasen_desk_controller:209]: Update Desk - Move from 47 to 46
    [21:41:40][D][idasen_desk_controller:204]: Update Desk - target reached
    [21:41:47][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:41:47][D][cover:080]:   Position: 22%
    [21:41:47][D][idasen_desk_controller:180]: Cover control - START - position 0.220000 - target 14 - current 46
    [21:41:47][D][idasen_desk_controller:209]: Update Desk - Move from 46 to 14
    [21:41:47][D][idasen_desk_controller:209]: Update Desk - Move from 46 to 14
    [21:41:47][D][idasen_desk_controller:209]: Update Desk - Move from 46 to 14
    [21:41:47][D][idasen_desk_controller:209]: Update Desk - Move from 45 to 14
    [21:41:47][D][idasen_desk_controller:209]: Update Desk - Move from 45 to 14
    [21:41:47][D][idasen_desk_controller:209]: Update Desk - Move from 45 to 14
    [21:41:48][D][idasen_desk_controller:209]: Update Desk - Move from 45 to 14
    [21:41:48][D][idasen_desk_controller:209]: Update Desk - Move from 44 to 14
    [21:41:48][D][idasen_desk_controller:209]: Update Desk - Move from 44 to 14
    [21:41:48][D][idasen_desk_controller:209]: Update Desk - Move from 43 to 14
    [21:41:48][D][idasen_desk_controller:209]: Update Desk - Move from 43 to 14
    [21:41:48][D][idasen_desk_controller:209]: Update Desk - Move from 42 to 14
    [21:41:49][D][idasen_desk_controller:209]: Update Desk - Move from 42 to 14
    [21:41:49][D][idasen_desk_controller:209]: Update Desk - Move from 41 to 14
    [21:41:49][D][idasen_desk_controller:209]: Update Desk - Move from 40 to 14
    [21:41:49][D][idasen_desk_controller:209]: Update Desk - Move from 40 to 14
    [21:41:49][D][idasen_desk_controller:209]: Update Desk - Move from 39 to 14
    [21:41:49][D][idasen_desk_controller:209]: Update Desk - Move from 39 to 14
    [21:41:49][D][idasen_desk_controller:209]: Update Desk - Move from 38 to 14
    [21:41:50][D][idasen_desk_controller:209]: Update Desk - Move from 38 to 14
    [21:41:50][D][idasen_desk_controller:209]: Update Desk - Move from 37 to 14
    [21:41:50][D][idasen_desk_controller:209]: Update Desk - Move from 37 to 14
    [21:41:50][D][idasen_desk_controller:209]: Update Desk - Move from 36 to 14
    [21:41:50][D][idasen_desk_controller:209]: Update Desk - Move from 35 to 14
    [21:41:50][D][idasen_desk_controller:209]: Update Desk - Move from 35 to 14
    [21:41:50][D][idasen_desk_controller:209]: Update Desk - Move from 34 to 14
    [21:41:51][D][idasen_desk_controller:209]: Update Desk - Move from 34 to 14
    [21:41:51][D][idasen_desk_controller:209]: Update Desk - Move from 33 to 14
    [21:41:51][D][idasen_desk_controller:209]: Update Desk - Move from 32 to 14
    [21:41:51][D][idasen_desk_controller:209]: Update Desk - Move from 32 to 14
    [21:41:51][D][idasen_desk_controller:209]: Update Desk - Move from 31 to 14
    [21:41:51][D][idasen_desk_controller:209]: Update Desk - Move from 31 to 14
    [21:41:52][D][idasen_desk_controller:209]: Update Desk - Move from 30 to 14
    [21:41:52][D][idasen_desk_controller:209]: Update Desk - Move from 30 to 14
    [21:41:52][D][idasen_desk_controller:209]: Update Desk - Move from 29 to 14
    [21:41:52][D][idasen_desk_controller:209]: Update Desk - Move from 29 to 14
    [21:41:52][D][idasen_desk_controller:209]: Update Desk - Move from 28 to 14
    [21:41:52][D][idasen_desk_controller:209]: Update Desk - Move from 27 to 14
    [21:41:52][D][idasen_desk_controller:209]: Update Desk - Move from 27 to 14
    [21:41:53][D][idasen_desk_controller:209]: Update Desk - Move from 26 to 14
    [21:41:53][D][idasen_desk_controller:209]: Update Desk - Move from 26 to 14
    [21:41:53][D][idasen_desk_controller:209]: Update Desk - Move from 25 to 14
    [21:41:53][D][idasen_desk_controller:209]: Update Desk - Move from 24 to 14
    [21:41:53][D][idasen_desk_controller:209]: Update Desk - Move from 24 to 14
    [21:41:53][D][idasen_desk_controller:209]: Update Desk - Move from 23 to 14
    [21:41:53][D][idasen_desk_controller:209]: Update Desk - Move from 23 to 14
    [21:41:54][D][idasen_desk_controller:209]: Update Desk - Move from 22 to 14
    [21:41:54][D][idasen_desk_controller:209]: Update Desk - Move from 22 to 14
    [21:41:54][D][idasen_desk_controller:209]: Update Desk - Move from 21 to 14
    [21:41:54][D][idasen_desk_controller:209]: Update Desk - Move from 21 to 14
    [21:41:54][D][idasen_desk_controller:209]: Update Desk - Move from 20 to 14
    [21:41:54][D][idasen_desk_controller:209]: Update Desk - Move from 19 to 14
    [21:41:55][D][idasen_desk_controller:209]: Update Desk - Move from 19 to 14
    [21:41:55][D][idasen_desk_controller:209]: Update Desk - Move from 18 to 14
    [21:41:55][D][idasen_desk_controller:209]: Update Desk - Move from 18 to 14
    [21:41:55][D][idasen_desk_controller:209]: Update Desk - Move from 17 to 14
    [21:41:55][D][idasen_desk_controller:209]: Update Desk - Move from 17 to 14
    [21:41:55][D][idasen_desk_controller:209]: Update Desk - Move from 16 to 14
    [21:41:55][D][idasen_desk_controller:209]: Update Desk - Move from 15 to 14
    [21:41:56][D][idasen_desk_controller:209]: Update Desk - Move from 15 to 14
    [21:41:56][D][idasen_desk_controller:204]: Update Desk - target reached
    [21:42:15][D][api:067]: Disconnecting Home Assistant 2021.2.3 ()
    [21:42:44][D][cover:072]: 'AZ Desk Workstation' - Setting
    [21:42:44][D][cover:080]:   Position: 22%
    [21:42:44][D][idasen_desk_controller:180]: Cover control - START - position 0.220000 - target 14 - current 14
    

    Do you have an idea, what else I could look for?

    EDIT: Today I installed a second controller for another Idasen desk on another ESP32 with the same problem - so I can at least rule the desk and the ESP32. The height sensor seems to update on every "reboot" of the ESP32

    opened by noxhirsch 9
  • desk_height &  binary_sensor not being updated

    desk_height & binary_sensor not being updated

    In Home Assistant sensor.desk_height and binary_sensor.desk_moving never being updated after connection.

    for moving I use cover.open_cover, cover.close_cover, cover.stop_cover and cover.set_cover_position services

    My config

    esphome:
      name: linak_desk
      platform: ESP32
      board: nodemcu-32s
    
    wifi:
      ssid: "***"
      password: "***"
      fast_connect: true
    
    idasen_desk_controller:
        mac_address: "00:00:00:00:00:00:00"
    
    cover:
      - platform: idasen_desk_controller
        name: "Desk"
    
    sensor:
      - platform: idasen_desk_controller
        desk_height:
          # Height in cm
          name: "Desk Height"
    
    binary_sensor:
      - platform: idasen_desk_controller
        name: "Desk Connection"
        type: CONNECTION
      - platform: idasen_desk_controller
        name: "Desk Moving"
        type: MOVING
    
    captive_portal:
    
    logger:
    
    api:
    
    ota:
    
    

    there is logs when use cover.open_cover

    [13:57:31][D][cover:072]: 'Desk' - Setting
    [13:57:31][D][cover:080]:   Position: 100%
    [13:57:31][D][idasen_desk_controller:199]: Cover control - START - position 1.000000 - target 65 - current 18
    [13:57:31][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 65
    [13:57:31][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 65
    [13:57:31][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 65
    [13:57:32][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 65
    [13:57:32][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 65
    [13:57:32][D][cover:072]: 'Desk' - Setting
    [13:57:32][D][cover:076]:   Command: STOP
    [13:57:32][D][idasen_desk_controller:212]: Cover control - STOP
    

    when use cover.set_cover_position

    [14:00:49][D][idasen_desk_controller:199]: Cover control - START - position 0.200000 - target 13 - current 19
    [14:00:49][D][idasen_desk_controller:232]: Update Desk - Move from 19 to 13
    [14:00:49][D][idasen_desk_controller:232]: Update Desk - Move from 19 to 13
    [14:00:49][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 13
    [14:00:50][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 13
    [14:00:50][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 13
    [14:00:50][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 13
    [14:00:50][D][idasen_desk_controller:232]: Update Desk - Move from 18 to 13
    [14:00:50][D][idasen_desk_controller:232]: Update Desk - Move from 17 to 13
    [14:00:50][D][idasen_desk_controller:232]: Update Desk - Move from 17 to 13
    [14:00:50][D][idasen_desk_controller:232]: Update Desk - Move from 16 to 13
    [14:00:51][D][idasen_desk_controller:232]: Update Desk - Move from 15 to 13
    [14:00:51][D][idasen_desk_controller:232]: Update Desk - Move from 15 to 13
    [14:00:51][D][idasen_desk_controller:232]: Update Desk - Move from 14 to 13
    [14:00:51][D][idasen_desk_controller:232]: Update Desk - Move from 14 to 13
    [14:00:51][D][idasen_desk_controller:227]: Update Desk - target reached
    
    opened by IhorSyerkov 9
  • Error when installing component.

    Error when installing component.

    Hi, Been using this for over a year now and wanted to reinstall it ontop a new ESP32 but i keep getting error when ESPhome tries to pull the installation.

    Compiling /data/livingroom-esp32/.pioenvs/livingroom-esp32/src/esphome/components/sensor/filter.cpp.o
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In member function 'virtual void esphome::idasen_desk_controller::IdasenDeskControllerComponent::gattc_event_handler(esp_gattc_cb_event_t, esp_gatt_if_t, esp_ble_gattc_cb_param_t*)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:68:61: error: 'class esphome::ble_client::BLEClient' has no member named 'gattc_if'
               esp_ble_gattc_register_for_notify(this->parent()->gattc_if, this->parent()->remote_bda, this->output_handle_);
                                                                 ^
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:68:87: error: 'class esphome::ble_client::BLEClient' has no member named 'remote_bda'
               esp_ble_gattc_register_for_notify(this->parent()->gattc_if, this->parent()->remote_bda, this->output_handle_);
                                                                                           ^
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:101:50: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id'
           if (param->read.conn_id != this->parent()->conn_id)
                                                      ^
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:115:52: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id'
           if (param->notify.conn_id != this->parent()->conn_id || param->notify.handle != this->output_handle_)
                                                        ^
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In member function 'void esphome::idasen_desk_controller::IdasenDeskControllerComponent::write_value_(uint16_t, short unsigned int)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:141:65: error: 'class esphome::ble_client::BLEClient' has no member named 'gattc_if'
       esp_err_t status = ::esp_ble_gattc_write_char(this->parent()->gattc_if, this->parent()->conn_id, handle, 2, data,
                                                                     ^
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:141:91: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id'
       esp_err_t status = ::esp_ble_gattc_write_char(this->parent()->gattc_if, this->parent()->conn_id, handle, 2, data,
                                                                                               ^
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In member function 'void esphome::idasen_desk_controller::IdasenDeskControllerComponent::read_value_(uint16_t)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:152:47: error: 'class esphome::ble_client::BLEClient' has no member named 'gattc_if'
           esp_ble_gattc_read_char(this->parent()->gattc_if, this->parent()->conn_id, handle, ESP_GATT_AUTH_REQ_NONE);
                                                   ^
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:152:73: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id'
           esp_ble_gattc_read_char(this->parent()->gattc_if, this->parent()->conn_id, handle, ESP_GATT_AUTH_REQ_NONE);
                                                                             ^
    *** [/data/livingroom-esp32/.pioenvs/livingroom-esp32/src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp.o] Error 1
    
    opened by Schloerhome 6
  • Component idasen_desk_controller requires component esp32.

    Component idasen_desk_controller requires component esp32.

    Hey, this is my configuration:

    esphome:
      name: idasen
      platform: ESP32
      board: esp32dev
    
    external_components:
      - source: github://j5lien/[email protected]
    
    
    esp32_ble_tracker:
    ble_client:
      - mac_address: "00:00:00:00:00:00"
        id: idasen_desk
    
    idasen_desk_controller:
      ble_client_id: idasen_desk
      only_up_down_command: false
    
    
    # Enable logging
    logger:
    
    # Enable Home Assistant API
    api:
    
    ota:
      password: "..."
    
    wifi:
      ssid: "..."
      password: "..."
      fast_connect: true
    
      # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap:
        ssid: "Idasen Fallback Hotspot"
        password: "..."
    
    captive_portal:
    
    

    When validating the configuration, I get the following error:

    INFO Reading configuration /config/esphome/idasen.yaml...
    Failed config
    
    idasen_desk_controller: [source /config/esphome/idasen.yaml:16]
      
      Component idasen_desk_controller requires component esp32.
      ble_client_id: idasen_desk
      only_up_down_command: False
    

    Do you have any idea why that might be? Any help is appreciated, thanks :D

    opened by joshuajeschek 5
  • esphome desk controller not connecting

    esphome desk controller not connecting

    Thank you for all the effort you have put into developing this controller!

    I run into an issue where the controller finds my desk, however it doesn't add it to be controlled.

    This is a line from the log output: '[0;35m[C][idasen_desk_controller:053]: BLE Device found: Name: Desk 1403, Address: fd:7f:6d:4a:a1:bb, serviceUUID: 99fa0001-338a-1024-8a49-009c0215f78a, txPower: 4'

    The controller just keeps scanning for BLE devices. Could it be that the name: Desk 1403 is causing problems?

    opened by bernie-gitmans 5
  • Incompatibility with esp32_ble_tracker

    Incompatibility with esp32_ble_tracker

    It seems like there is an incompatibility with esp32_ble_tracker, which causes theESP32 to reboot every couple minutes.

    Here's the log output:

    [23:44:39][W][esp32_ble_tracker:164]: ESP-IDF BLE scan never terminated, rebooting to restore BLE stack...
    [23:44:39][I][app:132]: Forcing a reboot...
    

    The only other integration I am using is Xiaomi Mijia BLE

    opened by spyfly 5
  • TypeError in sensor_schema reported as missing 1 required positional argument: 'device_class_'

    TypeError in sensor_schema reported as missing 1 required positional argument: 'device_class_'

    When trying to define the ESP32 code, I am getting sensor definition issue. When running validation on the code, the issue is reported by problem with sensor.py file: File "/config/esphome/custom_components/idasen_desk_controller/sensor.py", line 22, in <module> sensor.sensor_schema(UNIT_HEIGHT, ICON_HEIGHT, 0), TypeError: sensor_schema() missing 1 required positional argument: 'device_class_' Failed config

    Is it possible, something has been changed in the definition of HA sensor itself, that causes the issue? I am on HA core-2021.3.4 and ESPHOME 1.16.2.

    opened by mkotek 4
  • Add 0.0 counter limit

    Add 0.0 counter limit

    To solve the problem of https://github.com/j5lien/esphome-idasen-desk-controller/issues/17, I created a 0.0 speed counter to stop the table after 5x 0.0 speed in a row. I'm not a C++ developer (or any developer at all in any language), so this might not be the best or cleanest solution, but at least it works 😃 I only opened that PR to give you an idea what my solution would look like - feel free to close or edit it. Side note: I increased the limit to 5 (instead of 2 as proposed in the issue), because I had often counted ~3x 0.0 speed in a row with normal movements - it still stops the 0.0 loop very fast.

    opened by noxhirsch 3
  • Down Button not working

    Down Button not working

    First of all thanks for this awsome integration :) I have it integrated with home assistant and would have never gotten this to work on my own. Mostly everything is working. I can set it to a height and then the desk is moving up and down. And if I manually use the up button it's also working. But the down button is not. What can I do here? What information can i provide to help or where look myself?

    opened by saruye 2
  • new esphome version breaks compilation

    new esphome version breaks compilation

    After installing latest esphome version, cannot update esp with idasen desk controller plugin.

    needed to also include "type: characteristic" in esphome config entry for ble_client sensor.

    compilation error log: Processing esphome-bt-monitor2 (board: nodemcu-32s; framework: arduino; platform: platformio/espressif32 @ 3.5.0)

    HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf Dependency Graph |-- AsyncTCP-esphome @ 1.2.2 |-- WiFi @ 1.0 |-- FS @ 1.0 |-- Update @ 1.0 |-- ESPAsyncWebServer-esphome @ 2.1.0 | |-- AsyncTCP-esphome @ 1.2.2 |-- DNSServer @ 1.1.0 |-- ESPmDNS @ 1.0 |-- ArduinoJson @ 6.18.5 Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/api/api_connection.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/api/api_pb2.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/api/api_pb2_service.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/api/api_server.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/api/list_entities.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/api/subscribe_state.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/api/user_services.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/ble_client/automation.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/ble_client/ble_client.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/ble_client/sensor/ble_rssi_sensor.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/ble_client/sensor/ble_sensor.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/captive_portal/captive_portal.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/esp32_ble_client/ble_characteristic.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/esp32_ble_client/ble_client_base.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/esp32_ble_client/ble_service.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/homeassistant/time/homeassistant_time.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/logger/logger.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/md5/md5.cpp.o Compiling .pioenvs/esphome-bt-monitor2/src/esphome/components/mdns/mdns_component.cpp.o src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In member function 'virtual void esphome::idasen_desk_controller::IdasenDeskControllerComponent::gattc_event_handler(esp_gattc_cb_event_t, esp_gatt_if_t, esp_ble_gattc_cb_param_t*)': src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:68:61: error: 'class esphome::ble_client::BLEClient' has no member named 'gattc_if' esp_ble_gattc_register_for_notify(this->parent()->gattc_if, this->parent()->remote_bda, this->output_handle_); ^ src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:68:87: error: 'class esphome::ble_client::BLEClient' has no member named 'remote_bda' esp_ble_gattc_register_for_notify(this->parent()->gattc_if, this->parent()->remote_bda, this->output_handle_); ^ src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:101:50: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id' if (param->read.conn_id != this->parent()->conn_id) ^ src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:115:52: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id' if (param->notify.conn_id != this->parent()->conn_id || param->notify.handle != this->output_handle_) ^ src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In member function 'void esphome::idasen_desk_controller::IdasenDeskControllerComponent::write_value_(uint16_t, short unsigned int)': src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:141:65: error: 'class esphome::ble_client::BLEClient' has no member named 'gattc_if' esp_err_t status = ::esp_ble_gattc_write_char(this->parent()->gattc_if, this->parent()->conn_id, handle, 2, data, ^ src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:141:91: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id' esp_err_t status = ::esp_ble_gattc_write_char(this->parent()->gattc_if, this->parent()->conn_id, handle, 2, data, ^ src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In member function 'void esphome::idasen_desk_controller::IdasenDeskControllerComponent::read_value_(uint16_t)': src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:152:47: error: 'class esphome::ble_client::BLEClient' has no member named 'gattc_if' esp_ble_gattc_read_char(this->parent()->gattc_if, this->parent()->conn_id, handle, ESP_GATT_AUTH_REQ_NONE); ^ src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:152:73: error: 'class esphome::ble_client::BLEClient' has no member named 'conn_id' esp_ble_gattc_read_char(this->parent()->gattc_if, this->parent()->conn_id, handle, ESP_GATT_AUTH_REQ_NONE); ^ *** [.pioenvs/esphome-bt-monitor2/src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp.o] Error 1 ========================= [FAILED] Took 261.46 seconds =========================

    opened by jason-glynn 2
  • [Wemos ESP32 Mini] A working ESPHome yaml example with some adjustments. (Ikea Idasen Liank DL110)

    [Wemos ESP32 Mini] A working ESPHome yaml example with some adjustments. (Ikea Idasen Liank DL110)

    Hi Guys, I had quite some trouble setting this up. So I'll share my finaly working ESPHome config with you.

    Adding this to my config was the crucial part for it to work:

    esp32:
      board: esp32dev
      framework:
        type: arduino
    

    Further I adjusted the height calculation to be corret for my desk. The divider of the raw_height has been changed from 10 to 5.118110236.

        lambda: |-
          uint16_t raw_height = ((uint16_t)x[1] << 8) | x[0];
          unsigned short height_mm = raw_height / 5.118110236;
    
          return (float) height_mm / 10;
    

    I'm using a lot of substitiutions and additional wifi settings in this example, feel free to remove them and / or replace them by the ESPHome defaults as shown in the linked examples.

    # Office Desk Bridge
    
    # Variables
    substitutions:
      device_name:    !secret node_26_device_name
      friendly_name:  !secret node_26_friendly_name
      hardware_id:    !secret node_26_hardware_id
      static_ip:      !secret node_26_static_ip
      ssid:           !secret not_ssid
      ssid_pw:        !secret not_password
      ap_pw:          !secret ap_password 
      gateway:        !secret not_gateway
      subnet:         !secret not_subnet
      ntp:            !secret ntp
    
    wifi:
      manual_ip:
        static_ip: $static_ip
        gateway: $gateway
        subnet: $subnet
      networks:
      - ssid: $ssid
        password: $ssid_pw
      # If wifi can not connect reboot with in xx hours  
      reboot_timeout: 0s
      fast_connect: true
    
      #Access Point
      ap:
        ssid: AP_${device_name}
        password: $ap_pw
    
    #Captive Portal when ap is on
    captive_portal:
    
    #Web Server for manual access 
    web_server:
    
    #Log to ESPHome
    logger:
      #Disable logging to serial
      baud_rate: 0  
    
    #Homeassitant API
    api:
      reboot_timeout: 0s
    
    #ESPHome OTA
    ota:
    
    esphome: 
      name: "${device_name}"
      name_add_mac_suffix: false
    
    
    esp32:
      board: esp32dev
      framework:
        type: arduino
    
    external_components:
      - source: github://j5lien/[email protected]
    
    globals:
      - id: ble_client_connected
        type: bool
        initial_value: 'false'
    
    esp32_ble_tracker:
    
    ble_client:
     # Replace with the desk bluetooth mac address
      - mac_address: "CE:41:99:2E:BA:4D"
        id: idasen_desk
        on_connect:
          then:
            - lambda: |-
                id(ble_client_connected) = true;
            - delay: 5s
            - lambda: |-
                id(desk_height).update();
                id(desk_speed).update();
        on_disconnect:
          then:
            - lambda: |-
                id(ble_client_connected) = false;
    
    idasen_desk_controller:
        ble_client_id: idasen_desk
        only_up_down_command: false
    
    cover:
      - platform: idasen_desk_controller
        name: "${friendly_name} Desk"
    
    sensor:
      # Desk Height Sensor
      - platform: ble_client
        type: characteristic
        ble_client_id: idasen_desk
        id: desk_height
        name: 'Desk Height'
        service_uuid: '99fa0020-338a-1024-8a49-009c0215f78a'
        characteristic_uuid: '99fa0021-338a-1024-8a49-009c0215f78a'
        icon: 'mdi:arrow-up-down'
        unit_of_measurement: 'cm'
        accuracy_decimals: 1
        update_interval: never
        notify: true
        lambda: |-
          uint16_t raw_height = ((uint16_t)x[1] << 8) | x[0];
          unsigned short height_mm = raw_height / 5.118110236;
    
          return (float) height_mm / 10;
    
      # Desk Speed Sensor
      - platform: ble_client
        type: characteristic
        ble_client_id: idasen_desk
        id: desk_speed
        name: 'Desk Speed'
        service_uuid: '99fa0020-338a-1024-8a49-009c0215f78a'
        characteristic_uuid: '99fa0021-338a-1024-8a49-009c0215f78a'
        icon: 'mdi:speedometer'
        unit_of_measurement: 'cm/min' # I'm not sure this unit is correct
        accuracy_decimals: 0
        update_interval: never
        notify: true
        lambda: |-
          uint16_t raw_speed = ((uint16_t)x[3] << 8) | x[2];
          return raw_speed / 100;
    
    binary_sensor:
      # Desk Bluetooth Connection Status
      - platform: template
        name: 'Desk Connection'
        id: desk_connection
        lambda: 'return id(ble_client_connected);'
    
      # Desk Moving Status
      - platform: template
        name: 'Desk Moving'
        id: desk_moving
        lambda: 'return id(desk_speed).state > 0;'
    
    
    # Example configuration entry
    switch:
      - platform: restart
        name: "${friendly_name} Restart"
    
    opened by jaddel 0
  • Port to new Bluetooth integration

    Port to new Bluetooth integration

    Is there a chance to port this to the new Bluetooth integration introduced in Home Assistant 2022.8? Would be cool to just use it with a bluetooth dongle or raspberry directly without the esp32.

    opened by thexperiments 3
  • Are you open to being sponsord?

    Are you open to being sponsord?

    Hey Julien, a friend & me have desks that could be compatible to your ESP-Home-Component, but it doesn't work reliably. Would you be willing to work on this for a bit of money? :)

    Our controllers are probably called dpg1m30.

    opened by hco 2
  • Desk Panel DPG1C connection not stable

    Desk Panel DPG1C connection not stable

    I'm getting with my Desk Panel DPG1C sometimes a value in home assistant. Mostly, the ESP is rebooting with the fowling issue: ESP_GATTC_DISCONNECT_EVT, reason 62

    opened by piechade 0
  • Support for esp-idf framework?

    Support for esp-idf framework?

    Any idea what it would take to allow this to work with the esp-idf framework? I'm trying to run this on an M5 Stamp C3U (an ESP32-C3 variant), but only the esp-idf framework supports the esp32-c3 boards. When I attempt to compile with esp-idf framework, I get the following:

    INFO Reading configuration /config/office-desk-controller.yaml...
    INFO Generating C++ source...
    INFO Compiling app...
    Processing office-desk-controller (board: esp32-c3-devkitm-1; framework: espidf; platform: platformio/espressif32 @ 3.5.0)
    --------------------------------------------------------------------------------
    HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash
     - framework-espidf 3.40302.0 (4.3.2) 
     - tool-cmake 3.16.4 
     - tool-ninja 1.7.1 
     - toolchain-riscv32-esp 8.4.0+2021r2-patch2 
     - toolchain-xtensa-esp32s2 8.4.0+2021r2-patch2
    Reading CMake configuration...
    LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
    No dependencies
    Compiling .pioenvs/office-desk-controller/src/esphome/components/idasen_desk_controller/idasen_desk_controller.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/mdns/mdns_esp_idf.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/network/util.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/ota/ota_backend_arduino_esp32.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/ota/ota_backend_arduino_esp8266.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/ota/ota_backend_esp_idf.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/ota/ota_component.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/sensor/automation.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/sensor/filter.o
    Compiling .pioenvs/office-desk-controller/src/esphome/components/sensor/sensor.o
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:16:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::loop() {}
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:18:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::setup() {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::setup()':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:20:3: error: invalid use of 'this' in non-member function
       this->set_interval("update_desk", 200, [this]() { this->move_desk_(); });
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:20:43: error: invalid use of 'this' in non-member function
       this->set_interval("update_desk", 200, [this]() { this->move_desk_(); });
                                               ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In lambda function:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:20:53: error: 'this' was not captured for this lambda function
       this->set_interval("update_desk", 200, [this]() { this->move_desk_(); });
                                                         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:23:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::dump_config() {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::dump_config()':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:25:51: error: invalid use of 'this' in non-member function
       ESP_LOGCONFIG(TAG, "  MAC address        : %s", this->parent()->address_str().c_str());
                                                       ^~~~
    src/esphome/core/log.h:94:90: note: in definition of macro 'esph_log_config'
       esp_log_printf_(ESPHOME_LOG_LEVEL_CONFIG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                              ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:25:3: note: in expansion of macro 'ESP_LOGCONFIG'
       ESP_LOGCONFIG(TAG, "  MAC address        : %s", this->parent()->address_str().c_str());
       ^~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:26:51: error: invalid use of 'this' in non-member function
       ESP_LOGCONFIG(TAG, "  Notifications      : %s", this->notify_disable_ ? "disable" : "enable");
                                                       ^~~~
    src/esphome/core/log.h:94:90: note: in definition of macro 'esph_log_config'
       esp_log_printf_(ESPHOME_LOG_LEVEL_CONFIG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                              ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:26:3: note: in expansion of macro 'ESP_LOGCONFIG'
       ESP_LOGCONFIG(TAG, "  Notifications      : %s", this->notify_disable_ ? "disable" : "enable");
       ^~~~~~~~~~~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.h:4,
                     from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:1:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:27:27: error: invalid use of 'this' in non-member function
       LOG_COVER("  ", "Desk", this);
                               ^~~~
    src/esphome/components/cover/cover.h:16:8: note: in definition of macro 'LOG_COVER'
       if ((obj) != nullptr) { \
            ^~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:27:27: error: invalid use of 'this' in non-member function
       LOG_COVER("  ", "Desk", this);
                               ^~~~
    src/esphome/core/log.h:94:90: note: in definition of macro 'esph_log_config'
       esp_log_printf_(ESPHOME_LOG_LEVEL_CONFIG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                              ^~~~~~~~~~~
    src/esphome/components/cover/cover.h:17:5: note: in expansion of macro 'ESP_LOGCONFIG'
         ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \
         ^~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:27:3: note: in expansion of macro 'LOG_COVER'
       LOG_COVER("  ", "Desk", this);
       ^~~~~~~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.h:4,
                     from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:1:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:27:27: error: invalid use of 'this' in non-member function
       LOG_COVER("  ", "Desk", this);
                               ^~~~
    src/esphome/components/cover/cover.h:18:21: note: in definition of macro 'LOG_COVER'
         auto traits_ = (obj)->get_traits(); \
                         ^~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:27:27: error: invalid use of 'this' in non-member function
       LOG_COVER("  ", "Desk", this);
                               ^~~~
    src/esphome/components/cover/cover.h:22:11: note: in definition of macro 'LOG_COVER'
         if (!(obj)->get_device_class().empty()) { \
               ^~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:27:27: error: invalid use of 'this' in non-member function
       LOG_COVER("  ", "Desk", this);
                               ^~~~
    src/esphome/core/log.h:94:90: note: in definition of macro 'esph_log_config'
       esp_log_printf_(ESPHOME_LOG_LEVEL_CONFIG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                              ^~~~~~~~~~~
    src/esphome/components/cover/cover.h:23:7: note: in expansion of macro 'ESP_LOGCONFIG'
           ESP_LOGCONFIG(TAG, "%s  Device Class: '%s'", prefix, (obj)->get_device_class().c_str()); \
           ^~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:27:3: note: in expansion of macro 'LOG_COVER'
       LOG_COVER("  ", "Desk", this);
       ^~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:30:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::gattc_event_handler(esp_gattc_cb_event_t, esp_gatt_if_t, esp_ble_gattc_cb_param_t*)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:42:55: error: invalid use of 'this' in non-member function
             ESP_LOGI(TAG, "[%s] Connected successfully!", this->get_name().c_str());
                                                           ^~~~
    src/esphome/core/log.h:105:88: note: in definition of macro 'esph_log_i'
       esp_log_printf_(ESPHOME_LOG_LEVEL_INFO, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:42:9: note: in expansion of macro 'ESP_LOGI'
             ESP_LOGI(TAG, "[%s] Connected successfully!", this->get_name().c_str());
             ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:49:43: error: invalid use of 'this' in non-member function
           ESP_LOGW(TAG, "[%s] Disconnected!", this->get_name().c_str());
                                               ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:49:7: note: in expansion of macro 'ESP_LOGW'
           ESP_LOGW(TAG, "[%s] Disconnected!", this->get_name().c_str());
           ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:50:7: error: invalid use of 'this' in non-member function
           this->status_set_warning();
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:56:7: error: invalid use of 'this' in non-member function
           this->output_handle_ = 0;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:57:25: error: invalid use of 'this' in non-member function
           auto chr_output = this->parent()->get_characteristic(this->output_service_uuid_, this->output_char_uuid_);
                             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:57:60: error: invalid use of 'this' in non-member function
           auto chr_output = this->parent()->get_characteristic(this->output_service_uuid_, this->output_char_uuid_);
                                                                ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:57:88: error: invalid use of 'this' in non-member function
           auto chr_output = this->parent()->get_characteristic(this->output_service_uuid_, this->output_char_uuid_);
                                                                                            ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:59:9: error: invalid use of 'this' in non-member function
             this->status_set_warning();
             ^~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:60:72: error: invalid use of 'this' in non-member function
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->output_service_uuid_.to_string().c_str(),
                                                                            ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:60:9: note: in expansion of macro 'ESP_LOGW'
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->output_service_uuid_.to_string().c_str(),
             ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:61:18: error: invalid use of 'this' in non-member function
                      this->output_char_uuid_.to_string().c_str());
                      ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:60:9: note: in expansion of macro 'ESP_LOGW'
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->output_service_uuid_.to_string().c_str(),
             ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:64:7: error: invalid use of 'this' in non-member function
           this->output_handle_ = chr_output->handle;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:68:45: error: invalid use of 'this' in non-member function
               esp_ble_gattc_register_for_notify(this->parent()->gattc_if, this->parent()->remote_bda, this->output_handle_);
                                                 ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:68:71: error: invalid use of 'this' in non-member function
               esp_ble_gattc_register_for_notify(this->parent()->gattc_if, this->parent()->remote_bda, this->output_handle_);
                                                                           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:68:99: error: invalid use of 'this' in non-member function
               esp_ble_gattc_register_for_notify(this->parent()->gattc_if, this->parent()->remote_bda, this->output_handle_);
                                                                                                       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:74:7: error: invalid use of 'this' in non-member function
           this->input_handle_ = 0;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:75:24: error: invalid use of 'this' in non-member function
           auto chr_input = this->parent()->get_characteristic(this->input_service_uuid_, this->input_char_uuid_);
                            ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:75:59: error: invalid use of 'this' in non-member function
           auto chr_input = this->parent()->get_characteristic(this->input_service_uuid_, this->input_char_uuid_);
                                                               ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:75:86: error: invalid use of 'this' in non-member function
           auto chr_input = this->parent()->get_characteristic(this->input_service_uuid_, this->input_char_uuid_);
                                                                                          ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:77:9: error: invalid use of 'this' in non-member function
             this->status_set_warning();
             ^~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:78:72: error: invalid use of 'this' in non-member function
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->input_service_uuid_.to_string().c_str(),
                                                                            ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:78:9: note: in expansion of macro 'ESP_LOGW'
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->input_service_uuid_.to_string().c_str(),
             ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:79:18: error: invalid use of 'this' in non-member function
                      this->input_char_uuid_.to_string().c_str());
                      ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:78:9: note: in expansion of macro 'ESP_LOGW'
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->input_service_uuid_.to_string().c_str(),
             ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:82:7: error: invalid use of 'this' in non-member function
           this->input_handle_ = chr_input->handle;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:85:7: error: invalid use of 'this' in non-member function
           this->control_handle_ = 0;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:86:26: error: invalid use of 'this' in non-member function
           auto chr_control = this->parent()->get_characteristic(this->control_service_uuid_, this->control_char_uuid_);
                              ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:86:61: error: invalid use of 'this' in non-member function
           auto chr_control = this->parent()->get_characteristic(this->control_service_uuid_, this->control_char_uuid_);
                                                                 ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:86:90: error: invalid use of 'this' in non-member function
           auto chr_control = this->parent()->get_characteristic(this->control_service_uuid_, this->control_char_uuid_);
                                                                                              ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:88:9: error: invalid use of 'this' in non-member function
             this->status_set_warning();
             ^~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:89:72: error: invalid use of 'this' in non-member function
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->control_service_uuid_.to_string().c_str(),
                                                                            ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:89:9: note: in expansion of macro 'ESP_LOGW'
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->control_service_uuid_.to_string().c_str(),
             ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:90:18: error: invalid use of 'this' in non-member function
                      this->control_char_uuid_.to_string().c_str());
                      ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:89:9: note: in expansion of macro 'ESP_LOGW'
             ESP_LOGW(TAG, "No characteristic found at service %s char %s", this->control_service_uuid_.to_string().c_str(),
             ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:93:7: error: invalid use of 'this' in non-member function
           this->control_handle_ = chr_control->handle;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:95:7: error: invalid use of 'this' in non-member function
           this->set_timeout("desk_init", 5000, [this]() { this->read_value_(this->output_handle_); });
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:95:45: error: invalid use of 'this' in non-member function
           this->set_timeout("desk_init", 5000, [this]() { this->read_value_(this->output_handle_); });
                                                 ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In lambda function:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:95:55: error: 'this' was not captured for this lambda function
           this->set_timeout("desk_init", 5000, [this]() { this->read_value_(this->output_handle_); });
                                                           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:95:73: error: 'this' was not captured for this lambda function
           this->set_timeout("desk_init", 5000, [this]() { this->read_value_(this->output_handle_); });
                                                                             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::gattc_event_handler(esp_gattc_cb_event_t, esp_gatt_if_t, esp_ble_gattc_cb_param_t*)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:101:34: error: invalid use of 'this' in non-member function
           if (param->read.conn_id != this->parent()->conn_id)
                                      ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:107:33: error: invalid use of 'this' in non-member function
           if (param->read.handle == this->output_handle_) {
                                     ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:108:9: error: invalid use of 'this' in non-member function
             this->status_clear_warning();
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:109:9: error: invalid use of 'this' in non-member function
             this->publish_cover_state_(param->read.value, param->read.value_len);
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:115:36: error: invalid use of 'this' in non-member function
           if (param->notify.conn_id != this->parent()->conn_id || param->notify.handle != this->output_handle_)
                                        ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:115:87: error: invalid use of 'this' in non-member function
           if (param->notify.conn_id != this->parent()->conn_id || param->notify.handle != this->output_handle_)
                                                                                           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:119:7: error: invalid use of 'this' in non-member function
           this->publish_cover_state_(param->notify.value, param->notify.value_len);
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:124:7: error: invalid use of 'this' in non-member function
           this->node_state = espbt::ClientState::ESTABLISHED;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:124:26: error: 'espbt' has not been declared
           this->node_state = espbt::ClientState::ESTABLISHED;
                              ^~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:126:9: error: invalid use of 'this' in non-member function
             this->notify_disable_ = false;
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:136:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::write_value_(uint16_t handle, unsigned short value) {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::write_value_(uint16_t, short unsigned int)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:141:49: error: invalid use of 'this' in non-member function
       esp_err_t status = ::esp_ble_gattc_write_char(this->parent()->gattc_if, this->parent()->conn_id, handle, 2, data,
                                                     ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:141:75: error: invalid use of 'this' in non-member function
       esp_err_t status = ::esp_ble_gattc_write_char(this->parent()->gattc_if, this->parent()->conn_id, handle, 2, data,
                                                                               ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:145:5: error: invalid use of 'this' in non-member function
         this->status_set_warning();
         ^~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:146:76: error: invalid use of 'this' in non-member function
         ESP_LOGW(TAG, "[%s] Error sending write request for cover, status=%d", this->get_name().c_str(), status);
                                                                                ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:146:5: note: in expansion of macro 'ESP_LOGW'
         ESP_LOGW(TAG, "[%s] Error sending write request for cover, status=%d", this->get_name().c_str(), status);
         ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:150:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::read_value_(uint16_t handle) {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::read_value_(uint16_t)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:152:31: error: invalid use of 'this' in non-member function
           esp_ble_gattc_read_char(this->parent()->gattc_if, this->parent()->conn_id, handle, ESP_GATT_AUTH_REQ_NONE);
                                   ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:152:57: error: invalid use of 'this' in non-member function
           esp_ble_gattc_read_char(this->parent()->gattc_if, this->parent()->conn_id, handle, ESP_GATT_AUTH_REQ_NONE);
                                                             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:154:5: error: invalid use of 'this' in non-member function
         this->status_set_warning();
         ^~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:155:75: error: invalid use of 'this' in non-member function
         ESP_LOGW(TAG, "[%s] Error sending read request for cover, status=%d", this->get_name().c_str(), status_read);
                                                                               ^~~~
    src/esphome/core/log.h:114:88: note: in definition of macro 'esph_log_w'
       esp_log_printf_(ESPHOME_LOG_LEVEL_WARN, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                            ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:155:5: note: in expansion of macro 'ESP_LOGW'
         ESP_LOGW(TAG, "[%s] Error sending read request for cover, status=%d", this->get_name().c_str(), status_read);
         ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:159:20: error: 'IdasenDeskControllerComponent' has not been declared
     cover::CoverTraits IdasenDeskControllerComponent::get_traits() {
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:167:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::publish_cover_state_(uint8_t *value, uint16_t value_len) {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::publish_cover_state_(uint8_t*, uint16_t)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:176:5: error: invalid use of 'this' in non-member function
         this->current_operation = cover::COVER_OPERATION_IDLE;
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:177:14: error: invalid use of 'this' in non-member function
       } else if (this->position < position) {
                  ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:178:5: error: invalid use of 'this' in non-member function
         this->current_operation = cover::COVER_OPERATION_OPENING;
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:179:14: error: invalid use of 'this' in non-member function
       } else if (this->position > position) {
                  ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:180:5: error: invalid use of 'this' in non-member function
         this->current_operation = cover::COVER_OPERATION_CLOSING;
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:183:3: error: invalid use of 'this' in non-member function
       this->position = position;
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:184:3: error: invalid use of 'this' in non-member function
       this->publish_state(false);
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:187:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::move_desk_() {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::move_desk_()':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:188:7: error: invalid use of 'this' in non-member function
       if (this->notify_disable_) {
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:189:9: error: invalid use of 'this' in non-member function
         if (this->controlled_ || this->current_operation != cover::COVER_OPERATION_IDLE) {
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:189:30: error: invalid use of 'this' in non-member function
         if (this->controlled_ || this->current_operation != cover::COVER_OPERATION_IDLE) {
                                  ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:190:7: error: invalid use of 'this' in non-member function
           this->read_value_(this->output_handle_);
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:190:25: error: invalid use of 'this' in non-member function
           this->read_value_(this->output_handle_);
                             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:194:8: error: invalid use of 'this' in non-member function
       if (!this->controlled_) {
            ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:199:7: error: invalid use of 'this' in non-member function
       if (this->is_at_target_()) {
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:201:5: error: invalid use of 'this' in non-member function
         this->stop_move_();
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:205:7: error: invalid use of 'this' in non-member function
       if (this->notify_disable_) {
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:206:9: error: invalid use of 'this' in non-member function
         if (this->current_operation == cover::COVER_OPERATION_IDLE) {
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:207:7: error: invalid use of 'this' in non-member function
    Compiling .pioenvs/office-desk-controller/src/esphome/components/socket/bsd_sockets_impl.o
           this->not_moving_loop_++;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:208:11: error: invalid use of 'this' in non-member function
           if (this->not_moving_loop_ > 4) {
               ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:210:9: error: invalid use of 'this' in non-member function
             this->stop_move_();
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:213:7: error: invalid use of 'this' in non-member function
           this->not_moving_loop_ = 0;
           ^~~~
    In file included from src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:2:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:217:57: error: invalid use of 'this' in non-member function
       ESP_LOGD(TAG, "Update Desk - Move from %.0f to %.0f", this->position * 100, this->position_target_ * 100);
                                                             ^~~~
    src/esphome/core/log.h:92:89: note: in definition of macro 'esph_log_d'
       esp_log_printf_(ESPHOME_LOG_LEVEL_DEBUG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                             ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:217:3: note: in expansion of macro 'ESP_LOGD'
       ESP_LOGD(TAG, "Update Desk - Move from %.0f to %.0f", this->position * 100, this->position_target_ * 100);
       ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:217:79: error: invalid use of 'this' in non-member function
       ESP_LOGD(TAG, "Update Desk - Move from %.0f to %.0f", this->position * 100, this->position_target_ * 100);
                                                                                   ^~~~
    src/esphome/core/log.h:92:89: note: in definition of macro 'esph_log_d'
       esp_log_printf_(ESPHOME_LOG_LEVEL_DEBUG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
                                                                                             ^~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:217:3: note: in expansion of macro 'ESP_LOGD'
       ESP_LOGD(TAG, "Update Desk - Move from %.0f to %.0f", this->position * 100, this->position_target_ * 100);
       ^~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:218:3: error: invalid use of 'this' in non-member function
       this->move_torwards_();
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:221:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::control(const cover::CoverCall &call) {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::control(const esphome::cover::CoverCall&)':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:222:7: error: invalid use of 'this' in non-member function
       if (this->notify_disable_) {
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:223:5: error: invalid use of 'this' in non-member function
         this->read_value_(this->output_handle_);
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:223:23: error: invalid use of 'this' in non-member function
         this->read_value_(this->output_handle_);
                           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:227:9: error: invalid use of 'this' in non-member function
         if (this->current_operation != cover::COVER_OPERATION_IDLE) {
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:228:7: error: invalid use of 'this' in non-member function
           this->stop_move_();
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:231:5: error: invalid use of 'this' in non-member function
         this->position_target_ = *call.get_position();
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:233:9: error: invalid use of 'this' in non-member function
         if (this->position == this->position_target_) {
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:233:27: error: invalid use of 'this' in non-member function
         if (this->position == this->position_target_) {
                               ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:237:9: error: invalid use of 'this' in non-member function
         if (this->position_target_ > this->position) {
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:237:34: error: invalid use of 'this' in non-member function
         if (this->position_target_ > this->position) {
                                      ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:238:7: error: invalid use of 'this' in non-member function
           this->current_operation = cover::COVER_OPERATION_OPENING;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:240:7: error: invalid use of 'this' in non-member function
           this->current_operation = cover::COVER_OPERATION_CLOSING;
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:243:5: error: invalid use of 'this' in non-member function
         this->start_move_torwards_();
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:249:5: error: invalid use of 'this' in non-member function
         this->stop_move_();
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:253:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::start_move_torwards_() {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::start_move_torwards_()':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:254:3: error: invalid use of 'this' in non-member function
       this->controlled_ = true;
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:255:7: error: invalid use of 'this' in non-member function
       if (this->notify_disable_) {
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:256:5: error: invalid use of 'this' in non-member function
         this->not_moving_loop_ = 0;
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:258:16: error: invalid use of 'this' in non-member function
       if (false == this->use_only_up_down_command_) {
                    ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:259:5: error: invalid use of 'this' in non-member function
         this->write_value_(this->control_handle_, 0xFE);
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:259:24: error: invalid use of 'this' in non-member function
         this->write_value_(this->control_handle_, 0xFE);
                            ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:260:5: error: invalid use of 'this' in non-member function
         this->write_value_(this->control_handle_, 0xFF);
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:260:24: error: invalid use of 'this' in non-member function
         this->write_value_(this->control_handle_, 0xFF);
                            ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:264:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::move_torwards_() {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::move_torwards_()':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:265:7: error: invalid use of 'this' in non-member function
       if (this->use_only_up_down_command_) {
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:266:9: error: invalid use of 'this' in non-member function
         if (this->current_operation == cover::COVER_OPERATION_OPENING) {
             ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:267:7: error: invalid use of 'this' in non-member function
           this->write_value_(this->control_handle_, 0x47);
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:267:26: error: invalid use of 'this' in non-member function
           this->write_value_(this->control_handle_, 0x47);
                              ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:268:16: error: invalid use of 'this' in non-member function
         } else if (this->current_operation == cover::COVER_OPERATION_CLOSING) {
                    ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:269:7: error: invalid use of 'this' in non-member function
           this->write_value_(this->control_handle_, 0x46);
           ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:269:26: error: invalid use of 'this' in non-member function
           this->write_value_(this->control_handle_, 0x46);
                              ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:272:5: error: invalid use of 'this' in non-member function
         this->write_value_(this->input_handle_, transform_position_to_height(this->position_target_));
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:272:24: error: invalid use of 'this' in non-member function
         this->write_value_(this->input_handle_, transform_position_to_height(this->position_target_));
                            ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:272:74: error: invalid use of 'this' in non-member function
         this->write_value_(this->input_handle_, transform_position_to_height(this->position_target_));
                                                                              ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:276:6: error: 'IdasenDeskControllerComponent' has not been declared
     void IdasenDeskControllerComponent::stop_move_() {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'void esphome::idasen_desk_controller::stop_move_()':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:277:3: error: invalid use of 'this' in non-member function
       this->write_value_(this->control_handle_, 0xFF);
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:277:22: error: invalid use of 'this' in non-member function
       this->write_value_(this->control_handle_, 0xFF);
                          ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:278:16: error: invalid use of 'this' in non-member function
       if (false == this->use_only_up_down_command_) {
                    ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:279:5: error: invalid use of 'this' in non-member function
         this->write_value_(this->input_handle_, 0x8001);
         ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:279:24: error: invalid use of 'this' in non-member function
         this->write_value_(this->input_handle_, 0x8001);
                            ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:282:3: error: invalid use of 'this' in non-member function
       this->current_operation = cover::COVER_OPERATION_IDLE;
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:283:3: error: invalid use of 'this' in non-member function
       this->controlled_ = false;
       ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:286:6: error: 'IdasenDeskControllerComponent' has not been declared
     bool IdasenDeskControllerComponent::is_at_target_() const {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:286:53: error: non-member function 'bool esphome::idasen_desk_controller::is_at_target_()' cannot have cv-qualifier
     bool IdasenDeskControllerComponent::is_at_target_() const {
                                                         ^~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: In function 'bool esphome::idasen_desk_controller::is_at_target_()':
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:287:11: error: invalid use of 'this' in non-member function
       switch (this->current_operation) {
               ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:289:14: error: invalid use of 'this' in non-member function
           return this->position >= this->position_target_;
                  ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:289:32: error: invalid use of 'this' in non-member function
           return this->position >= this->position_target_;
                                    ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:291:14: error: invalid use of 'this' in non-member function
           return this->position <= this->position_target_;
                  ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:291:32: error: invalid use of 'this' in non-member function
           return this->position <= this->position_target_;
                                    ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:293:11: error: invalid use of 'this' in non-member function
           if (this->notify_disable_) {
               ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:294:17: error: invalid use of 'this' in non-member function
             return !this->controlled_;
                     ^~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp: At global scope:
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:301:1: error: 'espbt' does not name a type
     espbt::ESPBTUUID uuid128_from_string(std::string value) {
     ^~~~~
    src/esphome/components/idasen_desk_controller/idasen_desk_controller.cpp:14:14: warning: 'float esphome::idasen_desk_controller::transform_position_to_height(float)' defined but not used [-Wunused-function]
     static float transform_position_to_height(float position) { return position * DESK_MAX_HEIGHT; }
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    *** [.pioenvs/office-desk-controller/src/esphome/components/idasen_desk_controller/idasen_desk_controller.o] Error 1
    ========================= [FAILED] Took 10.72 seconds =========================
    
    opened by ammmze 3
Releases(v4.0.0)
Owner
Julien
Julien
Wifi MQTT Data Logging via an esp8266 for the Ikea VINDRIKTNING PM2.5 air quality sensor

MQTT connectivity for the Ikea VINDRIKTNING This repository contains an ESP8266 firmware, which adds MQTT to the Ikea VINDRIKTNING PM2.5 air quality s

Sören Beye 943 Dec 31, 2022
Stream server (serial-to-wifi bridge) for ESPHome

Stream server for ESPHome Custom component for ESPHome to expose a UART stream over WiFi or Ethernet. Can be used as a serial-to-wifi bridge as known

Oxan van Leeuwen 76 Jan 7, 2023
Mars is a cross-platform network component developed by WeChat.

Mars is a cross-platform infrastructure component developed by WeChat Mobile Team

Tencent 16.6k Jan 3, 2023
The InitWare Suite of Middleware allows you to manage services and system resources as logical entities called units. Its main component is a service management ("init") system.

InitWare isn't ready to use yet!! Unless you are doing so for fun, to experiment, or to contribute, you most likely do not want to try to install Init

null 164 Dec 21, 2022
Control Hörmann doors drives directly via MQTT from Home Assistant

hoermann_door Control Hörmann doors drives directly via MQTT from Home Assistant

null 66 Nov 23, 2022
Light and fast program for remote control of a computer.

DeskX - Remote control program About The project was created for its own use within the home local network (you can use DeskX over the internet using

DeskX 122 Nov 28, 2022
Boat Cruise Control

BCC Boat Cruise Control I'm Soaring Skipper and developing a Cruise Control for my RIB boat. After being pulled over by the Water Police twice in one

null 1 Dec 25, 2021
ESPHome Wordclock - based on esphome

ha-wordclock-esphome General This project is just for documentation purposes and our attempt (together with a friend) to build an Wordclock, which is

null 13 Dec 26, 2022
Simple ESPHome Wiegand custom component

esphome-wiegand Simple ESPHome Wiegand custom component Based on this code: https://github.com/Luisiado/wiegand_esphome_module To use: Drop wiegand_de

Av 24 Dec 26, 2022
Custom ESPHome Component for generic Sit-Stand-Desks

ESPHomeGenericSitStandDesk I have one of those generic relatively cheap Sit Stand Desks. In an effort to monitor my desk usage I developed this overki

Till 18 Dec 27, 2022
ESPHome custom component for Linptech G6L-WIFI

ESPHome custom component for Linptech G6L-WIFI (linp-doorbell-g04) Background The Linptech G6L-WIFI is a wifi doorbell with a self-powered button. It'

Paul Nicholls 7 Dec 16, 2022
ESPHome component to send and receive HDMI-CEC messages.

HDMI-CEC ESPHome Component An ESPHome component that supports receiving and transmitting HDMI-CEC messages to connected HDMI devices. The ultimate goa

John Boiles 23 Dec 16, 2022
Learn how to connect your Flexispot (LoctekMotion) desk to the internet. This repository contains a collection of scripts to get your started, combined with research and instructions.

(image source: Windows Central) Turn your LoctekMotion/FlexiSpot desk into a smart desk Recently I acquired a new standing desk from FlexiSpot. During

Mick Vleeshouwer 216 Dec 28, 2022
Desk lighting with an Arduino

desk-lighting Dimmable RGB Desk Lighting with an Arduino I made a small project for my own desktop where I used: Arduino Uno A couple of LEDs A potent

Pratham 1 Apr 9, 2022
Callisto - A desk clock that uses a Russian IV-18 VFD tube

Callisto Callisto is a digital clock that uses a Russian IV-18 vacuum fluorescent tube for the display. The clock uses an ESP32 to automatically sync

Hiroto Kaku 18 Jan 10, 2022
Alternative firmware for IKEA ORSALA lamp

orsala_hack Alternative firmware for IKEA ORSALA lamp (https://www.ikea.com/de/de/p/orsala-arbeitsleuchte-led-dimmbar-weiss-00482904/) but why? The OR

null 52 Nov 5, 2022
Doom port to the Ikea Tradfri RGB1923R5 and any device using Silicon labs EFR32MG21 based modules

MG21DOOM Doom port to the Ikea Tradfri RGB1923R5 lamp and any device using Silicon labs EFR32MG21 based modules. Coded by Nicola Wrachien. WARNING Do

null 20 Aug 2, 2022
Wifi MQTT Data Logging via an esp8266 for the Ikea VINDRIKTNING PM2.5 air quality sensor

MQTT connectivity for the Ikea VINDRIKTNING This repository contains an ESP8266 firmware, which adds MQTT to the Ikea VINDRIKTNING PM2.5 air quality s

Sören Beye 943 Dec 31, 2022
DEV repository for full support of Ikea Vindriktning device to #Tasmota

Ikea Vindriktning a Tasmota V tomto repu. je vývojová verze úpravy Tasmota FW, tak aby mohl být použit na PCB LaskaKit ESP-VINDRIKTNING ESP-32 I2C. Cí

Adam Hořčica 7 Dec 1, 2022
Control Heidelberg Wallbox Energy Control over WiFi using ESP8266 and configure your own local load management

< scroll down for English version and additional information > wbec WLAN-Anbindung der Heidelberg WallBox Energy Control über ESP8266 Die Heidelberg W

null 95 Jan 3, 2023