Hallo zusammen,
ich habe eine Frage bezüglich eines notifys. Ich habe bereits ein notify das bei Anlage neuer Devices automatisch ein Attribut (DbLogExclude .*) bei dem neuen Device setzt.
Internals:
.COMMAND attr $EVTPART1 DbLogExclude .*
DEF global:DEFINED.* attr $EVTPART1 DbLogExclude .*
FUUID 5c443cf3-f33f-3151-56a0-e594b0c57a6ee707
NAME nDbLogExclude
NOTIFYDEV global
NR 131
NTFY_ORDER 50-nDbLogExclude
REGEXP global:DEFINED.*
STATE 2019-09-04 14:13:29
TRIGGERTIME 1567599209.47216
TYPE notify
.attraggr:
.attrminint:
READINGS:
2019-09-03 16:31:26 state active
Attributes:
DbLogExclude .*
Das funktioniert soweit auch gut.
Jetzt möchte ich bei Neuanlage (zB via autocreate) bestimmter Device Typen (CUL_TCM97001 und SD_WS07) gewisse Attribute automatisch hinzufügen. Ich bin mir aber nicht sicher, wie ich die RegExp ausprägen soll.
Anbei ein List vom neuen notify:
Internals:
.COMMAND {fhem "attr %NAME room Wetter, attr %NAME group Nachbarn, attr %NAME stateFormat {ReadingsTimestamp('%NAME','state','').\" \".ReadingsVal('%NAME','state','')}"}
CFGFN
DEF global:DEFINED:SD_WS07.*|global:DEFINED:CUL_TCM97001.* {fhem "attr %NAME room Wetter, attr %NAME group Nachbarn, attr %NAME stateFormat {ReadingsTimestamp('%NAME','state','').\" \".ReadingsVal('%NAME','state','')}"}
FUUID 5d6faa69-f33f-3151-f007-7205ee85cccfa9d5
NAME nTempSensorsConfig
NOTIFYDEV global
NR 5565
NTFY_ORDER 50-nTempSensorsConfig
REGEXP global:DEFINED:SD_WS07.*|global:DEFINED:CUL_TCM97001.*
STATE active
TRIGGERTIME 1567599209.47449
TYPE notify
.attraggr:
.attrminint:
READINGS:
2019-09-04 14:43:29 state active
Attributes:
DbLogExclude .*
(Je nach Wetter und Jahreszeit (Geburtstag, Weihnachten usw) tauchen hin und wieder neue Temp-Sensoren in der Nachbarschaft auf.)
Mir stellen sich die Fragen, ob
1. die RegExp so zieht weil das global Device es so liefert:
global:DEFINED:SD_WS07.*|global:DEFINED:CUL_TCM97001.*
2. die Ausführung dieses Commands überhaupt so funktioniert:
{fhem "attr %NAME room Wetter, attr %NAME group Nachbarn, attr %NAME stateFormat {ReadingsTimestamp('%NAME','state','').\" \".ReadingsVal('%NAME','state','')}"}
Vielleicht kann mir hier jemand helfen und etwas Licht ins Dunkel bringen.
Danke vorab.
Habe das jetzt nicht ausgetestet, aber ein paar Dinge erschleißen sich mir nicht so recht:
- Die Regex sollte so passen, kann aber m.E. auch vereinfacht werden (evtl. fehlt nach dem 2. Doppelpunkt ein "."):
global:DEFINED:(SD_WS07|CUL_TCM97001).*
- Was den Ausführungsteil angeht:
-- Warum nutzt du statt $EVTPART1 jetzt was anderes?
-- Warum der Wechsel zu Perl?
-- Mehrere FHEM-Befehle werden durch ; getrennt (https://fhem.de/commandref_modular_DE.html#command), oder?
-- in stateFormat & Co kann man $name verwenden, um auf den eigenen Namen eines Devices zu rekurieren.
Sollte also so gehen:
global:DEFINED:(SD_WS07|CUL_TCM97001).* attr $EVTPART1 room Wetter; attr $EVTPART1 group Nachbarn; attr $EVTPART1 stateFormat {ReadingsTimestamp($name,'state','').\" \".ReadingsVal($name,'state','')}"}
ZitatJetzt möchte ich bei Neuanlage (zB via autocreate) bestimmter Device Typen (CUL_TCM97001 und SD_WS07) gewisse Attribute automatisch hinzufügen. Ich bin mir aber nicht sicher, wie ich die RegExp ausprägen soll.
98_archetype.pm ist dein Freund ;)
VG Sebastian
Super, danke für die schnelle Antwort. :)
Zitat von: Beta-User am 04 September 2019, 15:13:31
Habe das jetzt nicht ausgetestet, aber ein paar Dinge erschleißen sich mir nicht so recht:
- Die Regex sollte so passen, kann aber m.E. auch vereinfacht werden (evtl. fehlt nach dem 2. Doppelpunkt ein "."):
global:DEFINED:(SD_WS07|CUL_TCM97001).*
Danke. Ich habe das mal kopiert. :)
Zitat von: Beta-User am 04 September 2019, 15:13:31
- Was den Ausführungsteil angeht:
-- Warum nutzt du statt $EVTPART1 jetzt was anderes?
Weil mir $EVTPART1 etwas intransparent und $NAME (https://fhem.de/commandref_DE.html#notify) sicherer erschien - in diesem Zusammenhang war ich mir nicht sicher was $EVTPART1 in diesem notify zurückliefert.
Zitat von: Beta-User am 04 September 2019, 15:13:31
-- Warum der Wechsel zu Perl?
-- Mehrere FHEM-Befehle werden durch ; getrennt (https://fhem.de/commandref_modular_DE.html#command), oder?
Weil mir aus der commandref nicht ganz klar war, wie ich mehrere FHEM Befehle
hier zusammenführe. Aber mit dem ; sollte es gehen. Versuch macht Kluch.
Zitat von: Beta-User am 04 September 2019, 15:13:31
-- in stateFormat & Co kann man $name verwenden, um auf den eigenen Namen eines Devices zu rekurieren.
DANKE. Wieder was gelernt. :D
Zitat von: binford6000 am 04 September 2019, 15:21:01
98_archetype.pm ist dein Freund ;)
VG Sebastian
Das schaue ich mir mal an, Danke.
Jetzt ist das erste Device via autocreate angelegt worden aber die Attribute sind nicht gesetzt worden.
Das angelegte Device mit dem TYPE CUL_TCM97001:
Internals:
CFGFN
CODE CUL_TCM97001_Unknown
DEF CUL_TCM97001_Unknown
FUUID 5d6fd15b-f33f-3151-2341-580f70d481179d9e
NAME Unknown
NR 6427
STATE Defined
TYPE CUL_TCM97001
lastH 0
lastT 0
Attributes:
DbLogExclude .*
room CUL_TCM97001
Anbei das notify:
Internals:
.COMMAND attr $EVTPART1 room Wetter; attr $EVTPART1 group Nachbarn; attr $EVTPART1 stateFormat {ReadingsTimestamp($name,'state','')." ".ReadingsVal($name,'state','')}"};
CFGFN
DEF global:DEFINED:(SD_WS07|CUL_TCM97001).* attr $EVTPART1 room Wetter; attr $EVTPART1 group Nachbarn; attr $EVTPART1 stateFormat {ReadingsTimestamp($name,'state','')." ".ReadingsVal($name,'state','')}"};
FUUID 5d6faa69-f33f-3151-f007-7205ee85cccfa9d5
NAME nTempSensorsConfig
NR 5565
NTFY_ORDER 50-nTempSensorsConfig
REGEXP global:DEFINED:(SD_WS07|CUL_TCM97001).*
STATE active
TRIGGERTIME 1567599209.47449
TYPE notify
.attraggr:
.attrminint:
READINGS:
2019-09-04 16:50:50 state active
Attributes:
DbLogExclude .*
Irgendwas läuft noch nicht. ??? was muss ich anpassen in dem notify?
Hast du das mit dem Punkt mal ausgetestet?
Ansonsten: mal den Event-Monitor zu Hilfe nehmen und ggf. mit trigger arbeiten, dann mußt du nicht auf messages warten ;) .
Zitat von: Beta-User am 04 September 2019, 17:23:34
Hast du das mit dem Punkt mal ausgetestet?
*hust* natürlich hab ich das überlesen *doh* *facepalm* ::) Hab es jetzt mal hinzugefügt, mal schauen.
Zitat von: Beta-User am 04 September 2019, 17:23:34
Ansonsten: mal den Event-Monitor zu Hilfe nehmen und ggf. mit trigger arbeiten, dann mußt du nicht auf messages warten ;) .
Mir ist nicht ganz klar, wie ich den trigger (https://fhem.de/commandref_DE.html#trigger) für dieses notify auslösen kann...es erschließt ich mir noch nicht ganz....
Btw, archetype (https://fhem.de/commandref_DE.html#archetype) habe ich mir auch angesehen, aber mir fehlt noch ein praktisches Beispiel, wie ich die Attribute sinnvoll vererben kann. Insbesondere wenn ich andere Attribute vererben möchte als das archetype-Device hat....
Hmmm, habe das jetzt mal mit einem Beispiel durchgespielt (echtes Device kopiert).
Da ist das eigentliche Problem, dass das ein Gerät mit Namen Auriol_xyz ist, das "nur" den TYPE LUL_TCM97001 hat, was aber im global-EVENT gar nicht auftaucht.... Man müßte also nachlaufend prüfen, was das neue Device für ein TYPE hat und das dann auswerten. Das ist mir aber für heute abend zu viel, ich finde das globale exclude sowieso zielführender (kann man ja modifizieren, aber nachdem ich jüngst ein paar Geräte mit vielen Readings und Events generiert habe, ist das vermutlich sinnvoller).
Ja, das ist durchaus interessant. Ich habe hier ein TYPE CUL_TCM97001 model Rubicson:
Internals:
.lastTimestate 1567676895.51732
.lastTimetemperature 1567676895.51732
CODE CUL_TCM97001_169
DEF CUL_TCM97001_169
FUUID 5d6bc994-f33f-3151-f8f5-ca1e3901c1c8e35b
LASTInputDev nanoCUL_433_1
MSGCNT 17
NAME Rubicson_169
NR 291
RSSI -93
STATE 2019-09-05 11:48:15 T: 8.9
TYPE CUL_TCM97001
lastH 0
lastT 1567676895
nanoCUL_433_1_MSGCNT 17
nanoCUL_433_1_RAWMSG sA98059FB78DA; 448: 3952
nanoCUL_433_1_TIME 2019-09-05 11:48:15
.attraggr:
.attreocr:
.*
.attrminint:
.*:300
READINGS:
2019-09-05 11:48:15 state T: 8.9
2019-09-05 11:48:15 temperature 8.9
Attributes:
DbLogExclude .*
event-min-interval .*:300
event-on-change-reading .*
model Rubicson
Interessant finde ich, dass DEF und CODE jeweils
CUL_TCM97001_169
enthalten, der Name aber nach dem erkannten model gebildet wird.
Man könnte das notify auf folgende unterstützende model des CUL_TCM97001 Moduls einschränken (mWn fangen alle Namen damit an):
model:
ABS700
AURIOL
Eurochron
GT_WT_02
KW9010
Mebus
NC_WS
PFR_130
Prologue
Rubicson
TCM21....
TCM97...
Type1
Unknown
W044
W132
W174
Und dies für -in meinem Fall - SD_WS07 noch nachziehen. Und aktuell halten wenn sich an den Modulen was ändert. Von daher wäre TYPE irgendwie charmanter.
@binford6000 / Sebastian
Zitat von: binford6000 am 04 September 2019, 15:21:01
98_archetype.pm ist dein Freund ;)
VG Sebastian
Wie müsste ich denn archetype ausprägen damit dies entsprechend auch nur bei Neuanlage die Attribute vererbt?
Ich habe mal versucht eins aufzubauen, bin mir aber nicht sicher, ob das ansatzweise so richtig ist:
Internals:
CFGFN
DEF TYPE=SD_WS07
FUUID 5d6fd47c-f33f-3151-617b-c045e2c9d91e6a91
NAME aTempSensorsConfig
NOTIFYDEV global
NR 6501
NTFY_ORDER 50-aTempSensorsConfig
STATE disabled
TYPE archetype
Attributes:
DbLogExclude .*
actualTYPE SD_WS07
actual_group undef:Nachbarn
actual_room undef:Wetter
actual_stateFormat undef:{ReadingsTimestamp($name,'state','')." ".ReadingsVal($name,'state','')}"};
attributes userattr actual_group actual_room actual_stateFormat
disable 1
userattr actual_group actual_room actual_stateFormat
(ja, ist derzeit disabled)
Danke vorab.
ZitatIch habe mal versucht eins aufzubauen, bin mir aber nicht sicher, ob das ansatzweise so richtig ist:
Von meinem Verständnis her so:
attr attributes actual_group actual_room actual_stateFormat DbLogExclude
Also Alle Attribute die vererbt werden sollen in attributes. Und im archetype device die Attribute wie gewünscht setzen.
Ich habe "nur" einfache archtype-devices die room, icon, und devStateIcon für doifs, notifys usw. nachziehen. Hier mal vom doif:
Internals:
DEF defined_by=DOIF_archetype TYPE=DOIF
FUUID 5c44a502-f33f-0308-24dc-befda4fcb089b0ad
FVERSION 98_archetype.pm:0.155750/2017-12-09
NAME DOIF_archetype
NOTIFYDEV global
NR 77
NTFY_ORDER 50-DOIF_archetype
STATE active
TYPE archetype
Attributes:
attributes icon room
devStateIcon {ReadingsVal($name,"STATE","active") eq "active" ? ".*:ios-on-blue" : ".*:ios-NACK"}
icon rc_SETUP
room 99_Logik
Im Standard passiert das ja auch nur bei der Neuanlage.
VG Sebastian
Danke @binford6000, langsam wird der archetype etwas klarer.
Allerdings möchte ich zB das Attribut group des archetypes nicht auf die Devices vererben, allerdings eine andere.
Dann müsste ich group vererben und dann mit actual_group nachbearbeiten, in etwa so:
Internals:
CFGFN
DEF TYPE=SD_WS07
FUUID 5d6fd47c-f33f-3151-617b-c045e2c9d91e6a91
NAME aTempSensorsConfig
NOTIFYDEV global
NR 6501
NTFY_ORDER 50-aTempSensorsConfig
STATE
TYPE archetype
READINGS:
Attributes:
DbLogExclude .*
actual_group undef:Nachbarn
actual_room undef:Wetter
actual_stateFormat undef:{ReadingsTimestamp($name,'state','')." ".ReadingsVal($name,'state','')}
attributes group room stateFormat
group Archetypes
room Vorlagen
stateFormat {ReadingsVal($name,'STATE','')}
userattr actual_group actual_room actual_stateFormat
Ich probiere es mal aus....
So, archetype funktioniert soweit ganz gut. Allerdings muss ich das archetype device via
set <archetypedevice> inheritance
anstoßen damit die Attribute vererbt werden. Wie gesagt, das Vererben funktioniert wie erwartet.
Aber nun bin ich wieder bei dem Problem wie zuvor - wie bekomm ich mit, dass ein neues Device von einem bestimmten TYPE angelegt worden ist?
Analog zum DbLogExclude-notify könnte ich die archetypes immer dann ausführen, wenn ein neues Device angelegt wird. Aber ob dies dann nicht eher mit Schrotflinten auf Spatzen schießen ist.... ???