Created
August 26, 2017 11:11
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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