Web Endpoints
Application
curl -X GET http://<esp-ip>/api/app
{
"build_date": "2024-02-25T22:18:32.561669+00:00",
"build_hash": "eeb8c4b",
"debug": true,
"firmware": "YaSolR-main-trial-esp32-debug.bin",
"id": "A1C48",
"manufacturer": "Mathieu Carbou",
"model": "Trial",
"name": "YaSolR",
"trial": true,
"version": "main_eeb8c4b_modified"
}
Configuration
curl -X GET http://<esp-ip>/api/config
{
"admin_pwd": "",
"ap_mode_enable": "false",
"button_action": "restart",
"button_enable": "true",
"button_pin": "23",
"buzzer_enable": "false",
"buzzer_pin": "19",
"debug_enable": "true",
"dp_clock_pin": "22",
"dp_data_pin": "21",
"dp_enable": "true",
"dp_powsave": "0",
"dp_rotation": "0",
"dp_type": "SH1106",
"grid_freq": "0",
"grid_pow_mqtt": "homeassistant/states/sensor/grid_power/state",
"grid_volt": "230",
"grid_volt_mqtt": "",
"ha_disco_enable": "true",
"ha_disco_topic": "homeassistant/discovery",
"hostname": "yasolr-a1c48",
"jsy_enable": "true",
"jsy_rx_pin": "17",
"jsy_tx_pin": "16",
"lights_enable": "true",
"lights_g_pin": "0",
"lights_r_pin": "15",
"lights_y_pin": "2",
"mqtt_enable": "true",
"mqtt_port": "1883",
"mqtt_pub_itvl": "5",
"mqtt_pwd": "********",
"mqtt_secure": "false",
"mqtt_server": "192.168.125.90",
"mqtt_topic": "yasolr_a1c48",
"mqtt_user": "homeassistant",
"ntp_server": "pool.ntp.org",
"ntp_timezone": "Europe/Paris",
"out1_aut_enable": "false",
"out1_bp_enable": "true",
"out1_bp_pin": "32",
"out1_bp_type": "NO",
"out1_dim_auto": "false",
"out1_dim_enable": "true",
"out1_dim_limit": "100",
"out1_dim_pin": "25",
"out1_dim_type": "TRIAC",
"out1_end_time": "06:00",
"out1_pz_enable": "true",
"out1_start_time": "22:00",
"out1_tmp_enable": "true",
"out1_tmp_high": "60",
"out1_tmp_low": "50",
"out1_tmp_pin": "18",
"out1_wdays": "sun,mon,tue,wed,thu,fri,sat",
"out2_aut_enable": "false",
"out2_bp_enable": "false",
"out2_bp_pin": "33",
"out2_bp_type": "NO",
"out2_dim_auto": "false",
"out2_dim_enable": "true",
"out2_dim_limit": "100",
"out2_dim_pin": "26",
"out2_dim_type": "SSR_RANDOM",
"out2_end_time": "06:00",
"out2_pz_enable": "true",
"out2_start_time": "20:00",
"out2_tmp_enable": "true",
"out2_tmp_high": "60",
"out2_tmp_low": "50",
"out2_tmp_pin": "5",
"out2_wdays": "sun,mon,tue,wed,thu,fri,sat",
"portal_timeout": "180",
"pzem_rx_pin": "27",
"pzem_tx_pin": "14",
"relay1_enable": "true",
"relay1_pin": "13",
"relay1_power": "0",
"relay1_type": "NO",
"relay2_enable": "true",
"relay2_pin": "12",
"relay2_power": "0",
"relay2_type": "NO",
"sys_tmp_enable": "true",
"sys_tmp_pin": "4",
"wifi_pwd": "",
"wifi_ssid": "IoT",
"wifi_timeout": "15",
"zcd_enable": "true",
"zcd_pin": "35"
}
# Configuration Update:
curl -X POST \
-F "hostname=foobarbaz" \
-F "admin_password=" \
-F "ntp_server=fr.pool.ntp.org" \
-F "ntp_timezone=Europe/Paris" \
[...]
http://<esp-ip>/api/config
# Backup configuration config.txt:
curl -X GET http://<esp-ip>/api/config/backup
# Restore configuration config.txt:
curl -X POST -F "data=@./path/to/config.txt" http://<esp-ip>/api/config/restore
Grid Electricity
curl -X GET http://<esp-ip>/api/grid
{
"energy_returned": 0,
"energy": 0,
"frequency": 49.97000122,
"online": true,
"power": 808.9590454,
"power_factor": 0,
"voltage": 233.246994,
"jsy": {
"current1": 0.0056,
"current2": 0,
"enabled": true,
"energy_returned1": 0.709999979,
"energy_returned2": 0,
"energy1": 0.639999986,
"energy2": 0,
"frequency": 49.97000122,
"power_factor1": 0.765999973,
"power_factor2": 0,
"power1": 0.894400001,
"power2": 0,
"voltage1": 233.246994,
"voltage2": 233.246994,
"time": 268704
},
"zcd": {
"enabled": true,
"frequency": 49.95404053
}
}
Network
curl -X GET http://<esp-ip>/api/network
{
"ip_address": "192.168.125.120",
"mac_address": "B0:B2:1C:0A:1C:48",
"state": "STA_CONNECTED",
"wifi_bssid": "00:17:13:37:28:C0",
"wifi_signal": 78,
"wifi_rssi": -43,
"wifi_ssid": "IoT"
}
NTP
curl -X GET http://<esp-ip>/api/ntp
{
"synced": true
}
Relays
curl -X GET http://<esp-ip>/api/relays
{
"relay1": {
"enabled": true,
"state": "off",
"switch_count": 2
},
"relay2": {
"enabled": false,
"state": "off",
"switch_count": 0
}
}
# Change relay state for a specific duration (duration is optional)
curl -X POST \
-F "state=on" \
-F "duration=20000" \
http://<esp-ip>/api/relays/relay1
Router
curl -X GET http://<esp-ip>/api/router
{
"energy": 0.342999995,
"power_factor": 0,
"power": 0,
"thdi": 0,
"virtual_grid_power": 5068.793457,
"output1": {
"apparent_power": 0,
"current": 0,
"enabled": true,
"energy": 0.089000002,
"power_factor": 0,
"power": 0,
"resistance": 0,
"state": "Idle",
"thdi": 0,
"voltage_in": 219.3000031,
"voltage_out": 0,
"bypass_relay": {
"enabled": true,
"state": "off",
"switch_count": 0
},
"dimmer": {
"angle_deg": 180,
"angle_rad": 3.141592741,
"delay": 10000,
"enabled": true,
"level": 0,
"state": "off",
"vrms_factor": 0,
"vrms_230V": 0
},
"pzem": {
"address": 1,
"current": 0,
"enabled": true,
"energy": 0.089000002,
"frequency": 50,
"power_factor": 0,
"power": 0,
"voltage": 219.3000031,
"time": 253138
},
"temp_sensor": {
"enabled": true,
"temperature": 23.05999947,
"valid": true
}
},
"output2": {
"apparent_power": 0,
"current": 0,
"enabled": true,
"energy": 0.254000008,
"power_factor": 0,
"power": 0,
"resistance": 0,
"state": "Idle",
"thdi": 0,
"voltage_in": 219.5,
"voltage_out": 0,
"bypass_relay": {
"enabled": false,
"state": "off",
"switch_count": 0
},
"dimmer": {
"angle_deg": 180,
"angle_rad": 3.141592741,
"delay": 10000,
"enabled": true,
"level": 0,
"state": "off",
"vrms_factor": 0,
"vrms_230V": 0
},
"pzem": {
"address": 2,
"current": 0,
"enabled": true,
"energy": 0.254000008,
"frequency": 50,
"power_factor": 0,
"power": 0,
"voltage": 219.5,
"time": 253073
},
"temp_sensor": {
"enabled": false,
"temperature": 0,
"valid": false
}
}
}
# Set the dimmer to 0-100%
curl -X POST \
-F "level=100" \
http://<esp-ip>/api/router/output1/dimmer
# Change bypass relay state
curl -X POST \
-F "state=on" \
http://<esp-ip>/api/router/output1/bypass_relay
System
curl -X GET http://<esp-ip>/api/system
{
"boots": 6654,
"chip_cores": 2,
"chip_model": "ESP32-D0WD-V3",
"chip_revision": 3,
"cpu_freq": 240,
"heap_total": 261184,
"heap_usage": 46.97000122,
"heap_used": 122668,
"uptime": 293,
"buzzer": {
"enabled": false
},
"lights": {
"code": "🟢 ⚫ ⚫",
"green": "on",
"red": "off",
"yellow": "off"
},
"stack": {
"async_tcp": {
"stackHighWaterMark": 1228,
"priority": 3
},
"loopTask": {
"stackHighWaterMark": 804,
"priority": 1
},
"mqtt_task": {
"stackHighWaterMark": 1436,
"priority": 2
},
"meterTask": {
"stackHighWaterMark": 1868,
"priority": 1
},
"routerTask": {
"stackHighWaterMark": 1836,
"priority": 1
}
},
"task_managers": [
{
"name": "loopTask",
"tasks": [
{
"name": "YaSolR.updateWebsite()",
"type": "FOREVER",
"paused": false,
"enabled": true,
"interval": 1000000,
"stats": {
"count": 269,
"unit": "ms",
"bins": [0, 0, 0, 0, 63, 205, 0, 1, 0, 0, 0, 0]
}
},
{
"name": "YaSolR.publishMQTT()",
"type": "FOREVER",
"paused": false,
"enabled": true,
"interval": 5000000,
"stats": {
"count": 55,
"unit": "ms",
"bins": [0, 0, 0, 0, 0, 0, 0, 32, 23, 0, 0, 0]
}
},
{
"name": "YaSolR.publishHADiscovery()",
"type": "ONCE",
"paused": true,
"enabled": true,
"interval": 0,
"stats": {
"count": 1,
"unit": "ms",
"bins": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
}
}
]
},
{
"name": "meterTask",
"tasks": [
{
"name": "output1PZEM.read()",
"type": "FOREVER",
"paused": false,
"enabled": true,
"interval": 0,
"stats": {
"count": 2264,
"unit": "ms",
"bins": [0, 0, 0, 0, 0, 1264, 1000, 0]
}
},
{
"name": "output2PZEM.read()",
"type": "FOREVER",
"paused": false,
"enabled": true,
"interval": 0,
"stats": {
"count": 2263,
"unit": "ms",
"bins": [1, 0, 0, 0, 0, 381, 1881, 0]
}
}
]
},
{
"name": "routerTask",
"tasks": [
{
"name": "jsy.read()",
"type": "FOREVER",
"paused": false,
"enabled": true,
"interval": 0,
"stats": {
"count": 6052,
"unit": "ms",
"bins": [0, 0, 0, 0, 0, 6042, 10, 0]
}
}
]
}
],
"temp_sensor": {
"enabled": true,
"temperature": 24.44000053,
"valid": true
}
}
# System Restart
curl -X POST http://<esp-ip>/api/system/restart