Fritz!Box Klingelsperre remote ein und ausschalten

Begonnen von Sturi2011, 18 Juni 2013, 14:57:14

Vorheriges Thema - Nächstes Thema

Sturi2011

Ein und ausschalten der Klingelsperre an der Fritz!Box per Script

Fritzbox mit Dropbear analog hier 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;


Sturi2011

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

Sturi2011

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;

Sturi2011

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

Sturi2011

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