Vereinigung mehrere Fensterkontakte

Begonnen von Superposchi, 16 Mai 2021, 17:27:39

Vorheriges Thema - Nächstes Thema

Superposchi

Hallo, ich habe an einem zweiflügligen Fenster zwei Fensterkontakte die für jeden Fensterflügel open/closed melden.

Für die Darstellung in FTUI brauche ich aber ein Device mit einem Reading, das alle möglichen Zustände abbilden kann, also close/close, close/open, open/close, open/open. Später auch erweiterbar auf tilt-Zustände wenn mal Fenstergriffkontakte eingesetzt werden.

Hatte mir zu dem Zweck ein Structur-Device angelegt und dort per Userreadings die Zustände der einzelnen Kontakte "importiert". Damit habe ich ein Reading das mir den Gesamtzustand meldet, ein Reading für den rechten Fensterflügel und ein Reading für den linken Fensterflügel. Aber eben nicht ein Reading, dass alles abbildet.

Gibt es einen Trick oder gar ein anderes Modul das man benutzen kann um dieses Ziel zu erreichen?

eurofinder

Ich habe das mit zwei Kontakten wie folgt gelöst:
Gesamtsruktur:
defmod Fenster_EG_WZ structure structureFenster Structure_WZOben Structure_WZUnten
attr Fenster_EG_WZ alias Wohnzimmer-Schiebetür
attr Fenster_EG_WZ clientstate_behavior relative
attr Fenster_EG_WZ clientstate_priority open tilted closed
attr Fenster_EG_WZ devStateIcon open:fts_window_1w_open@red tilted:fts_window_1w_tilt@red closed:fts_window_1w@green
attr Fenster_EG_WZ devStateStyle style="text-align:right"
attr Fenster_EG_WZ event-on-change-reading .*
attr Fenster_EG_WZ group Structure,Fenster
attr Fenster_EG_WZ room EG,EG->Wohnzimmer,Fenster,Homematic

setstate Fenster_EG_WZ closed
setstate Fenster_EG_WZ 2021-05-16 16:54:00 LastDevice Structure_WZUnten
setstate Fenster_EG_WZ 2021-05-16 16:54:00 LastDevice_Abs Structure_WZUnten
setstate Fenster_EG_WZ 2021-05-16 16:54:00 state closed


Kontakt unten:
defmod Structure_WZUnten HMCCUCHN 0000DA499258CD:1
attr Structure_WZUnten userattr structexclude structureFenster structureFenster_map
attr Structure_WZUnten IODev CCU3
attr Structure_WZUnten alias Schiebetürkontakt Unten
attr Structure_WZUnten devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green
attr Structure_WZUnten devStateStyle style="text-align:right"
attr Structure_WZUnten event-on-change-reading .*
attr Structure_WZUnten group Structure
attr Structure_WZUnten room EG,EG->Wohnzimmer,Fenster,Homematic

setstate Structure_WZUnten closed
setstate Structure_WZUnten 2021-05-16 16:54:00 .CONFIG_PENDING false
setstate Structure_WZUnten 2021-05-16 16:54:00 .DUTY_CYCLE false
setstate Structure_WZUnten 2021-05-16 16:54:00 .ERROR_CODE 0
setstate Structure_WZUnten 2021-05-10 11:50:42 .INSTALL_TEST true
setstate Structure_WZUnten 2021-05-16 16:54:00 .LOW_BAT ok
setstate Structure_WZUnten 2021-05-16 16:54:00 .OPERATING_VOLTAGE 1.3
setstate Structure_WZUnten 2021-05-16 16:54:00 .OPERATING_VOLTAGE_STATUS NORMAL
setstate Structure_WZUnten 2021-05-16 16:54:00 .RSSI_DEVICE -92
setstate Structure_WZUnten 2021-05-10 11:50:42 .RSSI_PEER 0
setstate Structure_WZUnten 2021-05-16 16:54:00 .SABOTAGE false
setstate Structure_WZUnten 2021-05-16 16:54:00 .UNREACH alive
setstate Structure_WZUnten 2021-05-10 11:50:42 .UPDATE_PENDING false
setstate Structure_WZUnten 2021-05-10 11:49:39 IODev CCU3
setstate Structure_WZUnten 2021-05-16 16:54:00 STATE closed
setstate Structure_WZUnten 2021-05-16 16:54:00 activity alive
setstate Structure_WZUnten 2021-05-16 16:54:00 battery ok
setstate Structure_WZUnten 2021-05-16 16:54:00 devstate ok
setstate Structure_WZUnten 2021-05-16 16:54:00 hmstate closed
setstate Structure_WZUnten 2021-05-16 16:54:00 rssidevice -92
setstate Structure_WZUnten 2021-05-16 16:54:00 rssipeer 0
setstate Structure_WZUnten 2021-05-16 16:54:00 state closed


Kontakt oben:
defmod Structure_WZOben HMCCUCHN 0000DA498D1EDE:1
attr Structure_WZOben userattr structexclude structureFenster structureFenster_map
attr Structure_WZOben IODev CCU3
attr Structure_WZOben alias Schiebetürkontakt Oben
attr Structure_WZOben devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green
attr Structure_WZOben devStateStyle style="text-align:right"
attr Structure_WZOben event-on-change-reading .*
attr Structure_WZOben group Structure
attr Structure_WZOben room EG,EG->Wohnzimmer,Fenster,Homematic
attr Structure_WZOben structureFenster_map open:tilted

setstate Structure_WZOben closed
setstate Structure_WZOben 2021-05-16 16:24:15 .CONFIG_PENDING false
setstate Structure_WZOben 2021-05-16 16:24:15 .DUTY_CYCLE false
setstate Structure_WZOben 2021-05-16 16:24:15 .ERROR_CODE 0
setstate Structure_WZOben 2021-05-10 11:50:41 .INSTALL_TEST true
setstate Structure_WZOben 2021-05-16 16:24:15 .LOW_BAT ok
setstate Structure_WZOben 2021-05-16 16:24:15 .OPERATING_VOLTAGE 1.2
setstate Structure_WZOben 2021-05-16 16:24:15 .OPERATING_VOLTAGE_STATUS NORMAL
setstate Structure_WZOben 2021-05-16 16:24:15 .RSSI_DEVICE -58
setstate Structure_WZOben 2021-05-10 11:50:41 .RSSI_PEER 0
setstate Structure_WZOben 2021-05-16 16:24:15 .SABOTAGE false
setstate Structure_WZOben 2021-05-16 16:24:15 .UNREACH alive
setstate Structure_WZOben 2021-05-10 11:50:41 .UPDATE_PENDING false
setstate Structure_WZOben 2021-05-10 11:49:39 IODev CCU3
setstate Structure_WZOben 2021-05-16 15:45:10 PRESS_SHORT 1
setstate Structure_WZOben 2021-05-16 16:24:15 STATE closed
setstate Structure_WZOben 2021-05-16 16:24:15 activity alive
setstate Structure_WZOben 2021-05-16 16:24:15 battery ok
setstate Structure_WZOben 2021-05-16 16:24:15 devstate ok
setstate Structure_WZOben 2021-05-16 16:24:15 hmstate closed
setstate Structure_WZOben 2021-05-16 16:24:15 rssidevice -58
setstate Structure_WZOben 2021-05-16 16:24:15 rssipeer 0
setstate Structure_WZOben 2021-05-16 16:24:15 state closed


Läuft ohne Komplikationen.

Gruß
eurofinder
RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

Superposchi

Puh, das ist etwas zu hoch für mich.
Speziell mit den setstate Befehlen komme ich nicht klar.

Soweit ich verstehe ist das oberste ein structure-Device. Das andere Modul in den beiden Devices sagt mir gar nichts.

Könntest du dazu etwas ausführlicher Erklären was genau das ganze bewirken soll?

betateilchen

Zitat von: Superposchi am 16 Mai 2021, 17:52:09
Speziell mit den setstate Befehlen komme ich nicht klar.

Die kannst Du ignorieren, die stehen da nur, weil jemand die vollständige raw-Definition kopiert und gepostet hat.

Zitat von: Superposchi am 16 Mai 2021, 17:52:09
Soweit ich verstehe ist das oberste ein structure-Device.

Korrekt. Entscheidend sind nur die drei Zeilen:


defmod Fenster_EG_WZ structure structureFenster Structure_WZOben Structure_WZUnten
attr Fenster_EG_WZ clientstate_behavior relative
attr Fenster_EG_WZ clientstate_priority open tilted closed


Die structure umfasst die Status der beiden Fensterkontakte (bei Bedarf kann man so beliebig viele Kontakte zusammenfassen)
Und nur der Status dieser structure wird irgendwo (z.B. in FTUI) dargestellt.

Zitat von: Superposchi am 16 Mai 2021, 17:52:09
Das andere Modul in den beiden Devices sagt mir gar nichts.

Das andere sind die beiden Fensterkontakte selbst. Dabei ist prinzipiell egal, von welchem Typ diese Kontakte selbst sind, die structure muss das nicht wissen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

ZitatDie structure umfasst die Status der beiden Fensterkontakte (bei Bedarf kann man so beliebig viele Kontakte zusammenfassen)
Und nur der Status dieser structure wird irgendwo (z.B. in FTUI) dargestellt.
Das war mir bewusst und habe ich auch, sowohl mit relative als auch absolut erstellt. Aber es löst ja nicht das Problem, das ich die beiden Fensterflügel von mit unterschiedlichen Stellungen abbilden kann.

Im FTUI gibt es schöne Symbole für zweiflügelige Fenster, aber die werden ja über ein Reading gesteuert. Dieses Reading muss also mindestens 4 Zustände annehmen. Jeweils einen für open/oben open/closed closed/open und closed/closed.

Das Structure-Device vereint doch lediglich die genannten Einzeldevices und nimmt open oder closed an wenn alle oder mindestens eins (je nach Einstellung der Atribute) entsprechend geschaltet und Priorisierung ist.

Was übersehe ich?

betateilchen

Wenn Du es so kompliziert haben willst, kannst Du das über ein userreading lösen und im perl Code die Sensoren entsprechend auswerten.

Mir reicht es völlig aus, zu wissen, ob ein zweiflügeliges Fenster geschlossen ist oder nicht.
Ob der linke Flügel, der rechte Flügel oder beide offen sind, ist mir völlig egal.
Ebenso wie es mir egal ist, ob ein Flügel gekippt oder aufgeschwenkt ist (das sind ja nochmal multiplikative Fälle)

Fakt ist: das Fenster ist nicht geschlossen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

Also in meinen Augen macht es schon einen Unterschied ob die Alarmanlage Nachts ein gekipptes Fenster im Schlafzimmer ignorieren soll weil gelüftet wird, ein geöffnetes Fenster aber einbeziehen soll, weil es vergessen wurde.

Aber wenn ich dich richtig verstehe, hast du auch keine Idee für eine Lösung.

betateilchen

Zitat von: Superposchi am 17 Mai 2021, 15:31:20
Aber wenn ich dich richtig verstehe, hast du auch keine Idee für eine Lösung.

Dann hast Du mich offenbar nicht richtig verstanden.
Mein Lösungsvorschlag steht in meinem vorherigen Text.

Zitat von: betateilchen am 17 Mai 2021, 11:38:17
über ein userreading lösen und im perl Code die Sensoren entsprechend auswerten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DrBasch

Hi,

wir haben in unserer Wohnung auch 3 Fenster mit Doppelflügeln die über Drehgriffsensoren die Zustände melden. Zur Visualisierung habe ich auf dummies und notifies zurückgegriffen:

define du_ki_window dummy
attr du_ki_window devStateIcon closed-closed:fts_window_2w\
closed-tilted:fts_window_2w_tilt\
closed-open:fts_window_2w_open\
tilted-closed:fts_window_2w_tilt_l\
tilted-tilted:fts_window_2w_tilt_lr\
tilted-open:fts_window_2w_tilt_l_open_r\
open-closed:fts_window_2w_open_l\
open-tilted:fts_window_2w_open_l_tilt_r\
open-open:fts_window_2w_open_lr
attr du_ki_window room Küche


define no_ki_window notify ki_left_window|ki_right_window { my $state = Value("ki_left_window")."-".Value("ki_right_window");; fhem "set du_ki_window $state";;}
attr no_ki_window room Küche



Superposchi

Zitatkannst Du das über ein userreading lösen und im perl Code die Sensoren entsprechend auswerten
Das mit dem userreading habe ich bereits probiert, doch damit bekomme ich ebenfalls kein vereintes Reading der einzelnen Fensterkontakte.

@DrBasch
Wenn ich das richtig verstehe, benutzt du kein structure sondern stattdessen ein Dummy-Device, das 'manuell' durch ein notify gesetzt wird.

DrBasch

Zitat... benutzt du kein structure sondern stattdessen ein Dummy-Device, das 'manuell' durch ein notify gesetzt wird

Korrekt... Das stammt noch aus meiner FHEM-Anfangszeit.
Mit structure alleine hab ich damals die defStateIcon-Visualisierung nicht so hinbekommen wie ich wollte.
Ein anderer Ansatz, das Doppelfenster mit einem DOIF abzubilden, hat - glaube ich - zwar prinzipiell funktioniert, mich aber ob der Syntax in den Wahnsinn getrieben. Nach diesen "persönlichen Niederlagen" hab ich versucht dass Problemchen mit einer "keep it simple and stupid" Lösung in den Griff zu bekommen. Dabei bin ich dann geblieben.

betateilchen

Zitat von: Superposchi am 17 Mai 2021, 17:35:46
Das mit dem userreading habe ich bereits probiert, doch damit bekomme ich ebenfalls kein vereintes Reading der einzelnen Fensterkontakte.

Natürlich bekommst Du das, im perl Teil des userreadings kannst Du doch auswerten und ins reading schreiben was immer Du möchtest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

ZitatNatürlich bekommst Du das, im perl Teil des userreadings kannst Du doch auswerten und ins reading schreiben was immer Du möchtest.
Das mag sein, aber dafür sind meine Perl Kenntnisse einfach noch nicht ausgeprägt genug.

Die Lösung von DrBasch hat aber wunderbar funktioniert. So bekomme ich das Fenster mit beiden Flügeln sowohl in Fhem als auch in FTUI wunderbar abgebildet.