Flashing Xiaomi IR com ESPHOME

Bom dia

Alguém já fez flash de esphome no Xiaomi IR ?

Tentei essa solução do Adam K Goddard, mas na hora de importar o script no yalm sempre dá erro de compilação. (GitHub - AdamKGoddard/XiaomiIR_ESPHome: Custom ESPHome Firmware for the Xiaomi IR Controller)

Alguém tem outra solução, alguma dica ou já passou por problemas semelhante?

Ja tentei salvar o arquivo do script “remote_transmitter_esp32.cpp” nas pastas:

  • config/esphome

  • config/esphome/.esphome

  • config/esphome/build/mi-remote (nome do projeto)

  • config/esphome/build/mi-remote/src

Estou rodando Home Assistant 2022.10.5 em um Raspberry Pi 4
Supervisor 2022.10.0
Operating System 9.2
Frontend: 20221010.0 - latest

Erro na compilação:

INFO Reading configuration /config/esphome/mi-remote.yaml...
INFO Generating C++ source...
Traceback (most recent call last):
  File "/usr/local/bin/esphome", line 33, in <module>
    sys.exit(load_entry_point('esphome', 'console_scripts', 'esphome')())
  File "/esphome/esphome/main.py", line 931, in main
    return run_esphome(sys.argv)
  File "/esphome/esphome/main.py", line 918, in run_esphome
    rc = POST_CONFIG_ACTIONS[args.command](args, config)
  File "/esphome/esphome/main.py", line 330, in command_compile
    exit_code = write_cpp(config)
  File "/esphome/esphome/main.py", line 163, in write_cpp
    generate_cpp_contents(config)
  File "/esphome/esphome/main.py", line 175, in generate_cpp_contents
    CORE.flush_tasks()
  File "/esphome/esphome/core/init.py", line 614, in flush_tasks
    self.event_loop.flush_tasks()
  File "/esphome/esphome/coroutine.py", line 246, in flush_tasks
    next(task.iterator)
  File "/esphome/esphome/core/config.py", line 303, in _add_platformio_options
    cg.add_platformio_option(key, val)
  File "/esphome/esphome/cpp_generator.py", line 629, in add_platformio_option
    CORE.add_platformio_option(key, value)
  File "/esphome/esphome/core/init.py", line 708, in add_platformio_option
    assert isinstance(value, list)

Arquivos na pasta \config\esphome
Assim compilou, não sei se vai funcionar

substitutions:
  devicename: xiaomi_ir
  upper_devicename: Xiaomi IR Remote



esphome:
  name: $devicename
  platformio_options:
    extra_scripts: 
      - pre:pre_extra_script.py
    platform_packages:
      - framework-arduinoespressif32 @ https://github.com/pauln/arduino-esp32.git#solo-no-mac-crc/1.0.6
    platform:
      - espressif32@1.11.0


esp32:
  board: esp32doit-devkit-v1

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Ir Fallback Hotspot"
    password: "BqXBWedcQhtr"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "api_password_here"

ota:
  password: "ota_password_here"
  
web_server:
  port: 80
  
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO32
      inverted: False
    name: ${upper_devicename} Button A
        
  - platform: gpio
    pin:
      number: GPIO33
      inverted: False
    name: ${upper_devicename} Button B
                
  - platform: gpio
    pin:
      number: GPIO34
      inverted: False
    name: ${upper_devicename} Button C
                
  - platform: gpio
    pin:
      number: GPIO35
      inverted: False
    name: ${upper_devicename} Button D

status_led:
  pin:
    number: GPIO18  #Orange LED - flashes for status events
    inverted: True
    
output:
  - platform: gpio
    pin: GPIO23     #Blue LED - Powered on always
    id: PowerLED
    
sensor:
  - platform: wifi_signal
    name: ${upper_devicename} WiFi Signal
    
  - platform: uptime
    name: ${upper_devicename} Uptime

switch:
  - platform: restart
    name: ${upper_devicename} Restart

  - platform: template
    name: ${upper_devicename} LG TV Power On
    turn_on_action:
      - remote_transmitter.transmit_lg:
          data: 0x02FD48B7              
          nbits: 32
          transmitter_id: internal_ir
          
mqtt:
  broker: "your_broker_ip_address"
  username: "your_mqtt_username"
  password: "your_mqtt_password"
  discovery: True
  
remote_receiver:
  pin:
    number: GPIO27
    inverted: True
  dump: all

remote_transmitter:
  pin:
    number: GPIO26
    inverted: False    #Needs idle state to be set to high. Not currently feasible. Will cause board heating.
  carrier_duty_percent: 50%
  id: internal_ir

Obrigado.

Consegui fazer o flash.

Estou agora tentando fazer funcionar com o meu ar-condicionado.
Tive que mudar o inverted do transmissor para True pois o LED não apagava e sobreaquecia a placa.

remote_transmitter:
  pin:
    number: GPIO26
    inverted: **True**    #Needs idle state to be set to high. Not currently feasible. Will cause board heating.
  carrier_duty_percent: 50%
  id: internal_ir

O LED IR funciona, mas o Ar não reconhece. Tenho uma TV LG que tambem não está respondendo ao comando. No firmware original funcionava. Estou buscando o erro.

O Codigo está assim:

substitutions:
  devicename: xiaomi_ir
  upper_devicename: Xiaomi IR Remote

esphome:
  name: $devicename
  platformio_options:
    extra_scripts: 
      - pre:pre_extra_script.py
    platform_packages:
      - framework-arduinoespressif32 @ https://github.com/pauln/arduino-esp32.git#solo-no-mac-crc/1.0.6
    platform:
      - espressif32@1.11.0


esp32:
  board: esp32doit-devkit-v1

wifi:
  ssid: !secret wifi_2_ssid
  password: !secret wifi_2_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Ir Fallback Hotspot"
    password: "12345678"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret api

ota:
  password: !secret OTA

# # Enable Bluetooth tracker
# esp32_ble_tracker: #Retirado para verificar sobreaquecimento
  
# # Enable Bluetooth Proxy
# bluetooth_proxy:  #Retirado para verificar sobreaquecimento
    
web_server:
  port: 80
  # auth:
  #  username: admin
  #  password: !secret web_server_password
  
# binary_sensor:
#   - platform: gpio
#     pin:
#       number: GPIO32
#       inverted: False
#     name: ${upper_devicename} Button A
        
#   - platform: gpio
#     pin:
#       number: GPIO33
#       inverted: False
#     name: ${upper_devicename} Button B
                
#   - platform: gpio
#     pin:
#       number: GPIO34
#       inverted: False
#     name: ${upper_devicename} Button C
                
#   - platform: gpio
#     pin:
#       number: GPIO35
#       inverted: False
#     name: ${upper_devicename} Button D

# status_led:
#   pin:
#     number: GPIO18  #Orange LED - flashes for status events
#     inverted: True
    
# output:
#   - platform: gpio
#     pin: GPIO23     #Blue LED - Powered on always
#     id: PowerLED
# template buttons for sending display control command and swing step actions

sensor:
  - platform: wifi_signal
    name: ${upper_devicename} WiFi Signal
    
  - platform: uptime
    name: ${upper_devicename} Uptime
  
  - platform: homeassistant
    name: "Temperature Sensor Ble"
    entity_id: sensor.ble_temperature
    id: ble_temperature
    internal: true
    filters:
      - throttle: 10s
      - heartbeat: 2min             # Maximum interval between updates.
      - debounce: 1s

button:
  - platform: restart
    name: ${upper_devicename} Restart

  - platform: template
    name: ${upper_devicename} LG TV Power On
    on_press:
      - remote_transmitter.transmit_lg:
          data: 0x02FD48B7              
          nbits: 32
          transmitter_id: internal_ir
          
# mqtt:
#   broker: !secret mosquito_ip
#   username: !secret mosquito_usr
#   password: !secret mosquito_pswrd
#   discovery: True
  
remote_receiver:
  pin:
    number: GPIO27
    inverted: True
  dump: midea
    #- midea # Decode and dump Midea infrared codes
    #- lg # Decode and dump LG infrared codes
    #- samsung # Decode and dump Samsung infrared codes.
    #- samsung36 # Decode and dump Samsung36 infrared codes.
  id: rcvr

remote_transmitter:
  pin:
    number: GPIO26
    inverted: True    #Needs idle state to be set to high. Not currently feasible. Will cause board heating.
  carrier_duty_percent: 50%
  id: internal_ir

climate:
  - platform: midea_ir
    name: "AC Quarto Casal"
    sensor: ble_temperature
    use_fahrenheit: False
    receiver_id: rcvr
    supports_heat: False
    # visual:                     # Optional. Example of visual settings override.
    #   min_temperature: 17 °C    # min: 17
    #   max_temperature: 30 °C    # max: 30
    #   temperature_step: 1 °C    # min: 0.5

Já deu uma olhada aqui:

Essa parte no git esta diferente da pagina do esphome

  - remote_transmitter.transmit_lg:
      data: 0x20DF10EF # power on/off
      nbits: 32

Ei pessoal. Eu atualizei meu código. Por favor, experimente e deixe-me saber se funciona.

Hey guys. I updated my code. Please try it and let me know if it works.

Ei pessoal. Atualizado o código novamente. Deve ficar mais estável durante a atualização, pois mudei a estrutura para ESP-IDF. Obrigado.

Hey guys. Updated the code again. Should be more stable when updating as I changed framework to ESP-IDF. Thanks.