Überladen von Util-Funktionen

Begonnen von Hackstall, 22 Januar 2019, 20:12:22

Vorheriges Thema - Nächstes Thema

Hackstall

Hallo,

eine Frage, kann ich Routinen (Subs) die aus StandardModuln per default genommen werden mit eigenen Routinen (Subs)
in myUtils überlagern. Geht das technisch überhaupt.

Also so dass eine Routine zBsp. Convert($$)  aus dem 04_ExtModul mit meiner Routine Convert($$) aus meinem Modul 99_myUtils
von FHEM genommen wird?

Danke Andreas

amenomade

Wenn ich richtig verstanden habe, willst Du eine Funktion eines Moduls überschreiben/überladen? Das halte ich für keine gute Idee, da Du nicht weisst welche Abhängigkeit diese Funktion hat (und in der Zukunft haben wird!).

Wenn das sein soll: die 99.* Modulen werden am Ende geladen. Ich habe es nie probiert, aber theoretisch könntest Du dann sowas in myUtils in der Initialize Funktion schreiben:
  if(!$modules{ExtModul}{LOADED} && -f "$attr{global}{modpath}/FHEM/04_ExtModul.pm") {
            my $ret = CommandReload(undef, "04_ExtModul");
    Log3 undef, 1, $ret if($ret);
}

um das Modul ExtModul zu laden, falls er nicht geladen ist (ausser 99.* werden erst die Modulen geladen, wenn ein Device vom Typ definiert wird, sprich define xxxx ExtModul blabla in der Config.)

Und dann weiter in der Datei:
sub ExtModul_Convert($$) {... code...}
Somit sollte die Funktion überschrieben werden... Du wirst ein Warning in der Log haben, da die sub "redefined" wird, aber vielleicht kannst Du noch es verhindern mit:
no warnings 'redefine';. Ich würde das Warning lassen, damit ein Spur von dieser Konstrukt irgendwo bleibt...


Wie gesagt: nicht getestet, und vor allem ohne Gewähr! Bin kein FHEM Developer
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

CoolTux

Kleine Ausbesserung. Die 99er werden als aller erstes geladen. Dem zu Folge sollte ein überschreiben eigentlich nicht möglich sein.
Davon ab ist davon dringend ab zu raten. Siehe amenomade Beitrag.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

...sowas paßt richtig gut in Anfängerfragen :o ...
Im Ernst: Was willst du erreichen?
Wenn du bessere Varianten hast für vorhandene Routinen: https://wiki.fhem.de/wiki/How_to_write_a_patch

Solange du austestest: https://wiki.fhem.de/wiki/Update#exclude_from_update

Ansonsten kannst du auch mit packages arbeiten usw.. Aber das ist erst mal alles Spekulation, solange du nicht verrätst, was die Motivation dahinter ist...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

amenomade

#4
Zitat von: CoolTux am 24 Januar 2019, 15:04:29
Die 99er werden als aller erstes geladen.

Ich wurde davon verwirrt aus fhem.pl:

    foreach my $m (sort readdir(DH)) {
      next if($m !~ m/^([0-9][0-9])_(.*)\.pm$/);
      $modules{$2}{ORDER} = $1;
      CommandReload(undef, $m)                  # Always load utility modules
         if($1 eq "99" && !$modules{$2}{LOADED});
      $counter++;
    }


Aber Du hast natürlich Recht (Du bist FHEM Developer ;) ). Dann ist es nicht so einfach... Wobei... es fehlt nicht so viel in meinem Code oben.

Egal: das wäre sowieso eine schlechte Idee gewesen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

CoolTux

Wenn der Thread Ersteller "besseren" Code für eine bereits vorhandene Funktion hat dann bitte her damit.
Am besten ins passende Forum als Patch.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net