mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 23:06:37 +00:00
many FritzBox specific readings:
wlan_state, wlan_guest_state, internet_ip, internet_state, night_time_ctrl, num_new_messages, fw_version_info git-svn-id: https://svn.fhem.de/fhem/trunk@5618 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
09af1d3d78
commit
c82c81f514
@ -30,7 +30,7 @@ package main;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
my $VERSION = "1.3.8";
|
my $VERSION = "1.4.0";
|
||||||
|
|
||||||
use constant {
|
use constant {
|
||||||
DATE => "date",
|
DATE => "date",
|
||||||
@ -58,7 +58,14 @@ use constant {
|
|||||||
use constant {
|
use constant {
|
||||||
ETH0 => "eth0",
|
ETH0 => "eth0",
|
||||||
WLAN0 => "wlan0",
|
WLAN0 => "wlan0",
|
||||||
DIFF_SUFFIX => "_diff"
|
DIFF_SUFFIX => "_diff",
|
||||||
|
FB_WLAN_STATE => "wlan_state",
|
||||||
|
FB_WLAN_GUEST_STATE => "wlan_guest_state",
|
||||||
|
FB_INET_IP => "internet_ip",
|
||||||
|
FB_INET_STATE => "internet_state",
|
||||||
|
FB_N_TIME_CTRL => "night_time_ctrl",
|
||||||
|
FB_NUM_NEW_MESSAGES => "num_new_messages",
|
||||||
|
FB_FW_VERSION => "fw_version_info",
|
||||||
};
|
};
|
||||||
|
|
||||||
use constant FS_PREFIX => "~ ";
|
use constant FS_PREFIX => "~ ";
|
||||||
@ -275,6 +282,7 @@ SYSMON_updateCurrentReadingsMap($) {
|
|||||||
$nName = "vdsl";
|
$nName = "vdsl";
|
||||||
$rMap->{$nName} = "Network adapter ".$nName;
|
$rMap->{$nName} = "Network adapter ".$nName;
|
||||||
$rMap->{$nName."_diff"} = "Network adapter ".$nName." (diff)";
|
$rMap->{$nName."_diff"} = "Network adapter ".$nName." (diff)";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $nName = ETH0;
|
my $nName = ETH0;
|
||||||
$rMap->{$nName} = "Network adapter ".$nName;
|
$rMap->{$nName} = "Network adapter ".$nName;
|
||||||
@ -285,7 +293,18 @@ SYSMON_updateCurrentReadingsMap($) {
|
|||||||
$rMap->{$nName."_diff"} = "Network adapter ".$nName." (diff)";
|
$rMap->{$nName."_diff"} = "Network adapter ".$nName." (diff)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(SYSMON_isFB($hash)) {
|
||||||
|
# FB WLAN state
|
||||||
|
$rMap->{+FB_WLAN_STATE} = "WLAN State";
|
||||||
|
$rMap->{+FB_WLAN_GUEST_STATE} = "WLAN Guest State";
|
||||||
|
$rMap->{+FB_INET_IP} = "Internet IP";
|
||||||
|
$rMap->{+FB_INET_STATE} = "Internet connection state";
|
||||||
|
$rMap->{+FB_N_TIME_CTRL} = "night time control";
|
||||||
|
$rMap->{+FB_NUM_NEW_MESSAGES} = "new messages";
|
||||||
|
$rMap->{+FB_FW_VERSION} = "firmware info";
|
||||||
|
}
|
||||||
|
|
||||||
# User defined
|
# User defined
|
||||||
my $userdefined = AttrVal($name, "user-defined", undef);
|
my $userdefined = AttrVal($name, "user-defined", undef);
|
||||||
if(defined $userdefined) {
|
if(defined $userdefined) {
|
||||||
@ -515,13 +534,17 @@ SYSMON_Update($@)
|
|||||||
} else {
|
} else {
|
||||||
# Beim ersten mal alles aktualisieren!
|
# Beim ersten mal alles aktualisieren!
|
||||||
if(!$u_first_mark) {
|
if(!$u_first_mark) {
|
||||||
$u_first_mark = 1;
|
|
||||||
$refresh_all = 1;
|
$refresh_all = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Parameter holen
|
# Parameter holen
|
||||||
my $map = SYSMON_obtainParameters($hash, $refresh_all);
|
my $map = SYSMON_obtainParameters($hash, $refresh_all);
|
||||||
|
|
||||||
|
# Mark setzen
|
||||||
|
if(!$u_first_mark) {
|
||||||
|
$u_first_mark = 1;
|
||||||
|
}
|
||||||
|
|
||||||
$hash->{STATE} = "Active";
|
$hash->{STATE} = "Active";
|
||||||
#my $state = $map->{LOADAVG};
|
#my $state = $map->{LOADAVG};
|
||||||
#readingsBulkUpdate($hash,"state",$state);
|
#readingsBulkUpdate($hash,"state",$state);
|
||||||
@ -543,7 +566,7 @@ SYSMON_Update($@)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
readingsEndUpdate($hash,defined($hash->{LOCAL} ? 0 : 1));
|
readingsEndUpdate($hash,defined($hash->{LOCAL}) ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
@ -564,10 +587,16 @@ SYSMON_obtainParameters($$)
|
|||||||
|
|
||||||
my $ref = int(time()/$base);
|
my $ref = int(time()/$base);
|
||||||
my ($m1, $m2, $m3, $m4) = split(/\s+/, $im);
|
my ($m1, $m2, $m3, $m4) = split(/\s+/, $im);
|
||||||
|
|
||||||
# Einmaliges
|
# Einmaliges
|
||||||
$map = SYSMON_getCPUBogoMIPS($hash, $map);
|
if(!$u_first_mark) {
|
||||||
|
$map = SYSMON_getCPUBogoMIPS($hash, $map);
|
||||||
|
|
||||||
|
if(SYSMON_isFB($hash)) {
|
||||||
|
$map = SYSMON_FBVersionInfo($hash, $map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# immer aktualisieren: uptime, uptime_text, fhemuptime, fhemuptime_text, idletime, idletime_text
|
# immer aktualisieren: uptime, uptime_text, fhemuptime, fhemuptime_text, idletime, idletime_text
|
||||||
$map = SYSMON_getUptime($hash, $map);
|
$map = SYSMON_getUptime($hash, $map);
|
||||||
$map = SYSMON_getFHEMUptime($hash, $map);
|
$map = SYSMON_getFHEMUptime($hash, $map);
|
||||||
@ -599,7 +628,7 @@ SYSMON_obtainParameters($$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($m3 gt 0) { # Nur wenn > 0
|
if($m3 gt 0) { # Nur wenn > 0
|
||||||
# M3: eth0, eth0_diff, wlan0, wlan0_diff
|
# M3: eth0, eth0_diff, wlan0, wlan0_diff, wlan_on (FritzBox)
|
||||||
my $update_ns = ($refresh_all || ($ref % $m3) eq 0);
|
my $update_ns = ($refresh_all || ($ref % $m3) eq 0);
|
||||||
#if($refresh_all || ($ref % $m3) eq 0) {
|
#if($refresh_all || ($ref % $m3) eq 0) {
|
||||||
my $networks = AttrVal($name, "network-interfaces", undef);
|
my $networks = AttrVal($name, "network-interfaces", undef);
|
||||||
@ -631,6 +660,14 @@ SYSMON_obtainParameters($$)
|
|||||||
#Log 3, "SYSMON>>>>>>>>>>>>>>>>>>>>>>>>> ".$map->{+WLAN0};
|
#Log 3, "SYSMON>>>>>>>>>>>>>>>>>>>>>>>>> ".$map->{+WLAN0};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(SYSMON_isFB($hash)) {
|
||||||
|
$map = SYSMON_getFBWLANState($hash, $map);
|
||||||
|
$map = SYSMON_getFBWLANGuestState($hash, $map);
|
||||||
|
$map = SYSMON_getFBInetIP($hash, $map);
|
||||||
|
$map = SYSMON_getFBInetConnectionState($hash, $map);
|
||||||
|
$map = SYSMON_getFBNightTimeControl($hash, $map);
|
||||||
|
$map = SYSMON_getFBNumNewMessages($hash, $map);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -963,7 +1000,9 @@ SYSMON_getDiskStat_intern($$$)
|
|||||||
}
|
}
|
||||||
#$map->{"iostat_test"}="TEST";
|
#$map->{"iostat_test"}="TEST";
|
||||||
my $lastVal = ReadingsVal($hash->{NAME},$pName."_raw",undef);
|
my $lastVal = ReadingsVal($hash->{NAME},$pName."_raw",undef);
|
||||||
Log 3, "SYSMON-DEBUG-IOSTAT: lastVal: $pName=".$lastVal;
|
if(defined($lastVal)) {
|
||||||
|
Log 3, "SYSMON-DEBUG-IOSTAT: lastVal: $pName=".$lastVal;
|
||||||
|
}
|
||||||
if(defined $lastVal) {
|
if(defined $lastVal) {
|
||||||
# Diff. ausrechnen, falls vorherigen Werte vorhanden sind.
|
# Diff. ausrechnen, falls vorherigen Werte vorhanden sind.
|
||||||
my($af1, $af2, $af3, $af4, $af5, $af6, $af7, $af8, $af9, $af10, $af11) = split(/\s+/, $lastVal);
|
my($af1, $af2, $af3, $af4, $af5, $af6, $af7, $af8, $af9, $af10, $af11) = split(/\s+/, $lastVal);
|
||||||
@ -1364,6 +1403,149 @@ sub SYSMON_getNetworkInfo ($$$)
|
|||||||
return $map;
|
return $map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Liefert Informationen, ob WLAN an oder aus ist (nur FritzBox)
|
||||||
|
# Parameter: HASH; MAP
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
sub SYSMON_getFBWLANState($$)
|
||||||
|
{
|
||||||
|
my ($hash, $map) = @_;
|
||||||
|
|
||||||
|
#logF($hash, "SYSMON_getFBWLANState", "");
|
||||||
|
|
||||||
|
$map->{+FB_WLAN_STATE}=SYSMON_acquireInfo_intern($hash, "ctlmgr_ctl r wlan settings/ap_enabled",1);
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Liefert Informationen, ob WLAN-Gastzugang an oder aus ist (nur FritzBox)
|
||||||
|
# Parameter: HASH; MAP
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
sub SYSMON_getFBWLANGuestState($$)
|
||||||
|
{
|
||||||
|
my ($hash, $map) = @_;
|
||||||
|
|
||||||
|
#logF($hash, "SYSMON_getFBWLANGuestState", "");
|
||||||
|
|
||||||
|
$map->{+FB_WLAN_GUEST_STATE}=SYSMON_acquireInfo_intern($hash, "ctlmgr_ctl r wlan settings/guest_ap_enabled",1);
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Liefert IP Adresse im Internet (nur FritzBox)
|
||||||
|
# Parameter: HASH; MAP
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
sub SYSMON_getFBInetIP($$)
|
||||||
|
{
|
||||||
|
my ($hash, $map) = @_;
|
||||||
|
|
||||||
|
$map->{+FB_INET_IP}=SYSMON_acquireInfo_intern($hash, "ctlmgr_ctl r dslstatistic status/ifacestat0/ipaddr");
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Liefert Status Internet-Verbindung (nur FritzBox)
|
||||||
|
# Parameter: HASH; MAP
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
sub SYSMON_getFBInetConnectionState($$)
|
||||||
|
{
|
||||||
|
my ($hash, $map) = @_;
|
||||||
|
|
||||||
|
$map->{+FB_INET_STATE}=SYSMON_acquireInfo_intern($hash, "ctlmgr_ctl r dslstatistic status/ifacestat0/connection_status");
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Liefert Status Klingelsperre (nur FritzBox)
|
||||||
|
# Parameter: HASH; MAP
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
sub SYSMON_getFBNightTimeControl($$)
|
||||||
|
{
|
||||||
|
my ($hash, $map) = @_;
|
||||||
|
|
||||||
|
$map->{+FB_N_TIME_CTRL}=SYSMON_acquireInfo_intern($hash, "ctlmgr_ctl r box settings/night_time_control_enabled",1);
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Liefert Anzahl der nicht abgehörten Nachrichten auf dem Anrufbeantworter (nur FritzBox)
|
||||||
|
# Parameter: HASH; MAP
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
sub SYSMON_getFBNumNewMessages($$)
|
||||||
|
{
|
||||||
|
my ($hash, $map) = @_;
|
||||||
|
|
||||||
|
$map->{+FB_NUM_NEW_MESSAGES}=SYSMON_acquireInfo_intern($hash, "ctlmgr_ctl r tam status/NumNewMessages");
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
|
# TODO: FritzBox-Infos: Dateien /var/env oder /proc/sys/urlader/environment.
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Liefert Informationen zu verschiedenen Eigenschaften durch Aufruf von entsprechenden Befehlen
|
||||||
|
# Parameter: HASH; cmd; Art (Interpretieren als: 1=on/off)
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
sub SYSMON_acquireInfo_intern($$;$)
|
||||||
|
{
|
||||||
|
my ($hash, $cmd, $art) = @_;
|
||||||
|
|
||||||
|
logF($hash, "SYSMON_acquireInfo_intern", "cmd: ".$cmd);
|
||||||
|
|
||||||
|
my $str = trim(SYSMON_execute($hash, $cmd));
|
||||||
|
my $ret;
|
||||||
|
|
||||||
|
if(!defined($art)) { $art= 0; }
|
||||||
|
|
||||||
|
$ret = $str;
|
||||||
|
if($art == 1) {
|
||||||
|
if($str+0 == 1) {
|
||||||
|
$ret="on";
|
||||||
|
} else {
|
||||||
|
if($str+0 == 0) {
|
||||||
|
$ret="off";
|
||||||
|
} else {
|
||||||
|
$ret="unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub SYSMON_FBVersionInfo($$)
|
||||||
|
{
|
||||||
|
my ($hash, $map) = @_;
|
||||||
|
|
||||||
|
my $data = SYSMON_execute($hash, "/etc/version --version --date");
|
||||||
|
|
||||||
|
my($v, $d, $t) = split(/\s+/, $data);
|
||||||
|
|
||||||
|
my $version = "";
|
||||||
|
if(defined($v)) { $version = $v; }
|
||||||
|
if(defined($d)) { $version.= " ".$d; }
|
||||||
|
if(defined($t)) { $version.= " ".$t; }
|
||||||
|
|
||||||
|
#if(defined($data[0])) {
|
||||||
|
# #Version
|
||||||
|
# $version = $data[0];
|
||||||
|
#}
|
||||||
|
#if(defined($data[1])) {
|
||||||
|
# #Date
|
||||||
|
# $version = $version." ".$data[1];
|
||||||
|
#}
|
||||||
|
|
||||||
|
if($version ne "") {
|
||||||
|
$map->{+FB_FW_VERSION}=$version;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $map;
|
||||||
|
}
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Systemparameter als HTML-Tabelle ausgeben
|
# Systemparameter als HTML-Tabelle ausgeben
|
||||||
# Parameter: Name des SYSMON-Geraetes (muss existieren), dessen Daten zur Anzeige gebracht werden sollen.
|
# Parameter: Name des SYSMON-Geraetes (muss existieren), dessen Daten zur Anzeige gebracht werden sollen.
|
||||||
@ -1734,6 +1916,35 @@ If one (or more) of the multiplier is set to zero, the corresponding readings is
|
|||||||
These readings provide output of commands, which are passed to the operating system.
|
These readings provide output of commands, which are passed to the operating system.
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
|
<b>FritzBox specific Readings</b>
|
||||||
|
<li>wlan_state<br>
|
||||||
|
WLAN state: on/off
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>wlan_guest_state<br>
|
||||||
|
GuestWLAN state: on/off
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>internet_ip<br>
|
||||||
|
current IP-Adresse
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>internet_state<br>
|
||||||
|
state of the Internet connection: connected/disconnected
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>night_time_ctrl<br>
|
||||||
|
state night time control (do not disturb): on/off
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>num_new_messages<br>
|
||||||
|
Number of new Voice Mail messages
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>fw_version_info<br>
|
||||||
|
Information on the installed firmware version: <VersionNum> <creation date> <time>
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
<br>
|
<br>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -2172,6 +2383,35 @@ If one (or more) of the multiplier is set to zero, the corresponding readings is
|
|||||||
Die entsprechende Angaben werden im Attribut <code>user-defined</code> vorgenommen.
|
Die entsprechende Angaben werden im Attribut <code>user-defined</code> vorgenommen.
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
|
<b>FritzBox-spezifische Readings</b>
|
||||||
|
<li>wlan_state<br>
|
||||||
|
WLAN-Status: on/off
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>wlan_guest_state<br>
|
||||||
|
Gast-WLAN-Status: on/off
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>internet_ip<br>
|
||||||
|
aktuelle IP-Adresse
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>internet_state<br>
|
||||||
|
Status der Internetverbindung: connected/disconnected
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>night_time_ctrl<br>
|
||||||
|
Status der Klingelsperre on/off
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>num_new_messages<br>
|
||||||
|
Anzahl der neuen Anrufbeantworter-Meldungen
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>fw_version_info<br>
|
||||||
|
Angaben zu der installierten Firmware-Version: <VersionNr> <Erstelldatum> <Zeit>
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
<br>
|
<br>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user