You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
5.9 KiB
230 lines
5.9 KiB
esphome:
|
|
name: esp32weatherstation2
|
|
platform: ESP32
|
|
board: lolin_d32_pro
|
|
includes:
|
|
- veml6075_custom_sensor.h
|
|
libraries:
|
|
- "https://github.com/adafruit/Adafruit_VEML6075"
|
|
- "https://github.com/adafruit/Adafruit_BusIO"
|
|
platformio_options:
|
|
lib_ldf_mode: chain+
|
|
project:
|
|
name: "xd0.esp32weatherstation2"
|
|
version: "0.0.3"
|
|
|
|
# Enable logging
|
|
logger:
|
|
# level: VERY_VERBOSE
|
|
|
|
# Enable Home Assistant API
|
|
api:
|
|
|
|
ota:
|
|
password: !secret esphome_ota_password
|
|
# on_begin:
|
|
# then:
|
|
# - logger.log: "OTA start"
|
|
|
|
wifi:
|
|
networks:
|
|
- ssid: !secret wifi_ssid
|
|
password: !secret wifi_passwd
|
|
- ssid: !secret wifi_ssid2
|
|
password: !secret wifi_passwd2
|
|
power_save_mode: light
|
|
|
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
|
ap:
|
|
ssid: "Esp32Weatherstation2"
|
|
password: "ucYwmU1xwUxh"
|
|
|
|
captive_portal:
|
|
|
|
time:
|
|
- platform: sntp
|
|
id: sntp_time
|
|
timezone: "Europe/Berlin"
|
|
|
|
#mqtt:
|
|
# broker: home.xd0.de
|
|
# username: !secret esphome_mqtt_user
|
|
# password: !secret esphome_mqtt_passwd
|
|
|
|
i2c:
|
|
sda: 21
|
|
scl: 22
|
|
scan: true
|
|
|
|
spi:
|
|
clk_pin: 18
|
|
mosi_pin: 23
|
|
miso_pin: 19
|
|
|
|
uart:
|
|
rx_pin: 15
|
|
tx_pin: 2
|
|
baud_rate: 9600
|
|
|
|
# display #250x122 pixels
|
|
font:
|
|
- file: 'fonts/Vera.ttf'
|
|
id: font1
|
|
size: 10
|
|
- file: 'fonts/Vera.ttf'
|
|
id: font2
|
|
size: 20
|
|
# - file: 'fonts/VeraMono.ttf'
|
|
# id: font3
|
|
# size: 10
|
|
|
|
status_led:
|
|
pin:
|
|
number: GPIO5
|
|
inverted: true
|
|
|
|
display:
|
|
- platform: waveshare_epaper
|
|
cs_pin: 14
|
|
dc_pin: 27
|
|
reset_pin: 33
|
|
model: 2.13in-ttgo
|
|
rotation: 90
|
|
update_interval: 30s
|
|
full_update_every: 1
|
|
id: my_display
|
|
pages:
|
|
# - id: page1
|
|
# lambda: |-
|
|
# it.print(10, 10, id(font2), "esp32weatherstation2");
|
|
- id: page2
|
|
lambda: |-
|
|
it.print(5, 6, id(font1), "Hello World!");
|
|
it.strftime(150, 6, id(font1), "%Y-%m-%d %H:%M", id(sntp_time).now());
|
|
it.line(0, 20, 250, 20);
|
|
it.filled_rectangle(0, 20, 70, 122, COLOR_ON);
|
|
it.line(0, 54, 70, 54, COLOR_OFF);
|
|
it.line(0, 88, 70, 88, COLOR_OFF);
|
|
if (id(temperature).state) {
|
|
it.printf(2, 21+4, id(font2), COLOR_OFF, "%.1f", id(temperature).state); it.printf(55, 21+4, id(font1), COLOR_OFF, "°C");
|
|
it.printf(2, 55+4, id(font2), COLOR_OFF, "%.1f", id(humidity).state); it.printf(55, 55+4, id(font1), COLOR_OFF, "%%");
|
|
it.printf(2, 89+4, id(font2), COLOR_OFF, "%.0f", id(pressure).state); it.printf(55, 89+4, id(font1), COLOR_OFF, "hPa");
|
|
it.graph(70, 21, id(temperature_graph));
|
|
it.graph(70, 55, id(humidity_graph));
|
|
it.graph(70, 89, id(pressure_graph));
|
|
} else if (id(temperature2).state) {
|
|
it.printf(2, 21+4, id(font2), COLOR_OFF, "%.1f", id(temperature2).state); it.printf(55, 21+4, id(font1), COLOR_OFF, "°C");
|
|
it.printf(2, 55+4, id(font2), COLOR_OFF, "%.1f", id(humidity2).state); it.printf(55, 55+4, id(font1), COLOR_OFF, "%%");
|
|
it.printf(2, 89+4, id(font2), COLOR_OFF, "%.0f", id(pressure2).state); it.printf(55, 89+4, id(font1), COLOR_OFF, "hPa");
|
|
}
|
|
it.printf(133, 21, id(font1), "PM2.5: %.1f", id(pm2).state);
|
|
it.printf(133, 31, id(font1), "PM10 : %.1f", id(pm10).state);
|
|
it.printf(133, 41, id(font1), "VOC : %.1f k\xe9", id(voc).state);
|
|
it.printf(133, 51, id(font1), "Lux : %.1f lx", id(lux).state);
|
|
# it.printf(130, 61, id(font1), "UVI : %.1f", id(uva).state);
|
|
# it.printf(130, 71, id(font1), "UVA : %.1f", id(uva).state);
|
|
# it.printf(130, 81, id(font1), "UVB : %.1f", id(uvb).state);
|
|
|
|
graph:
|
|
# Show bare-minimum auto-ranged graph
|
|
- id: temperature_graph
|
|
sensor: temperature
|
|
duration: 1h
|
|
width: 60
|
|
height: 32
|
|
- id: humidity_graph
|
|
sensor: humidity
|
|
duration: 1h
|
|
width: 60
|
|
height: 32
|
|
- id: pressure_graph
|
|
sensor: pressure
|
|
duration: 1h
|
|
width: 60
|
|
height: 32
|
|
|
|
sensor:
|
|
# BME680 Temperature+Pressure+Humidity+Gas Sensor
|
|
- platform: bme680
|
|
temperature:
|
|
name: "BME680 Temperature"
|
|
oversampling: 16x
|
|
id: temperature
|
|
pressure:
|
|
name: "BME680 Pressure"
|
|
id: pressure
|
|
humidity:
|
|
name: "BME680 Humidity"
|
|
id: humidity
|
|
gas_resistance:
|
|
name: "BME680 Gas Resistance"
|
|
id: voc
|
|
address: 0x77
|
|
update_interval: 60s
|
|
# BME280 Temperature+Pressure+Humidity Sensor
|
|
- platform: bme280
|
|
temperature:
|
|
name: "BME280 Temperature"
|
|
id: temperature2
|
|
oversampling: 16x
|
|
pressure:
|
|
name: "BME280 Pressure"
|
|
id: pressure2
|
|
humidity:
|
|
name: "BME280 Humidity"
|
|
id: humidity2
|
|
address: 0x77
|
|
update_interval: 60s
|
|
# SDS 011 Particulate Matter Sensor
|
|
- platform: sds011
|
|
pm_2_5:
|
|
name: "Particulate Matter <2.5µm Concentration"
|
|
id: pm2
|
|
pm_10_0:
|
|
name: "Particulate Matter <10.0µm Concentration"
|
|
id: pm10
|
|
update_interval: 5min
|
|
# BH1750 Ambient Light Sensor
|
|
- platform: bh1750
|
|
name: "BH1750 Illuminance"
|
|
id: lux
|
|
address: 0x23
|
|
measurement_duration: 69
|
|
update_interval: 60s
|
|
# VEML6075 UV sensor
|
|
# - platform: custom
|
|
# lambda: |-
|
|
# auto veml6075 = new VEML6075CustomSensor();
|
|
# App.register_component(veml6075);
|
|
# return {veml6075->uva_sensor, veml6075->uvb_sensor};
|
|
# sensors:
|
|
# - name: "zelva UVA"
|
|
# id: uva
|
|
# unit_of_measurement: "mW/cm²"
|
|
# accuracy_decimals: 0
|
|
# - name: "zelva UVB"
|
|
# id: uvb
|
|
# unit_of_measurement: "mW/cm²"
|
|
# accuracy_decimals: 0
|
|
# ESP32 integrated hall sensor
|
|
# - platform: esp32_hall
|
|
# name: "ESP32 Hall Sensor"
|
|
# update_interval: 60s
|
|
# - platform: ble_rssi
|
|
# mac_address: FA:4E:84:FF:4D:16
|
|
# name: "MiBand Hendrik RSSI value"
|
|
|
|
# Example configuration entry
|
|
# esp32_ble_tracker:
|
|
|
|
#text_sensor:
|
|
# - platform: ble_scanner
|
|
# name: "BLE Devices Scanner"
|
|
|
|
#on_...:
|
|
# if:
|
|
# condition:
|
|
# api.connected:
|
|
# then:
|
|
# - logger.log: API is connected!
|
|
# - display.page.show: page2
|
|
|