If mit param state Homematic

Begonnen von prime1009, 06 Oktober 2013, 20:23:51

Vorheriges Thema - Nächstes Thema

prime1009

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!
FHEM 5.7 auf RasPi3
Homematic, IT, FS20, Cams (SSCAM), CUL, HueBridge, HarmonyHub, LIGHTIFY, TelegramBot, Homebridge (Siri), DBLog mit MySQL, Text2Speech, ...

Ganneff

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.

betateilchen

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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

prime1009

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.
FHEM 5.7 auf RasPi3
Homematic, IT, FS20, Cams (SSCAM), CUL, HueBridge, HarmonyHub, LIGHTIFY, TelegramBot, Homebridge (Siri), DBLog mit MySQL, Text2Speech, ...

betateilchen

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.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

prime1009

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.
FHEM 5.7 auf RasPi3
Homematic, IT, FS20, Cams (SSCAM), CUL, HueBridge, HarmonyHub, LIGHTIFY, TelegramBot, Homebridge (Siri), DBLog mit MySQL, Text2Speech, ...

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

prime1009

FHEM 5.7 auf RasPi3
Homematic, IT, FS20, Cams (SSCAM), CUL, HueBridge, HarmonyHub, LIGHTIFY, TelegramBot, Homebridge (Siri), DBLog mit MySQL, Text2Speech, ...

prime1009

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!
FHEM 5.7 auf RasPi3
Homematic, IT, FS20, Cams (SSCAM), CUL, HueBridge, HarmonyHub, LIGHTIFY, TelegramBot, Homebridge (Siri), DBLog mit MySQL, Text2Speech, ...

MisterEltako

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
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

prime1009

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")}}
FHEM 5.7 auf RasPi3
Homematic, IT, FS20, Cams (SSCAM), CUL, HueBridge, HarmonyHub, LIGHTIFY, TelegramBot, Homebridge (Siri), DBLog mit MySQL, Text2Speech, ...