Created
August 31, 2020 05:59
-
-
Save deanlyoung/9a10e2c7f9f10dd6e4e512881c8a35c9 to your computer and use it in GitHub Desktop.
Revisions
-
deanlyoung created this gist
Aug 31, 2020 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ // change these const token = "" const device_type = "" const device_id = "" // instantiate widget const data = await fetchData() const widget = createWidget(data) Script.setWidget(widget) Script.complete() function createWidget(data) { console.log(data) const lw = new ListWidget() const bgColor = new LinearGradient() bgColor.colors = [new Color("#000"), new Color("#000")] bgColor.locations = [0.0, 1.0] lw.backgroundGradient = bgColor lw.centerAlignContent() const datetime = new Date() const dfTime = new DateFormatter() dfTime.locale = "gb" dfTime.useShortDateStyle() dfTime.useShortTimeStyle() const datetimeLine = lw.addText(`${dfTime.string(datetime)}`) datetimeLine.textSize = 12 datetimeLine.textColor = new Color("#ccc") const temperatureLine = lw.addText(`[🌡] ${Number(data.temp).toFixed(2)}°F`) temperatureLine.textSize = 12 temperatureLine.textColor = new Color("#ccc") const humidityLine = lw.addText(`[️☔️] ${Number(data.humid).toFixed(2)}%`) humidityLine.textSize = 12 humidityLine.textColor = new Color("#ccc") const co2Line = lw.addText(`[🌬] ${Number(data.co2).toFixed(0)} ppm`) co2Line.textSize = 12 co2Line.textColor = new Color("#ccc") const tvocLine = lw.addText(`[♨️] ${Number(data.voc).toFixed(0)} ppb`) tvocLine.textSize = 12 tvocLine.textColor = new Color("#ccc") const pm25Line = lw.addText(`[🚬] ${Number(data.pm25).toFixed(0)} μg/m³`) pm25Line.textSize = 12 pm25Line.textColor = new Color("#ccc") return lw } async function fetchData() { const bearer_token = "Bearer " + token const headers = {"Authorization": bearer_token} const url = `https://developer-apis.awair.is/v1/users/self/devices/${device_type}/${device_id}/air-data/raw?limit=12&desc=true&fahrenheit=true` const request = new Request(url) request.headers = headers const resp = await request.loadJSON() const data = resp.data const sensors = data .map(sensor => sensor.sensors) .reduce((a, b) => a.concat(b)) .reduce((a, b) => {a[b.comp] = a[b.comp] ? 0.5*(a[b.comp] + b.value) : b.value; return a}, {}); // const score = data.reduce((a, b) => {return a + b.score}, 0) / data.length; return sensors } This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ // change this const station_id = "" const purple_air_url = "https://www.purpleair.com/json?show=" + station_id // instantiate widget const data = await fetchData() const widget = createWidget(data) Script.setWidget(widget) Script.complete() function createWidget(data) { console.log(data) const lw = new ListWidget() const bgColor = new LinearGradient() bgColor.colors = [new Color("#000"), new Color("#000")] bgColor.locations = [0.0, 1.0] lw.backgroundGradient = bgColor lw.centerAlignContent() const datetimeLine = lw.addText(`${data.last_seen}`) datetimeLine.textSize = 12 datetimeLine.textColor = new Color("#ccc") const temperatureLine = lw.addText(`[🌡] ${Number(data.temp).toFixed(0)}°F`) temperatureLine.textSize = 12 temperatureLine.textColor = new Color("#ccc") const humidityLine = lw.addText(`[️☔️] ${Number(data.humid).toFixed(0)}%`) humidityLine.textSize = 12 humidityLine.textColor = new Color("#ccc") const co2Line = lw.addText(`[🌬] `) co2Line.textSize = 12 co2Line.textColor = new Color("#ccc") const tvocLine = lw.addText(`[♨️] `) tvocLine.textSize = 12 tvocLine.textColor = new Color("#ccc") const pm25Line = lw.addText(`[🚬] ${Number(data.pm25).toFixed(2)} μg/m³`) pm25Line.textSize = 12 pm25Line.textColor = new Color("#ccc") const pressureLine = lw.addText(`[🚩] ${Number(data.pressure).toFixed(2)} mbar`) pressureLine.textSize = 12 pressureLine.textColor = new Color("#ccc") return lw } async function fetchData() { const request = new Request(purple_air_url) const resp = await request.loadJSON() const data = resp.results[0] const sensors = {} sensors.pm25 = data.PM2_5Value sensors.temp = data.temp_f sensors.humid = data.humidity sensors.pressure = data.pressure const datetime = new Date(data.LastSeen * 1000) const dfTime = new DateFormatter() dfTime.locale = "gb" dfTime.useShortDateStyle() dfTime.useShortTimeStyle() sensors.last_seen = dfTime.string(datetime) return sensors }