Skip to main content

A simple Python SDK for the Netatmo Energy API (thermostats).

Project description

netatmo-energy

Setup

  1. Create an app at dev.netatmo.com to get your API credentials
  2. Either create a .env file:
CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secret
ACCESS_TOKEN=your_access_token
REFRESH_TOKEN=your_refresh_token

of pass in the vars to Thermostat(client_id, client_secret, access_token, refresh_token) when initializing the API client.

Usage

t = Thermostat()
hd = t.homesdata()
home_id = hd.homes[0].id
room_id = hd.homes[0].rooms[0].id

# Get current status
t.room_temperatures(home_id)
[{'room_id': '3352988001',
  'temperature': 21.7,
  'setpoint': 21.5,
  'setpoint_mode': 'manual'}]
# Set room to 20°C for 1 hour
t.setroomthermpoint(home_id, room_id, mode='manual', temp=21, endtime=int(time())+3600)
{'status': 'ok', 'time_server': 1767753063}
t.room_temperatures(home_id)
[{'room_id': '3352988001',
  'temperature': 21.7,
  'setpoint': 21,
  'setpoint_mode': 'manual'}]
# Get temperature history
r = t.getroommeasure(home_id, room_id)[0]
list(r), r['value'][:3]
(['beg_time', 'step_time', 'value'], [[22.2], [22.2], [22.1]])

Methods

  • homesdata() — get homes and topology
  • homestatus(home_id) — current device status
  • room_temperatures(home_id) — quick view of all room temps
  • getroommeasure(home_id, room_id, ...) — temperature history
  • setroomthermpoint(home_id, room_id, mode, ...) — set room temperature
  • setthermmode(home_id, mode) — set home mode (schedule/away/hg)
  • getmeasure(device_id, ...) — boiler history
  • createnewhomeschedule(...) — create weekly schedule
  • synchomeschedule(...) — modify schedule
  • switchhomeschedule(home_id, schedule_id) — activate schedule

Thermostat Widget

The library includes a ready-to-use FastHTML/MonsterUI thermostat widget for building web dashboards. Use setup_thermostat_widget() to register the routes and get the widget component:

app, rt = fast_app()
t = Thermostat()

# Get your home and room IDs
homes = t.homesdata()
home_id = homes.homes[0].id
room_id = homes.homes[0].rooms[0].id

# Setup widget (registers /setpoint route and returns the component)
climate_widget = setup_thermostat_widget(rt, t, home_id, room_id)

@rt("/")
def get():
    return climate_widget

Thermostat Widget

The widget displays current temperature, target setpoint with +/- controls, and a temperature history chart. Clicking the controls makes HTMX requests to adjust the thermostat in real-time.

Note: the widget uses MonsterUI’s ApexCharts so you will have to include this in your headers Theme.blue.headers(apex_charts=True)

Dashboard

The main.py file includes a fully functional dashboard app with Google OAuth authentication, ready to be deployed. The solar energy widget is a placeholder—only the climate/thermostat functionality is connected to the Netatmo API.

Deployment was done using pla.sh and is documented in the nbs/00_core.ipynb notebook.

Dashboard

The house thumbnail was generated by copy-pasting a Google Maps screenshot into Gemini Nano Banana with this prompt:

Present a clear, 45° top-down isometric miniature 3D cartoon scene of [LOCATION], featuring its most iconic landmarks and architectural elements. Use soft, refined textures with realistic PBR materials and gentle, lifelike lighting and shadows. Integrate the current weather conditions directly into the city environment to create an immersive atmospheric mood. Use a clean, minimalistic composition with a soft, solid-colored background.

Background

Inspired by Andrej Karpathy’s tweet about using Claude Code for home automation. Instead of burning tokens on network scanning, this takes the “boring” approach: read the docs, write a simple SDK.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netatmo_thermostat-0.0.2.tar.gz (22.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

netatmo_thermostat-0.0.2-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file netatmo_thermostat-0.0.2.tar.gz.

File metadata

  • Download URL: netatmo_thermostat-0.0.2.tar.gz
  • Upload date:
  • Size: 22.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for netatmo_thermostat-0.0.2.tar.gz
Algorithm Hash digest
SHA256 15dbb59685462d0128c73993a1b9117737bd0ec00e2c6c71ad90aec2da0c6ba5
MD5 370f37838d7a848eea8b55ad56c87b8e
BLAKE2b-256 928cd8828b95d4fc9ccc158d7e93168806d431942bab6f5c9b06b4c166d80b73

See more details on using hashes here.

File details

Details for the file netatmo_thermostat-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for netatmo_thermostat-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a9bbaf10a3a90a2c5666aa4a609e3cfbf616c6bb10748d0ca2efe99f93ae83ae
MD5 136a30b2b9b240d17ee39ad7463feb23
BLAKE2b-256 3e3b934559bd5f353db2743ca8e4e627b605d97c26b80e19b2e54c2a04ab463a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page