nodo-domotica.nl

Gegevens uit database weergeven op website?

Hier kun je discussieren over hoe je je Nodo inzet voor taken in en rondom je woning of waar dan ook. Leuke tips, deel ze dan hier.

Gegevens uit database weergeven op website?

Berichtdoor BazemanKM » 19 dec 2013, 22:28

Hallo,

Ik heb de WebApp lokaal draaien en in mijn database worden keurig iedere 5 minuten de waarden van mijn weerstation weggeschreven. Nu wil ik de actuele waarden ook kunnen weergeven op mijn website, zodat iedereen het kan zien. Hier heb ik denk ik php voor nodig. Ik heb al een stukje geschreven, nadat ik op internet heb gezocht, maar het werkt nog niet:

Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

/* Uitvoeren van de query.*/
$sql = 'SELECT sensor_id,data FROM nodo_tbl_sensor_data';

/* Het resultaat van de query in een array variabele stoppen, zodat
we deze later uit kunnen lezen.*/
$result = mysql_query($sql);

/* Met behulp van de functie mysql_fetch_assoc halen we de rijen
uit de array op.*/
while ($row = mysql_fetch_assoc($result)) {

/* Print het resultaat uit de huidige rij op het scherm.*/
echo  $row["sensor_id"];
echo  $row["data"];
echo "<br/>";
} else {
echo 'Geen data gevonden';
}
?>

Nu heb ik meerdere sensoren en dus ook meerdere sensor_id's, van iedere sensor_id moet dus de laatste waarde worden weergegeven. Heeft iemand een idee?
Mijn blog over de Nodo: http://www.fam-oldenburger.nl/wordpress/tag/nodo/

Nodo-Mega V3.6, Product=SWACNC-MEGA-R596|WebApp lokaal (SWINWA-PROD-V099)|DHT-22, Dallas DS18B20, WS-3500|
BazemanKM
 
Berichten: 44
Geregistreerd: 08 aug 2012, 09:49

Re: Gegevens uit database weergeven op website?

Berichtdoor rtenklooster » 20 dec 2013, 13:11

Met je huidige query krijg je alle data van alle sensoren.
Je kunt een array maken met de gewenste sensoren bijv.
Code: Selecteer alles
$sensor_list = array("3","4","5");
dan dmv een foreach:

foreach($sensor_list as $sensor_id){
// Dan hier de query uitvoeren.
// Je wilt het laatste item hebben dus order by en limit.
$query = "SELECT `id`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`id` DESC
LIMIT 1;
// Hier wijs de de waarde toe aan een variabele
}


Er zijn methodes die dit deftiger doen maar zo is ie misschien beter begrijpbaar.
Niet getest hoor, dus geen garantie ;)

Wie weet helpt het je op weg.
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: Gegevens uit database weergeven op website?

Berichtdoor BazemanKM » 20 dec 2013, 13:42

rtenklooster schreef:Wie weet helpt het je op weg.

Voor een deel, maar het werkt nog niet.
`nodo_tbl_sensor_data` heeft drie tabellen: sensor_id (dit zijn bij mij 881,882 en 883) data en timestamp.

Van iedere sensor wil ik netjes onder elkaar de laatste waarde laten zien, b.v.:

Temperatuur buiten (881): 10 graden C
Luchtvochtigheid (882): 45 %
Temperatuur binnen (883) 21 graden C
Mijn blog over de Nodo: http://www.fam-oldenburger.nl/wordpress/tag/nodo/

Nodo-Mega V3.6, Product=SWACNC-MEGA-R596|WebApp lokaal (SWINWA-PROD-V099)|DHT-22, Dallas DS18B20, WS-3500|
BazemanKM
 
Berichten: 44
Geregistreerd: 08 aug 2012, 09:49

Re: Gegevens uit database weergeven op website?

Berichtdoor rtenklooster » 20 dec 2013, 14:05

BazemanKM schreef:
rtenklooster schreef:Wie weet helpt het je op weg.

Voor een deel, maar het werkt nog niet.
`nodo_tbl_sensor_data` heeft drie tabellen: sensor_id (dit zijn bij mij 881,882 en 883) data en timestamp.


Dan word het dus order by `nodo_tbl_sensor_data`.`timestamp`
Laatst bijgewerkt door rtenklooster op 20 dec 2013, 14:28, in totaal 1 keer bewerkt.
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: Gegevens uit database weergeven op website?

Berichtdoor rtenklooster » 20 dec 2013, 14:21

Dus zoiets:
Code: Selecteer alles
$sensor_list = array("3","4","5");
dan dmv een foreach:

foreach($sensor_list as $sensor_id){
// Dan hier de query uitvoeren.
// Je wilt het laatste item hebben dus order by en limit.
$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1;
$result = mysql_query($query);

 while($obj = mysql_fetch_assoc($result)){
// Hier wijs je de variabele toe/      
$output[] = $obj[data];
   }
}
// Dit is je resultaat array:

print_r($data);
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: Gegevens uit database weergeven op website?

Berichtdoor BazemanKM » 20 dec 2013, 16:17

Het werkt nog niet, heb nu dit in een weer.php bestand:
Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("881","882","883");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1;
$result = mysql_query($query);

while($obj = mysql_fetch_assoc($result)){
$output[] = $obj[data];
   }
}

print_r($data);


?>

Wat gaat er nog mis?
Mijn blog over de Nodo: http://www.fam-oldenburger.nl/wordpress/tag/nodo/

Nodo-Mega V3.6, Product=SWACNC-MEGA-R596|WebApp lokaal (SWINWA-PROD-V099)|DHT-22, Dallas DS18B20, WS-3500|
BazemanKM
 
Berichten: 44
Geregistreerd: 08 aug 2012, 09:49

Re: Gegevens uit database weergeven op website?

Berichtdoor rtenklooster » 20 dec 2013, 16:34

Probeer dit eens:
BazemanKM schreef:
Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("881","882","883");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1";
$output = mysql_query($query);

while($obj = mysql_fetch_assoc($result)){
$output[] = $obj[data];
   }
}

print_r($output);
// Om het duidelijker te maken:
echo "<br>";
echo "De laatste sensorwaarde van sensor 1 is: ".$output[0]."<br>";
echo "De laatste sensorwaarde van sensor 2 is: ".$output[1]."<br>";
echo "De laatste sensorwaarde van sensor 3 is: ".$output[2]."<br>";

?>

Wat gaat er nog mis?


Welke foutmeldingen krijg je? Zo is het wat lastig helpen.

Edit: bovenstaande code even getest, en het werkt.
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: Gegevens uit database weergeven op website?

Berichtdoor rtenklooster » 20 dec 2013, 16:49

Kleine variatie om je nog verder op weg te helpen:
Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("881","882","883");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1";
$output = mysql_query($query);
while($obj = mysql_fetch_assoc($result)){
$output[] = array("timestamp" => $obj[timestamp], "data" =>$obj[data]);
   }
}

print_r($output);
echo "<br>";
// Om het duidelijker te maken:
echo "De laatste sensorwaarde van sensor 1 is voor het laatst geupdate op: ".$output[0]['timestamp']." en de waarde was: ".$output[0]['data']."<br>";
echo "De laatste sensorwaarde van sensor 2 is voor het laatst geupdate op: ".$output[1]['timestamp']." en de waarde was: ".$output[1]['data']."<br>";
echo "De laatste sensorwaarde van sensor 3 is voor het laatst geupdate op: ".$output[2]['timestamp']." en de waarde was: ".$output[2]['data']."<br>";
?>
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: Gegevens uit database weergeven op website?

Berichtdoor BazemanKM » 20 dec 2013, 17:17

Ik krijg geen foutmelding, eerst zag ik helemaal niets, nu slechts:

Resource id #4 (soms is hij ook 5)
De laatste sensorwaarde van sensor 1 is:
De laatste sensorwaarde van sensor 2 is:
De laatste sensorwaarde van sensor 3 is:
Mijn blog over de Nodo: http://www.fam-oldenburger.nl/wordpress/tag/nodo/

Nodo-Mega V3.6, Product=SWACNC-MEGA-R596|WebApp lokaal (SWINWA-PROD-V099)|DHT-22, Dallas DS18B20, WS-3500|
BazemanKM
 
Berichten: 44
Geregistreerd: 08 aug 2012, 09:49

Re: Gegevens uit database weergeven op website?

Berichtdoor rtenklooster » 20 dec 2013, 17:21

Okay, dan heb je error reporting laag / uit staan in php.ini.

Naja hierbij even mijn volledige scriptje. Je maakt je db connectie denk ik niet goed.

Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','password') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("3","5");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1";
$result = mysql_query($query) or die ("<b>A fatal MySQL error occured</b>.\n<br />Query: " . $query . "<br />\nError: (" . mysql_errno() . ") " . mysql_error());

while($obj = mysql_fetch_assoc($result)){
$output[] = array("timestamp" => $obj[timestamp], "data" =>$obj[data]);
   }
}

print_r($output);
// Om het duidelijker te maken:
echo "De laatste sensorwaarde van sensor 1 is voor het laatst geupdate op: ".$output[0]['timestamp']." en de waarde was: ".$output[0]['data']."<br>";
echo "De laatste sensorwaarde van sensor 2 is voor het laatst geupdate op: ".$output[1]['timestamp']." en de waarde was: ".$output[1]['data']."<br>";
echo "De laatste sensorwaarde van sensor 3 is voor het laatst geupdate op: ".$output[2]['timestamp']." en de waarde was: ".$output[2]['data']."<br>";


?>


Werkt hier 100%
Wellicht ten overvloede, maar je username en passw. zijn je db gegevens zoals ook in de webapp auth settings staan.

Edit: heb even mysql error reporting aan gezet in bovenstaande code.
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Volgende

Keer terug naar Nodo toepassingen

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers. en 2 gasten

cron