99 RPiutils.pm

Begonnen von Miriel, 01 Januar 2014, 20:57:50

Vorheriges Thema - Nächstes Thema

Miriel

Hallo,

ich wollte nach dem FHEMWIKI das Modul benutzen jedoch erhalte ich im webfrontend dies

Undefined subroutine &main::ShowRPiValues called at (eval 748) line 1.

- ich habe die pm wie geschrieben in FHEM kopiert und die 2 Zeilen in das fhem.cfg File eingefügt

define system weblink htmlCode {ShowRPiValues()}
attr system room RASPI


wo liegt mein Fehler???

Miriel

sorry habe mal gegoogled :-) die Version in Contrib scheint nicht zu funktionieren.
Habe eine Version aus den Foren getestet und siehe da es funktioniert :-)

# $Id: 99_RPiUtils.pm 0001 2012-12-02 09:56:23Z JoWiemann $
##############################################
#
package main;

use strict;
use warnings;
use POSIX;

sub
RPiUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub
ShowRPiValues ()
{

   my @RamValues = RPiRamSwap("I");
   my %RpiValues =
   (
      "1. CPUTemperature" => RPiTemp("I").' Grad',
      "2. CPUSpeed" => RPiCPUSpeed().' MHz',
      "3. CPURessources" => RPiCPURess("I").'',
      "4. UpTime" => RPiUpTime(),
      "5. RAM" => $RamValues[0],
      "6. Swap" => $RamValues[1],
      "7. FileSystem" => RPiFileSystem("I"),
      "8. Ethernet" => RPiNetwork("I"),
   );

   my $tag;
   my $value;
   my $div_class="";

   my $htmlcode = '<div  class="'.$div_class."\"><table>\n";

   foreach $tag (sort keys %RpiValues)
   {
      $htmlcode .= "<tr><td valign='top'>$tag : </td><td>$RpiValues{$tag}</td></tr>\n";
   }

   $htmlcode .= "<tr><td></td></tr>\n";
   $htmlcode .= "</table></div><br>";
   $htmlcode .= "--------------------------------------------------------------------------";
   $htmlcode .= "<br><br><br>";
   
   return $htmlcode;
}

sub
RPiUpTime ()
{

   my @uptime = split(/ /, qx(cat /proc/uptime));
   my $seconds = $uptime[0];
   my $y = floor($seconds / 60/60/24/365);
   my $d = floor($seconds/60/60/24) % 365;
   my $h = floor(($seconds / 3600) % 24);
   my $m = floor(($seconds / 60) % 60);
   my $s = $seconds % 60;

   my $string = '';

   if($y > 0)
   {
      my $yw = $y > 1 ? ' Jahre ' : ' Jahr ';
      $string .= $y . $yw . '<br>';
   }

   if($d > 0)
   {
      my $dw = $d > 1 ? ' Tage ' : ' Tag ';
      $string .= $d . $dw . '<br>';
   }

   if($h > 0)
   {
      my $hw = $h > 1 ? ' Stunden ' : ' Stunde ';
      $string .= $h . $hw. '<br>';
   }

   if($m > 0)
   {
      my $mw = $m > 1 ? ' Minuten ' : ' Minute ';
      $string .= $m . $mw . '<br>';
   }

   if($s > 0)
   {
      my $sw = $s > 1 ? ' Sekunden ' : ' Sekunde ';
      $string .= $s . $sw . '<br>';
   }
   
   return $string;
}

sub
RPiNetwork
{

   my $Para = shift;
   my $network;

   my $dataThroughput = qx(ifconfig wlan0 | grep RX\\ bytes);
   $dataThroughput =~ s/RX bytes://;
   $dataThroughput =~ s/TX bytes://;
   $dataThroughput = trim($dataThroughput);

   my @dataThroughput = split(/ /, $dataThroughput);
   
   my $rxRaw = $dataThroughput[0] / 1024 / 1024;
   my $txRaw = $dataThroughput[4] / 1024 / 1024;
   my $rx = sprintf ("%.2f", $rxRaw, 2);
   my $tx = sprintf ("%.2f", $txRaw, 2);
   my $totalRxTx = $rx + $tx;

   if($Para eq "I") {
      $network = "Received: " . $rx . " MB" . "<br>" . "Sent: " . $tx . " MB" . "<br>" . "Total: " . $totalRxTx . " MB";
   } else {
      $network = "R: " . $rx . " S: " . $tx . " T: " . $totalRxTx;
   }
   
   return $network;
}

sub
RPiRamSwap
{
   my $Para = shift;
   my $ram;
   my $swap;
   my $percentage;
   my @retvalues;
   my @speicher = qx(free);
   shift @speicher;

   my ($fs_desc, $total, $used, $free, $shared, $buffers, $cached) = split(/\s+/, trim($speicher[0]));

   shift @speicher;
   my ($fs_desc2, $total2, $used2, $free2, $shared2, $buffers2, $cached2) = split(/\s+/, trim($speicher[0]));

   if($fs_desc2 ne "Swap:"){
      shift @speicher;
      ($fs_desc2, $total2, $used2, $free2, $shared2, $buffers2, $cached2) = split(/\s+/, trim($speicher[0]));
   }

   $used = sprintf ("%.2f", $used / 1000);
   $buffers = sprintf ("%.2f", $buffers / 1000);
   $cached = sprintf ("%.2f", $cached / 1000);
   $total = sprintf ("%.2f", $total / 1000);
   $free = sprintf ("%.2f", $free / 1000);

   $used2 = sprintf ("%.2f", $used2 / 1000);
   $total2 = sprintf ("%.2f", $total2 / 1000);
   $free2 = sprintf ("%.2f", $free2 / 1000);

   if($Para eq "I") {
      $percentage = sprintf ("%.2f", (($used - $buffers - $cached) / $total * 100), 0);
      $ram = "RAM: " . $percentage . "%" . "<br>" . "Free: " . ($free + $buffers + $cached) . " MB" . "<br>" . "Used: " . ($used - $buffers - $cached) . " MB" . "<br>" . "Total: " . $total . " MB";
      push (@retvalues, $ram);
   
      $percentage = sprintf ("%.2f", ($used2 / $total2 * 100), 0);
      $swap = "Swap: " . $percentage . "%" . "<br>" . "Free: " . $free2 . " MB" . "<br>" . "Used: " . $used2 . " MB" . "<br>" . "Total: " . $total2 . " MB";
      push (@retvalues, $swap);
      
      return @retvalues;

   } elsif($Para eq "R") {
         $percentage = sprintf ("%.2f", (($used - $buffers - $cached) / $total * 100), 0);
         $ram = "R: " . $percentage . " F: " . ($free + $buffers + $cached) . " U: " . ($used - $buffers - $cached) . " T: " . $total;
         return $ram;

   } elsif($Para eq "S") {
         $percentage = sprintf ("%.2f", ($used2 / $total2 * 100), 0);
         $swap = "S: " . $percentage . " F: " . $free2 . " U: " . $used2 . " T: " . $total2 . " MB";
         return $swap;
   } else {
      return "Fehler";
   }
   return "Fehler";
}

sub
RPiFileSystem
{

   my $Para = shift;
   my $out;
   my @filesystems = qx(df);

   shift @filesystems;
   my ($fs_desc, $all, $used, $avail, $fused) = split(/\s+/, $filesystems[0]);

   if($Para eq "I") {
      $out = "Groesse: ".sprintf ("%.2f", (($all)/1024))." MB <br>"."Benutzt: ".sprintf ("%.2f", (($used)/1024))." MB <br>"."Verfuegbar: ".sprintf ("%.2f", (($avail)/1024))." MB";
   } else {
      $out = "G: ".sprintf ("%.2f", (($all)/1024))." B: ".sprintf ("%.2f", (($used)/1024))." V: ".sprintf ("%.2f", (($avail)/1024));
   }

   return $out;
}

sub
RPiCPUSpeed
{
   
   my $CPUSpeed = qx(cat /proc/cpuinfo | grep "BogoMIPS" | sed 's/[^0-9\.]//g');
#      my $CPUSpeed = qx(sudo-u root cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq);

   return $CPUSpeed;

}

sub
RPiCPURess
{
   my $Para = shift;
   my $out;
   
   my @CPURes = qx(cat /proc/stat | grep "cpu");
       my ($CPU, $user, $nice, $system, $idle, $a) = split(/\s+/, $CPURes[0]);
       my $Prozent = (($idle * 100) / ($user + $nice + $system + $idle));
       

   if($Para eq "I") {
      $out = "User: ".sprintf ("%.0f", $user)." <br>"."Nice: ".sprintf ("%.0f", $nice)." <br>"."System: ".sprintf ("%.0f", $system)." <br>"."Idle: ".sprintf ("%.0f", $idle)." = ".sprintf ("%.2f", $Prozent)."% ";
   } else {
      $out = "U: ".sprintf ("%.0f", $user)." N: ".sprintf ("%.0f", $nice)." S: ".sprintf ("%.0f", $system)." I: ".sprintf ("%.0f", $idle)." P: ".sprintf ("%.2f", $Prozent);
   }

   return $out;
}

sub
RPiTemp
{
   my $Para = shift;
   my $Temperatur;

   if($Para eq "I") {
      $Temperatur = sprintf ("%.2f", qx(cat /sys/class/thermal/thermal_zone0/temp) / 1000);
   } else {
      $Temperatur = "T: ".sprintf ("%.2f", qx(cat /sys/class/thermal/thermal_zone0/temp) / 1000);
   }
   
   return $Temperatur;
}

sub
RPiRestart
{

   my $Para = shift;
   my $RetWert;

   if($Para eq "S") {
      $RetWert = qx(sudo shutdown -h now);
   } else {
      $RetWert = qx(sudo shutdown -r now);;
   }
   
   return $RetWert;
}

sub
RPi_Restart() {
  my ($cmd, @args) = ("/usr/bin/sudo", "shutdown", "-r", "now");
  system($cmd, @args) == 0 or die "Could not execute $cmd: $?";
}

1;

hexenmeister

Moin!
Dieses Modul habe ich mir auch mal angesehen. Da es mit nicht zugesagt hatte, habe ich ein neues geschrieben.

http://forum.fhem.de/index.php/topic,17201.0.html

Kann praktisch das gleiche, nur etwas bequemer.
Sorry für die (Eigen)Werbung ;)

Grüße,

Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy