Setting-up Home Assistant
From Eric
Contents |
Discovery
- For devices to be automatically discovered by Home Assistant, their configuration must be published as shown below (for an ESP32 Arduino platform):
Serial.println("Sending discovery data: "); client.publish("homeassistant/sensor/mto1_t1/config", "{\"unique_id\": \"mto1_t1\", \"dev_cla\": \"temperature\", \"name\": \"mto1_t1\", \"stat_t\": \"tele/lorabridge/mto1\", \"unit_of_meas\": \"°C\", \"val_tpl\": \"Template:Value json.t1\"}" ) ; client.publish("homeassistant/sensor/mto1_t2/config", "{\"unique_id\": \"mto1_t2\", \"dev_cla\": \"temperature\", \"name\": \"mto1_t2\", \"stat_t\": \"tele/lorabridge/mto1\", \"unit_of_meas\": \"°C\", \"val_tpl\": \"Template:Value json.t2\"}" ) ; client.publish("homeassistant/sensor/mto1_h/config", "{\"unique_id\": \"mto1_h\", \"dev_cla\": \"humidity\", \"name\": \"mto1_h\", \"stat_t\": \"tele/lorabridge/mto1\", \"unit_of_meas\": \"%\", \"val_tpl\": \"Template:Value json.h\"}" ) ; client.publish("homeassistant/sensor/mto1_p/config", "{\"unique_id\": \"mto1_p\", \"dev_cla\": \"pressure\", \"name\": \"mto1_p\", \"stat_t\": \"tele/lorabridge/mto1\", \"unit_of_meas\": \"Pa\", \"val_tpl\": \"Template:Value json.p\"}" ) ; client.publish("homeassistant/sensor/mto1_a/config", "{\"unique_id\": \"mto1_a\", \"name\": \"mto1_a\", \"stat_t\": \"tele/lorabridge/mto1\", \"unit_of_meas\": \"m\", \"val_tpl\": \"Template:Value json.a\"}" ) ; client.publish("homeassistant/sensor/mto1_vbat/config", "{\"unique_id\": \"mto1_vbat\", \"name\": \"mto1_vbat\", \"stat_t\": \"tele/lorabridge/mto1\", \"unit_of_meas\": \"V\", \"val_tpl\": \"Template:Value json.vbat\"}" ) ;}
The corresponding JSON message for the pressure is the following: {"unique_id": "mto1_p", "dev_cla": "pressure", "name": "mto1_p", "stat_t": "tele/lorabridge/mto1", "unit_of_meas": "Pa", "val_tpl": "Template:Value json.p"}
Here, I have used the abbreviated attributes names.
EspHome
The display
The display box incorporates a DFPlayer chip (with its amplifier) and a rotary switch. The ESPHome configuration file is the following:
esphome: name: esp32dsp1 platform: ESP32 board: nodemcu-32s # Enable logging logger: ota: password: "zorglub_1" wifi: ssid: "edvac" password: "ae03f5ab16" manual_ip: static_ip: 192.168.0.43 gateway: 192.168.0.254 subnet: 255.255.255.0 output: - platform: ledc pin: 32 id: gpio_32_backlight_pwm - platform: gpio pin: 32 id: gpio_backlight_off inverted: yes light: - platform: monochromatic output: gpio_32_backlight_pwm name: "ILI9341 Display Backlight" id: back_light restore_mode: ALWAYS_OFF on_turn_off: then: - delay: 10s - light.turn_on: id: back_light spi: clk_pin: GPIO18 mosi_pin: GPIO23 miso_pin: GPIO19 font: - file: "fonts/comicsansms.ttf" id: my_font size: 20 color: - id: my_red red: 100% green: 3% blue: 5% time: - platform: homeassistant id: homeassistant_time display: - platform: ili9341 model: TFT 2.4 cs_pin: 21 dc_pin: 27 led_pin: 32 reset_pin: 33 id: tft_ha rotation: 180 lambda: |- it.fill(COLOR_BLACK); // Print time in HH:MM format it.strftime(0, 0, id(my_font), "%H:%M", id(homeassistant_time).now()); it.printf(0, 21, id(my_font), id(my_red), "Temp Eric: %s", id(temp_eric).state.c_str()); it.printf(0, 42, id(my_font), id(my_red), "Temp living: %s", id(temp_living).state.c_str()); it.printf(0, 63, id(my_font), id(my_red), "Temp lab: %s", id(temp_lab).state.c_str()); # Example configuration entry sensor: - platform: rotary_encoder name: "dsp rot enc" pin_a: 34 pin_b: 35 on_clockwise: - logger.log: "Turned Clockwise" on_anticlockwise: - logger.log: "Turned Anticlockwise" publish_initial_value: true binary_sensor: - platform: gpio pin: number: 25 mode: input: true pullup: true name: "dsp_button" device_class: window text_sensor: - platform: homeassistant entity_id: sensor.0x00124b00226994c4_temperature name: "Temp. Eric" id: temp_eric - platform: homeassistant entity_id: sensor.0x00124b0022ebf1ff_temperature name: "Temp. living" id: temp_living - platform: homeassistant entity_id: sensor.0x00124b0022697fe1_temperature name: "Temp. lab" id: temp_lab uart: tx_pin: 17 rx_pin: 16 baud_rate: 9600 # Declare DFPlayer mini module dfplayer: on_finished_playback: then: logger.log: 'Somebody press play!' # Enable Home Assistant API api: password: "zorglub_1" services: - service: dfplayer_next then: - dfplayer.play_next: - service: dfplayer_previous then: - dfplayer.play_previous: - service: dfplayer_play variables: file: int then: - dfplayer.play: !lambda 'return file;' - service: dfplayer_play_loop variables: file: int loop_: bool then: - dfplayer.play: file: !lambda 'return file;' loop: !lambda 'return loop_;' - service: dfplayer_set_volume variables: volume: int then: - dfplayer.set_volume: !lambda 'return volume;' - service: dfplayer_set_eq variables: preset: int then: - dfplayer.set_eq: !lambda 'return static_cast<dfplayer::EqPreset>(preset);' - service: dfplayer_sleep then: - dfplayer.sleep - service: dfplayer_reset then: - dfplayer.reset - service: dfplayer_volume_up then: - dfplayer.volume_up - service: dfplayer_volume_down then: - dfplayer.volume_down