From 35e9cf9e033393896ce44ecc1b14826b89f09615 Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Sat, 8 Jun 2024 11:54:06 +0000 Subject: [PATCH] Update test files --- tests/office-desk-esp32-passthrough.yaml | 30 +++ tests/office-desk-esp32.yaml | 4 +- tests/office-desk-esp8266-passthrough.yaml | 30 +++ tests/office-desk-esp8266.yaml | 274 +++++++++++++++++++++ 4 files changed, 336 insertions(+), 2 deletions(-) diff --git a/tests/office-desk-esp32-passthrough.yaml b/tests/office-desk-esp32-passthrough.yaml index e69de29..02ac8fb 100644 --- a/tests/office-desk-esp32-passthrough.yaml +++ b/tests/office-desk-esp32-passthrough.yaml @@ -0,0 +1,30 @@ +substitutions: + device_name: Flexispot EK5 + name: office-desk-flexispot-ek5 + min_height: "73.5" # cm + max_height: "123" # cm + ssid: "your_wifi_ssid" + wifi_password: "your_wifi_password" + ap_fallback_password: "your_ap_fallback_password" + tx_pin: GPIO17 # TXD 2 + rx_pin: GPIO16 # RXD 2 + screen_pin: GPIO23 + encryption_key: "your_encryption_key" + +external_components: + - source: + type: local + path: ../components + +esp32: + board: esp32dev + framework: + type: arduino + +esphome: + name: ${name} + friendly_name: ${device_name} + comment: Used to control your ${device_name} standing desk via Home Assistant. + + +# TODO diff --git a/tests/office-desk-esp32.yaml b/tests/office-desk-esp32.yaml index f05989e..311486b 100644 --- a/tests/office-desk-esp32.yaml +++ b/tests/office-desk-esp32.yaml @@ -3,9 +3,9 @@ substitutions: name: office-desk-flexispot-ek5 min_height: "73.5" # cm max_height: "123" # cm - ssid: !secret wifi_ssid + ssid: "your_wifi_ssid" wifi_password: "your_wifi_password" - ap_fallback_password: "MnANX95MWad1" + ap_fallback_password: "your_ap_fallback_password" tx_pin: GPIO17 # TXD 2 rx_pin: GPIO16 # RXD 2 screen_pin: GPIO23 diff --git a/tests/office-desk-esp8266-passthrough.yaml b/tests/office-desk-esp8266-passthrough.yaml index e69de29..dc562a7 100644 --- a/tests/office-desk-esp8266-passthrough.yaml +++ b/tests/office-desk-esp8266-passthrough.yaml @@ -0,0 +1,30 @@ +substitutions: + device_name: Flexispot EK5 + name: office-desk-flexispot-ek5 + min_height: "73.5" # cm + max_height: "123" # cm + ssid: "your_wifi_ssid" + wifi_password: "your_wifi_password" + ap_fallback_password: "your_ap_fallback_password" + tx_pin: D5 # =GPIO14 + rx_pin: D6 # =GPIO12 + screen_pin: D2 # =GPIO4 + encryption_key: "your_encryption_key" + +external_components: + - source: + type: local + path: ../components + +esp8266: + board: d1_mini + framework: + version: recommended + +esphome: + name: ${name} + friendly_name: ${device_name} + comment: Used to control your ${device_name} standing desk via Home Assistant. + + +# TODO diff --git a/tests/office-desk-esp8266.yaml b/tests/office-desk-esp8266.yaml index e69de29..bc9aebc 100644 --- a/tests/office-desk-esp8266.yaml +++ b/tests/office-desk-esp8266.yaml @@ -0,0 +1,274 @@ +substitutions: + device_name: Flexispot EK5 + name: office-desk-flexispot-ek5 + min_height: "73.5" # cm + max_height: "123" # cm + ssid: "your_wifi_ssid" + wifi_password: "your_wifi_password" + ap_fallback_password: "your_ap_fallback_password" + tx_pin: D5 # =GPIO14 + rx_pin: D6 # =GPIO12 + screen_pin: D2 # =GPIO4 + encryption_key: "your_encryption_key" + +external_components: + - source: + type: local + path: ../components + +esp8266: + board: d1_mini + framework: + version: recommended + +esphome: + name: ${name} + friendly_name: ${device_name} + comment: Used to control your ${device_name} standing desk via Home Assistant. + + # Wake Desk by sending the "M" command + # This will pull the current height after boot + on_boot: + priority: -10 + then: + - button.press: button_m + + +# Enable logging +logger: + +# Enable Home Assistant API +api: + encryption: + key: ${encryption_key} + +ota: + +wifi: + ssid: ${ssid) + password: ${wifi_password} + + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + ssid: ${device_name} Fallback Hotspot + password: ${ap_fallback_password} + +captive_portal: + +uart: + - id: desk_uart + baud_rate: 9600 + tx_pin: ${tx_pin} + rx_pin: ${rx_pin} + +sensor: + - platform: wifi_signal + name: "WiFi Signal" + update_interval: 60s + + - platform: uptime + name: Uptime + + - platform: loctekmotion_desk_height + id: "desk_height" + name: Desk Height + on_value_range: + - below: ${min_height} + then: + - switch.turn_off: switch_down + - above: ${max_height} + then: + - switch.turn_off: switch_up + on_value: + then: + - cover.template.publish: + id: desk_cover + position: !lambda |- + // The sensor outputs values from min_height (cm) to max_height (cm) + // We need to translate this to 0 - 1 scale. + float position = (float(x) - float(${min_height})) / (float(${max_height}) - float(${min_height})); + return position; + - component.update: set_desk_height + +switch: + - platform: gpio + name: "Virtual Screen" # PIN20 + pin: + number: ${screen_pin} + mode: OUTPUT + restore_mode: ALWAYS_ON + entity_category: "config" + internal: true + + - platform: uart + name: "Up" + id: switch_up + icon: mdi:arrow-up-bold + data: [0x9b, 0x06, 0x02, 0x01, 0x00, 0xfc, 0xa0, 0x9d] + uart_id: desk_uart + send_every: 108ms + internal: true + + - platform: uart + name: "Down" + id: switch_down + icon: mdi:arrow-down-bold + data: [0x9b, 0x06, 0x02, 0x02, 0x00, 0x0c, 0xa0, 0x9d] + uart_id: desk_uart + send_every: 108ms + internal: true + + - platform: uart + name: "Alarm off" + id: switch_alarm + icon: mdi:alarm + data: [0x9b, 0x06, 0x02, 0x40, 0x00, 0xAC, 0x90, 0x9d] + uart_id: desk_uart + send_every: 108ms + on_turn_on: + - delay: 3000ms + - switch.turn_off: switch_alarm + entity_category: "config" + + - platform: uart + name: "Child Lock" + id: switch_child_lock + icon: mdi:account-lock + data: [0x9b, 0x06, 0x02, 0x20, 0x00, 0xac, 0xb8, 0x9d] + uart_id: desk_uart + send_every: 108ms + on_turn_on: + - delay: 5000ms + - switch.turn_off: switch_child_lock + entity_category: "config" + +button: + - platform: template + name: "Preset 1" + icon: mdi:numeric-1-box + on_press: + - uart.write: + id: desk_uart + data: [0x9b, 0x06, 0x02, 0x04, 0x00, 0xac, 0xa3, 0x9d] + + - platform: template + name: "Preset 2" + icon: mdi:numeric-2-box + on_press: + - uart.write: + id: desk_uart + data: [0x9b, 0x06, 0x02, 0x08, 0x00, 0xac, 0xa6, 0x9d] + + - platform: template + name: "Sit" # Preset 3 on some control panels + icon: mdi:chair-rolling + on_press: + - uart.write: + id: desk_uart + data: [0x9b, 0x06, 0x02, 0x00, 0x01, 0xac, 0x60, 0x9d] + + - platform: template + name: "Stand" # Preset 4 on some control panels + icon: mdi:human-handsup + on_press: + - uart.write: + id: desk_uart + data: [0x9b, 0x06, 0x02, 0x10, 0x00, 0xac, 0xac, 0x9d] + + - platform: template + name: "Memory" + id: button_m + icon: mdi:alpha-m-box + entity_category: "config" + on_press: + - uart.write: + id: desk_uart + data: [0x9b, 0x06, 0x02, 0x20, 0x00, 0xac, 0xb8, 0x9d] + + - platform: template + name: "Wake Screen" + id: button_wake_screen + icon: mdi:gesture-tap-button + entity_category: "config" + on_press: + - uart.write: + id: desk_uart + data: [0x9b, 0x06, 0x02, 0x00, 0x00, 0x6c, 0xa1, 0x9d] + + - platform: template + name: "Alarm" + id: button_alarm + icon: mdi:alarm + on_press: + - uart.write: + id: desk_uart + data: [0x9b, 0x06, 0x02, 0x40, 0x00, 0xAC, 0x90, 0x9d] + + - platform: restart + name: "Restart" + entity_category: "config" + +cover: + - platform: template + id: "desk_cover" + icon: mdi:desk # or mdi:human-male-height-variant + name: "Desk" + device_class: blind # makes it easier to integrate with Google/Alexa + has_position: true + position_action: + - if: + condition: + - lambda: !lambda |- + return pos > id(desk_cover).position; + then: + - cover.open: desk_cover + - wait_until: + lambda: |- + return id(desk_cover).position >= pos; + - cover.stop: desk_cover + else: + - cover.close: desk_cover + - wait_until: + lambda: |- + return id(desk_cover).position <= pos; + - cover.stop: desk_cover + stop_action: + - switch.turn_off: switch_up + - switch.turn_off: switch_down + open_action: + - switch.turn_off: switch_down + - switch.turn_on: switch_up + close_action: + - switch.turn_off: switch_up + - switch.turn_on: switch_down + optimistic: false + +number: + - platform: template + name: "Desk Height" + id: set_desk_height + min_value: ${min_height} + max_value: ${max_height} + icon: "mdi:counter" + unit_of_measurement: "cm" + device_class: "distance" + step: 0.1 + lambda: !lambda |- + return id(desk_height).state; + set_action: + - if: + condition: + - lambda: !lambda |- + return x > id(desk_height).state; + then: + - cover.open: desk_cover + - wait_until: + lambda: |- + return id(desk_height).state >= x; + - cover.stop: desk_cover + else: + - cover.close: desk_cover + - wait_until: + lambda: |- + return id(desk_height).state <= x; + - cover.stop: desk_cover