Autor Thema: AttrList während der Laufzeit verändern  (Gelesen 3194 mal)

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 3664
AttrList während der Laufzeit verändern
« am: 18 Mai 2013, 13:46:21 »
Hallo zusammen,

ich würde gern fragen, ob es möglich ist die AttrList während der Laufzeit von FHEM zu verändern. Generell wird diese ja nur mit der Initialize-Funktion gesetzt.

Nun hab ich den Fall, dass ich bei PRESENCE den Fall habe, dass je nach Definition das ein oder andere Zusatz-Attribut verwendbar ist.

Ich würde es dabei gerne so halten, dass das Attribut nur dann angezeigt wird, wenn es auch wirklich benutzbar ist.

In $hash ist zur Laufzeit aber AttrList nicht enthalten. Jetzt ist die Frage ob diese Attributliste pro Definition oder nur pro Modul existiert.

Ist so etwas aktuell möglich?

Vielen Dank

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)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24281
Aw: AttrList während der Laufzeit verändern
« Antwort #1 am: 18 Mai 2013, 14:09:30 »
Die AttributNamen sind nicht Instanz, sondern Modul-spezifisch. Diesen Wert kann man natuerlich jederzeit aendern durch setzen von $modules{$defs{$d}{TYPE}}{AttrList}

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 3664
Aw: AttrList während der Laufzeit verändern
« Antwort #2 am: 18 Mai 2013, 14:13:09 »
Hallo Rudi,

vielen Dank für die Information. Leider wollte ich es gerade so machen, dass die Instanz je nach Definition einen zusätzlichen parameter freigibt.

Da es aber nur generell für deinen Modul-Typ möglich ist, würde ich damit auch die Attribute von anderen Definitionen des selben Moduls ändern und das wollte ich nicht.

Trotzdem vielen Dank für die Info.

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)

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3886
Antw:AttrList während der Laufzeit verändern
« Antwort #3 am: 06 April 2014, 13:39:56 »
Hi,
ich stehe ebenfalls vor diesem Problem. Ich möchte aber die Attrlist aller Instanzen eines Moduls anpassen.
Warum ist aber dann $modules{$defs{$d}{TYPE}}{AttrList} Instanzabhängig? -> $d ist die ModulInstanz

Im Speziellen möchte ich eine Werteliste eines ModulAttributes verändern. Hat das schonmal jemand in einem Modul verbaut wo ich spicken kann?
FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamps, RPi für BLE Bodenfeuchtesenoren, Text2Speech.
Maintainer der Module: Text2Speech, TrashCal, MediaList

Meine Projekte auf https://github.com/tobiasfaust
u.a. PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17257
  • s/fhem\.cfg/configDB/g
Antw:AttrList während der Laufzeit verändern
« Antwort #4 am: 06 April 2014, 13:54:47 »
Das was Du in einem Bewässerungsmodul alles per attribut machen möchtest, ist nicht wirklich zielführend.
Sowas würde ich immer über ein set machen, nicht über ein attr.

Grundsätzlich kannst Du ein attribut aber auch per devspec mit TYPE=<module> in allen definierten Einheiten Deines gewünschten Typs setzen.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17257
  • s/fhem\.cfg/configDB/g
Antw:AttrList während der Laufzeit verändern
« Antwort #5 am: 06 April 2014, 16:28:47 »
Meiner Meinung nach "gehören" die Attribute dem Anwender. Nicht dem Modul und schon gar nicht dem Modulentwickler.
Nach dem define sollten diese nur noch vom Anwender verändert werden.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3886
Antw:AttrList während der Laufzeit verändern
« Antwort #6 am: 06 April 2014, 17:29:14 »
Anwendungsfall ist analog dem attr iodev. Ein übergeordnetes Modul wird definiert und die untergeodneten Module können sich per attr daran hängen. Und da möchte ich gerne die attrliste automatisch Name jedem define des übergeordneten Moduls generieren lassen.
Wir reden also mittlerweile nicht mehr von einem bewasserungsmodul sondern  von einer zweier Gruppe.

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamps, RPi für BLE Bodenfeuchtesenoren, Text2Speech.
Maintainer der Module: Text2Speech, TrashCal, MediaList

Meine Projekte auf https://github.com/tobiasfaust
u.a. PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17257
  • s/fhem\.cfg/configDB/g
Antw:AttrList während der Laufzeit verändern
« Antwort #7 am: 06 April 2014, 17:34:51 »
Das ändert nichts an meiner Meinung. Als Modulentwickler hat man durchaus andere Möglichkeiten, anstatt Attribute dafür zu verwenden, irgendwelche Parameter zu übergeben/vererben.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3886
Antw:AttrList während der Laufzeit verändern
« Antwort #8 am: 06 April 2014, 17:40:51 »
Wasser meint Rudi dazu? Schliesslich hat er das Konstrukt mit iodev eingeführt welches gerade meine Grundlage hierfür darstellt...

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamps, RPi für BLE Bodenfeuchtesenoren, Text2Speech.
Maintainer der Module: Text2Speech, TrashCal, MediaList

Meine Projekte auf https://github.com/tobiasfaust
u.a. PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17257
  • s/fhem\.cfg/configDB/g
Antw:AttrList während der Laufzeit verändern
« Antwort #9 am: 06 April 2014, 17:51:49 »
IOdev ist eine Altlast, da ging es vermutlich nicht anders. Bei Dir geht es aber um eine Neuentwicklung.

Ausserdem solltest Du dringend Deine Autovervollständigung am Handy abschalten, da kommt manchmal ganz schöner Mist raus  8)
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3886
Antw:AttrList während der Laufzeit verändern
« Antwort #10 am: 06 April 2014, 17:54:15 »
Ich bin immer noch so schlau wie vorher :( wie soll ich nun beide Module verbinden??

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamps, RPi für BLE Bodenfeuchtesenoren, Text2Speech.
Maintainer der Module: Text2Speech, TrashCal, MediaList

Meine Projekte auf https://github.com/tobiasfaust
u.a. PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20760
Antw:AttrList während der Laufzeit verändern
« Antwort #11 am: 06 April 2014, 18:24:32 »
mal ein paar ungeordnete antworten und bedanken... also:

- $modules{$defs{$d}{TYPE}}{AttrList} -> $d ist zwar die instanz aber der TYPE aller deiner instanzen ist der gleiche. somit gibt es $modules{<TYPE>}{AttrList} genau ein mal. deshalb ist es modul weit und nicht instanz weit.

- die liste der set und get ist instanz spezifisch. die kannst du ohne probleme zur laufzeit ändern und hier kannst du genau die möglichen in frage kommenden werte dynamisch machen.

- rudi ist der meinung das attribute dem user gehören. das muss aber nicht in allen fällen richtig sein und manchmal gibt es noch keinen globalen mechanismus der besser ist als attribute.

- in (fast?) allen fällen bei dem zwei oder mehr module mit einander zu tun haben ist es bis jetzt so das das eine i/o aufgaben für die anderen übernimmt. das geht dann über IODev,readFn,writeFn und IOWrite. das könnte man missbrauchen.

- warum machst du es so kompliziert? es sind doch deine beiden module. du kannst auf beiden ebenen funktionen bereit stellen die sich jeweils aus der anderen einfach aufrufen lassen. die passenden module findest du z.b. in einer schleife über alle module in dem du TYPE prüfst. das machen die internen routinen alle auch nicht anders. wenn du dir sorgen um die performance machst kannst du jewels den parent und die liste der children cachen.

- deine frage ist glaube ich noch zu abstrakt um sinnvolle vorschläge zu machen.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH