Originally posted by: <email address deleted>
Trübes Wetter habe ich für FHEM genutzt.
In Anlehnung an die WLAN EIN/AUS Funktion FB_WLANswitch, die seit Version
5.3 Bestandteil von FritzBoxUtils.pm ist, habe ich diese angepasst, um ein
Rufumleitung durch FHEM ein- oder ausschalten zu lassen. Damit konnte ich
mir nun den Wunsch erfüllen, bei Abwesenheit eine Rufumleitung aufs
Smartphone zu legen und diese bei "atHome" wieder automatisch zu
deaktivieren.
Man könnte auch die Rufnummer, zu der umgeleitet werden soll, mit
übergeben, oder den AnschlussPort.Da das für meine Zwecke nicht nötig ist,
habe ich mal klein angefangen und mich vorerst auf das Ein- und Ausschalten
der Rufumleitung (RUL) beschränkt.
Aufgerufen werden kann die Funktion mit einem notify mit
{FB_RULswitch("%")}, wobei on,ON,off,OFF,Anwesend und Abwesend gültige
Argumente sind.
"Anwesend" und "Abwesend" sind Rückgabewerte aus der WerIstZuHause
Funktion. Daher wird bei "Abwesend" ein RUL "on" und bei "Anwesend" ein RUL
"off" generiert.
Getestet auf einer Fritzbox 7390 (FHEM-Image-5.3) und freiem FON1-Port. RUL
in der FB eingerichtet. Die Routine kann wieder in die 99_myUtils.pm
eingefügt werden:
##########################################################
# Einfügen in 99_myUtils.pm
#
######## Switch FB Rufumleitung on/off ###################
# abgeleitet aus der Funktion FB_WLANswitch (wiki)
# call from notify with {FB_RULswitch("%")}
# define RULeinaus notify RUL {FB_RULswitch("%")}
use FritzBoxUtils;
sub
FB_RULswitch($) {
my $cmd = shift;
my $ret = "";
if ($cmd eq "Anwesend"){$cmd="off"}; # WLAN-Status umsetzen
if ($cmd eq "Abwesend"){$cmd="on"}; # WLAN-Status umsetzen
if ($cmd =~ m"on"i) { # on or ON
$ret .= "ATD: " . `echo "ATD#411**" | nc 127.0.0.1 1011` ;
sleep 1 ;
$ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ;
}
if ($cmd =~ m"off"i) { # off or OFF
$ret .= "ATD: " . `echo "ATD#401**" | nc 127.0.0.1 1011` ;
sleep 1 ;
$ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ;
}
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "FB_RULswitch($cmd) returned: $ret";
}
########## Ende 99_myUtils.pm ##############################
########## Aufruf aus fhem.cfg #############################
#
# mit der Funktion {FB_RULswitch("%")}
#
############################################################
Beispiel.cfg für das automatische Ein- und Ausschalten der Rufumleitung in
Abhängigkeit vom WerIstZuHause-Status
Die Rufumleitung wird ganz normal in der FB angelegt. Ich benutze dazu
einen freien analogen Port, hier: FON1.
(Man könnte auch eine Rufnummer und/oder den Port mit übergeben. Hier die
einfache Variante)
Wenn mein_Handy per WLAN mit der FB verbunden ist (ich bin zu Hause), dann
soll die RUL deaktiviert werden.
Sollte mein_Handy das Haus verlassen, wird die Rufumleitung aktiviert. In
FHEMWEB wird der Status der RUL angezeigt.
# Definition vom mein_Handy
define mein_Handy dummy
attr mein_Handy room WerIstZuHause
attr mein_Handy setList Anwesend Abwesend
#
# Definition von RUL als Dummy, um den Status anzeigen zu können. Für die
eigentliche Funktion wird er nicht gebraucht.
define RUL dummy
attr RUL alias Rufumleitung
attr RUL eventMap Anwesend:Aus Abwesend:Ein # übersetzen der Ergebnisse aus
FB_WLANswitch in Ein und Aus
attr RUL icon RUL.Ein
attr RUL room WerIstZuHause
#
# Bekannte Ermittlung des WerIstZuHause-Status via ping (wiki)
define WerDa notify WerDa {FhemLanStat("192.168.xxx.xxx","mein_Handy")} #
xxx.xxx = IP vom Handy (aus FB auslesen)
#
# Nun der eigentliche "Akt" und Setzen des dummy-Status.
define RULeinaus notify mein_Handy {FB_RULswitch("%")}{fhem "set RUL %"}
#
############################################################
Freuen, wenns klappt.
VG Heinz
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Moin!
Gute Idee - stellst Du's ins Wiki?
Gruß Uli
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
> Gute Idee - stellst Du's ins Wiki?
>
Gerne, bin noch am verbessern. Ich suche noch ne Möglichkeit, atd xxx an
eine bestimmte Nebenstelle zu senden. Muss noch etwas querlesen ;)
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hier nun die überarbeitete Rufumleitungsfunktion. Neu ist die Möglichkeit,
die Art der Rufumleitung (verzögert oder Parallelruf o.ä), die Nummer der
Nebenstelle und die Zielrufnummer als Argument mit zu übergeben. Damit
könnte man, bei Bedarf, das Umleitungsziel in Abhängigkeit von irgendwas
wechseln. Hinzugekommen ist auch eine Fehlerbehandlung. Der Aufruf kann
entweder mit *einem* Argument wie "Anwesend" oder "abwesend", ein oder AUS
mit {FB_RULswitch("%")} oder direkt durch die "WerIstZuHause"-Funktion
oder ähnliches erfolgen. Wobei "anwesend" bedeutet, dass die RUL
deaktiviert wird. Alternativ über die FHEM-Weboberfläche manuell mit dummy
oder durch die "RUL-Anlege-Funktion"
{FB_RULswitch('Rufumleitungsart','Nebenstelle',"Zielrufnummer")}. Hab im
Script versucht, möglichst viel zu kommentieren. Vielleicht kann es jemand
gebrauchen. Die FritzBox Weboberfläche muss also zum Anlegen einer RUL
nicht mehr benutzt werden. An den Einschränkungen "arbeite" ich noch.
Freue mich auch über Hinweise und Anregungen. Besser geht immer.
Und dran denken: Anfänger!!!
VG Heinz
######## Switch FB Rufumleitung on/off
############################################################################
#
# Aufruf mit {FB_RULswitch("%")} oder
{FB_RULswitch('Rufumleitungsart','Nebenstelle',"Zielrufnummer")}
# mögliche Kommandos für "%" zum Deaktivieren der Rufumleitung:
0,oFF,AUS,ANwesend (Groß-/Kleinschreibung egal)
# zum Aktivieren der Rufumleitung: z.Bsp. 1,On,Ein,Abwesend
# define RUL FS20
# attr RUL dummy 1
# define RULeinaus notify RUL {FB_RULswitch("%")}
sub
FB_RULswitch($@) {
my $out = "";
my $ret = "";
my $cmd = ""; # RUL deaktivieren: off,aus,anwesend; RUL
aktivieren: z.Bsp. 1,on,ein,abwesend
my $art = "1"; # Art: 1=sofort 2=verzögert 3=besetzt
4=2oder3 5=Parallelruf 6=bei Klingelsperre(0=Aus)
my $nst = "1"; # Nebenstelle, die umgeleitet werden soll
1=FON1 2=FON2 3=FON3
my $ziel = "0123456789"; # ZielRufnummer, auf die umgeleitet wird
my $laenge = @_;
return "Anzahl Parameter nicht korrekt. Erlaubt sind 1 oder 3, nicht aber
$laenge!" if (($laenge ne 1)and($laenge ne 3));
if ($laenge eq 3){
$art = $_[0];
$nst = $_[1];
$ziel = $_[2];
return "Ungueltiges Datenformat!" if (($art !~/^[0-6]$/)|($nst
!~/^[123]$/)|($ziel =~/\D/));
}
$cmd = $_[0];
#############################################################################
if (($cmd =~ /Off/i)|($cmd =~ /Anwesend/i)|($cmd =~ /Aus/i)|($cmd eq 0)) {
# Schreibweise ignorieren
$art = "0";
# RUL Aus
}
# sonst RUL ein
$out = "ATD#4" . "$art$nst" . "*" . "$ziel" . "*";
# Wählstring zusammensetzen
$ret .= "ATD: " . `echo "$out" | nc 127.0.0.1 1011`;
# wählen
sleep 1 ; #
$ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ;
# auflegen
$ret =~ s,[\r\n]*,,g; #
remove CR from return-string
Log 1, "FB_RULswitch($cmd) send: $out returned: $ret";
# Ergebnis in Logdatei
} #
#############################################################################
1;
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
... und weil die Formatierung hier eigentlich gar keine ist, hänge ich die
Scriptdatei an.
N8, oder Morjen
VG Heinz
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hab die Funktion ins wiki gestellt. Danke an Alle, die Händchen gehalten haben ;-)
Anregungen oder Hinweise: Gerne
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com