Projekt "Open Source Wetterstation"

Hallo!
Ich "quäle" mich seit einigen Tagen mit dem Projekt"Open-Source Wetterstation".
Trotz der richtig eingetragenen Daten wie MySQL-User, Server und Passwort werden meine Messdaten nicht in die Datenbank eingetragen, obwohl die Meldung am seriellen Monitor als "erfolgreich" angezeigt werden. Habe wie dort angegeben auch die config.php richtig angepasst und die Rechte der Dateien auf 644 gesetzt. Leider sind meine PHP-Kenntnisse in den letzten 5 Jahren etwas sehr eingefroren und ich verzweifel langsam. Gehostet wird auf 1blu. Dort habe ich auch bereits erfolgreich ein Internetforum (für Testzwecke) installiert.

Hat jemand einen Rat?
Mein Ziel ist es, Messdaten (Temperatur, Luftfeuchte, Wind und Luftdruck) nahezu in Echtzeit auf meiner Internetseite anzeigen zu können. Beim Stöbern im Netz bin ich auf den Arduino gestoßen. Seine Fähigkeiten und Preis haben mich begeistert....
Danke schon mal!

Pillhuhn:
Hat jemand einen Rat?

Könntest Du noch Deinen Sketch zeigen? Schließe ihn in „Code-Tags“ ein (im Editor der </>-Knopf).

Pillhuhn:
Beim Stöbern im Netz bin ich auf den Arduino gestoßen. Seine Fähigkeiten und Preis haben mich begeistert....

Dann lies hier ein bisschen mit, wenn Du Zeit hast. Was hier an Informationen rüberkommt, ist üppig. Und wenn die Bastelei mit Arduino Spaß macht, hast Du gute Chancen, ein neues Hobby entdeckt zu haben :slight_smile:

Gruß

Gregor

Hallo,
"obwohl die Meldung am seriellen Monitor als "erfolgreich" angezeigt werden"

Das kann alles mögliche sein, was diese Meldung hochholt.
Hast Du im seriellen Monitor mal geschaut, was denn überhaupt übertragen wird?
Gruß und Spaß
Andreas

Pillhuhn:
Hallo!
Ich "quäle" mich seit einigen Tagen mit dem Projekt"Open-Source Wetterstation".
Trotz der richtig eingetragenen Daten wie MySQL-User, Server und Passwort werden meine Messdaten nicht in die Datenbank eingetragen, obwohl die Meldung am seriellen Monitor als "erfolgreich" angezeigt werden.

Kannst Du die Daten per Webbrowser und HTTP Protokoll an Deinen Webserver übermitteln?

Wenn das funktioniert, dann sollte das auch mit einem internetfähigen Arduino funktionieren, beispielsweise einem UNO und aufgestecktem Ethernet-Shield, das Du an die LAN-Buchse Deines Routers per Ethernet-Kabel angeschlossen hast.

OK, hier schon mal der Sketch:

//more information at www.aeq-web.com

#include <Ethernet.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include "DHT.h"

//////////////////////////-- BASIC CONFIGURATION --///////////////////////////////////
#define DHTPIN 2  //PIN of the DHT sensor
#define DHTTYPE DHT11 //Type of the DHT sensor
String id = "001"; //ID of the Weatherstation (001 = own server)
String key = "XXXX"; //Masterkey of the weatherstation
byte mac[] = {
  0xf0,0xd5,0xbf,0x3f,0x21,0x03}; //MAC Adress of the weatherstation 0xca,0x31,0x69,0x7f,0x4c,0x4D}
const char Serverurl[] = "hier steht meine Adresse"; //weatherstation uplink server
//////////////////////////-- BASIC CONFIGURATION --///////////////////////////////////


const int windPin = 3;          
const float windFactor = 2.4;   
const int measureTime = 3;      
volatile unsigned int windCounter = 0;   
float windSpeed = 0.0;
unsigned long time = 0;
void countWind() {
  windCounter ++; 
}


EthernetClient client;
Adafruit_BMP085 bmp;
DHT dht(DHTPIN, DHTTYPE);

char inString[32]; 
int stringPos = 0; 
boolean startRead = false;

void setup(){
  Serial.begin(9600);
  dht.begin();
  Ethernet.begin(mac);
  delay(1000);
 if (!bmp.begin()) {
   Serial.println("BMP085 error, check wiring!");
 }
}

void loop(){
  
  measureandsend();
  if(millis() > 3600000){
    autoreset();
  }
  delay(5200); //Interval (Default is every minute)
}


void measureandsend(){

  windCounter = 0;
  time = millis();
  attachInterrupt(1,countWind,RISING);
  delay(1000 * measureTime);
  detachInterrupt(1);
  time = (millis() - time) / 1000;
  windSpeed = (float)windCounter / (float)measureTime * windFactor;

  float humidity = dht.readHumidity();
  float Temp = dht.readTemperature();
  
  String data;
  data+="";
  data+="text=Temp~Preasure~Humidity~Windspeed~Uptime";
  data+="&submit=Submit"; 
  
  Serial.print("Luftfeuchtigkeit: ");
  Serial.println(humidity);
  Serial.print("Wind: ");
  Serial.println(windSpeed);
  Serial.print("Temperatur: ");
  Serial.println(Temp);
  Serial.print("Luftdruck: ");
  Serial.println(bmp.readPressure()/100);
  

  if (client.connect(Serverurl,80)) {
    Serial.println("Starte Übertragung!");
    Serial.println(Serverurl);
    Serial.println("POST /uplink.php HTTP/1.1");

    client.println("POST /uplink.php HTTP/1.1");
    client.print("Host: ");
    client.println(Serverurl);
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Connection: close");
    client.print("Content-Length: ");
    client.println(data.length());
    client.println();
    client.print("text=");
    client.print(id);
    client.print(";");
    client.print(key);
    client.print(";");
    client.print(bmp.readTemperature());
    client.print(";");
    client.print(bmp.readPressure()/100);
    client.print(";");
    client.print(humidity);
    client.print(";");
    client.print(windSpeed);
    client.print(";");
    client.print(millis()/1000);
    client.print(";");
    client.print("&submit=Submit");
    client.println();

  }
  delay(5000);

  if (client.connected()) {
    client.stop();
    Serial.println("Übertragung erfolgreich!");
  }
  else{
    Serial.println("Übertragung fehlerhaft!");
  }
}


void autoreset(){
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH); 
  Serial.println("RESET");
}

Hallo
"Mein Ziel ist es, Messdaten (Temperatur, Luftfeuchte, Wind und Luftdruck) "

Kannst Du die denn fehlerfrei im seriellen Monitor darstellen.
Wenn dem so ist, dann hätte man schon eine Fehlerquelle weniger.
Gruß und Spaß
Andreas

Pillhuhn:
OK, hier schon mal der Sketch:

Wie wäre es stattdessen mit einem anderen Sketch, der

  • gültige statt ungültige HTTP-Requests an den Server sendet
  • und der die Serverantwort (wenigstens den HTTP-Statuscode) auswertet statt ignoriert?

Wenn du lernen willst, was da genau passiert, kann ich dir mein Tutorial empfehlen.

Gruß
Reinhard

jurs:
Wie wäre es stattdessen mit einem anderen Sketch, der

  • gültige statt ungültige HTTP-Requests an den Server sendet
  • und der die Serverantwort (wenigstens den HTTP-Statuscode) auswertet statt ignoriert?

DAS wäre natürlich die Lösung. Bin aber, wie bereits beschrieben, sehr lange raus...

SkobyMobil:
Hallo
"Mein Ziel ist es, Messdaten (Temperatur, Luftfeuchte, Wind und Luftdruck) "

Kannst Du die denn fehlerfrei im seriellen Monitor darstellen.
Wenn dem so ist, dann hätte man schon eine Fehlerquelle weniger.
Gruß und Spaß
Andreas

Die Messdaten erscheinen im Monitor fehlerfrei!

erni-berni:
Wenn du lernen willst, was da genau passiert, kann ich dir mein Tutorial empfehlen.
Tutorial: Speicherung von Arduino Messdaten auf Webserver und deren Darstellung – Teil 1 | Glaskugelsehen Blog

Gruß
Reinhard

Danke, ich schaue mir Dein Tutorial gleich mal an!

Och, schade, kann nur den Teil 1 ansehen, weiterführend wird nicht gefunden und die Testseite ist offenbar auch nicht erreichbar:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://redirect.ngz-gameserver.de/index.html">here</a>.</p>
<hr>
<address>Apache/2.4.18 (Ubuntu) Server at rncologne.rn.funpic.de Port 80</address>
</body></html>