From ed0648866a3cbcfdf3135c30e95e23f865d97cf5 Mon Sep 17 00:00:00 2001 From: Joshua King Date: Fri, 13 Feb 2026 10:41:08 -0500 Subject: [PATCH] Add web server configuration and enhance camera settings for ESP32-H2C --- Cameras/declan-a1-camera.yaml | 13 +-- Cameras/esp32-h2c-camera.yaml | 8 +- home-energy-monitor.yaml | 161 ++++++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+), 9 deletions(-) create mode 100644 home-energy-monitor.yaml diff --git a/Cameras/declan-a1-camera.yaml b/Cameras/declan-a1-camera.yaml index 89e3fe3..4b8c18e 100644 --- a/Cameras/declan-a1-camera.yaml +++ b/Cameras/declan-a1-camera.yaml @@ -31,6 +31,9 @@ wifi: ssid: "${friendly_name} Fallback" password: !secret fallback_password +web_server: + port: 80 + captive_portal: i2c: @@ -63,15 +66,15 @@ esp32_camera: name: ${device_name} brightness: 1 #contrast: 0 - agc_gain_ceiling: 2X - agc_mode: MANUAL - agc_value: 5 + # agc_gain_ceiling: 2X + # agc_mode: MANUAL + # agc_value: 5 # ... esp32_camera_web_server: - - port: 80 - mode: STREAM - port: 8080 + mode: STREAM + - port: 8081 mode: SNAPSHOT switch: diff --git a/Cameras/esp32-h2c-camera.yaml b/Cameras/esp32-h2c-camera.yaml index 8e4ce14..d48de06 100644 --- a/Cameras/esp32-h2c-camera.yaml +++ b/Cameras/esp32-h2c-camera.yaml @@ -55,10 +55,10 @@ esp32_camera: pixel_clock_pin: GPIO15 # Start conservative for reliability; increase later if stable. - resolution: 640x480 - jpeg_quality: 12 - max_framerate: 10 fps - idle_framerate: 0.2 fps + resolution: 800x600 + jpeg_quality: 15 + max_framerate: 20 fps + idle_framerate: 0.05 fps frame_buffer_count: 1 # Common orientation defaults for this module. diff --git a/home-energy-monitor.yaml b/home-energy-monitor.yaml new file mode 100644 index 0000000..db19468 --- /dev/null +++ b/home-energy-monitor.yaml @@ -0,0 +1,161 @@ +substitutions: + friendly_name: "Home Energy Monitor" + device_name: home-energy-monitor + update_time: 10s + # SCT-013-000 (100A/50mA) calibration value + current_cal: '27518' + # Jameco 9VAC Transformer (board v1.3+) + voltage_cal: '7305' + +esphome: + name: ${device_name} + friendly_name: ${friendly_name} + +esp32: + board: nodemcu-32s + +# Enable logging +logger: + +# Enable Home Assistant API +api: + encryption: + key: !secret api_encryption_key + +# Enable OTA updates +ota: + - platform: esphome + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + # Optional: static IP for reliability + # manual_ip: + # static_ip: 192.168.1.50 + # gateway: 192.168.1.1 + # subnet: 255.255.255.0 + + # Fallback hotspot if Wi-Fi fails + ap: + ssid: ${device_name} + password: !secret wifi_password + +captive_portal: + +web_server: + port: 80 + +# SPI bus configuration +spi: + clk_pin: 18 + miso_pin: 19 + mosi_pin: 23 + +sensor: + # Wi-Fi signal strength + - platform: wifi_signal + name: ${device_name} WiFi Signal + update_interval: 60s + + # ────────────────────────────────── + # IC1: Channels 1-3 (CS pin 5) + # ────────────────────────────────── + - platform: atm90e32 + cs_pin: 5 + phase_a: + voltage: + name: ${device_name} Volts + id: ic1Volts + accuracy_decimals: 1 + current: + name: ${device_name} CT1 Amps + id: ct1Amps + power: + name: ${device_name} CT1 Watts + id: ct1Watts + gain_voltage: ${voltage_cal} + gain_ct: ${current_cal} + phase_b: + current: + name: ${device_name} CT2 Amps + id: ct2Amps + power: + name: ${device_name} CT2 Watts + id: ct2Watts + gain_voltage: ${voltage_cal} + gain_ct: ${current_cal} + phase_c: + current: + name: ${device_name} CT3 Amps + id: ct3Amps + power: + name: ${device_name} CT3 Watts + id: ct3Watts + gain_voltage: ${voltage_cal} + gain_ct: ${current_cal} + frequency: + name: ${device_name} Frequency + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} + + # ────────────────────────────────── + # IC2: Channels 4-6 (CS pin 4) + # ────────────────────────────────── + - platform: atm90e32 + cs_pin: 4 + phase_a: + current: + name: ${device_name} CT4 Amps + id: ct4Amps + power: + name: ${device_name} CT4 Watts + id: ct4Watts + gain_voltage: ${voltage_cal} + gain_ct: ${current_cal} + phase_b: + current: + name: ${device_name} CT5 Amps + id: ct5Amps + power: + name: ${device_name} CT5 Watts + id: ct5Watts + gain_voltage: ${voltage_cal} + gain_ct: ${current_cal} + phase_c: + current: + name: ${device_name} CT6 Amps + id: ct6Amps + power: + name: ${device_name} CT6 Watts + id: ct6Watts + gain_voltage: ${voltage_cal} + gain_ct: ${current_cal} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} + + # ────────────────────────────────── + # Calculated: Total Home Power + # (CT1 = Main Leg 1, CT2 = Main Leg 2) + # ────────────────────────────────── + - platform: template + name: ${device_name} Total Watts + id: totalWatts + lambda: "return id(ct1Watts).state + id(ct2Watts).state;" + accuracy_decimals: 1 + unit_of_measurement: W + device_class: power + update_interval: ${update_time} + + - platform: total_daily_energy + name: ${device_name} Total Daily Energy + power_id: totalWatts + unit_of_measurement: kWh + accuracy_decimals: 2 + filters: + - multiply: 0.001 + +time: + - platform: homeassistant + id: homeassistant_time