Hardware:
The below YAML contains sections for both H&T Sensor and Gate Opener.
- H&T Sensor:
- sensor: 2x packet_transport
- sensor: 2x template
- packet_transport: 1x providers
- Gate Opener:
- switch: 3x template
- packet_transport: 3x binary_sensors
- packet_transport: 1x providers
- binary_sensor: 3x template
- binary_sensor: 3x packet_transport
esphome:
name: lora-base-station
friendly_name: LoRa Base Station
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "WhNJ2bY6xjaFHs3C844w4/uAYMGvcmcGoBggQDjnvhg="
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid_iot
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
password: !secret ap_password
captive_portal:
# SPI bus for LoRa radio
spi:
clk_pin:
number: GPIO05
ignore_strapping_warning: true
mosi_pin: GPIO27
miso_pin: GPIO19
# I2C for OLED display
i2c:
sda: GPIO21
scl: GPIO22
frequency: 400kHz
# LoRa Radio Configuration (SX1276/SX1278)
sx127x:
dio0_pin: GPIO26
cs_pin: GPIO18
rst_pin: GPIO14
pa_pin: BOOST
pa_power: 17
bandwidth: 125_0kHz
preamble_size: 6
crc_enable: true
frequency: 868920000
modulation: LORA
rx_start: true
sync_value: 0x12
spreading_factor: 7
coding_rate: CR_4_5
on_packet:
then:
- lambda: |-
ESP_LOGD("lambda", "Packet: %s", format_hex(x).c_str());
ESP_LOGD("lambda", "RSSI: %.2f dBm", rssi);
ESP_LOGD("lambda", "SNR: %.2f dB", snr);
# OLED Display
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
it.printf(0, 0, id(display_font), "LoRa Base");
it.horizontal_line(0, 16, 128);
it.printf(0, 20, id(display_font), "WiFi: %.1f dBm", id(wifi_signal_db).state);
font:
- file: "gfonts://Roboto"
id: display_font
size: 10
button:
- platform: restart
name: "Restart"
sensor:
- platform: wifi_signal
id: wifi_signal_db
name: "WiFi Signal"
update_interval: 10s
- platform: packet_transport
id: temperature
provider: lora-remote-station-1
- platform: packet_transport
id: humidity
provider: lora-remote-station-1
- platform: template
name: Temperature
device_class: temperature
unit_of_measurement: °C
update_interval: 1min
lambda: return id(temperature).state;
- platform: template
name: Humidity
device_class: humidity
unit_of_measurement: "%"
update_interval: 1min
lambda: return id(humidity).state;
switch:
- platform: template
name: Relay 1
id: relay1
optimistic: True
- platform: template
name: Relay 1 Plus
id: relay1plus
optimistic: True
- platform: template
name: Relay 2
id: relay2
optimistic: True
- platform: template
name: Enable WiFi
id: enable_wifi
optimistic: True
packet_transport:
platform: sx127x
update_interval: 1min
encryption: "My3ncryPt10n"
rolling_code_enable: False
binary_sensors:
- relay1_lora_base_station
- relay1plus_lora_base_station
- relay2_lora_base_station
- enable_wifi_lora_base_station
providers:
- name: lora-remote-station-1
encryption: "My3ncryPt10n"
- name: lora-remote-station-2
encryption: "My3ncryPt10n"
binary_sensor:
- platform: template
id: relay1_lora_base_station
lambda: return id(relay1).state;
- platform: template
id: relay1plus_lora_base_station
lambda: return id(relay1plus).state;
- platform: template
id: relay2_lora_base_station
lambda: return id(relay2).state;
- platform: template
id: enable_wifi_lora_base_station
lambda: return id(enable_wifi).state;
- platform: packet_transport
id: relay1_lora_remote_station_2
provider: lora-remote-station-2
on_press:
switch.turn_on: relay1
on_release:
switch.turn_off: relay1
- platform: packet_transport
id: relay1plus_lora_remote_station_2
provider: lora-remote-station-2
on_press:
switch.turn_on: relay1plus
on_release:
switch.turn_off: relay1plus
- platform: packet_transport
id: relay2_lora_remote_station_2
provider: lora-remote-station-2
on_press:
switch.turn_on: relay2
on_release:
switch.turn_off: relay2