[patch] 70_STV.pm, Ermittlung von IP und MAC Adresse

Begonnen von kaihs, 27 Oktober 2015, 20:14:39

Vorheriges Thema - Nächstes Thema

kaihs

Hallo,

das Modul 70_STV.pm funktionierte bei mir nicht mehr, weil die Ermittlung von IP und MAC-Adresse mittels Aufruf von ipconfig -a fehlschlug.
Ich denke mal die Ausgabe ist mittlerweile anders formatiert.

Da diese Technik eh ziemlich fehlerträchtig ist, habe ich das Modul auf die Verwendung der Module Net::Address::IP::Local und IO::Interface::Simple umgestellt.
Ich hoffe, dass es dadurch robuster wird. Bei mir mit Debian Jessie funktioniert es dann auf jeden Fall wieder.

Die beiden Module können mittels

sudo apt get install libnet-address-ip-local-perl libio-interface-perl

installiert werden.

Anbei ein Diff mit den Änderungen und das geänderte Modul.

Wäre schön, wenn das ins svn übernommen werden könnte.

Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

Zwiebel

Hallo kaihs,

danke für den Patch - hab es geändert und hoch geladen.
Etwas unschön das weiter Perl Module notwendig sind, aber wenn dadurch die Erkennung robuster wird soll es mir recht sein.

Viele Grüße
Zwiebel

vbs

Sind die neuen Libs optional? Bzw. kann man das Modul noch benutzen, wenn man die Libs nicht hat?

Zwiebel

Hallo!

vbs hat recht! das STV Modul wird nicht geladen wenn man diese Module nicht hat!
Wie wollen wir weiter vorgehen? Bitte um Vorschläge.

viele Grüße
Zwiebel

P.A.Trick

Einen Eintrag im Changelog und eine dicke Meldung im Logfile das die Module nachgeladen werden müssen!?
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

vbs

Zitat von: kaihs am 27 Oktober 2015, 20:14:39
das Modul 70_STV.pm funktionierte bei mir nicht mehr, weil die Ermittlung von IP und MAC-Adresse mittels Aufruf von ipconfig -a fehlschlug.
Nur mal für mich zum Verständnis:
Ich hab mich gerade gefragt, wozu das Modul die MAC überhaupt benötigt. Kann mir das jemand sagen? Ich habe gerade kurz ins Modul geschaut und spontan keine Stelle gefunden, an der die MAC benutzt wird.

Zwiebel


Ralli

Hallo,

danke für den Patch !

... und die konstruktive Kritik, dass solche das kritischen Änderungen auf jeden Fall mit entsprechendem Hinweis in dem Changelog und somit im Udate-Log auftauchen müssen!
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Zwiebel

ich hab versucht das Problem abzufangen....aber das funktioniert leider so nicht. Es wird die Log Meldung immer ausgeführt ob das System die Module hat oder nicht.

Ab Zeile 210
....
"SUB_TITLE SVIDEO1 SVIDEO2 SVIDEO3 TOOLS TOPMENU TTX_MIX TTX_SUBFACE TURBO TV TV_MODE UP VCHIP VCR_MODE ".
"VOLDOWN VOLUP WHEEL_LEFT WHEEL_RIGHT W_LINK YELLOW ZOOM1 ZOOM2 ZOOM_IN ZOOM_MOVE ZOOM_OUT connect";

    if(!eval("use Net::Address::IP::Local;use libio-interface-perl;1")){
        Log3 undef, 3, "[STV] Please install needet Modules with \"sudo apt get install libnet-address-ip-local-perl libio-interface-perl\" ";
        $hash->{STATE} = 'Failed';
        return undef;
    }
.....


kann mir da jemand helfen?

Gruß
Zwiebel

vbs

Danke für den Tip! MAC ist dann also wirklich wichtig, da sie ja auch für die Nachrichten benötigt wird...

So wie ich das verstehe, funkioniert dein Code nicht, weil du "use" benutzt, welches zur Compile-Zeit ausgewertet wird. Hab ich von hier:
http://stackoverflow.com/questions/251694/how-can-i-check-if-i-have-a-perl-module-before-using-it

Probier mal mit require:

my $rc = eval
{
  require Term::ReadKey;
  Term::ReadKey->import();
  1;
};

if($rc)
{
  # Term::ReadKey loaded and imported successfully
  ...
}


Übrigens ist die Meldung, das Problem mit apt zu beheben sehr plattformspezifisch. Gibt auch viele Linux-Distros, die kein apt haben (mein TinyCore zB auch nicht). Windows natürlich auch nicht.

vbs

Was wäre denn wenn man übergangsweise beide Varianten anbieten würde? Entweder durch automatische Erkennung, ob denn das Modul installiert ist, oder der User kann es per Attribut aktivieren "useImprovedMacDetection" o.ä.
In beiden Varianten könnte man im Fall der alten ifconfig-Methode eine Meldung ausgeben ala "You are using a deprecated MAC detection mechanism using ifconfig. Please install Perl moduls x and y".

Zwiebel

Hallo vbs,

hab deinen Vorschlag mit dem automatischen Erkennen eingebaut. Ich würde die neue Version dann hochladen. (Anhang)
OK ?

Viele Grüße
Zwiebel

justme1968

prüfen ob ein perl modul da ist geht recht einfach z.b. so:

- pro perl modus eine fhem modul globale variable auf 1 initialisieren
- diese in der initialize routine des fhem moduls per eval und fehler prüfung auf 0 setzen wenn das perl modul nicht geladen werden kann
- im DefFn ein internal setzen das dem anwender die erkennung zeigt
- passende meldungen und fallbacks im code durch auswertung der variable wann immer nötig

my $has_ip_local = 1;

sub
xyz_Initialize($) {
  eval "use Net::Address::IP::Local";
  $has_ip_local = 0 if($@);
  ...
}

sub
xyz_Define($$){
  ...
  $hash->{HAS_Net_Address_IP_Local} =  $has_ip_local;
  ...
}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Zwiebel


grobby

#14
Die beiden Module können mittels
sudo apt get install libnet-address-ip-local-perl libio-interface-perl

installiert werden.


Gut gesagt, wie macht man das wenn Fhem auf einer Fritz 7390 mit Freetz läuft?

okay hab die 70_STV.pm mit der Autoerkennung rübergeschoben und nun klappts erstmal wieder.
aber zu meiner Frage kann ruhig geantwortet werden.