Sen.se (ThermoPeanut) è fallita

Qualche tempo fa in questo articolo consigliavo di acquistare un ThermoPeanut per loggare la temperatura di una stanza. Sfortunatamente da qualche settimana i miei due termometri hanno smesso di funzionare e per quanto misurino ancora la temperatura istantanea non uploaddano più i dati sui server.

In rete non trovo informazioni certe ma credo che Sen.se, l’azienda che produceva il ThermoPeanut, sia fallita.

Inoltre ho notato che tutte le pagine social (Twitter, Instagram e Facebook) sono state cancellate e risultano irraggiungibili.

Ho provato ad inviare alcune mail al support quando pensavo che fosse un problema del mio dispositivo ma non ho mai ricevuto risposta.

Personalmente chiederò il reso ad Amazon considerando che sono ancora in garanzia. Vi consiglio di fare altrettanto dato che così il prodotto è inutilizzabile.

Come salvare i valori di temperatura e umidità rilevati da Nest

Nell’ambito della domotica – e in particolare dei termostati smart – il termostato Nest è sicuramente uno dei dispositivi più conosciuti. Al momento siamo arrivati alla terza generazione e Nest Labs – di proprietà di Google – ha da poco lanciato un nuovo modello “economico”, il Nest Thermostat E oltre a un sacco di altri dispositivi per la telesorveglianza.

Sfortunatamente, nonstante la prima generazione di Nest sia uscita ben 6 anni fa, ad oggi non è ancora possibile salvare i valori rilevati dal termostato per farsi un’idea dell’andamento della temperatura e dell’umidità nell’abitazione. Questo è un peccato, perché comunque quei dati vengono rilevati costantemente, solo non vengono salvati.

Guardando in rete anni fa mi sono imbattuto in questo blog – che ringrazio – che spiega come fare precisamente questo: loggare e salvare tutte le rilevazioni di Nest.

Tuttavia, visto che l’articolo originario ormai ha due anni e mezzo e richiede qualche modifica dello script (oltre ad essere in inglese), ho deciso di pubblicare una guida passo passo aggiornata e in italiano.

Alternativamente, se volete uno strumento ad hoc per segnare la temperatura (niente umidità purtroppo) e non avete voglia di smanettare potete acquistare un ThermoPeanut a 30 € su Amazon che funziona benissimo e pemette di esportare tutti i dati.

Purtroppo Sen.se, l’azienda che produceva il ThermoPeanut, è fallita. Nessuno dei miei dispositivi uploadda più i dati, hanno cancellato tutte le pagine social e non rispondono più alle mail.

Prerequisiti

  • un account Google (i dati verranno loggati su Google Sheet)
  • un account Nest ovviamente
  • un account di OpenWeatherMap (per sapere la temperatura esterna)

Come loggare i valori rilevati dal termostato Nest

  1. andate su Drive e create un nuovo “Foglio Google” (NUOVO > Fogli Google);
  2. nella prima riga del nuovo foglio scrivete una valore per ogni casella: Data, Target, T Interna, T esterna, Umidità, Riscaldamento, Away (questo passaggio è opzionale);
  3. segnatevi la stringa di caratteri tra /d/ e /edit nell’indirizzo del foglio (se l’URL è https://docs.google.com/spreadsheets/d/1cJoZRwzGY_c12vbyCAHNhPzB_vLidsTiK3V0TTjb21w/edit#gid=0 voi vi segnate 1cJoZRwzGY_c12vbyCAHNhPzB_vLidsTiK3V0TTjb21w);
  4. vi loggate su OpenWeatherMap, create una nuova API key e vi segnate anche questo valore (l’API key è una stringa alfanumerica di 32 caratteri);
  5. cercate la vostra città su OpenWeatherMap e vi segnate la stringa di numeri dopo /city/ nell’URL (per Roma ad esempio è 3169070).

Ok, buona parte del lavoro l’avete già fatto. Adesso dobbiamo mettere insieme lo script. Copiate il codice che trovate a fine articolo, quindi:

  1. aprite il foglio di Google Sheet creato al precedente punto 1 e cliccate su Strumenti > Editor di script;
  2. incollate il codice dello script appena copiato e modificate le prime righe sostituendo ai campi in MAIUSCOLO i valori corrispondenti (lasciando gli apostrofi all’inizio e alla fine);
  3. File > Salva
  4. Pubblica > Distribuisci come applicazione web
    Esegui l ‘applicazione come > Io ([email protected])
    Chi accede all’applicazione > Chiunque, inclusi utenti anonimi
    Implementa > OKVerificate che lo script funzioni correttamente cliccando su Esegui > doGet e andando a verificare nel foglio di Google Sheet se sono comparsi dei valori.
  5. Come ultimo passaggio impostiamo l’intervallo col quale vogliamo segnare i dati cliccando su Modifica > Trigger del progetto corrente > Aggiungi un nuovo trigger usando questi valori:
    Esegui = getData; Eventi = Basato su tempo – Timer minuti – Ogni 15 minuti e salvate.

Se avete fatto tutto correttamente ogni 15 minuti lo script loggerà i valori di temperatura, umidità e lo stato del termostato (caldaia ON/OFF, Away/Home) su una nuova riga del foglio di Google Sheet. Come intervallo potete anche mettere di più o di meno di 15 minuti, tuttavia non consiglio di scendere troppo.

Codice dello script

function doGet() {
var email = ‘MAILDELLACCOUNTNEST‘; //inserite qui la mail che usate per loggarvi su Nest
var password = ‘PASSWORDNEST‘; //inserite qui la password che usate per loggarvi su Nest
var sheetid = ‘STRINGAGOOGLESHEET‘; //inserite qui la stringa che vi siete segnati al precedente punto 3
var apikey = ‘APIKEY‘; //inserite qui la stringa che vi siete segnati al precedente punto 4
var city = ‘IDCITTAMETEO‘; //inserite qui la stringa che vi siete segnati al precedente punto 5

var login_auth = performLogin(email,password);

var headers = {
“Authorization” : ‘Basic ‘+login_auth[‘access_token’],
“X-nl-user-id” : login_auth[‘userid’],
“X-nl-protocol-version” : ‘1’,
‘Accept-Language’: ‘en-us’,
‘Connection’ : ‘keep-alive’,
‘Accept’ : ‘*/*’,
};

var options = {
‘headers’ : headers
};

var request=UrlFetchApp.fetch(login_auth[‘urls’][‘transport_url’]+’/v2/mobile/user.’+login_auth[‘userid’], options);
var result=JSON.parse(request.getContentText());

var structure_id = result[‘user’][login_auth[‘userid’]][‘structures’][0].split(‘.’)[1]
var device_id = result[‘structure’][structure_id][‘devices’][0].split(‘.’)[1]

var current_temp = result[“shared”][device_id][“current_temperature”];
var target_temp = result[“shared”][device_id][“target_temperature”];
var humidity = result[“device”][device_id][“current_humidity”]/100;
var auto_away = result[“shared”][device_id][“auto_away”];
var heater_state = result[“shared”][device_id][“hvac_heater_state”];
var time = new Date();

var wxrequest=UrlFetchApp.fetch(‘http://api.openweathermap.org/data/2.5/weather?id=’ + city + ‘&units=metric&APPID=’ + apikey’);
var wxresult=JSON.parse(wxrequest.getContentText());

var outside_temp = (wxresult[“main”][“temp”]);

var ss = SpreadsheetApp.openById(sheetid);
var sheet = ss.getSheets()[0];

// Appends a new row with 3 columns to the bottom of the
// spreadsheet containing the values in the array
sheet.appendRow( [ time, target_temp, current_temp, outside_temp, humidity, heater_state, auto_away ] );
}

function performLogin(email, password) {
var payload = {
“username” : email,
“password” : password
};

var options = {
“method” : “post”,
“payload” : payload
};

var response = JSON.parse(UrlFetchApp.fetch(‘https://home.nest.com/user/login’, options).getContentText());
if (‘error’ in response) {
throw “Invalid login credentials”;
}
return response
}

function getData(){
var url = ScriptApp.getService().getUrl();
var response = UrlFetchApp.fetch(url);
}