2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 10:46:53 +00:00

bugfix: another format for ifconfig output

git-svn-id: https://svn.fhem.de/fhem/trunk@4766 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
hexenmeister 2014-01-28 22:05:28 +00:00
parent 16f0871907
commit 23a965198e
2 changed files with 77 additions and 22 deletions

View File

@ -1,6 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- SVN - SVN
- bugfix: SYSMON: another format for ifconfig output
- feature: DASHBOARD: Use longpoll to update content. - feature: DASHBOARD: Use longpoll to update content.
rowcentercolwidth can now be defined per column. rowcentercolwidth can now be defined per column.
Dashboard can hide FHEMWEB Roomliste and Header => Fullsizemode. Dashboard can hide FHEMWEB Roomliste and Header => Fullsizemode.

View File

@ -30,7 +30,7 @@ package main;
use strict; use strict;
use warnings; use warnings;
my $VERSION = "1.3.3"; my $VERSION = "1.3.4";
use constant { use constant {
DATE => "date", DATE => "date",
@ -1040,18 +1040,45 @@ sub SYSMON_getNetworkInfo ($$$)
#my @dataThroughput = qx($cmd); #my @dataThroughput = qx($cmd);
my @dataThroughput = SYSMON_execute($hash, $cmd); my @dataThroughput = SYSMON_execute($hash, $cmd);
#Log 3, "SYSMON>>>>>>>>>>>>>>>>> ".$dataThroughput[0]; #Log 3, "SYSMON>>>>>>>>>>>>>>>>> ".$dataThroughput[0];
#--- DEBUG ---
if($device eq "_test_") {
@dataThroughput = (
"enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1492",
" inet 192.168.2.7 netmask 255.255.255.0 broadcast 192.168.2.255",
" ether 00:21:85:5a:0d:e0 txqueuelen 1000 (Ethernet)",
" RX packets 1553313 bytes 651891540 (621.6 MiB)",
" RX errors 0 dropped 0 overruns 0 frame 0",
" TX packets 1915387 bytes 587386206 (560.1 MiB)",
" TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0");
}
#--- DEBUG ---
# check if network available # check if network available
if (index($dataThroughput[0], 'Fehler') < 0 && index($dataThroughput[0], 'error') < 0) if (index($dataThroughput[0], 'Fehler') < 0 && index($dataThroughput[0], 'error') < 0)
{ {
#Log 3, "SYSMON>>>>>>>>>>>>>>>>> OK >>>".$dataThroughput[0]; #Log 3, "SYSMON>>>>>>>>>>>>>>>>> OK >>>".$dataThroughput[0];
my $dataThroughput = undef; my $dataThroughput = undef;
# Suche nach der Daten in Form:
# eth0 Link encap:Ethernet Hardware Adresse b8:27:eb:a5:e0:85
# inet Adresse:192.168.0.10 Bcast:192.168.0.255 Maske:255.255.255.0
# UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
# RX packets:339826 errors:0 dropped:45 overruns:0 frame:0
# TX packets:533293 errors:0 dropped:0 overruns:0 carrier:0
# Kollisionen:0 Sendewarteschlangenlänge:1000
# RX bytes:25517384 (24.3 MiB) TX bytes:683970999 (652.2 MiB)
foreach (@dataThroughput) { foreach (@dataThroughput) {
if(index($_, 'RX bytes') >= 0) { if(index($_, 'RX bytes') >= 0) {
$dataThroughput = $_; $dataThroughput = $_;
last;
} }
} }
my $rxRaw = -1;
my $txRaw = -1;
if(defined $dataThroughput) { if(defined $dataThroughput) {
# remove RX bytes or TX bytes from string # remove RX bytes or TX bytes from string
$dataThroughput =~ s/RX bytes://; $dataThroughput =~ s/RX bytes://;
@ -1059,30 +1086,57 @@ sub SYSMON_getNetworkInfo ($$$)
$dataThroughput = trim($dataThroughput); $dataThroughput = trim($dataThroughput);
@dataThroughput = split(/ /, $dataThroughput); # return of split is array @dataThroughput = split(/ /, $dataThroughput); # return of split is array
$rxRaw = $dataThroughput[0] if(defined $dataThroughput[0]);
$txRaw = $dataThroughput[4] if(defined $dataThroughput[4]);
} else {
#
# an manchen Systemen kann die Ausgabe leider auch anders aussehen:
# enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1492
# inet 192.168.2.7 netmask 255.255.255.0 broadcast 192.168.2.255
# ether 00:21:85:5a:0d:e0 txqueuelen 1000 (Ethernet)
# RX packets 1553313 bytes 651891540 (621.6 MiB)
# RX errors 0 dropped 0 overruns 0 frame 0
# TX packets 1915387 bytes 587386206 (560.1 MiB)
# TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#
my $d;
foreach $d (@dataThroughput) {
if($d =~ m/RX\s.*\sbytes\s(\d*)\s/) {
$rxRaw = $1;
}
if($d =~ m/TX\s.*\sbytes\s(\d*)\s/) {
$txRaw = $1;
}
}
} }
if($rxRaw<0) {
# Daten nicht gefunden / Format unbekannt
$map->{$nName} = "unexpected format";
$map->{$nName.DIFF_SUFFIX} = "unexpected format";
} else {
$rxRaw = $rxRaw / 1048576; # Bytes in MB
$txRaw = $txRaw / 1048576;
my $rx = sprintf ("%.2f", $rxRaw);
my $tx = sprintf ("%.2f", $txRaw);
my $totalRxTx = $rx + $tx;
my $rxRaw = 0; my $out_txt = "RX: ".$rx." MB, TX: ".$tx." MB, Total: ".$totalRxTx." MB";
$rxRaw = $dataThroughput[0] / 1024 / 1024 if(defined $dataThroughput[0]); $map->{$nName} = $out_txt;
my $txRaw = 0;
$txRaw = $dataThroughput[4] / 1024 / 1024 if(defined $dataThroughput[4]);
my $rx = sprintf ("%.2f", $rxRaw);
my $tx = sprintf ("%.2f", $txRaw);
my $totalRxTx = $rx + $tx;
my $out_txt = "RX: ".$rx." MB, TX: ".$tx." MB, Total: ".$totalRxTx." MB"; my $lastVal = ReadingsVal($hash->{NAME},$device,"RX: 0 MB, TX: 0 MB, Total: 0 MB");
$map->{$nName} = $out_txt; my ($d0, $o_rx, $d1, $d2, $o_tx, $d3, $d4, $o_tt, $d5) = split(/\s+/, trim($lastVal));
my $lastVal = ReadingsVal($hash->{NAME},$device,"RX: 0 MB, TX: 0 MB, Total: 0 MB"); my $d_rx = $rx-$o_rx;
my ($d0, $o_rx, $d1, $d2, $o_tx, $d3, $d4, $o_tt, $d5) = split(/\s+/, trim($lastVal)); if($d_rx<0) {$d_rx=0;}
my $d_tx = $tx-$o_tx;
my $d_rx = $rx-$o_rx; if($d_tx<0) {$d_tx=0;}
if($d_rx<0) {$d_rx=0;} my $d_tt = $totalRxTx-$o_tt;
my $d_tx = $tx-$o_tx; if($d_tt<0) {$d_tt=0;}
if($d_tx<0) {$d_tx=0;} my $out_txt_diff = "RX: ".sprintf ("%.2f", $d_rx)." MB, TX: ".sprintf ("%.2f", $d_tx)." MB, Total: ".sprintf ("%.2f", $d_tt)." MB";
my $d_tt = $totalRxTx-$o_tt; $map->{$nName.DIFF_SUFFIX} = $out_txt_diff;
if($d_tt<0) {$d_tt=0;} }
my $out_txt_diff = "RX: ".sprintf ("%.2f", $d_rx)." MB, TX: ".sprintf ("%.2f", $d_tx)." MB, Total: ".sprintf ("%.2f", $d_tt)." MB";
$map->{$nName.DIFF_SUFFIX} = $out_txt_diff;
} else { } else {
#Log 3, "SYSMON>>>>>>>>>>>>>>>>> NOK "; #Log 3, "SYSMON>>>>>>>>>>>>>>>>> NOK ";
#Log 3, "SYSMON>>>>>>>>>>>>>>>>> >>> ".$nName; #Log 3, "SYSMON>>>>>>>>>>>>>>>>> >>> ".$nName;