Go Down

Topic: [gelöst] Temperatur Logger, mit DS18B20 (Read 7 times) previous topic - next topic

mkl0815

Dann mach doch aus dem Arduino einen Webclient, keinen Webserver.
Der Arduino misst die Temperatur und ruft auf Deinem Webserver eine URL (z.B. http://<synology-IP>/senddata.php?temp1=10.3&temp2=23) auf. Der Synology-Webserver kann auch PHP, Du kannst dort also ohne Probleme die Daten verarbeiten und in eine Datei schreiben. Außerdem sparst Du Dir so den Cronjob auf dem NAS das alle X Minuten den Arduino abfragt. Meine Arduino-Wetterstation funktioniert auf diese Weise sehr stabil seit einem halben Jahr. Ich habe mir sogar die RTC gespart und frage einmal täglich über eine spezielle URL von Webserver die Zeit ab. Das spart den Code für eine NTP-Funktion, denn ein HTTP-Get musste ich ja eh bauen.
Ein weiterer Vorteil ist, das der Arduino den Zeitpunkt zum Senden der Daten bestimmen kann und nicht immer auf ankommende Requests warten muss.

thewknd

dafür hast du den grossen Nachteil, dass
- wenn das NAS nicht läuft
- wenn das Netzwerkkabel nicht eingesteckt ist
du keine Messwerte hast.
duemilanove / OSX & WIN
Arduino & Teensy: http://bit.ly/13rbdtQ

mkl0815

Dafür ist ja die SD-Karte da, dort werden die Daten lokal gespeichert. Der Zugriff selbst kann auch wieder indirekt erfolgen. z.B. durch aufrufen eine URL http://<synologyIP>/service.php
Das kann der Arduino regelmäßig pollen und dort stehen z.B. Befehle wie
"send 2012-04-19.csv" drin. Damit kann der Arduino in einer "Messpause" die Datei von der SD-Karte per HTTP-Post an den Webserver hochladen.
Das kann man sicher auch alles anders lösen. Es gibt immer verschiedene Wege zum Ziel. Bei meiner Lösung war mir wichtig, das der Arduino Wetterdaten sammelt und nicht die meiste Zeit damit verbringt auf einen HTTP-Request zu warten, oder von einem Request im ungünsitgen Zeitraum erwischt wird.

Cetax

Hallo mkl0815,
Das hört sich super an.
Nur wie das funktionieren soll mit dem übergeben der gemessenen Temperatur, versteh ich nicht.
Bin jetzt auf die Arbeit,werde mich heute Abend mal dran setzen.
Aber erstmal vielen Dank den Lösungsvorschlag.
Ich werde aber bestimmt für die Umsetzung deine Hilfe brauchen. 

PS: Eine Wetterstation habe ich auch, WS2300.
*greatz*

 CeTax

www dot blinkmann dot de

Cetax

#24
Apr 20, 2012, 01:38 pm Last Edit: Apr 20, 2012, 01:43 pm by Cetax Reason: 1
Moin,
so habe mich mal an einen Anfang gewagt:
Code: [Select]
/*
 Web client
 This sketch connects to my Diskstation 192.168.178.111
 and send the Themperature from DS18B20 at DigiPin 6 to it

 created 20 April 2012
*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0x90, 0xA2, 0xDA, 0x00, 0xEE, 0xF3 }; // Mac-Adresse Arduino Ethernet
byte ip[] = {192,168,178,230}; // IP-Adresse Arduino Ethernet
byte gateway[] = {192,168,178,1}; // Gateway (Fritzbox)
byte subnet[] = {255,255,255,0};
IPAddress server(192,168,178,111); // Diskstation DS111

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup()
{
 Serial.begin(9600);                             // initialisiere serielle Verbindung mit 9600
 Ethernet.begin(mac, ip, gateway, subnet);       // starte Ethernet
 delay(1000);                                    // warten auf Ethernet
 Serial.println("verbinde...");                  // Ausgabe(n) auf serieller Konsole
if (client.connect(server, 80))                  // wenn Verbindungsversuch erfolgreich ...
 {
   Serial.println("verbunden");                  // Ausgabe(n) auf serieller Konsole
                                                 // schicke Temperatur zum Server
   client.println("GET http://192.168.178.111/senddata.php?temp1=10.3&temp2=23) HTTP/1.0"); // <-- Wie setzt sich die Adresse zusammen??
   client.println();                             // schicke Leerzeile (beende Anfrage)
 }
else                                             // sonst, wenn Verbindung fehlgeschlagen, ...
 {
    Serial.println("Verbindung fehlgeschlagen"); // Fehlermeldung auf Konsole
 }
}

void loop()
{
 //Keine Ahnung was hier rein soll... :-(
}


Jetzt bräuchte ich HIlfe, wwie setzt sich das zusammen:
Code: [Select]
client.println("GET http://192.168.178.111/senddata.php?temp1=10.3&temp2=23) HTTP/1.0");
senddata.php?  <-- Was muss darein und muss die auf den Arduino? Auf die SD-Karte?
temp1=10.3  <-- Ok, temp1 soll wohl der erste DS18B20 sein, aber was ist die 10.3?
temp2=23  <-- Hier auch, was ist die 23 ?

Und was kommt in den Loop-Bereich, sowie was muss auf der Diskstation sein (PHP-File?)

Fragen über Fragen...  :smiley-red:
Ach ja, der DS18B20 muss ja auch noch rein... ups..
*greatz*

 CeTax

www dot blinkmann dot de

Go Up