FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mbecher am 21 März 2018, 17:26:38

Titel: Schalter für Fritz.Box WLAN
Beitrag von: mbecher am 21 März 2018, 17:26:38
Hallo,

ich habe die ein oder andere Erweiterung nun in meinem FHEM. Unter anderen auch die FritzBox. Jetzt würde ich mir gerne einen Schalter "bauen" den ich in Homekit als WLAN-Schalter für das Gäste-WLAN nutzen möchte.
Dazu habe ich folgendes gemacht:

define Gast_WLAN dummy
attr Gast_WLAN alias Gast WLAN
attr icon Gast_WLAN WLAN_Status.1
attr rooms Gast_WLAN 04_Buttons,Homebridge
attr Gast_WLAN webcmd on:off
attr Gast_WLAN devStateIcon an:WLAN_Status.1 aus:WLAN_Status.0

Wie sage ich dem Schalter jetzt, dass er das Gäste_WLAN der Fritzbox an bzw. ausschalten soll? UNd wie sehe ich dann eines der beiden Logos aus devStateIcon?
Aktuell sehe ich nur eine Lampe und daneben on off.

Wenn ich über set - on oder off schalte sehe ich die Icons. Was mache ich falsch?
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Beta-User am 21 März 2018, 17:31:50
M.E. benötigt man dafür eigentlich keinen Dummy, sondern eher einen readingsProxy (siehe commandref).
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Bennemannc am 21 März 2018, 17:45:39
Hallo,

also bei mir kann ich mit "set Fritzbox guestWlan on" oder eben mit off das Gäste Wlan ein- und ausschalten.
Die Fritzbox ist mit "define Fritzbox FRITZBOX " definiert. Keine Ahnung wie man das umsetzt - ich würde es mit "eventMap" versuchen. das müsste dann irgendwie so /Fritzbox guestWlan on:on/Fritzbox guestWlan off:off aussehen.

Gruß Christoph
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Otto123 am 21 März 2018, 17:54:22
Hi,

aus meiner Sicht, aber nicht getestet:
Dies ändern
attr Gast_WLAN devStateIcon on:WLAN_Status.1 off:WLAN_Status.0
Und ein notify dazu was die Befehle vom Dummy umsetzt
define n_GastWlan notify Gast_WLAN:(on|off) set nameDerFritzbox guestWlan $EVENT

Gruß Otto
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: mbecher am 22 März 2018, 08:39:05
Hallo,

habe es jetzt wie folgt geändert:

attr alias Gast_WLAN Gast WLAN
attr devStateIcon Gast_WLAN on:WLAN_Status.1 off:WLAN_Status.0
attr icon Gast_WLAN WLAN_Status.1
attr room Gast_WLAN 04_Buttons
attr webCmd Gast_WLAN on:off


Damit bekomme ich das mit den Icons in Kombination mit dem Status hin.

Wenn ich aber den Befehl

define n_GastWlan Gast_WLAN:(on|off) set Fritzbox guestWlan $EVENT


eingebe, kommt die Meldung "Unknown module Gast_WLAN:(on|off)
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: rabehd am 22 März 2018, 08:48:01
  >:(
Zitatdefine n_GastWlan Gast_WLAN:(on|off) set Fritzbox guestWlan $EVENT
Was soll das werden?
Du musst schon alles kopieren!
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Otto123 am 22 März 2018, 08:54:08
Ich sage doch immer: Zwischen Copy & Paste gehört noch das Ding zwischen den Ohren.  ;D :-[
ZitatWas soll das werden?
ZitatUnd ein notify ...

Ja sorrry, ich habe es einfach schnell hintereinandergeschrieben  ;) Klar fehlt da das wort notify. Habe oben meinen Beitrag korrigiert.

Gruß Otto

Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: rabehd am 22 März 2018, 09:12:15
Ich habe die letzte Version erst nach der Korrektur von Otto geschrieben. Ich nehme meinen "Vorwurf" zurück.

Bezüglich
ZitatZwischen Copy & Paste gehört noch das Ding zwischen den Ohren.
Sollte man benutzen, um zu verstehen was man mit paste tut.
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Frank_Huber am 22 März 2018, 09:21:43
ich würde Dummy und Notify in ein DOIF bündeln.


defmod Gast_WLAN DOIF (abc) (set Fritzbox guestWlan on)\
DOELSEIF (xyz) (set Fritzbox guestWlan off)
attr Gast_WLAN cmdState on|off
attr Gast_WLAN devStateIcon on:on:cmd_2 initialize|initialized|off:off:cmd_1
attr Gast_WLAN do always
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: TomLee am 22 März 2018, 09:42:10
Hallo,

readingsProxy wurde ja schon vorgeschlagen und würde so aussehen:

defmod rp_FB_GWLAN1 readingsProxy Fritzbox1:box_guestWlan
attr rp_FB_GWLAN1 devStateIcon on:it_wifi@green:off off:it_wifi@red:on
attr rp_FB_GWLAN1 event-on-change-reading .*
attr rp_FB_GWLAN1 room Fritzbox
attr rp_FB_GWLAN1 setFn { return 'guestWlan on' if( $CMD eq 'on' );;;; return 'guestWlan off';;;; }
attr rp_FB_GWLAN1 setList on off
attr rp_FB_GWLAN1 valueFn { return 'on' if( $VALUE eq 'on' );;;; return 'off';;;; }


Gruß

Thomas
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Otto123 am 22 März 2018, 09:59:38
Na da haben wir doch schon drei Varianten zusammen.
@Thomas Wenn mal der Platz auf der Systemplatte eng wird  ;) Vorschlag: Einfach ein paar Semikonlons löschen  ;D
So reicht es auch (getestet):
attr rp_FB_GWLAN1 setFn { return 'guestWlan on' if( $CMD eq 'on' );; return 'guestWlan off'}
attr rp_FB_GWLAN1 valueFn { return 'on' if( $VALUE eq 'on' );; return 'off'}


Ich bin mir als Perl Unwissender immer nicht ganz sicher über die Bedeutung der ; am Code Ende vor der schließenden } - aber ich habe sie immer weggeglassen und es funktioniert. Man sieht sie aber sehr beständig in allen Beispielen.   ???

Jetzt ist noch die Frage wer gewinnt den Preis? :) Frank hat die wenigsten Zeichen verbastelt?

Gruß Otto
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: TomLee am 22 März 2018, 10:34:15
Danke für die Aufklärung, da standen bei mir schon immer 3 ? ? ? ob die vier Semikolon wirklich nötig sind.
Da werden ja jetzt mehre GB frei bei rd. 25 readingsProxys ☺
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: mbecher am 22 März 2018, 10:38:17
Okay,

das sind erstmal drei Ansätze. Mit ReadingsProxy und DOIF muss ich mich jetzt erst einmal auseinander setzen.

Melde mich, wenn was davon meine Anforderungen gelöst hat.

Ciao
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Otto123 am 22 März 2018, 10:49:44
@Thomas Ich danke Dir auch, damit hab ich  mir mal readingsProxy an einem praktischen Beispiel angeschaut und eventuell verstanden.  8)
Wenn Du 25 RP hast, hab ich noch was für Dich.
Ich habe die Doku noch mit deinem Code "abgeglichen", dabei ist folgendes entstanden:
attr rp_FB_GWLAN1 setFn {($CMD eq "on")?"guestWlan on":"guestWlan off"}
attr rp_FB_GWLAN1 valueFn {($VALUE eq "on")?"on":"off"}

Das ist, glaube ich, die kürzeste Schreibweise des if in Perl :) Zur Erklärung (so wie ich es verstehe)
{(logischer Ausdruck)?"return wenn wahr":"return wenn falsch"}

Gruß Otto
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: TomLee am 22 März 2018, 11:00:40
Damit's noch kürzer wird, hätt ich auch noch was.

attr rp_FB_GWLAN1 valueFn {($VALUE eq "on")?"on":"off"}

einfach weglassen.

So wie ich das bisher verstanden habe liefert valueFn nur den gesetzten Wert nochmal in der Fhem-Oberfläche zurück.


Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Beta-User am 22 März 2018, 11:10:45
 ;D , Danke an TomLee!

Für den Fall, dass es mal nicht nur ein reading ist, das wie hier als einzelnes Element gebraucht wird: readingsGroup...

Habe zwar grad keinen Fritzbox-Code, aber ein anderes nettes Beispiel, wie man damit Kommandos beliebig zusammenwürfeln kann (das geht nicht nur mit einzelnen readings desselben Devices, sondern auch mit mehreren Devices):
https://forum.fhem.de/index.php/topic,75020.msg668780.html#msg668780
Wäre entsprechend anzupassen, wenn jemand z.B. drei Schalter braucht, um nicht nur das Gäste-Wlan auszuschalten, sondern z.B. auch das "normale" Wlan oder DECT ;) .

Gruß, Beta-User
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: Otto123 am 22 März 2018, 11:14:17
Zitateinfach weglassen.
Ja stimmt, damit könnte man den state anders setzen. Er wird aber per Standard sowieso mit dem Kommando gesetzt, das wäre dann in dem Fall redundant.
Titel: Antw:Schalter für Fritz.Box WLAN
Beitrag von: TomLee am 22 März 2018, 17:29:19
Les ja viel quer hier, daher nochmal für die Nachwelt der kürzeste Code (denn der kommt ohne Dummy aus) zur Problemstellung zusammengefasst:

defmod rp_FB_GWLAN1 readingsProxy Fritzbox1:box_guestWlan
attr rp_FB_GWLAN1 devStateIcon on:it_wifi@green:off off:it_wifi@red:on
attr rp_FB_GWLAN1 event-on-change-reading .*
attr rp_FB_GWLAN1 room Fritzbox
attr rp_FB_GWLAN1 setFn {($CMD eq "on")?"guestWlan on":"guestWlan off"}
attr rp_FB_GWLAN1 setList on off