Neues Projekt: Arduino-Datenlogger mit PHP und MySQL

Hallo liebes Forum,

ich habe mal wieder ein neues Projekt auf meine Seite gestellt: http://jleopold.de/2011/03/16/arduino-daten-logger-mysql-php/#more-357

Vielleicht hat ja jemand Interesse.

Bei Gelegenheit übertrage ich es noch in den deutschen Playground ;-)

Lieben Gruß Poldi

Hallo Poldi, schön gemacht! Das ist das was ich für meine Waage auch noch machen will. Allerdings fehlt mir das Ethernet-Shield zum weiter arbeiten. (ist bestellt)

Was mich interresieren würde: Du benutzt $_GET um deine Daten per URL zu übertragen. Ich würde gerne wissen ob man auch per $_POST arbeiten kann. Deine URL wird im Klartext übetragen, das heißt jeder kann diese mitlesen und den KEY sehen. Zumindest soweit ich weiß.

Und ich würde deine $_GETs noch per htmlentities bzw strip_tags säubern.

Meine Gedanken dazu. Thorsten

hmmm..., daten (loggen) übertrage ich bei mir zur grafischen darstellung über 2x 4 euro RFM12 funkmodule vom arduino/atmega. geht auch ohne teure geräte.

klappt wunderbar.

gruss

Die Frage ist auf welche Distanz und wohin? Ich will meine Daten , wie Poldi wahrscheinlich auch, im Internet haben. Und das geht ohne einen extra Rechner zu verwenden nicht ohne LAN.

Mein Waage-Projekt ist eh nur bastelei ohne Sinn und Verstand. Wollte in dem zusammenhang einfach mal das LAN ausprobieren :)

Ansonsten ist dein Funkmodul oder dieses xBees sicher super. Das kommt dann aber erst im nächsten Schritt.

Gruß Thorsten

Mahlzeit zusammen,

danke für die Hinweise, Thorsten. Ja, ich habe auch gelesen, dass man mein Kennwort sniffen könnte. Aber hey? Hat irgendwer echt Bock darauf, in meine Datenbank zu spammen? Dann können sie auch gleich den Server durch andauernde Anfragen blockieren, etc.

Wenn Du Dich in dem Thema gut auskennst und eine Verbesserung nennen kannst, nur zu. Unter anderem deswegen tauscht man sich doch aus, oder ? ;-)

Wie meinem Beitrag ja zu entnehmen ist, war dies mein erstes PHP und MySQL Projekt.

@ Funkheld: Das von Dir vorgeschlagene sehen ich als weitere Möglichkeit für die Übertragung. Die Frage ist nur, was möchte man erzielen. Du musst das Projekt ja nicht toll finden und ich sage auch nicht, dass dies der einzige Weg ist. Verstehe ehrlich gesagt nicht ganz, was Du mir eigentlich sagen möchtest...

Ich wollte jedenfalls eine Möglichkeit schaffen, dass Frauchen die Temperatur des Wassers im Auge behalten kann. Schließlich gibt es auch teure Fische :grin:

Lieben Gruß Poldi

Hallo, ich habe gesehen das die Twitter-Library mit POST arbeitet. Dann kommen die Daten nicht über die URL. Ich meine das währe sicherer kann aber auch sein das ich mich teusche.

Wenn mein LAN-Shield da ist werde ich das zumindest auf dem Weg versuchen.

Gut auskennen ist übertrieben. Aber ich habe vor dem Arduino hauptsächlich im Webbereich mich ausgetobt.

Aber nichts desto trotz finde ich dein Projekt super. Was ich noch cool finden würde wenn auch der wirklich aktuelle ist-zustand live abgefragt werden würde. Aber gut, das ist ein nice to have.

Gruß Thorsten

Das klingt super, Thorsten.

Bin gespannt, was Du heraus bekommst :)

Lieben Gruß Poldi

Hab in England bestellt. Das kann dauern... Lieferung ist auf dem Weg und wird denke ich Anfang nächste Woche ankommen.

Nette Geschichte !

Ich würde im PHP Teil den DB Eintrag nochmal in eine

if (is_numeric($temp)) {....}

hängen und damit ist mit der key Absicherung ziemlich dicht ;-)

Solche Projekte machen richtig Laune und auch super schön dokumentiert !

Beim LM35 nutzt du aber nur Kennlinine a, oder ?

Hi,

verstehe ich es richtig, dass so noch geprüft wird, ob es sich um eine Zahl handelt, damit es nicht zu einer Fehlermeldung bim Eintrag in die Datenbank kommen kann?
Verstehe aber nicht, wieso dadurch die Key-Absicherung sicherer wird…

Ja, es ist ein einfacher Code, der ebenfalls gern von Euch verbessert werden kann.

Freue mich doch immer etwas zu lernen :wink:

Lieben Gruß
Poldi

Das Problem ist doch gerade bei der PHP /SQL Kombi dass sich niemand über einen der übergebenen Werte Zugang zum Dienst oder Server erschleichen kann. Was nutzt dir der key wenn du davor unter Umständen schon komplette Anweisungen in der GET Variablen übergibst rep. übergeben kannst. Diese Dinge würden dann mit den Rechten des Apachen ausgeführt. Deswegen "strippt" man meistens die vorgenannten Zeichen und Tags raus, wenn du nur eine Zahl übergibst ist die Sache klar. Alles weitere passiert erst, wenn es auch wirklich eine Zahl ist, ansonsten lassen wir alles weg.

Sozusagen eine minimalistische Absicherung.

Soweit verstanden. Dankeschön ;)

Werde es bei Gelegenheit mit einbauen.

Hast Du auch schon eine Idee zur Verbesserung des Arduino Code bzgl. Kennlinie und Genauigkeit?

Lieben Gruß Poldi

Hi Poldi,

was mich mal interessieren würde: Könnte man auch eine Webcam an den Arduino anschließen und die Bilder dann online übertragen? Das wäre mal interessant. Was müsste das für eine Webcam sein, damit die von Arduino gesteuert werden kann? Normal braucht sowas ja Treiber.

//EDIT Wie ich gerade sehe überträgst du ja auch Webcam Bilder auf deine HP. Macht das auch der Arduino?

Gruß Thorsten

Moin,

nein, es ist keine vom Arduino gesteuerte Kamera.

Habe so eine bei eBay gekauft : http://instar.de/in-3010-schwarz_10.html und als Snapshot in die Seite eingebaut. Per dyndns kann ich auch auf den Livestream zugreifen und die Kamera bewegen.

Lieben Gruß
Poldi

Beim LM35 nutzt du aber nur Kennlinine a, oder ?

Welche Kennlinie meist du damit genau?

Kennlinien bezog sich auf die Möglichkeiten aus dem Datenblatt des LM35, habe gerade die Dioden ausgepackt um den Levellift bis -40 C zu machen. Deswegen interessiert mich alles rund um das Bauteil

Schönes Projekt! Leider habe ich kein Aquarium mehr, sonst hätte ich etwas Ähnliches gemacht. Ich habe mit meiner Klimamessstation fast dasselbe realisiert...solltest Du Hilfe mit der Datenbank brauchen, helfe ich gerne weiter.

http://arduino.andres.li

Mahlzeit Andre,

Vielen Dank für die Blumen.

Dein Projekt ist ja schon viel weiter, als ich es bin! Respekt. Finde es super! Auch gut erklärt.

Auf Dein Angebot, mir zu helfen, komme ich gern zurück:

Gibt es da schon ein Update? Wie misst du denn nun die Feuchte im Boden an verschiedenen Stellen? Da habe ich nämlich auch noch keine Idee zu. Ich hatte im letzten Jahr Tomaten gepflanzt. Die waren sehr lecker. Habe da natürlich auch schon an ein Bewässerungssystem gedacht und eine Pumpe gekauft. Weiter bin ich aber nicht…

Was mich noch interessieren würde:
Kann ich ein paar Zeilen Code Deiner Webseite bekommen? Wie machst Du die Trend-Pfeile und die Bildung der Durchschnittswerte? Wie wird der aktuellste Wert unten auf der Seite abgefragt?
Ist der Umgang mit dem W-LAN-Shield problemlos? Sodass ich meinen Arduino-Code quasi nur um die Library erweitern müsste?

Ach ja, das Diagramm auf der Seite hat gerade einen Fehler in Zeile 40. Das kenne ich :wink:
edit: Fehler taucht nur auf, wenn keine Tage gewählt sind. Vielleicht kannst Du da ein “Min” einbauen?

Ich werde diese Woche mal versuchen, meinen Temperatur-Fühler ins Wasser zu lassen, um endlich Live-Werte in die Datenbank zu bekommen. Muss den Sensor noch wasserdicht verpacken…

edit: Was mir noch aufgefallen ist, da Du ja schon viele Werte hast: Kann man mit JPGraph auch “scrollbare Diagramme” erstellen? Angenommen ich möchte eine Temperatur an verschiedenen Tagen immer zur selben Uhrzeit ablesen. Dann wird es in einer Mehrtages-Ansicht schwer. Hätte man aber den “Zoom” auf Stunden, könnte man scrollen… Das werde ich mal weiter verfolgen. Die Monats-Ansichten finde ich gut!

Lieben Gruß
Jens

Hallo

Leider gibt es in diesem Projekt noch kein Update...ich sammle erst mal Daten und Erfahrung in der Zuverlässigkeit von diesem Aufbau.

Die Trendpfeile Stelle ich so dar:

Temperaturtrend:

= $temp1) { echo "tempup.jpg"; } else { echo "tempdown.jpg"; } ?> ">

...so bilde ich den Jahresschnitt:


...und so den aktuellen Temperaturwert:

";
echo "";
echo $temperatur[0];
echo "ºC";
echo "";
echo " /  ";
echo "";
echo "";                       
echo $feuchte[0];
echo "%";
echo "";
echo "";
echo "
";

echo "@ ";
echo "$zeit[0]";

?>

....so den Tages Maximal- und Minimalwert:

Tageshöchst /-Tiefst: '$heuteAnfang' AND zeit < '$heuteEnde' ORDER BY solar DESC";     $result = mysql_query($sql) OR die(mysql_error()); //push the data into $data array to get it plotted $i=0; while ($array=mysql_fetch_array($result)) {         $solar[$i]=$array[0]; $i++; }; $sql = "SELECT solar FROM ip WHERE zeit > '$heuteAnfang' AND zeit < '$heuteEnde' ORDER BY solar ASC";     $result = mysql_query($sql) OR die(mysql_error()); $i=0; while ($array=mysql_fetch_array($result)) {         $solar2[$i]=$array[0]; $i++; }; if (!empty($solar[0])) { echo $solar[0]; } else { echo "-.-"; } echo "ºC / "; if (!empty($solar2[0])) { echo $solar2[0]; } else { echo "-.-"; } ?>

Zur Zeit wurde ein Fehler angezeigt weil die WLAN-Verbindung aus irgendeinem Grund immer wieder abreist. Wieso dies so ist habe ich noch nicht herausgefunden. Die ersten rund 150 Tage lief alles ohne Unterbruch (im 5-Minuten-Intervall), seit einigen Wochen habe ich immer wieder Unterbrüche.

Eigentlich läuft WLAN sehr stabil, woher diese Unterbrüche kommen weis ich zur Zeit noch nicht. Was beim WLAN-Shield sicher anders sein mag ist die limitierte Anzahl von HTML Code pro darzustellende Seite. Aber für den Aufruf eines Formulares und die Übergabe der Werte reicht es allemal aus.

Das Diagramm hat nur ein Fehler gezeigt weil an diesem Tag noch keine Messung verfügbar war. Dies sollte eigentlich nie passieren, auch wenn man die Anzahl Tage auf 0 setzt.

Scrollbare Diagramme habe ich noch nicht getestet. Ich war schon zufrieden damit die Temperatur und die Feuchte ins gleiche Diagramm zu bringen. Aber vielleicht liesse sich mit jgraph ein Diagramm darstellen, in welchem mehrere Tage überlappt dargestellt werden. Damit könnte man die Veränderungen jeweils zur gleichen Uhrzeit sichtbar machen.

Falls Du weiteren Code benötigst helfe ich gerne weiter.

Gruss

Moin!

Mensch, dass nenne ich mal eine schnelle Antwort!

Vielen Dank für die Code-Schnipsel! Dann kann ich meine Seite ja bei Gelegenheit mal aufwerten. SUPER! DANKE!

Fällt Dir auch noch etwas ein, wie man ein spezielles Datum abfragen kann? Die Wahl nach Tagen bis heute ist aber auch schon echt gut. Ich werde da auf jeden Fall weiter dran bleiben. Auch scrollbare Diagramme interessieren mich sehr.

Dein Problem mit den Aussetzern nach bestimmter Zeit kenne ich auch. Ich habe ein Projekt (beruflich) am laufen. Dort war es eine scheinbar magische Grenze von 90 Tagen, bis das Ethernet-Shield nicht mehr wollte. Eine eingebaute Status-LED (dreifarbig Grün, Gelb, Rot) zeigte immer Grün, wenn keine Daten vorhanden waren (kommen alle 90 Sekunden), Gelb während der Übertragung und Rot, wenn die Übertragung nicht geklappt hat. Nach besagten Tagen wechselte die LED immer nur noch von Gelb nach Rot. Nach einem Reset hat alles wieder funktioniert.
Aus diesem Grund habe ich es nun so programmiert, dass Übertragungsfehler gezählt werden. Ist der dritte Fehler aufgetreten schaltet ein Ausgang. Über einen Transistor (2N2222) wird das Board neu gestartet. Die nötige Hardware habe ich aus diesem Beitrag: http://www.faludi.com/itp_coursework/meshnetworking/XBee/XBee_program_Arduino_wireless.html (siehe Schaltbild).

Dies ist zwar nicht optimal, denke ich, aber es funktioniert (toi toi toi) bis heute zuverlässig. Wenn ich auch keine Ahnung habe, wie oft es neu startet…

Vielleicht ist das ja etwas, dass Du probieren magst?

Freue mich darauf, wieder von Dir zu lesen :wink:

Lieben Gruß
Poldi