Hi,
ich suche eine "schöne" Möglichkeit, beim Device-Define einige Attibute vorzubelegen.
Diese dürfen aber nur beim Define gesetzt werden, beim FHEM-Start natürlich nicht. Der User könnte ja diese geändert haben.
Hat jemand einen Codeschnipsel parat?
Gruss
$attr{$deviceName}{$attrName} = $attrValue;
Da Attribute beim "save config" mitgespeichert werden, werden beim fhem-Start dann zuerst die vorbelegten Attribute gesetzt und im zweiten Schritt sofort durch die gespeicherten Werte ersetzt.
Kritisch wird es nur, wenn der Anwender Attribute löscht. Dann bleiben die vorbelegten Attribute erhalten.
Danke... ich probier es aus... Dammit komme ich weiter...
Hi,
dafür hat die Funktion AttrVal() den defaultwert.
Dieser wird verwendet solange dass Atttribut nicht mit einem abweichenden Wert gesetzt ist.
Gruß Uli
Das setzt aber voraus, dass alle definierten Geräte des gleichen Modultyps die gleichen Defaultwerte verwenden, was nicht immer zwingend der Fall sein muss. Und das Problem mit den gelöschten Attributen löst AttrVal() auch nicht.
Hi,
Wenn je Gerät unterschiedlich sollte es evtl eher als Parameter bei der Definition mitgegeben werden find ich.
Das mit dem Löschen hab ich nicht verstanden.
Gruß Uli
Zitat von: UliM am 01 April 2014, 11:08:02
Wenn je Gerät unterschiedlich sollte es evtl eher als Parameter bei der Definition mitgegeben werden find ich.
Es kann auch Attribute geben, die erst während des define ermittelt und gesetzt werden können (und sogar jedesmal anders sein können)
Zitat von: UliM am 01 April 2014, 11:08:02
Das mit dem Löschen hab ich nicht verstanden.
Beispiel:
Während des define werden die Attribute a1,a2,a3 vorbelegt (und damit generiert).
Zur Laufzeit ändert der Anwender die Attribute a1 und a3 und löscht das Attribut a2.
Beim nachfolgenden save werden die Attribute a1 und a3 mit ihren neuen Werten gespeichert, a2 ist nicht mehr vorhanden.
Beim nächsten fhem Neustart werden vom define wieder die Attribute a1,a2,a3 vorbelegt und dann die Attribute a1 und a3 mit den gespeicherten Userwerten überschrieben.
Das Attribut a2 ist dann aber wieder mit seinem vorbelegten Wert vorhanden.
abgesehen von der technischen Seite: Ich würde schon aus Entwicklersicht immer versuchen zu vermeiden, einen solchen Weg mit vorbelegten Attributen zu wählen.