FritzBox Parameter in FHEM anzeigen: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „Um beliebige Werte der FritzBox in fhem anzeigen zu können sind die im folgenden beschriebenen Schritte und Definitionen erforderlich. == fhem.cfg == <nowiki…“)
 
K (Schreibweise von FHEM geändert)
 
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Um beliebige Werte der FritzBox in fhem anzeigen zu können sind die im folgenden beschriebenen Schritte und Definitionen erforderlich.
Um beliebige Werte der FritzBox in FHEM anzeigen zu können sind die im folgenden beschriebenen Schritte und Definitionen erforderlich.
== fhem.cfg ==
== fhem.cfg ==
  <nowiki>define FritzBoxValues weblink htmlCode {ShowFritzBoxValues()}</nowiki>
  <nowiki>define FritzBoxValues weblink htmlCode {ShowFritzBoxValues()}</nowiki>
Zeile 51: Zeile 51:
   };
   };
    
    
   my $TelNewMessages;
   my $TelNewMessages = "";
   my $n;
   my $n;
  my $Datum = `date -d +&quot;%d.%m.%y 0:00&quot;`;
my $Datum = `date -d +&quot;%d.%m.%y 0:00&quot;`;
   my $one_day = 60*60*24&#160;;
   my $one_day = 60*60*24&#160;;
   my $today = strftime &quot;%d.%m.%y&quot;, localtime(time);
   my $today = strftime &quot;%d.%m.%y&quot;, localtime(time);
Zeile 83: Zeile 83:
   if (trim($TelNewMessages) eq &quot;&quot;) {$TelNewMessages = &quot;0&quot;}
   if (trim($TelNewMessages) eq &quot;&quot;) {$TelNewMessages = &quot;0&quot;}
    
    
   my $FritzLANActiveDevices;
   my $FritzLANActiveDevices = "";
    
    
   foreach $n (0..8) {
   foreach $n (0..8) {
Zeile 135: Zeile 135:
   return $htmlcode;
   return $htmlcode;
  }</nowiki>
  }</nowiki>
== Ergebnis ==
== Ergebnis ==
[[File:/w/images/2/27/FB_Param.jpg|605px|link=/wiki/Datei:FB_Param.jpg|alt=FB Param.jpg]]
[[Datei:20121030221420!FB Param.jpg]]
 
== Wichtig ==
== Wichtig ==
Nicht im chroot laufen lassen, in startfhem folgende Zeilen auskommentieren und die Box (nicht nur fhem) anschließend neu starten:
Diese Lösung funktioniert nicht mit dem AVM Labor-Image welches einen FHEM Server enthält. Bitte unbedingt das [http://fhem.de/fhem.html#Installation FritzBox Image von fhem.de] verwenden.
 
Es werden root-Rechte benötigt um diese Funktion nutzen zu können. Eine entsprechende Anleitung um FHEM mit root-Rechten zu starten gibt es hier: [[FritzBox: FHEM unter root starten]]


<nowiki>## let FHEM run as user boxusr80 by adding user fhem with uid of boxusr80
#id fhem &gt; /dev/null 2&gt;&amp;1
#if [ "$?" -ne "0" ]; then
# echo "user fhem does not exist. Adding it."
# echo "fhem:any:1080:0:fhem:/home-not-used:/bin/sh" &gt;&gt;/var/tmp/passwd
#fi
## set file ownership
#chown -R boxusr80 ${home}/log
#chown -R boxusr80 ${home}/FHEM
#chown root ${home}/dfu-programmer
#chmod 4755 ${home}/dfu-programmer</nowiki>
== Bemerkungen ==
== Bemerkungen ==
Die Schleife (0..11) kann natürlich auch länger oder kürzer sein, je nachdem wieviele Anrufe pro Tag eingehen.
Die Schleife (0..11) kann natürlich auch länger oder kürzer sein, je nachdem wieviele Anrufe pro Tag eingehen.
$JStr_Route_Erg) eq "3" bedeutet, es werden nur Anrufe angezeigt, die auf der 4. eigenen Rufnummer eingehen.
$JStr_Route_Erg) eq "3" bedeutet, es werden nur Anrufe angezeigt, die auf der 4. eigenen Rufnummer eingehen.
Für weitere FritzValues siehe [http://www.wehavemorefun.de/fritzbox/Category:User-Interface-Module http://www.wehavemorefun.de/fritzbox/Category:User-Interface-Module]
Für weitere FritzValues siehe [http://www.wehavemorefun.de/fritzbox/Category:User-Interface-Module http://www.wehavemorefun.de/fritzbox/Category:User-Interface-Module]
TelNewMessages gibt nichts mehr aus, hat jemand eine Idee?
TelNewMessages gibt nichts mehr aus, hat jemand eine Idee?


== Links ==
== Links ==
[[Kategorie:FritzBox]]
[[Kategorie:Code Snippets]]

Aktuelle Version vom 25. Januar 2017, 09:58 Uhr

Um beliebige Werte der FritzBox in FHEM anzeigen zu können sind die im folgenden beschriebenen Schritte und Definitionen erforderlich.

fhem.cfg

define FritzBoxValues weblink htmlCode {ShowFritzBoxValues()}

Anzeigen im Foorplan:

attr FritzBoxValues fp_Grundriss 0,0,0,Werteliste

Sub (z.B. 99_myutils.pm)

sub ShowFritzBoxValues()
 { 
 
  my @FritzAlarmClockTime;
  my @FritzAlarmClockActive;
  my @FritzAlarmClockNumber;
  my @FritzTelName;
  my @FritzAlarmClockWeekdays;
  my @Weekdays;
  my $k;
  
  foreach $k (0..2) {
   my $AStr_Time = "ctlmgr_ctl r telcfg settings/AlarmClock".$k."/Time";
   my $AStr_Active = "ctlmgr_ctl r telcfg settings/AlarmClock".$k."/Active";
   my $AStr_Number = "ctlmgr_ctl r telcfg settings/AlarmClock".$k."/Number";
   my $AStr_Weekdays = "ctlmgr_ctl r telcfg settings/AlarmClock".$k."/Weekdays";
   $FritzAlarmClockTime[$k] = `$AStr_Time`;
   $FritzAlarmClockActive[$k] = `$AStr_Active`;
   $FritzAlarmClockNumber[$k] = `$AStr_Number`;
   $FritzAlarmClockWeekdays[$k] = `$AStr_Weekdays`;
   $FritzAlarmClockActive[$k] =~ s/\s*$//g;
  
   if ($FritzAlarmClockNumber[$k] == "1") {$FritzTelName[$k] = "Wohnzimmer"};
   if ($FritzAlarmClockNumber[$k] == "2") {$FritzTelName[$k] = "Haustür"};
   if ($FritzAlarmClockNumber[$k] == "9") {$FritzTelName[$k] = "alle Telefone"};
   if ($FritzAlarmClockNumber[$k] == "50") {$FritzTelName[$k] = "ISDN Telefone"};
   if ($FritzAlarmClockNumber[$k] == "60") {$FritzTelName[$k] = "Fritzbox 1"};
   if ($FritzAlarmClockNumber[$k] == "61") {$FritzTelName[$k] = "Fritzbox 2"};
   if ($FritzAlarmClockNumber[$k] == "62") {$FritzTelName[$k] = "BMC"};
   $Weekdays[$k] = "";
   my $i;
   foreach $i (reverse 0..6) {
    if ($FritzAlarmClockWeekdays[$k] - 2**$i >= 0) {
     if ($i == 6) {$Weekdays[$k] = "SO ".$Weekdays[$k]};
     if ($i == 5) {$Weekdays[$k] = "SA ".$Weekdays[$k]};
     if ($i == 4) {$Weekdays[$k] = "FR ".$Weekdays[$k]};
     if ($i == 3) {$Weekdays[$k] = "DO ".$Weekdays[$k]};
     if ($i == 2) {$Weekdays[$k] = "MI ".$Weekdays[$k]};
     if ($i == 1) {$Weekdays[$k] = "DI ".$Weekdays[$k]};
     if ($i == 0) {$Weekdays[$k] = "MO ".$Weekdays[$k]};
     $FritzAlarmClockWeekdays[$k] = $FritzAlarmClockWeekdays[$k] - 2**$i;
    } ;
   };
  };
  
  my $TelNewMessages = "";
  my $n;
#  my $Datum = `date -d +"%d.%m.%y 0:00"`;
  my $one_day = 60*60*24 ;
  my $today = strftime "%d.%m.%y", localtime(time);
  $today = $today." 0:00";
  my $tomorrow = strftime "%d.%m.%y", localtime(time+$one_day);
  $tomorrow = $tomorrow." 0:00";
  my $yesterday = strftime "%d.%m.%y", localtime(time-$one_day);
  $yesterday = $yesterday." 0:00";
  my $today2 = strftime "%d.%m.%y %H:%M", localtime(time);
  
  foreach $n (0..3) {
   my $JStr_Duration = "ctlmgr_ctl r telcfg settings/Journal".$n."/Duration";
   my $JStr_Duration_Erg = `$JStr_Duration`;
   my $JStr_Number = "ctlmgr_ctl r telcfg settings/Journal".$n."/Number";
   my $JStr_Number_Erg = `$JStr_Number`;
   my $JStr_Date = "ctlmgr_ctl r telcfg settings/Journal".$n."/Date";
   my $JStr_Date_Erg = `$JStr_Date`;
   my $JStr_Route = "ctlmgr_ctl r telcfg settings/Journal".$n."/Route";
   my $JStr_Route_Erg = `$JStr_Route`;
   my $JStr_Name = "ctlmgr_ctl r telcfg settings/Journal".$n."/Name";
   my $JStr_Name_Erg = `$JStr_Name`;
   if (trim($JStr_Duration_Erg) eq "0:00" && $JStr_Date_Erg ge $today && trim($JStr_Route_Erg) eq "3") {
    $TelNewMessages = $TelNewMessages.$JStr_Date_Erg." ".$JStr_Number_Erg." ";
    if (trim($JStr_Name_Erg) eq "") {$JStr_Name_Erg = "unbekannt"};
    $TelNewMessages = $TelNewMessages."(".trim($JStr_Name_Erg).")"."<BR>";
   }
   $TelNewMessages = $TelNewMessages." ".$JStr_Duration_Erg." ".$JStr_Number_Erg." ".$JStr_Date_Erg." ".$JStr_Route_Erg." ".$JStr_Name_Erg;
  }
  if (trim($TelNewMessages) eq "") {$TelNewMessages = "0"}
  
  my $FritzLANActiveDevices = "";
  
  foreach $n (0..8) {
   my $JStr_LANDeviceName = "ctlmgr_ctl r landevice settings/landevice".$n."/name";
   my $JStr_LANDeviceName_Erg = `$JStr_LANDeviceName`;
   my $JStr_LANDeviceActive = "ctlmgr_ctl r landevice settings/landevice".$n."/active";
   my $JStr_LANDeviceActive_Erg = `$JStr_LANDeviceActive`;
   my $JStr_LANDeviceOnline = "ctlmgr_ctl r landevice settings/landevice".$n."/online";
   my $JStr_LANDeviceOnline_Erg = `$JStr_LANDeviceOnline`;
   if (trim($JStr_LANDeviceOnline_Erg) eq "1") {
    $FritzLANActiveDevices = $FritzLANActiveDevices.$JStr_LANDeviceName_Erg." (".$n.") ";
   }
  };
  if (trim($FritzLANActiveDevices) eq "") { $FritzLANActiveDevices = "0" }
  
  my %FritzValues =
  (
  "FritzCPUTemperature" => int(`ctlmgr_ctl r power status/act_temperature`).'°',
  "FritzDslConnectionStatus" => `ctlmgr_ctl r dslstatistic status/ifacestat0/connection_status`,
  "FritzDslIP-Adress" => `ctlmgr_ctl r dslstatistic status/ifacestat0/ipaddr`,
  "FritzWLANActiveStations" => `ctlmgr_ctl r wlan settings/active_stations`,
  "TelNewMessagesAB" => `ctlmgr_ctl r tam settings/NumNewMessages`,
  #"TelNewMessages" => $TelNewMessages,
  "TelAlarmClock0" => substr($FritzAlarmClockTime[0],0,2).":".substr($FritzAlarmClockTime[0],2,2).' Uhr, aktiv: '. $FritzAlarmClockActive[0] .', Telefon: '.$FritzTelName[0].', Wochentage: '. $Weekdays[0],
  "TelAlarmClock1" => substr($FritzAlarmClockTime[1],0,2).":".substr($FritzAlarmClockTime[1],2,2).' Uhr, aktiv: '. $FritzAlarmClockActive[1] .', Telefon: '.$FritzTelName[1].', Wochentage: '. $Weekdays[1],
  "TelAlarmClock2" => substr($FritzAlarmClockTime[2],0,2).":".substr($FritzAlarmClockTime[2],2,2).' Uhr, aktiv: '. $FritzAlarmClockActive[2] .', Telefon: '.$FritzTelName[2].', Wochentage: '. $Weekdays[2],
  "FritzLANActiveDevices" => $FritzLANActiveDevices,
  "FritzCapi" => `ctlmgr_ctl r capiotcp settings/enabled`
  );
  
  my $tag;
  my $value;
  my $tr_class = "odd";
  
  my $htmlcode = "";
  $htmlcode .= "<table>\n";
  $htmlcode .= "<tr><td><div class=\"devType\">Parameter</div></td></tr>\n";
  $htmlcode .= "<tr><td>\n";
  $htmlcode .= "<table class=\"block wide\" id=\"Parameter\">\n";
  
  foreach $tag (sort keys %FritzValues)
  {
   $htmlcode .= "<tr class=\"$tr_class\"><td>\n<div class=\"col1\">$tag: </div></td>\n<td><div class=\"col2\">$FritzValues{$tag}</div></td></tr>\n";
   if ($tr_class eq "odd") {$tr_class = "even"} else {$tr_class = "odd"};
  }
  
  $htmlcode .= "<tr class=\"$tr_class\"><td><div class=\"col1\">Datum Uhrzeit: </div></td>\n<td><div class=\"col2\">$today2</div></td></tr>\n";
  $htmlcode .= "</table>\n";
  $htmlcode .= "</td></tr>\n";
  $htmlcode .= "</table>\n";
  return $htmlcode;
 }

Ergebnis

20121030221420!FB Param.jpg

Wichtig

Diese Lösung funktioniert nicht mit dem AVM Labor-Image welches einen FHEM Server enthält. Bitte unbedingt das FritzBox Image von fhem.de verwenden.

Es werden root-Rechte benötigt um diese Funktion nutzen zu können. Eine entsprechende Anleitung um FHEM mit root-Rechten zu starten gibt es hier: FritzBox: FHEM unter root starten

Bemerkungen

Die Schleife (0..11) kann natürlich auch länger oder kürzer sein, je nachdem wieviele Anrufe pro Tag eingehen. $JStr_Route_Erg) eq "3" bedeutet, es werden nur Anrufe angezeigt, die auf der 4. eigenen Rufnummer eingehen.

Für weitere FritzValues siehe http://www.wehavemorefun.de/fritzbox/Category:User-Interface-Module

TelNewMessages gibt nichts mehr aus, hat jemand eine Idee?

Links