2
0
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:
hexenmeister 2014-04-23 21:22:54 +00:00
parent 09af1d3d78
commit c82c81f514

View File

@ -30,7 +30,7 @@ package main;
use strict;
use warnings;
my $VERSION = "1.3.8";
my $VERSION = "1.4.0";
use constant {
DATE => "date",
@ -58,7 +58,14 @@ use constant {
use constant {
ETH0 => "eth0",
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 => "~ ";
@ -275,6 +282,7 @@ SYSMON_updateCurrentReadingsMap($) {
$nName = "vdsl";
$rMap->{$nName} = "Network adapter ".$nName;
$rMap->{$nName."_diff"} = "Network adapter ".$nName." (diff)";
} else {
my $nName = ETH0;
$rMap->{$nName} = "Network adapter ".$nName;
@ -286,6 +294,17 @@ SYSMON_updateCurrentReadingsMap($) {
}
}
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
my $userdefined = AttrVal($name, "user-defined", undef);
if(defined $userdefined) {
@ -515,13 +534,17 @@ SYSMON_Update($@)
} else {
# Beim ersten mal alles aktualisieren!
if(!$u_first_mark) {
$u_first_mark = 1;
$refresh_all = 1;
}
# Parameter holen
my $map = SYSMON_obtainParameters($hash, $refresh_all);
# Mark setzen
if(!$u_first_mark) {
$u_first_mark = 1;
}
$hash->{STATE} = "Active";
#my $state = $map->{LOADAVG};
#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
@ -566,8 +589,14 @@ SYSMON_obtainParameters($$)
my ($m1, $m2, $m3, $m4) = split(/\s+/, $im);
# Einmaliges
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
$map = SYSMON_getUptime($hash, $map);
$map = SYSMON_getFHEMUptime($hash, $map);
@ -599,7 +628,7 @@ SYSMON_obtainParameters($$)
}
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);
#if($refresh_all || ($ref % $m3) eq 0) {
my $networks = AttrVal($name, "network-interfaces", undef);
@ -631,6 +660,14 @@ SYSMON_obtainParameters($$)
#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";
my $lastVal = ReadingsVal($hash->{NAME},$pName."_raw",undef);
if(defined($lastVal)) {
Log 3, "SYSMON-DEBUG-IOSTAT: lastVal: $pName=".$lastVal;
}
if(defined $lastVal) {
# Diff. ausrechnen, falls vorherigen Werte vorhanden sind.
my($af1, $af2, $af3, $af4, $af5, $af6, $af7, $af8, $af9, $af10, $af11) = split(/\s+/, $lastVal);
@ -1364,6 +1403,149 @@ sub SYSMON_getNetworkInfo ($$$)
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
# 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.
</li>
<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>
</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.
</li>
<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>
</ul>