| Linux |
Apache Web Server |
| --- | --- | --- |
Mittels einer Kombination von Linux (Ubuntu basiert auf Linux, bzw. Debian) und dem Web-Server Apache bauen wir eine Datenablageplattform für die Sensordaten.
Dazu machen wir den LAM Server (bzw. Apache) REST fähig und schreiben Daten vom Board via REST in eine Datei auf dem Server (/data/post.txt).
Der Apache HTTP Server ist ein quelloffenes und freies Produkt der Apache Software Foundation und der meistbenutzte Webserver im Internet.
Der Apache-Server kann sehr gut mit sogenannten Modulen erweitert werden, die bestimmte Zusatzfunktionen mitbringen und immer mit 'mod_' beginnen (z. B. mod_rewrite, mod_php5, mod_ssl).
Es gibt Module u. a. für
- SSL (mod_ssl für OpenSSL, mod_gnutls für GnuTLS)
- Einbindung und Verwendung von dynamischen Skriptsprachen (u. a. mod_php5, mod_perl, mod_python)
- Unterstützung von zusätzlichen Protokollen (WebDAV: mod_dav, mod_dav_fs, mod_dav_lock, mod_dav_repos)
- Authentifizierung (mod_auth*)
- Weiterleitung an andere Server (mod_proxy)
sudo apt-get install apache2 apache2-doc
sudo a2enmod cgi
sudo service apache2 restart
Die Inhalte für den Server werden in einem als "document root" bezeichneten Verzeichnis abgespeichert. Dies bedeutet, dass der Apache Webserver dort nach den auszuliefernden (HTML-)Dateien schaut
Beim Linux sind die Dateien im /var/www/html Verzeichnis.
Von Client Seite werden die dort abgelegten Dateien, im Browser, mittels http://IP-Adresse VM abgerufen. Auf dem Linux, mittels http://localhost. Der Apache zeigt darauf hin seine Standardseite an.
Das Common Gateway Interface (CGI) ist ein Standard für den Datenaustausch zwischen einem Webserver und dritter Software, die Anfragen bearbeitet. CGI ist eine schon länger bestehende Variante, Webseiten dynamisch bzw. interaktiv zu machen, deren erste Überlegungen auf das Jahr 1993 zurückgehen.
Mittels des nachfolgenden CGI-Scripts lässt sich Representational State Transfer (abgekürzt REST, seltener auch ReST) abbilden.
Das CGI-Script fängt dabei die HTTP Methoden GET, POST, PUT, DELETE ab und ermöglicht es so:
- GET - Daten vom Server zu holen: Datum (
/rest/time
) oder Timestamp (/rest/timestamp
) - POST - Daten an den Server zu senden, welche in der Datei
/data/post.txt
gespeichert werden - PUT - Dateien im Verzeichnis
/var/www/html/data
zu erstellen - DELETE - Dateien im Verzeichnis
/var/www/html/data
zu löschen
Wechseln als User root
und im Verzeichnis /usr/lib/cgi-bin
Datei rest
anlegen mit Inhalt vom CGI-Script
sudo -i
cd /usr/lib/cgi-bin
nano rest
chmod +x rest
Ausprobieren im Browser durch öffnen des URLs
http://<ip-Adresse Server>/cgi-bin/rest
http://<ip-Adresse Server>/cgi-bin/rest/time
Beim ersten Mal erscheint eine hello
Message beim zweiten Mal wird die Zeit angezeigt.
Die weiteren Funktionen können mittels curl
getestet werden. Windows PowerShell User verwenden Invoke-WebRequest
und schauen da.
Daten vom Server lesen: HTTP GET
curl http://<ip-Adresse Server>/cgi-bin/rest
curl http://<ip-Adresse Server>/cgi-bin/rest/timestamp
curl -v -X GET http://<ip-Adresse Server>/cgi-bin/rest/timestamp
Daten auf Server schreiben: HTTP POST in post.txt
curl -v -X POST http://<ip-Adresse Server>/cgi-bin/rest -d "poti=0.5&hall=0.1&light=0.8&temp=26"
Die Daten werden in der Datei /data/post.txt
gespeichert. Diese Datei kann im Browser angezeigt werden:
http://<ip-Adresse Server>/data/post.txt
Datei inkl. Inhalt auf Server erstellen: HTTP PUT
curl -v -X PUT http://<ip-Adresse Server>/cgi-bin/rest?test.txt -d "Das sind Daten fuer den Server"
Datei vom Server löschen: HTTP DELETE
curl -v -X DELETE http://<ip-Adresse Server>/cgi-bin/rest?test.txt
Erweitertes Beispiel mit MySQL siehe IoTKitV2.
Für das IoTKit steht ein vorbereitetes Programm zur Verfügung welche die Temperatordaten an den LAM Server sendet.
Weitere Beispiele findet man auf http://os.mbed.com/teams/sandbox/code/http-example/ oder im Verzeichnis Cloud.
Compilieren
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | HTTPSensorPOST |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/LAM/HTTPSensorPOST; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/LAM/HTTPSensorPOST |
CLI (nucleo_f303re) | mbed compile -m nucleo_f303re -f --source . --source ../IoTKitV3/LAM/HTTPSensorPOST |