FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: Sturi2011 am 18 Juni 2013, 14:57:14

Titel: Fritz!Box Klingelsperre remote ein und ausschalten
Beitrag von: Sturi2011 am 18 Juni 2013, 14:57:14
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;

Titel: Aw: Fritz!Box Klingelsperre remote ein und ausschalten
Beitrag von: Sturi2011 am 20 Juni 2013, 07:43:30
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
Titel: Aw: Fritz!Box Klingelsperre remote ein und ausschalten
Beitrag von: Sturi2011 am 23 Juni 2013, 22:35:52
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;
Titel: Aw: Fritz!Box Klingelsperre remote ein und ausschalten
Beitrag von: Sturi2011 am 27 Juni 2013, 09:40:38
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
Titel: Antw:Fritz!Box Klingelsperre remote ein und ausschalten
Beitrag von: Sturi2011 am 24 November 2013, 20:01:00
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