Skip to content

Commit c7f685f

Browse files
XavierBergerXavier Berger
authored and
Xavier Berger
committed
feat: Add initial version of yaml for solar router with triac
1 parent 1a02f88 commit c7f685f

8 files changed

+634
-0
lines changed

esp32-proxy-client.yaml

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# ----------------------------------------------------------------------------------------------------
2+
# ESPHome configuration - This part depends on your hardware target
3+
# ----------------------------------------------------------------------------------------------------
4+
5+
esphome:
6+
name: solarrouter
7+
friendly_name: SolarRouter
8+
9+
esp32:
10+
board: esp32dev
11+
framework:
12+
type: arduino
13+
14+
# Enable logging
15+
logger:
16+
baud_rate: 0
17+
level: INFO
18+
logs:
19+
component: ERROR
20+
21+
# Enable Home Assistant API
22+
api:
23+
24+
# Enable over-the-air updates
25+
ota:
26+
27+
# WiFi connection
28+
wifi:
29+
ssid: !secret wifi_ssid
30+
password: !secret wifi_password
31+
32+
# Activate web interface
33+
web_server:
34+
port: 80
35+
36+
# ----------------------------------------------------------------------------------------------------
37+
# Customisation
38+
# ----------------------------------------------------------------------------------------------------
39+
40+
substitutions:
41+
# Power meter source -----------------------------------------------------------
42+
# Define ip address of Proxy Power Meter
43+
power_meter_ip_address: "192.168.1.30"
44+
45+
# Regulator configuration ------------------------------------------------------
46+
# Define GPIO pin connected to AC Dimmer for gate and zero crossing detection.
47+
regulator_gate_pin: GPIO22
48+
regulator_zero_crossing_pin: GPIO23
49+
50+
# LEDs -------------------------------------------------------------------------
51+
# Green LED is reflecting regulation status
52+
# Yellow LED is reflecting power meter status
53+
green_led_pin: GPIO19
54+
yellow_led_pin: GPIO18
55+
56+
packages:
57+
power_meter:
58+
url: https://github.com/XavierBerger/Solar-Router-for-ESPHome/
59+
file: solar_router/power_meter_proxy.yaml
60+
regulator:
61+
url: https://github.com/XavierBerger/Solar-Router-for-ESPHome/
62+
file: solar_router/regulator_triac.yaml
63+
solar_router:
64+
url: https://github.com/XavierBerger/Solar-Router-for-ESPHome/
65+
file: solar_router/solar_router_engine.yaml

esp32-standalone.yaml

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# ----------------------------------------------------------------------------------------------------
2+
# ESPHome configuration - This part depends on your hardware target
3+
# ----------------------------------------------------------------------------------------------------
4+
5+
esphome:
6+
name: solarrouter
7+
friendly_name: SolarRouter
8+
9+
esp32:
10+
board: esp32dev
11+
framework:
12+
type: arduino
13+
14+
# Enable logging
15+
logger:
16+
baud_rate: 0
17+
level: INFO
18+
logs:
19+
component: ERROR
20+
21+
# Enable Home Assistant API
22+
api:
23+
24+
# Enable over-the-air updates
25+
ota:
26+
27+
# WiFi connection
28+
wifi:
29+
ssid: !secret wifi_ssid
30+
password: !secret wifi_password
31+
32+
# Activate web interface
33+
web_server:
34+
port: 80
35+
36+
# ----------------------------------------------------------------------------------------------------
37+
# Customisation
38+
# ----------------------------------------------------------------------------------------------------
39+
40+
substitutions:
41+
# Power meter source -----------------------------------------------------------
42+
# Define ip address of Fronius inverter
43+
power_meter_ip_address: "192.168.1.21"
44+
45+
# Regulator configuration ------------------------------------------------------
46+
# Define GPIO pin connected to AC Dimmer for gate and zero crossing detection.
47+
regulator_gate_pin: GPIO22
48+
regulator_zero_crossing_pin: GPIO23
49+
50+
# LEDs -------------------------------------------------------------------------
51+
# Green LED is reflecting regulation status
52+
# Yellow LED is reflecting power meter status
53+
green_led_pin: GPIO19
54+
yellow_led_pin: GPIO18
55+
56+
packages:
57+
power_meter:
58+
url: https://github.com/XavierBerger/Solar-Router-for-ESPHome/
59+
file: solar_router/power_meter_fronius.yaml
60+
regulator:
61+
url: https://github.com/XavierBerger/Solar-Router-for-ESPHome/
62+
file: solar_router/regulator_triac.yaml
63+
solar_router:
64+
url: https://github.com/XavierBerger/Solar-Router-for-ESPHome/
65+
file: solar_router/solar_router_engine.yaml

esp8285-power-meter-proxy.yaml

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# ----------------------------------------------------------------------------------------------------
2+
# ESPHome configuration - This part depends on your hardware target
3+
# ----------------------------------------------------------------------------------------------------
4+
5+
esphome:
6+
name: "esp8285"
7+
friendly_name: ESP8285
8+
9+
esp8266:
10+
board: esp01_1m
11+
12+
# Enable logging
13+
logger:
14+
baud_rate: 0
15+
level: INFO
16+
logs:
17+
component: ERROR
18+
19+
# Enable Home Assistant API
20+
api:
21+
22+
# Enable over-the-air updates
23+
ota:
24+
25+
# WiFi connection
26+
wifi:
27+
ssid: !secret wifi_ssid
28+
password: !secret wifi_password
29+
30+
# Activate web interface
31+
web_server:
32+
port: 80
33+
34+
# ----------------------------------------------------------------------------------------------------
35+
# Customisation
36+
# ----------------------------------------------------------------------------------------------------
37+
38+
substitutions:
39+
# Power meter source -----------------------------------------------------------
40+
# Define ip address of Fronius inverter
41+
power_meter_ip_address: "192.168.1.21"
42+
43+
# LEDs -------------------------------------------------------------------------
44+
# Yellow LED is reflecting power meter
45+
yellow_led_pin: GPIO1
46+
47+
globals:
48+
- id: power_meter_activated
49+
type: int
50+
initial_value: "1"
51+
52+
packages:
53+
power_meter:
54+
url: https://github.com/XavierBerger/Solar-Router-for-ESPHome/
55+
file: solar_router/power_meter_fronius.yaml
56+
57+
http_request:
58+
esp8266_disable_ssl_support: True

solar_router/power_meter_fronius.yaml

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# ----------------------------------------------------------------------------------------------------
2+
# Sensor updated every second to give feedback in Home Assistant
3+
# ----------------------------------------------------------------------------------------------------
4+
5+
sensor:
6+
# Sensor showing the actual power consumption
7+
- id: real_power
8+
platform: template
9+
name: "Real Power"
10+
device_class: "power"
11+
unit_of_measurement: "W"
12+
update_interval: 1s
13+
14+
# ----------------------------------------------------------------------------------------------------
15+
# Use http request component
16+
# ----------------------------------------------------------------------------------------------------
17+
18+
http_request:
19+
id: http_request_data
20+
useragent: esphome/device
21+
timeout: 10s
22+
23+
# ----------------------------------------------------------------------------------------------------
24+
# Define scripts for power collection
25+
# ----------------------------------------------------------------------------------------------------
26+
27+
script:
28+
# Fronius script gather power reports from inverter and update globals (real_power)
29+
# Information are provided as json. Power exchanged with the grid is names PowerReal_P_Sum
30+
# When this value is positive, energy is taken from the grid.
31+
# When this value is negative, energy is pushed to the grid.
32+
- id: power_meter_source
33+
mode: single
34+
then:
35+
- if:
36+
condition:
37+
wifi.connected:
38+
then:
39+
- http_request.get:
40+
url: http://${power_meter_ip_address}/solar_api/v1/GetMeterRealtimeData.cgi
41+
headers:
42+
Content-Type: application/json
43+
verify_ssl: False
44+
on_response:
45+
then:
46+
- lambda: |-
47+
json::parse_json(id(http_request_data).get_string(), [](JsonObject data) {
48+
id(real_power).publish_state(data["Body"]["Data"]["0"]["PowerReal_P_Sum"].as< float >());
49+
});
50+
51+
time:
52+
- platform: sntp
53+
on_time:
54+
- seconds: /1
55+
then:
56+
- if:
57+
condition:
58+
- lambda: return id(power_meter_activated) != 0;
59+
then:
60+
- script.execute: power_meter_source
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# ----------------------------------------------------------------------------------------------------
2+
# Sensor updated every second to give feedback in Home Assistant
3+
# ----------------------------------------------------------------------------------------------------
4+
5+
sensor:
6+
# Sensor showing the actual power consumption
7+
- id: real_power
8+
platform: template
9+
name: "Real Power"
10+
device_class: "power"
11+
unit_of_measurement: "W"
12+
update_interval: 1s
13+
14+
# ----------------------------------------------------------------------------------------------------
15+
# User interaction
16+
# ----------------------------------------------------------------------------------------------------
17+
18+
number:
19+
# Simulated load used for developement
20+
# It should be commented out for production
21+
- platform: template
22+
name: "Simulated Load"
23+
id: simulated_load_power
24+
optimistic: True
25+
restore_value: True
26+
mode: box
27+
min_value: -99999
28+
max_value: 99999
29+
initial_value: 0
30+
unit_of_measurement: "W"
31+
step: 1
32+
33+
# ----------------------------------------------------------------------------------------------------
34+
# Use http request component
35+
# ----------------------------------------------------------------------------------------------------
36+
37+
http_request:
38+
id: http_request_data
39+
useragent: esphome/device
40+
timeout: 10s
41+
42+
# ----------------------------------------------------------------------------------------------------
43+
# Define scripts for power collection
44+
# ----------------------------------------------------------------------------------------------------
45+
46+
script:
47+
# Fronius script gather power reports from inverter and update globals (real_power)
48+
# Information are provided as json. Power exchanged with the grid is names PowerReal_P_Sum
49+
# When this value is positive, energy is taken from the grid.
50+
# When this value is negative, energy is pushed to the grid.
51+
- id: power_meter_source
52+
mode: single
53+
then:
54+
- if:
55+
condition:
56+
wifi.connected:
57+
then:
58+
- http_request.get:
59+
url: http://${power_meter_ip_address}/solar_api/v1/GetMeterRealtimeData.cgi
60+
headers:
61+
Content-Type: application/json
62+
verify_ssl: False
63+
on_response:
64+
then:
65+
- lambda: |-
66+
json::parse_json(id(http_request_data).get_string(), [](JsonObject data) {
67+
id(real_power).publish_state(data["Body"]["Data"]["0"]["PowerReal_P_Sum"].as< float >()
68+
+ id(simulated_load_power).state*id(triac_opening).state / 100 // Simulated load used for developement. It should be commented out for production.
69+
);
70+
});
71+
72+
time:
73+
- platform: sntp
74+
on_time:
75+
- seconds: /1
76+
then:
77+
- if:
78+
condition:
79+
- lambda: return id(power_meter_activated) != 0;
80+
then:
81+
- script.execute: power_meter_source
+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# ----------------------------------------------------------------------------------------------------
2+
# Sensor updated every second to give feedback in Home Assistant
3+
# ----------------------------------------------------------------------------------------------------
4+
5+
sensor:
6+
# Sensor showing the actual power consumption
7+
- id: real_power
8+
platform: template
9+
name: "Real Power"
10+
device_class: "power"
11+
unit_of_measurement: "W"
12+
update_interval: 1s
13+
14+
# ----------------------------------------------------------------------------------------------------
15+
# Use http request component
16+
# ----------------------------------------------------------------------------------------------------
17+
18+
http_request:
19+
id: http_request_data
20+
useragent: esphome/device
21+
timeout: 10s
22+
23+
# ----------------------------------------------------------------------------------------------------
24+
# Define scripts for power collection
25+
# ----------------------------------------------------------------------------------------------------
26+
27+
script:
28+
# Get power reports from another PowerMEter and update globals (real_power)
29+
# Information are provided as json. Power exchanged with the grid is names "Value"
30+
- id: power_meter_source
31+
mode: single
32+
then:
33+
- if:
34+
condition:
35+
wifi.connected:
36+
then:
37+
- http_request.get:
38+
url: http://${power_meter_ip_address}/sensor/real_power
39+
headers:
40+
Content-Type: application/json
41+
verify_ssl: False
42+
on_response:
43+
then:
44+
- lambda: |-
45+
json::parse_json(id(http_request_data).get_string(), [](JsonObject data) {
46+
id(real_power).publish_state(data["value"].as< float >());
47+
});
48+
49+
time:
50+
- platform: sntp
51+
on_time:
52+
- seconds: /1
53+
then:
54+
- if:
55+
condition:
56+
- lambda: return id(power_meter_activated) != 0;
57+
then:
58+
- script.execute: power_meter_source

0 commit comments

Comments
 (0)