Hallo liebe Gemeinde,
derzeit verwende ich an jedem Flügel des Fensters jeweils einen HM-SEC-SCo Sensor, der mir anzeigt, ob der jeweilige Flügel geöffnet oder geschlossen ist. Diesen Zustand kann ich pro Flügel auch recht gut visualisieren.
Da ich aber diverse Doppelflügel-Fenster habe, ist die Liste recht lang.
Es wäre also schön, wenn man es irgendwie realisieren kann, den Zustand des gesamten Fensters mit einem Icon darzustellen. In der Liste der zur Verfügung stehenden Icons gibt es diverse, die darstellen, das ein Flügel links, oder rechts, oder eben beide geöffnet sind.
Mir ist jedoch nicht ganz klar, wie ich eine solche logische Verknüpfung von verschiedenen Sensoren in einem Icon zusammenfassen kann.
Ich hoffe ihr könnt mir hier, eventuell mit konkreten Beispielen, weiterhelfen.
Vielen Dank!
mal einen spontanen Ansatz in die Runde geworfen....
beide Sensoren in einer "structure" zusammenfassen als ein Einzelnes Fenster. Den "state" dann jeweils nach geöffnetem Fenster anpassen. Ob das dann über clientstate_priority zu handhaben ist, darüber kann ich jetzt nur spekulieren.
_____________________
z.B. für das schlafzimmer mit
eine structure mit dem Namen WindowSensorSchlafzimmer mit folgender Definition structWindowSensor windowSensorSchlafzimmerLeftCasement windowSensorSchlafzimmerRightCasement
das clientstate_behavior auf relative setzen
das clientstate_priority auf allOpen|open <hier fehlt jetzt die Unterscheidug der beiden Flügel> allClosed|closed
bei mir spielt es aktuell keine Rolle welcher Flügel geöffnet ist demnach kann ich bei <hier fehlt jetzt die Unterscheidug der beiden Flügel> mit anyTilted|tilted arbeiten.
Ok, wenn ich dann beide Flügel in ein structure packe, wie kann ich dann die Icons zuordnen, welche den jeweiligen Zustand darstellen?
Im Prinzip benötige ich hier doch 4 Icons um alle möglichen Zustände abzufangen.
- beide Flügel geschlossen
- linker Flügel geöffnet
- rechter Flügel geöffnet
- beide Flügel geöffnet
Zitat von: MrMaxy am 16 Dezember 2016, 13:28:54
Ok, wenn ich dann beide Flügel in ein structure packe, wie kann ich dann die Icons zuordnen, welche den jeweiligen Zustand darstellen?
Im Prinzip benötige ich hier doch 4 Icons um alle möglichen Zustände abzufangen.
- beide Flügel geschlossen
- linker Flügel geöffnet
- rechter Flügel geöffnet
- beide Flügel geöffnet
die Icons können dann über devStateIcon zugewiesen werden, 4 Zustände, 4 Icons
wie oben noch mal eingefügt, fehlt halt lediglich die Unterscheidung zwischen dem linken und rechten Flügel.
Ich weiß nicht ob es falsch ist, aber ich habe das mit einem DOIF und einem Dummy realisiert...
DOIF
define og_Arbeitszimmer_Fensterstand DOIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "open" and [og_Arbeitszimmer_li_Fensterkontakt] eq "open") (set og_Arbeitszimmer_Fensterdummy tilt_lr) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "closed" and [og_Arbeitszimmer_li_Fensterkontakt] eq "open") (set og_Arbeitszimmer_Fensterdummy tilt_l) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "closed" and [og_Arbeitszimmer_li_Fensterkontakt] eq "closed") (set og_Arbeitszimmer_Fensterdummy lr) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "open" and [og_Arbeitszimmer_li_Fensterkontakt] eq "closed") (set og_Arbeitszimmer_Fensterdummy tilt_r)
Dummy
define og_Arbeitszimmer_Fensterdummy dummy
attr og_Arbeitszimmer_Fensterdummy alias Fensterstand Arbeitszimmer
attr og_Arbeitszimmer_Fensterdummy devStateIcon tilt_l:fts_window_2w_tilt_l@red tilt_lr:fts_window_2w_tilt_lr@red lr:fts_window_2w@green tilt_r:fts_window_2w_tilt_r@red
attr og_Arbeitszimmer_Fensterdummy group Fenster
attr og_Arbeitszimmer_Fensterdummy room Arbeitszimmer
attr og_Arbeitszimmer_Fensterdummy setList state:tilt_lr,tilt_l,lr,tilt_r
Funktioniert auch einwandfrei. :)
Gruß,
Richy
noch eine Lösung:
Annahme:
Fenster Links = Bit 1
Fenster Rechts = Bit 0
Offen = gesetzt = 1
Closed = 0
notify auf beide Fenster (DeviceLinks|DeviceRechts):(open|closed)
jetzt bekommst Du in diesem Notify jedes Öffnen und schließen mit
dann
my $Spezialstate = ReadingsVal(DeviceLinks, Spezialstate, 0);
if ($NAME eq DeviceLinks>) {
if ($EVENT eq 'open') { $Spezialstate |= 2 } else { $Spezialstate &= 1 }
elseif $NAME eq DeviceRechts) {
if ($EVENT eq 'open') { $Spezialstate |= 1 } else { $Spezialstate &= 2 }
else
# das sollte nicht vorkommen :-)
fhem ("setreading DeviceLinks Spezialstate $Spezialstate");
fhem ("setreading DeviceRechts Spezialstate $Spezialstate");
Jetzt hast Du in beiden Flügeln ein Reading Spezialstate
und es gilt
0 = beide Fenster zu
1 = Rechtes Fenster offen
2 = linkes Fenster offen
3 = beide Fenster offen
ich würde mich freuen wenn Du uns dann an Deiner finalen Lösung teilhaben lässt.
Gruß!
Hallo Zusammen.
vielen Dank für eure zahlreichen Lösungsvorschläge und die Hilfe.
Ich habe es jetzt so gelöst:
Zitat von: Wondermusic am 16 Dezember 2016, 14:14:59
Ich weiß nicht ob es falsch ist, aber ich habe das mit einem DOIF und einem Dummy realisiert...
DOIF
define og_Arbeitszimmer_Fensterstand DOIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "open" and [og_Arbeitszimmer_li_Fensterkontakt] eq "open") (set og_Arbeitszimmer_Fensterdummy tilt_lr) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "closed" and [og_Arbeitszimmer_li_Fensterkontakt] eq "open") (set og_Arbeitszimmer_Fensterdummy tilt_l) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "closed" and [og_Arbeitszimmer_li_Fensterkontakt] eq "closed") (set og_Arbeitszimmer_Fensterdummy lr) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "open" and [og_Arbeitszimmer_li_Fensterkontakt] eq "closed") (set og_Arbeitszimmer_Fensterdummy tilt_r)
Dummy
define og_Arbeitszimmer_Fensterdummy dummy
attr og_Arbeitszimmer_Fensterdummy alias Fensterstand Arbeitszimmer
attr og_Arbeitszimmer_Fensterdummy devStateIcon tilt_l:fts_window_2w_tilt_l@red tilt_lr:fts_window_2w_tilt_lr@red lr:fts_window_2w@green tilt_r:fts_window_2w_tilt_r@red
attr og_Arbeitszimmer_Fensterdummy group Fenster
attr og_Arbeitszimmer_Fensterdummy room Arbeitszimmer
attr og_Arbeitszimmer_Fensterdummy setList state:tilt_lr,tilt_l,lr,tilt_r
Funktioniert auch einwandfrei. :)
Gruß,
Richy
Funktioniert bei mir ebenfalls einwandfrei. :)
Vielen Dank noch einmal - tolles Forum hier!
Grüße,
Lars
Das geht auch nur mit einem DOIF-DEVICE, also ohne zusätzlichen Dummy!
Macht es einfacher und übersichtlicher ;-)
defmod og_Arbeitszimmer_Fensterstand DOIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "open" and [og_Arbeitszimmer_li_Fensterkontakt] eq "open") (set og_Arbeitszimmer_Fensterdummy tilt_lr) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "closed" and [og_Arbeitszimmer_li_Fensterkontakt] eq "open") (set og_Arbeitszimmer_Fensterdummy tilt_l) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "closed" and [og_Arbeitszimmer_li_Fensterkontakt] eq "closed") (set og_Arbeitszimmer_Fensterdummy lr) \
DOELSEIF ([og_Arbeitszimmer_re_Fensterkontakt] eq "open" and [og_Arbeitszimmer_li_Fensterkontakt] eq "closed") (set og_Arbeitszimmer_Fensterdummy tilt_r)
attr og_Arbeitszimmer_Fensterstand devStateIcon tilt_l:fts_window_2w_tilt_l@red tilt_lr:fts_window_2w_tilt_lr@red lr:fts_window_2w@green tilt_r:fts_window_2w_tilt_r@red
attr og_Arbeitszimmer_Fensterstand readingList window
attr og_Arbeitszimmer_Fensterstand setList window:tilt_lr,tilt_l,lr,tilt_r
attr og_Arbeitszimmer_Fensterstand stateFormat window
setstate og_Arbeitszimmer_Fensterstand tilt_r
setstate og_Arbeitszimmer_Fensterstand 2016-12-20 09:06:08 cmd 0
setstate og_Arbeitszimmer_Fensterstand 2016-12-20 09:06:08 state initialized
setstate og_Arbeitszimmer_Fensterstand 2016-12-20 09:11:16 window tilt_r
Zitat...also ohne zusätzlichen Dummy!
Verstehe ich leider nicht wirklich, da im Device ja immer noch ein "og_Arbeitszimmer_Fensterdummy" gesetzt wird.