Es gibt so ein schönes Beispiel um die Fenster zu überwachen:
defmod Fenster_state DOIF ##
attr Fenster_state DOIF_Readings windows:[@as( | )"Fenster_.*":reading:"off","keine"]
attr Fenster_state stateFormat windows
attr Fenster_state uiTable {package ui_Table;;;;}icon([$SELF:windows],"fts_window_1w_open\@DarkOrange","fts_window_1w",".*","keine")|[$SELF:windows]
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Visualisierung:_offene_Fenster
Es hat allerdings einen Hacken. Es werden keine Events erzeugt auf die man triggern könnte, auch die Anzeige im Tablet UI funktioniert nicht. Eine Aktualisierung bekomme ich nur mit "checkall"
Kann man da was machen?
Ok, es fehlt schon mal mindestens ein list eines deiner Fenster-Devices... ;)
EDIT: und besser auch gleich noch ein list deines DOIF, statt irgendwelche "DEF-copy" etc.
Das hier hast du beachtet:
Zitat
Fenster-Devices enden mit "Fenster" im Namen
und deine Fenster-Devices "halten" sich auch dran? ;)
Gruß, Joachim
Internals:
DEF ##
DOIFDEV ^global$|Fenster_.*
FUUID 61bceecf-f33f-804b-0b81-9afb13772d649951
MODEL FHEM
NAME Fenster_state
NR 1542
NTFY_ORDER 50-di_uiTable_windows
STATE keine
TYPE DOIF
VERSION 25295 2021-12-04 18:13:39
DOIF_Readings:
windows ::AggregateDoIf($hash,'@as( | )','Fenster_.*','reading','"off"','"keine"')
READINGS:
2021-12-30 18:10:00 cmd 0
2021-12-30 18:11:35 mode enabled
2021-12-30 18:10:00 state initialized
2021-12-30 18:13:33 windows keine
Regex:
DOIF_Readings:
:
windows:
"Fenster_.*" Fenster_.*
accu:
collect:
attr:
cmdState:
wait:
waitdel:
condition:
do:
0:
helper:
DEVFILTER ^global$|Fenster_.*
NOTIFYDEV global|.*Fenster_.*.*
event windows: keine
globalinit 1
last_timer 0
sleeptimer -1
triggerDev Fenster_state
triggerEvents:
windows: keine
triggerEventsState:
windows: keine
hmccu:
uiState:
uiTable:
dev Fenster_state
header
<table uitabid='DOIF-Fenster_state' class=' block wide uiTabledoif doif-Fenster_state ' style='border-top:none;'>
package package ui_Table;
reading windows
table:
0:
0:
0:
0 package ui_Table;::DOIF_Widget($hash,$reg,'Fenster_state_uiTable_c_0_0_0_0',icon(::ReadingValDoIf($hash,'Fenster_state','windows'),"fts_window_1w_open\@DarkOrange","fts_window_1w",".*","keine"),'','Fenster_state','windows')
1:
0:
0 package ui_Table;::DOIF_Widget($hash,$reg,'Fenster_state_uiTable_c_0_1_0_0',::ReadingValDoIf($hash,'Fenster_state','windows'),"")
tc:
td:
0:
tr:
Attributes:
DOIF_Readings windows:[@as( | )"Fenster_.*":reading:"off","keine"]
stateFormat windows
uiTable {package ui_Table;;}icon([$SELF:windows],"fts_window_1w_open\@DarkOrange","fts_window_1w",".*","keine")|[$SELF:windows]
Internals:
DEF 20
FUUID 5cdc327b-f33f-804b-5178-de7601187028a789
IODev MegaUG
NAME Fenster_WiZi1
NR 1303
PIN 20
STATE on
TYPE FRM_IN
READINGS:
2021-12-25 21:22:43 IODev MegaUG
2021-12-30 18:13:33 reading on
2021-12-25 21:22:43 state Initialized
Attributes:
IODev MegaUG
activeLow yes
alias WoZi1
devStateIcon on:10px-kreis-gruen off:10px-kreis-rot
group Fenster
internal-pullup on
room Tür/Tor
stateFormat reading
hallo,
ich mache das so wie im DOIF Wiki:
defmod di_window_open DOIF (["FK:open"]) (msg Fenster wurde geöffnet. Es sind folgende Fenster geöffnet: [@:a"FK":state:"open"])\
DOELSEIF ([#"FK:closed":state:"open"] == 0) (msg alle Fenster geschlossen)
attr di_window_open DbLogExclude .*
attr di_window_open alias di_window_open
attr di_window_open checkReadingEvent 1
attr di_window_open cmdState [$SELF:Device] zuletzt geöffnet|alle geschlossen
attr di_window_open room DOIF
attr di_window_open verbose 2
@stefan-dd: du hast ja dein DOIF nun (heimlich ;) ) angepasst...
...geht es nun?
Also nat. schon mal Fenster auf/zu gemacht wegen Events...
Ansonsten muss wohl jemand ran, der (mehr) Ahnung von DOIF hat...
EDIT: dazu wäre es ratsam den Thread ins passende Unterforum zu verschieben. Kannst du selber machen! Welches Unterforum: siehe help doif...
Gruß, Joachim
Nein, ich habe vom Beispiel aufs tatsächliche geändert, ändert aber nichts am Problem. Es reagiert auf die Fenster, man hat aber kein Reading, auf was man triggern kann.
Ist aus meiner Sicht nur ein grafischer Beispielcode, der nur zur Anzeige dient, mit dem man nichts weiter anfangen kann, außer anschauen. Da keine Readings erstellt werden.
Was willst du erreichen?
Ja klar das Beispiel ZEIGT dir eine Übersicht über offene Fenster...
EDIT: steht ja auch ganz groß drüber
Zitat von: wiki
Visualisierung: offene Fenster
Alle offenen Fenster werden aufgelistet und mit entsprechendem Icon visualisiert.
Wenn du wissen willst, ob ein Fenster auf-/zugemacht wurde: Eventmonitor, auf Event warten, Zeile markieren und notify/DOIF anlegen lassen...
Oder halt "auswendig" ein DOIF anlegen, was dann entsprechende Aktionen auslöst oder tut was immer dir "vorschwebt"...
EDIT: erläutere doch was du (eigentlich) willst...
ABER: das DOIF reagiert erst mal nur auf Events! Die Events, dass etwas passiert ist (z.B. Fenster auf/zu) kommen doch von deinen Fenster-Devices...
Gruß, Joachim
ich sehe in Telegram:
Fenster wurde geöffnet. Es sind folgende Fenster geöffnet: Schlafzimmer
oder: alle Fenster geschlossen
es wir sehr wohl ein Reading erstellt
Hallo stefan-dd
Zitatattr Fenster_state DOIF_Readings windows:[@as( | )"Fenster_.*":reading:"off","keine"]
Dies erzeugt dir die Liste mit den offenen Fenstern. Es ist als DOIF_readings definiert, damit wird nur das DOIF intern getriggert.
Wenn Du es als event_Readings anlegst wird auch ein Event erzeugt, der außerhalb vom DOIF in fhem weiterverarbeitet werden kann.
Schau mal in der cref nach DOIF_Readings und event_Readings.
Viel Erfolg!
Sany
Danke, eigentlich ganz einfach.
attr Fenster_state event_Readings windows:[@as( | )"Fenster_.*":reading:"off","keine"]