Last active
October 5, 2024 15:38
-
-
Save Sillium/f904fb89444bc8dde12cfc07b8fa8728 to your computer and use it in GitHub Desktop.
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
const apiUrl = "https://pass.telekom.de/api/service/generic/v1/status" | |
let widget = await createWidget() | |
widget.backgroundColor = new Color("#777777") | |
if (!config.runsInWidget) { | |
await widget.presentSmall() | |
} | |
Script.setWidget(widget) | |
Script.complete() | |
async function createWidget(items) { | |
let fm = FileManager.local() | |
let dir = fm.documentsDirectory() | |
let path = fm.joinPath(dir, "scriptable-telekom.json") | |
const list = new ListWidget() | |
list.addSpacer(16) | |
try { | |
let r = new Request(apiUrl) | |
// API only answers for mobile Safari | |
r.headers = { | |
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1" | |
} | |
let data, fresh = 0 | |
try { | |
// Fetch data from pass.telekom.de | |
data = await r.loadJSON() | |
// Write JSON to iCloud file | |
fm.writeString(path, JSON.stringify(data, null, 2)) | |
fresh = 1 | |
} catch (err) { | |
// Read data from iCloud file | |
data = JSON.parse(fm.readString(path), null) | |
if (!data || !data.usedPercentage) { | |
const errorList = new ListWidget() | |
errorList.addText("Please disable WiFi for initial execution.") | |
return errorList | |
} | |
} | |
const line1 = list.addText("Telekom") | |
line1.font = Font.mediumSystemFont(12) | |
const line2 = list.addText(data.usedPercentage + "%") | |
line2.font = Font.boldSystemFont(36) | |
line2.textColor = Color.green() | |
if (data.usedPercentage >= 75) { | |
line2.textColor = Color.orange() | |
} else if (data.usedPercentage >= 90) { | |
line2.textColor = Color.red() | |
} | |
const line3 = list.addText(data.usedVolumeStr + " / " + data.initialVolumeStr) | |
line3.font = Font.mediumSystemFont(12) | |
list.addSpacer(16) | |
let line4, line5 | |
if (data.remainingTimeStr) { | |
line4 = list.addText("Remaining time:") | |
line4.font = Font.mediumSystemFont(12) | |
line5 = list.addText(data.remainingTimeStr) | |
line5.font = Font.mediumSystemFont(12) | |
} | |
// Gray out if local data instead of Telekom API data: | |
if (fresh == 0) { | |
line1.textColor = Color.darkGray() | |
line2.textColor = Color.darkGray() | |
line3.textColor = Color.darkGray() | |
if (data.remainingTimeStr) { | |
line4.textColor = Color.darkGray() | |
line5.textColor = Color.darkGray() | |
} | |
} | |
} catch(err) { | |
list.addText("Error fetching JSON from https://pass.telekom.de/api/service/generic/v1/status") | |
} | |
// Add time of last widget refresh: | |
list.addSpacer(4) | |
const now = new Date(); | |
const timeLabel = list.addDate(now) | |
timeLabel.font = Font.mediumSystemFont(10) | |
timeLabel.centerAlignText() | |
timeLabel.applyTimeStyle() | |
timeLabel.textColor = Color.darkGray() | |
return list | |
} |
I also wrote my own version if somebody is interested. https://gist.github.com/wolflu05/05ee63670e095fbe21420645f4b31d5a However, there is a little thing which im currently trying out. I plan to have an indicator of how much data I can consume this day, so I have the same data also for the next days.
Funktioniert auch mit CONGSTAR, da ja im gleichen D-Netz
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I don't have time to fiddle around with this, but here's a version that should fix a few of the bugs: https://gist.github.com/Sillium/235dc9fd873b25e321b3299da64c9c38
Please delete the folder iCloud Drive --> Scriptable --> <script name> depending on how you named the script in your Scriptable app.