Summary
Wi-Fi thermostat with HTTP REST API. Device operates as HTTP server; clients poll GET /tstat for state and POST JSON to update operating mode, temperature setpoints, fan settings, and auxiliary parameters. No authentication required.
Transport
protocols:
- http
addressing:
base_url: http://{ip_address}/tstat
auth:
type: none
Traits
- powerable
- queryable
- levelable
Actions
- id: get_tstat
label: Get Thermostat State
kind: query
params: []
- id: set_tstat
label: Update Thermostat State
kind: action
params:
- name: tmode
type: integer
description: Operating mode (0=OFF, 1=HEAT, 2=COOL, 3=AUTO)
- name: t_heat
type: float
description: Heat setpoint in degrees F (temporary target)
- name: t_cool
type: float
description: Cool setpoint in degrees F (temporary target)
- name: fmode
type: integer
description: Fan mode (0=AUTO, 1=AUTO/CIRCULATE, 2=ON)
- name: hold
type: integer
description: Hold status (0=disabled, 1=enabled)
- name: override
type: integer
description: Temporary override (0=disabled)
- name: a_mode
type: integer
description: Absolute target mode (0=disable, 1=enable)
- id: set_tmode
label: Set Thermostat Operating Mode
kind: action
params:
- name: mode
type: integer
description: "0=OFF, 1=HEAT, 2=COOL, 3=AUTO"
- id: set_fmode
label: Set Fan Operating Mode
kind: action
params:
- name: mode
type: integer
description: "0=AUTO, 1=AUTO/CIRCULATE, 2=ON"
- id: set_hold
label: Set Hold Status
kind: action
params:
- name: state
type: integer
description: "0=disabled, 1=enabled"
- id: set_t_heat
label: Set Heat Setpoint (Temporary)
kind: action
params:
- name: temperature
type: float
description: Target temperature in degrees F
- id: set_t_cool
label: Set Cool Setpoint (Temporary)
kind: action
params:
- name: temperature
type: float
description: Target temperature in degrees F
- id: set_it_heat
label: Set IT Heat Setpoint
kind: action
params:
- name: temperature
type: float
description: Heat setpoint that does not auto-switch mode
- id: set_it_cool
label: Set IT Cool Setpoint
kind: action
params:
- name: temperature
type: float
description: Cool setpoint that does not auto-switch mode
- id: set_a_heat
label: Set Absolute Heat Setpoint
kind: action
params:
- name: temperature
type: float
description: Absolute heat target in degrees F
- id: set_a_cool
label: Set Absolute Cool Setpoint
kind: action
params:
- name: temperature
type: float
description: Absolute cool target in degrees F
- id: set_a_mode
label: Set Absolute Target Mode
kind: action
params:
- name: mode
type: integer
description: "0=disable, 1=enable"
- id: set_program_mode
label: Set Program Mode
kind: action
params:
- name: mode
type: integer
description: "0=Program A, 1=Program B, 2=Vacation, 3=Holiday"
- id: set_time
label: Set Thermostat Time
kind: action
params:
- name: day
type: integer
description: Day of week (0=Monday, 6=Sunday)
- name: hour
type: integer
description: Hours since midnight (0-23)
- name: minutes
type: integer
description: Minutes since start of hour (0-59)
- id: get_program_day
label: Get Program for Day
kind: query
params:
- name: mode
type: string
description: "heat or cool"
- name: day
type: string
description: "mon, tue, wed, thu, fri, sat, sun"
- id: get_program_week
label: Get Week Program
kind: query
params:
- name: mode
type: string
description: "heat or cool"
- id: set_program_day
label: Set Program for Day
kind: action
params:
- name: mode
type: string
description: "heat or cool"
- name: day
type: string
description: "mon, tue, wed, thu, fri, sat, sun"
- name: schedule
type: object
description: JSON array of [minutes, temperature] pairs
- id: get_model
label: Get Thermostat Model
kind: query
params: []
- id: set_energy_led
label: Set Energy LED
kind: action
params:
- name: state
type: integer
description: "0=Off, 1=Green, 2=Yellow, 4=Red"
- id: write_uma
label: Write User Messaging Area
kind: action
params:
- name: line
type: integer
description: "0 or 1"
- name: message
type: string
description: Message string to display
- id: write_pma
label: Write Price Messaging Area
kind: action
params:
- name: line
type: integer
description: "0, 1, 2, or 3"
- name: message
type: string
description: Numeric string to display
- name: mode
type: integer
description: "0=Disable, 2=Enable"
- id: set_remote_temp
label: Set Remote Temperature
kind: action
params:
- name: temp
type: integer
description: Temperature value in degrees F (auto-enables remote mode)
- id: disable_remote_temp
label: Disable Remote Temperature Mode
kind: action
params: []
- id: set_lock_mode
label: Set Lock Mode
kind: action
params:
- name: mode
type: integer
description: "0=disabled, 1=partial, 2=full, 3=utility"
- id: set_simple_mode
label: Set Simple Mode
kind: action
params:
- name: mode
type: integer
description: "1=normal, 2=simple"
- id: set_save_energy
label: Set Save Energy Mode
kind: action
params:
- name: mode
type: integer
description: "0=disable, 1=enable"
- name: type
type: integer
description: "1=Adjust target by delta, 2=Least consuming, 3=Absolute setpoint"
- name: delta
type: float
description: Temperature delta (1-9 degrees F, 0.5 increments)
- id: set_temp_swing
label: Set Temperature Swing
kind: action
params:
- name: value
type: float
description: Swing range 0.5 to 3.0 degrees F (0.5 increments)
- id: set_night_light
label: Set Night Light Intensity
kind: action
params:
- name: intensity
type: integer
description: "0=off, 1=25%, 2=50%, 3=75%, 4=100%"
- id: set_cool_diff
label: Set Cool Temperature Differential
kind: action
params:
- name: diff
type: float
description: Differential 2.0 to 6.0 degrees F (1.0 increments)
- id: set_heat_diff
label: Set Heat Temperature Differential
kind: action
params:
- name: diff
type: float
description: Differential 2.0 to 6.0 degrees F (1.0 increments)
- id: set_stage_delay
label: Set Stage Delay
kind: action
params:
- name: minutes
type: integer
description: Delay in minutes (0-60)
- id: set_fan_ctime
label: Set Fan Circulation Time
kind: action
params:
- name: minutes
type: integer
description: Circulation time in minutes (1-9)
- id: set_thumidity
label: Set Humidifier Setpoint
kind: action
params:
- name: value
type: float
description: Humidity % (0-100)
- id: set_humidifier_mode
label: Set Humidifier Mode
kind: action
params:
- name: mode
type: integer
description: "0=off, 1=heat only, 2=humidity anytime"
- id: set_dehumidifier
label: Set Dehumidifier (CT80 only)
kind: action
params:
- name: mode
type: integer
description: "0=off, 1=on with fan, 2=on without fan"
- name: setpoint
type: integer
description: Relative humidity 20-90%
- id: set_ext_dehumidifier
label: Set External Dehumidifier (CT80 only)
kind: action
params:
- name: mode
type: integer
description: "0=off, 1=Humidistat, 2=Always with AC"
- name: setpoint
type: integer
description: Relative humidity 20-90%
- id: set_time_format
label: Set Time Format
kind: action
params:
- name: format
type: integer
description: "1=12 hour AM/PM, 2=24 hour"
- id: set_air_baffle
label: Set Air Baffle Mode
kind: action
params:
- name: mode
type: integer
description: "0=closed, 1=temporary open, 2=permanent open (radio only)"
- id: get_sys
label: Get System Info
kind: query
params: []
- id: get_sys_services
label: Get Services List
kind: query
params: []
- id: set_sys_name
label: Set System Name
kind: action
params:
- name: name
type: string
description: Descriptive system name
- id: reboot
label: Reboot System
kind: action
params:
- name: command
type: string
description: Must be "reboot"
- id: set_sys_mode
label: Set System Mode
kind: action
params:
- name: mode
type: integer
description: "0=provisioning, 1=normal"
- id: get_sys_network
label: Get Network Configuration
kind: query
params: []
Feedbacks
- id: tstat_response
type: object
fields:
temp: float
tmode: integer
fmode: integer
override: integer
hold: integer
t_heat: float
t_cool: float
time: object
- id: sys_response
type: object
fields:
uuid: string
api_version: integer
fw_version: string
wlan_fw_version: string
- id: success
type: enum
values:
- 0
- id: error
type: enum
values:
- -1
- id: error_msg
type: string
values:
- "Invalid HTTP API"
Variables
- id: temp
type: float
description: Current temperature in degrees F
- id: tmode
type: integer
description: Operating mode (0=OFF, 1=HEAT, 2=COOL, 3=AUTO)
- id: fmode
type: integer
description: Fan mode (0=AUTO, 1=AUTO/CIRCULATE, 2=ON)
- id: hold
type: integer
description: Hold status (0=disabled, 1=enabled)
- id: tstate
type: integer
description: HVAC operating state (0=OFF, 1=HEAT, 2=COOL)
- id: fstate
type: integer
description: Fan operating state (0=OFF, 1=ON) - CT-30 only
- id: humidity
type: float
description: Current relative humidity 0-100%
- id: program_mode
type: integer
description: "0=Program A, 1=Program B, 2=Vacation, 3=Holiday"
- id: ttarget
type: integer
description: Current target operating mode (0=Off, 1=Heat, 2=Cool)
- id: override
type: integer
description: Temporary override status (0=disabled)
- id: remote_temp_mode
type: integer
description: Remote temperature mode (1=enabled, 0=disabled)
- id: remote_temp_value
type: integer
description: Remote temperature value in degrees F
- id: lock_mode
type: integer
description: "0=disabled, 1=partial, 2=full, 3=utility"
- id: simple_mode
type: integer
description: "1=normal, 2=simple"
- id: energy_led
type: integer
description: "0=Off, 1=Green, 2=Yellow, 4=Red"
- id: night_light
type: integer
description: "0=off, 1=25%, 2=50%, 3=75%, 4=100%"
- id: temp_swing
type: float
description: Temperature swing range (0.5-3.0 degrees F)
- id: cool_differential
type: float
description: Cool differential (2.0-6.0 degrees F)
- id: heat_differential
type: float
description: Heat differential (2.0-6.0 degrees F)
- id: stage_delay
type: integer
description: Stage delay in minutes (0-60)
- id: fan_circulation_time
type: integer
description: Fan circulation time in minutes (1-9)
- id: humidifier_setpoint
type: float
description: Humidifier setpoint (% RH)
- id: humidifier_mode
type: integer
description: "0=off, 1=heat only, 2=humidity anytime"
- id: dehumidifier_mode
type: integer
description: "0=off, 1=on with fan, 2=on without fan"
- id: dehumidifier_setpoint
type: integer
description: Dehumidifier setpoint (20-90% RH)
- id: ext_dehumidifier_mode
type: integer
description: "0=off, 1=Humidistat, 2=Always with AC"
- id: ext_dehumidifier_setpoint
type: integer
description: External dehumidifier setpoint (20-90% RH)
- id: time_format
type: integer
description: "1=12 hour AM/PM, 2=24 hour"
- id: baffle_mode
type: integer
description: "0=closed, 1=temporary open, 2=permanent open"
- id: save_energy_mode
type: integer
description: "0=disabled, 1=enabled"
- id: save_energy_type
type: integer
description: "1=Adjust target by delta, 2=Least consuming, 3=Absolute setpoint"
- id: save_energy_delta
type: float
description: Save energy temperature delta (1-9 degrees F)
- id: hvac_settings
type: object
description: HVAC configuration (pump, aux_type, stages)
- id: system_name
type: string
description: Descriptive system name
- id: system_mode
type: integer
description: "0=provisioning, 1=normal"
- id: network_config
type: object
description: Network configuration (ssid, ipaddr, mask, gw, dns, rssi)
Events
# UNRESOLVED: no unsolicited notifications documented; device only responds to HTTP requests
Macros
# UNRESOLVED: no explicit multi-step macros documented
Safety
confirmation_required_for: []
interlocks: []
Notes
CT80 Rev B supports all features. Rev A lacks humidifier/dehumidifier, program mode, and advanced scheduling features. CT-30 lacks fan state, humidifier, and most advanced features. Override status behavior differs across firmware versions — Rev A reports override as 0 even when active. API version 113, firmware 1.04.82 required. Web server is single-threaded; process connections serially. Chunked encoding not supported.
Provenance
source_domains:
- github.com
source_urls:
- https://github.com/brannondorsey/radio-thermostat/raw/master/RTCOAWiFIAPIV1_3.pdf
- https://github.com/brannondorsey/radio-thermostat
retrieved_at: 2026-05-27T14:58:32.836Z
last_checked_at: 2026-05-31T07:05:35.657Z
Verification Summary
verdict: verified
checked_at: 2026-05-31T07:05:35.657Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 spec actions match source endpoints exactly; transport parameters verified; comprehensive HTTP REST API coverage confirmed. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "specific TCP port number not stated; device uses DHCP for IP assignment"
- "no unsolicited notifications documented; device only responds to HTTP requests"
- "no explicit multi-step macros documented"
- "TCP port number not stated in source — device uses DHCP for IP assignment"
- "unsolicited event notifications not documented — polling model only"
- "binary protocol encodings not applicable — JSON over HTTP"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0