Skip to content

Instantly share code, notes, and snippets.

@Sillium
Last active January 15, 2025 05:41
Show Gist options
  • Select an option

  • Save Sillium/f904fb89444bc8dde12cfc07b8fa8728 to your computer and use it in GitHub Desktop.

Select an option

Save Sillium/f904fb89444bc8dde12cfc07b8fa8728 to your computer and use it in GitHub Desktop.
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
}
@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

Hi,
leider weiss ich nicht wo ich im Script auf deutsch einstellen kann, wo ich im Script das Fraenk Logo integrieren kann...
Kann mir mal jemand farblich die Passagen markieren? - Bitte?

Bitte mal dem obigen Link (https://gist.github.com/Sillium/313164aec3d835c076ebfcd330f1be14) folgen und die paar Sätze Anleitung lesen.

@chimcen

chimcen commented Nov 20, 2020

Copy link
Copy Markdown

Das mit dem fraenk Logo würde mich auch reizen ;)

Bitte mal dem obigen Link (https://gist.github.com/Sillium/313164aec3d835c076ebfcd330f1be14) folgen und die paar Sätze Anleitung lesen.

YMMD

@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

Hi,
leider weiss ich nicht wo ich im Script auf deutsch einstellen kann, wo ich im Script das Fraenk Logo integrieren kann...
Kann mir mal jemand farblich die Passagen markieren? - Bitte?

Was vielleicht nicht ganz klar wurde: Ihr müsst das neue Script verwenden.

@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

Das mit dem fraenk Logo würde mich auch reizen ;)

Was vielleicht nicht ganz klar wurde: Ihr müsst das neue Script verwenden.

@chimcen

chimcen commented Nov 20, 2020

Copy link
Copy Markdown

Wenn man liest war es eigentlich schon klar ;)

@NoTrace-Kai

Copy link
Copy Markdown

Ups ... jetzt habe ich es auch verstanden und es hat sogar beim ersten Versuch geklappt ;)
Danke für die Hilfe ... und Sorry für die Mühen ;)

ghost commented Dec 23, 2020

Copy link
Copy Markdown

@Sillium

Erstmal vielen Dank für die tolle Arbeit. Leider aktualisiert sich das Widget nicht selbstständig im Mobilfunknetz. Hab für 15 min WLAN abgeschaltet aber das Widget bleibt ausgegraut. Hast du eine Idee voran es liegen könnte?

@User15060164

Copy link
Copy Markdown

Bei mir wird die falsche verbleibende GB Anzahl angezeigt genauso wie die Prozent Zahl (was kann ich tun)

@Romy-006

Copy link
Copy Markdown

Wo kann ich einen JavaScript Code bekommen für ein Widget, um die mobilen Daten am Handy ein-und auszuschalten?

@marc1234S

Copy link
Copy Markdown

Super und Danke - so sollte es sein!

Könntest du mir den Code auch zuschicken

@Vortilion

Copy link
Copy Markdown

Zeigt mir seit heute plötzlich nur noch „undefined“ an. ;(

@Sillium

Sillium commented Jul 23, 2021

Copy link
Copy Markdown
Author

Zeigt mir seit heute plötzlich nur noch „undefined“ an. ;(

Das ist, weil die Telekom für diesen Monat für alle/viele Kunden unbegrenztes Datenvolumen freigeschaltet hat. Siehe https://pass.telekom.de

@sfksuperman

Copy link
Copy Markdown

I'm getting Please disable WiFi for initial execution error even when my WiFi is disabled. Please share the working script. Thanks.

@Funterrain

Copy link
Copy Markdown

Since yesterday I‘m getting
2022-06-23 09:05:39: Error on line 16:27: No file to import at Telekom/TelekomDataUsageLibrary_1.0.3.js.

@Sillium

Sillium commented Jul 5, 2022

Copy link
Copy Markdown
Author

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.

@wolflu05

Copy link
Copy Markdown

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.

@Quickred

Copy link
Copy Markdown

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