Skip to the content.

YaS☀️lR Manual

Quick Start

When everything is wired and installed properly, you can:

  1. Flash the downloaded firmware (see Initial Firmware Installation)
  2. Power on the system to start the application
  3. Connect to the WiFI: YaSolR-xxxxxx
  4. Connected to the Captive Portal to setup your WiFi (see: Captive Portal (Access Point) and WiFi)
  5. Go to the Dashboard / GPIO page to verify your GPIOs.
  6. Go to the Dashboard / Hardware page to activate the hardware you have
  7. Go to the Dashboard / Hardware Config page to configure your hardware settings and resistance values if needed. Resistance Calibration is really important to do otherwise the router will not work.
  8. Go to the Dashboard / MQTT page to configure your MQTT settings if needed.
  9. Go to the Dashboard / Relays page to configure your relay loads if needed.
  10. Go to Dashboard / Output 1 & 2 pages to configure your bypass options and dimmer settings if needed.
  11. Restart to activate everything.
  12. Enjoy your YaS☀️lR!

Initial Firmware Installation

The firmware file which must be used for a first installation is the one ending with .FACTORY.bin:

Firmware can be downloaded here : Download

Flash with (Linux / MacOS):

# Erase the memory (including the user data) \
  --port /dev/ttyUSB0 \
# Flash initial firmware and partitions \
  --port /dev/ttyUSB0 \
  --chip esp32 \
  --before default_reset \
  --after hard_reset \
  write_flash \
  --flash_mode dout \
  --flash_freq 40m \
  --flash_size detect \

Do not forget to change the port /dev/ttyUSB0 to the one matching your system. For example on Mac, it is often /dev/cu.usbserial-0001 instead of /dev/ttyUSB0.

With Espressif Flash Tool (Windows):

Be careful to not forget the 0.

Espressif Flash Tool

Captive Portal (Access Point) and WiFi

Captive Portal and Access Point address:

A captive portal (Access Point) is started for the first time to configure the WiFi network, or when the application starts and cannot join an already configured WiFi network fro 15 seconds.

The captive portal is only started for 3 minutes, to allow configuring a (new) WiFi network. After this delay, the portal will close, and the application will try to connect again to the WiFi. And again, if the WiFi cannot be reached, connected to, or is not configured, the portal will be started again.

This behavior allows to still have access to the application in case of a WiFi network change, or after a power failure, when the application restarts. If the application restarts before the WiFi is available, it will launch the portal for 3 minutes, then restart and try to join the network again.

In case of WiFi disruption (WiFi temporary down), the application will keep trying to reconnect. If it is restarted and the WiFi is still not available, the Captive Portal will be launched.

Access Point Mode

You can also chose to not connect to your Home WiFi and keep the AP mode active. In this case, you will need to connect to the router WiFi each time you want to access it.

In AP mode, all the features depending on Internet access and time are not available (MQTT, NTP). You will have to manually sync the time from your browser to activate the auto bypass feature.

YaS☀️lR Pages

Here are the main links to know about in the application:

(replace yasolr.local with the IP address of the router)


This page is accessible at: http://<esp-ip>/config. It allows to see the raw current configuration of the router and edit it. This page should not normally be used, except for debugging purposes.


A Web Console is accessible at: http://<esp-ip>/console. You can see more logs if you activate Debug logging (but it will make the router react a bit more slowly).


Go to the Web OTA at http://<esp-ip>/update to update the firmware over the air:

The firmware file which must be used is the one ending with .UPDATE.bin:


Dashboard / Overview

The overview section shows some global information about the router.

The temperature is coming from the sensor installed in the router box.

Dashboard / Output 1 & 2

The output sections show the state of the outputs and the possibility to control them.


Dimmer Control:

Bypass Control:

All these settings are applied immediately and do not require a restart

Dashboard / Relays

All these settings are applied immediately and do not require a restart

YaS☀️lR supports 2 relays (Electromechanical or SSR, controlled with 3.3V DC) to control external loads, or to be connected to the A1 and A2 terminals of a power contactor. Relays can also be connected to the other resistance of the water tank (tri-phase resistance) as described in the recommendations to reduce harmonics and flickering, in order to improve the routing and reduce harmonics. You must use a SSR for that, because the relay will be switched on and off frequently.

The voltage is not dimmed: these are 2 normal relays.

These relays can also be controlled manually, from MQTT, REST API, Home Assistant, Jeedom, etc.

Pay attention that there is little to no hysteresis on the relays. So do not use the automatic feature to switch non-resistive loads such as pumps, electric vehicle chargers, etc.

If you need to switch other types of load in a more complex way with some hysteresis or other complex conditions, you can use the MQTT, REST API, Home Assistant or Jeedom to query the Virtual Power metric and execute an automation based on this value. The automation can then control the router relays remotely. The relays need to be set in Manual Control.

Remember that Solar Router’s relays are not power contactors and should not be used to directly control high power loads like an Electric Vehicle charge, a pump, etc.

Rules of Automatic Switching

Grid Virtual Power is calculated by the router as Grid Power - Routed Power. This is the power that would be sent to the grid if the router was not routing any power to the resistive loads.

Grid Virtual Power is negative on export and positive on import.

For a 3000W tri-phase resistance, 3% means 30W per relay because there is 3x 1000W resistances. For a 2100W tri-phase resistance, 3% means 21W per relay because there is 3x 700W resistances.

Dashboard / Management

Dashboard / Network

Time settings:

WiFi settings:

The ESP32 must be restarted to apply the changes.

Dashboard / MQTT

MQTT must be restarted to apply the changes.

MQTT as a Grid Source

The ESP32 must be restarted to apply the changes.

MQTT topics are less accurate because depend on the refresh rate of this topic, and an expiration delay of a few seconds is set in order to stop any routing if no update is received in time.

Home Assistant Discovery

YaS☀️lR supports Home Assistant Discovery: if configured, it will automatically create a device for the Solar Router in Home Assistant under the MQTT integration.

MQTT must be restarted to apply the changes.

The complete reference of the published data in MQTT is available here. The published data can be explored with MQTT Explorer.

Activating MQTT Discovery in Home Assistant

You can read more about Home Assistant Discovery and how to configure it here.

Here is a configuration example for Home Assistant to move the published state topics under the homeassistant/states:

  base_topic: homeassistant/states
  publish_attributes: true
  publish_timestamps: true
      - persistent_notification
      - automation
      - calendar
      - device_tracker
      - event
      - geo_location
      - media_player
      - script
      - update

To configure the discovery topic, you need to go to http://homeassistant.local:8123/config/integrations/integration/mqtt, then click on configure, then reconfigure then next, then you can enter the discovery prefix homeassistant/discovery.

Once done on Home Assistant side and YaS☀️lR side, you should see the Solar Router device appear in Home Assistant in the list of MQTT devices.

Dashboard / GPIO

This section allows to configure the pinout for the connected hardware and get some validation feedback.

If you see a warning with (Input Only), it means that this configured pin can only be used to read data. It perfectly OK for a ZCD, but you cannot use a pin that can only be read for a relay, DS18 sensor, etc.

If you change one of these settings, please stop and restart the corresponding Hardware.

Dashboard / Hardware

This section allows to enable / disable some features of the router, and get some feedback in case some activated features cannot be activated.

All these components are activated live without the need to restart the router.

Dashboard / Hardware Config

If you change one of these settings, please stop and restart the corresponding Hardware.

Resistance Calibration

The router needs to know the resistance value of the load. There several ways to set it.

  1. Measure yourself: You can manually enter the resistance values in the Hardware Config page. If you chose to do so, be careful to put a value that you have correctly measured! An approximation will cause the router to not properly work because it won’t be able to adjust the exact amount of power to send.
  1. PZEM-004T v3: If you have wired a PZEM-004T v3 connected to each output, it will measure the resistance value when routing. In this case, you do not have to enter any value, leave the fields to 0. The PZEM will measure the resistance value while routing.

  2. JSY-MK-194T: If you have a JSY-MK-194T, you can manually activate the dimmer one by one to 100% and wait about 5 seconds for the values to stabilize. The router will then display the resistance value in the Overview page, thanks to the JSY. You just have to report it in the Hardware Config page.

Dashboard / Statistics

This page shows a lot of statistics and information on the router.

Important Hardware Information

Bypass Relay

Installing a relay for bypass is optional: if installed, the relay will be used to power the heater, and the dimmer will be set to 0.

If not installed, when activating bypass mode, the dimmer will be used and set to 100%. The advantage is a simple setup, the drawbacks are:


Supported displays are any I2C OLED Display of type SSD1307, SH1106, SH1107.

SH1106 is recommended and has been extensively tested.

The display will look like a carousel with a maximum of 5 pages:


The JSY is used to measure:

  1. the grid power and voltage
  2. the total routed power of the outputs combined (optional)

The JSY can be replaced by MQTT, reading the power and voltage from MQTT topics. See MQTT as a Grid Source.

Remote JSY

JSY can also be replaced with a remote JSY. You can install a JSY with an ESP32 on the electric panel and it will send its JSY data to the router remotely through an optimized communication protocol (UDP) each 500 ms.

You can look in the JSY project to find more information about how to setup remote JSY and the supported protocols. The Sender program is available at:

This is a standalone application that looks looks like this and will show all your JSY data, help you manage it, and also send the data through UDP.

When using a remote JSY with the router, the following rules apply:


The LEDs are used to notify the user of some events like reset, restarts, router ready, routing, etc.

⚫ 🟡 ⚫    
⚫ ⚫ ⚫   OFF

PZEM-004T V3

Each output supports the addition of a PZEM-004T v3 sensor to monitor the power sent to the resistive load specifically for this output. This also unlocks some additional features such as independent outputs and the ability to balance the excess power between outputs.

Thanks to the PZEM per output, it is also possible to get some more precise information like the dimmed RMS voltage, resistance value, etc.

Pairing procedure

The PZEM-004T v3 devices has a special installation mode: you can install 2 PZEM-004T v3 devices on the same Serial TX/RX. To communicate with the right one, each output will use a different slave address. The initial setup requires to pair each PZEM-004T v3 with the corresponding output.

  1. Connect the 2 PZEM-004T v3 devices to the grid (L/N) and install the clamp around the wire at the exit of the dimmer of first output
  2. Only connect the terminal wire (+5V, GND, RX, TX) of the first PZEM-004T v3 to pair to Output 1
  3. Boot the ESP32 wit the router firmware
  4. Press the PZEM Pairing button in the Output 1 menu
  5. Verify that the pairing is successful
  6. Disconnect the PZEM-004T v3 from the ESP32
  7. Connect the second PZEM (which has its clamp at the exit of the dimmer of the second output) to the ESP32
  8. Press the PZEM Pairing button in the Output 2 menu this time
  9. Verify that the pairing is successful
  10. Now connect the 2 PZEM-004T v3 devices to the ESP32

You can verify that the pairing is successful by trying to activate the dimmer in the overview page, and see if you get the output power.

Check also the logs in the Web Console at http://yasolr-vwxyz.local/console while doing the pairing procedure.

This complex pairing procedure is not specific to this router project but is common to any PZEM-004T device when using several PZEM-004T v3 devices on the same Serial TX/RX. You can read more at:

Temperature Sensor

The temperature sensors are used to monitor the water tank but also to trigger an automatic heating based on temperature levels (called auto bypass).

Supported temperature sensor: DS18B20

A temperature sensor can also be used to monitor the router itself.

Zero-Cross Detection

The Zero-Cross Detection (ZCD) module is used to detect the zero-crossing of the grid voltage. It is required, whether you use a Robodyn or SSR or any routing algorithm (phase control or burst mode). The Robodyn includes a ZCD (its ZC pin).

Compatibility with EV box like OpenEVSE

The router exposes through API and MQTT the Virtual Grid Power, which is the value of Grid Power you would have if the router was not routing.

You can use this value to inject in the EV box in order to prioritize EV charging over routing to the water tank.

This is usually acceptable to give the EV box a priority over the water tank, because the water tank only need a small amount of routed energy to start heating, while the EV usually requires a threshold to start charging. So the router will take whatever is not used by the EV box.

Help and support