FHEM Forum

FHEM => Automatisierung => Thema gestartet von: prime1009 am 06 Oktober 2013, 20:23:51

Titel: If mit param state Homematic
Beitrag von: prime1009 am 06 Oktober 2013, 20:23:51
Hi,
leider funktioniert die Funktion nicht. Ich bin leider nicht so tief in perl um den Fehler zu finden oder seh den Wald vor lauter Bäumen nicht.

Der Code define Test3 notify Tuer {if ({fhem("get Eingang param state") eq "off"})   {fhem("set Treppe on-for-timer 30")} } funktioniert leider nicht.

Im direktmodus gibt die Funktion {fhem("get Eingang param state") eq "off"} den Wert 1 zurück wenn Eingang off ist. Bei Eingang on gibt es keinen Returnwert.

Sieht jemand den Fehler?

Vielen Dank im Vorraus!
Titel: Aw: If mit param state Homematic
Beitrag von: Ganneff am 07 Oktober 2013, 15:55:35
Zitat von: prime1009 schrieb am So, 06 Oktober 2013 20:23Hi,
leider funktioniert die Funktion nicht. Ich bin leider nicht so tief in perl um den Fehler zu finden oder seh den Wald vor lauter Bäumen nicht.

Der Code define Test3 notify Tuer {if ({fhem("get Eingang param state") eq "off"})   {fhem("set Treppe on-for-timer 30")} } funktioniert leider nicht.

Check mal deine Klammern, du hast ein paar viele {}, wären meine 2¢. Du hast die äusseren {} ums Perl zu starten, gefolgt von dann nochmal {} rund um die if condition. Aber da bist Du bereits in perl und brauchst die nicht mehr.
Titel: Aw: If mit param state Homematic
Beitrag von: betateilchen am 07 Oktober 2013, 16:11:00
eigentlich willst Du doch nur das Licht anmachen, wenn die Tür aufgeht, oder?

define Test3 notify Tuer.off.* set Treppe on-for-timer 30
Titel: Aw: If mit param state Homematic
Beitrag von: prime1009 am 08 Oktober 2013, 11:00:34
Zitateigentlich willst Du doch nur das Licht anmachen, wenn die Tür aufgeht, oder?

Nicht so ganz!

Wenn ich das Licht(Eingang) eingeschaltet habe und dann geht die Tür(Tuer) auf, wird das Licht nach dem Timer ausgeschaltet was aber nicht darf da ich es ja manuell eingeschaltet habe.

Daher soll der Timer nur starten, wenn das Licht(Eingang) aus ist.

Mit den Klammer werde ich heute Abend mal testen.
Titel: Aw: If mit param state Homematic
Beitrag von: betateilchen am 08 Oktober 2013, 11:04:59
Ich glaube, Du denkst viel zu kompliziert.

Beschreibe doch bitte mal den logischen zeitlichen Ablauf zwischen Lichtschalten und Türöffnen und wann genau was passieren soll.

Titel: Aw: If mit param state Homematic
Beitrag von: prime1009 am 08 Oktober 2013, 13:13:04
Das Licht(Eingang) wird über einen Bewegungsmelder(Tuer) gesteuert, der bei Auslösung den Timer für das Licht startet. Das Funktioniert auch Problemlos.

Wenn ich allerdings abends mal weg gehe, möchte ich das das Licht nicht nur bei Bewegung angeht, sondern wären meiner Abwesenheit permanent an ist.

Das kann ich auch einschalten und es brennt solange ohne Probleme bis der Bewegungsmelder ausgelöst wird und den Timer für das Licht startet. Nach Ablauf des Times ist es dann aus mit dem Licht, obwohl ich noch nicht zu Hause bin.

Zum Testen habe ich allerding nicht Eingang selber schalten lassen sondern Ersatzweise die Treppe. Im Programmcode muss Treppe noch durch Eingang ersetzt werden (also wenn Licht schon an ist dann mache nichts)

Ich hoffe jetzt ist es klarer.
Titel: Aw: If mit param state Homematic
Beitrag von: betateilchen am 08 Oktober 2013, 13:24:06
define Test3 notify Tuer.off.* {if(Value('irgendeinLichtschalter') ne 'on') {fhem('set Treppe on-for-timer 30')}

Also nur wenn der Lichtschalter nicht schon "on" ist, wird er auf "on-for-timer" geschaltet. Anderenfalls passier gar nix.
Titel: Aw: If mit param state Homematic
Beitrag von: prime1009 am 08 Oktober 2013, 14:19:43
Genau so soll es sein!
Titel: Aw: If mit param state Homematic
Beitrag von: prime1009 am 08 Oktober 2013, 19:35:14
Das ändern der Klammern in define Test3 notify Tuer {if (fhem("get Eingang param state") eq "off") fhem("set Treppe on-for-timer 10")} hat leider auch nichts gebracht.

Wenn ich allerdings die Prüfung eq in ne ändere findet die Schaltung immer statt.
define Test3 notify Tuer {if ({fhem("get Eingang param state")} ne "off") {fhem("set Treppe on-for-timer 10")}}

Irgendwie schein der Vergleich auf > eq "off" < nicht zu funktionieren.

Im Direktmodus bring der Aufruf {({fhem("get Eingang param state")} ne "off")} als Rückgabewert eine
1 wenn Eingang = off und
nichts wenn Eingang = on!
Titel: Aw: If mit param state Homematic
Beitrag von: MisterEltako am 09 Oktober 2013, 07:00:51
Dann versuche es einmal so:

define Test3 notify Tuer {\
    my $Status = Value("Eingang");;\
    Log 3, "Der Status von Eingang ist: $Status";;\
    if ($Status != 1) {fhem("set Treppe on-for-timer 10")}}


So findest du den Fehler vielleicht leichter!

Wenn das dann funktioniert, kannst du wieder zu:

define Test3 notify Tuer {if (Value("Eingang") != 1) {fhem("set Treppe on-for-timer 10")}}

zurückkehren.

MfG, MisterEltako
Titel: Aw: If mit param state Homematic
Beitrag von: prime1009 am 09 Oktober 2013, 08:48:37
Vielen Dank für den Hinweis!

so funktioniert es jetzt:define Test3 notify Tuer {if (Value("Eingang") eq "off") {fhem("set Treppe on-for-timer 10")}}