Created
August 31, 2020 05:59
-
-
Save deanlyoung/9a10e2c7f9f10dd6e4e512881c8a35c9 to your computer and use it in GitHub Desktop.
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 characters
// 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 characters
// 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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment