Neues Modul - Versionsnummer bei reload

Begonnen von cotecmania, 21 November 2016, 14:46:12

Vorheriges Thema - Nächstes Thema

cotecmania

Hallo,

ich arbeite gerade an einem Modul und möchte als Internal die Versionsnummer ausgeben.
Wenn ich "$hash->{VERSION} = "0.95;" in der define-Funktion setze, wird  das beim "reload" in FHEM nicht uebernommen, nur wenn ich das DEF z.B im Frontend aendere (Modify) oder beim neu anlegen eines Device funktionierts logischerweise, da define durchlaufen wird.

Wenn ich "$hash->{VERSION} = "0.95;" in der Initialize-Funktion aufrufe, wird die Version bei "reload" auch nicht gesetzt, obwohl die Funktion definitiv durchlaufen wird.

Was mache ich falsch ?

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

rudolfkoenig

Es gibt bereits ein version Befehl fuer sowas.

Wenn es unbedingt sein muss (Hinweis: muss vmtl. nicht), dann musst Du in .pm Code ohne Funktion schreiben, der alle $defs prueft, und sie korrigiert.

cotecmania

Ich finde die Version eines Moduls gehoert zum Modul selbst und sollte direkt dort sichtbar sein.

Für den Ersteller auch sehr hilfreich in der Entwicklungsphase, wenn ein LIST des Devices hier ins Forum gestellt wird, um zu sehen, welche Version wirklich verwendet wird.

Man koennte die vorhandene Version ja auch als Standard-Internal in jedes Modul schreiben ? Das waere perfekt ...

Das hier verstehe ich allerdings nicht :
, dann musst Du in .pm Code ohne Funktion schreiben, der alle $defs prueft, und sie korrigiert.

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

rudolfkoenig

Kann das sonstwer erklaeren? Ich komme immer wieder auf die gleiche Formulierung.

Damian

Ich habe auch schon öfters die Versionsangabe im list-Output vermisst. Eine genaue Analyse eines Problems lässt sich oft nur mit Hilfe der Interna des Moduls vornehmen. Nach dem Post des list-Ausdruck kommt dann aber immer die Frage .... und welche Version?

Gruß

Damian



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

marvin78

Direkt nach einem version zu fragen ist zu anstrengend?

cotecmania

#6
Zitat von: marvin78 am 21 November 2016, 16:53:24
Direkt nach einem version zu fragen ist zu anstrengend?

Evtl. sinnvolle Neuerungen totzureden, die Allen dienen,  ist anstrengend ...

Was wäre denn das Argument dagegen, die Version als Internal im Device abzulegen ?

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

CoolTux

#7

my $version = "2.6.6";

sub Präfix_Initialize($) {

...
...
    foreach my $d(sort keys %{$modules{TYPENAME}{defptr}}) {
my $hash = $modules{TYPENAME}{defptr}{$d};
$hash->{VERSION}                  = $version;
    }


sub Prefäx_Define($$) {

...
...
   $modules{TYPENAME}{defptr}{$hash->{EINDEUTIGESINTERNAL}} = $hash;

   }
}


Es gibt einige Beispiele in Modulen. AMAD, HOMEBOT, NUKIBridge und so weiter. Das eindeutige Internal kann z.B. ein Host sein oder eine MAC
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

rudolfkoenig

ZitatWas wäre denn das Argument dagegen, die Version als Internal im Device abzulegen ?
Information, was man auch sonst zur Verfuegung hat, zu duplizieren.
$hash wird weiter aufgeblaeht.
Benutzer interessiert es nicht.
CommandDefine/CommandReload/etc muss erweitert werden.
Will nicht sagen, dass, wenn ich ueberstimmt werde, es nicht einbauen werde, aber du hast nach Argumenten gefragt.


@CoolTux: dein Beispiel ist nicht "reload-safe" (wie urspruenglich gefragt), weil die Funktionen bei reload nicht ausgefuehrt werden.
Deswegen muss der Code ausserhalb von jeglicher Funktion sein.

dev0

Gäbe es ein globales Event 'RELOAD <module name>', dann könnte man so etwas in der NotifyFn neu setzen. Wäre auch hilfreich, wenn man bspw. einen set command hash dynamisch erweitert. Dieser hash ist nach einem reload auch zurückgesetzt.

Nur so ne Idee ;)

CoolTux

Zitat von: rudolfkoenig am 21 November 2016, 17:31:14
@CoolTux: dein Beispiel ist nicht "reload-safe" (wie urspruenglich gefragt), weil die Funktionen bei reload nicht ausgefuehrt werden.
Deswegen muss der Code ausserhalb von jeglicher Funktion sein.

Hallo Rudi,

Präfix_Initialize wird aber doch bei einem reload ausgeführt. Zu mindestens funktioniert es bei mir und das in mehreren Modulen.


Grüße
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

rudolfkoenig

@CoolTux: sorry, du hast natuerlich Recht.

Wg. RELOAD Event: braucht das jemand?
Wie CoolTux das richtig sagt, Modulintern kann man sowas auch mit der Initialize Funktion erledigen.

CoolTux

Und ich finde das ist auch völlig ausreichend.

Was die Sinnhaftigkeit an geht. Nun das liegt denke ich mal am Stil des Entwicklers. Ich habe gerne eine eigene Versionierung meiner Module. Sie trennen unter anderem zwischen Devel und Stable. Speziell bei AMAD ist es sogar nötig. Ansonsten gebe ich Rudi Recht, wenn der Author selbst sowas nicht braucht oder gar das Modul. Ist es nur ein Klotz am Bein von $hash.


Grüße
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

frank

eine echte versionsnummer (am besten inkl. releasedate) eines moduls finde ich wesentlich informativer, als eine laufende svn-id. ich freue mich auch über jedes modul, das mir solch eine nummer in den internals bereitstellt.

dadurch fällt zb ein zunächst verschobener und dann vergessener restart nach einem update wesentlich schneller auf.  ;)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

dev0

RELOAD: Wenn die InitializeFn abgearbeitet wird, dann sind die Attribute noch nicht gesetzt, wenn ich es richtig in Erinnerung habe. Das Beispiel mit dem cmd hash kann man aber z.B. am Anfang der SetFn überprüfen und ggf. setzen, wenn man den hash anhand von Attributen erweitert hat.
Ich fände das Event praktisch aber nicht unbedingt nötig.