Advertisement
Halbheld

PHP Auswertung von Arduino Messwerten

Jul 17th, 2024
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.73 KB | None | 0 0
  1. <html><head><title>Brunnen F&uuml;llstand</title>
  2. <link rel="icon" href="/favicon.png" sizes="192x192">
  3. </head><body>
  4. <?php
  5.  
  6. $stats = $argv[1];
  7.  
  8. $ch = curl_init();
  9. curl_setopt($ch, CURLOPT_URL, "http://192.168.0.11/");
  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  11. $output = curl_exec($ch);
  12. curl_close($ch);
  13.  
  14. $outputs = explode("\n",$output);
  15.  
  16. // Median statt Mittelwert
  17. unset($outputs[0]);
  18. unset($outputs[11]);
  19. unset($outputs[12]);
  20. $outputs[0] = $outputs[10];
  21. unset($outputs[10]);
  22.  
  23. sort($outputs, SORT_NUMERIC);
  24.  
  25. $output = round(calculate_median($outputs));
  26. // Median statt Mittelwert
  27.  
  28.  
  29. // Sensor liefert 10 Werte, Mittelwert
  30. //$mittelwert=0;
  31. //for ($i=1;$i<=10;$i++) {
  32. //  $mittelwert = $mittelwert + $outputs[$i];
  33. //  }
  34. //$output = round($mittelwert / 10);
  35.  
  36. //Sensor liefert nur einen Wert
  37. //$output = preg_replace("/[^0-9]/","",$output);
  38.  
  39. echo "Signallaufzeit: $output µs<br>";
  40.  
  41. //Als "Brunnen ist voll" definieren wir eine Laufzeit von 6600.
  42. $voll = 6600;
  43. //Leer am 27.5.2017 bei 10270
  44. $leer = 10270;
  45.  
  46. date_default_timezone_set("Europe/Berlin");
  47. $timestamp = time();
  48. $zeit = date("Y-m-d H:i:s",$timestamp);
  49. $monat = date("m",$timestamp);
  50.  
  51. $file  = "/volume1/web/data/brunnen_$monat.csv";
  52.  
  53. if ($stats == "") {
  54.     $entfernung = round(laufzeitzuabstand($output),1);;
  55.     echo "Abstand Sensor zu Wasseroberfl&auml;che: $entfernung cm";
  56.    
  57.     $prozent =  round ( -1 * ( ($output - $leer) / ($leer - $voll) * 100),0);
  58.    
  59.     echo "<h2>Füllstand Brunnen: $prozent %</h2>";
  60.    
  61.     echo "Die letzten 48 Stunden aus <a href=\"data/brunnen_$monat.csv\">brunnen_$monat.csv</a>:<br>";
  62.    
  63.     // die letzten 48 Stunden
  64.     $anzahl = 192;
  65.     $tail = $anzahl+1;
  66.     $content = `tail -n $tail $file`;
  67.     $lines = explode("\n",$content);
  68.  
  69.     echo "<img src=\"/data/greendot.png\" title=\"Voll\" width=\"4\" height=\"".laufzeitzuhoehe($voll)."\" border=\"0\">";
  70.    
  71.     for ($i=0;$i<=$anzahl;$i++) {
  72.    
  73.         $data = explode(",",$lines[$i]);
  74.         //$entfernung = round(laufzeitzuabstand($data[1]),1);
  75.        
  76.         $prozente =  round ( -1 * ( ($data[1] - $leer) / ($leer - $voll) * 100),0);
  77.        
  78.         // Mitternacht in einer anderen Farbe
  79.         if (strpos($data[0], ' 00:0') !== false) $color = "navydot"; else $color = "bluedot";
  80.        
  81.         echo "<img src=\"/data/$color.png\" title=\"$data[0]: $prozente %\" width=\"4\" height=\"".laufzeitzuhoehe($data[1])."\" border=\"0\">";
  82.        
  83.         // Ersten Wert merken zum ausgeben
  84.         if ($i == 0) {$erster = $data[0];}
  85.     }
  86.     // den aktuellen Messwert hellblau anhängen
  87.     $entfernung = laufzeitzuabstand($output);
  88.     echo "<img src=\"/data/lightdot.png\" title=\"Aktuell: $prozent %\" width=\"4\" height=\"".laufzeitzuhoehe($output)."\" border=\"0\">";
  89.     echo "<br>";
  90.     echo "$erster";
  91.     }
  92. else
  93.     {
  94.     // Logging
  95.  
  96.     // Ist die Datei älter als ein Monat? Trifft also auf 1 Jahr alte Logfiles zu.
  97.     $age = $timestamp - filemtime($file);
  98.     if ($age > 2592000) {
  99.         `echo -n > $file`;
  100.         }
  101.    
  102.     $datei = fopen($file,"a");
  103.     fwrite($datei, "$zeit,$output\n");
  104.     fclose($datei);
  105. }
  106.  
  107.  
  108.  
  109. function laufzeitzuhoehe($laufzeit) {
  110.     $hoehe = $laufzeit - $voll;
  111.     $hoehe = $hoehe / 80;
  112.     $hoehe = 130 - $hoehe;
  113.     if ($hoehe >= 130) {$hoehe = 1;}
  114.     $hoehe = round($hoehe * 2);
  115.     return $hoehe;
  116. }
  117.  
  118. function laufzeitzuabstand($laufzeit) {
  119.     return($laufzeit / 2 * 0.03432);
  120. }
  121.  
  122. function calculate_median($arr) {
  123.     $count = count($arr); //total numbers in array
  124.     $middleval = floor(($count-1)/2); // find the middle value, or the lowest middle value
  125.     if($count % 2) { // odd number, middle is the median
  126.         $median = $arr[$middleval];
  127.     } else { // even number, calculate avg of 2 medians
  128.         $low = $arr[$middleval];
  129.         $high = $arr[$middleval+1];
  130.         $median = (($low+$high)/2);
  131.     }
  132.     return $median;
  133. }
  134.  
  135. ?>
  136. </body>
  137. </html>
  138.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement