Das Titelbild zeigt ein Netatmo-Modul und ein daneben stehendes transparentes Display auf dem das Widget zu sehen ist. Im Hintergrund sind verschwommen Pflanzen auf einem Holztisch zu erkennen, außerdem das Icon der Scriptable-App oben links.

Warum ein eigenes Widget? Wem das Home-Bildschirm-Widget der offiziellen Netatmo-App nicht genügt und wer eine schnelle Komplettübersicht seiner Wetterdaten sucht, kann sich mit ein wenig JavaScript-Kenntnissen und der App Scriptable ein eigenes Large-Widget erstellen. So zeigt es dann bspw. auf einen Blick die Temperatur, CO₂-Konzentration und Luftfeuchtigkeit aller Innenräume, die Außentemperatur inklusive Tages-Tiefst- und Höchstwert sowie den Luftdruck mit Trend und die Batteriestände der Module. Voraussetzung ist eine Netatmo-Wetterstation ab der Version mit Apple Home(Kit), diese mit bis zu drei zusätzlichen Innenmodulen und einem Außenmodul kompatibel ist. Bei mir steht das Hauptmodul im Wohnzimmer. Weitere Innenmodule befinden sich in der Küche, im Kinderzimmer und im Schlafzimmer. Das Außenmodul ist auf dem Balkon installiert. Die Idee für ein eigenes Widget per Scriptable-Skript hatte ich schon länger. Mir fehlte allerdings der erste Schritt, um sie in die Tat umzusetzen. Schließlich bin ich auf GitHub auf ein Scriptable-Widget von Olf gestoßen. Dieses meldete sich noch mit E-Mail-Adresse und Passwort bei Netatmo an – ein Verfahren, das Netatmo seit Oktober 2022 nicht mehr zulässt.

Bei der Recherche zu den aktuellen Authentifizierungsrichtlinien von Netatmo habe ich mir Unterstützung durch die Claude-KI geholt. Dabei haben wir uns insbesondere mit dem von Netatmo vorgesehenen OAuth-2.0-Verfahren beschäftigt. Auf dieser Grundlage habe ich das Skript eigenständig angepasst und die Authentifizierung vollständig auf den vorgesehenen Mechanismus mit Refresh-Token umgestellt.

Screenshot: So sieht das Scriptable-Widget voll funktionsfähig auf dem Home-Bildschirm aus.

Was wird benötigt?

Für den Nachbau reichen fünf Schritte und etwa 15-20 Minuten:

  • 🅐 Eine Netatmo Wetterstation als Hauptmodul, optional mit bis zu 3 Innenmodulen oder 1 Außenmodul. Ich habe nicht getestet, ob es mit je einem Windmesser und Regensensor pro Hauptmodul funktioniert, da ich solche Geräte nicht besitze.
  • 🅑 Den Netatmo-Haupt-Account, dem die Station gehört.
  • 🅒 Zugang zu Netatmo Developer mit denselben Account-Daten wie beim Haupt-Account.
  • 🅓 Ein iPhone oder iPad mit der kostenlosen App Scriptable.
  • 🅔 Das Widget auf den Home-Bildschirm legen.

Schritt A: Die Netatmo Wetterstation

Wenn die Standard-Netatmo-Wetterstation, die aus einem Haupt- und einem Außenmodul besteht, bereits in das eigene SmartHome-Setup integriert ist und eventuell mit Zusatzmodulen aufgewertet wurde, kann mit Schritt 2 fortgefahren werden.

Schritt B: Der Netatmo Haupt-Account

Die Registrierung erfolgt direkt bei der Ersteinrichtung deiner Wetterstation in der Netatmo-App auf dem iPhone oder iPad per E-Mail und Passwort. Dabei wird die Wetterstation automatisch dem Netatmo-Haupt-Account zugeordnet, mit dem man in der App angemeldet ist.

Schritt C: Netatmo-DEV-App anlegen und Token erzeugen

Ab hier wird es etwas technischer: Damit das spätere Scriptable-Widget auf die Daten deiner Wetterstation zugreifen kann, erstellst du bei „Netatmo Developer“ eine sogenannte eigene „App“. Über diese Verbindung kann das Widget später die Messwerte deiner Wetterstation abrufen und darstellen. Dabei erhältst du eine „Client-ID“ und ein „Client-Secret“ und generierst anschließend einen „Refresh Token“. Diese Zugangsdaten benötigt das Widget-Skript später, um auf deine Wetterstation zuzugreifen.

  1. Öffne dev.netatmo.com/, melde dich mit deinem Netatmo-Haupt-Account an und lege eine neue „App“ bei [My apps > Create] an.
  2. Vergib einen Namen im Feld [app name], bspw. „NetMoCloud“,
  3. Schreibe einen Satz als Beschreibung [description] ein, etwa das: „I’m working on a private iOS scriptable widget project.“
  4. Trage deinen eigenen Namen als Datenschutz-Kontakt im Feld [data protection officer name] ein sowie deine E-Mail-Adresse bei [data protection officer email].
  5. Die Felder [website, company und company website] können leer bleiben.
  6. Setze das Häkchen „☑︎“ beim Feld [I agree to the terms and conditions] und klicke anschließend auf [Save].
  7. Die Seite lädt sich neu.
  8. Hier dürfen die Felder [redirect URI und webhook URI] im Bereich „App Technical Parameters“ ebenfalls leer bleiben.
  9. Die beiden Felder [Client ID und Client Secret] mit ihren „Zeichenfolgen“ sind sehr wichtig. Kopiere sie für den späteren Gebrauch z. B. in deine Apple Notizen-App.
  10. Wähle im Bereich „Token generator“ im Feld [Choose scopes] den Eintrag „read_station“ und klicke anschließend auf „Generate Token“.
  11. Es erscheinen jeweils eine „Zeichenfolgen“ im Feld [Access Token] und [Refresh Token]. Benötigt wird nur der „Refresh Token“, kopiere diesen ebenfalls in die Apple Notizen-App für später. Den Access Token holt sich das Script in Anschluss selbst.
  12. Es erscheint ein neues Fenster! Erlaube der sogenannten „App“ zum Schluss mit einem Klick auf die blaue Schaltfläche „JA, ICH AKZEPTIERE“ noch den Datenzugriff auf deine smarte Wetterstation! Anschließend landet man wieder in der Übersicht [My apps]. Das war’s!

Halte die drei Werte [Client ID, Client Secret und Refresh Token] auf deinem iPhone wie bereits erwähnt z. B. in der Notizen-App auf deinem iPhone für die spätere Nutzung bereit. Veröffentliche sie nirgends und lösche die Notiz nach dem Einrichten gegebenenfalls!

Schritt D: Scriptable-Skript einfügen und einrichten

Das benötigte „NetMoCloud“-Skript findest du weiter unten im Artikel. Zur Info: Deine Zugangsdaten aus der Notizen-App deines iPhones werden ebenfalls benötigt, diese werden nach der Eingabe in der Apple-Keychain gespeichert und werden dann nicht mehr benötigt.

  1. Installiere die Scriptable-App aus dem App Store, sofern du dies noch nicht getan hast, und lege ein neues Skript mit dem Namen „NetMoCloud“ an.
  2. Füge den kompletten Skript-Code von unten ein.
  3. Starte das Script einmal in der Scriptable-App per Play-Button „►“. Ein Popup-Fenster fragt nach „Large-Vorschau“ und den „Zugangsdaten“, wähle letzteres und trage die drei Werte (Client ID, Client Secret und Refresh Token) aus Schritt „C“ ein.
  4. Danach erscheint die „Large-Vorschau“ und man sieht das Vorschau-Widget in seiner vollen Pracht.

Im Hintergrund läuft nun Folgendes: Die drei Schlüssel-Werte liegen jetzt im iOS-Keychain (Wiki). Läuft der Access Token ab, holt sich das Skript mit dem Refresh Token einen neuen. Netatmo liefert dabei jedes Mal auch einen neuen Refresh-Token, den das Skript sofort speichert. Zusätzlich schützt sich das Skript vor typischen Fehlern. Ein neuer Refresh-Token wird nur gespeichert, wenn Netatmo einen gültigen Token liefert und im Keychain noch der Token steht, mit dem die Anfrage gesendet wurde. So überschreiben sich Widget und App nicht gegenseitig, wenn sie gleichzeitig laufen. Die Meldung „Token ungültig” erscheint nur bei einer eindeutigen Ablehnung durch Netatmo; vorübergehende Serverfehler lösen diese nicht aus. Im Zwischenspeicher sind nur die angezeigten Messwerte enthalten, jedoch keine Zugangsdaten, Gerätekennungen oder Standortdaten.

Schritt E: Das Widget auf den Home-Bildschirm legen

Das Widget funktioniert wie jedes andere Scriptable-Widget und braucht die große „Größe / Large“.

  1. Halte auf dem Home-Bildschirm eine freie Stelle gedrückt bis alles wackelt (engl.: Wiggle-Mode). Tippe oben links auf das „Plus“- oder „Pinsel“-Symbol und wähle aus dem Menü „Widget hinzufügen“.
  2. Wähle „Scriptable“ aus der Widget-Galerie und die Größe „Large“ ganz rechts, anschließend „Widget hinzufügen“.
  3. Tippe auf das noch wackelnde neue große Widget, wähle bei „Script [Auswählen]“ dein Skript „NetMoCloud“.
  4. Optional kann bei „Parameter [Text]“ das Wort light oder dark eingetragen werden, wenn man den Hell-/Dunkelmodus (engl.: Light-/DarkMode) fest präferiert haben möchte. Wer das Feld leer lässt, behält den automatischen hell/dunkel Wechsel bei.
  5. Bestätige das ganze mit einem Fingertap außerhalb des Widgets. Fertig!

Das Skript bittet iOS, das Widget etwa alle 10 bis 15 Minuten zu aktualisieren. Wann es das Widget tatsächlich neu lädt, entscheidet iOS allerdings selbst, je nach Faktoren wie bspw. der Akku-Ladung.

Das Scriptable-Widget-Skript

Ihr könnt das Skript einfach aus dem Textfeld kopieren (27 KB) oder bequem über GitHub herunterladen.

Das Widget auf einen Blick

Das Widget besteht aus sechs Kacheln und passt sich automatisch dem Hell- oder Dunkelmodus von iOS an. Alternativ lässt sich auch ein fester Darstellungsmodus einstellen per Widget-Parameter. Die Raumkacheln zeigen die Temperatur, den CO₂-Wert und die Luftfeuchtigkeit an. Farbige Punkte und Werte erleichtern die Einschätzung der Luftqualität (bis 999ppm 🟢, 1000-1200ppm 🟠, ab 1201ppm 🔴) und der Luftfeuchtigkeit (von 40-60% 🟢, bei weniger oder mehr 🔴). Die Balkonkachel zeigt die aktuelle Außentemperatur, die aktuelle Luftfeuchtigkeit sowie die Tageshöchst- und -tiefsttemperatur an. Die Luftdruckkachel gibt den aktuellen Wert in hPa samt farbigem Trend an. Ein Batteriesymbol informiert zusätzlich über den Ladezustand der Module (über 25% 🔋, unter 25% 🪫), während das netzbetriebene Hauptmodul mit einem Steckersymbol gekennzeichnet ist. Fehlende Werte werden mit einem „N/A”-Symbol angezeigt, nicht erreichbare Module als „offline”. Werden länger als 40 Minuten keine Daten übermittelt, erscheint die Temperatur grau und der Zeitpunkt der letzten Aktualisierung samt Hinweis wird oben rechts als farbiger Badge eingeblendet. Das Widget aktualisiert sich etwa alle zehn Minuten, wobei iOS den tatsächlichen Aktualisierungszeitpunkt selbst bestimmt. Änderungen am Skript können daher verzögert auf dem Home-Bildschirm erscheinen. In der Scriptable-App lässt sich das Ergebnis jederzeit direkt über die „Large-Vorschau“ kontrollieren.

Ein zweites Widget auf dem iPhone des Partners benötigt eine zweite Netatmo-DEV-App

Um das Widget auch auf einem zweiten iPhone oder iPad nutzen zu können, muss zwingend eine zweite Netatmo-DEV-App mit eigenen Zugangsdaten erstellt werden. Grund: Man sollte denselben Refresh-Token nicht auf beiden Geräten verwenden, weil Netatmo bei jeder Verlängerung einen neuen Token vergibt und den alten in der Regel ungültig macht. Wenn ein Gerät den Token erneuert hat, passt der gespeicherte Wert auf dem anderen Gerät nicht mehr und dessen Widget meldet einen Fehler.

  • Lege auf dev.netatmo.com mit demselben Netatmo-Haupt-Account eine zweite DEV-App an, zum Beispiel „NetMoCloud2“. Erzeuge dort eigene Client ID, Client Secret und Refresh Token. Trage die drei Werte der zweiten DEV-App auf dem zweiten iPhone ein.

So hat jedes Handy eine eigene Token-Kette, und beide lesen dieselbe Station aus.

Wichtig zu wissen: Die Netatmo-Schnittstelle kann gelegentlich Schluckauf haben

Auch die Netatmo-Schnittstelle im DEV-Bereich kann gelegentlich einen Schluckauf haben. Dabei kann es vorkommen, dass alle Module plötzlich als „offline” angezeigt werden, obwohl die Station selbst funktioniert und die originale Netatmo-App aktuelle Werte liefert. Die Schnittstelle antwortet zwar ganz normal (HTTP 200), meldet die Station aber als nicht erreichbar, sodass vorübergehend keine aktuellen Messwerte geliefert werden. In einem solchen Fall kann es etwa ein bis fünf Stunden dauern, bis sich die Netatmo-Cloud wieder mit der Station synchronisiert hat und die fehlenden Daten nachgeladen wurden. Anschließend funktioniert das Widget wieder von selbst. Das Eingeben neuer Zugangsdaten oder das Neuinstallieren des Skripts bringt in dieser Situation nichts. Sollten also Störungen bemerkt werden, wartet erst einmal ab, bevor ihr handelt. Manchmal kann es nämlich zu Synchronisationsproblemen zwischen der Wetterstation zur Netatmo-Cloud zum DEV-App-Token kommen.

Screenshot: Beispiel Fehlermeldung mit „Netatmo-Störung-Badge“ und Zeitstempel in der Widget Kopfzeile.

Wenn die Cloud-Verbindung schweigt: Dann klärt ein Status-Badge im Widget auf

Das Widget holt seine Daten über den DEV-App-Token aus der Netatmo-Cloud. Fällt die Verbindung aus, werden der letzte gespeicherte Stand sowie graue Temperaturen und ein grauer Luftdruck angezeigt. In der Kopfzeile oben rechts im Widget erscheint dann ein farbiges Badge mit der Ursache und der Uhrzeit (z.B. 19:41 Uhr) der Daten.

Tabelle mit möglichen Fehlermeldungen und Lösungen.

Wenn noch kein gespeicherter Stand vorliegt, erscheint bei einer Verbindungsstörung eine Fehlermeldung. Liefert Netatmo eine Station ohne Messwerte, werden die Kacheln als „Offline” angezeigt und oben erscheint die Meldung „Keine Daten”. Der gespeicherte Stand wird dabei nie mit leeren Werten überschrieben. Liefert Netatmo statt einer gültigen Antwort bspw. eine HTML-Fehlerseite, wird „Netatmo-Störung“ angezeigt.

Das Widget-Skript an die eigene Station anpassen

Alle Einstellungen können im oberen Bereich des Skripts direkt vorgenommen werden. Die Modulnamen stammen bspw. aus der originalen Netatmo-App. Sollten deine Räume dort anders lauten, kannst du die Bezeichnungen in den ersten beiden Zeilen des Skripts entsprechend anpassen. Wenn dir das zu kompliziert ist, kannst du das Skript auch in einen KI-Chatbot wie z. B. Claude von Anthropic hineinkippen und es nach deinen Bedürfnissen anpassen lassen.

Wichtig: Achte dabei unbedingt darauf, keine Zugangsdaten und sonstige vertrauliche Informationen zu teilen. Diese haben in einem KI-Chat nichts zu suchen!

Echte lokale Werte ohne Cloud liefert nur Apple Home(Kit)

Als lokale (Not-)Lösung nutze ich zusätzlich einen Kurzbefehl der „Kurzbefehle“-App von Apple. Dieser holt die Werte direkt aus dem eigenen (Smart)Home-Bereich und zeigt sie in einem Fenster an, das dem Scriptable-Widget sehr ähnlich ist. Er benötigt lediglich das Heim-WLAN, nicht die Netatmo-Cloud. Selbst bei einem gekappten Internet zur Außenwelt am Router oder bei Cloud-Störungen liefert Apple Home(Kit) die Werte weiter, jedenfalls solange die Hauptstation im Heimnetz funkt. Ich habe die verschiedenen Wege in einem längeren Zeitraum alle durchgespielt und somit getestet, um herauszufinden, welche sich am besten eignen. Die Grundidee samt Kurzbefehl findet ihr in meinem früheren Artikel „Die Netatmo-Cloud ist offline? …“. Zur besseren Unterscheidung heißt das Scriptable-Widget „NetMoCloud” (Daten aus der Netatmo-Cloud) und der Kurzbefehl „NetMoLokal” (Daten lokal über HomeKit).

Der Unterschied zur Cloud-Variante: Apple Home(Kit) liefert nur eine Momentaufnahme, d. h. es werden keine Verlaufsdaten oder Grafiken angezeigt, auch kein Tages-Tief und -Hoch sowie kein Trendwert. Das reicht als Notlösung völlig aus, wenn z. B. kein Internet zur Außenwelt möglich ist, die Wetterstation aber noch in deinem Heim-WLAN hängt und funkt. Voraussetzung ist, dass die Wetterstation Apple Home(Kit) unterstützt und im Zusammenspiel mit dem iPhone in Apple Home eingebunden ist und im selben Heim-WLAN hängt. Ergo: Ohne WLAN, oder z.B. im Flugmodus, werden keine Werte angezeigt.

Nur diese vier folgenden Werte können von Apple Home(Kit) aktuell lokal abgerufen werden:

  • Luftqualitätssensor
  • Feuchtigkeits
  • Temperatursensor
  • Kohlendioxidsensor (Entdeckt/Spiegel)

Eine Schwäche hat die Kurzbefehle-App: Leider bricht der „NetMoLokal“-Kurzbefehl ab, sobald ein einzelnes Modul nicht antwortet, etwa weil es neu startet oder die Batterie leer ist. Die Kurzbefehle-App kennt auch keine Fehlerbehandlung und auch kein „Wenn“-Baustein, der ein Modul überspringt, das keine Werte liefert. Bei mir half es, das Offline-Modul neu zu starten (Batterie kurz herausnehmen, wieder einsetzen und 3-4 Minuten warten). Eine robustere Lösung ist je ein kleiner Kurzbefehl pro Raum, so fällt dann nur der betroffene Raum aus, allerdings gibt es mit dieser Lösung keine schöne Gesamtübersicht.

Wie ihr diesen Kurzbefehl einrichtet oder individuell nachbaut, um eure lokalen Messwerte abzurufen, erfahrt ihr – wie bereits oben erwähnt – in meinem damaligen Blogartikel „Die Netatmo-Cloud ist offline? …“.

Screenshot: Darstellung der Lokalen Apple Home(Kit)-Werte von der Wetterstation.

Hinweise und Haftung:

Bitte beachte, dass das Skript ausschließlich mit meiner eigenen Netatmo-Station getestet wurde. Die Nutzung erfolgt auf eigene Verantwortung.


Ich bin ein „Ein-Personen-Betrieb“, arbeite hauptberuflich im Gesundheitswesen und betreibe diese Seite als Hobbyprojekt in meiner Freizeit. Wenn Ihnen meine Arbeit gefällt (die Beiträge, die Hintergrundbilder, mein allgemeines Auftreten … einfach alles), so dürfen Sie gerne in Erwägung ziehen, mir eine kleine Spende für zum Beispiel einen Café ☕️ per PayPal.com zukommen zu lassen! Ihre Beteiligung ist unglaublich wertvoll und trägt viel zur Unterstützung und Erhalt dieser werbefreien Seite bei!

Author Bild

André K. ist der Autor dieses Blogartikels.

Kommentare geschlossen.

➲