Weil heute Sonntag ist. „Freut euch immer„! Nun ein kleiner Java CO2 MQTT Client um auch auf allen Betriebssystemen mit Java die CO2 Daten zu empfangen. Nicht nur für den Raspberry Pi auch Mac und Windows (ungetestet;-)).
Das selbstausführende JAR laden (siehe unten) und starten mit:
java -jar TWCo2Monitor-0.0.1-SNAPSHOT-jar-with-dependencies.jar [PI-Rechner Name/Adresse]
Hier mal eine Ausgabe auf einem Raspberry Pi W Zero:
Der MQTT Client besteht nur aus ein paar Zeilen Java Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
MqttClient client = new MqttClient("tcp://" + server, generateClientId()); System.out.println("Starte den CO2 MQTT-Client mit Server " + server + " und ID: " + client.getClientId() + " ..."); client.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable throwable) { } @Override public void messageArrived(String topic, MqttMessage nachricht) throws Exception { leseCo2(nachricht); } private void leseCo2(MqttMessage nachricht) { JSONObject jsonNachricht = new JSONObject(nachricht.toString()); try { JSONArray nachrichten = jsonNachricht.getJSONObject("messung").getJSONArray("satz"); JSONObject satz = (JSONObject) nachrichten.get(1); int co2 = satz.getInt("co2"); System.out.println("CO2: " + co2 + " ppm"); CO2Bewertung.bewertungUBAausgeben(co2); CO2Bewertung.bewertungDINEN1377Ausgeben(co2); } catch (JSONException e) { System.err.println(e); } } @Override public void deliveryComplete(IMqttDeliveryToken t) { } }); client.connect(); client.subscribe(TOPIC); |
Kurz, es muss nur eine Instanz vom MqttClient mit der Serverurl angelegt werden. Dann die Callback-Methode setCallback setzen. Dann braucht nur noch ein Connect und ein Subscribe des Topics (co2) erfolgen. Das ist schon alles. Es wird jetzt in einen Hintergrund Thread jeweis beim eintreffen einer MqttMessage der JSon String gelesen und ausgewertet.
Als Abhängigkeiten brauch man nur den Paho-Client und eine JSon-Lib:
1 2 3 4 5 6 7 8 9 10 11 12 |
<dependencies> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20200518</version> </dependency> </dependencies> |
Dann habe ich noch eine kleine Klasse für die DIN Norm und die Einschätzung der Werte gem. UBA geschrieben. Die bewertungUBAausgeben Methode liefert auch noch die Lüftungsampel zurück.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/** * DIN EN 13779 ldt. Absolute CO2-Konzentration in der Innenraumluft (ppm). * * Quelle: * https://www.hamburg.de/contentblob/1016516/7073fd694816ce7e8edd0eb82a2593e6/data/gesundheitliche-bewertung-co2.pdf * * @param co2 */ public static void bewertungDINEN1377Ausgeben(int co2) { if (co2 < 800) { System.out.println("Laut DIN EN 13779: Raumluft Kategorie: IDA 1 - Hohe Raumluftqualität"); } else if (co2 > 800 && co2 < 1000) { System.out.println("Laut DIN EN 13779: Raumluft Kategorie: IDA 2 - Mittlere Raumluftqualität"); } else if (co2 > 1000 && co2 < 1400) { System.out.println("Laut DIN EN 13779: Raumluft Kategorie: IDA 3 - Mäßige Raumluftqualität"); } else { System.out.println("Laut DIN EN 13779: Raumluft Kategorie: IDA 4 - Niedrige Raumluftqualität"); } } /** * Quelle: * https://www.hamburg.de/contentblob/1016516/7073fd694816ce7e8edd0eb82a2593e6/data/gesundheitliche-bewertung-co2.pdf * * https://www.dguv.de/medien/ifa/de/pub/rep/pdf/reports2013/innenraumarbeitsplaetze/kapitel_12_4_1.pdf * * @param co2 */ public static LÜFTUNGSAMPEL bewertungUBAausgeben(int co2) { if (co2 < 1000) { System.out.println("Laut UBA GRÜN: Hygienisch unbedenklich, keine weiteren Maßnahmen"); return LÜFTUNGSAMPEL.GRÜN; } else if (co2 > 1000 && co2 < 2000) { System.out.println("Laut UBA GELB: Hygienisch auffällig, Lüftungsmaßnahmen erhöhen, Lüftungsverhalten überprüfen und verbessern"); return LÜFTUNGSAMPEL.GELB; } else { System.out.println("Laut UBA ROT: Hygienisch inakzeptabel, Belüftbarkeit des Raumes prüfen ggf. weitergehende Maßnahmen prüfen"); return LÜFTUNGSAMPEL.ROT; } } |
Das ganze Projekt kann von GitBucket geclont werden mit:
git clone https://itberater@bitbucket.org/itberater/mqttco2client.git
Oder man lädt sich das Jar mit
wget https://bitbucket.org/itberater/mqttco2client/downloads/TWCo2Monitor-0.0.1-SNAPSHOT-jar-with-dependencies.jar
auf den Rechner. Oder direkt aus der Web-Gui des Projekts.
Und hier die aktuellen Werte von Sonntag: