Fritzbox WLAN EIN/AUS

1,090 views
Skip to first unread message

Nylon

unread,
Sep 15, 2011, 11:41:24 AM9/15/11
to FHEM users
Mit einem kleinen Trick gehts trotzdem

2 Shell scripts erstellen :

#!/bin/sh
echo "ATD#96*1*" | nc 127.0.0.1 1011
sleep 1
echo "ATH#96*1*" | nc 127.0.0.1 1011 //WLAN EIN

und

#!/bin/sh
echo "ATD#96*0*" | nc 127.0.0.1 1011
sleep 1
echo "ATH#96*0*" | nc 127.0.0.1 1011 //WLAN AUS


und anschließend in der fhem.cfg :

define WLAN dummy

define WLAN_switch notify Sender:Btn1.* set WLAN %EVTPART1

define WLAN_set_on notify WLAN:on "WLAN_On.sh"
define WLAN_set_off notify WLAN:off "WLAN_Off.sh"

Rudolf Koenig

unread,
Sep 15, 2011, 12:45:58 PM9/15/11
to fhem-...@googlegroups.com
Danke, gehoert ins Wiki :)

UliM

unread,
Mar 18, 2012, 10:48:49 AM3/18/12
to fhem-...@googlegroups.com
Hi,
offenbar hat AVM zu 84.05.20 das WLAN-switching umgestellt.

/etc/init.d/rc.net wlanstop
funktioniert nicht mehr.

/etc/init.d/rc.wlan stop
funktioniert alleine auch nicht. Ein ps nach einschalten des WLAN über die konfig-Oberflächte zeigt, dass da nun ein ganzer Haufen scripts aufgerufen werden.
Um Versions-unabhängig zu sein, wollte ich daher nun auf diesen Weg umstellen - und krieg's leider nicht hin. Habe die sh-scripts angelegt und mit chmod u+x WLAN_off.sh ausführbar gemacht.

WLAN_Off.sh wie in diesem post beschrieben liefert
nc: can't connect to remote host (127.0.0.1): Connection refused
'leep: invalid number '1

Auch nach Änderung auf
echo "ATD#96*0*" | nc 127.0.0.1 -p 1011
kommt dieselbe Meldung:
# sh WLAN_off.sh
nc: can't connect to remote host (127.0.0.1): Connection refused
'leep: invalid number '1
BusyBox v1.18.5 (2011-10-27 16:00:43 CEST) multi-call binary.

Usage: nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]

Open a pipe to IP:PORT or FILE

Options:
        -e PROG Run PROG after connect
        -l      Listen mode, for inbound connects
                (use -l twice with -e for persistent server)
        -p PORT Local port
        -w SEC  Timeout for connect
        -i SEC  Delay interval for lines sent
        -f FILE Use file (ala /dev/ttyS0) instead of network


Vielleicht hat's ja schon jemand hingebracht und kann die Lösung hier posten, oder ein Linux-Könner unterstützt hier bitte? Bitte bitte! :)
Ich stell die Lösung dann auch ins Wiki :)

Gruß, Uli


Willi

unread,
Mar 18, 2012, 3:28:06 PM3/18/12
to fhem-...@googlegroups.com
Am Sonntag, 18. März 2012 15:48:49 UTC+1 schrieb UliM:
WLAN_Off.sh wie in diesem post beschrieben liefert
nc: can't connect to remote host (127.0.0.1): Connection refused
'leep: invalid number '1


Das hast Du wohl "leep" statt "sleep" in Deinem Skript.
 
Auch nach Änderung auf
echo "ATD#96*0*" | nc 127.0.0.1 -p 1011

gemäß dem Posting oben heisst es 

echo "ATD#96*0*" | nc 127.0.0.1 1011

also ohne -p

MfG Willi

UliM

unread,
Mar 18, 2012, 3:36:58 PM3/18/12
to fhem-...@googlegroups.com
Hi,
nö, im script steht sleep 1
Da bei der Meldung das s fehlt, dachte ich, dass nc ein Parameter fehlt und hab -p probehalber dazugesetzt, geht aber auch nicht.

Wegen 'Connection refused': vll liegt's an root vs boxuser, weiß aber nicht wie ich das prüfen bzw beeinflussen kann?

Gruß Uli

Willi

unread,
Mar 18, 2012, 4:08:06 PM3/18/12
to fhem-...@googlegroups.com


Am Sonntag, 18. März 2012 20:36:58 UTC+1 schrieb UliM:

Wegen 'Connection refused': vll liegt's an root vs boxuser, weiß aber nicht wie ich das prüfen bzw beeinflussen kann?

Gruß Uli

Ich würde per telnet auf die Box und Dein Skript mal ausführen. Wenn das geht, kannst Du ja boxuser aus startfhem löschen und die Fritzbox rebooten.

Die Meldung "connection refused" kommt aber m.E. nicht daher, sondern an dem -p, welches so als Parameter nicht geht. Entweder man kann als User nc aufrufen oder nicht. Das TCP/IP auf der Fritzbox weiss nicht von welchem User nc aufgerufen wird. Es kennt nur die IP-Adresse des Aufrufenden.

Bei mir zeigt meine fritzbox (netstat -anp), dass der Port 1011 lokal, aber nicht über das LAN bzw. WAN nutzbar ist (Bindung an localhost bzw. 127.0.0.1):
tcp        0      0 127.0.0.1:1011          0.0.0.0:*               LISTEN      759/telefon

Ich glaube daher nicht, dass es an boxuser liegt.

MfG Willi

UliM

unread,
Mar 19, 2012, 3:34:04 AM3/19/12
to fhem-...@googlegroups.com
Hi,
vielen Dank so weit.  Leider geht's noch nicht - aber imerhin kleine neue Erkenntnisse:
1. netstat -anp bringt auch bei mir

tcp  0 0 127.0.0.1:1011 0.0.0.0:* LISTEN 743/telefon

2. Wenn ich die ath/atd-Beffehle über FB-telnet:21 absetze (also zB echo "ATD#96*1*" | nc 127.0.0.1 1011 ) , funktionieren sie - keine Fehlermeldung, WLAN wird erfolgreich ein/ausgeschaltet.

3. Die skripte ansich lassen sich in der telnet-session starten - es kommt keine Fehlermeldung zu fehlender Berechtigung o.ä.

4. Dennoch kommt immer noch dieselbe Fehlermeldung:

# sh WLAN_off.sh


nc: can't connect to remote host (127.0.0.1): Connection refused
'leep: invalid number '1

BusyBox v1.18.5 (2011-10-27 16:00:43 CEST) multi-call binary.

Usage: nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]

Open a pipe to IP:PORT or FILE

Options:
        -e PROG Run PROG after connect
        -l      Listen mode, for inbound connects
                (use -l twice with -e for persistent server)
        -p PORT Local port
        -w SEC  Timeout for connect
        -i SEC  Delay interval for lines sent
        -f FILE Use file (ala /dev/ttyS0) instead of network

Hier z.B. das Stop-Skript WLAN_off.sh:

#!/bin/sh


echo "ATD#96*0*" | nc 127.0.0.1 1011

sleep 1
echo "ATH#96*0*" | nc 127.0.0.1 1011                   //WLAN AUS

Hab ein bischen ge-google-t: sudo gibt's auf der FB nicht.  ls-l gibt

-rwxr-xr-x    1 boxusr80 root           125 Mar 19 08:13 WLAN_off.sh

Habe auch für beide Dateien ein chown root ausgeführt - es bleibt beim o.g. Verhalten :(

Was kann ich tun?

Gruß, Uli

unimatrix

unread,
Mar 19, 2012, 3:41:34 AM3/19/12
to fhem-...@googlegroups.com
also ich weiss nicht genau was da falsch läuft, aber das "'leep" deutet auf irgendwas seltsames hin, als stimmten da die Zeichen in dem File nicht...das kommt doch von der "sleep" Zeile...

Ich habe mich nun per SSH auf die Fritz.Box verbunden, dort per vi das Script erstellt als test.sh und dann "sh test.sh" ausgeführt -> geht.

UliM

unread,
Mar 19, 2012, 3:45:35 AM3/19/12
to fhem-...@googlegroups.com
Hi,
vielen Dank für's Nachschauen - ok, ein Ansatz :)
Ich nutze Notepad++
Vorhin habe ich (auf Grund desselben Gedankens) alle Zeilenumbrüche im script (mittels Notepad++) gelöscht und neu gesetzt.
vi hab ich zuletzt im Studium benutzt - kenne die ganzen kryptischen Bedienkürzel nicht mehr.
Versuche mal mir das zusammenzugoogeln.
Bzw - Luxusversion - kannst Du mir Dein script mailen?  ;-)
Gruß, Uli

borsti

unread,
Mar 19, 2012, 6:08:03 AM3/19/12
to fhem-...@googlegroups.com
Hi Uli,

sieht immer noch so aus, als wenn an Deinem Befehl was nicht stimmt.

> # sh WLAN_off.sh
> nc: can't connect to remote host (127.0.0.1): Connection refused
> 'leep: invalid number '1

Ich würde diese Meldung so lesen, dass nc mit 127.0.0.1 zu connecten
versucht, und zwar auf dem Port "leep: invalid number" (was natürlich
unsinnig ist).

Oh, moment mal:

> Usage: nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]
> Open a pipe to IP:PORT or FILE

> echo "ATD#96*0*" | nc 127.0.0.1 1011

Gemäß USAGE ist doch Deine Syntax falsch!?!

Ich kenne mich mit den Umleitungen in Linux nicht wirklich aus, aber das
müsste eher so aussehen:

echo "ATD#96*0*" | nc 127.0.0.1 -p 1011

oder noch wahrscheinlicher:

echo "ATD#96*0*" | nc -f 127.0.0.1 1011

Gruß
Torsten

Jan-Hinrich Fessel

unread,
Mar 19, 2012, 6:15:26 AM3/19/12
to fhem-...@googlegroups.com, Jan-Hinrich Fessel

Am 19.03.2012 um 11:08 schrieb borsti:
>> Usage: nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]
>> Open a pipe to IP:PORT or FILE

> Gemäß USAGE ist doch Deine Syntax falsch!?!


>
> Ich kenne mich mit den Umleitungen in Linux nicht wirklich aus, aber das müsste eher so aussehen:
>
> echo "ATD#96*0*" | nc 127.0.0.1 -p 1011
>
> oder noch wahrscheinlicher:
>
> echo "ATD#96*0*" | nc -f 127.0.0.1 1011

[-f FILE|IPADDR PORT]
bedeutet:
entweder "-f FILE"
oder "IPADDR PORT"
also ist


> echo "ATD#96*0*" | nc 127.0.0.1 1011

richtig.

Grüße
Oskar

UliM

unread,
Mar 19, 2012, 6:18:12 AM3/19/12
to fhem-...@googlegroups.com
Hi Torsten, hi all,
es lag wirklich am inhalt des scripts. Einmal in vi angezeigt sieht's aus wie angehängt - an jedem in Notepad++ gesetzten Zeilenende klebte noch ein ^M.
Das hab ich gelöscht, brav ne Leerzeile am ende angehängt -> Script läuft.
So weit die gute Nachricht.

Mehrmaliges Ein/Aus-schalten direkt vom Telefon geht.

Schalten per script geht genau EINMAL. Also zB nach reboot 1x WLAN_off.sh funktioniert. WLAN_on.sh meldet nur ERROR zurück, ein wiederholtes WLAN_off ebenso.

Bei Schalten über Telefon sieht man in ps in der telnet-session, dass da ein ganzer Sack voll Aktivitäten abläuft:
 1665 root      1424 S    sh -c wlancfgchanged
 1666 root      1424 S    /bin/sh /bin/wlancfgchanged
 1667 root      1424 S    /bin/sh /etc/init.d/rc.wlan reconfig
 1668 root      2160 S    wland_ctl --event reconfig
 1712 root      1424 S    sh -c /etc/rc.d/rc.wlan down
 1713 root      1432 S    /bin/sh /etc/rc.d/rc.wlan down
 1723 root      1412 S    sleep 2

Ich teste mit meinen scripts jetzt mal ein paar Tage - vll hab hatte ich nicht genug Karenzzeit zwischen den beiden Läufen.

Danke erstmal für eure Unterstützung!

Gruß, Uli

vi.JPG

borsti

unread,
Mar 19, 2012, 7:13:27 AM3/19/12
to fhem-...@googlegroups.com
Hi Oskar,

> [-f FILE|IPADDR PORT]

stimmt, ich hatte übersehen, dass das "-f" innerhalb der Klammer steht. :(

Gruss
Torsten

UliM

unread,
Mar 20, 2012, 6:27:54 AM3/20/12
to fhem-...@googlegroups.com
Hi,
so, kaum probiert man 2 Stunden rum, schon geht's ;-)
Da mir (und vll auch Anderen) das Bearbeiten im vi zu blöd war, hab ich's nun in ein Progrämmchen gepackt, das man zB in seine 99_myUtils stecken kann.
Geht bestimmt auch kürzer, es funktioniert aber. Freue mich mch über updates wenn's jemand kürzer/hübscher hinbekommt. Ich stell's sonst die nächsten Tage ins Wiki.
Gruß, Uli

doWLANswitch.txt

UliM

unread,
Mar 21, 2012, 9:16:24 AM3/21/12
to fhem-...@googlegroups.com

ilmtuelp0815

unread,
Mar 21, 2012, 1:03:02 PM3/21/12
to fhem-...@googlegroups.com
Hi Uli!
Das funktioniert aber nur, wenn FHEM direkt auf der FRIZ!Box läuft (127.0.0.1) und nicht wie in meinem Falle auf einer anderen Maschine (SuSE).

UliM

unread,
Mar 21, 2012, 1:12:33 PM3/21/12
to fhem-...@googlegroups.com


Am Mittwoch, 21. März 2012 18:03:02 UTC+1 schrieb ilmtuelp0815:
Hi Uli!

nur, wenn FHEM direkt auf der FRIZ!Box läuft (127.0.0.1)


Hi,
stimmt - gar nicht bedacht - das sollte doch aber der Standardfall sein?  ich schreib's trotzdem dazu, danke!
Gruß, Ul
 

Csaba

unread,
Apr 12, 2012, 6:17:09 AM4/12/12
to FHEM users
Hi

Ich versuche jetzt den Skript anzupassen so das es auch von meinem
Guruplug zum Fritzbox geht.
Dazu habe ich root's public key vom Guruplug auf die Fritzbox
unter .ssh/authorized_keys kopiert.
Somit kann sich "ssh fritzbox_ip" ohne passwortabfrage einloggen.

Der geanderte Skript sieht so aus:

######## Switch FB WLAN on/off ############
# call from notify with {doWLANswitch("%")}
sub
doWLANswitch($) {
my $cmd = shift;
my $ret = "";
if ($cmd =~ m"on"i) { # on or ON
$ret .= "ATD: " . `ssh fritzbox_ip "echo "ATD#96*1*" | nc 127.0.0.1
1011"` ;
sleep 1 ;
$ret .= " ATH: " . `ssh fritzbox_ip "echo "ATH" | nc 127.0.0.1
1011"` ;
}
if ($cmd =~ m"off"i) { # off or OFF
$ret .= "ATD: " . `ssh fritzbox_ip "echo "ATD#96*0*" | nc 127.0.0.1
1011"` ;
sleep 1 ;
$ret .= " ATH: " . `ssh fritzbox_ip "echo "ATH" | nc 127.0.0.1
1011"` ;
}
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "doWLANswitch($cmd) returned: $ret";
}

Leider habe ich ein Problem:

wenn ich trigger WLANSwitch on eingebe kriege ich die Fehlermeldung:

WLANSwitch return value: Bareword "on" not allowed while "strict subs"
in use at (eval 23) line 1.

aber trigger WLANSwitch "on" oder trigger WLANSwitch "off" gehen
einwandfrei mit ein und ausschalten des WLANs auf der Fritzbox.

die define sieht so aus in fhem.cfg:

define WLANSwitch notify WLANSwitch {doWLANswitch(%)}

Jemand eine Idee?

Oder anders formuliert funktioniert es bei euch genauso wie es im wiki
drin ist?
Das kann ich nicht testen da mein fhem nicht direkt auf der Fritzbox
ist.

Gruss,

Csaba

Rudolf Koenig

unread,
Apr 12, 2012, 6:23:14 AM4/12/12
to fhem-...@googlegroups.com
> define WLANSwitch notify WLANSwitch {doWLANswitch(%)}

Sollte
define WLANSwitch notify WLANSwitch {doWLANswitch("%")}
heissen.

Csaba

unread,
Apr 12, 2012, 6:33:50 AM4/12/12
to FHEM users
Danke Rudi das war's.

Falls jemand dasselbe benutzen moechte es geht nur auf einer ge-freetz-
ten Fritzbox da ansonsten kein sshd drauf.

Gruss,

Csaba

Ulrich Maass

unread,
Apr 12, 2012, 10:20:55 AM4/12/12
to fhem-...@googlegroups.com

2012/4/12 Rudolf Koenig <inf...@koeniglich.de>

Sollte
 define WLANSwitch notify WLANSwitch {doWLANswitch("%")}
heissen.

So steht's auch im Wiki :)
Und nein, ich hab's nicht schnell noch geändert ;-)

Gruß, Uli

Csaba

unread,
Apr 12, 2012, 10:44:56 AM4/12/12
to FHEM users
Ich habe das auch nicht bezweifelt.
War mein Fehler, nur ich kam nicht weiter bei der Fehlersuche,
deshalb der Post.

Und zusatzlich fur Leute die Fhem nicht auf der Fritzbox haben.

Gruss,

Csaba

horchundkuck

unread,
Nov 10, 2012, 10:48:25 AM11/10/12
to fhem-...@googlegroups.com
Funktioniert nur mit der FHEM-Firmware? Hab noch die "originale AVM" auf meiner FB7390. Bei mir steht im Log:
sh: nc: not found

VG Heinz

horchundkuck

unread,
Nov 10, 2012, 10:52:44 AM11/10/12
to fhem-...@googlegroups.com
!!! Steht ja alles schon weiter oben!
Also alles klar. Wollte wegen  ...atHome... eh die FW wechseln.

Heinz

punker

unread,
Nov 11, 2012, 9:52:38 AM11/11/12
to fhem-...@googlegroups.com, gole...@googlemail.com
Hallo,

habe jetzt auch versucht diese Anleitung umzusetzen, aber leider nur mit kleinen Teilerfolgen!
Habe auch das FHEM auf einem Pogo bzw. Dockstar laufen und eine gefreetzte 7170!
SSH funktioniert ohne Probleme per Schlüssel.
Habe alles in die 99_myUtils.pm eingefügt und per
 define WLANSwitch notify WLANSwitch {doWLANswitch("%")} angelegt.

Leider funktioniert ein
trigger WLANSwitch off bzw. on nicht!
Wenn ich direkt in putty
ssh 192.168.2.1 "echo "ATD#96*0*" | nc 127.0.0.1 1011" eingebe
kam beim ersten Mal ein OK und das WLAN ging aus.
Einschalten ließ es sich aber nicht mehr.

Woran liegts?

mfg
Dieter


Am Donnerstag, 15. September 2011 17:41:24 UTC+2 schrieb Nylon:

UliM

unread,
Nov 11, 2012, 10:03:05 AM11/11/12
to fhem-...@googlegroups.com, gole...@googlemail.com
Hi,
hast Du die Routine aus dem Wiki denn so umgebaut, dass sie ebenfalls ssh ip nutzt?
=8-)

punker

unread,
Nov 11, 2012, 10:23:58 AM11/11/12
to fhem-...@googlegroups.com, gole...@googlemail.com
So hab ich es in die 99_myUtils eingefügt:

sub
doWLANswitch($) {
my $cmd = shift;
my $ret = "";
if ($cmd =~ m"on"i) { # on or ON
$ret .= "ATD: " . `ssh 192.168.2.1 "echo "ATD#96*1*" | nc 127.0.0.1 1011"` ;
sleep 1 ;
$ret .= " ATH: " . `ssh 192.168.2.1 "echo "ATH" | nc 127.0.0.1 1011"` ;
}
if ($cmd =~ m"off"i) { # off or OFF
$ret .= "ATD: " . `ssh 192.168.2.1 "echo "ATD#96*0*" | nc 127.0.0.1 1011"` ;
sleep 1 ;
$ret .= " ATH: " . `ssh 192.168.2.1 "echo "ATH" | nc 127.0.0.1 1011"` ;
}
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "doWLANswitch($cmd) returned: $ret";
}

sollte doch passen?

Dieter
Reply all
Reply to author
Forward
0 new messages