FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Andi291 am 16 September 2015, 19:52:49

Titel: [gelöst] X_Attr wird nicht aufgerufen
Beitrag von: Andi291 am 16 September 2015, 19:52:49
Hallo liebe Mitstreiter,

mein erster Beitrag in diesem Teil des Forums - deshalb kurz zu meiner Person:
Programmiererfahrung in Java und Ansi-C sind auf einem guten Level, bei Perl bin ich noch...naja. Ich nutze FHEM zur Visualisierung meiner KNX-Automation und bin in diesem Zuge auf das ein- oder andere Potential gestoßen.
Letztendlich habe ich vor einigen Monaten die Wartung des EIB-Moduls und (vorgestern :-)) die der TUL übernommen.

Ich stoße gerade auf ein hartnäckiges Problem, bei dem ich nicht weiter komme...

Ums verrecken schaffe ich es nicht, das TUL_Attr, bzw. EIB_Attr aufgerufen werden. Ich habe die original-sourcen versucht, das Template vom Developer Intro - no way. Ich habe an einem Dutzend Stellen print-Ausgaben eingebaut, komme aber nicht auf die richtige Spur.

Bei Java würd ich drauf tippen, dass irgendein Reflection-Mechanismus in die Hosen geht. Bei Perl jedoch hänge ich gerade fest...

Hier die "Urfunktion":


sub
TUL_Attr(@)
{
  my @a = @_;

  print "Bin hier\n";
  Log 2, "Unsupported method TUL_Attr($a[0],$a[1],$a[2],$a[3])";

  return undef;
}


Kann mir bitte irgend jemand einen Schubs in die richtige Richtung, sprich aufrufende Codestelle oder "Aktivierungstrick" nennen?

Grüße, Andi
Titel: Antw:X_Attr wird nicht aufgerufen
Beitrag von: rapster am 16 September 2015, 19:57:13
Hallo Andi,

hast du die Funktion auch in der Initialize bekannt gemacht?

sub TUL_Initialize($$) {
    my ($hash) = @_;
    $hash->{AttrFn} = 'TUL_Attr';
}


Gruß
  Claudiu
Titel: Antw:X_Attr wird nicht aufgerufen
Beitrag von: Andi291 am 16 September 2015, 19:58:58
Hallo Rapster,

(leider) ja...

sub
TUL_Initialize($)
{
  my ($hash) = @_;

# Provider
  $hash->{ReadFn}  = "TUL_Read";
  $hash->{WriteFn} = "TUL_Write";
  $hash->{ReadyFn} = "TUL_Ready";

# Normal devices
  $hash->{DefFn}   = "TUL_Define";
  $hash->{UndefFn} = "TUL_Undef";
  $hash->{GetFn}   = "TUL_Get";
  $hash->{SetFn}   = "TUL_Set";
  $hash->{StateFn} = "TUL_SetState";
  $hash->{AttrFn}  = "TUL_Attr";
  $hash->{AttrList}= "do_not_notify:1,0 dummy:1,0 " .
                     "showtime:1,0 model:TUL loglevel:0,1,2,3,4,5,6 ";
  $hash->{ShutdownFn} = "TUL_Shutdown";
 
}
Titel: Antw:X_Attr wird nicht aufgerufen
Beitrag von: rapster am 16 September 2015, 20:08:00
Das erste was denke ich nicht passt:
Zitat von: Andi291 am 16 September 2015, 19:52:49
  Log 2, "Unsupported method TUL_Attr($a[0],$a[1],$a[2],$a[3])";
Hier baust du dir ja 1. eine Endloßschleife, weil die Funktion sich immer wieder selber aufruft, (ups seh grad haste ja noch in den " ")
und 2. wird das ohne forward-declaration mindestens eine Interpreter Warnung erzeugen, obs trotzdem funktioniert?

Das zweite was nicht passt:
Zitat von: Andi291 am 16 September 2015, 19:52:49
  $hash->{AttrList}= "do_not_notify:1,0 dummy:1,0 " .
                     "showtime:1,0 model:TUL loglevel:0,1,2,3,4,5,6 ";
In Perl kannst du zwar mehrzeilig Schreiben, allerdings muss immer am Anfang der Zeile der Operator stehen, also so

$hash->{AttrList}= "do_not_notify:1,0 "
                               ."dummy:1,0 "
                               ."showtime:1,0 "
                               ."model:TUL "
                               ."loglevel:0,1,2,3,4,5,6";


Gruß
  Claudiu
Titel: Antw:X_Attr wird nicht aufgerufen
Beitrag von: rudolfkoenig am 16 September 2015, 20:16:48
Bei mir wird sie aufgerufen:
fhem> define T TUL none 1234 12
fhem> attr T model TUL
.....
2015.09.16 20:15:09 1: T device is none, commands will be echoed only
2015.09.16 20:15:33 2: Unsupported method TUL_Attr(set,T,model,TUL)


PS. Das mit "muss immer am Anfang der Zeile der Operator stehen" ist natuerlich falsch.
Titel: Antw:X_Attr wird nicht aufgerufen
Beitrag von: rapster am 16 September 2015, 20:18:12
Zitat von: Andi291 am 16 September 2015, 19:52:49
Ich habe an einem Dutzend Stellen print-Ausgaben eingebaut, komme aber nicht auf die richtige Spur.

BTW, print ist in fhem nicht gerade hübsch, das landet zwar (normalerweise) auch im fhem-log, allerdings über den stdout Umweg,
im Modul am besten mit Log3() arbeiten.

Gruß
  Claudiu
Titel: Antw:X_Attr wird nicht aufgerufen
Beitrag von: Andi291 am 16 September 2015, 20:19:02
Oh Mann - ich bin ein Hirsch...

1. TUL_Attr wird nur aufgerufen, wenn ich ein Attr an die TUL richte - nicht, wenn die "Kinder" aus dem EIB versorgt werden.

2. Im Initialize des EIB hatte ich EIB_Attr natürlich NICHT drin...

Ergo - danke, hat funktioniert!

Grüße, Andi