Hallo, ich stehe gerade vor der Aufgabe nach einem rename <device> die Definition in bestehenden notify´s sowie at´s zu übernehmen. RENAMED wirkt nur auf global, leider finde ich dazu nicht allzuviel oder besser gesagt es funktioniert nicht so wie ich angenommen habe. Hätte jemand mal ein Beispiel?
VG
Frank
das event kommt von global und entält den alten und neuen device namen des umbenannten device.
was funktioniert dabei nicht?
gruss
andre
Hallo Andre, ich bin davon ausgegangen das ein
define ren_nty notify global:RENAMED nameA nameB
dazu führt das in bestehenden notify oder at Definitionen der Name des devices mit nameA in nameB geändert wird, dass hat aber scheinbar nicht funktioniert, als zweite Frage ergibt sich ob gplot Definitionen die nameA enthalten in nameB geändert werden oder dieses händisch erledigt werden muss denn die FileLog Def. werden mit rename ja automatisch auf den neuen device Namen geändert.
VG
Frank
das event sagt nur das ein device umbenannt wurde. es wird nichts automatisch angepasst. das wäre oft auch garnicht möglich.
dein notify tut nichts weiter als einen fehler zu produzieren den du im log sehen solltest.
es gibt ein paar devices die automatisch auf das umbenennen reagieren. readingsGroup zum beispiel.
alles andere müsstest du selber und von hand machen.
bei plotfiles reicht es auch nicht die regex in der def zu ändern. du müsstest auch alle alten werte rückwirkend auf den neuen namen ändern.
aus all diesen gründen empfiehlt es sich meist device namen auf irgendwelchen eindeutigen ids zu belassen und den angezeigten namen per alias anzupassen.
gruss
andre
Genau das dachte ich mir schon, wollte mir das händische korrigieren ersparen und alias bringt in diesem Fall nichts, da ich in einer sub mit
my @monitored=devspec2array("(Schalter_Tuer.*):FILTER=STATE!=closed");
auf alle devices mit Schalter_Tuer.* reagieren will aber die devices jetzt noch unterschiedliche Namen haben.
VG
Frank
namen in deinem code lassen sich erst recht nicht automatisch anpassen.
aber warum bringt dir alias nichts? du kannst denen devspec aufruf so ändern das er auch den alias mit einbezieht. oder du setzt ein user attribut für deine türen und wertest dieses aus. fax wäre dann vom namen komplett unabhängig.
Hallo Andre, an:
Zitat...aufruf so ändern das er auch den alias mit einbezieht...
da hänge ich. Denn ein list TYPE=alias Schalter_.* ist von der Syntax her nicht richtig und ich komme nicht drauf wie ich den Alias da mit einbeziehen kann.
VG
Frank
list alias=Schalter_.*
Ist klar, dann müsste das in der sub so aussehen:
my @monitored=devspec2array("(Schalter_Tuer.*|alias=Schalter_.*):FILTER=STATE!=closed");
?
VG
Frank
Zitat von: franky08 am 10 April 2017, 09:14:51
Ist klar, dann müsste das in der sub so aussehen:
my @monitored=devspec2array("(Schalter_Tuer.*|alias=Schalter_.*):FILTER=STATE!=closed");
?
VG
Frank
Ich würde sagen, ja. Aber teste das doch einfach mal.
Grrrr, da bekomme ich als return:
Zitat(Schalter_Tuer.*|alias=Schalter_.*):FILTER=STATE!=closed
ändere ich auf:
my @monitored=devspec2array("(Schalter_Tuer.*):FILTER=STATE!=closed");
funktioniert die sub und die offene Tür steht im return.
my @monitored=devspec2array(("(Schalter_Tuer.*):FILTER=STATE!=closed") || ("(alias=Schalter_.*):FILTER=STATE!=closed"));
Das war´s ;)
VG
Frank
Was ich nicht ganz verstehe. Wieso suchst Du dennoch nach NAME wenn Du doch schon alias nimmst. Nimm doch nur alias, macht ja auch Sinn. Dann kannst wegen meiner Deine Fenster Namen vergeben wie Du lustig bist und machst aber im Alias auf jeden Fall Fenster.*
Stimmt, sind aber Türen... ;) ;) :)
Ok, dann Türen ;D
Mmh, ein list liefert ordnungsgemäß:
siehe Screenshot
während aus der sub mit: my @monitored=devspec2array("(alias=Tür.*):FILTER=STATE!=closed");
Zitat(alias=Tür.*):FILTER=STATE!=closed
zurück kommt. ???
die klammern gehören da ziemlich sicher nicht hin.
ansonsten würde ich beides in den FILTER stecken;
.*:FILTER=alias=Tür.*:FILTER=STATE!=closed
es kann sein das das ü probleme macht. am besten im web frontend eingeben. das ist es utf8. wenn es nicht geht: versuch es mit einem oder zwei punkten.
statt STATE überleg dir ob state oder ein anderes reading besser ist.
Danke Andre, funktioniert jetzt, wobei T.r auch auf Termine matcht :)
my @monitored=devspec2array(".*:FILTER=alias=Tür.*:FILTER=STATE!=closed");
liefert wahrheitsgemäß:
ZitatTür Bad, Tür Schlafzimmer, Tür Kinderzimmer, Tür Küche, Tür Wohnzimmer und Tür Wohnung
wobei Tür.* die alias Namen sind.
Danke
VG
Frank