Feinstaubsensor bauen - Teil 3 Daten sammeln!



  • Da der Sensor läuft und fleißig die Daten versendet, kommt die Frage auf, wie sammel ich die Daten selber? Der Sensor schickt die Daten, einmal zu luftdaten.info und madavi.de (beides abschaltbar). Im Konfigurationsmenü gibt es auch die Möglichkeit die Daten an einen eigenen Server zu schicken. Das wollen wir dann mal probieren 😉

    c7ca1d19-4648-4b28-9117-3b2762e90451-grafik.png

    In dem Bild sieht man die Serveradresse und das Script was aufgerufen wird. Aber wir fangen mal vorne an. Schnell mal ein bionic-minimal vom Kamil flashen, den ROCKPro64 starten, ein paar Grundeinstellungen vornehmen und fertig zum Arbeiten. Was brauchen wir? Ich möchte die Daten mittels eines PHP-Scriptes sammeln um sie später weiter zu verarbeiten.

    Hardware

    • ROCKPro64 v2.1 2GB RAM

    Software

    • NGINX
    • php7.2
    • php7.2-fpm

    Installation

    sudo apt update
    sudo apt upgrade
    sudo apt install nginx
    sudo apt-get install php7.2
    sudo apt-get install php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml php7.2-xsl php7.2-zip
    sudo apt-get install php7.2-cli php7.2-curl php7.2-gd php7.2-geoip php7.2-intl php7.2-json php7.2-mbstring
    sudo apt install php7.2-fpm
    

    Danach sollte alles installiert sein, was wir brauchen.

    Config NGINX

    Datei /etc/nginx/sites-available/default

    upstream php-handler {
        #server 127.0.0.1:9000;
        server unix:/run/php/php7.2-fpm.sock;
    }
    
    
    
    
    
    server {
            listen 80;
            #listen [::]:80;
    
            root /var/www/feinstaub;
    
            index index.html index.htm index.php;
    
            server_name feinstaub.local;
    
            location /feinstaub {
                        try_files $uri $uri/ =404;
            }
    
    
            ## Begin - PHP
            location ~ \.php$ {
            # Choose either a socket or TCP/IP address
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
            # fastcgi_pass unix:/var/run/php5-fpm.sock; #legacy
            # fastcgi_pass 127.0.0.1:9000;
    
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    
            }
    }
    

    Nix besonderes. fpm macht den php-handler. Unter /var/www/feinstaub liegen die Scripte. Der Server soll unter feinstaub.local erreichbar sein. Bitte drauf achten, das ihr den ROCKPro64 aus dem WLan Netz erreichen könnt!! Bei mir hat der ROCKPro64 ein WiFi-Modul 🙂

    NGINX neustarten

     sudo service nginx restart
    

    PHP Script

    Das Script heißt bei mir sensor.php, aber das Script habe ich mir bei github besorgt 😉

    <?php
    // read sensor ID ('esp8266-'+ChipID)
    $headers = array();
    if (isset($_SERVER['HTTP_SENSOR'])) $headers['Sensor'] = $_SERVER['HTTP_SENSOR'];
    if (isset($_SERVER['HTTP_X_SENSOR']))$headers['Sensor'] = $_SERVER['HTTP_X_SENSOR'];
    $json = file_get_contents('php://input');
    $results = json_decode($json,true);
    header_remove();
    $now = gmstrftime("%Y/%m/%d %H:%M:%S");
    $today = gmstrftime("%Y-%m-%d");
    // copy sensor data values to values array
    foreach ($results["sensordatavalues"] as $sensordatavalues) {
    	$values[$sensordatavalues["value_type"]] = $sensordatavalues["value"];
    }
    // print transmitted values
    echo "Sensor: ".$headers['Sensor']."\r\n";
    // check if data dir exists, create if not
    if (!file_exists('data')) {
    	mkdir('data', 0755, true);
    }
    // save data values to CSV (one per day)
    $datafile = "data/data-".$headers['Sensor']."-".$today.".csv";
    if (!file_exists($datafile)) {
    	$outfile = fopen($datafile,"a");
    	fwrite($outfile,"Time;durP1;ratioP1;P1;durP2;ratioP2;P2;SDS_P1;SDS_P2;Temp;Humidity;BMP_temperature;BMP_pressure;BME280_temperature;BME280_humidity;BME280_pressure;Samples;Min_cycle;Max_cycle;Signal\n");
    	fclose($outfile);
    }
    if (! isset($values["durP1"])) { $values["durP1"] = ""; }
    if (! isset($values["ratioP1"])) { $values["ratioP1"] = ""; }
    if (! isset($values["P1"])) { $values["P1"] = ""; }
    if (! isset($values["durP2"])) { $values["durP2"] = ""; }
    if (! isset($values["ratioP2"])) { $values["ratioP2"] = ""; }
    if (! isset($values["P2"])) { $values["P2"] = ""; }
    if (! isset($values["SDS_P1"])) { $values["SDS_P1"] = ""; }
    if (! isset($values["SDS_P2"])) { $values["SDS_P2"] = ""; }
    if (! isset($values["temperature"])) { $values["temperature"] = ""; }
    if (! isset($values["humidity"])) { $values["humidity"] = ""; }
    if (! isset($values["BMP_temperature"])) { $values["BMP_temperature"] = ""; }
    if (! isset($values["BMP_pressure"])) { $values["BMP_pressure"] = ""; }
    if (! isset($values["BME280_temperature"])) { $values["BME280_temperature"] = ""; }
    if (! isset($values["BME280_humidity"])) { $values["BME280_humidity"] = ""; }
    if (! isset($values["BME280_pressure"])) { $values["BME280_pressure"] = ""; }
    if (! isset($values["samples"])) { $values["samples"] = ""; }
    if (! isset($values["min_micro"])) { $values["min_micro"] = ""; }
    if (! isset($values["max_micro"])) { $values["max_micro"] = ""; }
    if (! isset($values["signal"])) { $values["signal"] = ""; } else { $values["signal"] = substr($values["signal"],0,-4); }
    $outfile = fopen($datafile,"a");
    fwrite($outfile,$now.";".$values["durP1"].";".$values["ratioP1"].";".$values["P1"].";".$values["durP2"].";".$values["ratioP2"].";".$values["P2"].";".$values["SDS_P1"].";".$values["SDS_P2"].";".$values["temperature"].";".$values["humidity"].";".$values["BMP_temperature"].";".$values["BMP_pressure"].";".$values["BME280_temperature"].";".$values["BME280_humidity"].";".$values["BME280_pressure"].";".$values["samples"].";".$values["min_micro"].";".$values["max_micro"].";".$values["signal"]."\n");
    fclose($outfile);
    ?>
    ok
    

    Quelle: https://github.com/opendata-stuttgart/madavi-api/blob/master/data_simple.php

    Daten sammeln

    Wenn nun alles richtig eingestellt ist, richtiger User nicht vergessen, dann sendet der Sensor jetzt jede Messung auch an meinen Server. Dort werden die Daten laufend in eine Datei geschrieben. Unter /var/www/feinstaub sieht ed nun so aus.

    rock64@rockpro64:/var/www/feinstaub$ ls -la
    total 24
    drwxr-xr-x 3 www-data www-data 4096 Apr 25 17:12 .
    drwxr-xr-x 4 www-data www-data 4096 Apr 25 15:58 ..
    drwxr-xr-x 2 www-data www-data 4096 Apr 25 16:42 data
    -rw-r--r-- 1 www-data www-data 3002 Apr 25 16:25 sensor.php
    

    Bei erfolreichem Aufrufen des PHP-Scriptes sensor.php wird der Ordner data erstellt. Der Inhalt von data

    rock64@rockpro64:/var/www/feinstaub/data$ ls -la
    total 20
    drwxr-xr-x 2 www-data www-data 4096 Apr 25 16:42 .
    drwxr-xr-x 3 www-data www-data 4096 Apr 25 17:12 ..
    -rw-r--r-- 1 www-data www-data 5509 Apr 25 20:23 data-esp8266-6699172-2019-04-25.csv
    

    Die Datei data-esp8266-6699172-2019-04-25.csv sieht so aus

    Time;durP1;ratioP1;P1;durP2;ratioP2;P2;SDS_P1;SDS_P2;Temp;Humidity;BMP_temperature;BMP_pressure;BME280_temperature;BME280_humidity;BME280_pressure;Samples;Min_cycle;Max_cycle;Signal
    2019/04/25 14:42:50;;;;;;;1.17;0.50;22.50;42.10;;;;;;1796422;74;28755;
    2019/04/25 14:45:20;;;;;;;2.08;0.60;22.40;42.50;;;;;;1655847;78;3357460;
    2019/04/25 15:24:59;;;;;;;2.43;0.70;22.50;43.70;;;;;;1747274;74;3377214;
    2019/04/25 15:27:28;;;;;;;2.65;0.90;22.50;43.70;;;;;;1711103;78;3377252;
    2019/04/25 15:29:56;;;;;;;1.65;0.70;22.30;43.20;;;;;;1725072;78;3373681;
    2019/04/25 15:32:26;;;;;;;2.23;0.70;22.30;43.90;;;;;;1736164;78;3549313;
    2019/04/25 15:34:56;;;;;;;1.90;0.90;22.40;43.40;;;;;;1725120;78;3377246;
    2019/04/25 15:37:32;;;;;;;4.17;0.90;22.50;43.80;;;;;;1729504;77;3377270;
    2019/04/25 15:40:19;;;;;;;2.20;0.80;22.40;44.20;;;;;;1714131;78;3577189;
    2019/04/25 15:42:49;;;;;;;2.02;0.70;22.50;43.60;;;;;;1713417;79;3377210;
    2019/04/25 15:45:38;;;;;;;3.33;0.90;22.60;43.40;;;;;;1706914;79;3381377;
    2019/04/25 15:48:07;;;;;;;3.03;1.00;22.70;43.70;;;;;;1719691;79;3614753;
    2019/04/25 15:50:36;;;;;;;2.20;0.80;22.60;43.70;;;;;;1687313;77;3377189;
    2019/04/25 15:53:04;;;;;;;2.43;0.80;22.60;44.20;;;;;;1688286;80;3577174;
    2019/04/25 15:55:33;;;;;;;2.20;0.90;22.60;44.60;;;;;;1690723;80;3377253;
    2019/04/25 15:58:01;;;;;;;2.83;0.80;22.50;44.30;;;;;;1690430;80;3377182;
    2019/04/25 16:00:34;;;;;;;2.50;0.90;22.40;44.70;;;;;;1690602;80;3377452;
    2019/04/25 16:03:04;;;;;;;2.95;0.95;22.40;44.10;;;;;;1681235;80;3398026;
    2019/04/25 16:05:32;;;;;;;2.90;0.90;22.40;44.20;;;;;;1688991;80;3529394;
    2019/04/25 16:08:01;;;;;;;2.27;0.75;22.40;44.20;;;;;;1690484;80;3377245;
    

    Im nächsten Teil versuche ich das Ganze mal was netter aufzubereiten.

    Wie immer der Hinweis, das ist im Netz nicht sicher!! NUR für lokale Server im eigenen Netzwerk benutzen!

    Die anderen Teile
    Teil 1
    Teil 2

    Links

    https://luftdaten.info/feinstaubsensor-bauen/

    Ecxellente Anleitung!! Danke dafür!!
    https://blog.helmutkarger.de/feinstaubsensor-teil-1-jetzt-messen-wir-selber/

    https://github.com/opendata-stuttgart/meta/wiki/APIs



  • NEIN, das ist nicht schön!

    a034c194-d452-46db-a382-1d928fae0ca3-grafik.png

    Das geht besser 🙂



  • Es geht voran 😉

    0ac2b50a-d7b4-4f42-a436-4359da3cf985-grafik.png


Log in to reply
 

Diese Artikel könnten Dich auch interessieren.