Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

AQ Project How to Teil 2: Ein erster Blick auf die ESDK-Anwendung für Luftqualität

Die App liest die Sensoren aus, steuert die lokale Anzeige und sendet die Daten an die Cloud-Plattform für Metriken.

Die Hardware des DesignSpark Environmental Sensor Development Kit (ESDK) ist das Herzstück des DesignSpark Air Quality Projekts. Das DesignSpark.ESDK Python-Modul unterstützt das Auslesen der Sensoren. In diesem Artikel werfen wir einen Blick auf die AQ-Anwendung, die darauf aufbaut, um Messwerte auf dem ESDK-Touchscreen anzuzeigen und Metriken an eine Cloud-Datenbank und Analyseplattform zu senden.

DesignSpark.ESDK

Das ESDK Python-Unterstützungsmodul ermöglicht:

Abfrage der Hardware-Seriennummer des Raspberry Pi
den I2C-Bus zu testen, um Sensoren zu erkennen
Lesen von ESDK-Sensormodulen
Implementierung von Algorithmen zur Umwandlung von Rohdaten in sinnvolle Werte
GPS auslesen
Bereitstellung von Hilfsfunktionen nach Bedarf, z. B. die Implementierung einer zyklischen Redundanzprüfung (CRC)

Das Python-Modul befindet sich noch im Anfangsstadium und wird im Laufe der Zeit weiterentwickelt werden, um nicht nur zusätzliche Sensor-Hardware zu unterstützen, sondern auch seine Architektur und Funktionen zu verbessern.

Diese Funktionalität wird als Modul entwickelt - anstatt einfach in die Hauptanwendung integriert zu werden - und wurde im Python Package Index (PyPI) veröffentlicht, da die ESDK-Hardware in vielen anderen Anwendungen eingesetzt werden könnte und dies zur Wiederverwendung des Codes beitragen wird.

Anwendung

Python back-end

Kurz gesagt, der Python-Code der Luftqualitätsanwendung:

Liest Sensoren über DesignSpark.ESDK ein
Veröffentlichen von Messwerten über eine WebSocket-API
Veröffentlichen von Messwerten über MQTT, wenn ein Broker konfiguriert ist
Veröffentlichen von Messwerten in Prometheus, wenn ein oder mehrere Endpunkte konfiguriert sind

Auf die WebSocket-API kommen wir später zu sprechen. MQTT ist besonders nützlich, wenn Sie einen lokalen Rechnerzugang zu den Messwerten benötigen oder vielleicht einen bereits eingerichteten Remote Broker. Prometheus ist eine (chronologisch geordnete) Zeitreihen-Datenbank, die von der DesignSpark Metrics Cloud verwendet wird. Die vom Air Quality-Projekt verwendete Cloud-Plattform wird in einem separaten Artikel behandelt.

Web front-end

Für die Erstellung der grafischen Benutzeroberfläche der lokalen Anzeige wurden verschiedene Optionen in Betracht gezogen, wie z. B. das Qt-Widget-Toolkit. Schließlich entschied man sich für die Erstellung einer Webseite, die dann über einen im Kioskmodus gestarteten Browser angezeigt wird. Dies hat den Vorteil, dass die Einstiegshürde für eine breitere Gemeinschaft, die sich mit der Erstellung von benutzerdefinierten Oberflächen befasst, niedriger ist, da Grundkenntnisse in HTML, CSS und JavaScript häufiger vorhanden sind als Erfahrungen mit GUI-Toolkits für native Anwendungen.

Gegenwärtig gibt es eine einzige, einfache Webseite mit vier Feldern: je eines für Temperatur und Luftfeuchtigkeit, TVOC, CO2 und Feinstaub. Die Metriken werden durch JavaScript-Code auf der Client-Seite aktualisiert, der die Daten von der Python-Anwendung über die WebSocket-API erhält.

Es ist geplant, die Weboberfläche im Laufe der Zeit weiterzuentwickeln und mehrere Bildschirme mit zusätzlicher Unterstützung für Dinge wie Konfigurations- und Statusinformationen, Diagramme und auch Netzwerkzugriff mit einem responsiven Design, das sich an die Bildschirmgröße anpasst, zu haben. Derzeit ist die Schnittstelle nur lokal verfügbar, aber in der Zwischenzeit können Experimentierfreudige die HTML-Datei einfach in einen Browser laden und damit herumhacken.

Installation

Es kann ein vorinstalliertes Raspberry Pi-Image heruntergeladen werden, das auf eine mindestens 8 GB große Micro-SD-Karte geschrieben werden muss. Unter Windows kann dies mit einem Tool wie Etcher durchgeführt werden. Unter Linux kann dies über die Kommandozeile mit dd erfolgen. Der Vorgang des Schreibens des vorinstallierten Images ist derselbe wie beim Schreiben eines regulären Raspberry Pi OS-Images.

Irgendwann wird der Installationsprozess dazu übergehen, zunächst die neueste Standardversion des Raspberry Pi-Betriebssystems zu installieren, diese dann zu booten und ein Anwendungsinstallationsskript auszuführen. Dies bringt vor allem Vorteile in Bezug auf die Projektwartung und den Verzicht auf die Verteilung großer Betriebssystem-Image-Dateien.

Konfiguration

Die Anwendung Luftqualität wird über die Datei konfiguriert:

/boot/aq/aq.toml

Die Konfiguration wurde auf der /boot-Partition abgelegt, da diese mit fat32 formatiert ist, was bedeutet, dass sie sowohl auf Windows-Computern als auch auf Linux und Mac gemountet werden kann, um die Bearbeitung zu erleichtern.

Werfen wir einen Blick auf die Konfigurationsoptionen, beginnend mit dem Hauptabschnitt ESDK-Hardware.

[ESDK]
friendlyname = "bjonesoffice"
gps = false
latitude = 53.7129968
longitude = -1.9392022
debug = false

Das friendlyname ist, wie der Name schon sagt, einfach eine praktische Bezeichnung für das Gerät. Idealerweise sollte dies etwas Sinnvolles sein, z. B. eine Kombination aus dem Namen des Besitzers und einem Standort, aber es ist nicht kritisch und muss nicht weltweit eindeutig sein, da die Seriennummer der Raspberry Pi-Hardware als primäres Mittel zur Unterscheidung eines Satzes von ESDK-Hardware von einem anderen verwendet wird.

Wenn “gps = true” gesetzt ist und der GPS-Empfänger eine Positionsbestimmung hat, wird diese verwendet, um die Sensormesswerte mit dem Standort zu verknüpfen. Wenn dies jedoch auf den Standardwert von “gps = false”, wird stattdessen ein fest kodierter Breiten- und Längengrad verwendet. Dies ist die Standardeinstellung, da zunächst hauptsächlich die Verwendung in Innenräumen geplant ist.

Es gibt auch eine Debug-Option, die standardmäßig deaktiviert ist.

[local]
csv = false

Als Nächstes gibt es einen Abschnitt für die lokale Protokollierung, der derzeit nur eine Option enthält, nämlich die Protokollierung der Sensormesswerte in CSV-Dateien unter /aq/data/. Diese befindet sich auf einer speziellen Partition, die mit dem ext4-Journalling-Dateisystem formatiert ist. Die erzeugten CSV-Dateien müssen entweder über das Netzwerk mit scp kopiert werden (z. B. unter Windows mit WinSCP) oder durch Ausschalten des Raspberry Pi, Entfernen der Micro-SD-Karte und anschließendes Einsetzen in einen anderen Linux-Computer.

[mqtt]
broker = "localhost"
basetopic = "airquality"
username = ""
password = ""

Standardmäßig ist MQTT so konfiguriert, dass es an einen auf dem Raspberry Pi laufenden Broker veröffentlicht wird, ohne dass eine Authentifizierung konfiguriert ist, wie oben gezeigt. Dies kann leicht geändert werden, um einen Remote-Broker zu verwenden, die Authentifizierung durch Angabe eines Benutzernamens und Passworts zu aktivieren oder ein anderes Basisthema festzulegen.

[prometheus.global]
instance = ""
key = "”
url = "prometheus-prod-01-eu-west-0.grafana.net/api/prom/push"
interval = 300

Es kann einen oder mehrere prometheus.*-Abschnitte geben, und diese konfigurieren Threads, die Sensormesswerte in entfernte Prometheus-Zeitreihendatenbanken schreiben. Im obigen Beispiel fehlen die erforderlichen Werte für Instanz-ID und API-Schlüssel. Der Intervall-Parameter bestimmt, wie oft Sensordaten geschrieben werden, z. B. in diesem Fall alle 300 Sekunden oder 5 Minuten. Prometheus ist nicht standardmäßig konfiguriert; dies wird in dem Artikel über die Cloud-Plattform behandelt.

Updates

In dieser ersten Alpha-Version wird der Python-Code einfach im Home-Verzeichnis des Pi-Benutzers ausgeführt und per "git pull" aktualisiert. Die Anwendung wird jedoch zu gegebener Zeit paketiert und ein bequemerer Aktualisierungsmechanismus ist geplant. Dies wird wahrscheinlich gleichzeitig mit der Umstellung auf ein Standard-Raspberry-Pi-Betriebssystem mit einem Skript zur Installation der Luftqualitätsanwendung eingeführt werden.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.