FritzBox Parameter in FHEM anzeigen: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Zeile 160: Zeile 160:
== Links ==
== Links ==
[[Kategorie:FritzBox]]
[[Kategorie:FritzBox]]
[[Kategorie:Code Snippets]]

Version vom 11. Mai 2013, 23:15 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

Nicht im chroot laufen lassen, in startfhem folgende Zeilen auskommentieren und die Box (nicht nur fhem) anschließend neu starten:

## let FHEM run as user boxusr80 by adding user fhem with uid of boxusr80
#id fhem > /dev/null 2>&1
#if [ "$?" -ne "0" ]; then
# echo "user fhem does not exist. Adding it."
# echo "fhem:any:1080:0:fhem:/home-not-used:/bin/sh" >>/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

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