The Solar Monitor project came out of the need to monitor a real off-grid solar system.
The main requirements of the system were:
- allow remote monitoring
- monitor the state of the battery to ensure it does not drop below a certain safe level to maximise its lifespan
- monitor the power used by different home appliances and identify inefficient uses of power
- determine how much energy is produced and consumed each day
- provide historical information to gain an understanding of energy consumption patterns
Monitoring the state of charge of the battery was a critical requirement as the battery bank I have installed uses a Sealed Lead Acid (AGM) technology, which is very sensitive to deep discharges.
In order to suport remote monitoring (and given the patchy Internet at my location), the main part of the system (the SolarMonitorApi) was hosted in a cloud provider (Linode).
The diagram below shows an overview of the entire system:
There are 4 components that form part of the system:
-
The SolarMonitorApi - This is an ASP.NET Core Web.Api-based application, hosted in the cloud, which provides a RESTful API allowing remote web clients to pull data related to the various solar systems registered with it.
-
AuthService - this service provides the authentication/authorization for the SolarMonitorApi.
-
The SolarMonitorGateway application. This runs on the individual gateway machines that are installed locally next to the solar systems. Its purpose is to communicate with the individual solar devices and sensors in order to retrieve information from them and push this data to the SolarMonitorApi server. This application was written in Go.
-
SolarMonitorWebClient application. This is an SPA (ReactJS) that obtains data from the SolarMonitorApi and displays it to the user via a selection of graphs.