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?
M.E. benötigt man dafür eigentlich keinen Dummy, sondern eher einen readingsProxy (siehe commandref).
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
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
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)
>:(
Zitatdefine n_GastWlan Gast_WLAN:(on|off) set Fritzbox guestWlan $EVENT
Was soll das werden?
Du musst schon alles kopieren!
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
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.
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
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
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
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 ☺
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
@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
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.
;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
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.
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