Nanode als webbasierter Datenlogger

Mit der bereits integrierten Ethernet-Schnittstelle eignet sich das Nanode-Board ideal für die webbasierte Datenerfassung. Die über die analogen Ports erfassten Sensordaten können anschliessend über Ethernet an eine Webanwendung zur Datenerfassung im Internet oder Intranet gesendet werden.

Eine der bekanntesten Anwendungen im Internet ist Pachube, ein Real-Time Open Data Web Service, auf welchem man über eine API Daten speichern und anschliessend darstellen kann.

Für das Speichern der Daten über die Pachube-API kann ein Beispielsketch EtherShield_simpleClient_Pachube aus der EtherShield-Library verwendet werden.

Bild 1: Nanode als Datenlogger, Ethernet (rechts), Temperatursensor (oben)

Neben der oben genannten Datenspeicherung im Internet kann man seine gesammelten Daten auch im Intranet speichern. Für die Datenspeicherung kann beispielsweise eine MySQL-Datenbank verwendet werden, welche über ein PHP-Script mit Daten gefüllt wird.

Das Senden der Daten erfolgt dabei über einen URL-Aufruf.

Beispiel:
http://10.0.1.8/update-daten.php?temp=23.56

Damit nicht ungewollt Daten in die Datenbank gespeichert werden, kann man den URL-Aufruf mit einem zusätzlichen Parameter (Key) erweitert werden.

http://10.0.1.8/update-daten.php?temp=23.56&key=123456789ABCDEF

Vor dem Speichern der Daten in der MySQL-Datenbank prüft die Speicherfunktion ob der in der URL übergebene Key mit einem gespeicherten Key übereinstimmt.

In der Datenlogger-Hardware, in unserem Beispiel dem Nanode, wird für die Datenübergabe an die Intranet-Anwendung das leicht angepasste Beispiel EtherShield_simpleClient_Emoncms verwendet.

Das Beispiel ist universell aufgebaut und kann für viele verschiedene Client-Anwendungen mit dem Nanode verwendet werden.

#include <EtherShield.h>
byte mac[6] =     { 0x54,0x55,0x38,0x12,0x01,0x23};
byte ip[4] =      {10,0,1,100};
byte gateway[4] = {10,0,1,1};
byte server[4] =  {10, 0, 1, 8};

#define HOST ""  // Blank "" if on your local network
#define API "/update-daten.php?key=123456789ABCDEF&"

unsigned long lastupdate;

char str[50];
char fstr[10];
int dataReady=0;

void setup()
{
Serial.begin(9600);
Serial.println("EtherShield Datenlogger");

ethernet_setup(mac,ip,gateway,server,80);
}

void loop()
{
//--------------------------------------
// 1) Measurements and data preparation
//--------------------------------------
if ((millis()-lastupdate)>6000)
{
lastupdate = millis();

float a0 = analogRead(0);

// Build up a json string: {key:value,key:value}
// dtostrf - converts a double to a string!
// strcat  - adds a string to another string
// strcpy  - copies a string
strcpy(str,"temp=");
dtostrf(a0,0,2,fstr);
strcat(str,fstr);
strcat(str,"");

dataReady = 1;
}

//----------------------------------------
// 2) Send the data
//----------------------------------------
if (ethernet_ready() && dataReady==1)
{
ethernet_send_url(PSTR(HOST),PSTR(API),str);
Serial.println("sent"); dataReady = 0;
}

}

Mittels Chart-Funktion, beispielsweise der PHP-Library Libchart, können die in der Datenbank gespeicherten Sensordaten auf einer Webseite dargestellt werden.


Bild 2: Sensordaten auf Webseite darstellen

Mit dieser netzwerkinternen Lösung werden keine Daten ins Internet gesendet. Die Datenverarbeitung-und Speicherung erfolgt mit einer eigenen Lösung. Man hat den vollen Zugriff auf die Daten und kann diese nach Bedarf für andere Anwendungen nutzen.


Kategorien