Wetterstation v2
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

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