Hauptmenü

WLAN mit Toggle schalten

Begonnen von Gunther, 10 März 2013, 23:14:08

Vorheriges Thema - Nächstes Thema

Gunther

Generell funktioniert bei mir das Schalten des WLANs.

Nun versuche ich mit dem "UntoggleIndirect"-Befehl gmäß Wiki das Ganze einzurichten.

Im Wiki steht:
define <name> notify <Sender> {UntoggleIndirect("<Sender>","<Aktor>","<Dimm_Wert>")}

Mein Coding:

define haus_wlan2.sender FS20 32122134 2121
attr haus_wlan.sender fm_type on-off
attr haus_wlan.sender fm_view 0,0
attr haus_wlan.sender room Haus
define WLANschalten notify haus_wlan.sender {FB_WLANswitch("%")}
define WLANschalten2 notify haus_wlan2.sender {UntoggleIndirect("haus_wlan2.sender","FB_WLANswitch("%")","toggle")}


Meine letzte Zeile scheint nicht korrekt zu sein, da ich nicht weiß, was hier mein Sender und mein Dimm_Wert sind.

Fehlermeldung im Protokoll:
2013.03.10 23:00:40 2: FS20 haus_wlan2.sender toggle
Bareword found where operator expected at (eval 20565) line 1, near ""FB_WLANswitch("toggle"
   (Missing operator before toggle?)
String found where operator expected at (eval 20565) line 1, near "toggle")""
2013.03.10 23:00:40 3: WLANschalten2 return value: syntax error at (eval 20565) line 1, near ""FB_WLANswitch("toggle"

Freue mich über Hilfe.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Zrrronggg!

Ich verstehe nicht, was du machen willst. Diese üblichen 2-3 Einleitungssätze bei deinem Post, wo du sagst, was du überhaupt für ein Ziel hast fehlen.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Gunther

Ups...stimmt!

Also: Ich habe FS20-Schalter mit Doppelbelegung, kann also nicht auf einer Taste on und auf der anderen off senden. Anstelle dessen wird toggle gesendet.
Nun möchte ich, dass der "richtige" Befehl gesendet und geloggt wird.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

sTaN

Will ebenfalls mein Gäste-WLAN per FS20 S4A Schalter "togglen". Bin leider noch nicht weiter dazu gekommen.
Mit meiner FS20 Fernbedienung klappt es wie folgt:

define GuestWLAN FS20 33143314 3341
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";;}


Mit dem S4A Schalter sollte es dann so gehen:

define GuestWLAN_S4A FS20 a3a3 03
define GuestWLAN_Toggle notify GuestWLAN_S4A {UntoggleIndirect("GuestWLAN_S4A","GuestWLAN","")}


Dimm-Wert lässt man einfach leer. Aber wie gesagt ohne Gewähr und auch bei mir noch nicht im Betrieb.
Ich denke bei mir wird die größere Herausforderung, dass die Icons immer richtig dargestellt werden.

Gruß
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Zrrronggg!

ZitatAlso: Ich habe FS20-Schalter mit Doppelbelegung, kann also nicht auf einer Taste on und auf der anderen off senden. Anstelle dessen wird toggle gesendet.
Nun möchte ich, dass der "richtige" Befehl gesendet und geloggt wird.

Ganz sicher bin ich mir immer noch nicht was du meinst.

Angenommen, das Ziel ist, aus wiederholten toggel Befehlen on und off zu machen, dann mache ich das so (konkretes Beispiel aus meiner config)

Terrassen_Licht ist ein FS20 FB Kanal der toggelt
Licht_Terrasse hingegen ist der Tatsächliche FS20 Aktor

define act_on_Terrassen_Licht_toggle notify Terrassen_Licht  { if (Value("Licht_Terrasse") eq "off") { fhem("set Licht_Terrasse on") } else { fhem("set Licht_Terrasse off") }}


Simpel, funktioniert bestens. Da musst du eben nur "Licht_Terrasse" gegen was immer dein WLAN schaltet ersetzen.
Sicher macht die ganze "untoggle" Mimik noch irgendwas darüber hinausgehende das ich gerade nicht erkennen kann.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Elluminatus

Hallo sTaN, hallo Forum

ich möchte mit einem FS20S4A Schalter indirekt an der FritzBox das Wlan an und ausschlten.

Zitat von: sTaN am 14 März 2013, 18:19:31
Mit dem S4A Schalter sollte es dann so gehen:

define GuestWLAN_S4A FS20 a3a3 03
define GuestWLAN_Toggle notify GuestWLAN_S4A {UntoggleIndirect("GuestWLAN_S4A","GuestWLAN","")}


Hab versucht dies bei mir umzusetzen. Nutze dies für das ganze Wlan,nicht nur für das Gäste Wlan.

- schalten im Web geht
- schalten von einer FS20 Fernbedienung die einfache Kanalzahl mit einem on und einem off Schalter hat geht auch

Nur von einem FS20 S4A mit 4 Kanalen klappt es nicht. Wenn ich es wie oben eingebe kann ich das Wlan einmalig ausschalten...


attr OG.SZ.FB.Bett4 alias Schlafzimmer Bett Taste 4
attr OG.SZ.FB.Bett4 model fs20s4a
define OG.SZ.FB.Bett4.IND notify OG.SZ.FB.Bett4 {UntoggleIndirect ("OG.SZ.FB.Bett4", "FritzBox wlan", "")}

# Schnittstelle FritzBox
define FritzBox FRITZBOX 192.168.0.2
attr FritzBox INTERVAL 600
attr FritzBox alias FritzBox 6360
attr FritzBox defaultCallerName Fhem
attr FritzBox event-on-change-reading .*
attr FritzBox event-on-update-reading box_powerRate,wlan
attr FritzBox room Technik
attr FritzBox icon it_router
# attr FritzBox telnetUser fhem
# attr FritzBox forceTelnetConnection 1
attr FritzBox boxUser Pi
attr FritzBox allowTR064Command 1


Im log kann ich ersehen, dass immer nur ein "off" Befehl ausgegeben wird.Hier im Log die Tastenauslöser

2016.01.26 22:24:47 3: FRITZBOX: set FritzBox wlan off
2016.01.26 22:24:48 3: FRITZBOX: set FritzBox wlan off
2016.01.26 22:25:03 3: FRITZBOX: set FritzBox wlan off
2016.01.26 22:25:04 3: FRITZBOX: set FritzBox wlan off
2016.01.26 22:25:25 3: FRITZBOX: set FritzBox wlan off
2016.01.26 22:25:25 3: FRITZBOX: set FritzBox wlan off


Hat jemand eine Idee wie ich dies mit UntoggleIndirect lösen kann?

Gruß Elluminatus

Zrrronggg!

Machs mal so wie ich es einen Post weiter oben dargestellt habe.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Elluminatus

#8
Hi, danke für die Antwort.
Habe es mal abgeändert.

define OG.SZ.FB.Bett4.IND notify OG.SZ.FB.Bett4  { if (Value("FB_WLAN") eq "off") { fhem("set FritzBox wlan off") } else { fhem("set FritzBox wlan on") }}


FB_WLAN hab ich nur wie folgt eingerichtet.

# Dummy WLAN Gesamt
define FB_WLAN dummy


Fehlt hier noch etwas?

Dies sagt das Log:

2016.01.27 22:37:29 4: FS20 OG.SZ.FB.Bett4 toggle
2016.01.27 22:37:29 5: Triggering OG.SZ.FB.Bett4 (1 changes)
2016.01.27 22:37:29 5: Notify loop for OG.SZ.FB.Bett4 toggle
2016.01.27 22:37:29 5: Triggering OG.SZ.FB.Bett4.IND
2016.01.27 22:37:29 4: OG.SZ.FB.Bett4.IND exec { if (Value("FB_WLAN") eq "off") { fhem("set FritzBox wlan off") } else { fhem("set FritzBox wlan on") }}
2016.01.27 22:37:29 5: Cmd: >{ if (Value("FB_WLAN") eq "off") { fhem("set FritzBox wlan off") } else { fhem("set FritzBox wlan on") }}<
2016.01.27 22:37:29 5: Cmd: >set FritzBox wlan on<
2016.01.27 22:37:29 3: FRITZBOX: set FritzBox wlan on
2016.01.27 22:37:29 4: FRITZBOX FritzBox: Set_Cmd_Start.1907 Fork process FRITZBOX_Wlan_Run_Web
2016.01.27 22:37:29 4: BlockingCall (FRITZBOX_Wlan_Run_Web): created child (2156), uses telnetForBlockingFn_1453930569 to connect back
2016.01.27 22:37:29 5: Triggering FritzBox (1 changes)
2016.01.27 22:37:29 5: Notify loop for FritzBox wlan on


Dort sehe ich das ich einen Loop auslöse. Bei OG.SZ.FB.Bett4 hab ich einen toggle. Ist dies der Fehler? Müßte ich nicht hier ein on oder off als ausgabe haben?

Hab daraufhin noch mal die cfg auf untoggleindirect zurückgeändert

define OG.SZ.FB.Bett4.IND notify OG.SZ.FB.Bett4 {UntoggleIndirect ("OG.SZ.FB.Bett4", "FritzBox wlan", "")}

HIer sagt das Log:
2016.01.27 23:20:45 4: FS20 OG.SZ.FB.Bett4 off
2016.01.27 23:20:45 5: Triggering OG.SZ.FB.Bett4 (1 changes)
2016.01.27 23:20:45 5: Notify loop for OG.SZ.FB.Bett4 off
2016.01.27 23:20:45 5: Triggering OG.SZ.FB.Bett4.IND
2016.01.27 23:20:45 4: OG.SZ.FB.Bett4.IND exec {UntoggleIndirect ("OG.SZ.FB.Bett4", "FritzBox wlan", "")}
2016.01.27 23:20:45 5: Cmd: >{UntoggleIndirect ("OG.SZ.FB.Bett4", "FritzBox wlan", "")}<
2016.01.27 23:20:45 4: UntoggleIndirect(OG.SZ.FB.Bett4, FritzBox wlan, )
2016.01.27 23:20:45 5: Cmd: >set FritzBox wlan off<
2016.01.27 23:20:45 3: FRITZBOX: set FritzBox wlan off
2016.01.27 23:20:45 5: Triggering FritzBox (1 changes)
2016.01.27 23:20:45 5: Notify loop for FritzBox wlan off
2016.01.27 23:20:46 5: FRITZBOX FritzBox: Web_Query.4396 Request data via API luaQuery.
2016.01.27 23:20:46 4: WEBphone_80.187.112.160_1336 GET /fhem?XHR=1&cmd=set%20OG.SZ.FB.Bett4%20on; BUFLEN:0
2016.01.27 23:20:46 5: Cmd: >set OG.SZ.FB.Bett4 on<
2016.01.27 23:20:46 3: FS20 set OG.SZ.FB.Bett4 on
2016.01.27 23:20:46 5: CUL_0 sending F05acfc11
2016.01.27 23:20:46 5: SW: F05acfc11
2016.01.27 23:20:46 5: Triggering OG.SZ.FB.Bett4 (1 changes)
2016.01.27 23:20:46 5: Notify loop for OG.SZ.FB.Bett4 on
2016.01.27 23:20:46 5: Triggering OG.SZ.FB.Bett4.IND
2016.01.27 23:20:46 4: OG.SZ.FB.Bett4.IND exec {UntoggleIndirect ("OG.SZ.FB.Bett4", "FritzBox wlan", "")}
2016.01.27 23:20:46 5: Cmd: >{UntoggleIndirect ("OG.SZ.FB.Bett4", "FritzBox wlan", "")}<
2016.01.27 23:20:46 4: UntoggleIndirect(OG.SZ.FB.Bett4, FritzBox wlan, )
2016.01.27 23:20:46 5: Cmd: >set FritzBox wlan on<
2016.01.27 23:20:46 3: FRITZBOX: set FritzBox wlan on
2016.01.27 23:20:46 5: Triggering FritzBox (1 changes)
2016.01.27 23:20:46 5: Notify loop for FritzBox wlan on


Zur Erklärung hier hab ich am S4A einmal den Taster 4 gedrückt, Wlan ging an der Fritzbox aus. Dann habe ich dreimal im Abstand von 4 Sekunden den Schalter 4 gedrückt. Es passierte aber nichts mehr, kein einschalten.

Im Log sieht man: gleicher Loop.

Was kann ich tun?

Gruß E.

Zrrronggg!

#9
Ich sehe 2 Probleme:

1.
Der Sinn meines Konstrukts ist es, zu prüfen, ober der aktuelle Zustand des zu schaltenden Aktors gerade ON oder OFF ist.

Dazu wäre es natürlich erforderlich das man auch den Zustand des zu schaltenden Aktors prüft und NICHT IRGENDWAS ANDERES.

Du willst als wissen, ob dein Aktor FritzBox wlan gerad on oder off ist und ihn je nach dem off oder on zu schalten. Da wäre es schon SEHR HILFREICH dann auch den Zustand von FritzBox wlan zu prüfen und nicht den irgendeines Dummys namens FB_WLAN. Woher soll FB_WLAN den Schaltzustand von  FritzBox wlan kennen?

2. Aktornamen dürfgen in FHEM eigentlich keine Leerzeichen enthalten.
Die Zeile "set FritzBox wlan off" setzt daher nicht etwa einen Aktor namens FritzBox wlan in den Zustand off sondern vielmehr einen Aktor FritzBox in den Zustand wlan.

Das ist sicher nicht was du willst und dürfte unerwünschte Effekte hervorrufen. Wie hast du denn FritzBox bzw FritzBox wlan definiert? Offenbar ja keineswegs so, wie in deinem ersten Post beschrieben.

Ausserdem: Die Loop scheint aber noch in dem Teil zu liegen, der als externer Befehl dann die WLAN Schnittstelle tatsächlich bedient, da ich keine Fritzbox habe, kann ich dir hierzu aber nichts sagen. Aber in jedem Fall wird schon wegen 1. und 2. dein Konstrukt nicht funktionieren.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Bennemannc

Hallo,

ich habe HM und habe das dort mit einem virtuellen Actor gelöst. Der Funksender schaltet den Actor im toggle mode und das notify reagiert auf die Zustandsänderung des Actors. Der kann nur zwei Zustände annehmen on/off und die schleife ich mit dem notify an "set FritzBox wlan ($EVENT)" durch. Dabei prüfe ich nicht, welchen Zustand das Wlan auf der Box hat. Der Nachteil ist, wenn man die Box mit dem Wlan-Knopf an der Box betätigt, hat man eine "Leerschaltung".
Vielleicht kann man das ja auch mit FS20 umsetzen. Durch diese Konstruktion habe ich das mit untoggle und CO gespart.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Elluminatus

Hallo Leute,

ich hab es geschafft, vielen Dank Zrrronggg! und alle anderen. Es ist letztendlich wie bereits geschrieben

define act_on_Terrassen_Licht_toggle notify Terrassen_Licht  { if (Value("Licht_Terrasse") eq "off") { fhem("set Licht_Terrasse on") } else { fhem("set Licht_Terrasse off") }}


ist die logische Grundlage für dieses Problem.
Danke nochmal.

Gruß Elluminatus