notify nur bei global:DEFINED von bestimmten Device Types

Begonnen von yersinia, 04 September 2019, 14:56:11

Vorheriges Thema - Nächstes Thema

yersinia

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.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

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, 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','')}"}


Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

binford6000

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

yersinia

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 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, 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.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

yersinia

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?
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

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 ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

yersinia

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 für dieses notify auslösen kann...es erschließt ich mir noch nicht ganz....


Btw, 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....
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

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).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

yersinia

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.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

binford6000

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

yersinia

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....
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

yersinia

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.... ???
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl