<?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>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</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[@edent]]></dc:creator>
		<pubDate>Wed, 20 Feb 2019 08:14:07 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<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><![CDATA[<p>I have a Tado smart thermostat - part of my <a href="https://shkspr.mobi/blog/tag/smart-home/">smarthome project</a>.  As well as letting me set the temperature from my phone, it records environmental data, and <a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/">provides a handy API</a> for me to retrieve it.</p>

<p>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.</p>

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

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

<blockquote><p>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.</p>

<p>A heat pump would be installed in each household, as a replacement to their existing gas boiler.</p>

<p>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.</p>

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

<p>In order to assess whether this is feasible, we need to understand heating demand.</p>

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

<p>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.</p>

<p><a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/2-years-full-fs8.png"><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"></a></p>

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

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

<p>Let's zoom in on December 2018 (tap for bigger):
<a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/December-2018-fs8.png"><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"></a></p>

<p>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!</p>

<p>You can also see how rapidly the house cools when the external temperature drops.</p>

<p>Conversely, the rise in external temperature from 5 to 10 barely raised the internal temperature.</p>

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

<p>Let's zoom in on a couple of days in December 2018.</p>

<p><a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/Dec-Days-fs8.png"><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"></a></p>

<p>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.</p>

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

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

<p>The first is <a href="https://shkspr.mobi/blog/wp-content/uploads/2019/02/2-Year-Heating-Demand-Data.csv.zip">a CSV file of heating demand (190KB).
<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"></a></p>

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

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

<p>Feel free to use this data for something interesting, or to make beautiful graphs. I make no claims to its accuracy or completeness.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=31458&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></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[@edent]]></dc:creator>
		<pubDate>Thu, 14 Feb 2019 12:22:17 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<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><![CDATA[<p>Tado is a brilliant smart thermostat. But their API is very poorly documented. This is an updated guide for 2019.  I am indebted to <a href="http://blog.scphillips.com/posts/2017/01/the-tado-api-v2/">Stephen C Phillips' original documentation</a>.</p>

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

<p>You will need:</p>

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

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

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

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

<pre><code class="language-js">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'
        }
    }
};
</code></pre>

<p>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 <a href="https://my.tado.com/webapp/"></a><a href="https://my.tado.com/webapp/">https://my.tado.com/webapp/</a>.</p>

<p>You should see the token:
<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"></p>

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

<p>These examples use the <code>curl</code> command on Linux.</p>

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

<pre><code class="language-_">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
</code></pre>

<p>The response will be:</p>

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

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

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

<pre><code class="language-_">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
</code></pre>

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

<p>The next step is to get your <code>homeId</code> - this will also be needed for subsequent API calls:</p>

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

<p>You'll get back your data, like this:</p>

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

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

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

<p>This request will check that you've got the right details.</p>

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

<p>You'll get back information about your installation. I've redacted mine for privacy.</p>

<pre><code class="language-json">{
    "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
}
</code></pre>

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

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

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

<p>Here's what you get back - I've redacted some of my details.</p>

<pre><code class="language-json">[{
    "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
    }
}]
</code></pre>

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

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

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

<p>This is what you'll get back if you're at home</p>

<pre><code class="language-_">{"presence":"HOME"}
</code></pre>

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

<p>My Tado has two "Zones".  0 is for Hot Water, 1 is for Heating. Yours may be different.</p>

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

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

<p>Here's information about your hot water:</p>

<pre><code class="language-json">{
    "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": {}
}
</code></pre>

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

<p>It's much the same for Heating information:</p>

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

<p>This also gets you humidity data etc:</p>

<pre><code class="language-json">{
    "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"
        }
    }
}
</code></pre>

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

<p>Tado also provides you with data about the external weather:</p>

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

<p>You get back a basic weather report for your location:</p>

<pre><code class="language-json">{
    "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"
    }
}
</code></pre>

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

<p>It's possible to turn the heating and hot water on / off.</p>

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

<p>This is a <code>PUT</code> request</p>

<pre><code class="language-_">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"}}'
</code></pre>

<p>Just to make it easier to read, this is the JSON data that you have to <code>PUT</code>:</p>

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

<p>If it has worked, you'll get back this response:</p>

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

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

<p>This is a simple <code>DELETE</code> command:</p>

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

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

<p>Much the same as before</p>

<pre><code class="language-_">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"}}'
</code></pre>

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

<p>Again, a <code>DELETE</code></p>

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

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

<p>You can get a complete view of historic data with:</p>

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

<p>The <code>date</code> 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.</p>

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

<p>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.</p>

<p>I'd love it if someone could make OpenAPI documentation for this.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=31397&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></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[@edent]]></dc:creator>
		<pubDate>Tue, 20 Mar 2018 07:49:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<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><![CDATA[<p>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.</p>

<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 &quot;Make Everything Better&quot;." width="500" height="300" class="aligncenter size-full wp-image-29183">

<p>You press the button in the middle of your screen - and <em>it makes everything better!</em>  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.</p>

<p>Life is rarely that simple - and apps are rarely that smart.  But let's look at what comes next.</p>

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

<p>The most boring app I have is <a href="https://www.tado.com/">Tado</a> - it controls my central heating.  I <em>never</em> 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.</p>

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

<p>(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 <a href="https://web.archive.org/web/20180330192652/http://www.skylarkios.com/blog/2016/3/4/why-i-no-longer-use-nest-auto-away">why people disable it</a> - our lives are too noisy.)</p>

<p>The app anticipates what you need and delivers it without asking.</p>

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

<p><a href="https://shkspr.mobi/blog/2013/05/on-swearing-and-ux-antipaterns/">I don't want your app</a>. 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.</p>

<p>There are so many things competing for our attention. Too many things.  It's <em>really</em> 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 <a href="https://shkspr.mobi/blog/2016/09/dark-patterns-in-connected-devices/">a perky email from my smoke-alarm</a> telling me how wonderful it is, I want to rip it from my wall.  Do your job and leave me alone.</p>

<p>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.</p>

<p>No. Refine your service so that it can work silently. Let the absence of interaction be a selling point.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=29182&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></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[@edent]]></dc:creator>
		<pubDate>Thu, 30 Nov 2017 12:05:57 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<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><![CDATA[<p>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.</p>

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

<p>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?</p>

<p>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?</p>

<p>Some stuff is probably easy to move. Unplug the LIFX bulbs and replace with poundshop lights.</p>

<p>Some stuff is probably hard. Do I unwire the Tado Thermostat and replace with a generic version?</p>

<p>Tado, to their credit, <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-">have a procedure for people moving house</a>.  You need to provide them with:</p>

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

<p>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.</p>

<p>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.</p>

<p>The Nest Protect smoke alarm suggests that you should <a href="https://nest.com/uk/support/article/My-new-home-has-Nest-Protect-already-installed-what-do-I-do-now">factory reset alarms you inherit</a> 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?</p>

<p>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.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=28818&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></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>
