Files
esphome/blinds.yaml
T

202 lines
5.1 KiB
YAML

esphome:
name: blinds
friendly_name: "Blinds"
area: "Entryway"
project:
name: dasfoo.blinds
version: "4.0"
esp32:
framework:
type: esp-idf
packages:
device_base: !include templates/esp32-poe.yaml
# Also act as a BT proxy due to convenient location.
btproxy: !include templates/btproxy.yaml
# Allow HA to use our proxy.
api: !include templates/api.yaml
external_components:
# Path is relative to the main YAML file, not this device_base template!
- source: components
spi:
clk_pin: 14
miso_pin: 16
mosi_pin: 15
cc1101:
id: transceiver
cs_pin: 13
frequency: 433.34MHz
remote_transmitter:
pin: 4
carrier_duty_percent: 100%
id: somfy_remote_transmitter
on_transmit:
then:
- cc1101.begin_tx: transceiver
on_complete:
then:
- cc1101.set_idle: transceiver
cover:
- name: "Office window"
remote_id_offset: 0
<<: &somfy_cover
platform: somfy
transmitter: somfy_remote_transmitter
# Can be retrieved from MQTT server. Take the key with lowest integer value
# from /$board/rolling_code/ path.
remote_id_base: !secret somfy_remote_id_base
- name: "Bedroom"
remote_id_offset: 1
<<: *somfy_cover
- name: "Living Room side"
remote_id_offset: 2
# Timing: open 45s, close 44s
<<: *somfy_cover
- name: "Wardrobe"
remote_id_offset: 3
<<: *somfy_cover
- name: "Child West door"
remote_id_offset: 4
<<: *somfy_cover
- name: "Child West window"
remote_id_offset: 5
<<: *somfy_cover
- name: "Hallway Stairs window"
remote_id_offset: 6
<<: *somfy_cover
- name: "Kitchen window"
remote_id_offset: 7
<<: *somfy_cover
- name: "Kitchen door"
remote_id_offset: 8
<<: *somfy_cover
- name: "Living Room door"
remote_id_offset: 9
# Timing: open 46s, close 45s
<<: *somfy_cover
- name: "Living Room window"
remote_id_offset: 10
<<: *somfy_cover
- name: "Child East window"
remote_id_offset: 11
<<: *somfy_cover
- name: "Child East door"
remote_id_offset: 12
<<: *somfy_cover
- platform: template
name: "Wintergarten"
device_class: awning
optimistic: true
assumed_state: true # always show both buttons
stop_action:
- switch.turn_off: wintergarten_deploy
- switch.turn_off: wintergarten_retract
open_action:
- switch.turn_off: wintergarten_deploy
- switch.turn_on: wintergarten_retract
- delay: 35s
- switch.turn_off: wintergarten_retract # TODO: check last action
close_action:
- switch.turn_off: wintergarten_retract
- switch.turn_on: wintergarten_deploy
- delay: 35s
- switch.turn_off: wintergarten_deploy # TODO: check last action
switch:
- platform: gpio
pin: GPIO32
id: wintergarten_deploy
restore_mode: ALWAYS_OFF
inverted: true
- platform: gpio
pin: GPIO33
id: wintergarten_retract
restore_mode: ALWAYS_OFF
inverted: true
# TODO: hide the below (meater) under sub-device after esphome 2025.07.
ble_client:
- mac_address: "B8:1F:5E:0F:BB:2F"
id: meater
sensor:
- name: "Meater Tip temperature"
platform: ble_client
type: characteristic
ble_client_id: meater
service_uuid: "a75cc7fc-c956-488f-ac2a-2dbc08b63a04"
characteristic_uuid: "7edda774-045e-4bbf-909b-45d1991a2876"
unit_of_measurement: "°C"
accuracy_decimals: 1
device_class: "temperature"
state_class: "measurement"
notify: true
lambda: |-
float tip_temp = (x[0] + (x[1] << 8) + 8.0) / 16.0;
return tip_temp;
- name: "Meater Ambient temperature"
platform: ble_client
type: characteristic
ble_client_id: meater
service_uuid: "a75cc7fc-c956-488f-ac2a-2dbc08b63a04"
characteristic_uuid: "7edda774-045e-4bbf-909b-45d1991a2876"
unit_of_measurement: "°C"
accuracy_decimals: 1
device_class: "temperature"
state_class: "measurement"
notify: true
lambda: |-
uint16_t tip = x[0] + (x[1] << 8);
uint16_t ra = x[2] + (x[3] << 8);
uint16_t oa = x[4] + (x[5] << 8);
uint16_t min_val = 48;
float ambient = (tip + std::max(0., (((ra - std::min(min_val, oa)) * 16. * 589.) / 1487.)) + 8.0) / 16.;
return ambient;
- name: "Meater Battery level"
platform: ble_client
type: characteristic
ble_client_id: meater
service_uuid: "a75cc7fc-c956-488f-ac2a-2dbc08b63a04"
characteristic_uuid: "2adb4877-68d8-4884-bd3c-d83853bf27b8"
unit_of_measurement: "%"
device_class: "battery"
state_class: "measurement"
notify: true
lambda: |-
uint16_t battery = (x[0] + x[1]) * 10;
return battery;
- name: "Meater RSSI"
platform: ble_client
type: rssi
ble_client_id: meater
device_class: "signal_strength"
state_class: "measurement"
entity_category: diagnostic
text_sensor:
- name: "Meater Firmware"
platform: ble_client
ble_client_id: meater
service_uuid: "180A"
entity_category: diagnostic
characteristic_uuid: "00002a26-0000-1000-8000-00805f9b34fb"
filters:
- lambda: |-
if (x.size()) {
std::string data_string(x.begin(), x.end());
return data_string;
}
return {};