[gelöst] Schalten mit Dummy und Notify

Begonnen von DanHard, 23 Dezember 2014, 22:22:07

Vorheriges Thema - Nächstes Thema

DanHard

Guten Abend zusammen

Ich will mit FHEM mein Fritzbox WLAN über ein Dummy schalten.
Das mache ich mit dem Modul FRITZBOX.
Das hat bis jetzt geklappt:

1. Einbinden vom Modul FRITZBOX und schalten des WLAN über den direkten Befehl "set fritzbox wlan on/off"

define fritzbox FRITZBOX
attr fritzbox INTERVAL 600
attr fritzbox fritzBoxIP 192.168.178.1
attr fritzbox group Server
attr fritzbox room Buero
attr fritzbox verbose 5


2. Erstellen eines Dummy's mit on und off Schalter

define WLAN dummy
attr WLAN devStateIcon on:it_wifi@green off:it_wifi@red
attr WLAN setList on off


3. Da ich das WLAN auch manuell an der Box schalten kann und das
WLAN auch eine Nachtschaltung hat habe ich ein NOTIFY erstellt, das mir
den Status meines Dummy's ändert.

define WLANanaus notify fritzbox:box_wlan_2.4GHz.* set WLAN $EVTPART1


Bis dahin habe ich alles mit Suchen im Forum und mit Hilfe der Commandref geschafft.
Leider stehe ich jetzt ein bisschen auf dem Schlauch. Und irgendwie finde ich auch im Forum keinen Anhaltspunkt.

Nun habe ich mir überlegt, machst du ein:

define WLANan notify fritzbox:WLAN:.* set fritzbox wlan on

und ein:

define WLANaus notify WLAN:off set fritzbox wlan off


Nun hat alles super ausgesehen, aber sobald ich nur einmal auf "on"
oder auf "off" klicke, bin ich in einer Endlosschlaufe.

Kann mir jemand von euch bitte helfen, oder mir eine Tipp geben was
ich falsch definiere? Wahrscheinlich mache ich einen grundsätzlichen Fehler.

Danke vielmals für eure Hilfe.
Gruss
DanHard
- FHEM auf RaspberryPi B
- RFXTRX 433
- 3x IT-1500
- 3x Thermo-, Hygro-Sensor TS34C

DanHard

- FHEM auf RaspberryPi B
- RFXTRX 433
- 3x IT-1500
- 3x Thermo-, Hygro-Sensor TS34C

Rince

Bis wer hilft, der davon mehr Ahnung hat als ich:
Prinzipiell kann die der EventMonitor (gaaaaaanz unten) hier sagen, was gerade passiert. Dann siehst du schön, was hier eine Endlosschleife auslöst und warum.

Die beiden Notifies sind imho unglücklich. Warum soll on bei :.* passieren, off aber bei :off.
Ich denke das paßt nicht zusammen. Aber ich kann mich irren.

Dann scheint es so, als würde dein notify dauernd greifen, weil es immer getriggert wird. Ein event-on- change-reading könnte Abhilfe schaffen.

Aber wie gesagt, vielleicht bin ich damit auch auf dem Holzweg.
Ich muss mir bei Gelegenheit mal das Modul ansehen :)

Ansonsten schau dir mal das DOIF an.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

fiedel

Hi,

ich hab schon einige Stunden in das Thema investiert, bin aber noch nicht viel weiter gekommen: So wie es DanHard vor hat, führt es immer in eine Schleife. Auch wenn man in einer Perlfunktion auf on/off abfragt und logisch toggelt.

Mein Ansatz war "readingsProxy", der das Reading direkt als state übernimmt und somit nicht mehr durch ein externes Notify aktualisiert werden muss. Das klappt auch schon, aber geschaltet bekomme ich es nicht. Also Mein aktueller Stand: Hilfe bei Andre holen, oder mit Dummy + readingsProxy weiterexperimentieren. Ganz schön harte Nuss, oder ich sehe die einfache Lösung nicht...  ;D

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

justme1968

ich würde auch einen readingsProxy verwenden.

warum schaltet er nicht?

poste doch mal deine komplette definition.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fiedel

#5
Sooooo, läuft! Sogar ohne Andre fragen.  ;) Ich hatte mir total dumme Syntaxfehler selbst eingebaut. So sieht es jetzt aus und lässt sich auch per Klick direkt auf das Icon schalten (so wie ich das perfekterweise haben wollte):

define my_FB FRITZBOX
...

define WLAN readingsProxy my_FB:box_guestWlan
attr WLAN devStateIcon on:it_wifi@green:off off:it_wifi@red:on
attr WLAN setFn {($CMD eq "off")?"guestWlan off":"guestWlan on";;}
attr WLAN setList on off
attr WLAN valueFn {$LASTCMD}
attr WLAN webCmd on:off


Andre, falls daran noch etwas überflüssig ist, bitte korrigieren. Ich habe readingsProxy noch nicht ganz verstanden. Z.B. wo kommen die Variablen wie "$CMD" her? Wie arbeitet "{($CMD eq "on")?"off":"on";;}" genau (wie setzt es den Vergleich auf "on" dann auf "off":"on" um? Naja, mit jedem Experiment wird das Verständnis besser...  8)

Übrigens schalte ich hier das Gast WLAN, damit ich mich mit dem Notebook beim Testen nicht jedes Mal selbst abschieße. ;D

Gruß und schöne Weihnachten!

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

justme1968

gib zu du hast den fehler gesehen als du vor dem posten noch mal genau hin geschaut hast :)

der code schaut gut aus. du kannst mal versuchen die valueFn weg zu lassen. in diesem fall sollte es trotzdem gehen.

wenn du in fhem ein set auf den readingsProxy machst wird aufgerufen was du als setFn konfiguriert hast und  $CMD ist das kommando das beim set angegeben wurde. das was die setFn dann zurück gibt wird dann für ein set an das eigentliche device verwendet.

gruss
  andre

ps: da du mit dem readingsProxy automatisch auch ein off-for-timer bekommst sobald es ein on und ein off gibt kannst du mit einem off-for-timer 15 auch auf das normale netz testen wenn du so weit bist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DanHard

Zitat von: fiedel am 25 Dezember 2014, 11:51:24
Sooooo, läuft! Sogar ohne Andre fragen.  ;) Ich hatte mir total dumme Syntaxfehler selbst eingebaut. So sieht es jetzt aus und lässt sich auch per Klick direkt auf das Icon schalten (so wie ich das perfekterweise haben wollte):

define my_FB FRITZBOX
...

define WLAN readingsProxy my_FB:box_guestWlan
attr WLAN devStateIcon on:it_wifi@green:off off:it_wifi@red:on
attr WLAN setFn {($CMD eq "off")?"guestWlan off":"guestWlan on";;}
attr WLAN setList on off
attr WLAN valueFn {$LASTCMD}
attr WLAN webCmd on:off


Andre, falls daran noch etwas überflüssig ist, bitte korrigieren. Ich habe readingsProxy noch nicht ganz verstanden. Z.B. wo kommen die Variablen wie "$CMD" her? Wie arbeitet "{($CMD eq "on")?"off":"on";;}" genau (wie setzt es den Vergleich auf "on" dann auf "off":"on" um? Naja, mit jedem Experiment wird das Verständnis besser...  8)

Übrigens schalte ich hier das Gast WLAN, damit ich mich mit dem Notebook beim Testen nicht jedes Mal selbst abschieße. ;D

Gruß und schöne Weihnachten!

Frank

Danke für deine Hilfe.
Habe es nun zum testen mal auch mit dem GastWLAN getestet, funktioniert so wunderbar. Danke nochmals!
Wenn ich das aber auf das normale WLAN anwende funktioniert es zwar, aber wenn ich das richtig sehe wird der STATE aber
nicht aktualisiert wenn das WLAN in die Nachschalt geht oder wenn ich manuell auf der Weboberfläche deaktiviere.
Oder hab ich da was falsch verstanden?
- FHEM auf RaspberryPi B
- RFXTRX 433
- 3x IT-1500
- 3x Thermo-, Hygro-Sensor TS34C

DanHard

Zitat von: justme1968 am 25 Dezember 2014, 10:56:40
ich würde auch einen readingsProxy verwenden.

warum schaltet er nicht?

poste doch mal deine komplette definition.

gruss
  andre

Ist genau so konfiguriert wie im ersten Post.
Oder welche angaben musst du noch haben?
- FHEM auf RaspberryPi B
- RFXTRX 433
- 3x IT-1500
- 3x Thermo-, Hygro-Sensor TS34C

justme1968

die frage war an fidel :)

wenn du das normale wlan schaltest musst du auch im define das reading ändern. nicht nur in der setFn.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

noch etwas: in der setFn kannst du $READING verwenden. dann muss es nicht an zwei stellen synchron gehalten werden. 
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DanHard

#11
Zitat von: justme1968 am 25 Dezember 2014, 13:29:42
die frage war an fidel :)

wenn du das normale wlan schaltest musst du auch im define das reading ändern. nicht nur in der setFn.

gruß
  andre

Ich habe das Gastwlan so konfigiriert wie von dir beschrieben.
define WLANGast readingsProxy fritzbox:box_guestWlan
attr WLANGast devStateIcon on:it_wifi@green:off off:it_wifi@red:on
attr WLANGast setFn {($CMD eq "off")?"guestWlan off":"guestWlan on";;}
attr WLANGast setList on off
attr WLANGast valueFn {$LASTCMD}
attr WLANGast webCmd on:off


Wenn ich nun mein GastWLAN über die Weboberfläche deaktiviere und
mit set fritzbox update die Readings aktuallisiere wird der Status der STATE
des GastWLan's nicht aktuallisiert.
Internals:
   CFGFN
   DEF        fritzbox:box_guestWlan
   DEVICE     fritzbox
   NAME       WLANGast
   NR         794
   NTFY_ORDER 50-WLANGast
   READING    box_guestWlan
   STATE      off
   TYPE       readingsProxy
   CHANGETIME:
   Content:
     fritzbox   1
   Helper:
     Dblog:
       State:
         Mydblog:
           TIME       1419510801.06322
           VALUE      off
   Readings:
     2014-12-25 13:22:12   lastCmd         off
     2014-12-25 13:33:21   state           off
Attributes:
   devStateIcon on:it_wifi@green:off off:it_wifi@red:on
   setFn      {($CMD eq "off")?"guestWlan off":"guestWlan on";}
   setList    on off
   valueFn    {$LASTCMD}
   webCmd     on:off


der State ist aber on laut Readings von fritzbox.

- FHEM auf RaspberryPi B
- RFXTRX 433
- 3x IT-1500
- 3x Thermo-, Hygro-Sensor TS34C

justme1968

lösch mal bitte die valueFn

gruß
andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DanHard

Zitat von: justme1968 am 25 Dezember 2014, 13:39:41
lösch mal bitte die valueFn

gruß
andre

Danke das war die Lösung.
Nun habe ich das ganze umgebaut für das normale WLAN:
Internals:
   CFGFN
   DEF        fritzbox:box_wlan_2.4GHz
   DEVICE     fritzbox
   NAME       WLAN
   NR         3079
   NTFY_ORDER 50-WLAN
   READING    box_wlan_2.4GHz
   STATE      on
   TYPE       readingsProxy
   CHANGETIME:
   Content:
     fritzbox   1
   Helper:
     Dblog:
       State:
         Mydblog:
           TIME       1419512001.55953
           VALUE      on
   Readings:
     2014-12-25 13:53:07   lastCmd         off
     2014-12-25 13:53:21   state           on
Attributes:
   devStateIcon on:it_wifi@green:off off:it_wifi@red:on
   setFn      {($CMD eq "off")?"wlan_2.4GHz off":"wlan_2.4GHz on";}
   setList    on off
   webCmd     on:off


Wieso kommt da ein Fehler wenn ich auf on oder off klicke?
Unknown argument wlan_2.4GHz or wrong parameter(s), choose one of alarm convertMOH convertRingTone createPwdFile customerRingTone diversity guestWlan:on,off moh ring sendMail startRadio tam update:noArg wlan:on,off
- FHEM auf RaspberryPi B
- RFXTRX 433
- 3x IT-1500
- 3x Thermo-, Hygro-Sensor TS34C

fiedel

#14
Da stimmt das regex im setFn nicht. Probier mal "wlan:off" und "wlan:on"!

Edit:
Zitat von: justme1968 am 25 Dezember 2014, 13:22:30
gib zu du hast den fehler gesehen als du vor dem posten noch mal genau hin geschaut hast :)

Das hast du gesehen?  ;D Ich hatte versehentlich eine der alten Versionen gepostet und dann schnell durch die funktionierende ersetzt.  ;) Vielen Dank noch mal fürs unter die Arme greifen!
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423