poll_HV_data.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. // include channel list
  3. $adeiChannel = array(
  4. // Voltage monitoring K35 etc. (index 30)
  5. array(
  6. "hv__katrin-hv_rep__7__2", //K35 divided voltage reading
  7. "hv__katrin-hv_rep__7__5", //K65 divided voltage reading
  8. "hv__katrin-hv_rep__7__3", //K35 divided voltage timestamp
  9. "hv__katrin-hv_rep__7__6", //K65 divided voltage timestamp
  10. )
  11. );
  12. // include previous values
  13. //include "ADEI_HV_readings.php";
  14. $username = getenv('PHP_ADEI_USERNAME');
  15. $password = getenv('PHP_ADEI_PASSWORD');
  16. $context = stream_context_create(array(
  17. 'http' => array(
  18. 'header' => "Authorization: Basic " . base64_encode("$username:$password") ,
  19. "Connection: close\r\n"
  20. )
  21. ));
  22. // set time zone to local German time
  23. date_default_timezone_set('Europe/Berlin');
  24. sleep(2);
  25. $counter = 0;
  26. $calltime = time();
  27. $errorcount = 0;
  28. $errormessage = '<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>';
  29. $starttime = $calltime;
  30. $n = 0;
  31. //echo "started ".date("r", $starttime).PHP_EOL;
  32. // do {
  33. $n++;
  34. $currenttime = time();
  35. $delaytime = 10 - ($currenttime % 10);
  36. sleep($delaytime);
  37. // echo "start polling ".time().PHP_EOL;
  38. //echo "Polling ADEI data.".PHP_EOL;
  39. for ($id = 0;$id < sizeof($adeiChannel);$id++) {
  40. $adeiChannels = "";
  41. for ($id2 = 0;$id2 < sizeof($adeiChannel[$id]);$id2++) {
  42. $adeiChannels = $adeiChannels . $adeiChannel[$id][$id2] . ",";
  43. }
  44. $adeiChannels = substr($adeiChannels, 0, strlen($adeiChannels) - 1);
  45. // new adei-katrin.kaas.kit.edu added and optimized readout parameters
  46. $fileip = file_get_contents("https://adei-katrin.kaas.kit.edu/adei/services/getdata.php?db_server=virtual&db_name=srctree&db_group=-3&control_group=-3&virtual=srctree&srctree=" . $adeiChannels . "&rt=full&window=400&format=csv", false, $context);
  47. sleep(1);
  48. //echo $fileip.PHP_EOL;
  49. $adeiArray = explode("\n", $fileip);
  50. //convert ADEI response into array with all values
  51. $oldTS1 = 0;
  52. $oldTS2 = 0;
  53. $readings1 = array();
  54. $readings2 = array();
  55. foreach ($adeiArray as $key => $element) {
  56. $adeiLine = explode(",", $element);
  57. //echo $key." ".sizeof($adeiLine).PHP_EOL;
  58. if (sizeof($adeiLine) == 5) {
  59. $voltage = floatval($adeiLine[1]);
  60. $voltageTS = floatval($adeiLine[3]);
  61. if (($voltageTS > 0) && ($voltageTS > $oldTS1)) {
  62. $readings1[] = array(
  63. $voltageTS,
  64. $voltage
  65. );
  66. $oldTS1 = $voltageTS;
  67. }
  68. $voltage = floatval($adeiLine[2]);
  69. $voltageTS = floatval($adeiLine[4]);
  70. if (($voltageTS > 0) && ($voltageTS > $oldTS2)) {
  71. $readings2[] = array(
  72. $voltageTS,
  73. $voltage
  74. );
  75. $oldTS2 = $voltageTS;
  76. }
  77. }
  78. }
  79. unset($element);
  80. // filter and extract FlukeA values and calculate mean and deviations for a set of entries
  81. $index = array(-5, -10, -30, -150, -300);
  82. foreach ($index as $slice) {
  83. if (sizeof($readings1) > abs($slice)) {
  84. $arrayslice = array_slice($readings1, $slice);
  85. $entries = count($arrayslice);
  86. if ($entries > 2) {
  87. $voltages = array_column($arrayslice, 1);
  88. $mean = array_sum($voltages) / $entries;
  89. $carry = 0.0;
  90. foreach ($voltages as $val) {
  91. $d = ((double)$val) - $mean;
  92. $carry += $d * $d;
  93. }
  94. }
  95. $mean1 = $mean;
  96. $stddev1 = sqrt($carry / $entries);
  97. $stddev1_rel = $stddev1 / abs($mean1);
  98. $endTS = $arrayslice[sizeof($arrayslice) - 1][0];
  99. $span = round($endTS - $arrayslice[0][0]);
  100. $time_conversion_factor = 2082844800;
  101. //echo "Number of aquired elements: ".sizeof($arrayslice).PHP_EOL;
  102. //echo "Mean Value: ".sprintf('%.6F', $mean1).PHP_EOL;
  103. //echo "Standard Deviation: ".sprintf('%.2E', $stddev1).PHP_EOL;
  104. //echo "Rel. Standard Deviation: ".sprintf('%.2E', $stddev1_rel).PHP_EOL;
  105. //echo "TS at end: ".date("r", $endTS-$time_conversion_factor).PHP_EOL;
  106. //echo "Timespan: ".$span.PHP_EOL;
  107. //echo PHP_EOL;
  108. $results1[] = array(
  109. "number" => sizeof($arrayslice) ,
  110. "timespan" => $span,
  111. "timestamp" => $endTS - $time_conversion_factor,
  112. "humantime" => date("r", $endTS - $time_conversion_factor) ,
  113. "mean" => $mean1,
  114. "stddev" => $stddev1,
  115. "ppmdev" => $stddev1_rel
  116. );
  117. }
  118. }
  119. // filter and extract FlukeE values and calculate mean and deviations for a set of entries
  120. $index = array(-5, -10, -30, -150, -300);
  121. foreach ($index as $slice) {
  122. if (sizeof($readings2) > abs($slice)) {
  123. $arrayslice = array_slice($readings2, $slice);
  124. $entries = count($arrayslice);
  125. if ($entries > 2) {
  126. $voltages = array_column($arrayslice, 1);
  127. $mean = array_sum($voltages) / $entries;
  128. $carry = 0.0;
  129. foreach ($voltages as $val) {
  130. $d = ((double)$val) - $mean;
  131. $carry += $d * $d;
  132. }
  133. }
  134. $mean2 = $mean;
  135. $stddev2 = sqrt($carry / $entries);
  136. $stddev2_rel = $stddev2 / abs($mean2);
  137. $endTS = $arrayslice[sizeof($arrayslice) - 1][0];
  138. $span = round($endTS - $arrayslice[0][0]);
  139. $time_conversion_factor = 2082844800;
  140. //echo "Number of aquired elements: ".sizeof($arrayslice).PHP_EOL;
  141. //echo "Mean Value: ".sprintf('%.6F', $mean2).PHP_EOL;
  142. //echo "Standard Deviation: ".sprintf('%.2E', $stddev2).PHP_EOL;
  143. //echo "Rel. Standard Deviation: ".sprintf('%.2E', $stddev2_rel).PHP_EOL;
  144. //echo "TS at end: ".date("r", $endTS-$time_conversion_factor).PHP_EOL;
  145. //echo "Timespan: ".$span.PHP_EOL;
  146. //echo PHP_EOL;
  147. $results2[] = array(
  148. "number" => sizeof($arrayslice) ,
  149. "timespan" => $span,
  150. "timestamp" => $endTS - $time_conversion_factor,
  151. "humantime" => date("r", $endTS - $time_conversion_factor) ,
  152. "mean" => $mean2,
  153. "stddev" => $stddev2,
  154. "ppmdev" => $stddev2_rel
  155. );
  156. }
  157. }
  158. //var_dump( $results2 );
  159. //var_dump( $results1 );
  160. // error handling
  161. if (substr($fileip, 0, 5) == "ERROR") {
  162. $errorcount++;
  163. $errormessage = $errormessage . "Error loading ADEI channel " . $id . "<br>";
  164. }
  165. for ($id2 = sizeof($adeiChannel[$id]) - 1;$id2 > - 1;$id2--) {
  166. $pos = strrpos($fileip, ",");
  167. $adeiValue[$id][$id2] = floatval(substr($fileip, $pos + 2));
  168. $fileip = substr($fileip, 0, $pos);
  169. //echo $id . " " . $id2 . " " . $adeiValue[$id][$id2] . PHP_EOL;
  170. }
  171. }
  172. if ($errorcount > 0) echo $errormessage;
  173. //echo "Writing data into formatted string.".PHP_EOL;
  174. $strFileContent = "<"."?php".PHP_EOL.PHP_EOL."$"."REU0201 = ".var_export($results1, true).";".PHP_EOL.PHP_EOL;
  175. $strFileContent .= "$"."REU0301 = ".var_export($results2, true).";".PHP_EOL.PHP_EOL;
  176. $strFileContent .= "$"."extraction_time_HV = '". date(DATE_RFC850) ."';".PHP_EOL.PHP_EOL;
  177. $strFileContent .= "?".">".PHP_EOL;
  178. // write ADEI data to file
  179. //echo "Writing data to file.".PHP_EOL;
  180. $file_w = fopen('ADEI_HV_readings.php', 'w+');
  181. sleep(1);
  182. fwrite($file_w, $strFileContent);
  183. fclose($file_w);
  184. //echo $strFileContent.PHP_EOL;
  185. //echo $n." ".time().PHP_EOL;
  186. // }
  187. // while (time() < $starttime + 50);
  188. //echo "stopped".date("r", time()).PHP_EOL;
  189. //echo "Data extraction done.".PHP_EOL;
  190. ?>