INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Daten an mysql
20.06.2016, 20:38
Beitrag #9
RE: Daten an mysql
Vielen Danke für deine (eure) Hilfe.

Ich habe es jetzt stundelang versucht doch ohne Erfolg Angry

Vielleicht bist du so freundlich und schaust dir mal an was ich da fabriziert habe Smile

Das ist der Arduino Sketch... drastisch gekürzt damit nur werte übertragen werden.


Code:
#include <Ethernet.h>             // library for ethernet functions

int T1=1;
int T2=2;
//ETHERNET-SETTINGS
byte mac[]     = { 0x5D, 0xA2, 0xFA, 0x2D, 0x76, 0x7C };    // MAC-Adresse des Arduino
byte ip[]      = { 172, 20, 10, 16 };                     // IP-Adresse des Arduino
byte gateway[] = { 172, 20, 10, 17 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 172, 20, 10, 4 };                     // IP-Adresse des Servers

EthernetClient client;
char host[]    = "172.20.10.4";                      // Domain
char url[]     = "/var/www/SaveTempToMySQL.php"; // Pfad zur PHP-Datei
char key[]     = "123456";                     // Kennwort aus PHP-Datei
char c;                                                     // Variable für Rückgabe des Servers


void setup()
{
  


  Serial.begin(9600);

  Ethernet.begin(mac, ip);
  

}

void loop()
{
  
delay(1000);

  



  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET " + String(url));
    Serial.println("GET " + String(url));
    client.print("?T1=");
    Serial.print("?T1=");
    client.print(T1);
    Serial.println(T1);
    client.print("&T2=");
    Serial.print("&T2=");
    client.print(T2);
    Serial.println(T2);
    client.print("&key=" + String(key));
    Serial.print("&key=" + String(key));
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }}

wenn ich das Board Starte verbindet er sich mit dem Raspberry und die Verbindung war erfolgreich.


PHP ist neu für mich und es fällt mir sehr schwer auf Fehlersuche zu gehn.


Das sind meine Skripten

Als erstes habe ich dieses Script "erstellt"

Speicherort:

/var/www/inc den inc Ordner habe ich selber erstellt, ich habe gelesen der muss so heißen.

Die Datei heißt: db.inc.php

Code:
<?php
define('DB_SERVER',"172.20.10.4");
define('DB_NAME',"Arduino_temperaturen");
define('DB_USER',"root");
define('DB_PASSWORD',"123456");

$conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD);
if(is_resource($conn))
{
  mysql_select_db(DB_NAME, $conn);
  mysql_query("SET NAMES 'utf8'", $conn);
  mysql_query("SET CHARACTER SET 'utf8'", $conn);
}
?>

Dann habe ich noch dieses Script:
Speicherort: /var/www/
Dateiname:SaveTempToMySQL.php

Code:
define("KEY","123456");

include("/var/www/inc/db.inc.php");

if(isset($_GET['key']))
{
  if($_GET['key'] == KEY)
  {
    if(isset($_GET['T1']) && isset($_GET['T2']))
    {
      $TEMP1 = mysql_real_escape_string($_GET['T1']);
      $TEMP2 = mysql_real_escape_string($_GET['T2']);
      $DATUM = date("Y-m-d H:i:s");

      $result = mysql_query("INSERT INTO arduino_temperaturen (datumzeit, temp1, temp2)
              VALUES('".$DATUM."', '".$TEMP1."', '".$TEMP2."') ") or die(mysql_error());

      if(mysql_affected_rows() == 1)
      {
        $result = "Temperaturwerte gespeichert";
      } else $result = "Fehler beim speichern der Daten in der MySQL-Datenbank";
    } else $result = "Keine Temperaturwerte übergeben";
  } else $result = "Falscher Key";
} else $result = "Kein Key übergeben";

print_r($result);
?>

Und die Datenbank habe ich auch ertsellt

Ich habe im Verzeichnis mysql die Datenbank mit dem Namen Arduino_Temperaturen angelegt.

Code:
CREATE TABLE IF NOT EXISTS `arduino_temperaturen` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `datumzeit` datetime NOT NULL,
  `temp1` float(10,2) NOT NULL,
  `temp2` float(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

Wenn ich dann beide Verbinde bleibt die Datenbank leer.

Ich weiß ich verlange da sehr viel.

VIELEN DANK
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.06.2016, 20:14
Beitrag #10
RE: Daten an mysql
(20.06.2016 20:38)diode1990 schrieb:  byte ip[] = { 172, 20, 10, 16 };

Vorher hast Du den privaten Bereich 192.168.0.xxx benutzt. Bist Du sicher, dass Dir dieser IP-Bereich gehört und Dein Netz dafür konfiguriert ist?

Ansonsten müssen wir erst mal heraus bekommen, ob überhaupt was am Webserver ankommt.
Dazu brauchst Du die Logfiles Deines Apache. Im Accesslog müssen Deine Zugriffe stehen. Ansonsten auch mal im Errorlog schauen. Wo die stehen steht in der httpd.conf des Apache.

Dann solltest Du den ganzen Aufruf von http://...mit allen Parametern, wie ihn der Arduino baut mal in die URL-Zeile des Browsers schreiben. Dann könntest Du das Ergebnis von print_r sehen.

Poste mal die Ergebnise der Recherche.

Nur am Rande, es ist nicht gut für den Überblick die Datenbank und eine Tabelle darin gleich zu benennen.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.06.2016, 21:14 (Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2016 21:21 von diode1990.)
Beitrag #11
RE: Daten an mysql
Hallo,
ich bin wirklich sehr dankbar für deine tolle Tips.

Ich glaube sooo langsam komm ich ans Ziel Smile

Wenn ich nun die Werte an den Raspberry sende und im Logfile nach sehe steht dieser Eintrag drin.

GET /SaveTempToMySQL.php?T1=1&T2=2&key=123456%20HTTP/1.1%22%20200%20196%20%22-%22%20%22Arduino%22

wenn ich mir nun das in die URL kopiere kommt die Meldung Falscher KEY .

Aber ich habe überall das Passwort "123456". Darum verstehe ich nicht warum der Key falsch sein soll.
Ich habe auch nur den root Benutzer angelegt und überall das selbe Passwort.

Kann es sein dass diese Datei nicht mit einbezogen wird

include("/var/www/inc/db.inc.php"); <---- gibt man den Pfad so ein?

Wenn ich den Pfad absichtlich falsch schreibe, kommt die Meldung kein Key.


Hier habe ich noch ein "Screenshot" von meiner Datenbank ich bin mir nicht sicher ob die so stimmt?
Die Datenbank heißt bei mir arduino_temperaturen und die Tabelle auch.
Ich konnte erst den Code eingeben ,den ich vorher gepostet habe, als ich die Datenbank angelegt habe.

Das ist mir schon komisch vorgekommen.

DANKE

Noch eine kleine korrektur:

Wenn ich den Pfad der Datei ändere kommt auch immer die Meldung Falscher KEY.

Als ob im die Datei egal wäre. Smile


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2016, 11:28 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2016 11:37 von rkuehle.)
Beitrag #12
RE: Daten an mysql
Hallo diode1990,

ich habe früher mal was ganz ähnliches gemacht. Guckst du hier: http://www.arduinoforum.de/arduino-Threa...ight=mysql
Da stehen auch die SQL und PHP - Scripte drin. Kannst du ja mal gegenchecken. Vielleicht hilft es ja weiter.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2016, 13:05 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2016 13:18 von diode1990.)
Beitrag #13
RE: Daten an mysql
Hallo, danke für deine Hilfe.

Mitlerweile kann ich daten in die Datenbank schreiben.

Nur ist es so.
Wenn ich ins Logfile von Apache reinschaue sehe ich dass vom Arduino was gekommen ist.

GET /SaveTempToMySQL.php?T1=1&T2=2&key=123456%20HTTP/1.1%22%20200%20196%20%22-%22%20%22Arduino%22

wenn ich jetzt das in die URL Leiste kopiere und vohrer localhost schreibe funktionierts

sieht so aus

localhost/SaveTempToMySQL.php?T1=1&T2=2&key=123456%20HTTP/1.1%22%20200%20196%20%22-%22%20%22Arduino%22

Jetzt hab ich glaub nur noch das Problem dass nur GET empfangen wird.

Vielleicht hast du einen TIP für mich

DANKE
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2016, 13:13 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2016 13:23 von rkuehle.)
Beitrag #14
RE: Daten an mysql
Kann es sein, dass der Nutzer der die Daten in die DB schreibt nur lokale Zugriffsrechte auf die DB hat, also nur von localhost auf die DB darf?
Grüße Ricardo

Edit: Habe gerade gesehen, dass du die URL etc. als char - Array definierst, was richtig ist, aber bei den client.print() - Aufrufen nochmal string() benutzt. Warum dies?

Noch einmal Edit:
Mach mal zum Beispiel aus
Code:
client.print("GET " + String(url));
lieber
Code:
client.print("GET ");
client.print(url);

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2016, 13:21
Beitrag #15
RE: Daten an mysql
Mein Raspberry hat keinen root user wenn ich etwas ändern möchte muss ich dass mit der Konsole machen.

sudo....

wenn ich "normal" etwas löschen möchte kommt immer acces denied.

Heißt dass ich brauche einen root User


DANKE
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.06.2016, 13:35 (Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2016 13:44 von rkuehle.)
Beitrag #16
RE: Daten an mysql
Nein, es geht ja nicht um einen Systemnutzer, sondern um den Nutzer der auf die Datenbank zugreift. das ist der Nutzer, der in der db.inc.php als "DB_USER" deklariert ist.Die Rechte für diesen Nutzer kannst du normalerweise über phpmyadmin einstellen. Ist phpmyadmin auf dem RasPi drauf?
Grüße Ricardo

Edit:
Du kannst es auch von der Console machen:
Code:
sudo mysql -u root <- das ist der MySQL root
und dann
Code:
GRANT ALL PRIVILEGES ON dbName.* To 'dbuser'@'localhost' IDENTIFIED BY 'password';
dbName - Datenbankname
dbuser - DB_USER aus db.inc.php
password - dessen Password

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Daten Visualisieren MeisterQ 12 557 01.12.2016 19:36
Letzter Beitrag: MeisterQ
  MySQL Beispielcode verstehen RonSH 107 1.955 25.11.2016 10:45
Letzter Beitrag: Tommy56
  Data Logger Daten auf SD Card schreiben Crichton 12 293 22.11.2016 18:32
Letzter Beitrag: Crichton
  I2C Daten übertragen Gandalf 3 211 04.11.2016 13:20
Letzter Beitrag: hotsystems
  Daten über USB verarbeiten Felix91 10 321 12.10.2016 13:00
Letzter Beitrag: Tommy56
  Can-Bus Shield ok, aber keine Daten Clubsport 38 1.534 01.09.2016 14:17
Letzter Beitrag: Clubsport
  NRF24L01,Empfangene Daten auswerten Marc2014 9 518 30.07.2016 19:34
Letzter Beitrag: rkuehle
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 181 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Serielle Schnittstelle - Daten empfangen Datatom 8 774 22.05.2016 18:10
Letzter Beitrag: avoid
  Interrupt wenn softwareSerial Daten BennIY 3 442 01.05.2016 18:39
Letzter Beitrag: tiny85fan

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste