substitutions: device_name: couchlight friendly_name: "Couch Light" fan_code: "0000" external_components: - source: github://pr#6300 components: [ cc1101 ] - source: my_components components: [ mycc1101 ] esphome: name: ${device_name} friendly_name: ${friendly_name} devices: - id: couchlight name: "Couch Light" - id: fancontrol name: "Fan Control" on_boot: then: - lock.template.publish: id: child_lock state: UNLOCKED esp8266: board: d1_mini # Enable logging logger: # Enable Home Assistant API api: encryption: key: !secret api_encryption_key # OTA ota: - platform: esphome password: !secret ota_password # WiFi Credentials wifi: domain: .lan ssid: !secret wifi_ssid password: !secret wifi_password # see https://github.com/esphome/issues/issues/1532 power_save_mode: HIGH # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "${device_name} Fallback Hotspot" password: !secret wifi_ap_password captive_portal: light: - id: light1 device_id: couchlight platform: binary name: "Spot 1" output: relay_light1 - id: light2 device_id: couchlight platform: binary name: "Spot 2" output: relay_light2 output: - id: relay_light1 platform: gpio pin: GPIO5 # D1 - id: relay_light2 platform: gpio pin: GPIO4 # D2 # UNUSED GPIO - platform: gpio id: unused_gpio1 pin: number: TX # GPIO1 mode: INPUT_PULLUP - platform: gpio id: unused_gpio3 pin: number: RX # GPIO3 mode: INPUT_PULLUP binary_sensor: - id: button_light1 device_id: couchlight platform: gpio name: "Spot 1 PushButton" pin: number: GPIO2 # D4 mode: INPUT_PULLUP filters: - invert - delayed_on: 50ms on_press: then: - if: condition: lock.is_unlocked: child_lock then: - light.toggle: light1 internal: true # hide from UI - id: button_light2 device_id: couchlight platform: gpio name: "Spot 2 PushButton" pin: number: GPIO0 # D3 mode: INPUT_PULLUP filters: - invert - delayed_on: 50ms on_press: then: - if: condition: lock.is_unlocked: child_lock then: - light.toggle: light2 internal: true # hide from UI lock: - id: child_lock device_id: couchlight platform: template name: "Child Lock" optimistic: true on_lock: - script.execute: reset_child_lock on_unlock: - script.stop: reset_child_lock spi: clk_pin: GPIO14 # D5 miso_pin: GPIO12 # D6 mosi_pin: GPIO13 # D7 mycc1101: id: transceiver cs_pin: GPIO15 # D8 gdo0_pin: number: GPIO16 # D0 allow_other_uses: true output_power: 10 # 5 tuner: frequency: 433920 if_frequency: 153 bandwidth: 270 symbol_rate: 6000 sync_mode: None carrier_sense_above_threshold: false modulation: ASK/OOK remote_transmitter: pin: number: GPIO16 # same as GDO0 allow_other_uses: true carrier_duty_percent: 100% fan: - id: myfan device_id: fancontrol platform: template name: "Fan" speed_count: 6 has_direction: true restore_mode: ALWAYS_OFF on_turn_off: - logger.log: "on_turn_off" - lambda: |- id(transceiver)->wakeup(); id(fan_stop_frames).execute(); id(transceiver)->power_down(); on_turn_on: - logger.log: "on_turn_on" - lambda: |- id(transceiver)->wakeup(); auto x = id(myfan).speed; if (x == 1) { id(fan_speed1_frames).execute(); } else if (x == 2) { id(fan_speed2_frames).execute(); } else if (x == 3) { id(fan_speed3_frames).execute(); } else if (x == 4) { id(fan_speed4_frames).execute(); } else if (x == 5) { id(fan_speed5_frames).execute(); } else if (x == 6) { id(fan_speed6_frames).execute(); } id(transceiver)->power_down(); on_speed_set: - logger.log: "on_speed_set" - lambda: |- if (!id(myfan).state) return; id(transceiver)->wakeup(); if (x == 1) { id(fan_speed1_frames).execute(); } else if (x == 2) { id(fan_speed2_frames).execute(); } else if (x == 3) { id(fan_speed3_frames).execute(); } else if (x == 4) { id(fan_speed4_frames).execute(); } else if (x == 5) { id(fan_speed5_frames).execute(); } else if (x == 6) { id(fan_speed6_frames).execute(); } id(transceiver)->power_down(); on_direction_set: - logger.log: "on_direction_set" - lambda: |- if (!id(myfan).state) return; id(transceiver)->wakeup(); id(fan_reverse_frames).execute(); id(transceiver)->power_down(); script: - id: reset_child_lock mode: restart then: - delay: 30min - lock.template.publish: id: child_lock state: UNLOCKED # see https://www.alldatasheet.com/datasheet-pdf/pdf/114193/ETC1/M1EN.html # code format is 0 0 # commands: # - stop: 111101 # - lvl1: 110111 # - lvl2: 110101 # - lvl3: 101111 # - lvl4: 100111 # - lvl5: 011101 # - lvl6: 011111 # - light: 111110 # - reverse: 111011 - id: fan_stop_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0111101" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_speed1_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0110111" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_speed2_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0110101" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_speed3_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0101111" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_speed4_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0100111" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_speed5_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0011101" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_speed6_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0011111" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_toggle_light_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0111110" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s } - id: fan_reverse_frames then: - remote_transmitter.transmit_rc_switch_raw_cc1101: code: "0${fan_code}0111011" protocol: { pulse_length: 250, sync: [35,1], zero: [1,2], one: [2,1], inverted: true } repeat: { times: 10, wait_time: 0s }