Hear the Story Behind Tomorrow.io’s Historic Launch: Watch “6 Years to Launch” Now”

Gareth Goh
Gareth Goh
Jun 1, 2021· 9 min, 12 sec
Gareth Goh
Gareth Goh
Gareth Goh is a product marketing manager at Tomorrow.io, working on the company's enterprise and SMB products. He previously worked at DataRobot, an AI startup, and InsightSquared, a sales analytics startup, in the Boston area. When he isn't diving into weather technology he enjoys spending time with his young baby and watching sports.

How the Smart Home of the Future is Powered by Weather Data

The Internet of Things (IoT) has changed the way we manage everything in the home from entertainment devices to temperature controls and even refrigerators and garage doors. It’s estimated that 58% of energy is used for heating and cooling homes. In the summer, residents in hotter climates see a tremendous increase in energy consumption and costs, but smart home devices can be used to help control energy costs. Smart home devices allow residents to change the temperature when they are away from home, saving on costs and eliminating wasteful energy consumption when it’s not necessary. Using weather data from the Tomorrow.io Weather API, residents can create more efficient controls in their house to keep temperatures consistent without wasting energy from sudden changes in weather conditions.

Saving on Costs with Smart Home Equipment

Even when homeowners have smart home equipment, they often don’t use the many features available to save on energy costs. With heat and air conditioning controls, homeowners can keep temperatures consistent regardless of the outside temperature. Traditional thermostats also perform this function, but smart home equipment can use additional sensors and remote controls to be more precise and provide automation.

Smart home equipment can be programmed to change temperature based on your location in the home. Traditionally, all rooms were heated or cooled based on temperatures in the entire house, but this means that you could be controlling temperatures in an area of the house that is not occupied. For example, as you sleep at night only your bedroom needs to stay cool in the summer rather than keeping the entire home cooled. Smart home equipment uses multiple sensors throughout the home to detect your location and control the temperature based on your location and your personal preferences.

Weather has effects on indoor temperature, so weather data should be used to control smart homes. For example, in cooler Fall months, flash cold fronts could roll in while the homeowner is away. A smart home thermostat with weather data used to determine future outdoors temperatures can change its indoor temperature settings based on weather codes retrieved every minute or hour. If the system detects that there will be rapidly changing weather conditions in the next hour, it can adjust its settings accordingly to save on energy and gas costs.

Heating and cooling aren’t the only two ways smart home systems can help around the house. Sprinkler systems can also be controlled with smart home technology. Most people put their sprinkler systems on a timer. In the morning, a smart sprinkler system can be programmed to water the grass when the weather is cooler. But what happens when it’s raining outside? A smart system will detect soil moisture and power on only when the soil is dry and needs water.

Smart home technology helps with soil conditions and sprinklers, but it can be more precise with weather data. Suppose that weather data indicates that it will rain 30 minutes after sprinklers are set to start. It would be unnecessary to run sprinklers if it starts raining in 30 minutes after the timed start, so you can instead wait for it to rain and save money on water costs by halting sprinklers for the day.

How the Tomorrow.io Weather API Helps

The Tomorrow.io API provides a vast array of weather data that can be used in smart home devices. Using both the thermostat and sprinkler system examples, you can use the Tomorrow.io API to collect data on future weather conditions and use this data to define settings on smart home configurations.

One way to approach data collection is to work with the Tomorrow.io API’s timelines endpoint. This endpoint can be used to collect data based on a time intervals (e.g., hourly or by the minute). This endpoint can be used to retrieve several values, but the weatherCode value provides nuanced information. For example, instead of getting simple “rain” alerts from the API, weather codes give you nuanced information such as “light rain,” “heavy rain,” or “drizzle.” 

The nuanced information can help with smart home automation to determine the set schedule for specific devices. For example, if the weather code data returns drizzling rain in the next 30 minutes, it might still be necessary to water plants and your lawn. But if heavy rain is projected within the next 30 minutes, you could set your device to postpone watering until the next day.

Weather code data can also be used to reduce energy and gas consumption to cool or heat a home. Suppose that you’re away on vacation for a week and a cold front rolls in while you’re away. You could have your home set to a specific temperature, but this is not cost effective. Instead, the thermostat should adjust based on the changes in weather. With weather data, your thermostat can change from cooling to heating your home prior to the cold front so that you don’t come home to an uncomfortable home. This change can be done the day you come home so that you save energy but still remain at a comfortable temperature when you enter the house.

Example code that uses the API to retrieve weather data is below:

string getTimelineURL = "https://api.tomorrow.io/v4/timelines";
string apikey = "YOUR API KEYS";
string location = "607f3e4188a6a60007947b82"; //locationId
string units = "imperial";
string[] timesteps = {"1h"};
string timezone = "America/New_York";

// configure the time frame up to 6 hours back and 15 days out
string now = DateTime.UtcNow.ToString();
string startTime = DateTime.UtcNow.AddMinutes(0).ToString("o", CultureInfo.InvariantCulture);
string endTime = DateTime.UtcNow.AddDays(1).ToString("o", CultureInfo.InvariantCulture);

// define the fields to return
string[] fields = { 

string getTimelineParameters = "apikey=" + apikey + "&location=" + location + "&fields=" + fields[0] + "&fields=" + fields[1] + "&fields=" + fields[2] + "&fields=" + fields[3] +
    "&units=" + units + "&timesteps=" + timesteps[0] + "&timezone=" + timezone + "&startTime=" + startTime + "&endTime=" + endTime;

string fullUrl = "https://api.tomorrow.io/v4/timelines?" + getTimelineParameters;
var apiResult = CallApi(fullUrl);
JObject result = JObject.Parse(apiResult.Result);

The following code defines the CallApi() method that makes the call to the Tomorrow.io API:

private static async Task CallApi(string fullUrl)

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
    HttpClient client = new HttpClient();
    var response = client.GetStringAsync(fullUrl);

    return await response;

In the code above, the startTime and endTime variables define the timeframe for the data. In this example, we get every hour for a day, so a block of 24 weather codes that represent conditions for the next day. The data returned is based on the locationId value, which points to a specific latitude and longitude. This location ID was created in our Tomorrow.io dashboard where you can also find your API keys. These API keys are necessary for every call to the API.

The API call is a GET request, so you can test results in your browser using the following URL:


If you use a browser like Chrome that will format the JSON results, you’ll see a data set with 24 intervals. Take a look at the first two, and you should see something like the following JSON:

The weatherCode value is 1000 for this hour and location. You can match the weather code with the weather condition using the table in the weatherCode documentation. For the next two hours, the weather will be clear with a temperature of 81.82 and 82.33 degrees Fahrenheit (we set the units to the imperial system in the API call). Based on this information, smart home equipment can make a decision to switch to cooling and sprinklers could be used if it has not rained in a while.

Now let’s look at a different interval data set with different weather conditions.

Once again, looking at the list of weather codes, you can determine that it will be drizzling rain (weather code 4000) on the 26th of May. The temperatures drop to 75 degrees Fahrenheit, so the weather will be cooler based on cloudy conditions. This information can be used to determine smart home device activity on this date.

The drizzling rain would not be enough to water plants, so you may still want to run sprinklers based on current conditions. If it recently rained, then you could postpone sprinkling the lawns based on this collected weather data and save money on costs. The same can be done to cooling and heating systems within the home. Rainy, cloudy weather could require less energy to cool the home in the summer time based on collected weather data from the Tomorrow.io API.

Smart home equipment often has algorithms that can be used to make decisions based on API data, but this data can also be used to display information to remote users. Homeowners on vacation or with multiple homes should be able to control their equipment from a mobile device provided they have internet access. The mobile app can display temperatures based on the homeowner’s date range input, and then the homeowner can make decisions on temperature, sprinklers, and other IoT devices within the home. This gives the homeowner more information and control over devices and utility costs.

The same mobile app that controls smart home equipment can be used to alert pet owners when thunderstorms are detected. You could collect data and alert homeowners when weather code 8000 (thunderstorms) is returned, or use the events endpoint to detect when thunderstorms are predicted.

The following code detects when a thunderstorm is predicted within the given location using the events endpoint:

string getTimelineURL = "https://api.tomorrow.io/v4/events";
string apikey = "YOUR API KEY";
string location = "607f3e4188a6a60007947b82"; //locationId
string insights = "insights=thunderstorms";
string fullUrl = getTimelineURL + "?apikey=" + apikey + "&location=" + location + "&" + insights;

var apiResult = CallApi(fullUrl);
JObject result = JObject.Parse(apiResult.Result);

Once again, the CallApi() method is the same reusable code from the previous example. The method is shown below:

private static async Task CallApi(string fullUrl)

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
    HttpClient client = new HttpClient();
    var response = client.GetStringAsync(fullUrl);

    return await response;

Using the above code, smart home devices can detect a thunderstorm and immediately turn on calming sounds for the homeowner’s pets. This shows that weather data can do more than control costs. They can also help with pets when the homeowner is away at work or on vacation.

Smart home automation is one of the best ways to make changes in your home environment more convenient while still keeping your energy costs down. Data-driven input fine tunes IoT automation so that you can make changes based on Tomorrow.io’s API that will keep you informed about weather conditions every hour of every day so that you can have more accurate control over your household device configurations.

Find Out How Much Weather is Costing You & Start Adapting Today

Sign Up for the Tomorrow.io Weather API for Free

Try Now