PHP Datenbankabfrage und Ergebnisdarstellung

meph!sto

Vice Admiral
Registriert
Nov. 2003
Beiträge
6.311
Hi,
vorab: ich bin absoluter PHP Laie.
Zu meinem Setup: auf meinem NAS liegt eine MariaDB, die regelmäßig mit Sensorwerten gefüttert wird.
Login und Auslesen der MariaDB mittels phpMyAdmin funktioniert.
Was ich möchte:
auf einem meiner RPi 3B+ soll eine rudimentäre HP gehosted werden, auf der tabellarisch (erstmal) die Sensorwerte aufbereitet werden.

Nach Googlen und Testen bin ich mit meinem Latein am Ende.
Folgenden PHP Code habe ich bereits (steht in meiner index.php):

PHP:
<?php
echo "<h1>Programm TEST</h1>";
$link = mysqli_connect('192.168.1.6', 'DB_USER', 'DB_PW', 'DB_NAME', 'DB_PORT');
//Im Fehlerfall eine Fehlermeldung ausgeben
if (mysqli_connect_errno())
{
    printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
    exit();
}
?>

Wenn ich nun die Seite im Browser aufrufe wird mir auch schön "Programm Test" angezeigt.
Da keine weitere Fehlermeldung angezeigt wurde, bin ich davon ausgegangen dass die Verbindung zur DB funktioniert.
Testweise habe ich ein falsches PW eingetragen und siehe da, es wird mir keine Fehlermeldung anzeigt. Also liegt der Fehler woanders (und ich weiß nicht wo).

Auf dem RPi 3B+ auf dem das Ganze gehosted werden soll, läuft
Code:
php -v
PHP 7.0.33-0+deb9u8 (cli) (built: Jul  5 2020 06:34:50) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0+deb9u8, Copyright (c) 1999-2017, by Zend Technologies
Habt ihr Tipps und Tricks was ich übersehen haben könnte ?

Danke
 
Wie ist mariadb konfiguriert? Kannst du sie von anderen Geräten aus aufrufen, oder können nur Prozesse auf dem selben Host darauf zugreifen?

Sensorwerte sind in einer time series database deutlich besser aufgehoben, als in einer relationalen Datenbank. Wenn es dir um die Auswertung der Sensordaten geht, gibt es auch massig fertige Tools :)
 
madmax2010 schrieb:
Wie ist mariadb konfiguriert? Kannst du sie von anderen Geräten aus aufrufen, oder können nur Prozesse auf dem selben Host darauf zugreifen?
...

Da ich per shell-script die Datenbank von außen füttere (mit den gleichen Zugangsdaten), gehe ich davon aus dass ich von außen (= anderen Geräten) auf die DB zugreifen kann.
Dass es fertige Tools gibt wundert mich nicht, aber ich versuche gerne Dinge selbst zu realisieren (wenn auch oftmals der Aufwand in keinem Verhältnis zum Ergebnis steht).
 
Da bekomme ich nur einen HTTP Error 500 angezeigt

Bin halt so naiiv und dachte ich müsste nur eine index.php auf dem RPi erzeugen (mit entsprechendem Inhalt) und zack würde es klappen.
 
Falls du nur eine Möglichkeit suchst, um die Daten zu visualisieren, werfe mal einen Blick auf Grafana. Das zu verwenden ist sicherlich einfacher, als das Rad neu zu erfinden.
 
Habe nun mal Grafana ausprobiert, aber da scheitert es nun an der Konfig und nicht an der DB Verbindung.
Dann les' ich mich mal in Grafana ein.
 
Naja, mein Problem ist wahrscheinlich ziemlich einfach zu lösen.
Habe in meiner DB 2 Felder "Date (YYYY-MM-DD)" und "Time (HH:MM:SS)"
Damit kann Grafana defaultmäßig nicht umgehen. Muss das nun irgendwie in der SQL Abfrage converten sodass Grafana was ausspuckt.
 
Danke für den Hinweis,
ich ändere jetzt aber nicht meine ganze DB Struktur.
Entweder ich bekomme Grafana hingebogen, sodass es mit den vorhandenen Daten(typen) umgeht oder ich lass' die Spielerei einfach.
 
Grafana ist erst einmal qualvoll könnte dich mittelfristig aber evtl sehr glücklich machen.
Ich würde jedoch dazu raten, die Datenbank auf dem RPI laufen zu lassen, das ist weniger komplex und dadurch sicherer, bietet sich bei dir an und ist weniger Wartungsaufwendig.
 
@meph!sto Du könntest eine View erstellen, welche die Daten aus der Tabelle anzeigt, aber aus den separaten Spalten für Datum und Zeit eine Spalte macht (oder du machst es direkt in der Abfrage, da weiß ich gerade aber nicht ob Grafana das kann). Grafana greift dann einfach auf die View statt auf die Tabelle zu.

so in etwa
SQL:
CREATE VIEW viewName AS
    SELECT
        CONVERT(CONCAT(dateColumn, ' ', timeColumn), datetime) AS datetimeColumn
    FROM
        tableName
 
  • Gefällt mir
Reaktionen: Nase
Danke für den Hinweis,
nach etwas trial & error, habe ich es geschafft direkt in der SQL Query den entsprechenden Unix Timstamp zu erstellen:
SQL:
SELECT
  UNIX_TIMESTAMP(CONCAT(DATE,' ',TIME)) as time_sec,
  TEMP as Temperature
FROM OFFICE
WHERE
  $__timeFilter(CONCAT(DATE,' ',TIME))
ORDER BY CONCAT(DATE,' ',TIME) ASC;
 
Zurück
Oben