202 lines
5.1 KiB
YAML
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 {};
|