Hi,
ich moechte an Feiertagen an meiner Fritzbox das WLAN einschalten.
Klappt aber leider nicht mit meinen zusammengebauten Codeschnipseln die ich hier und in der Anleitung gefunden habe:
attr global holiday2we Bayern #taeglich 0:00 Pruefung ob ein Tag holiday ist und dann $we auf true setzen
define Bayern holiday #holiday Datei definieren
#Natuerlich gibts auch die Bayern.holiday Datei
define n_wlan notify $we {\ my $we = ("%" eq "true" ? "start");;\ system("/etc/init.d/rc.net wlan$wstate &");;\ } #soll WLAN an der Box einschalten!!!
Was mach ich falsch?
Versuche es so:
define n_wlan notify *00:01:00 {if ($we) {fhem ("system('/etc/init.d/rc.net wlan$wstate &')")}
Testet 1Minute nach Mitternacht ob Feiertag und schaltet dein WLAN (Zeit kannst du natürlich verändern)
ob dein WLAN über deinen System-Befehl startet, kannst du über Eingabe des Befehls in die Kommandozeile testen.
MfG, MisterEltako
Ist es nicht besser ein at zu verwenden?
Ein notify erwartes ein Ereignis. Ich kann in der obigen Abfrage keins erkennen.
define n_wlan at *00:01:00 {if ($we) {fhem ("system('/etc/init.d/rc.net wlan$wstate &')")}
Hi!
Ja,ja,ja....zu schnell geschrieben! ;o)
Es muss natürlich eine "at" statt notify rein! Habe ich ja selbst zuvor geschrieben....
Sehr aufmerksam!
MfG, MisterEltako
Danke,
geht aber leider nicht.
Was mach ich falsch? Anbei ein Screenshot. Kriegt man auch noch irgendwie eine Statusanzeige dazu die sagt ob WLAN an oder aus ist und wann ( Datm das naechste mal geschaltet wird?
Was genau geht nicht? Wlan anschalten? Oder die Codezeilen?
Wie sieht das Lofile hierzu aus?
MfG,MisterEltako
Hi,
also folgendes. Am Donnerstag war Feiertag und der Tag wurde mir auch in FHEM korrekt angezeigt.
Meine Fritzbox Nachtschaltung schaltet fuer den Arbeitstag ( 8:29 bis 18:00) an Werktagen das WLAN aus weil ich dann arbeite. Somit moechte ich an Feiertagen das WLAN trotzdem wieder an haben.
Um 8:30 wenn die FHEM schlaten soll blieb WLAN aus.
Das log sagt:
2013.05.09 08:30:00 3: Global symbol "$wstate" requires explicit package name at (eval 90) line 1.
Missing right curly or square bracket at (eval 90) line 2, at end of line
syntax error at (eval 90) line 2, at EOF
Ausserdem hat mir das gezeigt das ich leider den Status des WLAN im FHEM nicht sehen kann.
Schau dir diesen Thread an:
http://forum.fhem.de/index.php?t=msg&goto=65783&rid=0 (//forum.fhem.de/index.php?t=msg&goto=65783&rid=0)
Vielleicht kannst du das besser verwenden.
Ansonsten musst du bitte auch deinen Code für den dummy und dessen Verbindungscode zur Wlan-Aktivierungszeile posten.
Sonst ist es schwierig hier richtig weiterzuhelfen.
MfG, MisterEltako
Hi, ups klar hier der code den ich verwende:
attr global holiday2we feiertage
define feiertage Holiday #separates file Feiertage.holiday listet alle Feiertage auf
define FeiertagsWLAN at *08:30:00 {if ($we) {fhem ("system('/etc/init.d/rc.net wlan$wstate &')")}
Zitatdefine FeiertagsWLAN at *08:30:00 {if ($we) {fhem ("system('/etc/init.d/rc.net wlan$wstate &')")}
Also spontan fällt mir auf, dass am Ende der Codezeile eine } fehlt. Vielleicht reicht das ja schon.
Wir kommen der Sache glaub ich etwas naeher.....
Also der code lautet:
define FeiertagsWLAN at *13:55:00 {if ($we) {fhem ("system('/etc/init.d/rc.net wlan$wstate &')")}}
Das log sagt:
2013.05.11 13:55:00 3: Global symbol "$wstate" requires explicit package name at (eval 1590) line 1.
Das WLAN ist nicht eingeschaltet worden.
Offensichtlich fehlt ja irgendein Paket. was bedeutet "(eval 1590)"? und warum line 1 der code oben steht in Zeile 36 !!
und warum is $wstate laut log ein Symbol?
Kann ich irgendwie mir noch den Status anzeigen lassen? Ich wuerde mir da sowas wie 0 und 1 erwarten. (Immer auf die Fritzoberflaeche zu wechsen ist so muehsam.)
Dann müsste es wohl doch so lauten:
define FeiertagsWLAN at *08:30:00 {if ($we) {system('/etc/init.d/rc.net wlan$wstate &')}}
Kannst du (nur zum sofort auszuprobieren) auch so schreiben:
define FeiertagsWLAN at +00:00:02 {if ($we) {system('/etc/init.d/rc.net wlan$wstate &')}}
MfG, MisterEltako.
Hi, klappt nicht.
ich habe gerade
define FeiertagsWLAN at +00:00:02 {if ($we) {fhem ("system('/etc/init.d/rc.net wlan$wstate &')")}}
eingegeben und das kommt im logfile:
2013.05.11 17:16:59 3: Global symbol "$wstate" requires explicit package name at (eval 35) line 1.
Es fehlt was da bin ich sicher.
Muss ich evtl. noch irgendein "attr Global ...." vorher haben, oder sonst irgendwas was Ihr als selbstverstaendlich anseht, ich aber vergesse?
Hi, halt stop, da klappt doch was.
Also nochmal langsam.....
mit
define FeiertagsWLAN at +00:00:10 {if ($we) {system('/etc/init.d/rc.net wlan$wstate &')}}
kommt nun ein neuer Logeintrag naemlich
2013.05.11 17:39:37 3: -1
das sieht schon besser aus, glaub ich, aber WLAN an der Box bleibt aus.
Lies dir mal folgendes durch:
https://groups.google.com/forum/m/#!msg/fhem-users/U1EUyoM-Ze8/VUM7bLHyhigJ (//groups.google.com/forum/m/#!msg/fhem-users/U1EUyoM-Ze8/VUM7bLHyhigJ)
Wenn da nix verändert worden ist, geht es anscheinend mit dieser Befehlsfolge gar nicht!
MfG, MisterEltako.
Hi,
also auf http://fhem.de/fritzbox.html (//fhem.de/fritzbox.html) steht vereinfacht gesagt:
Die AVM Laborfirmware mit FHEM ist in diesem chroot Umgebung und daher kann man nicht die Fritzbox Funktion selbst verändern
aber wenn man das FHEM Image dieser Seite nimmt, dann soll es gehen weil ausserhalb von chroot. Und genau dieses Image habe ich.
Aber der Befehl fuer die Komandozeile: {system("/etc/init.d/rc.net wlanstart")}
fuehrt auch bei mir zum Ergebnis "-1" und das bedeutet laut dem link'failed to execute'.
Also das Log das nun einfach -1 sagt bedeutet wohl dasselbe.
Ich hab aber noch was gefunden im Wiki http://www.fhemwiki.de/wiki/Fritzbox:_WLAN_ein/ausschalten (//www.fhemwiki.de/wiki/Fritzbox:_WLAN_ein/ausschalten)
aber wenn ich den Code eingebe:
######## 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: " . `echo "ATD#96*1*" | 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#96*0*" | 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, "doWLANswitch($cmd) returned: $ret";
}
define WLANschalten notify btn {doWLANswitch("%")}
attr WLANschalten room Technik
wie krieg ich dann den Event des WLANschalten ausprobiert?
Nur das Event testen:
"trigger btn"
in die Kommandozeile und dann Enter drücken...
oder als Testbutton über FhemWeb.
define Testbtn dummy
attr Testbtn webCmd on
attr devStateIcon on:on:on off:off:on
define WLANschalten notify Testbtn {\
doWLANswitch("%");;\
fhem("define Aus at +00:00:01 set Testbtn off");;\
}
MfG, MisterEltako.
ich steh auf dem Schlauch....
Also ich habe wie gefordert in die 99_myUtils.pm die Zeile
use FritzBoxUtils;
eingefuegt, und gespeichert und ein shutdown restart gemacht.
wenn ich dann den Code:
######## 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: " . `echo "ATD#96*1*" | 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#96*0*" | 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, "doWLANswitch($cmd) returned: $ret";
}
eingebe und speichern will erscheint der Fehler:
Unknown command sub, try help Unknown command doWLANswitch($), try help Unknown command my, try help Unknown command my, try help Unknown command if, try help Unknown command $ret, try help Unknown command $ret, try help Unknown command }, try help Unknown command if, try help Unknown command $ret, try help Unknown command $ret, try help Unknown command }, try help Unknown command $ret, try help Unknown command Log, try help Unknown command }, try help Please define WLANschalten first
Aber auch wenn ich den code von oben eingebe:
define Testbtn dummy
attr Testbtn webCmd on
attr deviceStateIcon on:on:on off:off:on
define WLANschalten notify Testbtn {\
doWLANswitch("%");;\
fhem("define Aus at +00:00:01 set Testbtn off");;\
}
bekomme ich den Fehler:
Testbtn: unknown attribute webCmd, choose one of room group comment alias eventMap userReadings loglevel:0,1,2,3,4,5,6 setList event-on-change-reading event-on-update-reading event-min-interval stateFormat or use attr global userattr webCmd Please define deviceStateIcon first WLANschalten already defined, delete it first
Aber zumindest der Teil muessete doch unabhaengig vom ersten code funktionieren koennen.
Ich habe leider keine Fritzbox, sondern FHEM auf einem NAS-System. Also ist die Simulation hier etwas schwierig!
Habe jedoch gerade getestet:
in FHEM.cfg:
define Testbtn dummy
attr Testbtn webCmd on
attr Testbtn devStateIcon on:on:on off:off:on
define WLANschalten notify Testbtn {\
doWLANswitch("%");;\
fhem("define Aus at +00:00:01 set Testbtn off");;\
}
in 99_Utils.pm ganz oben:
use POSIX;
use FritzBoxUtils;
sub
myExperimentUtils_Initialize($$)
{
my ($hash) = @_;
}
in 99_Utils.pm (irgenwo, wo Platz ist):
#---------------------------------------------------------------------------------------------------
sub
doWLANswitch($) {
my $cmd = shift;
my $ret = "";
if ($cmd =~ m"on"i) { # on or ON
$ret .= "ATD: " . `echo "ATD#96*1*" | 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#96*0*" | 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, "doWLANswitch($cmd) returned: $ret";
}
#--------------------------------------------------------------------------------------------------------
Das geht ohne Fehlermeldung bei mir! Ob es natürlich dein Fritzbox auf WLAN schaltet kann ich nicht testen... ;o)
MfG, MisterEltako.
Da ist mein Fehler, den letzten grossen Teil des Code mit der SUB rountine hab ich bloederweise in die fhem.cfg geschrieben.
Ich probiers heute Abend gleich noch mal aus und werde posten obs nun geht.
Geht immer noch nicht. beim speichern der fhem.cfg bekomme ich nun:
Testbtn: unknown attribute webCmd, choose one of room group comment alias eventMap userReadings loglevel:0,1,2,3,4,5,6 setList event-on-change-reading event-on-update-reading event-min-interval stateFormat or use attr global userattr webCmd Testbtn: unknown attribute devStateIcon, choose one of room group comment alias eventMap userReadings loglevel:0,1,2,3,4,5,6 setList event-on-change-reading event-on-update-reading event-min-interval stateFormat or use attr global userattr devStateIcon
was kann das sein?
Hi,
bitte letzten Beitrag ignorieren !!!
Also mein code lautet jetzt in der fhem.cfg:
define Testbtn dummy
attr Testbtn devStateIcon on:WLAN_Status.1:on off:WLAN_Status.0:off
attr Testbtn room Technik
attr Testbtn webCmd on:off
define WLANschalten notify Testbtn {doWLANswitch("%");fhem("define Aus at +00:00:01 set Testbtn off")}
bis hier hin (;) versteh ich den code (so in etwas toogle WLAN)
aber was exakt soll der Rest bewirken?
?? definiere die Variable Aus 1 Sekunde nach dem Event und setze das Tastensymbol auf off ??
Ich hab einen huebschen Button daneben steht on und off und wenn ich drauf clicke veraendert sich der Button. Prima
Im Log steht jedoch:
2013.05.15 12:25:23 1: doWLANswitch() returned:
2013.05.15 12:25:25 1: doWLANswitch(off) returned: ATD: ATH:
2013.05.15 12:25:25 3: define off at +00:00:01 set Testbtn off : off already defined, delete it first
2013.05.15 12:25:25 3: WLANschalten return value: Aus already defined, delete it first
Was bedeutet ATD und ATH? nix passiert weil da nix drin steht?
Das log hat auch Probleme den codeteil zu verstehen
Kann mir bitte noch einmal jemand helfen? Bitte, Bitte.
Danke.
Zitat2013.05.15 12:25:25 3: define off at +00:00:01 set Testbtn off : off already defined, delete it first
2013.05.15 12:25:25 3: WLANschalten return value: Aus already defined, delete it first
Das bedeutet du musst eine Zeile vor dem Anlegen des defines prüfen, ob es schon existiert und ggf. löschen.
also z.B.:
in der fhem.cfg:
define WLANschalten notify Testbtn {\
doWLANswitch("%");;\
if (defined($defs{Aus})){fhem('delete Aus')};;\
fhem("define Aus at +00:00:01 set Testbtn off")}
zu ATH & ATD kann ich dir leider nicht weiterhelfen. Irgendwie sind das Telefoncodes mit dem man Fritzboxen beeinflussen kann, ähnlich wie bei Fernabfrage eines Anrufbeantworters...
MfG, MisterEltako
Licht am ende des Tunnels:
Das folgende klappt zum schlaten des Gaeste WLAN. Somit muesste man doch auch irgendwie das generalle WLAN an Feiertragen automatisch schalten koennen, oder? Nur wie genau?
define GuestWLAN FS20 a3a3 ac
# GuestWLAN an mit FB
define guest_wlanON notify GuestWLAN:on.* {my $g_wlan=""; $g_wlan=qx(/usr/bin/ctlmgr_ctl w wlan settings/guest_ap_enabled 1);;\
$g_wlan=1; fhem "set Status_Guest_WLAN $g_wlan";;}
# GuestWLAN aus mit FB
define guest_wlanOFF notify GuestWLAN:off.* {my $g_wlan=""; $g_wlan=qx(/usr/bin/ctlmgr_ctl w wlan settings/guest_ap_enabled 0);;\
$g_wlan=0; fhem "set Status_Guest_WLAN $g_wlan";;}
Das ging ja leider nicht:
define FeiertagsWLAN at *08:30:00 {if ($we) {system('/etc/init.d/rc.net wlan$wstate &')}}
Sollte es dann nicht so lauten?:
define FeiertagsWLAN at *08:30:00 {if ($we) {system('/usr/bin/ctlmgr_ctl w wlan settings/ap_enabled 1')}}
klappt aber leider nicht....
define GuestWLAN FS20 a3a3 ac
# GuestWLAN an mit FB
define FeiertagsWLAN at *08:30:00 {\
if (($we) && (Value("GuestWLAN") eq "on")){\
my $g_wlan="";;\
$g_wlan=qx(/usr/bin/ctlmgr_ctl w wlan settings/ap_enabled 1);;\
$g_wlan=1;;\
fhem "set Status_Guest_WLAN $g_wlan";;\
}else {\
Log 3, "Es ist keine Wochenende oder Feiertag, WLAN bleibt aus!!;;\
}\
}
MfG, MisterEltako
Hallo noch mal, ich hab's nun fast geschafft.
Erst einmal für alle die fhem über Freetz ansprechen: die AT Befehle der Fritz Box gehen so lange nicht bis man manuell in Freetz die module einschaltet die in der original FW eh laufen, nämlich
"Standard packages->netcat 0.7.1"
"Busybox applets->Networking utilities->nc"
Nun aber zurück zu meinem FeiertagsWLAN
ein manuelles schalten funktioniert mit
# WLAN einschalten
define WLAN_on notify WLAN:on.* {;;\
qx(/usr/bin/ctlmgr_ctl w wlan settings/ap_enabled 1)}
mein FeiertagsWLAN (einschalten um 8:30) versuche ich somit so zu machen:
define FeiertagsWLAN at *08:30:00 {\
if (($we) eq "on")){\
my $wlan="";;\
$wlan=qx(/usr/bin/ctlmgr_ctl w wlan settings/ap_enabled 1);;\
$wlan=1;;\
fhem "set WLAN $wlan";;\
}}
Leider scheint da noch eine Kleinigkeit falsch zu sein.
Im Log lese ich.
2013.05.30 08:30:00 3: syntax error at (eval 570) line 1, near "))"
syntax error at (eval 570) line 1, near "}}"
Aber ich sehe einfach nicht wo hier eine Klammer falsch gesetzt sein soll.
Kann mir hier noch mal jemand auf die Sprünge helfen?
vielen Dank
Hallo,
das
if (($we) eq "on")){\
gehört mMn so:
if ($we){\
Grüße
Hallo,
Frage zu dem Thema "holiday". Gibt es holiday-Dateien zum herunterladen, wenn ja wo? Ich suche die für Bayern. In meinem FHEM gibt es keine '.holiday Dateien von Haus aus.
Elektrolurch
Hallo,
wenn jemand sowas für Basel(Stadt/Land) hat wäre ich auch dankbar.
Grüße
Hallo,
@Elektrolurch
ich hab dir hier mal für Bayern eine feiertag.holiday angehängt.
Ich hoffe ich hab keine Feiertage übersehen.
Grüße
P.S.: Basel hab ich mir grad eingetragen.
Ok und Danke. Bayern wird jetzt als "None" angezeigt. Heute ist wohl kein Feiertag. :-) Es regnet, also ein fhem-Tag!
hi, ich dachte ich haette es kapiert, aber es geht immer ncoh nicht....
Also ich hab zum einen diesen Code:
# WLAN
define WLAN dummy
attr WLAN devStateIcon on:WLAN_Status.1 off:WLAN_Status.0
attr WLAN group WLAN
attr WLAN room Technik
attr WLAN setList on off
attr WLAN webCmd getConfig
# WLAN einschalten
define WLAN_on notify WLAN:on.* {;;\
qx(/usr/bin/ctlmgr_ctl w wlan settings/ap_enabled 1)}
attr WLAN_on webCmd getConfig
...und das funktioniert fehlerfrei. ein Klick auf das Icon wenn WLNA aus ist und schon wird es eingeschaltet. So soll es sein.
Dann moechte ich das aber auch noch automatisieren fuer den Fall von Urlaubstagen. An diesen soll die Fritzeigene Nchtschlatung ( WLAN vormittags ausschalten(ab 8:30)) nicht greifen, bzw. fhem schaltet das WLAN einfach wieder ein.
Das wollte ich mit diesem Code erreichen:
define FeiertagsWLAN at *08:31:00 {\
if ($we){\
my $wlan="";;\
$wlan=qx(/usr/bin/ctlmgr_ctl w wlan settings/ap_enabled 1);;\
$wlan=1;;\
fhem "set WLAN $wlan";;\
}}
attr FeiertagsWLAN group WLAN
WLAN bleibt aber aus, ich she auch keinen Eintrag im LOG.
Also dachte ich mit ich nutze die Komandozeile und verzichte auf die Uhrzeit, nur um den Code auszuprobieren. Also gebe ich dort ein:
define FeiertagsWLAN {if ($we){my $wlan="";$wlan=qx(/usr/bin/ctlmgr_ctl w wlan settings/ap_enabled 1); $wlan=1; fhem "set WLAN $wlan"; }}
(Und ja die Variable $we ist gesetzt.)
Das ergibt folgende Meldung:
Unknown module {if, choose one of ALL3076 ...
Unknown command $wlan=qx(/usr/bin/ctlmgr_ctl, try help
Unknown command $wlan=1, try help
Unknown command fhem, try help
Unknown command }}, try help
Was mach ich falsch. ich versteh das nicht.