Zum Inhalt springen
Vuk Cvetković
Projekte

Easy Breathe

Serbiens öffentliche Pollenmessungen, gefiltert auf das, was eine einzelne Person wissen muss.

Jahr
2024
Rahmen
Seminararbeit über E-Government-Systeme, Fakultät für Elektronik in Niš
Domäne
Offene Verwaltungsdaten, Pollen und Allergene

Der Weg einer Anfrage

  1. Eingang: Fünf offene Endpunkte
  2. Orchestrierung: Einlesen nach Zeitplan - NestJS
  3. Parallel
    • Monatlich - Allergene, Typen, Orte
    • Stündlich, 9 bis 12 Uhr - Pollen, Konzentrationen
  4. Ausgabe: Eine Datenbank ohne Duplikate - Eingegrenzt auf Radius, Tag und Ihre Allergene - MongoDB

Überblick

Die öffentlichen Daten sind vorhanden, und sie sind gut: Serbiens Umweltagentur veröffentlicht täglich Pollenmessungen von Messstationen im ganzen Land, als offene API ohne Schlüssel und ohne Limit. Was die API nicht kann: einer Person mit Ambrosia-Allergie sagen, ob heute dort, wo sie gerade ist, ein schlechter Tag ist. Genau diese Lücke schließt die App.

Die Arbeit teilt sich deshalb in zwei Teile. Die eigene API spiegelt die offenen Daten nach Zeitplan in ihre Datenbank, denn ein Smartphone soll nicht Hunderttausende landesweite Messungen durchgehen, um eine lokale Frage zu beantworten. Die App stellt dieser Kopie dann eine einzige Frage: Welche meiner Allergene sind gerade in meiner Nähe in der Luft? Die Antwort kommt auf einer Karte, in vier Stufen und als Nachricht.

Technologien

Mobile App
React Native
Expo
API
NestJS
MongoDB

Architektur

  1. Die offenen Daten werden in zwei Takten gespiegelt

    Die fünf Endpunkte ändern sich unterschiedlich schnell, also werden sie auch unterschiedlich oft abgerufen. Allergene, Allergentypen und Orte werden am Ersten jedes Monats um neun Uhr eingelesen. Pollen und Konzentrationen, die sich laufend ändern, werden zwischen neun und zwölf Uhr stündlich geholt, denn in dieser Zeit erscheinen die Messungen des Tages.

  2. Das Einlesen lässt sich gefahrlos wiederholen

    Jeder Einlesejob prüft zuerst, welche IDs schon in der Datenbank liegen, und fügt nur die fehlenden ein. Ein stündlicher Lauf, der nichts Neues findet, schreibt also nichts, derselbe Lauf lässt sich ohne doppelte Messungen wiederholen, und das abgefragte Zeitfenster reicht eine Woche zurück. So kommt auch eine Messung an, die erst einige Tage nach der Erhebung veröffentlicht wurde.

  3. Aus Ort und Radius wird eine Auswahl von Stationen

    Die Koordinaten der Person und der gewählte Radius in Kilometern gehen in eine Geo-Abfrage in MongoDB. Der Radius wird dafür durch den Erdradius geteilt, weil die Abfrage ihn im Bogenmaß erwartet. Zurück kommt jede Messstation, die nah genug liegt, um für diese Person relevant zu sein.

  4. Aus Stationen und Datum werden die relevanten Messungen

    Mit diesen Stations-IDs und dem heutigen Datum werden die Pollendatensätze des Tages ausgewählt, und jeder davon enthält die IDs der zugehörigen Konzentrationen. Diese Konzentrationen werden geladen und auf die Allergene reduziert, die die Person tatsächlich ausgewählt hat. Die Antwort enthält also nur Messungen, die in der Nähe liegen und relevant sind.

  5. Jede Messung bekommt eine Stufe und einen Ort

    Ein Messwert allein sagt nichts, deshalb wird jede Konzentration mit den veröffentlichten Grenzwerten ihres Allergens verglichen und als Low, Normal, High oder Very high eingestuft. Anschließend wird die Messung zusammen mit dem Allergen und der Station aufbereitet, von der sie stammt, und genau das zeigen der Kartenmarker und die Detailansicht.

Was es kann

  • Eigene Allergene wählen

    Rund dreißig sind veröffentlicht, und im Profil lassen sich beliebig viele davon auswählen. Alles Weitere - Karte, Stufen, Nachrichten - richtet sich nach dieser Liste.

  • Ihr Radius, Ihr Intervall

    Der Suchradius in Kilometern und das Prüfintervall in Stunden, beides im Profil eingestellt. Ein kürzeres Intervall bringt aktuellere Hinweise, ein längeres schont den Akku.

  • Eine Karte, die sich auf einen Blick lesen lässt

    Marker auf den Messstationen in der Nähe, nach Stufe eingefärbt. Ein Tipp auf einen Marker zeigt, welche Ihrer Allergene dort gemessen wurden und wie hoch die Werte waren.

  • Vier Stufen, mit Anzahl

    Low, Normal, High und Very high, jeweils mit der Zahl der Allergene in der Nähe, die auf dieser Stufe liegen. Ein Tipp auf eine Stufe öffnet die Liste, ein Tipp auf einen Eintrag zeigt Station, Beschreibung und Messwert.

  • Eine Nachricht, wenn die Belastung steigt

    Eine Push-Nachricht und ein Hinweis in der App, sobald etwas aus der gewählten Liste in der Nähe eine hohe Konzentration erreicht, sodass die App auch dann nützt, wenn sie geschlossen ist.

  • Konten, schlicht gehalten

    Registrierung und Anmeldung per E-Mail. Allergene, Radius und Intervall liegen im Profil, sodass die Auswahl am Konto hängt und nicht am Smartphone.

Was ich daraus mitnehme

Was hängen geblieben ist: Offene Daten sind noch keine nutzbaren Daten. Die API liefert fünf Endpunkte, die sich gegenseitig über IDs referenzieren, Daten für das ganze Land und keine Möglichkeit, geografisch abzufragen. Der ganze Nutzen entsteht also erst beim Spiegeln und Verknüpfen. Die eigentliche Arbeit lag in den Entscheidungen, was kopiert wird, wie oft und wie ein doppelter Durchlauf harmlos bleibt.

Außerdem muss die Antwort kommen, ohne dass jemand danach fragt. Wer eine Allergie hat, öffnet keine App, um nachzusehen. Er will benachrichtigt werden, in einem Radius und Intervall, die er einmal einstellt. Erst Push-Nachrichten auf einem Backend, das nach Zeitplan arbeitet, bringen die öffentlichen Daten an dem Tag zu einer Person, an dem es darauf ankommt.

Alle Projekte

Esc