Seite 1 von 2

Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 26 Jun 2022, 17:04
von zunshiner
Hallo zusammen,
ich versuche jetzt die Daten die ich aus einer Abfrage der API bei Ecowitt erhalte regelmäßig in eine eigene Datenbank zu schreiben:

Code: Alles auswählen

<?php

#Datenbank
$pdo = new PDO('mysql:host=xxx.xxx.xxx.xxx:3304;dbname=dbxxxxxx_xxxx', 'dbuser', 'dbpasswort');

#JSON-Datei
$url       = "https://api.ecowitt.net/api/v3/device/.....
$json      = file_get_contents($url); 
$json_data = json_decode($json, true);

#Werte ermitteln
$temp  = $json_data["data"]["outdoor"]["temperature"]["value"]; 
$wind  = $json_data["data"]["wind"]["wind_speed"]["value"];  
$dir   = $json_data["data"]["wind"]["wind_direction"]["value"];  
$gust  = $json_data["data"]["wind"]["wind_gust"]["value"];  
$pres  = $json_data["data"]["pressure"]["relative"]["value"];  
$humi  = $json_data["data"]["outdoor"]["humidity"]["value"]; 
$solar = $json_data["data"]["solar_and_uvi"]["solar"]["value"]; 
$uvi   = $json_data["data"]["solar_and_uvi"]["uvi"]["value"]; 
$rain  = $json_data["data"]["rainfall"]["hourly"]["value"];   

#Datum für Datenbank vorbereiten
$heute = getdate();
$year     = $heute["year"];
$month    = $heute["month"];
$day      = $heute["mday"];
$wday     = $heute["wday"];

#In Datenbank schreiben
$statement = $pdo->prepare("INSERT INTO Wetterwerte (DAY, MONTH, YEAR, WEEKDAY, TEMP, HUMI, PRES, SOLAR, UVI, RAIN, WIND, GUST, DIR) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$statement->execute(array($day, $month, $year, wday, $temp, $humi, $pres, $solar, $uvi, $rain, $wind, $gust, $dir)); 

?> 
Wenn ich die PHP-Datei aufrufe wird kein Wert in die Datenbank geschrieben.
Leider bin ich kein PHP-Experte - vielleicht sieht hier jemand warum das nicht klappt?

Die Variablen sind alle gefüllt, die Datenbank ist angelegt, der DB-User und das DB-Passwort stimmen.

Grüße
Mathias

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 26 Jun 2022, 17:28
von olicat
Hi!
$statement->execute(array($day, $month, $year, wday, $temp, $humi, $pres, $solar, $uvi, $rain, $wind, $gust, $dir));
Da fehlt ein "$" bei $wday.
Und im code-Block fehlt bei $url das abschliessende Hochkomma. Das ist aber vermutlich nur beim Kopieren/Entfernen verloren gegangen.
Wie sieht denn ueberhaupt die komplette $url bei Dir aus? Den application_key, den api_key und die mac darfst Du ja gerne x-en.

Oliver

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 26 Jun 2022, 17:48
von zunshiner
solche Fehler ärgern mich ... da liest man zig mal drüber und das fällt nicht auf - den $ hab ich ergänzt jetzt.

die url sieht folgendermaßen aus - das Hochkomma ist schon da.

Code: Alles auswählen

$url       = "https://api.ecowitt.net/api/v3/device/real_time?application_key=XXX&api_key=XXX&mac=XXX&call_back=all&temp_unitid=1&pressure_unitid=3&wind_speed_unitid=7&rainfall_unitid=12&solar_radiation_unitid=16"; 
Allerdings funktioniert es damit aber jetzt immer noch nicht in der Datenbank kommen noch keine Werte an.

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 26 Jun 2022, 17:54
von zunshiner
und die URL habe ich aus diesem Beitrag:
https://wetterstationsforum.info/viewto ... 534#p10534

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 27 Jun 2022, 21:51
von zunshiner
Nachdem es im weltweiten Web ja jede Menge Seiten gibt die dieses Problem potentiell lösen könnten, habe ich heute einen anderen Ansatz gewählt, leider mit dem gleichen Ergebnis --> einer leeren Datenbanktabelle.

Mein Code sieht jetzt so aus:

Code: Alles auswählen

<?php

#Datenbank
$db = mysqli_connect("xxx.xxx.xxx.xxx", "dbusername", "dbpassword", "dbname");
if(!$db)
{
  exit("Verbindungsfehler: ".mysqli_connect_error());
}

#JSON-Datei
$url       = "https://api.ecowitt.net/api/v3/device/real_time?application_key=xxxx&api_key=xxxx&mac=xxxx&call_back=all&temp_unitid=1&pressure_unitid=3&wind_speed_unitid=7&rainfall_unitid=12&solar_radiation_unitid=16"; 
$json      = file_get_contents($url); 
$json_data = json_decode($json, true);

#Werte ermitteln
$temp  = $json_data["data"]["outdoor"]["temperature"]["value"]; 
$humi  = $json_data["data"]["outdoor"]["humidity"]["value"]; 
$pres  = $json_data["data"]["pressure"]["relative"]["value"];  
$solar = $json_data["data"]["solar_and_uvi"]["solar"]["value"]; 
$uvi   = $json_data["data"]["solar_and_uvi"]["uvi"]["value"]; 
$rain  = $json_data["data"]["rainfall"]["hourly"]["value"];   
$wind  = $json_data["data"]["wind"]["wind_speed"]["value"];  
$gust  = $json_data["data"]["wind"]["wind_gust"]["value"];  
$dir   = $json_data["data"]["wind"]["wind_direction"]["value"];  

#Werte testweise ausgeben
echo "Temperatur ". $temp. "°C". "<br />";
echo "Wind ". $wind. "km/h aus ". $dir. "°". "<br />";
echo "Windböe ". $gust. "km/h aus ". $dir. "°". "<br />";
echo "Regen heute ". $rain. "mm". "<br />";
echo "Solarstrahlung ". $solar. "". "<br />";
echo "UV-Index ". $uvi. "". "<br />";
echo "Luftdruck ". $pres. "hPa". "<br />";
echo "Luftfeuchtigkeit ". $humi. "%". "<br />";

#Datum und Uhrzeit
$heute = getdate();

#Datumswerte vorbereiten
$year     = $heute["year"];
$month    = $heute["mon"];
$day      = $heute["mday"];
$wday     = $heute["wday"];
$hour     = $heute["hours"];

#Datumswerte probehalber ausgeben
echo "Tag ". $day;
echo "Monat ". $month;
echo "Jahr ". $year;
echo "Wochentag ". $wday;
echo "Stunde ". $hour;

#In Datenbank schreiben
$eintragen = mysqli_query($db, "INSERT INTO Stundenwerte (DAY, WDAY, MONTH, YEAR, HOUR, TEMP, HUMI, PRES, SOLAR, UVI, RAIN, WIND, GUST, DIR) VALUES ('$day', '$wday', '$month', '$year', '$hour', '$temp', '$humi', '$pres', '$solar', '$uvi', '$rain', '$wind', '$gust', '$dir')");
?> 
Jetzt hätte ich ja gedacht, dass damit zumindest irgendeine Antwort auf dem Bildschirm erscheint (oder eben in der Datenbank, aber nullinger, weder die echos noch ein Verbindungsfehler wird ausgegeben.

Sollte nicht wenigstens das der Fall sein, wenn ich diese php-Datei aufrufe?

Grüße
Mathias

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 27 Jun 2022, 22:14
von olicat
Hi!

Was passiert denn, wenn Du im Browser die URL eingibst?
Erhaeltst Du ein korrektes JSON?

Wenn ich die DB-Zeilen auskommentiere und die Echos noch mit einem "\n" versehe kann ich auf der Konsole zumindest die entsprechenden echos sehen:

Code: Alles auswählen

Temperatur 25.0°C<br />
Wind 0.4km/h aus 237°<br />
Windböe 9.4km/h aus 237°<br />
Regen heute 0.0mm<br />
Solarstrahlung 0.0<br />
UV-Index 0<br />
Luftdruck 1013.5hPa<br />
Luftfeuchtigkeit 73%<br />
Tag 27
Monat 6
Jahr 2022
Wochentag 1
Stunde 22
Und auf den Webserver kopiert erhalte ich das auch als html-Seite.

Und nach Reaktivierung der Datenbank-Zeile und Erzeugung der initialen Datenbank inklusive der Tabelle Stundenwerte schreibt das PHP-Script auch brav die Daten da rein.
Welche PHP-Version setzt Du ein?

Oliver

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 27 Jun 2022, 22:39
von zunshiner
Ja, mit der URL erhalte ich ein JSON.

Und die Ausgabe der Werte geht auch, siehe
http://www.waigowetter.de

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 27 Jun 2022, 22:46
von olicat
Hi!

Laeuft das Script auf dem gleichen Server wie der mySQL?
Dann nimm mal in mysqli_connect statt der IP-Adresse "localhost".

Achja, siehe oben noch die hinzugefuegten Hinweise zur Datenbank.

Oliver

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 27 Jun 2022, 22:53
von zunshiner
ja, auf dem gleichen Server.
localhost eingetragen anstatt IP-Adresse
Ergebnis das gleiche --> keine Ausgabe und keine Einträge in der Datenbanktabelle

Es müsste doch zumindest eine Ausgabe kommen, oder?

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Verfasst: 27 Jun 2022, 22:55
von olicat
Hi!

Starte das Script erstmal auf der Konsole. Da solltest Du irgendwelche Fehlermeldungen sehen koennen.

Oliver