FHEM Forum

FHEM => Automatisierung => Thema gestartet von: CaSch1306 am 09 Januar 2016, 17:32:39

Titel: notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: CaSch1306 am 09 Januar 2016, 17:32:39
Hallo Forum,

nachdem ich einige Devices erfolgreich einbinden konnte, versuche ich nun einen gewissen Automatismus zu generieren.

Dazu ist mein erster Versuch einen Fibaro ZWAVE Fensterkontakt mit einem MAX! Heizkörperthermostat zu "vereinigen".

Bei den MAX Geräten gibt es ja die Möglichkeit über den fakeSC den Zustand zu schalten.

Meine ersten Versuche waren einfach nur einen Dummy zu schalten, wenn eine Lampe angeht, also relativ simple:

set testntfy notify Lampe:.* set dummydev $EVENT

das hat auch funktioniert.

Ich scheitere aber am Notify für den Fensterkontakt.
Wenn das Fenster auf geht sendet der Kontakt ein basicSet: ff
Wenn das Fenster zu geht ein basicSet: 00

Ich habe in den Attributen des Fensterkontaktes das basicSet so "umgebogen" dass ich entsprechend open oder closed als STATE erhalte.

Das habe ich also dann versucht in ein Notify einzubauen:

set fenster_open notify Fenster.basicSet:ff set cm fakeSC Heizung 1

bzw.

set fenster_closed notify Fenster.basicSet:00 set cm fakeSC Heizung 0


statt ff und 00 habe ich es auch schon mit open und closed versucht, aber der notify reagiert nicht bzw. scheint dann nicht zu schalten. Wo habe ich den Denkfehler?


Wenn das ganze dann funktioniert möchte ich das für andere Räume mit mehreren Fenstern noch erweitern, dass der notify nur dann triggert, wenn das erste Fenster geöffnet wird bzw. dann triggert, wenn auch das letzte Fenster geschlossen wird. z.B.:

Fenster wird geöffnet --> Prüfe Status der anderen Fenster --> andere Fenster zu --> schalten || min. ein anderes Fenster offnen --> nichts machen.

Fenster wird geschlossen --> Prüfe Status der anderen Fenster --> andere Fenster zu --> schalten || min. ein anderes Fenster offnen --> nichts machen.

Wie könnte ich das umsetzen, mit notify und Perl code oder eher mit DOIF ?

Gruß
Carsten
Titel: Antw:notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: marvin78 am 09 Januar 2016, 17:38:01
Immer wenn ich nicht weiß, wie das Event wirklich aussieht, schaue ich in den Eventmonitor und baue mir ein notify, das erstmal nur allgemein auf den Sensor reagiert und logge denn mit der sub Log das $EVENT.

define testnot notify Fenster {Log 1, $EVENT}

Ein notify wird im Übrigen mit define definiert, nicht mit set.
Titel: Antw:notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: CaSch1306 am 09 Januar 2016, 18:14:42
Danke, werde das mal ausprobieren.

Natürlich meinte ich define und nicht set, war ich wohl zu schnel beim tippen.
Titel: Antw:notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: CaSch1306 am 09 Januar 2016, 18:39:50
Ich weiß nicht woran es lag, ich haben es jetzt nochmal schrittweise nachvollzogen, jetzt geht es.

Ich habe nun 2 notifies, eines für open, eines für closed, das würde ich natürlich gerne konsolidieren, dazu müsste ich via Perl das open in 1 und closed in 0 ändern, wie würde das Aussehen?

Sorry aber meine Perl Kenntnisse sind nahezu 0.

Weiterhin besteht dann noch die Frage, wie ich das ganze für Räume mit mehr als einem Fenster adaptieren kann.
Titel: Antw:notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: rudolfkoenig am 09 Januar 2016, 20:18:00
ZitatSorry aber meine Perl Kenntnisse sind nahezu 0.
Na dann wird Zeit fuer ein Buch, wenigstens ein paar Kapitel.
Syntax aus Frage/Antwort zu lernen ist frustrierend (fuer beide).

Sonst (falls nur open und closed gibt, und beide in $EVENT kommen):
$EVENT eq "open" ? 1 : 0
Titel: Antw:notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: CaSch1306 am 11 Januar 2016, 08:51:17
Hi,

ich bin ja nicht unwillig mich weiterzubilden, aber ich habe festgestellt, das Perl sehr abstrakt werden kann.

Ich habe mir deinen Hinweis mal zu Herzen genommen und das ganze in einem Testsystem mit Dummies versucht. Herausgekommen ist folgendes:


test3:.* {

my $test = $EVENT eq "open" ? 1 :0;;

fhem "set testtarget $test"
}


Damit funktioniert der Test insoweit erfolgreich, dass bei einem "set test3 open" das testtarget 1 und bei einem "set test3 closed" das testtarget 0 wird, so soll es ja dann auch im "Live-System" stattfinden.

Ließe sich das noch vereinfachen in einem Einzeiler?

Auch für meine zweite Frage habe ich ein wenig probiert und bin zu diesem Ergebnis gekommen:

test1:.*|test2:.* {

my $r1 = Value("test1");;
my $r2 = Value("test2");;
my $r3 = Value("dmy.fakeSC");;

if ($r1 eq "closed" && $r2 eq "closed") {
  fhem "set testtarget 0";;
  fhem "set dmy.fakeSC 0"
}

if (($r1 eq "open" || $r2 eq "open") && ($r3 eq "0")) {
  fhem "set testtarget 1";;
  fhem "set dmy.fakeSC 1"
}
}


Da ich nicht weiß, ob sich der fakSC auslesen lässt arbeite ich mit einem Dummy. So wie es im Moment aussieht scheint das zu funktionieren, zumindest in der Testumgebung.
Titel: Antw:notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: rudolfkoenig am 11 Januar 2016, 10:26:43
ZitatLieße sich das noch vereinfachen in einem Einzeiler?

Komplett in Perl:
test3 { fhem "set testtarget ".($EVENT eq "open" ? 1 : 0) }
Mit dem 5.7-er "SetMagic":
test3 set testtarget {($EVENT eq "open" ? 1 : 0)}
Titel: Antw:notify bei Fibaro Fensterkontakt evtl. mehrere Kontakte
Beitrag von: CaSch1306 am 11 Januar 2016, 18:57:36
Hallo Rudolf,

danke mit einer kleinen spezifischen Änderung (Anpassung des Evenstrings, statt nur open/Close kommt basicSet: open/closed) scheint das ganze jetzt zu funktionieren, mal einige WakeUps warten ob es auch dauerhaft so bleibt.

Das heißt nun für mich, das ich mir das Thema Stringmanipulation ansehen muss oder eben die Definition so in meine Variablen übernehmen muss.