2019-05-16 14:55:08 +00:00
|
|
|
# Further reference
|
|
|
|
# https://platformio.org/lib
|
|
|
|
# SHT1x - 86 - https://platformio.org/lib/show/86/SHT1x
|
|
|
|
# MAX1704X - 5812 - https://platformio.org/lib/show/5812/MAX1704X/
|
|
|
|
# GxEPD2 - 5869 - https://platformio.org/lib/show/5869/GxEPD2
|
|
|
|
# AsyncMqttClient - 346 - https://platformio.org/lib/show/346/AsyncMqttClient/
|
|
|
|
# Adafruit GFX Library - 13 - https://platformio.org/lib/show/13/Adafruit GFX Library/
|
|
|
|
|
|
|
|
# Node Config
|
|
|
|
esphome:
|
|
|
|
name: !secret node_name
|
|
|
|
platform: ESP32
|
|
|
|
board: featheresp32
|
|
|
|
platformio_options:
|
|
|
|
upload_speed: 115200
|
|
|
|
includes:
|
|
|
|
- sht1x.h
|
|
|
|
- max1704xsensor.h
|
|
|
|
libraries:
|
|
|
|
- SPI
|
|
|
|
- Wire
|
|
|
|
- "346"
|
|
|
|
- "86"
|
|
|
|
- "5812"
|
2019-05-18 02:26:05 +00:00
|
|
|
on_boot:
|
|
|
|
priority: 90.0 # 100 is highest where early init happens, 50.0 is where sensors come up
|
|
|
|
then:
|
|
|
|
- lambda: |-
|
|
|
|
pinMode(13, OUTPUT);
|
|
|
|
digitalWrite(13, HIGH);
|
|
|
|
delay(10);
|
|
|
|
on_shutdown:
|
|
|
|
then:
|
|
|
|
- lambda: |-
|
|
|
|
digitalWrite(13, LOW);
|
2019-05-16 14:55:08 +00:00
|
|
|
|
|
|
|
# WiFi config
|
|
|
|
wifi:
|
|
|
|
ssid: !secret wifi_ssid
|
|
|
|
password: !secret wifi_password
|
|
|
|
domain: !secret node_domain
|
|
|
|
|
|
|
|
# Enable I2C (Qwiic and others)
|
|
|
|
i2c:
|
|
|
|
|
|
|
|
# Enable SPI
|
|
|
|
# CLK: D5
|
|
|
|
# MOSI: D18
|
|
|
|
spi:
|
|
|
|
clk_pin: 5
|
|
|
|
mosi_pin: 18
|
|
|
|
|
|
|
|
deep_sleep:
|
|
|
|
run_duration: 6min
|
|
|
|
sleep_duration: 54min
|
|
|
|
wakeup_pin_mode: INVERT_WAKEUP # stop caring and be judicious about tolerance of goofy pin modes
|
|
|
|
|
|
|
|
# Enable logging
|
|
|
|
logger:
|
|
|
|
level: DEBUG # Flip to ERROR for production deployments
|
2019-05-18 02:26:05 +00:00
|
|
|
#baud_rate: 0 # Disable UART logging
|
2019-05-16 14:55:08 +00:00
|
|
|
|
|
|
|
# Enable Home Assistant API
|
|
|
|
#api:
|
|
|
|
# password: !secret api_password
|
|
|
|
|
|
|
|
# OTA Config
|
|
|
|
ota:
|
|
|
|
password: !secret ota_password
|
|
|
|
safe_mode: true
|
|
|
|
|
|
|
|
# Web Server (DISABLE outside of testing)
|
|
|
|
#web_server:
|
|
|
|
# port: 80
|
|
|
|
|
|
|
|
# MQTT CLIENT
|
|
|
|
mqtt:
|
|
|
|
broker: !secret mqtt_client_broker
|
|
|
|
port: 8883
|
|
|
|
username: !secret mqtt_client_username
|
|
|
|
password: !secret mqtt_client_password
|
|
|
|
birth_message:
|
|
|
|
topic: 'hass/status'
|
|
|
|
payload: 'online'
|
|
|
|
will_message:
|
|
|
|
topic: 'hass/status'
|
|
|
|
payload: 'offline'
|
|
|
|
|
|
|
|
# 2.9" Waveshare e-ink setup
|
|
|
|
# BUSY -> 21, RST -> 14, DC -> 15, CS -> 27, CLK -> SCK(5), DIN -> MOSI(18), GND -> GND, 3.3V -> 3.3V
|
|
|
|
display:
|
|
|
|
- platform: waveshare_epaper
|
|
|
|
cs_pin: 27
|
|
|
|
dc_pin: 15
|
|
|
|
busy_pin: 21
|
|
|
|
reset_pin: 14
|
|
|
|
model: 2.90in
|
|
|
|
rotation: 90
|
2019-05-18 02:26:05 +00:00
|
|
|
update_interval: 2min
|
2019-05-16 14:55:08 +00:00
|
|
|
lambda: |-
|
2019-05-18 02:26:05 +00:00
|
|
|
delay(60*1000);
|
|
|
|
// Clear
|
2019-05-16 14:55:08 +00:00
|
|
|
it.clear();
|
|
|
|
// Battery
|
|
|
|
if (id(Battery_Level).state > 90) {
|
|
|
|
it.image(0, 0, id(battery_100));
|
|
|
|
}
|
|
|
|
else if (id(Battery_Level).state > 75) {
|
|
|
|
it.image(0, 0, id(battery_75));
|
|
|
|
}
|
2019-05-18 02:26:05 +00:00
|
|
|
else if (id(Battery_Level).state > 50) {
|
2019-05-16 14:55:08 +00:00
|
|
|
it.image(0, 0, id(battery_50));
|
|
|
|
}
|
2019-05-18 02:26:05 +00:00
|
|
|
else if (id(Battery_Level).state > 25) {
|
2019-05-16 14:55:08 +00:00
|
|
|
it.image(0, 0, id(inverted_battery_25));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
it.image(0, 0, id(inverted_battery_0));
|
|
|
|
}
|
|
|
|
if (id(Battery_Alert).state != 0) {
|
2019-05-18 02:26:05 +00:00
|
|
|
it.image(37, 0, id(alert_filled));
|
2019-05-16 14:55:08 +00:00
|
|
|
}
|
|
|
|
else {
|
2019-05-18 02:26:05 +00:00
|
|
|
it.printf(37, 16, id(deja_vu_mono), "%.1f%%", id(Battery_Level).state);
|
2019-05-16 14:55:08 +00:00
|
|
|
}
|
|
|
|
// WiFi
|
|
|
|
it.image(148, 0, id(wifi_icon));
|
2019-05-18 02:26:05 +00:00
|
|
|
it.printf(185, 16, id(deja_vu_mono), "%.1fdB", id(sensor_wifi_signal).state);
|
2019-05-16 14:55:08 +00:00
|
|
|
// Temperature
|
2019-05-18 02:26:05 +00:00
|
|
|
it.image(0, 37, id(thermometer));
|
|
|
|
it.printf(37, 54, id(deja_vu_mono), "%.1f°F", id(Temperature_F).state);
|
2019-05-16 14:55:08 +00:00
|
|
|
// Humidity
|
2019-05-18 02:26:05 +00:00
|
|
|
it.image(148, 37, id(humidity));
|
|
|
|
it.printf(185, 54, id(deja_vu_mono), "%.1f%%", id(Humidity).state);
|
2019-05-16 14:55:08 +00:00
|
|
|
// Plants
|
2019-05-18 03:01:30 +00:00
|
|
|
it.image(0, 96, id(cat_nip));
|
|
|
|
it.image(37, 96, id(christmas_cactus));
|
|
|
|
it.image(74, 96, id(cat_grass));
|
|
|
|
it.image(111, 96, id(tarragon));
|
|
|
|
it.image(148, 96, id(tulip));
|
|
|
|
it.image(185, 96, id(poinsettia));
|
2019-05-16 14:55:08 +00:00
|
|
|
|
|
|
|
font:
|
2019-05-18 02:26:05 +00:00
|
|
|
- file: "fonts/DejaVuSansMono.ttf"
|
|
|
|
id: deja_vu_mono
|
|
|
|
size: 18
|
2019-05-16 14:55:08 +00:00
|
|
|
|
|
|
|
image:
|
|
|
|
- file: graphics/noun_Alert_2145614.png # empty
|
|
|
|
id: alert_empty
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_Alert_2490416.png # filled
|
|
|
|
id: alert_filled
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_battery indicator_1601217.png # battery 75%
|
|
|
|
id: battery_75
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_battery level_1601219.png # battery 50%
|
|
|
|
id: battery_50
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_Cactus_1197535.png # christmas cactus
|
|
|
|
id: christmas_cactus
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_empty battery_1601215.png # battery 25%
|
|
|
|
id: battery_25
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_empty battery_1601218.png # battery 0%
|
|
|
|
id: battery_0
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_Full Battery_1601214.png # battery 100%
|
|
|
|
id: battery_100
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_grass_355100.png # cat grass
|
|
|
|
id: cat_grass
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_humidity_1762738.png # temp + humidity
|
|
|
|
id: temp_humidity
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_humidity_2280622.png # humidity
|
|
|
|
id: humidity
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_leaf_1153077.png # catnip
|
|
|
|
id: cat_nip
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_Tarragon_499800.png # tarragon
|
|
|
|
id: tarragon
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_Thermometer_217722.png # thermometer
|
|
|
|
id: thermometer
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_wifi_2201334.png # wifi
|
|
|
|
id: wifi_icon
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_Tarragon_499800.png # inverted tarragon
|
|
|
|
id: inverted_tarragon
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_leaf_1153077.png # inverted catnip
|
|
|
|
id: inverted_catnip
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_grass_355100.png # inverted cat grass
|
|
|
|
id: inverted_cat_grass
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_empty battery_1601218.png # inverted battery_0
|
|
|
|
id: inverted_battery_0
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_empty battery_1601215.png # inverted battery_25
|
|
|
|
id: inverted_battery_25
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_Cactus_1197535.png # inverted christmas cactus
|
|
|
|
id: inverted_christmas_cactus
|
|
|
|
resize: 32x32
|
2019-05-18 03:01:30 +00:00
|
|
|
- file: graphics/noun_Tulip_2510353.png # tulip
|
|
|
|
id: tulip
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_Tulip_2510353.png # inverted tulip
|
|
|
|
id: inverted_tulip
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/noun_poinsettia_1007994.png # poinsettia
|
|
|
|
id: poinsettia
|
|
|
|
resize: 32x32
|
|
|
|
- file: graphics/inverted_noun_poinsettia_1007994.png # inverted poinsettia
|
|
|
|
id: inverted_poinsettia
|
|
|
|
resize: 32x32
|
2019-05-16 14:55:08 +00:00
|
|
|
|
|
|
|
binary_sensor:
|
|
|
|
- platform: status
|
|
|
|
name: "Status"
|
|
|
|
|
|
|
|
sensor:
|
|
|
|
- platform: wifi_signal
|
|
|
|
id: sensor_wifi_signal
|
|
|
|
name: "WiFi_Signal"
|
|
|
|
update_interval: 3min
|
|
|
|
unit_of_measurement: "dB"
|
|
|
|
accuracy_decimals: 1
|
|
|
|
- platform: custom
|
|
|
|
lambda: |-
|
|
|
|
auto sht1x = new SHT1xSensor();
|
|
|
|
App.register_component(sht1x);
|
|
|
|
return {sht1x->temp_c_sensor, sht1x->temp_f_sensor, sht1x->humidity_sensor};
|
|
|
|
sensors:
|
|
|
|
- name: "Temperature_C"
|
|
|
|
id: Temperature_C
|
|
|
|
unit_of_measurement: "°C"
|
|
|
|
accuracy_decimals: 1
|
|
|
|
- name: "Temperature_F"
|
|
|
|
id: Temperature_F
|
|
|
|
unit_of_measurement: "°F"
|
|
|
|
accuracy_decimals: 1
|
|
|
|
- name: "Humidity"
|
|
|
|
id: Humidity
|
|
|
|
unit_of_measurement: "%"
|
|
|
|
accuracy_decimals: 1
|
|
|
|
- platform: custom
|
|
|
|
lambda: |-
|
|
|
|
auto max1704x = new MAX1704xSensor();
|
|
|
|
App.register_component(max1704x);
|
|
|
|
return {max1704x->voltageSensor, max1704x->percentSensor, max1704x->isSleepingSensor, max1704x->alertIsActiveSensor, max1704x->getThresholdSensor};
|
|
|
|
sensors:
|
|
|
|
- name: "Battery_Voltage"
|
|
|
|
id: Battery_Voltage
|
|
|
|
unit_of_measurement: "V"
|
|
|
|
accuracy_decimals: 2
|
|
|
|
- name: "Battery_Level"
|
|
|
|
id: Battery_Level
|
|
|
|
unit_of_measurement: "%"
|
|
|
|
accuracy_decimals: 1
|
|
|
|
- name: "Battery_Sleeping"
|
|
|
|
id: Battery_Sleeping
|
|
|
|
- name: "Battery_Alert"
|
|
|
|
id: Battery_Alert
|
|
|
|
- name: "Battery_Threshold"
|
|
|
|
id: Battery_Threshold
|
|
|
|
accuracy_decimals: 0
|