hallo zusammen,
ich hänge hier seit zwei tagen an einem für mich unlösbarem problem..
ich würde gerne die werte aus einer datei gerne in meine mysql-db schreiben, wofür ich eigens ein php script geschrieben habe. das script funktioniert einwandfrei, wenn ich es im browser aufrufe.. sobald ich es jedoch als job im crontab anlege, wird nur der erste teil abgearbeitet.
hintergrund:
ich habe derzeit einen temperatursensor (ds18b20) und einen luftfeuchtigkeitssensor (dht22) an meinem raspi angeschlossen. für den dht22 habe ich den treiber von technion im einsatz (https://github.com/technion/lol_dht22). der abruf der daten funktioniert einwandfrei, muss allerdings die ausgabe in eine datei schreiben, damit ich es mit php auslesen kann.
die ausgabe landet bei mir derzeit in /var/www/data/gpio1.
hier das php-script:
<?php
require('inc/connect.php');
//Sammle Daten
//Datum
ini_set( 'date.timezone', 'Europe/Berlin' );
$date=date('Y-m-d H:i:s');
echo $date;
exec('sudo /lol_dht22/loldht 1 > /dht22log/gpio1');
//Sammle DS1820-Sensordaten
$sensor = scandir('/sys/devices/w1_bus_master1/'); //Ordner "files" auslesen
foreach ($sensor as $sn)
{ // Ausgabeschleife
//Ermittle ID des Sensors
$sql='select id, seriennummer from sensoren where seriennummer="'.$sn.'"';
$result=mysql_query($sql);
$data=mysql_fetch_array($result);
$id=$data['id'];
if(substr($sn, 0, 2)>0)
{
//Öffne Sensor-Datei
$datei = file_get_contents('/sys/devices/w1_bus_master1/'.$sn.'/w1_slave');
//Temperatur ausschneiden
$array_t=explode('t=', $datei);
$t=round($array_t[1]/1000, 1);
//CRC ausschneiden
$array_crc=explode('crc=', $datei);
$crc=substr($array_crc[1],0,2);
echo $crc;
//Status ausschneiden
$array_status=explode('crc=', $datei);
$status=substr($array_status[1],3,3);
echo $status;
//Schreibe in DB
mysql_query('insert into log (id_sensor, temperatur, datetime, crc, status) values ("'.$id.'", "'.$t.'", "'.$date.'", "'.$crc.'", "'.$status.'")');
}
}
//Sammle DHT22-Sensordaten
//GPIO 1
$datei = file_get_contents('/var/www/data/gpio1'); //Ordner "files" auslesen
//echo $datei;
//Temperatur ausschneiden
$array_t=explode('Temperature = ', $datei);
$t=round($array_t[1], 1);
//Humidity ausschneiden
$array_h=explode('Humidity = ', $datei);
$h=round($array_h[1], 1);
//Schreibe in DB, wenn Daten vorhanden
if($t>0 and $h>0)
{
mysql_query('insert into log (id_sensor, temperatur, datetime, humidity) values ("1", "'.$t.'", "'.$date.'", "'.$h.'" )');
}
?>
[/php]
die abruf der daten für den dht22 erfolgt über ein job im crontab:
[code]#Lese DHT22-Sensor aus
*/1 * * * * /lol_dht22/loldht 1 > /var/www/data/gpio1
Alles anzeigen
und gleich darunter wird diese datei ausgelesen:
er schreibt, wie gesagt, nur die daten vom ds18b22 in die datenbank und rührt sozusagen den teil vom dht22 gar nicht an..
mich verwundert es, dass es jedoch über browseraufruf problemlos funktioniert...
ich hoffe, ihr könnt mir helfen.
mfg
rob0r7
ok, hat sich erledigt.
problem war folgendes:
technisch habe ich im crontab festgelegt, dass die werte vom dht22 jede minute in eine datei geschrieben werden sollen..
wiederum habe ich festgelegt, dass diese datei jede minute auch ausgelesen werden soll.. dadurch , dass die datei im gleichen moment wo sie ausgelesen wurde auch beschrieben wurde, war sie , so denke ich, gesperrt, was dazu geführt hat, dass keine werte in die db gelegt werden konnten.