Files
esp32-energy-meter/docs/api-reference.md
T
2025-12-19 22:58:31 +01:00

487 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API Reference
Complete reference for all sensors, entities, and services in the ESP32 Energy Meter project.
## 📊 Sensor Entities
### Power Measurements
#### `sensor.esp32_energy_meter_power_1`
**Description**: Power consumption on Channel 1
**Unit**: Watts (W)
**Device Class**: power
**Update Interval**: 3 seconds
```yaml
- platform: modbus_controller
modbus_controller_id: jsymk
id: power1
name: "Power 1"
icon: mdi:lightning-bolt
device_class: energy
address: 0x004A
unit_of_measurement: "W"
register_type: holding
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.0001
register_count: 1
response_size: 4
```
#### `sensor.esp32_energy_meter_power_2`
**Description**: Power consumption on Channel 2 (Primary)
**Unit**: Watts (W)
**Device Class**: power
**Update Interval**: 3 seconds
**Notes**: This is the primary power sensor used for display and monitoring
#### `sensor.esp32_energy_meter_power_factor_1`
**Description**: Power factor for Channel 1
**Unit**: None (dimensionless)
**Range**: 0.0 to 1.0
**Update Interval**: 3 seconds
#### `sensor.esp32_energy_meter_power_factor_2`
**Description**: Power factor for Channel 2
**Unit**: None (dimensionless)
**Range**: 0.0 to 1.0
**Update Interval**: 3 seconds
### Voltage Measurements
#### `sensor.esp32_energy_meter_voltage_1`
**Description**: Line voltage measurement for Channel 1
**Unit**: Volts (V)
**Device Class**: voltage
**Typical Range**: 220-240V AC
**Update Interval**: 3 seconds
```yaml
- platform: modbus_controller
modbus_controller_id: jsymk
id: voltage1
name: "Voltage"
icon: mdi:alpha-v-box
device_class: energy
address: 0x0048
unit_of_measurement: "V"
register_type: holding
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.0001
register_count: 1
response_size: 4
```
#### `sensor.esp32_energy_meter_voltage_2`
**Description**: Line voltage measurement for Channel 2
**Unit**: Volts (V)
**Device Class**: voltage
**Typical Range**: 220-240V AC
**Update Interval**: 3 seconds
### Current Measurements
#### `sensor.esp32_energy_meter_current_1`
**Description**: Current flow measurement for Channel 1
**Unit**: Amperes (A)
**Device Class**: current
**Accuracy Decimals**: 1
**Update Interval**: 3 seconds
#### `sensor.esp32_energy_meter_current_2`
**Description**: Current flow measurement for Channel 2
**Unit**: Amperes (A)
**Device Class**: current
**Accuracy Decimals**: 4 (for low current readings)
**Update Interval**: 3 seconds
### Energy Measurements
#### `sensor.esp32_energy_meter_energy_1`
**Description**: Cumulative energy consumption for Channel 1
**Unit**: Kilowatt-hours (kWh)
**Device Class**: energy
**State Class**: total
**Update Interval**: 3 seconds
#### `sensor.esp32_energy_meter_energy_2`
**Description**: Cumulative energy consumption for Channel 2
**Unit**: Kilowatt-hours (kWh)
**Device Class**: energy
**State Class**: total
**Update Interval**: 3 seconds
### System Measurements
#### `sensor.esp32_energy_meter_frequency`
**Description**: AC line frequency
**Unit**: Hertz (Hz)
**Typical Range**: 49-51 Hz
**Update Interval**: 3 seconds
#### `sensor.esp32_energy_meter_wifi_signal_strength`
**Description**: WiFi signal strength in dBm
**Unit**: dBm (decibels relative to milliwatt)
**Range**: -100 to -30 dBm
**Update Interval**: 10 seconds
**Notes**: Values closer to -30 dBm indicate stronger signal
```yaml
- platform: wifi_signal
name: "WiFi Signal Strength"
id: wifi_signal_strength
update_interval: 10s
unit_of_measurement: "dBm"
```
### Advanced System Entities
#### `sensor.esp32_energy_meter_uptime`
**Description**: System uptime since last boot
**Unit**: Seconds
**Update Interval**: 30 seconds
#### `sensor.esp32_energy_meter_free_heap`
**Description**: Available heap memory
**Unit**: Bytes
**Update Interval**: 60 seconds
**Notes**: Monitor for memory leaks
## 📱 Binary Sensors
### Connection Status
#### `binary_sensor.esp32_energy_meter_wifi_connection_status`
**Description**: WiFi connectivity status
**States**:
- `on` (Connected) - Signal strength > -70 dBm
- `off` (Disconnected) - Signal strength ≤ -70 dBm
```yaml
- platform: template
name: "WiFi Connection Status"
id: connection_status
lambda: !lambda
return id(wifi_signal_strength).state > -70;
```
## 🎛️ Services
### Display Control Services
#### `esphome.display.update`
**Description**: Manually trigger display update
**Parameters**: None
**Usage**:
```yaml
# Trigger manual display update
on_...:
- display.update: oled
```
#### `esphome.display.clear`
**Description**: Clear the OLED display
**Parameters**: None
**Usage**:
```yaml
# Clear display
on_...:
- display.clear: oled
```
### Modbus Communication Services
#### `esphome.modbus_controller.send`
**Description**: Send custom Modbus command
**Parameters**:
- `address` (int): Modbus device address
- `command` (int): Command code
- `data` (list): Command data
### WiFi Services
#### `esphome.wifi.connect`
**Description**: Connect to WiFi network
**Parameters**: None
**Usage**:
```yaml
# Force WiFi reconnection
on_...:
- wifi.connect:
```
#### `esphome.wifi.disconnect`
**Description**: Disconnect from WiFi
**Parameters**: None
### System Services
#### `esphome.idle`
**Description**: Enter idle/low-power mode
**Parameters**: None
#### `esphome.restart`
**Description**: Restart ESP32
**Parameters**: None
#### `esphome.factory_reset`
**Description**: Factory reset to default settings
**Parameters**: None
## 🔧 Custom Entities
### Template Sensors
#### `sensor.esp32_energy_meter_power_quality_score`
**Description**: Calculated power quality score
**Unit**: Percentage (0-100%)
**Calculation**: Based on voltage, frequency, and power factor
**Update Interval**: 30 seconds
```yaml
- platform: template
name: "Power Quality Score"
id: power_quality_score
unit_of_measurement: "%"
lambda: !lambda
// Complex calculation based on multiple factors
return calculated_score;
```
#### `sensor.esp32_energy_meter_estimated_cost`
**Description**: Estimated energy cost
**Unit**: Currency per day
**Calculation**: Power consumption × electricity rate
**Update Interval**: 60 seconds
#### `sensor.esp32_energy_meter_daily_peak_power`
**Description**: Peak power consumption today
**Unit**: Watts (W)
**Reset**: Daily at midnight
**Update Interval**: 60 seconds
### Text Sensors
#### `text_sensor.esp32_energy_meter_wifi_quality`
**Description**: WiFi connection quality description
**States**:
- "Excellent" (-30 to -50 dBm)
- "Good" (-50 to -60 dBm)
- "Fair" (-60 to -70 dBm)
- "Poor" (-70 to -80 dBm)
- "Very Poor" (< -80 dBm)
#### `text_sensor.esp32_energy_meter_last_update`
**Description**: Timestamp of last successful sensor update
**Format**: "YYYY-MM-DD HH:MM:SS"
## 📋 Entity Categories
### Primary Sensors (Display)
These sensors are used for the OLED display:
- `sensor.esp32_energy_meter_power_2`
- `sensor.esp32_energy_meter_voltage_2`
- `sensor.esp32_energy_meter_current_2`
### System Monitoring
These sensors monitor system health:
- `sensor.esp32_energy_meter_wifi_signal_strength`
- `binary_sensor.esp32_energy_meter_wifi_connection_status`
- `sensor.esp32_energy_meter_uptime`
### Energy Analytics
These sensors provide enhanced data analysis:
- `sensor.esp32_energy_meter_energy_1`
- `sensor.esp32_energy_meter_energy_2`
- `sensor.esp32_energy_meter_power_factor_1`
- `sensor.esp32_energy_meter_power_factor_2`
### Historical Data
These sensors track historical trends:
- `sensor.esp32_energy_meter_daily_peak_power`
- `sensor.esp32_energy_meter_frequency`
## 🔌 Configuration Parameters
### Update Intervals
| Entity Type | Default Interval | Configurable |
|-------------|------------------|--------------|
| Power Sensors | 3 seconds | Yes |
| Voltage Sensors | 3 seconds | Yes |
| Current Sensors | 3 seconds | Yes |
| Energy Sensors | 3 seconds | Yes |
| Frequency | 3 seconds | Yes |
| WiFi Signal | 10 seconds | Yes |
| System Status | 30 seconds | Yes |
### Accuracy and Precision
| Measurement | Default Decimals | Range | Notes |
|-------------|------------------|-------|-------|
| Power | 1 | 0.1W | Sufficient for most applications |
| Voltage | 1 | 0.1V | Standard power line accuracy |
| Current (Ch1) | 1 | 0.1A | High current measurements |
| Current (Ch2) | 4 | 0.0001A | Low current precision |
| Energy | 1 | 0.1kWh | Cumulative accuracy |
| Power Factor | 3 | 0.001 | High precision needed |
### Filter Options
#### Built-in Filters
```yaml
filters:
- multiply: 0.0001 # Scale factor
- offset: -5.0 # Calibration offset
- delta: 10.0 # Remove small changes
- clamp:
min: 0.0
max: 10000.0 # Bound values
- exponential_moving_average:
alpha: 0.2 # Smoothing factor
- heartbeat: 10s # Periodic updates
- throttle: 30s # Limit update frequency
```
#### Custom Filters
```yaml
# Outlier removal
- outlier:
radius: 50.0
send_every: 4
send_first_at: 2
# Calibration curves
- calibrate_linear:
- 0.0 -> 0.0
- 1000.0 -> 1025.0
- 2000.0 -> 2040.0
```
## 📊 Home Assistant Integration
### Entity Mapping
| ESPHome Entity | Home Assistant Entity ID |
|----------------|-------------------------|
| Power 1 | `sensor.esp32_energy_meter_power_1` |
| Power 2 | `sensor.esp32_energy_meter_power_2` |
| Voltage 1 | `sensor.esp32_energy_meter_voltage_1` |
| Voltage 2 | `sensor.esp32_energy_meter_voltage_2` |
| Current 1 | `sensor.esp32_energy_meter_current_1` |
| Current 2 | `sensor.esp32_energy_meter_current_2` |
| Energy 1 | `sensor.esp32_energy_meter_energy_1` |
| Energy 2 | `sensor.esp32_energy_meter_energy_2` |
| WiFi Status | `binary_sensor.esp32_energy_meter_wifi_connection_status` |
| WiFi Signal | `sensor.esp32_energy_meter_wifi_signal_strength` |
### Energy Dashboard Configuration
```yaml
# Recommended energy dashboard entities
consumption:
- sensor.esp32_energy_meter_energy_2 # Primary consumption
- sensor.esp32_energy_meter_energy_1 # Secondary circuit
# Grid return (if applicable)
grid_return:
- sensor.grid_energy # Net metering
```
### Automation Examples
```yaml
# Power monitoring automation
automation:
- id: high_power_alert
trigger:
- platform: numeric_state
entity_id: sensor.esp32_energy_meter_power_2
above: 3000
action:
- service: notify.mobile_app
data:
message: "High power usage: {{ states('sensor.esp32_energy_meter_power_2') }}W"
```
## 🔍 Monitoring and Diagnostics
### System Health Monitoring
```yaml
# Add to configuration for system monitoring
sensor:
- platform: template
name: "System Health"
lambda: !lambda
float heap = ESP.getFreeHeap();
float signal = id(wifi_signal_strength).state;
if (heap < 50000) return "Critical";
if (heap < 100000) return "Low";
if (signal < -80) return "Poor Signal";
if (signal < -70) return "Fair Signal";
return "Healthy";
```
### Performance Metrics
| Metric | Normal Range | Warning | Critical |
|--------|-------------|---------|----------|
| Free Heap | >150KB | 50-150KB | <50KB |
| WiFi Signal | >-60 dBm | -60 to -80 dBm | <-80 dBm |
| Power Factor | >0.9 | 0.7-0.9 | <0.7 |
| Voltage | 220-240V | 210-250V | <210V or >250V |
| Frequency | 49-51Hz | 48-52Hz | <48Hz or >52Hz |
## 🔧 Advanced Configuration
### Custom Entity Creation
```yaml
# Create custom entity with specific characteristics
sensor:
- platform: modbus_controller
modbus_controller_id: jsymk
id: custom_power
name: "Custom Power Reading"
address: 0x0052
unit_of_measurement: "W"
register_type: holding
value_type: U_DWORD
accuracy_decimals: 2
filters:
- multiply: 0.0001
- offset: -10.0
- clamp:
min: 0.0
max: 50000.0
on_value:
- if:
condition:
lambda: return id(custom_power).state > 1000.0;
then:
- display.update: oled # Force display update
```
### Entity Dependencies
```yaml
# Define entity dependencies for proper update order
sensor:
- platform: template
id: derived_calculation
name: "Derived Value"
lambda: !lambda
// Use values from other sensors
float power = id(power2).state;
float voltage = id(voltage2).state;
return voltage > 0 ? power / voltage : 0;
```
This API reference provides complete documentation for all entities and services in the ESP32 Energy Meter project. Use this as a guide for integration, automation, and customization.