<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Digitalia Blog]]></title>
  <link href="http://blog.digitalia.fm/atom.xml" rel="self"/>
  <link href="http://blog.digitalia.fm/"/>
  <updated>2013-11-27T11:11:46+01:00</updated>
  <id>http://blog.digitalia.fm/</id>
  <author>
    <name><![CDATA[Franco Solerio]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Niente iMessage con Vodafone Rete Sicura]]></title>
    <link href="http://blog.digitalia.fm/niente-imessage-con-vodafone-rete-sicura/"/>
    <updated>2013-07-20T11:49:00+02:00</updated>
    <id>http://blog.digitalia.fm/niente-imessage-con-vodafone-rete-sicura</id>
    <content type="html"><![CDATA[<p>Da qualche giorno, dopo aver attivato <em>Vodafone Summer Smart 500</em>, ho iniziato ad avere problemi di connessione a internet sul mio iPhone5.</p>

<p>In particolare non riuscivo a inviare e ricevere messaggi sotto iMessage, nè a scaricare e inviare posta Gmail (Exchange). Collegandomi a una qualsiasi rete Wifi il problema si risolveva istantaneamente.</p>

<p>Ho provato un reset delle impostazioni di rete, a spostare la sim su un altro iPhone 4s factory reset, ma il problema sotto rete Vodafone persisteva.</p>

<p>Girando sui forum di <a href="http://lab.vodafone.it">Vodafone Lab</a> mi è tornato in mente che al cambio di piano era arrivato un messaggio relativo all&#8217;attivazione di <a href="http://news.vodafone.it/2013/05/31/vodafone-rete-sicura-la-prima-piattaforma-di-protezione-integrata-nella-rete/">Vodafone Rete Sicura</a>.</p>

<p>Appena ho disattivato <em>Rete Sicura</em> (e ricevuto sms di conferma) attraverso 190.it tutto ha ricominciato a funzionare perfettamente.</p>

<p>Configurare servizi firewall, filtraggio e routing è sempre un&#8217;operazione delicata e difficile; che gli early adopters vadano incontro a questo tipo di inconvenienti è inevitabile. Probabilmente l&#8217;opt-in automatico al servizio nel momento in cui il cliente cambia piano è una mossa un po&#8217; spericolata.</p>

<hr />

<p>[AGGIORNAMENTO] Dal 24/7/13 l&#8217;anomalia è risolta come segnalato sul <a href="http://lab.vodafone.it/forum/viewtopic.php?f=17&amp;t=38271&amp;sid=58a5ebd931e128d6cddfa7d2d434ac3e&amp;start=15">Forum di VodafoneLab</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Configurare il Nest in Italia]]></title>
    <link href="http://blog.digitalia.fm/configurare-il-nest-in-italia/"/>
    <updated>2013-02-24T11:22:00+01:00</updated>
    <id>http://blog.digitalia.fm/configurare-il-nest-in-italia</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://blog.digitalia.fm/images/2013-02-24-configurare-il-nest-in-italia/nest2.jpg" width="300" title="Pannello elettrico aperto" ><strong>Attenzione:</strong> le operazioni descritte in questo articolo non sono più necessarie in seguito all&#8217;update software 4.0 del Nest. Vedere la sezione update in fondo al post.</p>

<p> <a href="http://blog.digitalia.fm/installare-nest-in-italia/">Nell’articolo precedente</a> abbiamo imparato a collegare il Nest a un tipico impianto a caldaia italiano con circuito di comando a 220V. Una volta collegato via WiFi al router ADSL di casa seguendo le istruzioni allegate al termostato, le cose funzionano egregiamente, ma ci sono un paio di dettagli che ci fanno capire come l’utilizzo al di fuori del territorio americano non rientri ancora nei piani di Tony Fadell &amp; co.</p>

<p>In particolare il Nest si collega alla rete per sincronizzare il proprio orologio e scaricare le previsioni del tempo, e l’unico modo per indicare dove è installato è l’inserimento del CAP della città di residenza. Ovviamente Nest prevede solo CAP di USA e Canada, che spesso si sovrappongono a quelli italiani. Se in questo momento inserisco il CAP di Sanremo (18038) il Nest pensa di trovarsi a Danielsville in Pennsylvania e che la temperatura esterna sia di −2’C quando in realtà qui a Sanremo la temperatura è ben più mite (18’C). Considerato che Nest utilizza queste informazioni per anticipare o ritardare l’accensione della caldaia a seconda della temperatura esterna, è ovvio che il funzionamento non risulta ottimale. Inoltre tutte le funzioni di timer vengono regolate in base al fuso orario relativo al CAP inserito.</p>

<p>Qualcuno ha ovviato selezionando un CAP di Honolulu, che ha 12 ore di differenza dall’Europa. Questo però comporta l’inversione nel timer di orari giornalieri e notturni, ed impedisce il funzionamento dell’auto-away che spegne la caldaia quando non rileva nessuno in casa di giorno, mentre di notte è abbastanza smart da capire che se il sensore di movimento non rileva nessuno è perchè state dormendo.</p>

<p>Per avere il meglio dal Nest ed abilitare tutte le funzioni anche in Italia è necessario un po’ di sano hacking in modo da farlo lavorare con le informazioni corrette.</p>

<!-- more -->


<p><strong>Disclaimer iniziale</strong>: il seguente non vuole essere un manuale di istruzioni per installare il Nest e farlo funzionare in Italia. La descrizione della procedura presuppone un discreto livello di famigliarità con i sistemi Unix oppure OS X. Come succede per qualsiasi articolo tecnico, è inevitabile che qualcuno trovi la descrizione molto semplice e a tratti ridondante: questo non mi preoccupa, saprete scremare ed estrarre le informazioni che vi servono e modificarle secondo le vostre necessità e preferenze. E’ altrettanto inevitabile che qualcuno trovi il tutto di difficile comprensione: non c’è niente di male, abbiamo tutti cominciato da zero. <br/>
Il mio invito in tal caso è quello di utilizzare la rete: se non capite cosa significa “<em>installare Dnsmasq con Homebrew</em>” è inutile chiedere un ulteriore tutorial nei commenti a questo articolo, usate google e ne troverete decine.</p>

<p>Le informazioni di base e lo script PHP di partenza le ho ottenute dal <a href="http://motote.blogspot.com.es/2012/09/nest-thermostat-in-europe-hacks-ii.html">blog del mitico Mot</a>. Nelle sue istruzioni Mot utilizza un router con custom firmware Linux per fornire le informazioni corrette al Nest. L’installazione di un custom firmware è una cosa un po’ complicata, si rischia di buttare via il router, e solo una parte dei router in commercio lo consentono. Ho quindi preferito realizzare qualcosa di analogo attraverso un computer sempre acceso sulla rete di casa che funziona da server web e dns.</p>

<p>Nel mio caso ho usato il MacMini con OS X 10.6 Snow Leopard che utilizzo anche come mediacenter, ma la procedura si può adattare comodamente a qualsiasi computer basato su Linux. Se non avete un computer da dedicare al progetto, un ottimo candidato può essere il <a href="http://www.raspberrypi.org">Raspberry-PI</a>.</p>

<h2>Analisi del problema</h2>

<p>Intercettando le comunicazioni TCP si vede che il Nest accede sovente a un indirizzo su Wunderground, servizio web di monitoraggio e previsioni meteo.</p>

<pre>
http://www.wunderground.com/auto/nestlabs/geo/current/i?query=18038
</pre>


<p>Aprendo con Safari la stessa pagina Wunderground si visualizza una pagina JSON con dati identificativi, metereologici, di geolocalizzazione e di fuso orario relativi alla famosa Danielsville in Pennsylvania.</p>

<figure class='code'><figcaption><span>Wunderground - 18038 </span><a href='http://www.wunderground.com/auto/nestlabs/geo/current/i?query=18038'>Apri nel browser </a></figcaption> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;18038&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;location&quot;</span><span class="p">:{</span>
</span><span class='line'>  <span class="nt">&quot;station_id&quot;</span><span class="p">:</span><span class="s2">&quot;KPAWALNU2&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;zip&quot;</span><span class="p">:</span><span class="s2">&quot;18038&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;city&quot;</span><span class="p">:</span><span class="s2">&quot;Danielsville&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;state&quot;</span><span class="p">:</span><span class="s2">&quot;PA&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;country&quot;</span><span class="p">:</span><span class="s2">&quot;US&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;lat&quot;</span><span class="p">:</span><span class="s2">&quot;40.79058456&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;lon&quot;</span><span class="p">:</span><span class="s2">&quot;-75.48538208&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;short_name&quot;</span><span class="p">:</span><span class="s2">&quot;Danielsville,PA&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;timezone&quot;</span><span class="p">:</span><span class="s2">&quot;EST&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;timezone_long&quot;</span><span class="p">:</span><span class="s2">&quot;America/New_York&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;gmt_offset&quot;</span><span class="p">:</span><span class="s2">&quot;-5.00&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;full_name&quot;</span><span class="p">:</span><span class="s2">&quot;Danielsville,PA 18038 US&quot;</span><span class="p">},</span>
</span><span class='line'>  <span class="nt">&quot;current&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;temp_f&quot;</span><span class="p">:</span><span class="mf">26.5</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;temp_c&quot;</span><span class="p">:</span><span class="mf">-3.1</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;condition&quot;</span><span class="p">:</span><span class="s2">&quot;Scattered Clouds&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;sunrise&quot;</span><span class="p">:</span><span class="mi">1361360932</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;sunset&quot;</span><span class="p">:</span><span class="mi">1361400178</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;lengthofday&quot;</span><span class="p">:</span><span class="mi">654</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;humidity&quot;</span><span class="p">:</span><span class="mi">57</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;timezone&quot;</span><span class="p">:</span><span class="s2">&quot;EST&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;gmt_offset&quot;</span><span class="p">:</span><span class="s2">&quot;-5.00&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;wind_dir&quot;</span><span class="p">:</span><span class="s2">&quot;WNW&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;wind_mph&quot;</span><span class="p">:</span><span class="mf">20.7</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;wind_kph&quot;</span><span class="p">:</span><span class="mf">33.3</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;observation_time&quot;</span><span class="p">:</span><span class="mi">1361375411</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;icon&quot;</span><span class="p">:</span><span class="s2">&quot;partlycloudy&quot;</span>
</span><span class='line'>  <span class="p">},</span>
</span><span class='line'>  <span class="nt">&quot;forecast&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;daily&quot;</span><span class="p">:[</span> <span class="p">{</span> <span class="err">...</span>
</span></code></pre></td></tr></table></div></figure>


<p>Se proviamo a sostituire nella url il CAP 18038 con qualcos’altro, riusciamo ad ottenere da wunderground informazioni su altre città. Ad esempio se inseriamo:</p>

<pre>
http://www.wunderground.com/auto/nestlabs/geo/current/i?query=sanremo
</pre>


<p>riesco ad ottenere informazioni corrette sulla mia città.</p>

<figure class='code'><figcaption><span>Wunderground - sanremo </span><a href='http://www.wunderground.com/auto/nestlabs/geo/current/i?query=sanremo'>Apri nel browser </a></figcaption> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;sanremo&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;location&quot;</span><span class="p">:{</span>
</span><span class='line'>  <span class="nt">&quot;city&quot;</span><span class="p">:</span><span class="s2">&quot;Sanremo&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;state&quot;</span><span class="p">:</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;country&quot;</span><span class="p">:</span><span class="s2">&quot;IY&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;lat&quot;</span><span class="p">:</span><span class="s2">&quot;43.81821823&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;lon&quot;</span><span class="p">:</span><span class="s2">&quot;7.76114607&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;short_name&quot;</span><span class="p">:</span><span class="s2">&quot;Sanremo,&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;timezone&quot;</span><span class="p">:</span><span class="s2">&quot;CET&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;timezone_long&quot;</span><span class="p">:</span><span class="s2">&quot;Europe/Rome&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;gmt_offset&quot;</span><span class="p">:</span><span class="s2">&quot;1.00&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;full_name&quot;</span><span class="p">:</span><span class="s2">&quot;Sanremo, 00000 EU&quot;</span><span class="p">},</span>
</span><span class='line'>  <span class="nt">&quot;current&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;temp_f&quot;</span><span class="p">:</span><span class="mf">47.7</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;temp_c&quot;</span><span class="p">:</span><span class="mf">8.7</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;condition&quot;</span><span class="p">:</span><span class="s2">&quot;Chance of Snow&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;sunrise&quot;</span><span class="p">:</span><span class="mi">1361686435</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;sunset&quot;</span><span class="p">:</span><span class="mi">1361725861</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;lengthofday&quot;</span><span class="p">:</span><span class="mi">657</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;humidity&quot;</span><span class="p">:</span><span class="mi">67</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;timezone&quot;</span><span class="p">:</span><span class="s2">&quot;CET&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;gmt_offset&quot;</span><span class="p">:</span><span class="s2">&quot;1.00&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;wind_dir&quot;</span><span class="p">:</span><span class="s2">&quot;West&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;wind_mph&quot;</span><span class="p">:</span><span class="mf">0.4</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;wind_kph&quot;</span><span class="p">:</span><span class="mf">0.6</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;observation_epoch&quot;</span><span class="p">:</span><span class="s2">&quot;1361707200&quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="nt">&quot;icon&quot;</span><span class="p">:</span><span class="s2">&quot;chancesnow&quot;</span> <span class="p">},</span>
</span><span class='line'>  <span class="nt">&quot;forecast&quot;</span><span class="p">:</span> <span class="p">{</span>
</span><span class='line'>  <span class="nt">&quot;daily&quot;</span><span class="p">:[</span> <span class="p">{</span>
</span></code></pre></td></tr></table></div></figure>


<p>L’obiettivo della procedura sarà quindi quello di intercettare la chiamata di Nest verso wunderground, modificarla in modo da sostituire “18038” con “sanremo” nella query, ottenere i risultati da wunderground, e restituirli al Nest in modo che lavori con le informazioni corrette.</p>

<p>In termine tecnico quello che vogliamo realizzare si chiama “man in the middle attack”, ovvero “attacco dell’uomo nel mezzo” e nel nostro caso comporta avere un server web dedicato che scambi le informazioni tra Nest e Wunderground, e un server dns dedicato che inganni Nest e lo dirotti verso il server web quando cerca di contattare Wunderground.</p>

<p>NB: Tenete presente che tutti gli indirizzi IP riportati andranno adattati agli indirizzi utilizzati sulla vostra rete. Nel mio caso il MacMini è su 192.168.1.11</p>

<h2>Apache</h2>

<p>La prima parte è molto semplice. OS X contiene pre-installato il server web Apache: basta attivarlo nelle preferenze di sistema (Condivisione -> Condivisione Internet).
Di default Apache su OS X è configurato in modo da non far girare gli script PHP, quindi bisogna fare una <a href="http://stackoverflow.com/questions/1293484/easiest-way-to-activate-php-and-mysql-on-mac-os-10-6-snow-leopard-10-7-lion">piccola modifica nel file di configurazione</a> (ignorate la parte relativa a MySql) e riavviare Apache.</p>

<p>A questo punto bisogna inserire nella cartella da cui Apache prende i file da servire al pubblico uno script PHP che faccia da intermediario tra Wunderground e il Nest.
La cartella dove mettiamo lo script è importante e facile da sbagliare.
Vogliamo che apache risponda allo stesso indirizzo che Nest si aspetta da Wunderground, quindi <a href="http://192.168.1.11/auto/nestlabs/geo/current/i">http://192.168.1.11/auto/nestlabs/geo/current/i</a></p>

<p>Innanzitutto va ricercata la cartella dei documenti apache nella libreria di sistema e non quella utente. Nel caso di OS X 10.6 la cartella è <em>/Library/WebServer/Documents/</em> da non confondere con <em>/Users/nomeutente/Library/WebServer/Documents</em> che è quella da cui apache serve i file web di ogni singolo utente.</p>

<p>Dopodichè nella cartella base va creata la struttura corretta di cartelle e sottocartelle. Potete usare il terminale col comando:</p>

<pre>
mkdir -p /Library/WebServer/Documents/auto/nestlabs/geo/current/
</pre>


<p>Nella cartella current metteremo quindi il seguente script php con il nome di “i.php”</p>

<figure class='code'><figcaption><span>i.php  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="cp">&lt;?php</span>
</span><span class='line'><span class="nv">$param</span> <span class="o">=</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s2">&quot;query&quot;</span><span class="p">];</span>
</span><span class='line'><span class="k">if</span> <span class="p">(</span><span class="nv">$param</span> <span class="o">==</span> <span class="s2">&quot;18038&quot;</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="nv">$jsonData</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">&#39;http://38.102.136.104/auto/nestlabs/geo/current/i?query=sanremo&#39;</span><span class="p">),</span> <span class="k">true</span><span class="p">);</span>
</span><span class='line'>        <span class="nv">$data</span> <span class="o">=</span> <span class="nv">$jsonData</span><span class="p">[</span><span class="s2">&quot;sanremo&quot;</span><span class="p">];</span>
</span><span class='line'>        <span class="nv">$data</span><span class="p">[</span><span class="s2">&quot;location&quot;</span><span class="p">][</span><span class="s2">&quot;city&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;Sanremo&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="nv">$data</span><span class="p">[</span><span class="s2">&quot;location&quot;</span><span class="p">][</span><span class="s2">&quot;state&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;IM&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="nv">$data</span><span class="p">[</span><span class="s2">&quot;location&quot;</span><span class="p">][</span><span class="s2">&quot;zip&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;18038&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="nv">$data</span><span class="p">[</span><span class="s2">&quot;location&quot;</span><span class="p">][</span><span class="s2">&quot;country&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;US&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="nv">$data</span><span class="p">[</span><span class="s2">&quot;location&quot;</span><span class="p">][</span><span class="s2">&quot;timezone&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;EDT&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="nv">$data</span><span class="p">[</span><span class="s2">&quot;current&quot;</span><span class="p">][</span><span class="s2">&quot;timezone&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;EDT&quot;</span><span class="p">;</span>
</span><span class='line'>        <span class="nv">$jsonData</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="s2">&quot;18038&quot;</span><span class="o">=&gt;</span><span class="nv">$data</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>        <span class="nv">$jsonData</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">&#39;http://38.102.136.104/auto/nestlabs/geo/current/i?query=&#39;</span> <span class="o">.</span> <span class="nv">$param</span><span class="p">));</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="nx">header</span><span class="p">(</span><span class="s1">&#39;Content-Type: application/json&#39;</span><span class="p">);</span>
</span><span class='line'><span class="k">print</span> <span class="nb">stripslashes</span><span class="p">(</span><span class="nb">json_encode</span><span class="p">(</span><span class="nv">$jsonData</span><span class="p">));</span>
</span><span class='line'><span class="cp">?&gt;</span><span class="x"></span>
</span></code></pre></td></tr></table></div></figure>


<p>Il funzionamento è relativamente semplice. Quando viene interrogato dal Nest con un argomento query uguale a 18038, lo script scarica dal vero server di wunderground (38.102.136.104) la pagina <em>auto/nestlabs/geo/current/i?query=sanremo</em>, modifica alcuni dei dati, e la restituisce al Nest così modificata.<br/>
Qualsiasi altra query viene restituita invariata dallo script.</p>

<p>Occorre ovviamente sostituire i dati <em>Sanremo</em>, <em>IM</em> e <em>18038</em> sia nella riga <em>if ($param==“18038)</em> sia in quelle <em>$data[“location&#8230;</em> con i dati relativi alla vostra posizione, ricordando poi di inserire nel Nest lo stesso CAP che abbiamo messo nello script. I dati <em>US</em> ed <em>EDT</em> sono fondamentali per far credere a Nest di essere in USA e quindi di accettare il CAP inserito.</p>

<p>Una volta salvato il file potete verificare che funzioni accedendo con un browser <strong>sullo stesso computer dove avete installato lo script</strong> all’indirizzo:</p>

<pre>
http://127.0.0.1/auto/nestlabs/geo/current/i?query=18038
</pre>


<p>Se il browser visualizza le informazioni sulla vostra città significa che lo script e Apache funzionano a dovere.
La stessa cosa deve accadere se da un altro computer sulla stessa rete accedete a:</p>

<pre>
http://192.168.1.11/auto/nestlabs/geo/current/i?query=18038
</pre>


<h2>Dnsmasq</h2>

<p>Il passo successivo consiste nell’ingannare Nest e dirottarlo verso il Mac Mini quando cerca di contattare Wunderground. Il compito di indirizzare le richieste verso i server web avviene a livello dei <a href="http://en.wikipedia.org/wiki/Name_server">server DNS</a>, che traducono gli indirizzi testuali (wunderground.com) in indirizzi IP (38.102.136.104).</p>

<p>Dnsmasq è un software di server DNS molto semplice che gira su OS X o qualsiasi macchina su base Unix.
Il modo più semplice per installarlo su MacMini è utilizzando <a href="http://mxcl.github.com/homebrew/">Homebrew</a> con il comando:</p>

<pre>
brew install dnsmasq  
</pre>


<p>seguendo poi le istruzioni che homebrew ci fornisce per configurare dnsmasq in modo che si avvii automaticamente al boot del sistema.</p>

<p>Un ottimo tutorial per installare facilmente Homebrew su OS X lo trovate qui: <a href="http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/">How to Install Xcode, Homebrew, Git&#8230;</a> (i primi 3 step sono sufficienti).</p>

<p>Per fornire le traduzioni indirizzo testuale -> indirizzo numerico dnsmasq di default le prende dai server DNS configurati nelle preferenze della macchina su cui gira (questo vale almeno per l’installazione su MacMini attraverso homebrew). Occorre quindi andare nelle preferenze di sistema (network, ethernet, avanzate, DNS) e inserire almeno due indirizzi di DNS conosciuti e affidabili.</p>

<ul>
<li>OpenDNS:

<ul>
<li>208.67.220.220</li>
<li>208.67.222.222</li>
</ul>
</li>
<li>oppure GoogleDNS:

<ul>
<li>8.8.8.8</li>
<li>8.8.4.4</li>
</ul>
</li>
</ul>


<p>Ricordate di riavviare dnsmasq, oppure fare il reboot, dopo aver modificato la configurazione oppure i server DNS.</p>

<p>Verificare che dnsmasq sia ben configurato è semplice. Collegate un altro computer alla stessa rete del MacMini, modificatene i server DNS cancellando quelli eventualmente inseriti e sostituiteli con l’indirizzo del MacMini (192.168.1.11). A questo punto con un browser visitate qualsiasi sito esterno tramite indirizzo testuale (<a href="http://digitalia.fm">digitalia.fm</a> è ottimo per i test).<br/>
Se il sito di Digitalia viene caricato significa che dnsmasq funziona correttamente. Già che ci siete mettete Digitalia nei bookmark perchè è <a href="http://digitalia.fm/progetto-nestore-164/">il migliore tech show in circolazione in Italia</a>: un episodio alla settimana, in diretta il lunedì e in podcasting quando volete voi. (fine della pubblicità)</p>

<h2>Router</h2>

<p>Inserire manualmente l’indirizzo del dns nel Nest non è possibile in quanto, come molti dispositivi WiFi, richiede l’indirizzo del server DNS corretto al router tramite il quale accede al internet. Il vostro computer fa la stessa cosa se non inserite manualmente uno o più indirizzi di server DNS. Dobbiamo quindi istruire il router a distribuire l’indirizzo del computer dove gira dnsmasq come DNS a qualunque dispositivo si colleghi via WiFi e lo richieda. Questo si fa nelle pagine di configurazione del router. La maggior parte dei router permettono di modificare i DNS, ma c’è qualche eccezione come i router standard in dotazione con Alice di Telecom (cambiate il router).
Nell’immagine qui sotto trovate la pagina di configurazione del classico Netgear 834G.</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-02-24-configurare-il-nest-in-italia/ConfigDns.png" title="Configurazione router" ></p>

<p>Ancora una volta verifichiamo se tutto funziona. Con un qualsiasi dispositivo collegato alla rete locale, <strong>ma non il con il computer su cui gira dnsmasq</strong>, eliminate gli indirizzi dei server DNS dalla configurazione di rete. Eventualmente riavviate il computer, o se siete connessi in WiFi fate “dimenticare” l’accoppiamento tra computer e router in modo da ripetere il login con la base WiFi. Questo è importante perchè il computer chieda nuovamente l’indirizzo dei DNS al router.
Verificate che la navigazione per indirizzi testuali funzioni correttamente e che il dispositivo stia utilizzando effettivamente il computer locale con dnsmasq come DNS.</p>

<p>Su Linux:</p>

<pre>
cat /etc/resolv.conf
</pre>


<p>Su Mac:</p>

<pre>
networksetup -getdnsservers Wi-Fi
networksetup -getdnsservers ethernet
</pre>


<h2>Configurazione Dnsmasq</h2>

<p>L’ultimo passo è quello di dirottare le chiamate a Wunderground verso il nostro script su Apache. Cercate il file di configurazione di dnsmasq (installando dnsmasq con Homebrew dovrebbe essere <em>/usr/local/etc/dnsmasq.conf</em>) e aggiungete sotto alla riga:</p>

<pre># Add domains which you want to force to an IP address here.</pre>


<p>la vostra configurazione specifica per le richieste a Wunderground:</p>

<pre>address=/www.wunderground.com/192.168.1.11</pre>


<p>Riavviate il computer con dnsmasq. A questo punto visitando <em>http://www.wunderground.com/auto/nestlabs/geo/current/i?query=18038</em> su un computer sulla rete locale (che abbia i DNS impostati sull&#8217;indirizzo IP del computer con dnsmasq) deve comparire una pagina con le informazioni della vostra città, e non quelle americane.</p>

<p>Potete resettare il vostro Nest, inserire il CAP che avete usato nello script, e collegarlo al WiFi. Una volta effettuato il collegamento dovrebbe dirvi il nome della città che avete inserito nello script e cominciare a funzionare con le informazioni corrette, a partire dall’ora locale.</p>

<p>Noterete che quando vi collegate al vostro Nest tramite browser web, oppure tramite app mobile quando siete fuori dalla vostra rete locale, nelle informazioni sul meteo viene visualizzata la temperatura esterna relativa al CAP americano. Se invece vi collegate con l’app mobile quando il vostro dispositivo è collegato alla rete di casa, con impostato come DNS la macchina con dnsmasq, l’informazione è quella corretta.</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-02-24-configurare-il-nest-in-italia/NestApp.png" title="Nest iOS App" ></p>

<p>Non ho un modo per ovviare a questo inconveniente, ma riguarda solo la visualizzazione, il Nest lavora comunque con le informazioni meteo corrette della vostra località.</p>

<h2>Update (10/11/2013)</h2>

<p>Nell&#8217;ultimo aggiornamento (automatico) del firmware del Nest, è stato modificato il server a cui accede il termostato per recuperare le informazioni su meteo e ora locale. Al posto di <em>wunderground.com</em> ora Nest prende informazioni direttamente da <em>weather.nest.com</em>. A causa di questo cambiamento è probabile che a partire dal 9/10/2013 chi aveva seguito questa guida si sia ritrovato con l&#8217;ora del termostato errata e le informazioni meteo completamente sballate.</p>

<p>Ricordandovi che quello qui illustrato è un hack, studiato in maniera indipendente, e che quindi sarà sempre vulnerabile a interventi di aggiornamento da parte della casa madre (e che il sottoscritto non si assume alcuna responsabilità se vi svegliate congelati perchè il Nest non è partito), sono sollevato nel dirvi che per questa volta siamo fortunati: la modifica non è così drastica, e il problema facilmente risolvibile.</p>

<p>La URL che il termostato Nest interroga per la precisione è:<br/>
<em>http://weather.nest.com/weather/v1?query=18038</em></p>

<p>Se provate ad accedere con il browser però questo non carica nulla. Il motivo è che <em>weather.nest.com</em> risponde solo a chiamate con un user-agent custom del Nest, in particolare <em>&#8220;AddLightness/3.5.1 (Display-2.6)&#8221;</em>.</p>

<p>Aprendo (con wget oppure Safari modificando l&#8217;user-agent) arriva la sorpresa: la struttura dei dati è la stessa identica che restituiva Wunderground. Probabilmente weather.nest.com scarica in tempo reale i dati di Wunderground, li modifica (o li modificherà in futuro) a suo piacimento, e li fornisce al termostato. (ma guarda un po&#8217; è proprio quello che facciamo noi con il nostro script).</p>

<p>La soluzione è semplice. Creiamo una cartella ulteriore dentro la root del nostro webserver:</p>

<pre>mkdir -p /Library/WebServer/Documents/weather/</pre>


<p>Copiamo il nostro script precedente <em>i.php</em> dentro la nuova cartella weather, e lo rinominiamo <em>v1.php</em>.</p>

<p>Nella configurazione di Dnsmasq aggiungiamo sotto la nostra precedente entry relativa a wunderground.com la direttiva per dirottare anche le chiamate verso weather.nest.com:</p>

<pre>address=/weather.nest.com/192.168.1.11</pre>


<p>Ricordate di far ripartire dnsmasq oppure di riavviare la macchina dove questo è in esecuzione.</p>

<p>Il Nest ora dovrebbe caricare le informazioni corrette. C&#8217;è però un potenziale problema, dovuto al fatto che il nostro script carica le informazioni ancora da <em>wunderground.com</em>, bypassando completamente <em>weather.nest.com</em>, e quindi perdendo eventuali modifiche/aggiunte operate da quest&#8217;ultimo. Al momento il problema non si pone in quanto apparentemente <em>weather.nest.com</em> non apporta modifiche evidenti, almeno io non sono riuscito a trovarne. L&#8217;ottimale sarebbe non scaricare più i dati da <em>wunderground.com</em>, ma direttamente da <em>weather.nest.com</em>. Sarà probabilmente argomento di un prossimo update.</p>

<h2>Update (27/11/2013)</h2>

<p>Le modifiche apportate dall&#8217;aggiornamento descritto nel precedente update presagivano novità che sono puntualmente arrivate. Con il nuovo update Nest è ora facilmente configurabile per l&#8217;utilizzo in tutta Europa. Le operazioni di configurazione di questo tutorial diventano quindi superflue.</p>

<p>Se avete effettuato tutta la configurazione come descritto in questo articolo e volete disfare il tutto è molto semplice: basta modificare di nuovo l&#8217;indirizzo del DNS nella configurazione del vostro router, inserendo quelli desiderati (GoogleDNS, OpenDNS) oppure lasciando il campo vuoto facendo sì che il router carichi quelli di default del vostro internet service provider. Potete poi disinstallare dnsmasq, ed eventualmente fermare il server Apache sul vostro computer se non lo usate per altri scopi.</p>

<p>Lascerò online questo articolo che rimane utile come riferimento per eventuali problemi futuri, e come buon esercizio per imparare qualcosa in materia computer networking.</p>

<p>Rimane ovviamente utilissimo il <a href="http://blog.digitalia.fm/installare-nest-in-italia/">post precedente</a>  riguardante l&#8217;installazione elettrica del Nest a un impianto domestico italiano.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Installare Nest in Italia]]></title>
    <link href="http://blog.digitalia.fm/installare-nest-in-italia/"/>
    <updated>2013-01-12T16:48:00+01:00</updated>
    <id>http://blog.digitalia.fm/installare-nest-in-italia</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/nest.png" width="300" title="Pannello elettrico aperto" >&#8220;Posso resistere a tutto, tranne che alle tentazioni&#8221;. L’aforisma di Oscar Wilde è da sempre il tormento del geek e Tony Fadell, tra gli inventori di iPod ai tempi in cui lavorava per Apple, lo sapeva bene quando si è presentato sul palco di <a href="http://paris.leweb.co">LeWeb12</a> a Parigi lo scorso Dicembre a mostrare il suo <a href="http://www.nest.com">Nest “The Learning Thermostat”</a>.</p>

<p>Forte di un buon successo di vendite negli Stati Uniti e in Canada, dove il Nest è commercializzato dal 2011, Fadell annunciava l’intenzione di presentarsi sul mercato europeo: nessuna data di lancio prevista, solo una generica intenzione. Esiste un modo più crudele per stuzzicare la curiosità di migliaia di geeks del vecchio continente?</p>

<p>Da quel momento i risultati di “Nest in Europe” su Google hanno cominciato a prendere vita, sono cominciate ad apparire sulla rete accenni, domande, tentativi di installazione. Se avete ascoltato gli <a href="http://digitalia.fm/speciale-leweb12-161/">speciali di Digitalia registrati a LeWeb12</a> sapete quanto il termostato di Fadell abbia suscitato la mia curiosità, e vista la risposta degli ascoltatori alle prime considerazioni sulla possibilità di installarlo in una casa italiana, ho deciso di dare una spolverata alle mie (scarse) nozioni di elettrotecnica e cimentarmi nell’impresa.</p>

<!-- more -->


<p>Mettere le mani sul Nest in Italia è ormai semplice e rapidissimo. <a href="http://www.amazon.com/Nest-Learning-Thermostat-Generation-T200577/dp/B009GDHYPQ/ref=sr_1_1?ie=UTF8&amp;qid=1357982410&amp;sr=8-1&amp;keywords=nest">Ordinato su Amazon.com</a> (USA) con spedizione global priority è arrivato a casa 3 giorni dopo.</p>

<p>Come previsto da quanto letto in giro per la rete, l’installazione del Nest in una casa italiana non è così semplice come illustrato sul sito di NestLabs. Penso sarà un tema ricorrente nel fenomeno della “<em>Internet of Things</em>”: la rete ci ha abituato a scaricare software e acquistare hardware appena commercializzato negli Stati Uniti, con il solo eventuale ostacolo della lingua quando il prodotto al momento del lancio non sia ancora stato localizzato in italiano. I prodotti della <em>Internet of Things</em> devono “parlare” una lingua ulteriore: quella delle altre “things” con cui sono destinate a interfacciarsi.</p>

<p>Come ho dovuto annullare l’ordine della serratura  <a href="https://lockitron.com/preorder">Lockitron</a> dopo aver appreso che il modello finale non va proprio d’accordo con le porte più comunemente installate in Italia, così l’installazione di un Nest su un impianto di riscaldamento italiano necessita di una serie di aggiustamenti sia sui collegamenti elettrici, sia sulla rete domestica a cui verrà connesso.</p>

<p> In questo articolo cercherò di illustrarvi la parte hardware della procedura di installazione, <a href="http://blog.digitalia.fm/configurare-il-nest-in-italia/">in un post seguente vedremo invece come configurare la rete</a>.</p>

<p><strong><em>Una importante raccomandazione prima di entrare nel dettaglio</em></strong>: la corrente elettrica è pericolosa e la prudenza non è mai troppa. Anche se i moderni impianti sono dotati di protezioni salvavita, un incontro ravvicinato con la 220V non è mai un’esperienza piacevole e può risultare anche letale. Salvavita, interruttore sul contatore e interruttore generale devono essere sempre tutti su <em>off</em>; guanti e scarpe di gomma sempre indossati; e verificare con un tester che tutte le parti elettriche siano veramente prive di tensione prima di mettere mano ai fili. Può capitare che un condensatore sia ancora carico, o addirittura che una linea elettrica in casa scavalchi il salvavita e arrivi diretta dal contatore (verificato in prima persona).</p>

<p>Nest è provvisto di collegamenti per pilotare impianti di differente configurazione: prevede fino a 3 linee di riscaldamento, 2 linee di condizionamento, pompa di calore con generatore ausiliario e di emergenza, (de)umidificatore e ventola. Per facilitare l’installazione sul sito sono presenti le istruzioni che permettono di scollegare un termostato presente in casa e collegare i fili presenti ai vari contatti sul Nest. La mia esperienza si limita all’installazione su un impianto costituito da una singola caldaia a gas collegata a classici termosifoni, il tutto comandato da un termostato programmabile.</p>

<p>Al termostato originale arrivano 4 fili: due di alimentazione (nella foto fili arancione e blu) che tengono in carica la batteria del termostato, e due fili di controllo provenienti dalla caldaia (bianco e rosso nella foto). Questi ultimi sono il circuito di comando della caldaia: quando il contatto è aperto non passa corrente e la caldaia rimane inattiva, quando si chiude il circuito la caldaia parte. Le sigle NC, C e NO sul termostato originale indicano proprio questo.</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/vecchioTermostato.jpg" title="termostato originale" ></p>

<pre><code>* C = common, il filo comune ai due circuiti possibili
* NC = normally closed, passa corrente normalmente (quando il termostato non vuole riscaldamento)
* NO = (normaly open) passa corrente solo quando il termostato è attivo
</code></pre>

<p>Collegando C e NO ai due fili della caldaia si ottiene che quando il termostato decide di attivare il riscaldamento chiude il circuito tra C ed NO, la caldaia “sente” la corrente e si accende.</p>

<p>Pur essendo diverse le sigle sui contatti, dalla documentazione su Nest.com e facendo un po’ di <a href="http://www.epatest.com/store/resources/images/misc/how-a-thermostat-operates.pdf">ricerche sulla rete</a> si capisce che i contatti W1 ed RH (W1=white 1, RH=red heating) degli impianti americani hanno esattamente la stessa funzione: quando si vuole attivare il riscaldamento Nest chiude il circuito tra W1 e RH.</p>

<p>A questo punto sembrerebbe una cosa semplice collegare i cavi precedentemente collegati a C e NC sul vecchio termostato ai contatti W1 e RH del Nest, ma un rapido controllo col tester mostra tra filo bianco e filo rosso una tensione di 220V-AC (corrente alternata) mentre il Nest è progettato per i sistemi USA che usano per lo più un circuito di controllo a 24V-AC.</p>

<p>Una verifica sullo schema elettrico della caldaia conferma quanto misurato dal tester: su uno dei due contatti che vanno al termostato è collegata la fase della 220.</p>

<p>Occorre quindi realizzare due circuiti separati e dipendenti uno dall’altro: quello del Nest a 24V-AC e quello della caldaia a 220V-AC. Questo si realizza agevolmente attraverso un relè e un trasformatore 220V-AC -> 24V-AC.</p>

<p>La funzione del <a href="http://it.wikipedia.org/wiki/Relè">relè</a> è proprio quella di realizzare due circuiti separati elettricamente ma dipendenti uno dall’altro. Si tratta fondamentalmente un interruttore comandato dall’elettricità: nella sua forma più semplice prevede un circuito “di comando”, dove faremo passare corrente solo quando vogliamo che nel secondo circuito “di potenza” passi corrente. I due circuiti però rimangono elettricamente isolati uno dall’altro, permettendo quindi di utilizzare due tensioni differenti.</p>

<p>Nel caso specifico ho utilizzato un trasformatore <a href="http://www.ops-ecat.schneider-electric.com/ecatalogue/browse.do?cat_id=BU_POW_913_L1_Z067&amp;conf=seo&amp;el_typ=product&amp;nod_id=0000000002&amp;prd_id=15219&amp;scp_id=Z067">Schneider Electric 15219</a> e un <a href="http://uk.farnell.com/finder/60-13-8-024-0040/relay-3pco-10a-24vac/dp/1169196">relè Finder</a>.</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/strumenti.jpg" title="I componenti del progetto" ></p>

<p>Il collegamento di base è molto semplice: si collegano i contatti del trasformatore per la 220 alla rete elettrica di casa (i fili arancione e blu di alimentazione del vecchio termostato).  Dopodichè si procede a realizzare un circuito di comando del relè operato dal Nest: si collega un contatto dell’uscita 24V-AC del trasformatore al contatto RH del Nest, il contatto W1 del Nest a uno dei due contatti di comando del relè, e l’altro contatto di comando del relè al secondo contatto 24V-AC del trasformatore. In questo modo quando il Nest non vuole riscaldamento il circuito di comando del relè è aperto (spento), quando il Nest comanda l’accensione sul circuito di comando del relè arriva la tensione a 24V-AC che attiverà l’interruttore chiudendo il circuito di potenza.
A questo punto non rimane che collegare i due contatti del circuito di potenza ai due fili di comando della caldaia, i fili rosso e bianco collegati al termostato precedente.</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/no-common.png" title="Schema di prima installazione" ></p>

<p>Collegando il tutto e montando il Nest sulla sua base si verifica che il circuito funziona a dovere, il Nest si accende, e la caldaia risponde correttamente ai suoi comandi. Rimane però un dettaglio: come si carica la batteria del Nest?</p>

<p>Il termostato precedente prendeva corrente direttamente dal circuito 220V di casa che era separato da quello di comando. Il Nest adotta una strategia differente: utilizza la tensione 24V sullo stesso circuito di comando per tenere la batteria carica. Ci si può chiedere come possa riuscirci anche quando la temperatura di casa è alta e la caldaia deve rimanere spenta: se chiude il circuito di comando per alimentare la batteria la caldaia si accorge che sul circuito passa corrente e si accende. Per evitare che la caldaia si attivi Nest sfrutta l’inerzia del circuito di accensione della caldaia stessa: tra il momento in cui sul circuito di comando passa corrente e quando l’apparato a gas si accende passa un po’ di tempo. Nest quindi si carica aprendo e chiudendo in continuazione il circuito di comando, facendo passare ogni volta abbastanza corrente da caricare la batteria, ma non abbastanza da far partire la caldaia.</p>

<p>Essendo il tipo di relè da me utilizzato discretamente rumoroso (quando si attiva si sente un clack pronunciato), durante la fase di carica è assolutamente evidente un suono continuo TRRRRRRRRR prodottto dal continuo attivarsi e disattivarsi del circuito.
Non sono abbastanza esperto da valutare la robustezza del relè e le implicazioni per la caldaia di questo tipo di comportamento, ma la cosa non mi pare particolarmente elegante. Per fortuna Nest prevede la possibilità di prendere carica per la batteria senza attivare il circuito di comando attraverso un contatto C (common). In sostanza quando ha bisogno di carica Nest fa passare corrente tra i contatti RH e C, lasciando inattivo W1.</p>

<p>Per adattare il nostro circuito basta collegare un ulteriore filo tra il contatto a 24V del trasformatore dove è già connesso il relè e il contatto C sulla base del Nest.</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/Schema-IT.png" title="Schema di installazione con common cable" ></p>

<p>Riattivando l’impianto e montando il Nest si verifica che il termostato si carica ma il relè rimane silenzioso e inattivo fino a quando la temperatura non scende sotto a quella impostata sul Nest, a quel punto con un bel click del relè si sente partire la caldaia.</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/base.png" title="La base del Nest" ></p>

<p>Missione compiuta: ora non resta che configurare il Nest e collegarlo alla rete WiFi di casa. Qui interverranno ulteriori problemi: Nest richiede il CAP della città dove è installato per scaricare dalla rete ora locale, temperatura esterna e previsioni del tempo, ma prevede solo città negli Stati Uniti e in Canada. Dovremo smanettare un po’ sulla rete di casa per fargli capire che anche in Italia si vive benissimo. Lo faremo insieme in un nuovo post di prossima pubblicazione.</p>

<p>Intanto qui sotto trovate alcune immagini dell&#8217;installazione finale.</p>

<p>(Nella puntata 166 di <a href="http://digitalia.fm">Digitalia</a> potete ascoltare discussione e commenti al riguardo)</p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/pannelloAperto.jpg" title="Pannello elettrico aperto" ></p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/Pannello.jpg" title="Pannello elettrico chiuso" ></p>

<p><img class="center" src="http://blog.digitalia.fm/images/2013-01-12-nest-in-italia/finale.jpg" title="Installazione completa" ></p>
]]></content>
  </entry>
  
</feed>
