Springboot

Solar Car Charging Dance In Software

After thinking about how to use the solar power my home generates in the most efficient way I realised that this is a generic problem. Effectively we have three types of devices in play :

  • Generation Sources. eg. my solar panels, the house battery, the grid.
  • Switchable Consuming Devices. eg. My car, a heat pump, the house battery. The load generated by these devices can be turned on/off.
  • Background Load. The overall usage at the site. eg. my house load.

This general abstraction is a way of trying to come up with a common interface for each type of device so that we can easily add new devices as households get more connected.

RestTemplate and Java 17 Records

As part of my ongoing solar project I wanted some basic weather forecast information to help make judgements around cloud coverage. The good people at OpenWeather provide an api with a free tier that includes forecasted cloud coverage data hourly for a couple of days.

The api returns a JSON structure that looks like this :

{
	"lat": 50.8,
	"lon": 0.027,
	"timezone": "Europe/London",
	"timezone_offset": 0,
	"current": {
		"dt": 1644836705,
		"sunrise": 1644822797,
		"sunset": 1644858426,
		"temp": 281.32,
		"feels_like": 277.84,
		"pressure": 997,
		"humidity": 80,
		"dew_point": 278.08,
		"uvi": 0.98,
		"clouds": 75,
		"visibility": 10000,
		"wind_speed": 6.69,
		"wind_deg": 250,
		"weather": [
 			{
				"id": 803,
				"main": "Clouds",
				"description": "broken clouds",
				"icon": "04d"
			}
		]
	},
	"hourly": [
	{
		"dt": 1644836400,
		"temp": 281.32,
		"feels_like": 277.47,
		"pressure": 997,
		"humidity": 80,
		"dew_point": 278.08,
		"uvi": 0.98,
		"clouds": 75,
		"visibility": 10000,
		"wind_speed": 7.9,
		"wind_deg": 242,
		"wind_gust": 12.16,
		"weather": [
		{
			"id": 803,
			"main": "Clouds",
			"description": "broken clouds",
			"icon": "04d"
		}
		],
		"pop": 0.05
	},
	.
	.
	.

With 48 of those hourly snippets covering the next two days.