Support

Help with Hearth: Room Thermostat, the app for Daikin, Amana and Goodman smart thermostats, and thermostats Home Assistant runs.

Contact

Questions, problems or feedback? Email contact@meethearth.app and we'll get back to you.

Delete your account

In Hearth, open Settings and choose Delete account. A member leaves their home; a home's admin deletes the home, its history and everyone's access with it. See what's deleted.

Hearth Autopilot

Hearth Autopilot is the switch in Settings (anyone in the home can use it; it asks before changing). With it on, Hearth sets the thermostat to reach your rooms' targets and runs your schedule itself. On a Daikin, Amana or Goodman thermostat it turns off the thermostat's own schedule; through Home Assistant, turn the thermostat's own schedule off yourself. With it off, Hearth only watches: your schedule pauses, the Thermostat page mirrors the thermostat, and the thermostat and its own app are in full control.

With Autopilot on, a change made at the thermostat or in its own app is handled as chosen in Manage home, under When the thermostat is changed outside of Hearth: Leave it for a while (the default: Hearth waits before going back to its plan, 2 hours unless set otherwise under How long to leave it, and each further change restarts the wait) or Make it the new target.

Having your system serviced? Switch Autopilot off for the visit, so the thermostat is fully in the technician's hands, and back on once they're done.

Sensors

Room sensors let Hearth aim for the temperature where you are, not just where the thermostat is. A home has up to 10 sensors, from any mix of the sources below.

Each built-in source's page has its setup steps; in Hearth, the home's admin connects it in Settings, then Manage home, then Sensors.

However they arrive, sensors are never added on their own. Each sensor Hearth hears from shows up under its source in Manage home, then Sensors, with Add. Add it, name it for the room it measures, and it gets a room of its own, not controlled by the thermostat yet. Tap the sensor to have the thermostat control its room, mark it as the sensor beside the thermostat (Hearth checks the thermostat's own reading against it, and follows it when the room you're following goes quiet), rename it or remove it. Removing a sensor keeps its history, and you can add it again while it still sends readings.

A sensor its source marks as outdoor (an Ambient Weather station's outdoor sensor, or "kind": "outdoor" below) is added as the home's outdoor sensor instead of a room, shown on History. A home has one; remove it to add another.

Without an outdoor sensor, History's outdoor lines are your thermostat's own outdoor reading, if it reports one, else the weather at the home's location (set in Manage home, under Home location) in the US. Without any of these, History simply has no outdoor lines.

Something not working with a sensor or its source? Email contact@meethearth.app with the source's name and what Manage home shows for it under Sensors.

Hearth API

Everything below is for developers sending readings from sensors Hearth doesn't connect to directly.

1. Get your home's key

In Hearth, the home's admin opens Settings, then Manage home, then Sensors, taps Other sensors (Hearth API) and taps Create key. Hearth shows it once; keep it somewhere safe. Replacing the key stops the old one working, and turning the Hearth API off removes the sensors added from it. Demo homes don't have one.

2. Send readings

Post JSON to:

https://api.meethearth.app/v1/readings

with the header Authorization: Bearer YOUR_KEY. Send each sensor's latest reading about once a minute; more often doesn't help. A room stops using a sensor after 10 minutes without a reading (the admin can change this in Manage home).

{
  "source": "garage-hub",
  "name": "the garage hub",
  "sensors": [
    {"id": "office", "name": "Office", "temperature": 70.7, "unit": "F", "humidity": 45, "battery": "ok"},
    {"id": "nursery", "name": "Nursery", "temperature": 21.5, "time": 1791070000}
  ]
}
FieldMeaning
sourceOptional. What is sending: any text up to 128 characters, the same every time. Hearth tells you when a source with added sensors sends nothing for 10 minutes. Names of built-in integrations (such as ambient) are reserved. Default: api.
nameOptional. How Hearth names the source, such as "the garage hub" (up to 40 characters).
sensors[].idRequired. Each sensor's own id, the same every time: any text up to 128 characters, such as the device id its maker uses.
sensors[].nameOptional. Suggested as the sensor's name when it's added (up to 40 characters). After that, the name is the one set in Hearth.
sensors[].kindOptional. "room" (the default) or "outdoor": an outdoor sensor is added as the home's outdoor sensor, not a room.
temperatureA number. unit is "C" (the default) or "F".
humidityRelative humidity, 0 to 100.
battery"ok", "low", or a percentage (20 or less is low).
timeWhen it was read: seconds since 1970, or an ISO 8601 time, within the last day and not in the future (10 minutes' leeway for clocks). Default: now. A post no newer than the source's last post is ignored.

Only sensors that report a temperature can be added. Include every measure a sensor has (humidity, battery) before it's added; measures added later aren't picked up. Send at most 10 sensors per post, in at most 64 KB.

3. Add the sensors in Hearth

After the first post, each sensor shows up in Manage home, then Sensors, under Other sensors (Hearth API), with Add. Until a sensor is added, Hearth doesn't keep its readings. A sensor that stops sending drops off the list after a day.

Responses

StatusMeaning
204Read. Every sensor in the post is added, or there was nothing to keep (a reading no newer than the source's last is skipped).
200Read, but some sensors aren't added yet. The body names them: {"not_added": ["garage-hub:nursery"]}, each as source:sensor (escaped as in SenML below). The added ones' readings were kept.
422None of the sensors in the post are added yet, so nothing was kept. The body says which ones to add in Hearth.
400The post can't be read, or a reading's time is outside the last day (or more than 10 minutes ahead); the body says why as text.
401The key isn't one Hearth knows.
403The key belongs to a demo home, which can't take readings.
405Anything but POST.
413The post is over 64 KB.
429Too many posts: a home may send 12 at once, then 6 a minute. Wait the seconds the Retry-After header gives.

Every 2xx, 400 and 422 answer carries a Hearth-Home header: the home's id, the same whatever its key. A new key for the same home answers with the same id.

Example

curl -X POST "https://api.meethearth.app/v1/readings" \
  -H "Authorization: Bearer $HEARTH_KEY" \
  -H "Content-Type: application/json" \
  -d '{"sensors": [{"id": "office", "name": "Office", "temperature": 21.4}]}'

SenML

If your bridge already produces SenML (RFC 8428, a standard JSON format for sensor readings), it can post that instead of the JSON above: same address, same key. Most bridges should use the JSON above. A SenML post is an array of records, each named source:sensor.measure. This sends the same reading as the office example, from the source garage-hub:

[
  {"bn": "garage-hub:", "bt": 1791070000, "n": "office.temperature", "u": "Cel", "v": 21.4},
  {"n": "office.humidity", "u": "%RH", "v": 45},
  {"n": "office.battery", "u": "%EL", "v": 80}
]

The measures are temperature (unit Cel, °C only), humidity (%RH) and battery (%EL, a percentage). Records with other units or names are ignored. A pack holds at most 100 records, each read within the last day (10 minutes' leeway ahead). SenML can't carry names, so a new sensor is suggested a name made from its id. Because : and . separate the parts of a name, write them inside an id as %3A and %2E (and % as %25); Hearth reads them back as sent.