steurung eines Schalt/Messstecker über einen Türsensor

Begonnen von 0-Positiv, 08 November 2015, 11:39:51

Vorheriges Thema - Nächstes Thema

0-Positiv

ich möchte eine Schalt/Messsteckdose dann einschalten, wenn der Sensor eine geschlossene Tür bei eingeschalteten Licht und einer Temperatur unter 20°C meldet, die Steuerung über die einzelnen Zustände (z.B. Licht an) funktioniert, leider gelingt mir die Steuerung über if and nicht.

Codebeispiel für Einzelzustand (funktioniert):
define TuerZuHeizungAn notify BZ.Tuer.*luminance.*26.* set BZ.Heizung on

Code für Steuerung in Abhängigkeit der 3 gewünschten Zustände:
define TuerZuHeizungAn notify { if ((*doorWindow.*00.*) && (*luminance.*26.*) && (*temperature.*68.*) { fhem("set BZ.Heizung on") } }


da meine Google Suche nicht erfolgreich war hoffe ich, das ich hier Hinweise erhalte, wie ich diese Funktion am besten mit einem else Zweig zum Abschalten der Steckdose umsetzen kann.

rudolfkoenig

Zitat(*doorWindow.*00.*)
Ich weiss nicht, wer dich zu diese Schreibweise inspririert hat, es ist leider falsch.
Mein Ratschlag: die ersten zwei Kapitel eines Perl-fuer-Anfaenger-Buches lesen, und danach http://fhem.de/commandref.html#perl. Das ist nicht nur fuer notify und at sinnvoll, sondern auch fuer viele andere Ecken in FHEM.

Eine Alternative zu notify mit Perl ist DOIF, der aber "nur" als Ersatz fuer notify und at taugt.

Rince

ZitatEine Alternative zu notify mit Perl ist DOIF, der aber "nur" als Ersatz fuer notify und at taugt.

Und watchdog  ::)
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)

Damian

Zitat von: Rince am 08 November 2015, 14:09:06
Und watchdog  ::)

und IF oder if

und sleep

ach ja, und alles was man mit Perl anstellen kann ;)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Zitatach ja, und alles was man mit Perl anstellen kann

1. stateFormat, userReadings, SVG-Funktionen, eventMap, basicAuth, nameDisplay, devStateIcon koennen alle kein DOIF aber perl. Und das sind nur meine Baustellen gewesen.
2. Ist etwas unfair darauf hinzuweisen, dass man in DOIF perl verwenden kann, wenn es gerade darum geht perl _nicht_ lernen zu wollen.

Damian

Zitat von: rudolfkoenig am 08 November 2015, 20:39:57
1. stateFormat, userReadings, SVG-Funktionen, eventMap, basicAuth, nameDisplay, devStateIcon koennen alle kein DOIF aber perl. Und das sind nur meine Baustellen gewesen.
2. Ist etwas unfair darauf hinzuweisen, dass man in DOIF perl verwenden kann, wenn es gerade darum geht perl _nicht_ lernen zu wollen.

OK. Dann streichen wir an dieser Stelle die Information zu Perl in DOIF, war ja ursprünglich nur als Hintertür gedacht - inzwischen packen Experten ganze Perlprogramme in die Bedingung. Manche Entwicklungen lassen sich halt schwer beeinflussen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

0-Positiv

zuerst einmal dank für die vielen Antworten  :).
ja, mein Code Beispiel für die if Abfrage ist nicht korrekt, wenn es das währe würde es ja funktionieren  ;).
gerade weil es nicht funktioniert frage ich ja, wie es richtig aussehen müsste, wenn es für meinen Anwendungsfall notwendig ist beschäftige ich mich auch mit PERL´und DOIF.

hier habe ich versucht das ganze mit DOIF umzusetzen:
define TuerZuHeizungAn DOIF ([BZ.Tuer:doorWindow] == 00" ) and ([BZ.Tuer:luminance] > 20) and ([BZ.Tuer:temperature] < 68 ) (set BZ.Heizung on) DOELSE (set BZ.Tuer off)

Folgende Meldung wird von FHEM ausgegeben:
ZitatTuerZuHeizungAn DOIF: expected DOELSEIF or DOELSE: and ([BZ.Tuer:luminance] > 20) and ([BZ.Tuer:temperature] < 68 ) (set BZ.Heizung on) DOELSE (set BZ.Tuer off)
"

kann DOIF mit mehreren Bedingungen arbeiten und wie würde der Code aussehen?

krikan

Zitat von: 0-Positiv am 09 November 2015, 08:34:54
wenn es für meinen Anwendungsfall notwendig ist beschäftige ich mich auch mit PERL´und DOIF.
Perl ist für FHEM notwendig. Du musst zumindest die Grundzüge kennen. Bitte nimm den Ratschlag zum Perl-Buch ernst. Du bist sonst schnellsten gefrustet und kommst nicht weiter.
Und bitte schau Dir die angepinnten Beiträge und die dort verlinkten Einstiegslektüren an.

Zu Deinem Problem: Schau Dir die Klammerung an.

Gruß, Christian

0-Positiv

die Steuerung funktioniert nun, wie von mir gewünscht geht die el. Heizung nun bei unter 20° an wenn das Licht an und die Tür geschlossen ist.

define TuerZuHeizungAn DOIF (([BZ.Tuer:doorWindow] == 00 ) and ([BZ.Tuer:luminance] > 20) and ([BZ.Tuer:temperature] < 68 )) (set BZ.Heizung on)
define TuerZuHeizungAus
DOIF (([BZ.Tuer:doorWindow] == 00 ) and ([BZ.Tuer:luminance] < 10)) (set BZ.Heizung off)


jetzt werde ich mich erst einmal in Perl einlesen.