iOS Widget für die Temperatur auf dem Sonnenberg

Seit einiger Zeit logge ich die Außentemperatur an unserer Wohnung auf temperatur.tonylehnert.de. Zuerst in Altchemnitz, jetzt auf dem Sonnenberg.

Wenn die Daten also schon im Internet herumliegen, kann ich mit Scriptable für iOS auch ein Widget bauen. Ich bediente mich eines Grundgerüsts und passte es optisch diesem Widget für die Corona-Inzidenz an (bzw. einer alten Version davon).

Mein Code ist wie immer nicht sauber und bedarf sicher der ein oder anderen Optimierung – tut das bitte, wenn ihr mögt und gebt auf Twitter Bescheid, damit ich das hier einbauen kann (ich hör‘ GitHub leise rufen). Die Datenbank wird in einem Intervall von 15 Minuten aktualisiert. Der Refresh des Widgets wird von iOS gesteuert, das Intervall liegt wohl irgendwo zwischen 4 und 7 Minuten. Die Aktualität der Daten hängt außerdem davon ab, dass der Sensor zuverlässig ausgelesen wird, ich hier nichts zerstöre und das Internet nie ausfällt.

Wer Scriptable noch nicht kennt:

  • Scriptable aus dem AppStore installieren
  • Code fürs Widget kopieren, neues Script in Scriptable erstellen und Code einfügen
const dataUrl = "https://temperatur.tonylehnert.de/ios_widget.php";

let widget = await createWidget();
widget.setPadding(15, 14, 14, 14)
Script.setWidget(widget);
widget.presentSmall();
Script.complete();

async function createWidget() {
    const widget = new ListWidget();

    const data = await new Request(dataUrl).loadJSON();

    //Header
    let titleRow = widget.addText("🌡️ Temperatur".toUpperCase());
    titleRow.font = Font.mediumSystemFont(13)
    widget.addSpacer();

    //Temperature data
    let temperatureRow = widget.addText(`${data[0].temp}°C`);
    temperatureRow.font = Font.boldSystemFont(24)
    temperatureRow.textColor = data[0].temp <= -23 ? new Color("cc0199") : data[0].temp <= -18 ? new Color("980299") : data[0].temp <= -12 ? new Color("7030a2") : data[0].temp <= 0 ? new Color("3432ff") : data[0].temp < 4 ? new Color("0199fe") : data[0].temp >= 4 ? new Color("00af50") : data[0].temp >= 10 ? new Color("92d14e") : data[0].temp >= 16 ? new Color("ffc100") : data[0].temp >= 21 ? new Color("f79649") : data[0].temp >= 27 ? new Color("fe0002") : data[0].temp >= 32 ? new Color("cc0001") : data[0].temp >= 38 ? new Color("c10001") : Color.black();

    //location
    let locationRow = widget.addText("Sonnenberg");

    return widget;
}
  • Ein neues Scriptable-Widget auf dem Home Screen erstellen und das Temperatur-Script als Quelle wählen