Files
esp32-energy-meter/docs/configuration-guide.md
T
2025-12-19 22:59:04 +01:00

476 lines
10 KiB
Markdown

# Configuration Guide
This guide walks you through configuring ESPHome for your ESP32 Energy Meter, from initial setup to advanced customization.
## 🚀 Quick Start
### Prerequisites
- ESP32 development board with energy meter hardware connected
- Computer with ESPHome installed
- WiFi network credentials
- Home Assistant instance (optional but recommended)
### Installation Steps
1. [Install ESPHome](#installing-esphome)
2. [Configure Secrets](#configuring-secrets)
3. [Upload Configuration](#uploading-configuration)
4. [Integrate with Home Assistant](#home-assistant-integration)
## 🔧 Installing ESPHome
### Method 1: pip (Recommended)
```bash
pip install esphome
```
### Method 2: Docker
```bash
docker run -it --rm \
-v "$PWD":/config \
esphome/esphome run esp32-energy-meter.yaml
```
### Method 3: Home Assistant Add-on
1. Open Home Assistant
2. Go to Supervisor → Add-ons
3. Search for "ESPHome"
4. Click "Install"
## 🔐 Configuring Secrets
Create a `secrets.yaml` file in your project directory:
```yaml
# WiFi Configuration
wifi_ssid: "YOUR_WIFI_NETWORK_NAME"
wifi_password: "YOUR_WIFI_PASSWORD"
# API Encryption Key (optional - will be auto-generated)
api_key: "GENERATED_API_KEY"
# OTA Password
ota_password: "YOUR_OTA_PASSWORD"
# MQTT Configuration (if using MQTT)
mqtt_broker_ip: "192.168.1.100"
mqtt_broker_port: 1883
mqtt_username: "your_mqtt_username"
mqtt_password: "your_mqtt_password"
```
### Security Best Practices
- Use strong passwords (at least 12 characters)
- Enable API encryption
- Use WPA2/WPA3 WiFi encryption
- Change default passwords immediately
## ⚙️ Basic Configuration
### File Structure
```
project/
├── esp32-energy-meter.yaml
├── secrets.yaml
└── .esphome/
```
### Core Configuration Sections
#### 1. Basic Device Settings
```yaml
esphome:
name: esp32-energy-meter
friendly_name: ESP32 Energy Meter
esp32:
board: esp32dev
framework:
type: esp-idf
```
#### 2. Network Configuration
```yaml
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.1.100 # Choose available IP
gateway: 192.168.1.1 # Your router IP
subnet: 255.255.255.0
ap:
ssid: "ESP32-Energy-Meter Fallback Hotspot"
password: "CHANGE_THIS_PASSWORD"
```
#### 3. API and OTA
```yaml
api:
encryption:
key: !secret api_key
ota:
- platform: esphome
password: !secret ota_password
```
## 📡 Hardware Configuration
### Modbus RTU Setup
```yaml
uart:
id: mod_bus
tx_pin: 17
rx_pin: 16
baud_rate: 4800
stop_bits: 1
modbus:
id: modbus1
modbus_controller:
- id: jsymk
address: 0x1 # JSY meter address
modbus_id: modbus1
update_interval: 3s # Measurement update interval
command_throttle: 50ms # Min time between commands
```
### I2C Display Setup
```yaml
i2c:
sda: 21
scl: 22
font:
- file:
type: gfonts
family: Baloo+Bhaijaan+2
weight: 500
id: baloo_18_500
size: 18
```
## 📱 Display Configuration
### OLED Display Lambda
```yaml
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
id: oled
rotation: 180°
update_interval: 3s
lambda: !lambda |-
// Burn-in protection
time_t now = id(homeassistant_time).now().timestamp;
if (now % 1800 == 0) {
it.clear();
return;
}
// Clear and draw content
it.clear();
it.print(-1, -4, id(baloo_18_500), "Energy Meter");
// WiFi status
if(id(connection_status).state == 1) {
it.print(it.get_width(), 0, id(icons_18), TextAlign::TOP_RIGHT, "\ue63e");
} else {
it.print(it.get_width(), 0, id(icons_18), TextAlign::TOP_RIGHT, "\ue648");
}
// Power display
it.printf(it.get_width()/2, 38, id(baloo_32_700), TextAlign::CENTER, "%.1f W", id(power2).state);
it.printf(0, it.get_height() + 12, id(baloo_18_700), TextAlign::BOTTOM_LEFT, "%.1f V", id(voltage2).state);
it.printf(it.get_width(), it.get_height() + 12, id(baloo_18_700), TextAlign::BOTTOM_RIGHT, "%.1f A", id(current2).state);
```
## 📊 Sensor Configuration
### WiFi Signal Strength Monitoring
```yaml
binary_sensor:
- platform: template
name: "WiFi Connection Status"
id: connection_status
lambda: !lambda
return id(wifi_signal_strength).state > -70;
sensor:
- platform: wifi_signal
name: "WiFi Signal Strength"
id: wifi_signal_strength
update_interval: 10s
unit_of_measurement: "dBm"
```
### Energy Meter Sensors
```yaml
sensor:
# Power measurement (Channel 2 - primary)
- platform: modbus_controller
modbus_controller_id: jsymk
id: power2
name: "Power 2"
icon: mdi:lightning-bolt
device_class: energy
address: 0x0052
unit_of_measurement: "W"
register_type: holding
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.0001
register_count: 1
response_size: 4
# Voltage measurement
- platform: modbus_controller
modbus_controller_id: jsymk
id: voltage2
name: "Voltage 2"
icon: mdi:alpha-v-box
device_class: energy
address: 0x0050
unit_of_measurement: "V"
register_type: holding
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.0001
register_count: 1
response_size: 4
# Current measurement
- platform: modbus_controller
modbus_controller_id: jsymk
id: current2
name: "Current 2"
icon: mdi:current-ac
device_class: energy
address: 0x0051
unit_of_measurement: "A"
register_type: holding
value_type: U_DWORD
accuracy_decimals: 4 # Increased for low current readings
filters:
- multiply: 0.0001
register_count: 1
response_size: 4
```
## 🚀 Uploading Configuration
### First Upload
```bash
# Connect ESP32 via USB and upload
esphome run esp32-energy-meter.yaml
```
### Subsequent Updates
```bash
# Compile and upload (no USB connection required)
esphome run esp32-energy-meter.yaml --upload-port 192.168.1.100
```
### Advanced Options
```bash
# Enable verbose logging
esphome run esp32-energy-meter.yaml --log-level=debug
# Clean build
esphome run esp32-energy-meter.yaml --clean
# Upload via OTA (if IP is known)
esphome run esp32-energy-meter.yaml --upload-port 192.168.1.100
```
## 🏠 Home Assistant Integration
### Auto-Discovery
Once uploaded, the ESP32 will automatically appear in Home Assistant under "Devices & Services".
### Manual Integration
1. Go to Configuration → Devices & Services
2. Click "Add Integration"
3. Search for "ESPHome"
4. Enter the IP address: `192.168.1.100`
5. Enter API key when prompted
### Entity Naming
ESPHome will create entities like:
- `sensor.esp32_energy_meter_power_2`
- `sensor.esp32_energy_meter_voltage_2`
- `sensor.esp32_energy_meter_current_2`
- `binary_sensor.esp32_energy_meter_wifi_connection_status`
## 🔧 Advanced Configuration
### Custom Update Intervals
```yaml
modbus_controller:
- id: jsymk
address: 0x1
modbus_id: modbus1
update_interval: 2s # Faster updates
command_throttle: 25ms # Reduced throttle
```
### Display Customization
```yaml
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
id: oled
rotation: 0° # Normal orientation
update_interval: 1s # Faster display updates
lambda: !lambda |-
// Custom display logic here
it.clear();
it.printf(0, 0, id(baloo_18_500), "Custom Label");
```
### Sensor Filtering
```yaml
sensor:
- platform: modbus_controller
# ... other config ...
filters:
- multiply: 0.0001 # Scale factor
- offset: -5.0 # Calibration offset
- exponential_moving_average:
alpha: 0.2 # Smooth readings
- heartbeat: 10s # Periodic updates
```
## 📊 Performance Optimization
### Memory Management
```yaml
esp32:
board: esp32dev
framework:
type: esp-idf
psram:
mode: octal # Enable PSRAM if available
```
### WiFi Optimization
```yaml
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
fast_connect: true # Skip scanning
output_power: 10.5 # Adjust power level
```
### Update Optimization
```yaml
modbus_controller:
- id: jsymk
address: 0x1
modbus_id: modbus1
update_interval: 5s # Balance responsiveness vs. stability
command_throttle: 100ms # Prevent bus overload
```
## 🐛 Troubleshooting
### Common Issues
#### Compilation Errors
- **Check YAML syntax**: Use online YAML validators
- **Verify sensor IDs**: Ensure all referenced IDs exist
- **Update ESPHome**: `pip install --upgrade esphome`
#### Connection Issues
- **Check IP conflicts**: Use static IP to avoid DHCP issues
- **Verify WiFi credentials**: Ensure correct SSID and password
- **Check firewall**: Ensure device can connect to local network
#### Sensor Reading Issues
- **Check Modbus address**: Default is usually 0x1
- **Verify wiring**: Check RS485 A+ and B- connections
- **Check update intervals**: Don't set too aggressive
### Debug Commands
```bash
# Check device status
esphome config esp32-energy-meter.yaml
# Test connection
esphome logs esp32-energy-meter.yaml --device 192.168.1.100
# Check logs
esphome logs esp32-energy-meter.yaml --serial /dev/ttyUSB0
```
## 📝 Configuration Templates
### Minimal Configuration
```yaml
esphome:
name: minimal-energy-meter
friendly_name: Minimal Energy Meter
esp32:
board: esp32dev
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
api:
encryption:
key: !secret api_key
ota:
- platform: esphome
password: !secret ota_password
uart:
id: mod_bus
tx_pin: 17
rx_pin: 16
baud_rate: 4800
modbus:
id: modbus1
modbus_controller:
- id: jsymk
address: 0x1
modbus_id: modbus1
sensor:
- platform: modbus_controller
modbus_controller_id: jsymk
id: power
name: "Power"
address: 0x0052
unit_of_measurement: "W"
register_type: holding
value_type: U_DWORD
filters:
- multiply: 0.0001
```
### Production Configuration
```yaml
# Full featured configuration with all sensors, display, and monitoring
# (see esp32-energy-meter.yaml for complete example)
```
## 🔗 Next Steps
After basic configuration:
1. [Hardware Setup](hardware-setup.md) - If not already completed
2. [Home Assistant Integration](wiki/Home-Assistant-Integration.md)
3. [Advanced Features](wiki/Advanced-Features.md)
4. [Troubleshooting](troubleshooting.md)
For specific hardware issues, refer to the [Hardware Setup Guide](hardware-setup.md).