Hallo,
ich habe folgendes Problem:
Die Rollo sollen automatisch zu einem gewissen Ereignis (Tageszeit , Tag) automatisch hochfahren.
Jetzt kann es jedoch sein dass die Rollo schon vorher durch ein anderes Ereignis manuell oder automatisch in eine gewisse Position gefahren wurden. Deshalb habe ich für diese Fälle readings eingefügt. Alle zusätzlichen readigs beginnen mit Steuer_XXX. D.h. wenn keine zusätzlichen Steuerungen erfolgt sind sind alle readings auf off , oder wenn Steuerungen erfolgt auf on z.B. "Steuer_Sonne on".
Ich habe nun versucht diese readings so abzufragen (DOIF):
([TAGESZEIT] eq "Tag" and [?EG_Rollo_Wohnzimmer_g_Fenster:"Steuer_"] eq "off")
(set EG_Rollo_Wohnzimmer_g_Fenster open)
Als Hinweis : "Steuer_" habe ich so verwendet da readings gesucht werden sollten die 'Steuer_' enthalten. Funktioniert aber leider nicht .
Wer kann mir da helfen ?
Danke
Gruß
Wendelin
Welches Reading soll hier gemeint sein?
[?EG_Rollo_Wohnzimmer_g_Fenster:"Steuer_"] eq "off"
So etwas kann nicht funktionieren.
Es gibt aber Aggregationsfunktionen: https://fhem.de/commandref_DE.html#DOIF_aggregation
Hallo,
habe die Hinweise gelesen, aber anscheinend bin ich zu blöd !!
Was will ich überprüfen :
Device : EG_Rollo_Wohnzimmer_g_Fenster
Reading : Steuer_Sonne , Steuer_manuell , Steuer_...
Zusand der readings : on oder off
Befehl 'set EG_Rollo_Wohnzimmer_g_Fenster open' soll erfolgen wenn alle readings des genannten Devices mit dem Namen 'Steuer_' off enthalten und die TAGESZEIT Tag enthält .
die bisherige lange Version die ich verkürzen will, da auch noch readings hinzu kommen können:
([TAGESZEIT] eq "Tag" and [EG_Rollo_Wohnzimmer_g_Fenster:Steuer_Sonne] eq "off" and [EG_Rollo_Wohnzimmer_g_Fenster:Steuer_Manuell] eq "off" and [EG_Rollo_Wohnzimmer_g_Fenster:Steuer_Beamer] eq "off" and [EG_Rollo_Wohnzimmer_g_Fenster:Steuer_TV] eq "off" )
(set EG_Rollo_Wohnzimmer_g_Fenster open)
Gruß
Wendelin
Warum dann nicht ein "einfaches" notify!?
define nPruefung notify EG_Rollo_Wohnzimmer_g_Fenster:Steuer_.* {if(TAGESZEIT && $EVTPART1 eq "off"){fhem("set EG_Rollo_Wohnzimmer_g_Fenster open)}
KEIN!! copy&paste Code, weil ich ja nicht genau weiß WO TAGESZEIT her kommt!?
Evtl. ReadingsVal("TAGESZEIT","state","") ?
Oder Value("TAGESZEIT") ?
(ACHTUNG: Value "frägt" STATE und nicht state)
EDIT: wenn du "genauer" sein willst geht nat. auch:
define nPruefung notify EG_Rollo_Wohnzimmer_g_Fenster:(Steuer_Sonne|Steuer_manuell|Steuer_xyz).* {if(TAGESZEIT && $EVTPART1 eq "off"){fhem("set EG_Rollo_Wohnzimmer_g_Fenster open)}
Und du musst halt prüfen, ob in $EVTPART1 auch on/off kommt...
...evtl. vorher mal mit einer Logausgabe anfangen:
define nPruefung notify EG_Rollo_Wohnzimmer_g_Fenster:Steuer_.* {Log3(undef,1,"TestNotify Event: $EVENT EVTPART1: $EVTPART1")}
Gruß, Joachim
Hallo Joachim,
das Device TAGESZEIT ist ein TEMP und wird automatisch gesetzt = Tag oder Nacht
Gruß
Wendelin
Zitat von: wendeling am 19 Juni 2020, 10:13:57
Hallo Joachim,
das Device TAGESZEIT ist ein TEMP und wird automatisch gesetzt = Tag oder Nacht
Gruß
Wendelin
Was ist ein TEMP!?
Aber egal: musst du halt anpassen...
...also das "Auslesen" von TAGESZEIT...
...solltest du notify nutzen (wollen)...
Ansonsten wäre nat. ein list deutlich hilfreicher gewesen...
Gruß, Joachim
Zitat
Was ist ein TEMP!?
meinte DUMMY :-(
Gruß
Wendelin
Bzgl. eines list ändert das aber nichts... ;)
...solltest du (weitere) Hilfe brauchen...
Gruß, Joachim
Hallo,
hier mal ein list der DOIF :
Internals:
CFGFN
DEF ([TAGESZEIT] eq "Tag" and [?EG_Rollo_Wohnzimmer_g_Fenster:Steuer_Sonne] eq "off" and [?EG_Rollo_Wohnzimmer_g_Fenster:Steuer_Beamer] eq "off")
(set EG_Rollo_Wohnzimmer_g_Fenster open)
FUUID 5ee43e0b-f33f-8758-57aa-7656247765d693e6
MODEL FHEM
NAME ROLLO_Auto_AUF_Wohnzimmer_g_Fenster
NOTIFYDEV TAGESZEIT,global
NR 2511
NTFY_ORDER 50-ROLLO_Auto_AUF_Wohnzimmer_g_Fenster
STATE cmd_2
TYPE DOIF
VERSION 22030 2020-05-25 14:10:16
.attraggr:
.attrminint:
Helper:
DBLOG:
cmd:
DBL:
TIME 1592016395.50899
VALUE 0
mode:
DBL:
TIME 1592016395.50899
VALUE enabled
state:
DBL:
TIME 1592016395.50899
VALUE initialized
READINGS:
2020-06-19 10:27:08 cmd 2
2020-06-19 10:27:08 cmd_event ROLLO_Auto_AUF_Wohnzimmer_g_Fenster
2020-06-19 10:27:08 cmd_nr 2
2020-06-19 10:27:00 mode enabled
2020-06-19 10:27:08 state cmd_2
Regex:
accu:
cond:
TAGESZEIT:
0:
&STATE ^TAGESZEIT$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::InternalDoIf($hash,'TAGESZEIT','STATE') eq "Tag" and ::ReadingValDoIf($hash,'EG_Rollo_Wohnzimmer_g_Fenster','Steuer_Sonne') eq "off" and ::ReadingValDoIf($hash,'EG_Rollo_Wohnzimmer_g_Fenster','Steuer_Beamer') eq "off"
do:
0:
0 set EG_Rollo_Wohnzimmer_g_Fenster open
1:
helper:
DEVFILTER ^global$|^TAGESZEIT$
NOTIFYDEV global|TAGESZEIT
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
internals:
all TAGESZEIT:STATE
uiState:
uiTable:
Attributes:
DbLogExclude .*
Ein list vom DOIF ist aber auch kein list des dummy ;)
EDIT: wo hakt es eigentlich aktuell noch!? Schon was von den genannten Dingen probiert!? Setzt du nun DOIF um (da habe ich ja schon geschrieben: ich raus ;) ) oder notify!? Bzgl. notify steht ja eigentlich alles da bis auf WO/WIE in deinem dummy ist TAGESZEIT zu finden... (Vermutung und auch dafür habe ich Code-Beispiele geliefert: im state. Dann ReadingsVal oder Value / Anmerkungen siehe ebenfalls oben)...
Gruß, Joachim
Hallo Joachim,
Danke für Deine Hilfe , da das Dummy TAGESZEIT nur Tag oder Nacht annimmt , kann ich Deine Lösungen leider nicht verwenden. Deshalb werde ich wohl übel bei meiner alten DOIF bleiben müssen. Der Nachteil ist halt das es nicht dynamisch ist , d.h. wenn weitere readings hinzukommen , müssen die halt manuell ergänzt werden. Ist zwar schade , aber so wie es aussieht nicht anders machbar. Und das mit der TAGESZEIT kann ich leider nicht ändern, da diese mehrfach im FHEM Verwendung findet .
Gruß
Wendelin
Warum soll das nicht mit meinem Beispiel gehen...
Aber solange kein list postest und zwar vom dummy kann ich nicht noch weiter helfen...
Gruß, Joachim