ich habe mal schnell ein iOS Widget gebastelt, was man als Basis für weitere Widgets verwenden kann, evtl. entsteht über Kurz oder Lang ja sogar eine kleine Widget Sammlung ;-)
Habe erstmal die wichtigsten Temperaturen ausgelesen und stelle diese in dem Widget dar, natürlich können noch weitere Dinge ausgelesen und durchgeführt werden, dies soll erstmal nur als Beispiel dienen.
Ihr müsst dazu die iOS App "Scriptable" herunterladen (https://apps.apple.com/de/app/scriptable/id1405459188).
Dort könnt ihr dann via JavaScript eure Widgets bauen...
Die Datei (JavaScript) habe ich euch in den Anhang gepackt, ihr müsst auf Zeile 4: Username, Passwort und IP-Adresse eures Miniservers anpassen.
Zeile 11-13 habe ich testweise mal 3 meiner Temperaturfühler ausgelesen, die ID die ihr dort eintragen müsst, ist die UUID aus der App, diese bekommt ihr aus der WebView der App, wie ihr beim Beispiel Badezimmer seht, ist diese ID in der URL sichtbar:
Diese URL wird eingetragen, Zeile 33 - 40 ist dann ein Block um eine Temperatur darzustellen, diese kann natürlich auch abgeändert werden, was Beschriftung usw. angeht.
Klar kann man das Ganze noch schöner und dynamischer gestalten, das war erstmal ein Test-Schnellschuss in den letzten 10min, der als Beispiel dienen soll.
Das Ganze sieht dann am iPhone so aus:
// Variables used by Scriptable. // These must be at the very top of the file. Do not edit. // icon-color: deep-green; icon-glyph: home; const apiURL = "http://user:password@10.0.0.10/jdev/sps/io/"; let widget = await createWidget(); Script.setWidget(widget); Script.complete(); async function createWidget() { const bad = await new Request(apiURL + "10a53f32-a14e-1a52-abfd2131be8216ab").loadJSON(); const sz = await new Request(apiURL + "15cf2546-01ab-1fdb-abfd2131be8216ab").loadJSON(); const wz = await new Request(apiURL + "12b218a4-024c-29a4-abfd2131be8216ab").loadJSON(); const list = new ListWidget(); list.setPadding(0, 4, 1, 4); const gradient = new LinearGradient(); gradient.locations = [0, 1]; gradient.colors = [ new Color("69c350"), new Color("69c350") ]; list.backgroundGradient = gradient; let firstLineStack = list.addStack(); let headline = firstLineStack.addText("Temperaturen"); headline.textColor = Color.white(); headline.font = Font.boldSystemFont(14); list.addSpacer(4); let badStack = list.addStack(); let badLabel = badStack.addText("Badezimmer:"); badLabel.font = Font.boldSystemFont(12); badLabel.textColor = Color.white(); badStack.addSpacer(); let badTemp = badStack.addText(bad.LL.value); badTemp.font = Font.boldSystemFont(12); badTemp.textColor = Color.white(); list.addSpacer(4); let szStack = list.addStack(); let szLabel = szStack.addText("Schlafzimmer:"); szLabel.font = Font.boldSystemFont(12); szLabel.textColor = Color.white(); szStack.addSpacer(); let szTemp = szStack.addText(sz.LL.value); szTemp.font = Font.boldSystemFont(12); szTemp.textColor = Color.white(); list.addSpacer(4); let wzStack = list.addStack(); let wzLabel = wzStack.addText("Wohnzimmer:"); wzLabel.font = Font.boldSystemFont(12); wzLabel.textColor = Color.white(); wzStack.addSpacer(); let wzTemp = wzStack.addText(wz.LL.value); wzTemp.font = Font.boldSystemFont(12); wzTemp.textColor = Color.white(); return list; }
Kommentar