<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>tado &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/tado/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Fri, 20 Feb 2026 08:40:51 +0000</lastBuildDate>
	<language>en-GB</language>
	<copyright>© Terence Eden. 🄯 CC BY-SA. See https://shkspr.mobi/blog/copyright-and-copyleft/</copyright>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>tado &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Two years of home heating data]]></title>
		<link>https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/</link>
					<comments>https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Wed, 20 Feb 2019 08:14:07 +0000</pubDate>
		<category><![CDATA[data]]></category><category><![CDATA[Open Data]]></category><category><![CDATA[Smart Home]]></category><category><![CDATA[tado]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=31458</guid>

					<description><![CDATA[I have a Tado smart thermostat - part of my smarthome project.  As well as letting me set the temperature from my phone, it records environmental data, and provides a handy API for me to retrieve it.  This blog post will show you why I&#039;ve gathered the data, let you download the full dataset, and explain what I learned from it.  Why do this?  There&#039;s a long-standing plan to use waste-heat from a…]]></description>
										<content:encoded>&lt;p&gt;I have a Tado smart thermostat - part of my &lt;a href="https://shkspr.mobi/blog/tag/smart-home/"&gt;smarthome project&lt;/a&gt;.  As well as letting me set the temperature from my phone, it records environmental data, and &lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/"&gt;provides a handy API&lt;/a&gt; for me to retrieve it.&lt;/p&gt;

&lt;p&gt;This blog post will show you why I've gathered the data, let you download the full dataset, and explain what I learned from it.&lt;/p&gt;

&lt;h2 id="why-do-this"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/#why-do-this"&gt;Why do this?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;There's a long-standing plan to &lt;a href="https://www.oxfordtimes.co.uk/news/15264567.Supermarket_freezers_could_heat_homes_in_new___2_5m_scheme/"&gt;use waste-heat from a nearby supermarket&lt;/a&gt; to provide communal heat to our neighbourhood.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;A low temperature heat main would connect directly to the chillers at the superstore via a heat recovery unit and circulate ~25° hot water around the neighbourhood. The homes will symbiotically draw on the waste heat produced by the supermarket.&lt;/p&gt;

&lt;p&gt;A heat pump would be installed in each household, as a replacement to their existing gas boiler.&lt;/p&gt;

&lt;p&gt;The properties will use the existing radiators to run their heating longer but at a lower temperature in order to deliver the same level of thermal comfort.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rosehillnewsonline.files.wordpress.com/2017/03/bioregional-ucef-report-feb-2017-r.pdf"&gt;Bioregional's Rose Hill renewable energy feasibility study&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;In order to assess whether this is feasible, we need to understand heating demand.&lt;/p&gt;

&lt;h2 id="graph-it-up"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/#graph-it-up"&gt;Graph it up!&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;This graph shows February 14th 2017 - 2019.  The green graph line is the temperature inside my house.  The blue graph line is the external temperature as measured by a local weather sensor in Oxford.  The vertical lines represent when the heating was on - with yellow, orange, and red representing low-demand, medium-demand, and high-demand.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/2-years-full-fs8.png"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2019/02/2-years-full-fs8.png" alt="A complicated graph." width="1366" height="705" class="aligncenter size-full wp-image-31469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fairly obviously, heating demand is highest in winter - but it surprised me just how late it starts.&lt;/li&gt;
&lt;li&gt;Internal temperature doesn't vary as much as external.&lt;/li&gt;
&lt;li&gt;Even in the depth of winter, with the heating off, the house didn't drop bellow 10°C. That's pretty good insulation!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="zoom"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/#zoom"&gt;Zoom!&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Let's zoom in on December 2018 (tap for bigger):
&lt;a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/December-2018-fs8.png"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2019/02/December-2018-fs8.png" alt="Another graph." width="1366" height="705" class="aligncenter size-full wp-image-31471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We were away over the holidays, so the heating was set to stay off - unless the internal reading was under 10°C. Luckily, that didn't happen!&lt;/p&gt;

&lt;p&gt;You can also see how rapidly the house cools when the external temperature drops.&lt;/p&gt;

&lt;p&gt;Conversely, the rise in external temperature from 5 to 10 barely raised the internal temperature.&lt;/p&gt;

&lt;h2 id="enhance"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/#enhance"&gt;Enhance!&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Let's zoom in on a couple of days in December 2018.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/Dec-Days-fs8.png"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2019/02/Dec-Days-fs8.png" alt="Wibbly wobbly graphy warphy." width="1366" height="705" class="aligncenter size-full wp-image-31474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here you can see the heating demand. The theory is that Tado can use the weather forecast to see how much heat it needs to generate. I can't easily assess whether it works in practice, but there are a few instances where the heating cuts off before the house reaches the target temperature. Presumably because it know the environment will provide the rest of the thermal energy.&lt;/p&gt;

&lt;h2 id="get-the-data"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/#get-the-data"&gt;Get The Data!&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;There are two datasets available.  Both are being released under &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;CC BY-SA 4.0&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first is &lt;a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/2-Year-Heating-Demand-Data.csv.zip"&gt;a CSV file of heating demand (190KB).
&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2019/02/Demand-CSV-fs8.png" alt="A CSV showing demand data." width="667" height="236" class="aligncenter size-full wp-image-31478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second is &lt;a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/Heating-Data.zip"&gt;the complete Tado output (2.5MB Zip, 25MB unzipped)&lt;/a&gt;.
It is a series of daily JSON files which contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal temperature&lt;/li&gt;
&lt;li&gt;External temperature&lt;/li&gt;
&lt;li&gt;Internal humidity&lt;/li&gt;
&lt;li&gt;Whether anyone was at home&lt;/li&gt;
&lt;li&gt;What the thermostat was set to&lt;/li&gt;
&lt;li&gt;If the heating was on&lt;/li&gt;
&lt;li&gt;Heating demand&lt;/li&gt;
&lt;li&gt;When the hot water was on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to use this data for something interesting, or to make beautiful graphs. I make no claims to its accuracy or completeness.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=31458&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/02/two-years-of-home-heating-data/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Tado API Guide - updated for 2019]]></title>
		<link>https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/</link>
					<comments>https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Thu, 14 Feb 2019 12:22:17 +0000</pubDate>
		<category><![CDATA[API]]></category><category><![CDATA[hacking]]></category><category><![CDATA[IoT]]></category><category><![CDATA[Smart Home]]></category><category><![CDATA[tado]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=31397</guid>

					<description><![CDATA[Tado is a brilliant smart thermostat. But their API is very poorly documented. This is an updated guide for 2019.  I am indebted to Stephen C Phillips&#039; original documentation.  Getting started  You will need:   A Tado (duh!) Your Username (usually your email address) Your Password A Client Secret   Getting the client secret  I&#039;m using this client secret:…]]></description>
										<content:encoded>&lt;p&gt;Tado is a brilliant smart thermostat. But their API is very poorly documented. This is an updated guide for 2019.  I am indebted to &lt;a href="http://blog.scphillips.com/posts/2017/01/the-tado-api-v2/"&gt;Stephen C Phillips' original documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id="getting-started"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#getting-started"&gt;Getting started&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;You will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://amzn.to/2DyaNvb"&gt;Tado&lt;/a&gt; (duh!)&lt;/li&gt;
&lt;li&gt;Your Username (usually your email address)&lt;/li&gt;
&lt;li&gt;Your Password&lt;/li&gt;
&lt;li&gt;A Client Secret&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="getting-the-client-secret"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#getting-the-client-secret"&gt;Getting the client secret&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;I'm using this client secret:
&lt;code&gt;wZaRN7rpjn3FoNyF5IFuxg9uMzYJcvOoQ8QWiIqS3hfk6gLhVlG57j5YNoZL2Rtc&lt;/code&gt;
This secret may change in the future.  In the examples, I'll shorten it to &lt;code&gt;wZa&lt;/code&gt; to make it easier to read. You will need to use the full length secret when running this code.&lt;/p&gt;

&lt;p&gt;To get the current secret,  you can visit &lt;a href="https://my.tado.com/webapp/env.js"&gt;&lt;code&gt;https://my.tado.com/webapp/env.js&lt;/code&gt;&lt;/a&gt; and get the secret from there.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-js"&gt;var TD = {
    config: {
        version: 'v587',
        tgaRestApiEndpoint: 'https://my.tado.com/api/v1',
        tgaRestApiV2Endpoint: 'https://my.tado.com/api/v2',
        susiApiEndpoint: 'https://susi.tado.com/api',
        oauth: {
            clientApiEndpoint: 'https://my.tado.com/oauth/clients',
            apiEndpoint: 'https://auth.tado.com/oauth',
            clientId: 'tado-web-app',
            clientSecret: 'wZaRN7rpjn3FoNyF5IFuxg9uMzYJcvOoQ8QWiIqS3hfk6gLhVlG57j5YNoZL2Rtc'
        }
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If that ever changes, you will need to open your web browser's development tools, and then look in the network tab.  Then, log in to &lt;a href="https://my.tado.com/webapp/"&gt;&lt;/a&gt;&lt;a href="https://my.tado.com/webapp/"&gt;https://my.tado.com/webapp/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You should see the token:
&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2019/02/tado-token-fs8.png" alt="Debug screen of a web browser." width="464" height="353" class="aligncenter size-full wp-image-31398"&gt;&lt;/p&gt;

&lt;h2 id="get-bearer-token"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#get-bearer-token"&gt;Get Bearer Token&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;These examples use the &lt;code&gt;curl&lt;/code&gt; command on Linux.&lt;/p&gt;

&lt;p&gt;Here's how to turn your username and password into a "Bearer Token" - this is needed for every subsequent API call:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s "https://auth.tado.com/oauth/token" -d client_id=tado-web-app -d grant_type=password -d scope=home.user -d username="you@example.com" -d password="Password123" -d client_secret=wZa
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The response will be:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "access_token": "abc",
    "token_type": "bearer",
    "refresh_token": "def",
    "expires_in": 599,
    "scope": "home.user",
    "jti": "xyz-123"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The real &lt;code&gt;access_token&lt;/code&gt; will be &lt;em&gt;very&lt;/em&gt; long. I've shortened it to &lt;code&gt;abc&lt;/code&gt; make things easier to read in these examples.&lt;/p&gt;

&lt;p&gt;The access token expires after 600 seconds. You can either request a new one with the username and password, or use the provided &lt;code&gt;refresh_token&lt;/code&gt; like so:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s "https://auth.tado.com/oauth/token" -d grant_type=refresh_token -d refresh_token=def -d client_id=tado-web-app -d scope=home.user -d client_secret=wZa
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="get-your-details"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#get-your-details"&gt;Get your details&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;The next step is to get your &lt;code&gt;homeId&lt;/code&gt; - this will also be needed for subsequent API calls:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s "https://my.tado.com/api/v1/me" -H "Authorization: Bearer abc"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You'll get back your data, like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "name": "Terence Eden",
    "email": "you@example.com",
    "username": "your_user_name",
    "enabled": true,
    "id": "987654321",
    "homeId": 123456,
    "locale": "en_GB",
    "type": "WEB_USER"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Your &lt;code&gt;homeId&lt;/code&gt; is what's important here. I'm going to use the example &lt;code&gt;123456&lt;/code&gt; - you should use your own.&lt;/p&gt;

&lt;h2 id="check-it-all-works"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#check-it-all-works"&gt;Check it all works&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;This request will check that you've got the right details.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s "https://my.tado.com/api/v2/homes/123456" -H "Authorization: Bearer abc"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You'll get back information about your installation. I've redacted mine for privacy.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "id": 123456,
    "name": " ",
    "dateTimeZone": "Europe/London",
    "dateCreated": "2015-12-18T19:21:59.315Z",
    "temperatureUnit": "CELSIUS",
    "installationCompleted": true,
    "partner": " ",
    "simpleSmartScheduleEnabled": true,
    "awayRadiusInMeters": 123.45,
    "usePreSkillsApps": true,
    "skills": [],
    "christmasModeEnabled": true,
    "contactDetails": {
        "name": "Terence Eden",
        "email": " ",
        "phone": " "
    },
    "address": {
        "addressLine1": " ",
        "addressLine2": null,
        "zipCode": " ",
        "city": " ",
        "state": null,
        "country": "GBR"
    },
    "geolocation": {
        "latitude": 12.3456789,
        "longitude": -1.23456
    },
    "consentGrantSkippable": true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="get-your-data"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#get-your-data"&gt;Get your data&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;OK, here's where the fun begins. This gets the data about your installation - including firmware details, device names, etc.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s "https://my.tado.com/api/v2/homes/123456/zones" -H "Authorization: Bearer abc"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here's what you get back - I've redacted some of my details.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;[{
    "id": 1,
    "name": "Heating",
    "type": "HEATING",
    "dateCreated": "2015-12-21T15:46:45.000Z",
    "deviceTypes": ["RU01"],
    "devices": [{
        "deviceType": "RU01",
        "serialNo": " ",
        "shortSerialNo": " ",
        "currentFwVersion": "54.8",
        "connectionState": {
            "value": true,
            "timestamp": "2019-02-13T19:30:52.733Z"
        },
        "characteristics": {
            "capabilities": ["INSIDE_TEMPERATURE_MEASUREMENT", "IDENTIFY", "OPEN_WINDOW_DETECTION"]
        },
        "batteryState": "NORMAL",
        "duties": ["ZONE_UI", "ZONE_LEADER"]
    }],
    "reportAvailable": false,
    "supportsDazzle": true,
    "dazzleEnabled": true,
    "dazzleMode": {
        "supported": true,
        "enabled": true
    },
    "openWindowDetection": {
        "supported": true,
        "enabled": true,
        "timeoutInSeconds": 1800
    }
}, {
    "id": 0,
    "name": "Hot Water",
    "type": "HOT_WATER",
    "dateCreated": "2016-10-03T11:31:42.272Z",
    "deviceTypes": ["BU01", "RU01"],
    "devices": [{
        "deviceType": "BU01",
        "serialNo": " ",
        "shortSerialNo": " ",
        "currentFwVersion": "49.4",
        "connectionState": {
            "value": true,
            "timestamp": "2019-02-13T19:36:17.361Z"
        },
        "characteristics": {
            "capabilities": []
        },
        "isDriverConfigured": true,
        "duties": ["ZONE_DRIVER"]
    }, {
        "deviceType": "RU01",
        "serialNo": " ",
        "shortSerialNo": " ",
        "currentFwVersion": "54.8",
        "connectionState": {
            "value": true,
            "timestamp": "2019-02-13T19:30:52.733Z"
        },
        "characteristics": {
            "capabilities": ["INSIDE_TEMPERATURE_MEASUREMENT", "IDENTIFY", "OPEN_WINDOW_DETECTION"]
        },
        "batteryState": "NORMAL",
        "duties": ["ZONE_UI", "ZONE_LEADER"]
    }],
    "reportAvailable": false,
    "supportsDazzle": false,
    "dazzleEnabled": false,
    "dazzleMode": {
        "supported": false
    },
    "openWindowDetection": {
        "supported": false
    }
}]
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="state"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#state"&gt;State&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;This command will tell you if you're home or not. Or, in other words, whether the Tado thinks you're nearby:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s https://my.tado.com/api/v2/homes/123465/state -H "Authorization: Bearer abc"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is what you'll get back if you're at home&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;{"presence":"HOME"}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="zones"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#zones"&gt;Zones&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;My Tado has two "Zones".  0 is for Hot Water, 1 is for Heating. Yours may be different.&lt;/p&gt;

&lt;h2 id="hot-water-information"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#hot-water-information"&gt;Hot Water Information&lt;/a&gt;&lt;/h2&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s https://my.tado.com/api/v2/homes/123456/zones/0/state -H "Authorization: Bearer abc"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here's information about your hot water:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "tadoMode": "HOME",
    "geolocationOverride": false,
    "geolocationOverrideDisableTime": null,
    "preparation": null,
    "setting": {
        "type": "HOT_WATER",
        "power": "OFF",
        "temperature": null
    },
    "overlayType": null,
    "overlay": null,
    "openWindow": null,
    "nextScheduleChange": {
        "start": "2019-02-13T19:00:00Z",
        "setting": {
            "type": "HOT_WATER",
            "power": "ON",
            "temperature": null
        }
    },
    "link": {
        "state": "ONLINE"
    },
    "activityDataPoints": {},
    "sensorDataPoints": {}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id="heating"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#heating"&gt;Heating&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;It's much the same for Heating information:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s https://my.tado.com/api/v2/homes/123456/zones/1/state -H "Authorization: Bearer abc"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This also gets you humidity data etc:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "tadoMode": "HOME",
    "geolocationOverride": false,
    "geolocationOverrideDisableTime": null,
    "preparation": null,
    "setting": {
        "type": "HEATING",
        "power": "ON",
        "temperature": {
            "celsius": 15.00,
            "fahrenheit": 59.00
        }
    },
    "overlayType": null,
    "overlay": null,
    "openWindow": null,
    "nextScheduleChange": {
        "start": "2019-02-13T17:30:00Z",
        "setting": {
            "type": "HEATING",
            "power": "ON",
            "temperature": {
                "celsius": 18.00,
                "fahrenheit": 64.40
            }
        }
    },
    "link": {
        "state": "ONLINE"
    },
    "activityDataPoints": {
        "heatingPower": {
            "type": "PERCENTAGE",
            "percentage": 0.00,
            "timestamp": "2019-02-13T10:19:37.135Z"
        }
    },
    "sensorDataPoints": {
        "insideTemperature": {
            "celsius": 16.59,
            "fahrenheit": 61.86,
            "timestamp": "2019-02-13T10:30:52.733Z",
            "type": "TEMPERATURE",
            "precision": {
                "celsius": 0.1,
                "fahrenheit": 0.1
            }
        },
        "humidity": {
            "type": "PERCENTAGE",
            "percentage": 57.20,
            "timestamp": "2019-02-13T10:30:52.733Z"
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="weather"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#weather"&gt;Weather&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Tado also provides you with data about the external weather:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s https://my.tado.com/api/v2/homes/123456/weather -H 'Authorization: Bearer abc'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You get back a basic weather report for your location:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "solarIntensity": {
        "type": "PERCENTAGE",
        "percentage": 68.10,
        "timestamp": "2019-02-10T10:35:00.989Z"
    },
    "outsideTemperature": {
        "celsius": 8.00,
        "fahrenheit": 46.40,
        "timestamp": "2019-02-10T10:35:00.989Z",
        "type": "TEMPERATURE",
        "precision": {
            "celsius": 0.01,
            "fahrenheit": 0.01
        }
    },
    "weatherState": {
        "type": "WEATHER_STATE",
        "value": "CLOUDY_PARTLY",
        "timestamp": "2019-02-10T10:35:00.989Z"
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="controlling-your-home"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#controlling-your-home"&gt;Controlling your home&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;It's possible to turn the heating and hot water on / off.&lt;/p&gt;

&lt;h3 id="turn-heating-on"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#turn-heating-on"&gt;Turn Heating On&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This is a &lt;code&gt;PUT&lt;/code&gt; request&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s 'https://my.tado.com/api/v2/homes/123456/zones/1/overlay' -X PUT -H 'Authorization: Bearer abc' -H 'Content-Type: application/json;charset=utf-8' --data '{"setting":{"type":"HEATING","power":"ON","temperature":{"celsius":21,"fahrenheit":69.8}},"termination":{"type":"MANUAL"}}'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Just to make it easier to read, this is the JSON data that you have to &lt;code&gt;PUT&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "setting": {
        "type": "HEATING",
        "power": "ON",
        "temperature": {
            "celsius": 21,
            "fahrenheit": 69.8
        }
    },
    "termination": {
        "type": "MANUAL"
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If it has worked, you'll get back this response:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
    "type": "MANUAL",
    "setting": {
        "type": "HEATING",
        "power": "ON",
        "temperature": {
            "celsius": 21.00,
            "fahrenheit": 69.80
        }
    },
    "termination": {
        "type": "MANUAL",
        "projectedExpiry": null
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id="end-manual-heading-mode"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#end-manual-heading-mode"&gt;End Manual Heading Mode&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This is a simple &lt;code&gt;DELETE&lt;/code&gt; command:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s 'https://my.tado.com/api/v2/homes/123456/zones/1/overlay' -X DELETE -H 'Authorization: Bearer abc'
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id="turn-on-hot-water"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#turn-on-hot-water"&gt;Turn on Hot Water&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Much the same as before&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s 'https://my.tado.com/api/v2/homes/123456/zones/0/overlay' -X PUT -H 'Content-Type: application/json;charset=utf-8' -H 'Authorization: Bearer abc'--data '{"setting":{"type":"HOT_WATER","power":"ON"},"termination":{"type":"MANUAL"}}'
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id="turn-off-hot-water"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#turn-off-hot-water"&gt;Turn off Hot Water&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Again, a &lt;code&gt;DELETE&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s 'https://my.tado.com/api/v2/homes/123456/zones/0/overlay' -X DELETE -H 'Authorization: Bearer abc' 
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="historic-information"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#historic-information"&gt;Historic Information&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;You can get a complete view of historic data with:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;curl -s 'https://my.tado.com/api/v2/homes/123456/zones/1/dayReport?date=2018-02-14' -H 'Authorization: Bearer abc' 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;date&lt;/code&gt; at the end is in ISO8601 format. You'll receive info on internal and external temperature, humidity levels, whether the heating and hot water were on, and a few other bits and bobs.&lt;/p&gt;

&lt;h2 id="whats-next"&gt;&lt;a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/#whats-next"&gt;What's Next?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;There are a bunch of other things you can do with the API, like setting a schedule etc. Sadly, I don't have time to document them all.  But this should be enough to get you detailed information, and basic control.&lt;/p&gt;

&lt;p&gt;I'd love it if someone could make OpenAPI documentation for this.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=31397&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/feed/</wfw:commentRss>
			<slash:comments>65</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The "Make Everything Better" Button]]></title>
		<link>https://shkspr.mobi/blog/2018/03/the-make-everything-better-button/</link>
					<comments>https://shkspr.mobi/blog/2018/03/the-make-everything-better-button/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Tue, 20 Mar 2018 07:49:22 +0000</pubDate>
		<category><![CDATA[tado]]></category><category><![CDATA[UI]]></category><category><![CDATA[ux]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=29182</guid>

					<description><![CDATA[Back when I used to help people design mobile phone apps, I would talk about the platonic ideal of an app.  It&#039;s quite simple and effective.    You press the button in the middle of your screen - and it makes everything better!  You push that button and a taxi arrives, or a pizza is delivered, or your photos are backed up, or you fall in love, or you learn a language.  Life is rarely that simple…]]></description>
										<content:encoded>&lt;p&gt;Back when I used to help people design mobile phone apps, I would talk about the platonic ideal of an app.  It's quite simple and effective.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2018/03/Make-Everything-Better-fs8.png" alt="A hand-drawn iPhone. In the middle is a single button which says &amp;quot;Make Everything Better&amp;quot;." width="500" height="300" class="aligncenter size-full wp-image-29183"&gt;

&lt;p&gt;You press the button in the middle of your screen - and &lt;em&gt;it makes everything better!&lt;/em&gt;  You push that button and a taxi arrives, or a pizza is delivered, or your photos are backed up, or you fall in love, or you learn a language.&lt;/p&gt;

&lt;p&gt;Life is rarely that simple - and apps are rarely that smart.  But let's look at what comes next.&lt;/p&gt;

&lt;h2 id="anticipatory-user-interfaces"&gt;&lt;a href="https://shkspr.mobi/blog/2018/03/the-make-everything-better-button/#anticipatory-user-interfaces"&gt;Anticipatory User Interfaces&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;The most boring app I have is &lt;a href="https://www.tado.com/"&gt;Tado&lt;/a&gt; - it controls my central heating.  I &lt;em&gt;never&lt;/em&gt; need to use the app!  It sits in the background requiring no interaction.  When it sees I am home, it sets the temperature accordingly.  If I'm away overnight, it doesn't bother turning on the hot water.  If it sees me travelling home, and it is cold, it pre-heats the house.&lt;/p&gt;

&lt;p&gt;Other than my initial set up, I don't have to press any buttons.  The app becomes the perfect Butler.&lt;/p&gt;

&lt;p&gt;(To clarify - this isn't about learning. Most people's lives are too chaotic for a machine to adequately learn.  We very rarely all fit the 9-to-5 grind, with 2.4 kids, and brunch every Sunday.  It's one of the problems the Nest thermostat has with its "learning" feature - and &lt;a href="https://web.archive.org/web/20180330192652/http://www.skylarkios.com/blog/2016/3/4/why-i-no-longer-use-nest-auto-away"&gt;why people disable it&lt;/a&gt; - our lives are too noisy.)&lt;/p&gt;

&lt;p&gt;The app anticipates what you need and delivers it without asking.&lt;/p&gt;

&lt;h2 id="boring-is-beautiful"&gt;&lt;a href="https://shkspr.mobi/blog/2018/03/the-make-everything-better-button/#boring-is-beautiful"&gt;Boring is Beautiful&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://shkspr.mobi/blog/2013/05/on-swearing-and-ux-antipaterns/"&gt;I don't want your app&lt;/a&gt;. But if I have to have it - I certainly don't want to interact with it. I don't want your notifications cluttering up my screen.  I know your brand-manager harps on about "engagement" and "eyeballs" - but I don't care.  Prove to me that you are useful by never interrupting me.&lt;/p&gt;

&lt;p&gt;There are so many things competing for our attention. Too many things.  It's &lt;em&gt;really&lt;/em&gt; easy to make your app noisy and engaging. It looks great on a PowerPoint when you can show how often people open your app, I get that.  But every time I get &lt;a href="https://shkspr.mobi/blog/2016/09/dark-patterns-in-connected-devices/"&gt;a perky email from my smoke-alarm&lt;/a&gt; telling me how wonderful it is, I want to rip it from my wall.  Do your job and leave me alone.&lt;/p&gt;

&lt;p&gt;So, dear app designers, refrain from sending constant, pleading emails in the vain hope that your click-through-rate will inch ever-closer to perfection.&lt;/p&gt;

&lt;p&gt;No. Refine your service so that it can work silently. Let the absence of interaction be a selling point.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=29182&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2018/03/the-make-everything-better-button/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How do you move out of a smarthome?]]></title>
		<link>https://shkspr.mobi/blog/2017/11/how-do-you-move-out-of-a-smarthome/</link>
					<comments>https://shkspr.mobi/blog/2017/11/how-do-you-move-out-of-a-smarthome/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Thu, 30 Nov 2017 12:05:57 +0000</pubDate>
		<category><![CDATA[gadgets]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[tado]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=28818</guid>

					<description><![CDATA[I&#039;ve an unhealthy amount of smart gadgets at home. Enough so that it&#039;s worth running an orientation session when friends come to visit.  This is what the Alexa does, here&#039;s which light switches not to use, don&#039;t be scared if the Roomba attacks. That sort of thing.  I don&#039;t know how long we&#039;ll live in this place. It&#039;s more than likely we&#039;ll move at some point.  So what happens to the smarthome…]]></description>
										<content:encoded>&lt;p&gt;I've an unhealthy amount of smart gadgets at home. Enough so that it's worth running an orientation session when friends come to visit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is what the Alexa does, here's which light switches not to use, don't be scared if the Roomba attacks.&lt;/em&gt; That sort of thing.&lt;/p&gt;

&lt;p&gt;I don't know how long we'll live in this place. It's more than likely we'll move at some point.  So what happens to the smarthome stuff we've accumulated?&lt;/p&gt;

&lt;p&gt;When we hand over the keys to the new residents - do we hand over all the cloud passwords as well? Or do we factory reset everything and let them go through the dull process of setting up new accounts?&lt;/p&gt;

&lt;p&gt;Some stuff is probably easy to move. Unplug the LIFX bulbs and replace with poundshop lights.&lt;/p&gt;

&lt;p&gt;Some stuff is probably hard. Do I unwire the Tado Thermostat and replace with a generic version?&lt;/p&gt;

&lt;p&gt;Tado, to their credit, &lt;a href="https://web.archive.org/web/20170824080418/https://support.tado.com/hc/en-gb/articles/214488283-I-am-moving-and-want-to-leave-tado-installed-for-the-new-tenants-What-do-I-have-to-do-"&gt;have a procedure for people moving house&lt;/a&gt;.  You need to provide them with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A copy of your ID (photo or scan)&lt;/li&gt;
&lt;li&gt;Your signature&lt;/li&gt;
&lt;li&gt;Firstname &amp;amp; Surname of the new user&lt;/li&gt;
&lt;li&gt;Your Email address associated with your tado° account&lt;/li&gt;
&lt;li&gt;Email address of the new user&lt;/li&gt;
&lt;li&gt;Telephone number of the new user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A bit of a faff - and possibly annoying to the new occupiers to not be able to easily set the heating until they've moved in, configured the WiFi, and registered for an account.&lt;/p&gt;

&lt;p&gt;Now imagine doing that for every hardwired gadget you have - the light switches, the connected cooker, the smoke alarms, the doorbell, the security system. A nightmare which adds to the stress of an already fraught situation for both parties.&lt;/p&gt;

&lt;p&gt;The Nest Protect smoke alarm suggests that you should &lt;a href="https://nest.com/uk/support/article/My-new-home-has-Nest-Protect-already-installed-what-do-I-do-now"&gt;factory reset alarms you inherit&lt;/a&gt; and then manually add them.  When I move into a house, do I want to spend the first day looking up manuals online to try and work out which buttons to hold down in order to claim the devices as my own?&lt;/p&gt;

&lt;p&gt;This is, of course, the epitome of "first-world problems" - but it is one that most people will have to face in the coming years.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=28818&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/11/how-do-you-move-out-of-a-smarthome/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
	</channel>
</rss>
