Testing Your Thermostat App with Simulate Endpoints
Learn how to use the Seam suite of simulate endpoints to test your thermostat app.
Seam's suite of simulate endpoints help you to test your thermostat app against events that can be difficult to orchestrate in your quality assurance (QA) environment using real devices. Seam provides the following thermostat-related simulate endpoints that you can use in a sandbox workspace:
Seam supports these endpoints for all thermostat sandbox devices.
Checking Capability Flags
Before using the simulate endpoints, check the relevant capabilities of the sandbox thermostat that you want to test. For example, if you want to use /thermostats/simulate/hvac_mode_adjusted to simulate having set the HVAC mode on a thermostat to heat, you must first make sure that the thermostat supports heat mode.
The following device properties show the relevant capabilities of a thermostat:
device.can_hvac_heatdevice.can_hvac_cooldevice.can_hvac_heat_cooldevice.can_turn_off_hvac
For more information, see Thermostat Capabilities.
Simulate Adjusting the HVAC Mode
The /thermostats/simulate/hvac_mode_adjusted endpoint enables you to simulate having adjusted the HVAC mode for a thermostat. This simulation is helpful for testing that your app is receiving thermostat events correctly, such as thermostat.manually_adjusted.
You can simulate having set the HVAC mode to any of the following settings:
heatcoolheat_cooloff
When you set the HVAC mode to heat, cool, or heat_cool, you must also set the following applicable set points to the desired degrees Fahrenheit or Celsius:
heat
heating_set_point_fahrenheitorheating_set_point_celsius
cool
cooling_set_point_fahrenheitorcooling_set_point_celsius
heat_cool
heating_set_point_fahrenheitorheating_set_point_celsiuscooling_set_point_fahrenheitorcooling_set_point_celsius
off
None
To simulate having adjusted the HVAC mode for a thermostat:
Code:
# Get the device.
thermostat = seam.devices.get(
device_id="11111111-1111-1111-2222-444444444444"
)
# Confirm that Seam supports the desired HVAC mode for the thermostat.
# In this example, we're simulating having set the thermostat to heat mode.
if thermostat.can_hvac_heat:
# Perform the simulated HVAC mode adjustment.
seam.thermostats.simulate.hvac_mode_adjusted(
device_id = thermostat.device_id,
hvac_mode = "heat",
heating_set_point_fahrenheit = 68
)Output:
NoneCode:
# Get the device.
thermostat=$(
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/devices/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"device_id": "11111111-1111-1111-2222-444444444444"
}')
# Confirm that Seam supports the desired HVAC mode for the thermostat.
# In this example, we're simulating having set the thermostat to heat mode.
if $(jq -r '.device.can_hvac_heat' <<< ${thermostat}); then \
# Perform the simulated HVAC mode adjustment.
curl -X 'POST' \
'https://connect.getseam.com/thermostats/simulate/hvac_mode_adjusted' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d "{
\"device_id\": \"$(jq -r '.device.device_id' <<< ${thermostat})\",
\"hvac_mode\": \"heat\",
\"heating_set_point_fahrenheit\": 68
}";
fiOutput:
{
"ok": true
}Code:
// Get the device.
const thermostat = await seam.devices.get({
device_id: "11111111-1111-1111-2222-444444444444"
});
// Confirm that Seam supports the desired HVAC mode for the thermostat.
// In this example, we're simulating having set the thermostat to heat mode.
if (thermostat.can_hvac_heat) {
// Perform the simulated HVAC mode adjustment.
await seam.thermostats.simulate.hvacModeAdjusted({
device_id: thermostat.device_id,
hvac_mode: "heat",
heating_set_point_fahrenheit: 68
})
};Output:
voidCode:
# Get the device.
thermostat = client.devices.get(device_id: "11111111-1111-1111-2222-444444444444")
# Confirm that Seam supports the desired HVAC mode for the thermostat.
# In this example, we're simulating having set the thermostat to heat mode.
if (thermostat.can_hvac_heat)
# Perform the simulated HVAC mode adjustment.
client.thermostats.simulate.hvac_mode_adjusted(
device_id: thermostat.device_id,
hvac_mode: "heat",
heating_set_point_fahrenheit: 68
)
endOutput:
nilCode:
// Get the device.
$thermostat = $seam->devices->get(device_id: "11111111-1111-1111-2222-444444444444");
// Confirm that Seam supports the desired HVAC mode for the thermostat.
// In this example, we're simulating having set the thermostat to heat mode.
if ($thermostat->can_hvac_heat) {
// Perform the simulated HVAC mode adjustment.
$seam->thermostats->simulate->hvac_mode_adjusted(
device_id: $thermostat->device_id,
hvac_mode: "heat",
heating_set_point_fahrenheit: 68
);
}Output:
voidCode:
// Get the device.
Device thermostat = seam.Devices.Get(deviceId: "11111111-1111-1111-2222-444444444444");
// Confirm that Seam supports the desired HVAC mode for the thermostat.
// In this example, we're simulating having set the thermostat to heat mode.
if (thermostat.CanHvacHeat == true) {
// Perform the simulated HVAC mode adjustment.
seam.Thermostats.Simulate.HvacModeAdjusted(
deviceId: thermostat.DeviceId,
hvacMode: "heat",
heatingSetPointFahrenheit: 68
);
}Output:
voidCode:
// Get the device.
Device thermostat = seam.devices()
.get(DevicesGetRequest.builder()
.deviceId("11111111-1111-1111-2222-444444444444")
.build());
// Confirm that Seam supports the desired HVAC mode for the thermostat.
// In this example, we're simulating having set the thermostat to heat mode.
if (thermostat.getCanHvacHeat())
{
// Perform the simulated HVAC mode adjustment.
seam.thermostats().simulate()
.hvacModeAdjusted(ThermostatsSimulateHvacModeAdjustedRequest.builder()
.deviceId(thermostat.getDeviceId())
.hvacMode(HvacModeSetting.HEAT)
.heatingSetPointFahrenheit(68)
.build());
}Output:
voidCode:
// Get the device.
thermostat, uErr := client.Devices.Get(
context.Background(),
&api.DevicesGetRequest{
DeviceId: api.String("11111111-1111-1111-2222-444444444444"),
})
// Confirm that Seam supports the desired HVAC mode for the thermostat.
// In this example, we're simulating having set the thermostat to heat mode.
if *thermostat.CanHvacHeat {
// Perform the simulated HVAC mode adjustment.
client.Thermostats.Simulate.HvacModeAdjusted(
context.Background(),
&api.ThermostatsSimulateHvacModeAdjustedRequest{
DeviceId: thermostat.DeviceId,
HvacMode: api.HvacModeSettingHeat.Ptr(),
HeatingSetPointFahrenheit: 68,
},
)
}
if uErr != nil {
return uErr
}
return nilOutput:
voidSimulate Reaching a Desired Temperature
The /thermostats/simulate/temperature_reached endpoint enables you to simulate the thermostat reaching a specified temperature. This simulation is helpful for testing that your app is receiving thermostat events correctly, such as thermostat.temperature_changed and thermostat.temperature_reached_set_point.
Specify the desired temperature that you want to simulate the thermostat reaching using either of the following parameters:
temperature_celsiustemperature_fahrenheit
To simulate reaching a desired temperature:
Code:
# Get the device.
thermostat = seam.devices.get(
device_id="11111111-1111-1111-2222-444444444444"
)
# Simulate reaching the specified temperature.
seam.thermostats.simulate.temperature_reached(
device_id = thermostat.device_id,
temperature_celsius = 25
)Output:
NoneCode:
# Get the device.
thermostat=$(
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/devices/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"device_id": "11111111-1111-1111-2222-444444444444"
}')
# Simulate reaching the specified temperature.
curl -X 'POST' \
'https://connect.getseam.com/thermostats/simulate/temperature_reached' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d "{
\"device_id\": \"$(jq -r '.device.device_id' <<< ${thermostat})\",
\"temperature_celsius\": 25
}"Output:
{
"ok": true
}Code:
// Get the device.
const thermostat = await seam.devices.get({
device_id: "11111111-1111-1111-2222-444444444444"
});
// Simulate reaching the specified temperature.
await seam.thermostats.simulate.temperatureReached({
device_id: thermostat.device_id,
temperature_celsius: 25
});Output:
voidCode:
# Get the device.
thermostat = client.devices.get(device_id: "11111111-1111-1111-2222-444444444444")
# Simulate reaching the specified temperature.
client.thermostats.simulate.temperature_reached(
device_id: thermostat.device_id,
temperature_celsius: 25
)Output:
nilCode:
// Get the device.
$thermostat = $seam->devices->get(device_id: "11111111-1111-1111-2222-444444444444");
// Simulate reaching the specified temperature.
$seam->thermostats->simulate->temperature_reached(
device_id: $thermostat->device_id,
temperature_celsius: 25
);Output:
voidCode:
// Get the device.
Device thermostat = seam.Devices.Get(deviceId: "11111111-1111-1111-2222-444444444444");
// Simulate reaching the specified temperature.
seam.Thermostats.Simulate.TemperatureReached(
deviceId: thermostat.DeviceId,
temperatureCelsius: 25
);Output:
voidCode:
// Get the device.
Device thermostat = seam.devices()
.get(DevicesGetRequest.builder()
.deviceId("11111111-1111-1111-2222-444444444444")
.build());
// Simulate reaching the specified temperature.
seam.thermostats().simulate()
.temperatureReached(ThermostatsSimulateTemperatureReachedRequest.builder()
.deviceId(thermostat.getDeviceId())
.temperatureCelsius(25)
.build());Output:
voidCode:
// Get the device.
thermostat, uErr := client.Devices.Get(
context.Background(),
&api.DevicesGetRequest{
DeviceId: api.String("11111111-1111-1111-2222-444444444444"),
})
// Simulate reaching the specified temperature.
client.Thermostats.Simulate.TemperatureReached(
context.Background(),
&api.ThermostatsSimulateTemperatureReachedRequest{
DeviceId: thermostat.DeviceId,
TemperatureCelsius: 25,
})
if uErr != nil {
return uErr
}
return nilOutput:
voidLast updated
Was this helpful?

