Ein und ausschalten der Klingelsperre an der Fritz!Box per Script
Fritzbox mit Dropbear analog hier (http://forum.fhem.de/index.php?topic=9911.0) einrichten.
In der 99_myUtils.pm
sub
SSHFBRing
{
my $host = "192.168.0.1";
my $user = "root";
my $telfnkt = $_[0];
my $ssh2fritzbox = Net::SSH::Perl->new($host, debug=>0, identity_files=>["/root/.ssh/id_rsa"]);
$ssh2fritzbox->login($user);
my($stdout, $stderr, $exit) = $ssh2fritzbox->cmd(". ~/.profile; /var/media/ftp/USBDISK2-0-01/MyUtils/RingStop.pl $telfnkt");
return $exit;
Log 3, ">>> $exit";
undef $ssh2fritzbox;
}
in der fhem.cfg
define TELDM dummy
attr TELDM setList on off
define TELDMOn notify TELDM.on { SSHFBRing('1')}
attr TELDMOn room hidden
define TELDMOff notify TELDM.off { SSHFBRing('0')}
attr TELDMOff room hidden
im Codeverzeichniss der Fritzbox analog der Dropbear Anleitung folgende RingStop.pl:
#!/var/media/ftp/USBDISK2-0-01/perl/perl -w
use warnings;
use strict;
my $teltmp = "";
my $telfnkt = $ARGV[0];
my $telstatus = 0;
if ($telfnkt eq "1") {
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_enabled 1`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_ring_blocked 1`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_off_time 1`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_on_time 23:59`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_off_time 00:00`;
$telstatus = int(`/usr/bin/ctlmgr_ctl r box settings/night_time_control_enabled`);
}
elsif ($telfnkt eq "0") {
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_enabled 0`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_ring_blocked 0`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_off_time 0`;
$telstatus = int(`/usr/bin/ctlmgr_ctl r box settings/night_time_control_enabled`);
}
else {
$telstatus = int(`/usr/bin/ctlmgr_ctl r box settings/night_time_control_enabled`);
}
exit $telstatus;
Als Ergänzung der Codeschnipsel, der aus Wlan-Status und $hour den Nachtschichtstatus ermittelt und die Telefone entsprechend am nächsten Vormittag abschaltet.
define Stefanie_Nacht dummy
define Nacht_Status_Stefanie notify Wlan_Status_Stefanie.* {if($value{Wlan_Status_Stefanie}==0 && $hour > 2 && $hour < 6){fhem("set Stefanie_Nacht 1");;}}
define AT_TelStefanieNachtOff at *07:15:00 {if (Stefanie_Nacht == 1) { fhem("set TELDM on");; fhem ("define AT_TelStefanieNachtOn at +06:45:00 set TELDM off");; fhem ("set Stefanie_Nacht 0");;}}
Und die Variante für den Mittagsschlaf mit den Kleinen am Wochenende
define AT_TelSaSoMitOff at *11:45:00 { if ($we) { fhem("set TELDM on");;}}
define AT_TelSaSoNaMitOn at *14:00:00 { if ($we) {fhem("set TELDM off");;}}
Gruß Andreas
Hallo,
hier noch eine Version der RingStop.pl, die auch DECT und ISDN sauber abschaltet.
Mit etwas Anpassung sicher auch in der MyUils.pm direkt zu verwenden - wenn das Ganze direkt auf der Box läuft.
#!/var/media/ftp/USBDISK2-0-01/perl/perl -w
use warnings;
use strict;
my $i = 0;
my $teltmp = "";
my $telfnkt = $ARGV[0];
my $telstatus = 0;
if ($telfnkt eq "1") {
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_enabled 1`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_ring_blocked 1`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_on_time 23:59`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_off_time 00:00`;
$telstatus = int(`/usr/bin/ctlmgr_ctl r box settings/night_time_control_enabled`);
for ($i = 1; $i < int(`/usr/bin/ctlmgr_ctl r telcfg settings/Foncontrol/User/count`); $i++){
$teltmp = `/usr/bin/ctlmgr_ctl w telcfg settings/Foncontrol/User$i/RingAllowed 1`;
$teltmp = `/usr/bin/ctlmgr_ctl w telcfg settings/Foncontrol/User$i/NoRingTime 00002359`;
}
}
elsif ($telfnkt eq "0") {
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_enabled 0`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_ring_blocked 0`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_on_time 23:59`;
$teltmp = `/usr/bin/ctlmgr_ctl w box settings/night_time_control_off_time 00:00`;
$telstatus = int(`/usr/bin/ctlmgr_ctl r box settings/night_time_control_enabled`);
for ($i = 1; $i < int(`/usr/bin/ctlmgr_ctl r telcfg settings/Foncontrol/User/count`); $i++){
$teltmp = `/usr/bin/ctlmgr_ctl w telcfg settings/Foncontrol/User$i/NoRingTime 00000000`;
}
}
else {
$telstatus = int(`/usr/bin/ctlmgr_ctl r box settings/night_time_control_enabled`);
}
exit $telstatus;
In dem define für die Nachtschicht hatte sich ein Fehler eingeschlichen.
Richtig ist:
define AT_TelStefanieNachtOff at *07:15:00 {if ($value{Stefanie_Nacht}==1) { fhem("set TELDM on");; fhem ("define AT_TelStefanieNachtOn at +06:45:00 set TELDM off");; fhem ("set Stefanie_Nacht 0");;}}
Wenn also Nachtschicht erkannt wurde werden die Telefone stummgeschaltet und ein Timer für das Wiedereinschalten gesetzt,
sowie der Dummy für die Nachtschichterkennung zurückgesetzt.
Gruß Andreas
Hallo,
nachdem ich diese Lösung nun lange verwendet habe und mich immer über die Antwortzeiten von Fhem geärgert habe
(Fhem steht während der SSL Kommunikation und wartet auf Antwort da in der hier beschriebenen Weise als Blocking
programmiert.
Hier eine andere Variante dazu. Dies ist ein Script, welches auf der Fritzbox läuft, selbst die anwesenden Phones sucht
und dann per wget einen Dummy auf der Box setzt. Zusätzlich fragt das Sript hier einen Dummy SetRuhe ab und setzt
dementsprechend ein Dummy Ruhe. Das Ganze benötigt auf meiner 7390 leider eine vollständige WGet Implementierung.
Das ist die WGetn die er vom Stick lädt. Die reine Meldung der Mobiltelefone kann ohne Stick komplett aus der
Debug.cfg laufen.
#!/bin/sh
sleep 20
USBSTICK=$(mount | grep /var/media/ftp/ | sed -e "s|^.*ftp/||g" -e "s/ .*$//")
while !(test -f /var/media/ftp/$USBSTICK/wgetn); do
sleep 1
done
while true; do
local looptime=55
landevicelist() {
local count=0
local maxcount=$(ctlmgr_ctl r landevice settings/landevice/count)
while [ $count -lt $maxcount ] ; do
local name=$(ctlmgr_ctl r landevice settings/landevice$count/name)
if [ $name = android-8594d8381b97869 ]
then
local active=$(ctlmgr_ctl r landevice settings/landevice$count/active)
if [ $active -eq 1 ] ; then
wget -q -O /dev/null 'http://192.168.0.10:8085/fhem?cmd=set%20Wlan_Status_Stefanie%201'
else
wget -q -O /dev/null 'http://192.168.0.10:8085/fhem?cmd=set%20Wlan_Status_Stefanie%200'
fi
elif [ $name = iPhonevonafohl ] ; then
local active=$(ctlmgr_ctl r landevice settings/landevice$count/active)
if [ $active -eq 1 ] ; then
wget -q -O /dev/null 'http://192.168.0.10:8085/fhem?cmd=set%20Wlan_Status_Andreas%201'
else
wget -q -O /dev/null 'http://192.168.0.10:8085/fhem?cmd=set%20Wlan_Status_Andreas%200'
fi
fi
: $((count++))
done
}
landevicelist
if [ $(/var/media/ftp/$USBSTICK/wgetn -q "http://192.168.0.10:8085/fhem?cmd=getstate%20SetRuhe" -O - | grep state) = state:1 ]
then
ctlmgr_ctl w box settings/night_time_control_enabled 1
ctlmgr_ctl w box settings/night_time_control_ring_blocked 1
ctlmgr_ctl w box settings/night_time_control_on_time 23:59
ctlmgr_ctl w box settings/night_time_control_off_time 00:00
local dectcnt=0
local maxdectcnt=$(ctlmgr_ctl r telcfg settings/Foncontrol/User/count)
while [ $dectcnt -lt $maxdectcnt ] ; do
ctlmgr_ctl w telcfg settings/Foncontrol/User$dectcnt/RingAllowed 0
ctlmgr_ctl w telcfg settings/Foncontrol/User1/NoRingWithNightSetting 0
ctlmgr_ctl w telcfg settings/Foncontrol/User$dectcnt/NoRingTime 00002359
: $((dectcnt++))
done
wget -q -O /dev/null 'http://192.168.0.10:8085/fhem?cmd=set%20Ruhe%201'
else
ctlmgr_ctl w box settings/night_time_control_enabled 0
ctlmgr_ctl w box settings/night_time_control_ring_blocked 0
ctlmgr_ctl w box settings/night_time_control_on_time 23:59
ctlmgr_ctl w box settings/night_time_control_off_time 00:00
local dectcnt=0
local maxdectcnt=$(ctlmgr_ctl r telcfg settings/Foncontrol/User/count)
while [ $dectcnt -lt $maxdectcnt ] ; do
ctlmgr_ctl w telcfg settings/Foncontrol/User$dectcnt/RingAllowed 1
ctlmgr_ctl w telcfg settings/Foncontrol/User1/NoRingWithNightSetting 1
ctlmgr_ctl w telcfg settings/Foncontrol/User$dectcnt/NoRingTime 00000000
: $((dectcnt++))
done
wget -q -O /dev/null 'http://192.168.0.10:8085/fhem?cmd=set%20Ruhe%200'
fi
sleep $looptime
done
Gruß Andreas