FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: vw2audi am 13 Oktober 2015, 00:09:44

Titel: Fritzbox Gerät bei Anruf schalten
Beitrag von: vw2audi am 13 Oktober 2015, 00:09:44
Hallo Leute ich schaffe es nicht einen ELSE Befehlz zu implementieren.....
Das Licht soll eingeschaltet werden, wenn die Nummer **751 intern angerufen wird.
Soweit geht auch alles (Code1) in Code 2 möchte ich gerne, dass wenn das Licht bereits an ist dass es wieder ausgeschaltet wird.
Leider funktioniert es nicht, nur warum?

(Code1)
# **751 FritzBox_Licht_Wohnzimmer an/aus
define not_FritzBox_Licht_Wohnzimmer notify FritzBox {\
fhem ("set WZ.LAMPE1 on")\
if (ReadingsVal("FritzBox","external_number","") eq "**751") && (Value("WZ.LAMPE1") eq "off")\
}

(Code2)
# **751 FritzBox_Licht_Wohnzimmer an/aus
define not_FritzBox_Licht_Wohnzimmer notify FritzBox {\
fhem ("set WZ.LAMPE1 on")\
if (ReadingsVal("FritzBox","external_number","") eq "**751") && (Value("WZ.LAMPE1") eq "off")\
    else {\
    fhem ("set WZ.LAMPE1 off")\
    }\
}

Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: Ellert am 13 Oktober 2015, 00:29:20
Bist Du sicher, dass das nachgestellte if mit else-Zweig eine gültige Perl-Syntax ist.
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: C0mmanda am 13 Oktober 2015, 07:29:59
Es fehlt auch das Event würde ich sagen.

define not_FritzBox_Licht_Wohnzimmer notify FritzBox {\

Muss doch eher sowas wie

define not_FritzBox_Licht_Wohnzimmer notify FritzBox:external_number {\
sein.

Ansonsten sieht mir der Rest auch nicht ganz sauber aus. Ich würde zuerst die if-Bedingung schreiben, dann den Befehl, Klammern sind doch auch zuviel?

Ich würde es eher so machen:


(Code1)
# **751 FritzBox_Licht_Wohnzimmer an/aus
define not_FritzBox_Licht_Wohnzimmer notify FritzBox:external_number {\
if (ReadingsVal("FritzBox","external_number","") eq "**751" && Value("WZ.LAMPE1") eq "off") {\
fhem ("set WZ.LAMPE1 on");}\
}


Mit der else-Bedingung in Code2 bin ich mir auch nicht sicher....

grtz
C0mmanda
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: CoolTux am 13 Oktober 2015, 08:10:23
Event hat er ja. Es wird state genommen. Scheint ja wohl auch zu klappen


define not_FritzBox_Licht_Wohnzimmer notify FritzBox {\
if (ReadingsVal("FritzBox","external_number","") eq "**751") && (Value("WZ.LAMPE1") eq "off")\
    fhem ("set WZ.LAMPE1 on")\
else {\
    fhem ("set WZ.LAMPE1 off")\
    }\
}


Alerdings ist der Code oder Besser die Logik Blödsin. Er fragt ob die Lampe aus ist. wenn ja mach sie an wenn sie nicht aus ist mach sie aus. HALLO  ???
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: marvin78 am 13 Oktober 2015, 08:12:04
Naja. Das nennt man toogle. Das kann schon eine sinnvolle Steuerung sein.
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: CoolTux am 13 Oktober 2015, 08:15:13
Sinnvoll aber doch nur wenn der Zustand ein anderer ist wie aus. Oder übersehe ich da was. Ok es gubt noch mehr wie an und aus. Kann ja auch ein Dimmer sein.
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: marvin78 am 13 Oktober 2015, 08:19:24
Hm. Nein. Ist die Lampe aus, wird sie eingeschaltet, ist sie an (oder was anderes), wird sie aus geschaltet. Der "Fehler" liegt hier woanders. Es löst jede external-number ein off aus. Ich würde hier mit FILTER=STATE=off u.ä. arbeiten

Ich würde hier auch das event aus FB_CALLMONITOR noch verfeinern und das Reading event als Trigger verwenden.
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: CoolTux am 13 Oktober 2015, 08:39:49
Gut habe eben noch mal gaaaaanz lange auf den Schirm gestarrt und meinen Denkfehler gesehen. Das else gehört zum if wird also das if nicht erfüllt also die Lampe ist nicht aus erfolgt das else, nämlich mache sie aus.
Mein Fehler. Ist wohl noch zu frü für mich. Sorry fürs verwirren.


Grüße
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: vw2audi am 13 Oktober 2015, 17:16:07
Hallo und danke für die Vielen Ideen,

ich habe auch noch einmal etwas versucht.

Die Logik dahinter ist die, dass ich mit meinem Telefon die Lampe im Wohnzimmer an und ausschalten kann.
Was mich etwas wunder it folgendes.....

Ich habe es jetzt auch einmal mit dem Befehl "toggle" versucht. Leider mit einem merkwürdigen Verhalten .....

# **751 FritzBox_Licht_Wohnzimmer an/aus
define not_FritzBox_Licht_Wohnzimmer notify FritzBox {\
fhem ("set WZ.LAMPE1 toggle")\
if (ReadingsVal("FritzBox","external_number","") eq "**751") && (Value("WZ.LAMPE1") eq "off")\
}

Wenn ich jetzt anrufe wird die Lamoe auch so, wie ich es wollte geschaltet, jedoch, wenn ich wieder auflege geht die Lampe gerade wieder in den vorherigen Zustand zurück ?????????????

Was das?????
Titel: Antw:Fritzbox Gerät bei Anruf schalten
Beitrag von: marvin78 am 13 Oktober 2015, 17:25:51
Logisch. Du toggelst ja auch bei jedem Event der FritzBox die Lampe. Beschäftige dich ein wenig mit Events. Dazu solltest du dir ansehen, wie man sie einschränkt, wie man darauf triggert usw. Ich hatte ja schon geschrieben, dass man hier das notify besser auf das Event "event" einschränkt. Das toggle ist gut, aber wofür brauchst du das off?


FritzBox:event:.call {
  fhem ("set WZ.LAMPE1 toggle") if (ReadingsVal("FritzBox","external_number","") eq "**751");
}


sollte den Trick machen. Keine Garantie, dass das Event 100%ig richtig ist. Aber das findest du ja leicht im Eventmonitor heraus.

Bitte verwende Code Tags. Deine Codes kann so niemand lesen. Danke!