Datenübergabe an PHP Datei

Hallo community,

bei mir scheitert es an der Datenübergabe an eine PHP Datei.

Ich möchte in einem Beispiel hier, Temperaturdaten an eine PHP Datei weitergeben um sie dann in einer MYSQL Datenbank zu speichern.

Der Arduino Ethernet schickt einen Datenstring und ein Kommunikationspasswort zum Webserver, sprich die PHP Datei.

Diese wertet es aus, bzw. empfängt es mit if isset $_get.

Es kommen aber keine Daten an der PHP Datei an.

hier mal mein Code.

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

EthernetClient client;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC-ADRESSE eingeben!
byte ip[] = { 192, 168, 178, 18 }; // IP-Adresse eingeben!
byte gateway[] = { 192, 168, 178, 1 }; // Gateway eingeben!
byte subnet[] = { 255, 255, 255, 0 };
byte server[] = { 192, 168, 178, 34 }; // IP des Servers eingeben
char host[] = "debian.fritz.box";	// DOMAIN eingeben!
char url[] = "/dallas/arduino_push_data.php";	// Pfad zur PHP-Datei eingeben
char key[] = "arduino";	// Kennwort aus PHP-Datei eingeben
char c;

int Sensor = 5; // LM35
int led = 13; // Power LED
float Temperatur = 0;// Variable für Temperatur 
int temp = 0; // Analog-Wert

void setup() {
  Serial.begin(9600);	 // für Debug-Ausgaben
  Serial.println("Programm gestartet");
  Ethernet.begin(mac, ip, gateway, subnet);
  pinMode (led, OUTPUT);
  delay(5000);	 // warten, bis LAN gestartet
}

void loop() {
  Sensor_lesen();
  Daten_senden();

  if (client.available())
  {
  char c = client.read();
  Serial.print(c);
  }
  delay(12000);
  client.stop();
  client.flush();
}

void Sensor_lesen() {
  
  digitalWrite(led, HIGH);
  temp = analogRead(Sensor); // Analog-Wert auslesen
  Temperatur = (5.0 * temp * 100.0)/1024.0; // Berechnung der Temperatur in °C
  Serial.print("Temperatur-Sensor: ");
  Serial.println(Temperatur);
}

void Daten_senden() {
  
  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
  Serial.print("********Verbunden - sende Daten*********");
  client.print("GET ");
  Serial.print("GET ");
  client.print(url);
  Serial.print(url);
  client.print("?TEMP=");
  Serial.print("?TEMP=");
  client.print(Temperatur);
  Serial.print(Temperatur);
  client.print("&key=" + String(key));
  Serial.print("&key=" + String(key));
  client.println(" HTTP/1.1″");
  Serial.println(" HTTP/1.1″");
  client.print("Host: ");
  Serial.print("Host: ");
  client.println(host);
  Serial.println(host);
  client.println();
  Serial.println();
  Serial.println("fertig!");
  delay(2000);
  digitalWrite(led, LOW);
  }
else
  {  
  Serial.println("***** VERBINDUNGSAUFBAU NICHT MOEGLICH *****");
  }
}

Zu was braucht es das "GET " am Anfang? Bist Du sicher daß die URL richtig ist? Grüße Uwe

Hallo Uwe.

Der Pfad zum Webordner ist richtig. Den Code hatte ich mal vor Jahren so übernommen, abgeändert und er lief super. Jetzt wollte ich es neu aufsetzten, und es gibt ja nur noch PHP7, und seitdem läuft es nicht mehr.

Warum GET am Anfang des senden steht, weis ich nicht.

Hier mal die Ausgabe am Seriellen Monitor, Ohne angeschlossenen Sensor, deshalb so krumme Daten.

Programm gestartet
Temperatur-Sensor: 254.88
***** VERBINDUNGSAUFBAU NICHT MOEGLICH *****
Temperatur-Sensor: 155.76
********Verbunden - sende Daten*********GET /dallas/arduino_push_data.php?TEMP=155.76&KEY=arduino HTTP/1.1″
Host: debian.fritz.box

fertig!
HTemperatur-Sensor: 154.30
********Verbunden - sende Daten*********GET /dallas/arduino_push_data.php?TEMP=154.30&KEY=arduino HTTP/1.1���
Host: debian.fritz.box

fertig!

und es gibt ja nur noch PHP7, und seitdem läuft es nicht mehr.

Wenn es an der Umstellung auf PHP7 liegen soll, dann ist eine völlig doofe Idee, den PHP Code geheim zu halten. Oder?

So verbirgst du die Problemursache nicht nur vor uns, sondern offensichtlich auch vor dir selber.

if isset $_get.

Das ist kein PHP Code.

Hallo Combi,

ich hatte überhaupt nicht vor den Code geheim zu halten. Nur vergessen zu posten.

Hier ist der PHP Code.

GET und $GET wird zur Speicherung der übergebenen Daten benötigt.

Wenn ich $Get in die Browserzeile mit eingebe funktioniert auch alles.

<?php

$servername = "localhost";
$username = "debian";
$password = "meindebianpasswort";
$dbname = "arduino";

$conn = new mysqli($servername,$username,$password,$dbname);

if($conn->connect_error){
	die($conn->connect_error);
	
	}

if ((isset($_GET['TEMP'])) and (($_GET['KEY']) == "arduino"))
{
echo $_GET['TEMP'];
$ABC = $_GET['TEMP'];

	$eintragen = mysqli_query("INSERT INTO `daten`(`date`, `temp`) VALUES (NOW(), $ABC)");	// TEMP real übergeben, DATE = automatischer SQL-Befehl (NOW)
	
}	
 else {

	$ergebnis = mysqli_query("SELECT * FROM daten ORDER BY id DESC LIMIT 1");	 //nur letzten Datensatz
	while($row = mysqli_fetch_object($ergebnis))
	{
		echo "Aktuellster Wert in der Datenbank: 

";
		echo "ID \t\t\t","<b>","<font color = 'red'>",$row->id,"</b>
";
		echo "<font color = 'black'>","Temp \t\t","<b>","<font color = 'red'>",$row->temp,"</b>
";
		echo "<font color = 'black'>","Datum / Uhrzeit \t","<b>","<font color = 'red'>",$row->date,"</b>
";
	}
}

?>

Was soll das 12 sec. delay in der loop? Äußerst kontraproduktiv. Und du liest dadurch auch nur ein Zeichen der Antwort alle 12 Sekunden ein. Und das delay in setup kostet dich nur Lebenszeit, bringen tuts nix

Was gibst du genau in die Browsereingabezeile ein, dass der Wert eingetragen wird?

Einen offensichtlichen Fehler sehe ich nicht…
(schade eigentlich)

PHP Debuggen
An dem Anfang des PHP Scriptes sollte also stehen:

<?php

error_reporting(-1);
ini_set('display_errors', TRUE);

// ab hier dein Kram

So hat PHP die Chance dir auch Fehler zu melden.

Des weiteren läuft PHP ja nicht alleine, sondern vermutlich im Apache, oder einem anderen Webserver.
Dessen Logdateien sollten dir auch sagen können, was schief läuft.


Offensichtlich knallts schon beim connect…

Returns

Returns an int (1,-1,-2,-3,-4) indicating connection status :

SUCCESS 1
TIMED_OUT -1
INVALID_SERVER -2
TRUNCATED -3
INVALID_RESPONSE -4

Vielleicht solltest du das mal detailierter auswerten.
Und nicht nur **** VERBINDUNGSAUFBAU NICHT MOEGLICH ***** ausgeben.

Wenn ich

http://192.168.178.34/dallas/arduino_push_data.php?TEMP=22.56&KEY

Eingebe, läuft das PHP Script ohne Fehler durch und speichert den Wert 22.56 in die MYSQL Datenbank korrekt ein.

und warum schreibst Du das dann nicht? Grüße Uwe

Du verlässt dich, dass dir jemand “debian.fritz.box” in die IP umwandelt. Dein Sketch tut es nicht. Hab jedenfalls nichts dazu gesehen

uwefed: und warum schreibst Du das dann nicht? Grüße Uwe

Wie gesagt, es hat alles schon einmal funktioniert und das bestens. Der Arduino Sketch setzt doch die Werte von $TEMP&KEY.

Meine Eingabe sollte doch nur zeigen das dieses PHP Skript funktioniert.

Ich denke das es an der Kommunikation zwischen Arduino und PHP hakt.

ElEspanol:
Du verlässt dich, dass dir jemand “debian.fritz.box” in die IP umwandelt. Dein Sketch tut es nicht. Hab jedenfalls nichts dazu gesehen

Ab ich jetzt http://192.168.178.34/dallas/arduino_push_data.php$TEMP=22.56&KEY oder
http://debian.fritz.box/dallas/arduino_push_data.php$TEMP=22.56&KEY eingebe ist EGAL.

Das PHP Skript funktioniert in beiden Fällen.

Also wird auch der Hostname korrekt aufgelöst und der entsprechenden IP zugeordnet.

Hast du es im Arduino getestet?

ElEspanol: Hast du es im Arduino getestet?

Was soll ich denn getestet haben. Es werden irgendwie keine Daten weitergegeben.

Was soll ich denn getestet haben.

Das ist keine Frage.

Sondern eher eine Verweigerungshaltung.

combie:
Das ist keine Frage.

Sondern eher eine Verweigerungshaltung.

Hier mal das LOG des Apache. Also der Arduino sendet und es kommt auch am Apache an. Warum werden die Indexes nicht gespeichert um abgerufen zu werden.

hier mal das Apache LOG.

192.168.178.18 - - [17/Sep/2017:15:58:03 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:58:17 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:58:31 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:58:46 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:59:00 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:59:14 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:59:28 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:59:43 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:15:59:57 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:00:11 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:00:25 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:00:40 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:00:54 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:01:08 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:01:22 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:01:36 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:01:51 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:02:05 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:02:19 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:02:33 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:02:47 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
192.168.178.18 - - [17/Sep/2017:16:03:02 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226

Des weiteren habe ich mal eine einfache PHP Datei geschrieben um sämtliche anderen Fehler auszuschliessen. Selbst da wird nichts angezeigt.

Ausser eine PHP Fehlermeldung.

Notice: Undefined index: TEMP= in /Applications/XAMPP/xamppfiles/htdocs/arduino_push_data.php on line 21

Notice: Undefined index: KEY= in /Applications/XAMPP/xamppfiles/htdocs/arduino_push_data.php on line 22

<?php


error_reporting(-1);
ini_set('display_errors', TRUE);

$ABC = $_GET['TEMP=']; // Line 22
$DEF = $_GET['KEY='];  // Line 23
echo "$ABC $DEF";

?>

OK, die halbe Antwort, von mir, hast du offensichtlich erkannt.

$ABC = $_GET['TEMP=']; // Line 22 $DEF = $_GET['KEY=']; // Line 23

$ABC = $_GET['TEMP']; // Line 22 $DEF = $_GET['KEY']; // Line 23

Wanderfalke: Hier mal das LOG des Apache. Also der Arduino sendet und es kommt auch am Apache an. Warum werden die Indexes nicht gespeichert um abgerufen zu werden.

hier mal das Apache LOG.

192.168.178.18 - - [17/Sep/2017:15:58:03 +0200] "GET /arduino_push_data.php?TEMP=22.56&KEY=arduino HTTP/1.1" 400 226
...

Die vorletzte Zahl in der Logzeile ist der HTTP-Code 400 heißt "bad request"

Der Server bekommt zwar Deine Anfrage, kann aber den Request nicht verarbeiten, da er fehlerhaft ist.

Gruß Tommy

Tommy56:
Die vorletzte Zahl in der Logzeile ist der HTTP-Code 400 heißt “bad request”

Der Server bekommt zwar Deine Anfrage, kann aber den Request nicht verarbeiten, da er fehlerhaft ist.

Gruß Tommy

Hallo Tommy, heisst das das der Apache eine Anfrage bekommt vom Arduino sie aber nicht im richtigen Format ist?

Tommy56: Die vorletzte Zahl in der Logzeile ist der HTTP-Code 400 heißt "bad request"

Der Server bekommt zwar Deine Anfrage, kann aber den Request nicht verarbeiten, da er fehlerhaft ist.

Gruß Tommy

192.168.178.20 - - [17/Sep/2017:17:22:54 +0200] "GET /arduino_push_data.php?TEMP=174.32&KEY=arduino HTTP/1.1" 200 13 192.168.178.18 - - [17/Sep/2017:17:22:42 +0200] "GET /arduino_push_data.php?TEMP=173.34&KEY=arduino HTTP/1.1" 400 226

Beide Zeilen sind identisch, die erste von der Brwoserzeile aufgerufen, die zweite vom Arduino gesendet.