---
substitutions:
  device: cec-bedroom
  name: Bedroom TV
  area: Bedroom
  comment: CEC

esphome:
  name: mcu-${device}
  friendly_name: ${name}
  area: ${area}
  comment: ${comment}

esp32:
  variant: esp32
  toolchain: esp-idf
  framework:
    type: esp-idf

external_components:
  # - source: github://pr#3017
  #   components: [hdmi_cec]
  #   refresh: 1h
  # - source: github://Palakis/esphome-hdmi-cec
  #   refresh: 1h
  - source: github://pr#9189
    components: [hdmi_cec]
    refresh: 0min
packages:
  common: !include common/common.yaml

debug:

time:
  - platform: homeassistant
    id: ha_time
    timezone: Europe/Bratislava

i2c:
  # - id: i2c0
  sda: 32
  scl: 33
  scan: true #false
  frequency: 100kHz
  # - id: i2c1
  # sda: 25
  # scl: 22
  # scan: true #false

uart:
  - id: uart_distance
    tx_pin: 25
    rx_pin: 22
    baud_rate: 9600

sensor:
  - platform: a02yyuw
    uart_id: uart_distance
    name: 'Distance'
    accuracy_decimals: 2
    unit_of_measurement: cm

binary_sensor:
  - platform: gpio
    name: ${name} Button
    pin:
      number: 39
      inverted: true

light:
  - platform: esp32_rmt_led_strip
    name: LED
    id: led
    rgb_order: GRB
    pin: 27
    num_leds: 1
    chipset: ws2812
    restore_mode: ALWAYS_OFF
    effects:
      # Use default parameters:
      - random:
      # Customize parameters
      - random:
          name: "My Slow Random Effect"
          transition_length: 30s
          update_interval: 30s
      - random:
          name: "My Fast Random Effect"
          transition_length: 4s
          update_interval: 5s
      - strobe:
      - strobe:
          name: Strobe Effect With Custom Values
          colors:
            - state: True
              brightness: 100%
              red: 100%
              green: 90%
              blue: 0%
              duration: 500ms
            - state: False
              duration: 250ms
            - state: True
              brightness: 100%
              red: 0%
              green: 100%
              blue: 0%
              duration: 500ms
      - flicker:
      - flicker:
          name: Flicker Effect With Custom Values
          alpha: 95%
          intensity: 1.5%
      - addressable_rainbow:
      - addressable_rainbow:
          name: Rainbow Effect With Custom Values
          speed: 10
          width: 50
      - addressable_scan:
      - addressable_scan:
          name: Scan Effect With Custom Values
          move_interval: 100ms

hdmi_cec:
  # The initial logical address -- corresponds to device type. This may be
  # reassigned if there are other devices of the same type on the CEC bus.
  address: 0x05 # Audio system
  # Promiscuous mode can be enabled to allow receiving messages not intended for us
  promiscuous_mode: false
  # Typically the physical address is discovered based on the point-to-point
  # topology of the HDMI connections using the DDC line. We don't have access
  # to that so we just hardcode a physical address.
  physical_address: 0x4000
  pin: 26
  on_message:
    - opcode: 0x36 # opcode for "Standby"
      then:
        logger.log: "Got Standby command"
    - opcode: 0xC3 # Request ARC start
      then:
        - hdmi_cec.send: # Report ARC started
            destination: 0x0
            data: [0xC1]
    - opcode: 0x70 # System audio mode request
      then:
        - hdmi_cec.send:
            destination: 0x0
            data: [0x72, 0x01]
    - opcode: 0x71 # Give audio status
      then:
        - hdmi_cec.send:
            destination: 0x0
            data: [0x7A, 0x7F]
    - opcode: 0x7D # Give audio system mode status
      then:
        - hdmi_cec.send:
            destination: 0x0
            data: [0x7E, 0x01]
    - opcode: 0x46 # Give OSD name
      then:
        - hdmi_cec.send:
            destination: 0x0
            data: [0x47, 0x65, 0x73, 0x70, 0x68, 0x6F, 0x6D, 0x65] # esphome
    - opcode: 0x8C # Give device Vendor ID
      then:
        - hdmi_cec.send:
            destination: 0x0
            data: [0x87, 0x00, 0x13, 0x37]
    - data: [0x44, 0x41] # User control pressed: volume up
      then:
        - logger.log: "Volume up"
    - data: [0x44, 0x42] # User control pressed: volume down
      then:
        - logger.log: "Volume down"
    - data: [0x44, 0x43] # User control pressed: volume mute
      then:
        - logger.log: "Volume mute"
