Skip to content

Instantly share code, notes, and snippets.

@arcatdmz
Created August 26, 2017 11:11
Show Gist options
  • Save arcatdmz/c88834c4f55a2a0b79a7cc3d7c73e4bc to your computer and use it in GitHub Desktop.
Save arcatdmz/c88834c4f55a2a0b79a7cc3d7c73e4bc to your computer and use it in GitHub Desktop.
Google Apps Script for periodically recording Wio Node temperature/humidity in a Google Spreadsheet
var accessToken = "YOUR_WIO_NODE_ACCESS_TOKEN"
, accessTokenQuery = "?access_token=" + accessToken
, logsSheetName = "logs"
, graphSheetName = "graph"
, graphHours = 240 /* 10 days */;
function main() {
var data = retrieveData();
appendRow(data);
sleepNode(50 * 60);
}
/**
* Retrieve data from Wio Node
*/
function retrieveData() {
// retrieve data
const baseUrl = "https://us.wio.seeed.io/v1/node/GroveTempHumD0/"
const humidityUrl = baseUrl + "humidity" + accessTokenQuery
, humidityObj = JSON.parse(
UrlFetchApp.fetch(humidityUrl).getContentText())
, humidity = humidityObj.humidity
const temperatureUrl = baseUrl + "temperature" + accessTokenQuery
, temperatureObj = JSON.parse(
UrlFetchApp.fetch(temperatureUrl).getContentText())
, temperature = temperatureObj.celsius_degree;
Logger.log("Wio/GroveTempHumD0: OK");
return [ new Date(), humidity, temperature ];
}
/**
* Append data to the sheet
*/
function appendRow(data) {
// insert a row right after the head row
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
, logsSheet = spreadsheet.getSheetByName(logsSheetName)
, frozenRows = logsSheet.getFrozenRows();
logsSheet.insertRowAfter(frozenRows);
var range = logsSheet.getRange(frozenRows + 1, 1, 1, 3);
range.setValues([data]);
// update range
const graphSheet = spreadsheet.getSheetByName("graph")
, chart = graphSheet.getCharts()[0]
, builder = chart.modify()
, ranges = builder.getRanges();
builder.addRange(logsSheet.getRange("A1:C" + (graphHours + 1)));
for (var i = 0; i < ranges.length; i ++) {
builder.removeRange(ranges[i]);
}
Logger.log("Spreadsheet: OK");
builder.build();
}
/**
* Turn off Wio Node for the specified seconds
*/
function sleepNode(sleepTimeSec) {
// post a sleep request with
const sleepBaseUrl = "https://us.wio.seeed.io/v1/node/pm/sleep/"
, sleepUrl = sleepBaseUrl + sleepTimeSec + accessTokenQuery
, payload = { /* no data required */ }
, response = JSON.parse(
UrlFetchApp.fetch(sleepUrl, { "method": "POST", "payload": payload }).getContentText());
Logger.log("Wio/pm/sleep: "
+ (response.result
? response.result
: (response.error
? "error=" + response.error
: "(unknown error)")));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment