Skip to content

Instantly share code, notes, and snippets.

@LupusArgentum
Forked from Sillium/telekom.js
Last active November 7, 2020 15:04
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save LupusArgentum/27a12aeb2db42cf1a3658f6b10ad9079 to your computer and use it in GitHub Desktop.
Save LupusArgentum/27a12aeb2db42cf1a3658f6b10ad9079 to your computer and use it in GitHub Desktop.
iOS-Widget für Datenverbrauch im Telekom-Netz (Forked from Sillium/telekom.js)
@LupusArgentum
Copy link
Author

LupusArgentum commented Oct 23, 2020

- HINWEIS: Die Entwicklung des Widgets geht in einer eigens erstellten Repository weiter! 
- Dieser gist wird NICHT mehr geupdated.

LINK ZU ALLEN NEUERUNGEN: https://github.com/LupusArgentum/TelekomWidget

Für einen alternativen Fork mit einigen nützlichen Änderungen, hier entlang >>>
https://gist.github.com/JoeGit42/bffae224a1398d2c35097fdefe2f4a0c

iOS-Widget für Datenverbrauch im Telekom-Netz

(Forked from Sillium/telekom.js)

  • "API offline" wird angezeigt, wenn datapass.de nicht aufgerufen werden kann (z.B. wenn WLAN aktiv ist)
  • verbleibende Zeit wird rot angezeigt, wenn weniger als 3 Tage verbleiben
  • Komplett Dark- und Lightmode kompatibel
  • funktioniert mit allen Telekom-Tarifen mit Datenvolumen, die Zugriff auf datapass.de haben (z.B. auch Prepaid-Discounter von congstar)

Bugs

if (data.passName == "Ihr Datenvolumen" || data.passName == "Ihr Telekom Datentarif") {
  line1 = list.addText("Datenvolumen")
} else {
  line1 = list.addText("Pass: " + data.passName)
}

Diese Code-Zeilen werden verwendet, um normales Inklusivvolumen von evtl. gebuchten Datenpässen unterscheiden zu können.
Hier kann es zu Problemen kommen, wenn das gebuchte Datenvolumen einen anderen Passnamen hat. Hier hilft es, den Passnamen selbst zu recherchieren und den Code entsprechend anzupassen.

@NoTrace-Kai
Copy link

Super. Sieht gut aus.

@discotizer
Copy link

discotizer commented Oct 26, 2020

Mega! Vielen Dank.

@entoryFB
Copy link

Vielen Dank
Ich habe auch noch einen Vertrag Norma Connect (Netz Telekom). Kann man hier irgendwie ebenfalls die Daten über ein Script abfragen?
Bisher muss man sich einloggen und bekommt dann seinen Verbrauch angezeigt
Würde mich über eine Hilfestellung freuen.

7ABA4128-F88A-4B41-9FE9-0B4F3BB10EB0

@LupusArgentum
Copy link
Author

LupusArgentum commented Oct 26, 2020

Vielen Dank
Ich habe auch noch einen Vertrag Norma Connect (Netz Telekom). Kann man hier irgendwie ebenfalls die Daten über ein Script abfragen?
Bisher muss man sich einloggen und bekommt dann seinen Verbrauch angezeigt
Würde mich über eine Hilfestellung freuen.

Wenn du mit deiner normaconnect-Karte die Website https://datapass.de aufrufen kannst, und dort dein Datenverbrauch angezeigt wird, sollte das Widget auch damit funktionieren. Falls das nicht geht, fürchte ich dass die keine öffentliche API zur Verfügung stellen.

@entoryFB
Copy link

Vielen Dank
Ich habe auch noch einen Vertrag Norma Connect (Netz Telekom). Kann man hier irgendwie ebenfalls die Daten über ein Script abfragen?
Bisher muss man sich einloggen und bekommt dann seinen Verbrauch angezeigt
Würde mich über eine Hilfestellung freuen.

Wenn du mit deiner normaconnect-Karte die Website https://datapass.de aufrufen kannst, und dort dein Datenverbrauch angezeigt wird, sollte das Widget auch damit funktionieren. Falls das nicht geht, fürchte ich dass die keine öffentliche API zur Verfügung stellen.

Danke für die Rückmeldung.
Das es mit der API nicht funktioniert ist mir bewusst. Meine Hoffnung ging in Richtung Aufruf über die Internetseite mit automatischer Anmeldung

@Reborn2
Copy link

Reborn2 commented Oct 26, 2020

Hallo

Beim mir geht es nur mit „Ihr Telekom Datentarif“ in der Zeile

if (data.passName == "Ihr Datenvolumen")

Das es Datenvolumen anzeigt, sonst zeigt es „Pass: Ihr Telekom Datentarif“ an und das schneidet es dann auch noch ab, kann man das mit anfangen ?

@LupusArgentum
Copy link
Author

LupusArgentum commented Oct 26, 2020

Hallo

Beim mir geht es nur mit „Ihr Telekom Datentarif“ in der Zeile

if (data.passName == "Ihr Datenvolumen")

Das es Datenvolumen anzeigt, sonst zeigt es „Pass: Ihr Telekom Datentarif“ an und das schneidet es dann auch noch ab, kann man das mit anfangen ?

Ich habe den Code so angepasst, dass es nun korrekt angezeigt werden sollte, auch wenn dein Tarif "Ihr Telekom Datentarif" heißt statt "Ihr Datenvolumen". Ist allerdings nicht wirklich universell lösbar, da der nächste dann einen Tarif mit dem Namen "Ihr Telekom Datenvolumen" haben könnte, und dann wäre die Lösung wieder nutzlos ;) im Zweifel einfach den Pass-Namen selbst recherchieren und in die if-condition reinpacken.

@LupusArgentum
Copy link
Author

LupusArgentum commented Oct 26, 2020

Das es mit der API nicht funktioniert ist mir bewusst. Meine Hoffnung ging in Richtung Aufruf über die Internetseite mit automatischer Anmeldung

Das ist vielleicht möglich, aber da bist du hier leider an der falschen Adresse. Das wäre mir persönlich zu aufwendig zum recherchieren und programmieren. Aber vielleicht wird sowas ja irgendwann noch von Sillium erstellt. Viel Glück!

@LupusArgentum
Copy link
Author

Danke für das Lob und euren Input! Schön, dass euch mein Fork gefällt.

@Reborn2
Copy link

Reborn2 commented Oct 26, 2020

Dankeschön

Lob doch gerne, der Hammer wäre nur noch ein Logo wie im Klopapier Widget.

https://upload.wikimedia.org/wikipedia/commons/9/93/T-Mobile_logo2.svg

Oder halt nur das T

A1E2CAF9-16C8-4FAE-8387-EFCD3C3748D3

@cHaOsStyle
Copy link

Das ist ein super Fork!
Warum allerdings die verbleiben Zeit grün ist erschließt sich mir nicht wirklich, neues Datenvolumen ist doch gut oder? ;)
Die Zeit hat ja keine Abhängigkeit zum Datenvolumen oder? Dann würde es Sinn machen :)

Dankeschön

Lob doch gerne, der Hammer wäre nur noch ein Logo wie im Klopapier Widget.

https://upload.wikimedia.org/wikipedia/commons/9/93/T-Mobile_logo2.svg

Oder halt nur das T

Ich benutze das Widget mit Congstar, da würde mich das Telekom-Logo eher stören.
Vllt nur als Text oder das Logo nur optional?

@Reborn2
Copy link

Reborn2 commented Oct 27, 2020

Könnte mann ja mit einem Parameter 1 Telekom 2 Congstar 3 O2 4 Vodafone usw abfangen, bietet Scripable ja an beim Einstell Screen des Widgets

Wäre ja nur ein Vorschlag 😉 auch um eventuell mehr Provider zu unterstützen

@LupusArgentum
Copy link
Author

LupusArgentum commented Oct 27, 2020

Das ist ein super Fork!
Warum allerdings die verbleiben Zeit grün ist erschließt sich mir nicht wirklich, neues Datenvolumen ist doch gut oder? ;)
Die Zeit hat ja keine Abhängigkeit zum Datenvolumen oder? Dann würde es Sinn machen :)

Der rote Text ist für mich persönlich als Erinnerung fürs rechtzeitige Aufladen meines Guthabens. Wers nicht braucht, kann einfach Zeile 87 entfernen.

Copy link

ghost commented Oct 31, 2020

iOS-Widget für Datenverbrauch im Telekom-Netz

(Forked from Sillium/telekom.js)

  • "API offline" wird angezeigt, wenn datapass.de nicht aufgerufen werden kann (z.B. wenn WLAN aktiv ist)
  • verbleibende Zeit wird rot angezeigt, wenn weniger als 3 Tage verbleiben
  • Komplett Dark- und Lightmode kompatibel
  • funktioniert mit allen Telekom-Tarifen mit Datenvolumen, die Zugriff auf datapass.de haben (z.B. auch Prepaid-Discounter von congstar)

Bugs

if (data.passName == "Ihr Datenvolumen" || data.passName == "Ihr Telekom Datentarif") {
  line1 = list.addText("Datenvolumen")
}  
else {
  line1 = list.addText("Pass: " + data.passName)
}

Diese Code-Zeilen werden verwendet, um normales Inklusivvolumen von evtl. gebuchten Datenpässen unterscheiden zu können.
Hier kann es zu Problemen kommen, wenn das gebuchte Datenvolumen einen anderen Passnamen hat. Hier hilft es, den Passnamen selbst zu recherchieren und den Code entsprechend anzupassen.

Fixes

  • 26.10.20: Zeile 49 angepasst um ein weiteres Szenario für den Pass-Namen abzudecken
  • 27.10.20: Kleiner Fehler in Zeile 49 korrigiert

Das Widget ist ja echt atemberaubend! Sehr cool!!!
Kannst du auch noch oben rechts in der Ecke ein kleines Logo von der Telekom einfügen? Bspw. ein "T" in Magenta...

@LupusArgentum
Copy link
Author

Kannst du auch noch oben rechts in der Ecke ein kleines Logo von der Telekom einfügen? Bspw. ein "T" in Magenta...

31.10.20:
Auf Wunsch kann jetzt in der oberen rechten Ecke ein Logo angezeigt werden. Ein Telekom-Logo habe ich vorkonfiguriert, wer ein anderes Logo möchte, muss die URL in Zeile 119 anpassen. Aktiviert wird das Logo, indem das Widget den Parameter logo übergeben bekommt.

Da das jetzt mehrfach gefragt wurde, habe ich es eingebaut. Viel Spaß damit!

Copy link

ghost commented Oct 31, 2020

Kannst du auch noch oben rechts in der Ecke ein kleines Logo von der Telekom einfügen? Bspw. ein "T" in Magenta...

31.10.20:
Auf Wunsch kann jetzt in der oberen rechten Ecke ein Logo angezeigt werden. Ein Telekom-Logo habe ich vorkonfiguriert, wer ein anderes Logo möchte, muss die URL in Zeile 119 anpassen. Aktiviert wird das Logo, indem das Widget den Parameter logo übergeben bekommt.

Da das jetzt mehrfach gefragt wurde, habe ich es eingebaut. Viel Spaß damit!

Vielen Dank, das hört sich gut an!
Habe es gerade aktualisiert, aber mir wird keine Logo angezeigt :( Ich muss doch nur das Wort logo als Parameter (also nicht im Script, sondern wenn ich das Widget lange gedrückt halte) eingeben oder?

Copy link

ghost commented Oct 31, 2020

Ah, jetzt ist es auf einmal da. Habe auf das Widget geklickt und dann wurde es mir seltsamerweise angezeigt.
Bestens!

Copy link

ghost commented Oct 31, 2020

die Farben hätte ich eher an den prozentualen verbrauch angepasst. Also wie viele Tage hat der Monat noch ->9 Tage
Er hatte 31 Tage macht also pro tag ca 3,2%.
Ich bin jetzt bei Tag 22 also darf ich im grünen Bereich maximal 70,96% verbraucht haben.
In dem Fall <=70,96-3,2/2 =96,36% -> GRÜN
<=70,96-3,2/2 =72,56% -> Gelb
">"72,56% -> ROT

Ich habe einen ganz ähnlichen Wunsch, und das mal für mich angepasst.
Orange wird es wenn nicht mehr viel Luft ist zum "erlaubten Verbrauch".
Der erlaubte Verbrauch wären zur Monatsmitte z.B. 50%.
Rot wird es, wenn man bereits ein gutes Stück mehr verbraucht hat als erlaubt.
Zusätzlich gibt es noch feste Grenzen. Rot wird’s immer ab 90%. Und grün bleibt es immer bis zu einem kleinen Schwellwert.

// change color of the remaining volume according to usage
const line2 = list.addText(100 - data.usedPercentage + "%")
line2.font = Font.boldSystemFont(36)
// rough calculate remainig percentage of this month 
// adjust colors according to what's needed within rest of the month
let availableMonthPercentage = (data.remainingSeconds / (31*86400)) * 100
let bufferPercentage = 5
line2.textColor = Color.green()
if (data.usedPercentage >= ((100 - availableMonthPercentage) - bufferPercentage) && data.usedPercentage >= bufferPercentage) {
  line2.textColor = Color.orange()
} else if (data.usedPercentage >= ((100 - availableMonthPercentage) + bufferPercentage) || data.usedPercentage >= 90) {
  line2.textColor = Color.red()
}

-> Diese Änderung habe ich im "Original-Script" gesehen. Kann ich dieses auch bei dir ändern? Also einfach o.g. Passage gegen die entsprechende Stelle bei dir tauschen?

Danke im Voraus!

@LupusArgentum
Copy link
Author

LupusArgentum commented Oct 31, 2020

const line2 = list.addText(100 - data.usedPercentage + "%")
line2.font = Font.boldSystemFont(36)
// rough calculate remainig percentage of this month 
// adjust colors according to what's needed within rest of the month
let availableMonthPercentage = (data.remainingSeconds / (31*86400)) * 100
let bufferPercentage = 5
line2.textColor = Color.green()
if (data.usedPercentage >= ((100 - availableMonthPercentage) - bufferPercentage) && data.usedPercentage >= bufferPercentage) {
  line2.textColor = Color.orange()
} else if (data.usedPercentage >= ((100 - availableMonthPercentage) + bufferPercentage) || data.usedPercentage >= 90) {
  line2.textColor = Color.red()
}

-> Diese Änderung habe ich im "Original-Script" gesehen. Kann ich dieses auch bei dir ändern? Also einfach o.g. Passage gegen die entsprechende Stelle bei dir tauschen?

Danke im Voraus!

Das sollte sich problemlos in mein Skript einfügen lassen. Einfach die Zeilen die zu line2 gehören durch den neuen Code ersetzen.

Copy link

ghost commented Oct 31, 2020

const line2 = list.addText(100 - data.usedPercentage + "%")
line2.font = Font.boldSystemFont(36)
// rough calculate remainig percentage of this month 
// adjust colors according to what's needed within rest of the month
let availableMonthPercentage = (data.remainingSeconds / (31*86400)) * 100
let bufferPercentage = 5
line2.textColor = Color.green()
if (data.usedPercentage >= ((100 - availableMonthPercentage) - bufferPercentage) && data.usedPercentage >= bufferPercentage) {
  line2.textColor = Color.orange()
} else if (data.usedPercentage >= ((100 - availableMonthPercentage) + bufferPercentage) || data.usedPercentage >= 90) {
  line2.textColor = Color.red()
}

-> Diese Änderung habe ich im "Original-Script" gesehen. Kann ich dieses auch bei dir ändern? Also einfach o.g. Passage gegen die entsprechende Stelle bei dir tauschen?
Danke im Voraus!

Das sollte sich problemlos in mein Skript einfügen lassen. Einfach die Zeilen die zu line2 gehören durch den neuen Code ersetzen.

Ja, ok - bestens! Werde morgen mal ein bisschen mit Mobile Daten surfen und dann schauen ob es rot eingeteigte wird, da ich dann ja quasi über dem prozentualen Tagesbedarf liegen werde.
Melde mich dann mal … ;)

@JoeGit42
Copy link

JoeGit42 commented Oct 31, 2020

const line2 = list.addText(100 - data.usedPercentage + "%")
line2.font = Font.boldSystemFont(36)
// rough calculate remainig percentage of this month
// adjust colors according to what's needed within rest of the month
let availableMonthPercentage = (data.remainingSeconds / (31*86400)) * 100
let bufferPercentage = 5
line2.textColor = Color.green()
if (data.usedPercentage >= ((100 - availableMonthPercentage) - bufferPercentage) && data.usedPercentage >= bufferPercentage) {
line2.textColor = Color.orange()
} else if (data.usedPercentage >= ((100 - availableMonthPercentage) + bufferPercentage) || data.usedPercentage >= 90) {
line2.textColor = Color.red()
}

Aus dem else if muss ein if gemacht werden, dann klappt es besser.
So sieht es inzwischen bei mir aus:
IMG_0486
IMG_0489

Ich habe noch weitere Änderungen vorgenommen:

  • Anzeige des verbleibenden statt des verbrauchten Volumens (im Text und in der Prozentangabe)
  • Anzeige der Restlaufzeit in Tagen (falls noch Tage vorhanden sind) und Stunden. Ggf. als "< 1 Stunde", wenn nur noch Minuten übrig sind.
  • Anzeige der Uhrzeit der letzten erfolgreichen Aktualisierung. Ggf. mit Datum, wenn das nicht am selben Tag war.

@JoeGit42
Copy link

Zeile34: if (!data || !data.usedPercentage)
Hier sollte nicht usedPercentage genutzt werden. Zu Beginn des Abrechnungszeitraums ist das verbrauchte Volumen = 0.
Befindet man sich dann im WLAN, schlägt die Überprüfung zu. Ich habe hier auf initialVolume gewechselt.

Copy link

ghost commented Nov 1, 2020

const line2 = list.addText(100 - data.usedPercentage + "%")
line2.font = Font.boldSystemFont(36)
// rough calculate remainig percentage of this month
// adjust colors according to what's needed within rest of the month
let availableMonthPercentage = (data.remainingSeconds / (31*86400)) * 100
let bufferPercentage = 5
line2.textColor = Color.green()
if (data.usedPercentage >= ((100 - availableMonthPercentage) - bufferPercentage) && data.usedPercentage >= bufferPercentage) {
line2.textColor = Color.orange()
} else if (data.usedPercentage >= ((100 - availableMonthPercentage) + bufferPercentage) || data.usedPercentage >= 90) {
line2.textColor = Color.red()
}

Aus dem else if muss ein if gemacht werden, dann klappt es besser.
So sieht es inzwischen bei mir aus:
IMG_0486
IMG_0489

Ich habe noch weitere Änderungen vorgenommen:

  • Anzeige des verbleibenden statt des verbrauchten Volumens (im Text und in der Prozentangabe)
  • Anzeige der Restlaufzeit in Tagen (falls noch Tage vorhanden sind) und Stunden. Ggf. als "< 1 Stunde", wenn nur noch Minuten übrig sind.
  • Anzeige der Uhrzeit der letzten erfolgreichen Aktualisierung. Ggf. mit Datum, wenn das nicht am selben Tag war.

Kannst du die geänderten Passagen hier einstellen, damit ich die Restlaufzeit in Tagen sowie die Uhrzeit der letzten ERFOLGREICHEN Aktualisierung ebenfalls einstellen kann? Aber Anzeige des verbrauchten Datenvolumens möchte ich gerne beibehalten.
Und ist der Änderung von JoeGIT42 hilfreich? Muss ich dann zusätzlich das "else if" gegen "if" eintauschen?

Vielen Dank im Voraus! :)

@LupusArgentum
Copy link
Author

Ich habe noch weitere Änderungen vorgenommen:

  • Anzeige des verbleibenden statt des verbrauchten Volumens (im Text und in der Prozentangabe)
  • Anzeige der Restlaufzeit in Tagen (falls noch Tage vorhanden sind) und Stunden. Ggf. als "< 1 Stunde", wenn nur noch Minuten übrig sind.
  • Anzeige der Uhrzeit der letzten erfolgreichen Aktualisierung. Ggf. mit Datum, wenn das nicht am selben Tag war.

Kannst du die geänderten Passagen hier einstellen, damit ich die Restlaufzeit in Tagen sowie die Uhrzeit der letzten ERFOLGREICHEN Aktualisierung ebenfalls einstellen kann? Aber Anzeige des verbrauchten Datenvolumens möchte ich gerne beibehalten.
Und ist der Änderung von JoeGIT42 hilfreich? Muss ich dann zusätzlich das "else if" gegen "if" eintauschen?

Vielen Dank im Voraus! :)

Wenn du mir den Code gibst, schaue ich mal, was davon ich hier einstellen möchte.

@LupusArgentum
Copy link
Author

Zeile34: if (!data || !data.usedPercentage)
Hier sollte nicht usedPercentage genutzt werden. Zu Beginn des Abrechnungszeitraums ist das verbrauchte Volumen = 0.
Befindet man sich dann im WLAN, schlägt die Überprüfung zu. Ich habe hier auf initialVolume gewechselt.

Die Zeile ist noch aus dem Original-Skript, darüber hatte ich mir bislang keine Gedanken gemacht. Sollte
if (!data)
nicht eigentlich ausreichen?

@JoeGit42
Copy link

JoeGit42 commented Nov 1, 2020

Zeile34: if (!data || !data.usedPercentage)
Hier sollte nicht usedPercentage genutzt werden. Zu Beginn des Abrechnungszeitraums ist das verbrauchte Volumen = 0.
Befindet man sich dann im WLAN, schlägt die Überprüfung zu. Ich habe hier auf initialVolume gewechselt.

Die Zeile ist noch aus dem Original-Skript, darüber hatte ich mir bislang keine Gedanken gemacht. Sollte
if (!data)
nicht eigentlich ausreichen?

Würde ich auch sagen, allerdings weiss ich nicht, was die Zeile darüber zurückgibt, wenn aus der iCloud keine Daten gelesen werden können. Ich würde false oder null erwarten. Aber wenn es das nicht, macht die zusätzliche Abfrage eines Wertes Sinn.

@JoeGit42
Copy link

JoeGit42 commented Nov 1, 2020

Wenn du mir den Code gibst, schaue ich mal, was davon ich hier einstellen möchte.

Den mache ich nachher nochmal etwas schöner.
Als Issue kann ich das hier nicht eintragen, oder? Dann wäre der potentielle merge leichter.

@LupusArgentum
Copy link
Author

Wenn du mir den Code gibst, schaue ich mal, was davon ich hier einstellen möchte.

Den mache ich nachher nochmal etwas schöner.
Als Issue kann ich das hier nicht eintragen, oder? Dann wäre der potentielle merge leichter.

Ich habe das ganze hier mal als Repo erstellt, da kannst du deinen Issue ggf. eintragen.
Ich habe mich eben selbst daran gewagt deine Änderungen zu programmieren und merke, dass das ganze komplizierter ist als gedacht, daher freue ich mich auf deinen Input :)

@LupusArgentum
Copy link
Author

LupusArgentum commented Nov 1, 2020

Anzeige der Uhrzeit der letzten erfolgreichen (letzter Abruf von datapass.de, nicht mehr letzter Widget-Refresh) Aktualisierung. Ggf. mit Datum, wenn das nicht am selben Tag war.

Das ist mit dem aktuellen Update umgesetzt.

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