Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Telekom Data Usage - iOS 14 Widget for Scriptable app
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: pink; icon-glyph: exchange-alt;
const DEBUG = false
const log = DEBUG ? console.log.bind(console) : function () { };
// configure the library
const libraryInfo = {
name: 'TelekomDataUsageLibrary',
version: '1.0.3',
gitlabProject: 'https://gitlab.com/sillium-scriptable-projects/universal-scriptable-widget-libraries',
forceDownload: DEBUG
}
// download and import library
let library = importModule(await downloadLibrary(libraryInfo))
// create the widget
const params = {
widgetParameter: args.widgetParameter,
debug: DEBUG
}
const widget = await library.createWidget(params)
// preview the widget
if (!config.runsInWidget) {
await widget.presentSmall()
}
Script.setWidget(widget)
Script.complete()
/**
* - creates directory for library if not existing
* - downloads library file if not existing or forced
* - returns relative path to library module
* @param {{name: string, version: string, gitlabProject: string, forceDownload: bool}} library
*/
async function downloadLibrary(library) {
let fm = FileManager.local()
let scriptPath = module.filename
let libraryDir = scriptPath.replace(fm.fileName(scriptPath, true), fm.fileName(scriptPath, false))
if (fm.fileExists(libraryDir) && !fm.isDirectory(libraryDir)) {
fm.remove(libraryDir)
}
if (!fm.fileExists(libraryDir)) {
fm.createDirectory(libraryDir)
}
let libraryFilename = library.name + '_' + library.version + '.js'
let path = fm.joinPath(libraryDir, libraryFilename)
let forceDownload = (library.forceDownload) ? library.forceDownload : false
if (fm.fileExists(path) && !forceDownload) {
log("Not downloading library file")
} else {
let r = Math.random().toString(36).substring(7);
let libraryUrl = library.gitlabProject + '/-/raw/' + library.version + '/' + library.name + '.js?random=' + r
log("Downloading library file '" + libraryUrl + "' to '" + path + "'")
const req = new Request(libraryUrl)
let libraryFile = await req.load()
fm.write(path, libraryFile)
}
return fm.fileName(scriptPath, false) + '/' + libraryFilename
}
@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 19, 2020

Telekom Widget für Scriptable + iOS 14

Achtung: Das Widget funktioniert nur für Telekom/Congstar/Fraenk(?)-Kunden, also wenn Du auf Deinem iPhone im Browser https://pass.telekom.de/api/service/generic/v1/status aufrufen kannst, während Du nicht mit einem WLAN verbunden bist.

Das Widget holt die Verbrauchsdaten von pass.telekom.de und zeigt sie an. Sollte das iPhone in einem WLAN und die API der Telekom nicht erreichbar sein, greift es auf ein lokales Backup des JSONs zurück und zeigt die älteren Daten ausgegraut an.

IMG_0774_2

Scriptable App und Script installieren

  • Scriptable installieren
  • TelekomDataUsage.js-Script von oben in Scriptable als TelekomDataUsage abspeichern
  • vor dem allerersten Aufruf WLAN deaktivieren, um pass.telekom.de aufrufen zu können
  • Script TelekomDataUsage ausführen
  • WLAN ggfs. wieder aktivieren

Widget installieren

  • Widget zum Home Screen hinzufügen durch langes Drücken auf eine leere Stelle im Home Screen, dann das "+" oben
  • Widget konfigurieren (siehe unten)
  • Warten (das Refresh-Intervall für Widgets wird von iOS begrenzt auf einem Wert zwischen 10 und 15 Minuten)

IMG_0770

Widget konfigurieren

  • Script: TelekomDataUsage
  • When Interacting: Run Script
  • Parameter: bspw. de;used;telekom (siehe unten)

Widget Parameter

Parameter in folgendem Format eintragen: language;whatToShow;look

  • language: de oder en
  • whatToShow: used oder available
  • look: telekom, congstar, fraenk, black, gray oder white

Beispiele: de;used;telekom oder en;available;gray

Problembehebung

Wenn etwas nicht funktioniert oder falsch angezeigt wird, bitte folgendes machen:

  • Im obigen Script in Zeile 10 nachsehen, welche Version aktuell ist. Momentan also "1.0.3".
  • Im Script in Scriptable in Zeile 7 diese aktuelle Versionsnummer eintragen
  • Im Script in Scriptable in Zeile 9 das "DEBUG" auf "true" ändern, also: forceDownload: true
  • WLAN ausschalten, Script ein Mal laufen lassen
  • WLAN wieder anschalten
  • Im Script in Scriptable in Zeile 9 das "true" wieder auf "DEBUG" zurück ändern, also: forceDownload: DEBUG

Thanks

A big Thank you to @simonbs for making great apps like Scriptable, DataJar or Jayson.

Icons made by Pixel perfect from www.flaticon.com

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 19, 2020

Telekom Data Usage Widget for Scriptable + iOS 14

Attention: This widget only works for customers onf Telekom/Congstar/Fraenk(?). You have to be able to access https://pass.telekom.de/api/service/generic/v1/status in your iPhone browser when not connected to a WiFi.

The widget fetches and displays data consumption information from pass.telekom.de. If the iPhone is connected to a WiFi, it will show locally cached data from the last successful API call.

Install Scriptable app and the script

  • install Scriptable
  • save TelekomDataUsage.js script (see above) as TelekomDataUsage in Scriptable
  • before running the script for the very first time, disable WiFi to make sure pass.telekom.de is accessible
  • run script TelekomDataUsage
  • (re-)activate WiFi

Install Widget

  • add widget to home screen by long-pressing an empty space on the home screen and pressing the "+" in the top left corner
  • configure widget (see below)
  • wait (refresh interval is limited by iOS to somewhere in between 10 and 15 minutes)

Configure widget

  • Script: TelekomDataUsage
  • When Interacting: Run Script
  • Parameter: bspw. de;used;telekom (see below)

Widget Parameter

Enter parameter in this format: language;whatToShow;look

  • language: de or en
  • whatToShow: used or available
  • look: telekom, congstar, fraenk, black, gray or white

Examples: de;used;telekom or en;available;gray

Thanks

A big Thank you to @simonbs for making great apps like Scriptable, DataJar or Jayson.

Icons made by Pixel perfect from www.flaticon.com

@xILuigi

This comment has been minimized.

Copy link

@xILuigi xILuigi commented Nov 20, 2020

Kannst du mal bitte ein Video machen und zeigen wie das geht mit Congstar wäre nett

@chimcen

This comment has been minimized.

Copy link

@chimcen chimcen commented Nov 20, 2020

Das Ding ist super geworden! Danke.
Lediglich die Zeilenbreite müsste man noch minimal anpassen...
793DCFA7-35DD-433D-9C60-065C35E28412

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 20, 2020

Das Ding ist super geworden! Danke.
Lediglich die Zeilenbreite müsste man noch minimal anpassen...

Probier mal bitte in Zeile 7 Deines Scripts die Version von 1.0.0 auf 1.0.1 zu ändern.

@chimcen

This comment has been minimized.

Copy link

@chimcen chimcen commented Nov 20, 2020

Perfekt, danke 🤩

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 20, 2020

Kannst du mal bitte ein Video machen und zeigen wie das geht mit Congstar wäre nett

https://photos.app.goo.gl/Vj2VM3MBzTWcPmdu6

@xILuigi

This comment has been minimized.

Copy link

@xILuigi xILuigi commented Nov 20, 2020

Jetzt geht es echt aufwändig sowas oder?😅 Und ich danke dir dafür echt! Danke für deine Zeit das du sowas machst echt korrekt! Bleib Gesund

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 20, 2020

Es war noch ein Fehler mit der Anzeige bei "Verbraucht"/"Verfügbar" drin, der jetzt behoben ist. Im Script in Scriptable in Zeile 7 (hier oben im Gist Zeile 10) einmal die Version auf 1.0.3 ändern, einmal ohne WLAN ausführen und danach sollte es funktionieren.

@HelmutTo

This comment has been minimized.

Copy link

@HelmutTo HelmutTo commented Nov 20, 2020

Ich weiss nicht wo dieses:

Enter parameter in this format: language;whatToShow;look

language: de or en
whatToShow: used or available
look: telekom, congstar, fraenk, black, gray or white
Examples: de;used;telekom or en;available;gray

Hier eingesetzt werden kann:

**_// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: pink; icon-glyph: exchange-alt;
const DEBUG = false
const log = DEBUG ? console.log.bind(console) : function () { };

// configure the library
const libraryInfo = {
name: 'TelekomDataUsageLibrary',
version: '1.0.2',
gitlabProject: 'https://gitlab.com/sillium-scriptable-projects/universal-scriptable-widget-libraries',
forceDownload: DEBUG
}

// download and import library
let library = importModule(await downloadLibrary(libraryInfo))

// create the widget
const params = {
widgetParameter: args.widgetParameter,
debug: DEBUG
}
const widget = await library.createWidget(params)

// preview the widget
if (!config.runsInWidget) {
await widget.presentSmall()
}

Script.setWidget(widget)
Script.complete()

/**

    • creates directory for library if not existing
    • downloads library file if not existing or forced
    • returns relative path to library module
  • @param {{name: string, version: string, gitlabProject: string, forceDownload: bool}} library
    */
    async function downloadLibrary(library) {
    let fm = FileManager.local()

    let scriptPath = module.filename
    let libraryDir = scriptPath.replace(fm.fileName(scriptPath, true), fm.fileName(scriptPath, false))

    if (fm.fileExists(libraryDir) && !fm.isDirectory(libraryDir)) {
    fm.remove(libraryDir)
    }
    if (!fm.fileExists(libraryDir)) {
    fm.createDirectory(libraryDir)
    }
    let libraryFilename = library.name + '_' + library.version + '.js'
    let path = fm.joinPath(libraryDir, libraryFilename)

    let forceDownload = (library.forceDownload) ? library.forceDownload : false
    if (fm.fileExists(path) && !forceDownload) {
    log("Not downloading library file")
    } else {
    let r = Math.random().toString(36).substring(7);
    let libraryUrl = library.gitlabProject + '/-/raw/' + library.version + '/' + library.name + '.js?random=' + r
    log("Downloading library file '" + libraryUrl + "' to '" + path + "'")
    const req = new Request(libraryUrl)
    let libraryFile = await req.load()
    fm.write(path, libraryFile)
    }

    return fm.fileName(scriptPath, false) + '/' + libraryFilename
    }_**

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 20, 2020

Nicht im Code, sondern in der Konfiguration des Widgets. Siehe allerletzter Screenshot hier:

IMG_0770

@HelmutTo

This comment has been minimized.

Copy link

@HelmutTo HelmutTo commented Nov 20, 2020

Sorry- aber jetzt habe ich es auch kapiert... Vielen vielen Dank für die Mühen...

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 20, 2020

Sorry- aber jetzt habe ich es auch kapiert... Vielen vielen Dank für die Mühen...

👍

Am besten in Zeile 7 (jetzt tatsächlich im Code) mal die Version ändern von 1.0.2 auf 1.0.3.

@HelmutTo

This comment has been minimized.

Copy link

@HelmutTo HelmutTo commented Nov 20, 2020

Was ändert sich durch die Änderung der Version wenn ich das editiere?

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Nov 20, 2020

In 1.0.2 war evtl. ein Fehler drin, der dafür sorgt, dass immer 0,94 GB angezeigt wird bei "verfügbar"/"verbraucht". Wenn bei Dir alle Zahlen stimmen, brauchst Du nichts ändern.

@nicoh88

This comment has been minimized.

Copy link

@nicoh88 nicoh88 commented Nov 27, 2020

@Sillium

Vielen Dank dafür!
Machst du es Design- und Logo-Technisch noch für Klarmobil.de? 🤩

EDA126ED-056B-4D5F-A318-1FFC340B6581

@xILuigi

This comment has been minimized.

Copy link

@xILuigi xILuigi commented Nov 28, 2020

Bei mir steht jetzt API offline? Ist das schlimm? Und wenn der Monat vorbei ist. Geht es dann wieder im Dezember oder ist da ein Fehler?

@nicoh88

This comment has been minimized.

Copy link

@nicoh88 nicoh88 commented Nov 29, 2020

@xILuigi

Wenn du dich im WLAN befindest ist das Normal. Da im WLAN nicht der Datenverbrauch der SIM-Karte abgerufen werden kann. Solange du dich im WLAN befindest, werden die Werte aus dem Cache gezeigt.

Viele Grüße

@frankreckt

This comment has been minimized.

Copy link

@frankreckt frankreckt commented Dec 6, 2020

Was noch cool wäre: Wenn das Widget mit unlimited Daten umgehen könnte. Im Inland hab ich ne Datenflat, so dass das Widget eigentlich nicht interessant ist, aber im Ausland (54GB) schon. Es wäre schön, wenn dann im Inland anstelle von NaN etwas sinnvolles stehen würde

@Sillium

This comment has been minimized.

Copy link
Owner Author

@Sillium Sillium commented Dec 7, 2020

@Sillium

Vielen Dank dafür!
Machst du es Design- und Logo-Technisch noch für Klarmobil.de? 🤩

EDA126ED-056B-4D5F-A318-1FFC340B6581

Gucke ich mir bei Gelegenheit an, ja

@Alex-c2p

This comment has been minimized.

Copy link

@Alex-c2p Alex-c2p commented Dec 23, 2020

@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?

@powershot1

This comment has been minimized.

Copy link

@powershot1 powershot1 commented Dec 30, 2020

@xILuigi

Wenn du dich im WLAN befindest ist das Normal. Da im WLAN nicht der Datenverbrauch der SIM-Karte abgerufen werden kann. Solange du dich im WLAN befindest, werden die Werte aus dem Cache gezeigt.

Viele Grüße

Aber das Congstar eigene Widget zeigt den aktuellen Verbrauch auch im WLAN an. Kann man da nicht irgendwo die Daten abgreifen?

@mahony85

This comment has been minimized.

Copy link

@mahony85 mahony85 commented Jan 5, 2021

Hallo zusammen
Erstmal Danke für das tolle widget Beschreibungen und Erklärungen. Kann jemand vielleicht das gleiche widget für Minuten statt datenvolumen einrichten zB für auslands telefonate
Vieleb dank im Voraus

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment