mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
FRITZBOX: 1st release
git-svn-id: https://svn.fhem.de/fhem/trunk@7084 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
11bee8a79e
commit
fe710d0d27
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- feature: new module FRITZBOX: controls Fritz!Box router and Fritz!Fon
|
||||||
- feature: new module 52_I2C_EEPROM.pm added (klausw)
|
- feature: new module 52_I2C_EEPROM.pm added (klausw)
|
||||||
- feature: readingsGroup: added ! flag,
|
- feature: readingsGroup: added ! flag,
|
||||||
added visibility and cellStyle attributes
|
added visibility and cellStyle attributes
|
||||||
@ -12,13 +13,13 @@
|
|||||||
- feature: 10_IT empfang (by bjoernh)
|
- feature: 10_IT empfang (by bjoernh)
|
||||||
- bugfix: PRESENCE: fix race condition, when delete disabled attribute and
|
- bugfix: PRESENCE: fix race condition, when delete disabled attribute and
|
||||||
PRESENCE does not start to scan.
|
PRESENCE does not start to scan.
|
||||||
- added: OPENWEATHER: captures weather forecast from API of www.wetter.com
|
- feature: OPENWEATHER: captures weather forecast from API of www.wetter.com
|
||||||
- fhem 5.6 released
|
- fhem 5.6 released
|
||||||
|
|
||||||
- 2014-11-09 (5.6)
|
- 2014-11-09 (5.6)
|
||||||
- bugfix: FB_CALLMONITOR: fixing race condition of missing events while
|
- bugfix: FB_CALLMONITOR: fixing race condition of missing events while
|
||||||
performing multiple calls
|
performing multiple calls
|
||||||
- added: PROPLANTA: captures weather forecast from web page www.proplanta.de
|
- feature: PROPLANTA: captures weather forecast from web page www.proplanta.de
|
||||||
- feature: 15_CUL_EM added attribute maxPeak (arnoaugustin)
|
- feature: 15_CUL_EM added attribute maxPeak (arnoaugustin)
|
||||||
- bugfix: 10_IT changed "setstate" to avoid eventMap errors (arnoaugustin)
|
- bugfix: 10_IT changed "setstate" to avoid eventMap errors (arnoaugustin)
|
||||||
- feature: new module 37_harmony.pm added (justme1968)
|
- feature: new module 37_harmony.pm added (justme1968)
|
||||||
|
@ -554,7 +554,10 @@ sub PROPLANTA_Run($)
|
|||||||
if ($attrURL eq "")
|
if ($attrURL eq "")
|
||||||
{
|
{
|
||||||
$URL = $hash->{URL2};
|
$URL = $hash->{URL2};
|
||||||
foreach (4, 7, 11)
|
my @URL_days = (4, 7, 11);
|
||||||
|
unshift @URL_days, 0
|
||||||
|
if @MyProplantaParser::texte == 0;
|
||||||
|
foreach (@URL_days)
|
||||||
{
|
{
|
||||||
$response = PROPLANTA_HtmlAcquire($hash,$URL . $_);
|
$response = PROPLANTA_HtmlAcquire($hash,$URL . $_);
|
||||||
$MyProplantaParser::startDay = $_;
|
$MyProplantaParser::startDay = $_;
|
||||||
@ -610,8 +613,11 @@ sub PROPLANTA_Done($)
|
|||||||
|
|
||||||
if (keys %values > 0)
|
if (keys %values > 0)
|
||||||
{
|
{
|
||||||
# Achtung! Um Mitternacht fehlen die aktuellen Werte
|
my $newState = "Tmin: " . $values{fc0_tempMin} . " Tmax: " . $values{fc0_tempMax};
|
||||||
readingsBulkUpdate($hash, "state", "Tmin: " . $values{fc0_tempMin} . " Tmax: " . $values{fc0_tempMax} . " T: " . $values{temperature} . " H: " . $values{humidity} . " W: " . $values{wind} . " P: " . $values{pressure} );
|
# Achtung! Nach Mitternacht fehlen für 1 h die aktuellen Werte
|
||||||
|
$newState .= " T: " . $values{temperature} . " H: " . $values{humidity} . " W: " . $values{wind} . " P: " . $values{pressure}
|
||||||
|
if defined $values{temperature};
|
||||||
|
readingsBulkUpdate($hash, "state", $newState);
|
||||||
readingsBulkUpdate( $hash, "lastConnection", keys( %values )." values captured" );
|
readingsBulkUpdate( $hash, "lastConnection", keys( %values )." values captured" );
|
||||||
PROPLANTA_Log $hash, 4, keys( %values )." values captured";
|
PROPLANTA_Log $hash, 4, keys( %values )." values captured";
|
||||||
}
|
}
|
||||||
|
@ -41,8 +41,7 @@ use Blocking;
|
|||||||
|
|
||||||
sub FRITZBOX_Log($$$);
|
sub FRITZBOX_Log($$$);
|
||||||
sub FRITZBOX_Init($);
|
sub FRITZBOX_Init($);
|
||||||
sub FRITZBOX_Init_Reading($$$@);
|
sub FRITZBOX_Ring_Start($@);
|
||||||
sub FRITZBOX_Ring($@);
|
|
||||||
sub FRITZBOX_Exec($$);
|
sub FRITZBOX_Exec($$);
|
||||||
|
|
||||||
my %fonModel = (
|
my %fonModel = (
|
||||||
@ -130,6 +129,7 @@ FRITZBOX_Initialize($)
|
|||||||
$hash->{GetFn} = "FRITZBOX_Get";
|
$hash->{GetFn} = "FRITZBOX_Get";
|
||||||
$hash->{AttrFn} = "FRITZBOX_Attr";
|
$hash->{AttrFn} = "FRITZBOX_Attr";
|
||||||
$hash->{AttrList} = "disable:0,1 "
|
$hash->{AttrList} = "disable:0,1 "
|
||||||
|
."INTERVAL "
|
||||||
."ringWithIntern:0,1,2 "
|
."ringWithIntern:0,1,2 "
|
||||||
."defaultCallerName "
|
."defaultCallerName "
|
||||||
."defaultUploadDir "
|
."defaultUploadDir "
|
||||||
@ -151,12 +151,14 @@ FRITZBOX_Define($$)
|
|||||||
$hash->{NAME} = $name;
|
$hash->{NAME} = $name;
|
||||||
|
|
||||||
$hash->{STATE} = "Initializing";
|
$hash->{STATE} = "Initializing";
|
||||||
$hash->{Message} = "FHEM";
|
|
||||||
$hash->{fhem}{modulVersion} = '$Date$';
|
$hash->{fhem}{modulVersion} = '$Date$';
|
||||||
|
$hash->{INTERVAL} = 300;
|
||||||
|
$hash->{fhem}{lastHour} = 0;
|
||||||
|
$hash->{fhem}{LOCAL} = 0;
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
RemoveInternalTimer($hash);
|
||||||
# Get first data after 6 seconds
|
# Get first data after 6 seconds
|
||||||
InternalTimer(gettimeofday() + 6, "FRITZBOX_Init", $hash, 0);
|
InternalTimer(gettimeofday() + 6, "FRITZBOX_Readout_Start", $hash, 0);
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
} #end FRITZBOX_Define
|
} #end FRITZBOX_Define
|
||||||
@ -169,6 +171,12 @@ FRITZBOX_Undefine($$)
|
|||||||
|
|
||||||
RemoveInternalTimer($hash);
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
|
BlockingKill( $hash->{helper}{READOUT_RUNNING_PID} )
|
||||||
|
if exists $hash->{helper}{READOUT_RUNNING_PID};
|
||||||
|
|
||||||
|
BlockingKill( $hash->{helper}{RING_RUNNING_PID} )
|
||||||
|
if exists $hash->{helper}{RING_RUNNING_PID};
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
} # end FRITZBOX_Undefine
|
} # end FRITZBOX_Undefine
|
||||||
|
|
||||||
@ -231,13 +239,15 @@ FRITZBOX_Set($$@)
|
|||||||
{
|
{
|
||||||
if (int @val > 0)
|
if (int @val > 0)
|
||||||
{
|
{
|
||||||
FRITZBOX_Ring $hash, @val;
|
FRITZBOX_Ring_Start $hash, @val;
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif( lc $cmd eq 'update' )
|
elsif( lc $cmd eq 'update' )
|
||||||
{
|
{
|
||||||
FRITZBOX_Init($hash);
|
$hash->{fhem}{LOCAL}=1;
|
||||||
|
FRITZBOX_Readout_Start($hash);
|
||||||
|
$hash->{fhem}{LOCAL}=0;
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
elsif ( lc $cmd eq 'startradio')
|
elsif ( lc $cmd eq 'startradio')
|
||||||
@ -292,117 +302,184 @@ FRITZBOX_Get($@)
|
|||||||
return "Unknown argument $cmd, choose one of $list";
|
return "Unknown argument $cmd, choose one of $list";
|
||||||
} # end FRITZBOX_Get
|
} # end FRITZBOX_Get
|
||||||
|
|
||||||
|
|
||||||
# Starts the data capturing and sets the new timer
|
# Starts the data capturing and sets the new timer
|
||||||
sub ##########################################
|
sub ##########################################
|
||||||
FRITZBOX_Init($)
|
FRITZBOX_Readout_Start($)
|
||||||
{
|
{
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
$hash->{INTERVAL} = AttrVal( $name, "INTERVAL", $hash->{INTERVAL} );
|
||||||
|
$hash->{INTERVAL} = 60
|
||||||
|
if $hash->{INTERVAL} < 60 && $hash->{INTERVAL} != 0;
|
||||||
|
|
||||||
|
if(!$hash->{fhem}{LOCAL} && $hash->{INTERVAL} != 0) {
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
InternalTimer(gettimeofday()+$hash->{INTERVAL}, "FRITZBOX_Readout_Start", $hash, 1);
|
||||||
|
return undef if( AttrVal($name, "disable", 0 ) == 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( exists( $hash->{helper}{READOUT_RUNNING_PID} ) && $hash->{fhem}{LOCAL} != 1 )
|
||||||
|
{
|
||||||
|
FRITZBOX_Log $hash, 1, "Old readout process still running. Killing old process ".$hash->{helper}{READOUT_RUNNING_PID};
|
||||||
|
BlockingKill( $hash->{helper}{READOUT_RUNNING_PID} );
|
||||||
|
delete($hash->{helper}{READOUT_RUNNING_PID});
|
||||||
|
}
|
||||||
|
|
||||||
|
$hash->{helper}{READOUT_RUNNING_PID} = BlockingCall("FRITZBOX_Readout_Run", $name,
|
||||||
|
"FRITZBOX_Readout_Done", 55,
|
||||||
|
"FRITZBOX_Readout_Aborted", $hash)
|
||||||
|
unless exists( $hash->{helper}{READOUT_RUNNING_PID} );
|
||||||
|
|
||||||
|
} # end FRITZBOX_Readout_Start
|
||||||
|
|
||||||
|
# Starts the data capturing and sets the new timer
|
||||||
|
sub ##########################################
|
||||||
|
FRITZBOX_Readout_Run($)
|
||||||
|
{
|
||||||
|
my ($name) = @_;
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
my $result;
|
my $result;
|
||||||
my $rName;
|
my $rName;
|
||||||
my @cmdArray;
|
my @cmdArray;
|
||||||
my @readoutArray;
|
my @readoutArray;
|
||||||
my $resultArray;
|
my $resultArray;
|
||||||
|
my @readoutReadings;
|
||||||
|
my $i;
|
||||||
|
|
||||||
FRITZBOX_Log $hash, 4, "Start update of device readings.";
|
my $slowRun = 0;
|
||||||
readingsBeginUpdate($hash);
|
if ( int(time/3600) != $hash->{fhem}{lastHour} || $hash->{fhem}{LOCAL} == 1)
|
||||||
|
{
|
||||||
|
push @readoutReadings, "fhem->lastHour|".int(time/3600);
|
||||||
|
$slowRun = 1;
|
||||||
|
FRITZBOX_Log $hash, 4, "Start update of slow changing device readings.";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FRITZBOX_Log $hash, 4, "Start update of fast changing device readings.";
|
||||||
|
}
|
||||||
|
my $returnStr = "$name|";
|
||||||
|
|
||||||
|
if ($slowRun == 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
# Init and Counters
|
||||||
|
push @readoutArray, ["", "ctlmgr_ctl r telcfg settings/Foncontrol"];
|
||||||
|
push @readoutArray, ["", "ctlmgr_ctl r telcfg settings/Foncontrol/User/count"];
|
||||||
|
push @readoutArray, ["", "ctlmgr_ctl r configd settings/WEBRADIO/count"];
|
||||||
|
push @readoutArray, ["", "ctlmgr_ctl r user settings/user/count"];
|
||||||
# Box Firmware
|
# Box Firmware
|
||||||
push @readoutArray, [ "box_fwVersion", "ctlmgr_ctl r logic status/nspver", "fwupdate" ];
|
push @readoutArray, [ "box_fwVersion", "ctlmgr_ctl r logic status/nspver", "fwupdate" ];
|
||||||
# WLAN
|
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutArray, \@readoutReadings );
|
||||||
push @readoutArray, [ "box_wlan", "ctlmgr_ctl r wlan settings/ap_enabled", "onoff" ];
|
|
||||||
# Gäste WLAN
|
my $dectCount = $resultArray->[1];
|
||||||
push @readoutArray, [ "box_guestWlan", "ctlmgr_ctl r wlan settings/guest_ap_enabled", "onoff" ];
|
my $radioCount = $resultArray->[2];
|
||||||
FRITZBOX_Array_Readout( $hash, \@readoutArray );
|
my $userCount = $resultArray->[3];
|
||||||
|
|
||||||
|
|
||||||
# Internetradioliste erzeugen
|
# Internetradioliste erzeugen
|
||||||
my $i = 0;
|
if ($radioCount > 0 )
|
||||||
|
{
|
||||||
|
$i = 0;
|
||||||
@radio = ();
|
@radio = ();
|
||||||
$rName = "radio00";
|
$rName = "radio00";
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
$result = FRITZBOX_Init_Reading($hash
|
push @readoutArray, [ $rName, "ctlmgr_ctl r configd settings/WEBRADIO".$i."/Name"];
|
||||||
, $rName
|
|
||||||
, "ctlmgr_ctl r configd settings/WEBRADIO".$i."/Name");
|
|
||||||
push (@radio, $result)
|
|
||||||
if $result;
|
|
||||||
$i++;
|
$i++;
|
||||||
$rName = sprintf ("radio%02d",$i);
|
$rName = sprintf ("radio%02d",$i);
|
||||||
}
|
}
|
||||||
while ( $result ne "" || defined $hash->{READINGS}{$rName} );
|
while ( $radioCount > $i || defined $hash->{READINGS}{$rName} );
|
||||||
|
|
||||||
# Dect Telefon
|
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutArray, \@readoutReadings );
|
||||||
foreach (610..615) { delete $hash->{fhem}{$_} if defined $hash->{fhem}{$_}; }
|
|
||||||
|
|
||||||
# Init Foncontrol
|
for (0..$radioCount-1)
|
||||||
FRITZBOX_Exec ($hash, "ctlmgr_ctl r telcfg settings/Foncontrol");
|
|
||||||
foreach (1..6)
|
|
||||||
{
|
{
|
||||||
# Dect-Interne Nummer
|
$radio[$_] = $result
|
||||||
my $intern = FRITZBOX_Init_Reading($hash,
|
if $resultArray->[$_] ne "";
|
||||||
"dect".$_."_intern",
|
|
||||||
"ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Intern");
|
|
||||||
next
|
|
||||||
unless $intern ne "";
|
|
||||||
# Dect-Telefonname
|
|
||||||
$result = FRITZBOX_Init_Reading($hash,
|
|
||||||
"dect".$_,
|
|
||||||
"ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Name");
|
|
||||||
$hash->{fhem}{$intern}{name} = $result;
|
|
||||||
# Handset manufacturer
|
|
||||||
$result = FRITZBOX_Init_Reading($hash,
|
|
||||||
"dect".$_."_manufacturer",
|
|
||||||
"ctlmgr_ctl r dect settings/Handset".($_-1)."/Manufacturer");
|
|
||||||
$hash->{fhem}{$intern}{brand} = $result;
|
|
||||||
if ($result eq "AVM")
|
|
||||||
{
|
|
||||||
# Internal Ring Tone Name
|
|
||||||
FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_intRingTone"
|
|
||||||
, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/IntRingTone"
|
|
||||||
, "ringtone");
|
|
||||||
# Alarm Ring Tone Name
|
|
||||||
FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_alarmRingTone"
|
|
||||||
, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/AlarmRingTone0"
|
|
||||||
, "ringtone");
|
|
||||||
# Radio Name
|
|
||||||
FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_radio"
|
|
||||||
, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/RadioRingID"
|
|
||||||
, "radio");
|
|
||||||
# Background image
|
|
||||||
FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_imagePath "
|
|
||||||
, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/ImagePath ");
|
|
||||||
# Customer Ring Tone
|
|
||||||
FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_custRingTone"
|
|
||||||
, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingTone");
|
|
||||||
# Customer Ring Tone Name
|
|
||||||
FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_custRingToneName"
|
|
||||||
, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingToneName");
|
|
||||||
# Firmware Version
|
|
||||||
FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_fwVersion"
|
|
||||||
, "ctlmgr_ctl r dect settings/Handset".($_-1)."/FWVersion");
|
|
||||||
# Phone Model
|
|
||||||
$result = FRITZBOX_Init_Reading($hash
|
|
||||||
, "dect".$_."_model"
|
|
||||||
, "ctlmgr_ctl r dect settings/Handset".($_-1)."/Model"
|
|
||||||
, "model");
|
|
||||||
$hash->{fhem}{$intern}{model} = $result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Analog telefons
|
# Dect Phones
|
||||||
|
if ($dectCount>0)
|
||||||
|
{
|
||||||
|
for (610..615) { delete $hash->{fhem}{$_} if defined $hash->{fhem}{$_}; }
|
||||||
|
|
||||||
|
for (1..6)
|
||||||
|
{
|
||||||
|
# 0 Dect-Interne Nummer
|
||||||
|
push @readoutArray, [ "dect".$_."_intern", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Intern" ];
|
||||||
|
# 1 Dect-Telefonname
|
||||||
|
push @readoutArray, [ "dect".$_, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Name" ];
|
||||||
|
# 2 Handset manufacturer
|
||||||
|
push @readoutArray, [ "dect".$_."_manufacturer", "ctlmgr_ctl r dect settings/Handset".($_-1)."/Manufacturer" ];
|
||||||
|
# 3 Internal Ring Tone Name
|
||||||
|
push @readoutArray, [ "dect".$_."_intRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/IntRingTone", "ringtone" ];
|
||||||
|
# 4 Alarm Ring Tone Name
|
||||||
|
push @readoutArray, [ "dect".$_."_alarmRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/AlarmRingTone0", "ringtone" ];
|
||||||
|
# 5 Radio Name
|
||||||
|
push @readoutArray, [ "dect".$_."_radio", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/RadioRingID", "radio" ];
|
||||||
|
# 6 Background image
|
||||||
|
push @readoutArray, [ "dect".$_."_imagePath ", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/ImagePath " ];
|
||||||
|
# 7 Customer Ring Tone
|
||||||
|
push @readoutArray, [ "dect".$_."_custRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingTone" ];
|
||||||
|
# 8 Customer Ring Tone Name
|
||||||
|
push @readoutArray, [ "dect".$_."_custRingToneName", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingToneName" ];
|
||||||
|
# 9 Firmware Version
|
||||||
|
push @readoutArray, [ "dect".$_."_fwVersion", "ctlmgr_ctl r dect settings/Handset".($_-1)."/FWVersion" ];
|
||||||
|
# 10 Phone Model
|
||||||
|
push @readoutArray, [ "dect".$_."_model", "ctlmgr_ctl r dect settings/Handset".($_-1)."/Model", "model" ];
|
||||||
|
}
|
||||||
|
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutArray, \@readoutReadings );
|
||||||
|
foreach (0..5)
|
||||||
|
{
|
||||||
|
my $offset = $_ * 11;
|
||||||
|
my $intern = $resultArray->[ $offset ];
|
||||||
|
if ( $intern )
|
||||||
|
{
|
||||||
|
push @readoutReadings, "fhem->$intern->name|" . $resultArray->[ $offset + 1 ];
|
||||||
|
push @readoutReadings, "fhem->$intern->brand|" . $resultArray->[ $offset + 2 ];
|
||||||
|
push @readoutReadings, "fhem->$intern->model|" . FRITZBOX_Readout_Format($hash, "model", $resultArray->[ $offset + 10 ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Analog Fons Name
|
||||||
foreach (1..3)
|
foreach (1..3)
|
||||||
{
|
{
|
||||||
push @readoutArray, ["fon".$_, "ctlmgr_ctl r telcfg settings/MSN/Port".($_-1)."/Name"];
|
push @readoutArray, ["fon".$_, "ctlmgr_ctl r telcfg settings/MSN/Port".($_-1)."/Name"];
|
||||||
}
|
}
|
||||||
|
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutArray, \@readoutReadings );
|
||||||
|
|
||||||
|
# Analog Fons Number
|
||||||
|
foreach (1..3)
|
||||||
|
{
|
||||||
|
push @readoutReadings, "fon".$_."_intern", $_
|
||||||
|
if $resultArray->[$_-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
# user profiles
|
||||||
|
$i=0;
|
||||||
|
$rName = "user01";
|
||||||
|
do
|
||||||
|
{
|
||||||
|
push @readoutArray, [$rName, "ctlmgr_ctl r user settings/user".$i."/name"];
|
||||||
|
push @readoutArray, [$rName."_thisMonthTime", "ctlmgr_ctl r user settings/user".$i."/this_month_time", "timeinhours"];
|
||||||
|
push @readoutArray, [$rName."_todayTime", "ctlmgr_ctl r user settings/user".$i."/today_time", "timeinhours"];
|
||||||
|
push @readoutArray, [$rName."_type", "ctlmgr_ctl r user settings/user".$i."/type"];
|
||||||
|
$i++;
|
||||||
|
$rName = sprintf ("user%02d",$i+1);
|
||||||
|
}
|
||||||
|
while ($i<$userCount || defined $hash->{READINGS}{$rName});
|
||||||
|
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutArray, \@readoutReadings );
|
||||||
|
}
|
||||||
|
|
||||||
|
# WLAN
|
||||||
|
push @readoutArray, [ "box_wlan", "ctlmgr_ctl r wlan settings/ap_enabled", "onoff" ];
|
||||||
|
# Gäste WLAN
|
||||||
|
push @readoutArray, [ "box_guestWlan", "ctlmgr_ctl r wlan settings/guest_ap_enabled", "onoff" ];
|
||||||
# Alarm clock
|
# Alarm clock
|
||||||
foreach (0..2)
|
foreach (0..2)
|
||||||
{
|
{
|
||||||
@ -417,64 +494,76 @@ FRITZBOX_Init($)
|
|||||||
# Alarm clock weekdays
|
# Alarm clock weekdays
|
||||||
push @readoutArray, ["alarm".($_+1)."_wdays", "ctlmgr_ctl r telcfg settings/AlarmClock".$_."/Weekdays", "aldays"];
|
push @readoutArray, ["alarm".($_+1)."_wdays", "ctlmgr_ctl r telcfg settings/AlarmClock".$_."/Weekdays", "aldays"];
|
||||||
}
|
}
|
||||||
$resultArray = FRITZBOX_Array_Readout( $hash, \@readoutArray );
|
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutArray, \@readoutReadings );
|
||||||
# Analog telefons number
|
|
||||||
foreach (1..3)
|
|
||||||
{
|
|
||||||
readingsBulkUpdate($hash, "fon".$_."_intern", $_)
|
|
||||||
if $resultArray->[$_-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
# user profiles
|
|
||||||
$i=0;
|
|
||||||
$rName = "user01";
|
|
||||||
do
|
|
||||||
{
|
|
||||||
push @readoutArray, [$rName, "ctlmgr_ctl r user settings/user".$i."/name"];
|
|
||||||
push @readoutArray, [$rName."_thisMonthTime", "ctlmgr_ctl r user settings/user".$i."/this_month_time", "timeinhours"];
|
|
||||||
push @readoutArray, [$rName."_todayTime", "ctlmgr_ctl r user settings/user".$i."/today_time", "timeinhours"];
|
|
||||||
push @readoutArray, [$rName."_type", "ctlmgr_ctl r user settings/user".$i."/type"];
|
|
||||||
$resultArray = FRITZBOX_Array_Readout( $hash, \@readoutArray );
|
|
||||||
$i++;
|
|
||||||
$rName = sprintf ("user%02d",$i+1);
|
|
||||||
}
|
|
||||||
while ($i<100 && ($resultArray->[0] ne "" || defined $hash->{READINGS}{$rName} ));
|
|
||||||
|
|
||||||
readingsEndUpdate( $hash, 1 );
|
readingsEndUpdate( $hash, 1 );
|
||||||
FRITZBOX_Log $hash, 4, "Update of device readings finished.";
|
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
$returnStr .= join('|', @readoutReadings );
|
||||||
# Get next data after 15 minutes
|
|
||||||
InternalTimer(gettimeofday() + 900, "FRITZBOX_Init", $hash, 1);
|
|
||||||
|
|
||||||
|
return $returnStr
|
||||||
|
|
||||||
|
} # End FRITZBOX_Readout_Run
|
||||||
|
|
||||||
|
sub ##########################################
|
||||||
|
FRITZBOX_Readout_Done($)
|
||||||
|
{
|
||||||
|
my ($string) = @_;
|
||||||
|
return unless defined $string;
|
||||||
|
|
||||||
|
my ($name, %values) = split("\\|", $string);
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
|
# delete the marker for RUNNING_PID process
|
||||||
|
delete($hash->{helper}{READOUT_RUNNING_PID});
|
||||||
|
|
||||||
|
readingsBeginUpdate($hash);
|
||||||
|
|
||||||
|
if ( defined $values{Error} )
|
||||||
|
{
|
||||||
|
readingsBulkUpdate( $hash, "lastReadout", $values{Error} );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
my $x = 0;
|
||||||
|
while (my ($rName, $rValue) = each(%values) )
|
||||||
|
{
|
||||||
|
if ($rName =~ /->/)
|
||||||
|
{
|
||||||
|
my ($rName1,$rName2,$rName3) = split /->/, $rName;
|
||||||
|
if (defined $rName3)
|
||||||
|
{
|
||||||
|
$hash->{$rName1}{$rName2}{$rName3} = $rValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$hash->{$rName1}{$rName2} = $rValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
readingsBulkUpdate( $hash, $rName, $rValue );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readingsBulkUpdate( $hash, "lastReadout", keys( %values )." values captured" );
|
||||||
|
FRITZBOX_Log $hash, 4, keys( %values )." values captured";
|
||||||
|
}
|
||||||
|
|
||||||
|
readingsEndUpdate( $hash, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ##########################################
|
sub ##########################################
|
||||||
FRITZBOX_Init_Reading($$$@)
|
FRITZBOX_Readout_Aborted($)
|
||||||
{
|
{
|
||||||
my ($hash, $rName, $cmd, $rFormat) = @_;
|
my ($hash) = @_;
|
||||||
|
delete($hash->{helper}{READOUT_RUNNING_PID});
|
||||||
$rFormat = ""
|
FRITZBOX_Log $hash, 1, "Timeout when reading Fritz!Box data.";
|
||||||
unless defined $rFormat;
|
|
||||||
|
|
||||||
my $rValue = FRITZBOX_Exec( $hash, $cmd);
|
|
||||||
|
|
||||||
$rValue = FRITZBOX_Format_Readout( $hash, $rFormat, $rValue );
|
|
||||||
if ($rValue)
|
|
||||||
{
|
|
||||||
readingsBulkUpdate($hash, $rName, $rValue)
|
|
||||||
}
|
|
||||||
elsif (defined $hash->{READINGS}{$rName} )
|
|
||||||
{
|
|
||||||
delete $hash->{READINGS}{$rName};
|
|
||||||
}
|
|
||||||
return $rValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ##########################################
|
sub ##########################################
|
||||||
FRITZBOX_Array_Readout($$)
|
FRITZBOX_Readout_Query($$$)
|
||||||
{
|
{
|
||||||
my ($hash, $readoutArray) = @_;
|
my ($hash, $readoutArray, $readoutReadings) = @_;
|
||||||
my @cmdArray;
|
my @cmdArray;
|
||||||
my $rValue;
|
my $rValue;
|
||||||
my $rName;
|
my $rName;
|
||||||
@ -493,12 +582,14 @@ FRITZBOX_Array_Readout($$)
|
|||||||
$rValue = $resultArray->[$_];
|
$rValue = $resultArray->[$_];
|
||||||
$rFormat = $readoutArray->[$_][2];
|
$rFormat = $readoutArray->[$_][2];
|
||||||
$rFormat = "" unless defined $rFormat;
|
$rFormat = "" unless defined $rFormat;
|
||||||
$rValue = FRITZBOX_Format_Readout ($hash, $rFormat, $rValue);
|
$rValue = FRITZBOX_Readout_Format ($hash, $rFormat, $rValue);
|
||||||
$rName = $readoutArray->[$_][0];
|
$rName = $readoutArray->[$_][0];
|
||||||
|
if ($rName ne "")
|
||||||
|
{
|
||||||
if ($rValue ne "")
|
if ($rValue ne "")
|
||||||
{
|
{
|
||||||
FRITZBOX_Log $hash, 5, "$rName: $rValue";
|
FRITZBOX_Log $hash, 5, "$rName: $rValue";
|
||||||
readingsBulkUpdate($hash, $rName, $rValue);
|
push @{$readoutReadings}, $rName."|".$rValue;
|
||||||
}
|
}
|
||||||
elsif (defined $hash->{READINGS}{$rName} )
|
elsif (defined $hash->{READINGS}{$rName} )
|
||||||
{
|
{
|
||||||
@ -506,16 +597,19 @@ FRITZBOX_Array_Readout($$)
|
|||||||
delete $hash->{READINGS}{$rName};
|
delete $hash->{READINGS}{$rName};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@{$readoutArray} = ();
|
@{$readoutArray} = ();
|
||||||
|
|
||||||
return $resultArray;
|
return $resultArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ##########################################
|
sub ##########################################
|
||||||
FRITZBOX_Format_Readout($$$)
|
FRITZBOX_Readout_Format($$$)
|
||||||
{
|
{
|
||||||
my ($hash, $format, $readout) = @_;
|
my ($hash, $format, $readout) = @_;
|
||||||
|
|
||||||
|
return $readout
|
||||||
|
unless defined $format;
|
||||||
return $readout
|
return $readout
|
||||||
unless $readout ne "" && $format ne "" ;
|
unless $readout ne "" && $format ne "" ;
|
||||||
|
|
||||||
@ -535,14 +629,19 @@ FRITZBOX_Format_Readout($$$)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elsif ($format eq "alnumber") {
|
} elsif ($format eq "alnumber") {
|
||||||
if (60 <= $readout && $readout <=65) {
|
my $intern = $readout;
|
||||||
my $intern = $readout + 550;
|
if (1 <= $readout && $readout <=2) {
|
||||||
$readout = $hash->{fhem}{$intern}{name}." - DECT $intern";
|
$readout = "FON $intern";
|
||||||
} elsif ($readout == 9) {
|
} elsif ($readout == 9) {
|
||||||
$readout = "all DECT";
|
$readout = "all DECT";
|
||||||
|
} elsif (60 <= $readout && $readout <=65) {
|
||||||
|
$intern = $readout + 550;
|
||||||
|
$readout = "DECT $intern";
|
||||||
} elsif ($readout == 50) {
|
} elsif ($readout == 50) {
|
||||||
$readout = "all";
|
$readout = "all";
|
||||||
}
|
}
|
||||||
|
$readout .= " (".$hash->{fhem}{$intern}{name}.")"
|
||||||
|
if defined $hash->{fhem}{$intern}{name};
|
||||||
} elsif ($format eq "fwupdate") {
|
} elsif ($format eq "fwupdate") {
|
||||||
my $update = FRITZBOX_Exec( $hash, "ctlmgr_ctl r updatecheck status/update_available_hint");
|
my $update = FRITZBOX_Exec( $hash, "ctlmgr_ctl r updatecheck status/update_available_hint");
|
||||||
$readout .= " (old)" if $update == 1;
|
$readout .= " (old)" if $update == 1;
|
||||||
@ -562,11 +661,13 @@ FRITZBOX_Format_Readout($$$)
|
|||||||
} elsif ($format eq "timeinhours") {
|
} elsif ($format eq "timeinhours") {
|
||||||
$readout = sprintf "%d h %d min", int $readout/3600, int( ($readout %3600) / 60);
|
$readout = sprintf "%d h %d min", int $readout/3600, int( ($readout %3600) / 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$readout = "" unless defined $readout;
|
||||||
return $readout;
|
return $readout;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ##########################################
|
sub ##########################################
|
||||||
FRITZBOX_Ring($@)
|
FRITZBOX_Ring_Start($@)
|
||||||
{
|
{
|
||||||
my ($hash, @val) = @_;
|
my ($hash, @val) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
@ -574,21 +675,21 @@ FRITZBOX_Ring($@)
|
|||||||
$val[1] = 5
|
$val[1] = 5
|
||||||
unless defined $val[1];
|
unless defined $val[1];
|
||||||
|
|
||||||
if ( exists( $hash->{helper}{RUNNING_PID} ) )
|
if ( exists( $hash->{helper}{RING_RUNNING_PID} ) )
|
||||||
{
|
{
|
||||||
FRITZBOX_Log $hash, 1, "Old process still running. Killing old process ".$hash->{helper}{RUNNING_PID};
|
FRITZBOX_Log $hash, 1, "Old process still running. Killing old process ".$hash->{helper}{RING_RUNNING_PID};
|
||||||
BlockingKill( $hash->{helper}{RUNNING_PID} );
|
BlockingKill( $hash->{helper}{RING_RUNNING_PID} );
|
||||||
delete($hash->{helper}{RUNNING_PID});
|
delete($hash->{helper}{RING_RUNNING_PID});
|
||||||
}
|
}
|
||||||
|
|
||||||
my $timeout = $val[1] + 30;
|
my $timeout = $val[1] + 30;
|
||||||
my $handover = $name . "|" . join( "|", @val );
|
my $handover = $name . "|" . join( "|", @val );
|
||||||
|
|
||||||
$hash->{helper}{RUNNING_PID} = BlockingCall("FRITZBOX_Ring_Run", $handover,
|
$hash->{helper}{RING_RUNNING_PID} = BlockingCall("FRITZBOX_Ring_Run", $handover,
|
||||||
"FRITZBOX_Ring_Done", $timeout,
|
"FRITZBOX_Ring_Done", $timeout,
|
||||||
"FRITZBOX_Ring_Aborted", $hash)
|
"FRITZBOX_Ring_Aborted", $hash)
|
||||||
unless exists $hash->{helper}{RUNNING_PID};
|
unless exists $hash->{helper}{RING_RUNNING_PID};
|
||||||
} # end FRITZBOX_Ring
|
} # end FRITZBOX_Ring_Start
|
||||||
|
|
||||||
sub ##########################################
|
sub ##########################################
|
||||||
FRITZBOX_Ring_Run($)
|
FRITZBOX_Ring_Run($)
|
||||||
@ -707,7 +808,7 @@ FRITZBOX_Ring_Done($)
|
|||||||
my ($name, $success, $result) = split("\\|", $string);
|
my ($name, $success, $result) = split("\\|", $string);
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
delete($hash->{helper}{RUNNING_PID});
|
delete($hash->{helper}{RING_RUNNING_PID});
|
||||||
|
|
||||||
if ($success != 1)
|
if ($success != 1)
|
||||||
{
|
{
|
||||||
@ -723,7 +824,7 @@ sub ##########################################
|
|||||||
FRITZBOX_Ring_Aborted($)
|
FRITZBOX_Ring_Aborted($)
|
||||||
{
|
{
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
delete($hash->{helper}{RUNNING_PID});
|
delete($hash->{helper}{RING_RUNNING_PID});
|
||||||
FRITZBOX_Log $hash, 1, "Timeout when ringing";
|
FRITZBOX_Log $hash, 1, "Timeout when ringing";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,6 +194,7 @@ FHEM/70_PushNotifier.pm xusader http://forum.fhem.de Unterstue
|
|||||||
FHEM/71_YAMAHA_AVR.pm markusbloch http://forum.fhem.de Multimedia
|
FHEM/71_YAMAHA_AVR.pm markusbloch http://forum.fhem.de Multimedia
|
||||||
FHEM/71_YAMAHA_BD.pm markusbloch http://forum.fhem.de Multimedia
|
FHEM/71_YAMAHA_BD.pm markusbloch http://forum.fhem.de Multimedia
|
||||||
FHEM/72_FB_CALLMONITOR.pm markusbloch http://forum.fhem.de Unterstuetzende Dienste
|
FHEM/72_FB_CALLMONITOR.pm markusbloch http://forum.fhem.de Unterstuetzende Dienste
|
||||||
|
FHEM/72_FRITZBOX.pm tupol http://forum.fhem.de Unterstuetzende Dienste (PM: http://forum.fhem.de/index.php?action=pm;sa=send;u=5432)
|
||||||
FHEM/73_PRESENCE.pm markusbloch http://forum.fhem.de Unterstuetzende Dienste
|
FHEM/73_PRESENCE.pm markusbloch http://forum.fhem.de Unterstuetzende Dienste
|
||||||
FHEM/73_MPD.pm wzut http://forum.fhem.de Multimedia
|
FHEM/73_MPD.pm wzut http://forum.fhem.de Multimedia
|
||||||
FHEM/75_MSG.pm ruebedo http://forum.fhem.de Automatisierung
|
FHEM/75_MSG.pm ruebedo http://forum.fhem.de Automatisierung
|
||||||
|
Loading…
x
Reference in New Issue
Block a user