Skip to main content

Overview

The shared bucket is the primary bucket for thermostat control. It holds the active temperature setpoint, HVAC mode, and current conditions. This is the bucket you read and write most often. Object key: shared.{serial}
Direction: Bidirectional
Revision type: if_object_revision (conditional write — unique among all buckets)

Conditional Writes

The shared bucket is the only bucket that uses conditional writes. When the device sends a PUT with if_object_revision, it expects the server to validate that this revision matches the current stored revision before accepting the write. This prevents the device from overwriting a temperature change the server pushed while the device was preparing its own PUT. All other buckets use base_object_revision (unconditional). When a conditional write fails, return 200 OK with the current {object_revision, object_timestamp, object_key} so the device can reconcile. Never include a value field in the response.

Fields


target_change_pending — Display Wake

When you push a temperature change to a sleeping device, the device wakes and applies the new setpoint — but the physical display stays off unless you also set target_change_pending: true. Set target_change_pending: true when changing:
  • target_temperature
  • target_temperature_high
  • target_temperature_low
Don’t set it when changing:
  • target_temperature_type (mode changes have separate display handling)
  • schedule_mode
  • Any field in the device or structure buckets
Acknowledgment flow:
  1. Server pushes target_temperature + target_change_pending: true
  2. Device wakes, applies temperature, lights the display
  3. Device sends PUT with target_change_pending: false
  4. Server accepts false and does not push true again
If you keep pushing target_change_pending: true after the device cleared it, the display keeps cycling — never accept the device’s false and you get an update loop.

touched_by — Change Source Tracking

The touched_by object tells the device what caused the last temperature change. The device uses it to show “Holding until…” after a manual dial turn.
Set touched_at to the current Unix timestamp in seconds (not ms). Set touched_tzo to the device’s UTC offset in seconds.
The device does not include touched_by in its own temperature PUTs. Your server is responsible for setting this field when pushing temperature changes.

target_temperature vs Schedule Setpoints

target_temperature in the shared bucket can be overwritten by:
  • Schedule transitions (device evaluates schedule locally on its own timer)
  • Manual dial turns
  • Cloud pushes from your server
Critical: If your server pushes a stale target_temperature value that differs from what the device currently has, the device treats it as a new manual override — canceling the current schedule-derived setpoint. Best practice: Only push target_temperature when you have a genuine user-initiated change. Do not echo back the last known value on every subscribe response.

Example: Push Temperature Change