FritzBox Parameter in FHEM anzeigen

Aus FHEMWiki
Version vom 22. Juli 2014, 23:06 Uhr von Madu99 (Diskussion | Beiträge) (→‎Sub (z.B. 99_myutils.pm): removed warnings & bugs; $Datum is not needed anyway)
Zur Navigation springen Zur Suche springen

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 umbedingt 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.

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