99_RpiUtils.pm 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. ##############################################
  2. # $Id: 99_RpiUtils.pm $
  3. #
  4. # Module by Jörg Wiemann
  5. # Corrections by Prof. Dr. Peter A. Henning
  6. package main;
  7. use strict;
  8. use warnings;
  9. use POSIX;
  10. sub
  11. RpiUtils_Initialize($$)
  12. {
  13. my ($hash) = @_;
  14. }
  15. sub
  16. ShowRpiValues ()
  17. {
  18. my @RamValues = RpiRamSwap("I");
  19. my %RpiValues =
  20. (
  21. "1. CPUTemperature" => RpiTemp("I").' Grad',
  22. "2. CPUSpeed" => RpiCPUSpeed().' MHz',
  23. "3. UpTime" => RpiUpTime(),
  24. "4. RAM" => $RamValues[0],
  25. "5. Swap" => $RamValues[1],
  26. "6. FileSystem" => RpiFileSystem("I"),
  27. "7. Ethernet" => RpiNetwork("I"),
  28. );
  29. my $tag;
  30. my $value;
  31. my $div_class="";
  32. my $htmlcode = '<div class="'.$div_class."\"><table>\n";
  33. foreach $tag (sort keys %RpiValues)
  34. {
  35. $htmlcode .= "<tr><td valign='top'>$tag : </td><td>$RpiValues{$tag}</td></tr>\n";
  36. }
  37. $htmlcode .= "<tr><td></td></tr>\n";
  38. $htmlcode .= "</table></div><br>";
  39. $htmlcode .= "--------------------------------------------------------------------------";
  40. return $htmlcode;
  41. }
  42. sub
  43. RpiUpTime ()
  44. {
  45. my @uptime = split(/ /, qx(cat /proc/uptime));
  46. my $seconds = $uptime[0];
  47. my $y = floor($seconds / 60/60/24/365);
  48. my $d = floor($seconds/60/60/24) % 365;
  49. my $h = floor(($seconds / 3600) % 24);
  50. my $m = floor(($seconds / 60) % 60);
  51. my $s = $seconds % 60;
  52. my $string = '';
  53. if($y > 0)
  54. {
  55. my $yw = $y > 1 ? ' Jahre ' : ' Jahr ';
  56. $string .= $y . $yw . '<br>';
  57. }
  58. if($d > 0)
  59. {
  60. my $dw = $d > 1 ? ' Tage ' : ' Tag ';
  61. $string .= $d . $dw . '<br>';
  62. }
  63. if($h > 0)
  64. {
  65. my $hw = $h > 1 ? ' Stunden ' : ' Stunde ';
  66. $string .= $h . $hw. '<br>';
  67. }
  68. if($m > 0)
  69. {
  70. my $mw = $m > 1 ? ' Minuten ' : ' Minute ';
  71. $string .= $m . $mw . '<br>';
  72. }
  73. if($s > 0)
  74. {
  75. my $sw = $s > 1 ? ' Sekunden ' : ' Sekunde ';
  76. $string .= $s . $sw . '<br>';
  77. }
  78. return $string;
  79. }
  80. sub
  81. RpiNetwork
  82. {
  83. my $Para = shift;
  84. my $network;
  85. my $dataThroughput = qx(ifconfig eth0 | grep RX\\ bytes);
  86. $dataThroughput =~ s/RX bytes://;
  87. $dataThroughput =~ s/TX bytes://;
  88. $dataThroughput = trim($dataThroughput);
  89. my @dataThroughput = split(/ /, $dataThroughput);
  90. my $rxRaw = $dataThroughput[0] / 1024 / 1024;
  91. my $txRaw = $dataThroughput[4] / 1024 / 1024;
  92. my $rx = sprintf ("%.2f", $rxRaw, 2);
  93. my $tx = sprintf ("%.2f", $txRaw, 2);
  94. my $totalRxTx = $rx + $tx;
  95. if($Para eq "I") {
  96. $network = "Received: " . $rx . " MB" . "<br>" . "Sent: " . $tx . " MB" . "<br>" . "Total: " . $totalRxTx . " MB";
  97. } else {
  98. $network = "R: " . $rx . " S: " . $tx . " T: " . $totalRxTx;
  99. }
  100. return $network;
  101. }
  102. sub
  103. RpiRamSwap
  104. {
  105. my $Para = shift;
  106. my $ram;
  107. my $swap;
  108. my $percentage;
  109. my @retvalues;
  110. my @speicher = qx(free);
  111. shift @speicher;
  112. my ($fs_desc, $total, $used, $free, $shared, $buffers, $cached) = split(/\s+/, trim($speicher[0]));
  113. shift @speicher;
  114. my ($fs_desc2, $total2, $used2, $free2, $shared2, $buffers2, $cached2) = split(/\s+/, trim($speicher[0]));
  115. if($fs_desc2 ne "Swap:"){
  116. shift @speicher;
  117. ($fs_desc2, $total2, $used2, $free2, $shared2, $buffers2, $cached2) = split(/\s+/, trim($speicher[0]));
  118. }
  119. $used = sprintf ("%.2f", $used / 1000);
  120. $buffers = sprintf ("%.2f", $buffers / 1000);
  121. $cached = sprintf ("%.2f", $cached / 1000);
  122. $total = sprintf ("%.2f", $total / 1000);
  123. $free = sprintf ("%.2f", $free / 1000);
  124. $used2 = sprintf ("%.2f", $used2 / 1000);
  125. $total2 = sprintf ("%.2f", $total2 / 1000);
  126. $free2 = sprintf ("%.2f", $free2 / 1000);
  127. if($Para eq "I") {
  128. $percentage = sprintf ("%.2f", (($used - $buffers - $cached) / $total * 100), 0);
  129. $ram = "RAM: " . $percentage . "%" . "<br>" . "Free: " . ($free + $buffers + $cached) . " MB" . "<br>" . "Used: " . ($used - $buffers - $cached) . " MB" . "<br>" . "Total: " . $total . " MB";
  130. push (@retvalues, $ram);
  131. $percentage = sprintf ("%.2f", ($used2 / $total2 * 100), 0);
  132. $swap = "Swap: " . $percentage . "%" . "<br>" . "Free: " . $free2 . " MB" . "<br>" . "Used: " . $used2 . " MB" . "<br>" . "Total: " . $total2 . " MB";
  133. push (@retvalues, $swap);
  134. return @retvalues;
  135. } elsif($Para eq "R") {
  136. $percentage = sprintf ("%.2f", (($used - $buffers - $cached) / $total * 100), 0);
  137. $ram = "R: " . $percentage . " F: " . ($free + $buffers + $cached) . " U: " . ($used - $buffers - $cached) . " T: " . $total;
  138. return $ram;
  139. } elsif($Para eq "S") {
  140. $percentage = sprintf ("%.2f", ($used2 / $total2 * 100), 0);
  141. $swap = "S: " . $percentage . " F: " . $free2 . " U: " . $used2 . " T: " . $total2 . " MB";
  142. return $swap;
  143. } else {
  144. return "Fehler";
  145. }
  146. return "Fehler";
  147. }
  148. sub
  149. RpiFileSystem
  150. {
  151. my $Para = shift;
  152. my $out;
  153. my @filesystems = qx(df /dev/root);
  154. shift @filesystems;
  155. my ($fs_desc, $all, $used, $avail, $fused) = split(/\s+/, $filesystems[0]);
  156. if($Para eq "I") {
  157. $out = "Groesse: ".sprintf ("%.2f", (($all)/1024))." MB <br>"."Benutzt: ".sprintf ("%.2f", (($used)/1024))." MB <br>"."Verfuegbar: ".sprintf ("%.2f", (($avail)/1024))." MB";
  158. } else {
  159. $out = "G: ".sprintf ("%.2f", (($all)/1024))." B: ".sprintf ("%.2f", (($used)/1024))." V: ".sprintf ("%.2f", (($avail)/1024));
  160. }
  161. return $out;
  162. }
  163. sub
  164. RpiCPUSpeed
  165. {
  166. my $CPUSpeed = qx(cat /proc/cpuinfo | grep "BogoMIPS" | sed 's/[^0-9\.]//g');
  167. return $CPUSpeed;
  168. }
  169. sub
  170. RpiTemp
  171. {
  172. my $Para = shift;
  173. my $Temperatur;
  174. if($Para eq "I") {
  175. $Temperatur = sprintf ("%.2f", qx(cat /sys/class/thermal/thermal_zone0/temp) / 1000);
  176. } else {
  177. $Temperatur = "T: ".sprintf ("%.2f", qx(cat /sys/class/thermal/thermal_zone0/temp) / 1000);
  178. }
  179. return $Temperatur;
  180. }
  181. 1;