Beim Define einige Attr vorbelegen/Initialisieren?

Begonnen von Tobias, 31 März 2014, 13:29:29

Vorheriges Thema - Nächstes Thema

Tobias

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
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

betateilchen

#1
$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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tobias

Danke... ich probier es aus... Dammit komme ich weiter...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

UliM

Hi,
dafür hat die Funktion AttrVal() den defaultwert.
Dieser wird verwendet solange dass Atttribut nicht mit einem abweichenden Wert gesetzt ist.
Gruß Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

UliM

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
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

abgesehen von der technischen Seite: Ich würde schon aus Entwicklersicht immer versuchen zu vermeiden, einen solchen Weg mit vorbelegten Attributen zu wählen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!