[gelöst] Regex für notify global:DEFINED.*

Begonnen von abc2006, 24 Januar 2016, 18:00:39

Vorheriges Thema - Nächstes Thema

abc2006

Hi,
ich habe von hier http://www.fhemwiki.de/wiki/DbLog die Anweisung
define nDbLogExclude notify global:DEFINED.* attr $EVTPART1 DbLogExclude .*
Jetzt wollte ich das umbauen, dass beim Anlegen von DS18B20-Devices über den OWServer jedes Device automatisch die Attribute resolution 10;stateFormat T: temperature °C; group RaumThermometer und room Heizung zugewiesen bekommt.

Leider scheitere ich bereits an der Definition, während das LogExclude einwandfrei funktioniert, tut define nDS18B20 notify global:DEFINED:DS18B20.* attr $EVTPART1 stateFormat T: temperature °C
einfach nichts, naja, keine Meldungen im Event-Monitor oder im Log, und das Attribut wird auch nicht gesetzt. Ich vermute es liegt an dem Regexp... kann mir jemand auf die Sprünge helfen?

Danke
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Markus Bloch

Das Event "DEFINED" gibt nur den Namen des definierten Events im Event-Monitor aus:

Zitat2016-01-24 18:42:29.221 Global global DEFINED Aussensensor

Man kann damit nicht ohne weiteres den Modulnamen ermitteln ohne in Perl-Code abzutauchen. Mithilfe von Perl-Code im notify würde folgendes funktionieren (selbst getestet):

define nDS18B20 notify global:DEFINED.* {if($defs{$EVTPART1}->{TYPE} eq "DS18B20") {fhem("attr $EVTPART1 stateFormat T: temperature °C")}}

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Generell würde ich jedoch anregen, eine automatische Setzung dieses Attributs im Modul vorzunehmen, das stateFormat kann dann vom User durchaus nach eigenen Vorstellungen verändert werden. Das wäre die saubere Methode.

Am besten den Urheber des Moduls mal kontaktieren.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

abc2006

Hi Markus,
danke für deine Antwort!
Ich verstehe aber nicht, was du mit Modul meinst ... ich will einfach für alle Geräte, die vom autocreate den Namen geraet_xxxyyyy bekommen, ein Attribut setzen.

Zitat von: Markus Bloch am 24 Januar 2016, 18:47:51
Das Event "DEFINED" gibt nur den Namen des definierten Events im Event-Monitor aus:
Zitat2016-01-24 18:42:29.221 Global global DEFINED Aussensensor

2016-01-24 22:03:14.713 OWServer myOWServer DISCONNECTED
2016-01-24 22:03:14.717 OWServer myOWServer CONNECTED
2016-01-24 22:03:14.723 OWServer myOWServer /settings/timeout/directory:           60
2016-01-24 22:03:14.727 OWServer myOWServer /settings/timeout/ftp:          900
2016-01-24 22:03:14.732 OWServer myOWServer /settings/timeout/ha7:           60
2016-01-24 22:03:14.736 OWServer myOWServer /settings/timeout/network:            1
2016-01-24 22:03:14.741 OWServer myOWServer /settings/timeout/presence:          120
2016-01-24 22:03:14.746 OWServer myOWServer /settings/timeout/serial:            5
2016-01-24 22:03:14.750 OWServer myOWServer /settings/timeout/server:           10
2016-01-24 22:03:14.755 OWServer myOWServer /settings/timeout/stable:          300
2016-01-24 22:03:14.760 OWServer myOWServer /settings/timeout/uncached: 0
2016-01-24 22:03:14.764 OWServer myOWServer /settings/timeout/usb:            5
2016-01-24 22:03:14.769 OWServer myOWServer /settings/timeout/volatile:           15
2016-01-24 22:03:14.773 OWServer myOWServer /settings/timeout/w1:           30
2016-01-24 22:03:14.778 OWServer myOWServer /settings/units/pressure_scale: mbar
2016-01-24 22:03:14.783 OWServer myOWServer /settings/units/temperature_scale: C
2016-01-24 22:03:14.786 OWServer myOWServer Initialized
2016-01-24 22:03:16.371 OWDevice DS18B20_615050070000 temperature: 19.375
2016-01-24 22:03:16.371 OWDevice DS18B20_615050070000 alarm: 1
2016-01-24 22:03:16.641 Global global DEFINED DS18B20_615050070000
2016-01-24 22:03:16.641 Global global ATTR DS18B20_615050070000 DbLogExclude .*
2016-01-24 22:03:16.657 Global global ATTR DS18B20_615050070000 room OWDevice
2016-01-24 22:03:16.670 Global global SAVE


Also müsste ich doch auf DS18B20_* filtern können... oder bin ich da auf dem Holzweg? Das wäre zumindest das, was ich will ...

Grüße

Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Markus Bloch

Stimmt, ja da hast du recht. Nur dann würde die Regexp folgendermaßen lauten:

define nDS18B20 notify global:DEFINED.DS18B20_.* attr $EVTPART1 stateFormat T: temperature °C

Sorry für die Verwirrung.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Kann man aber auch nachträglich manuell in einem Rutsch machen:

attr DS18B20_.* stateFormat T: temperature °C

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

abc2006

ui, super!
Danke !
Genau das wollte ich haben;-)

stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Ganglion

Gibt es sowas auch für die Geräte die per autocreate angelegt werden?


Zitat von: Markus Bloch am 24 Januar 2016, 22:12:20
Stimmt, ja da hast du recht. Nur dann würde die Regexp folgendermaßen lauten:

define nDS18B20 notify global:DEFINED.DS18B20_.* attr $EVTPART1 stateFormat T: temperature °C

Sorry für die Verwirrung.

Gruß
Markus