# 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: #esphome_core_version: # local: "C:\\Users\\mcros\\src\\esphome\\esphome-core" name: !secret node_name platform: ESP32 board: featheresp32 platformio_options: upload_speed: 115200 includes: - sht1x.h - max1704xsensor.h libraries: - SPI - Wire - "346" # - "13" - "86" - "5812" # 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 baud_rate: 0 # Disable UART logging # 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 3-color (red) 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 # update_interval: 30s # lambda: |- # // Setup / Clear # it.powerOn(); # 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)); # } # if (id(Battery_Level).state > 50) { # it.image(0, 0, id(battery_50)); # } # if (id(Battery_Level).state > 25) { # it.image(0, 0, id(inverted_battery_25)); # } # else { # it.image(0, 0, id(inverted_battery_0)); # } # if (id(Battery_Alert).state != 0) { # it.image(37,0, id(alert_filled)); # } # else { # it.printf(37, 0, id(deja_vu_mono_bold_8), "%.1f%%", id(Battery_Level).state); # } # // WiFi # it.image(148, 0, id(wifi_icon)); # it.printf(185, 0, id(deja_vu_mono_bold_8), "%.1fdB", id(sensor_wifi_signal).state); # // Temperature # it.image(37, 0, id(thermometer)); # it.printf(37,37, id(deja_vu_mono_bold_8), "%.1f°F", id(Temperature_F).state); # // Humidity # it.image(148,37, id(humidity)); # it.printf(185,37, id(deja_vu_mono_bold_8), "%.1f%%", id(Humidity).state); # // Plants # it.image(0, 96, id(cat_grass)); # it.image(37, 96, id(tarragon)); # it.image(74, 96, id(cat_nip)); # it.image(111, 96, id(christmas_cactus)); # it.image(148, 96, id(inverted_cat_grass)); # it.image(185, 96, id(inverted_tarragon)); # it.image(222, 96, id(inverted_catnip)); # it.image(259, 96, id(inverted_christmas_cactus)); # // Sleep to conserve power # //it.powerOff(); #font: # - file: "DejaVuSansMono-Bold.ttf" # id: deja_vu_mono_bold_8 # size: 8 #image: # - file: noun_Alert_2145614.png # empty # id: alert_empty # resize: 32x32 # - file: noun_Alert_2490416.png # filled # id: alert_filled # resize: 32x32 # - file: noun_battery indicator_1601217.png # battery 75% # id: battery_75 # resize: 32x32 # - file: noun_battery level_1601219.png # battery 50% # id: battery_50 # resize: 32x32 # - file: noun_Cactus_1197535.png # christmas cactus # id: christmas_cactus # resize: 32x32 # - file: noun_empty battery_1601215.png # battery 25% # id: battery_25 # resize: 32x32 # - file: noun_empty battery_1601218.png # battery 0% # id: battery_0 # resize: 32x32 # - file: noun_Full Battery_1601214.png # battery 100% # id: battery_100 # resize: 32x32 # - file: noun_grass_355100.png # cat grass # id: cat_grass # resize: 32x32 # - file: noun_humidity_1762738.png # temp + humidity # id: temp_humidity # resize: 32x32 # - file: noun_humidity_2280622.png # humidity # id: humidity # resize: 32x32 # - file: noun_leaf_1153077.png # catnip # id: cat_nip # resize: 32x32 # - file: noun_Tarragon_499800.png # tarragon # id: tarragon # resize: 32x32 # - file: noun_Thermometer_217722.png # thermometer # id: thermometer # resize: 32x32 # - file: noun_wifi_2201334.png # wifi # id: wifi_icon # resize: 32x32 # - file: inverted_noun_Tarragon_499800.png # inverted tarragon # id: inverted_tarragon # resize: 32x32 # - file: inverted_noun_leaf_1153077.png # inverted catnip # id: inverted_catnip # resize: 32x32 # - file: inverted_noun_grass_355100.png # inverted cat grass # id: inverted_cat_grass # resize: 32x32 # - file: inverted_noun_empty battery_1601218.png # inverted battery_0 # id: inverted_battery_0 # resize: 32x32 # - file: inverted_noun_empty battery_1601215.png # inverted battery_25 # id: inverted_battery_25 # resize: 32x32 # - file: inverted_noun_Cactus_1197535.png # inverted christmas cactus # id: inverted_christmas_cactus # resize: 32x32 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: uptime name: Uptime update_interval: 3min - 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