FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: PerlJoe am 24 Juni 2017, 15:14:49

Titel: [gelöst] Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: PerlJoe am 24 Juni 2017, 15:14:49
Hallo zusammen,

folgendes möchte ich realisieren.
Es soll alle 60Sekunden eine Funktion aus 99_myUtils.pm ausgeführt werden.
In der 99_myUtils.pm soll ein eigenes Modul eingebunden werden:

99_myUtils.pm:


package main;

use strict;
use warnings;
use POSIX;
use lib "/var/www/home/module";
use JHome;

sub myUtils_Initialize($$)
{
  my ($hash) = @_;
}


sub AllMinCheck() {
  return JHome::WerZuhause();
}


Modul JHome:#Skriptname:  JHomeDB.pm
#Funktion:    Alle Funktionen für Smart JHome
#Autor:       Jörg Häfner                               
#Datum:       24.06.2017
#Argumente:

package JHome;
use lib "/var/www/home/module"; 
use strict;
use POSIX;

sub WerZuhause(){
  return 0;
}

1;


Ich dachte mir ich löse das mit PRESENCE:
define JHomeAllMinCheck PRESENCE function { AllMinCheck() } 60 60

Funktioniert aber nicht... Wenn ich bei JHomeAllMinCheck set StatusRequest ausführe steht dann present ansatt, so wie die Funktion WerZuhause() 0 zurückgeben sollte, absent.

Was mache ich falsch?

Danke schonmal

Gruß, Jörg
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: JoWiemann am 24 Juni 2017, 15:42:01
Warum benutzt Du kein 'at'? Schau mal ins Wiki oder in die commandref.


Grüße Jörg

Gesendet von iPhone mit Tapatalk
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: PerlJoe am 24 Juni 2017, 15:51:33
Ich möchte über FHEM abfragen ob die Funktion fehlgeschlagen ist oder nicht. Deshalb sollte die Funktion einen Rückgabewert in eine FHEM Variable speichern. Also dachte ich PRESENT wäre da geeignet.

Meinst du es liegt an mein PRESENT das dies nicht funktioniert? Glaube ich fast nicht.

Aber werde es testen.
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: Otto123 am 24 Juni 2017, 17:04:09
Hi,

was gibt den { AllMinCheck() } in der FHEM Kommandozeile zurück?

Gruß Otto
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: PerlJoe am 24 Juni 2017, 17:43:08
Auch 1 und nicht 0.

Ich habe jetzt mal fehm neu gestartet. Dann kann die Webseite gar nicht geladen werden... komsich.

Vielleicht hat er in der 99_myUtils.pm ein probem mit anderen Modulen?

use lib "/var/www/home/module";
use JHome;
JHome::WerZuhause();


Kann doch aber gar nicht sein, mit Perl kenne ich mich schon einigermaßen aus und habe schon viel damit gemacht...

Hab den Teil mit dem fremden Modul wieder raus genommen und fhem neu gestartet, dann gings wieder.

Schon komisch... schade.



Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: PerlJoe am 26 Juni 2017, 17:49:21
Gibt es keine Möglichkeit eigene Module einzubinden?
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: CoolTux am 26 Juni 2017, 18:42:34
Da du wohl schon Perl programmierst. Warum machst du es nicht wie alle Entwickler und baust Debug Meldungen ein um zu sehen wie weit er kommt. Vielleicht kommt die eins einfach nur weil Deine Aufgerufene Sub Dein Modul aufrufen konnte. So ne Art Aufruf hat geklappt Rückmeldung.

Daher empfehle ich sowohl in der Sub als auch in Deinem Modul Debugmeldungen ein zu bauen. So bist Du ja blind unterwegs.
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: CoolTux am 26 Juni 2017, 18:51:09
Was mir noch ein fällt.
Ich gehe einfach mal davon aus das der User fhem das Verzeichnis
"/var/www/home/module";
lesen kann.
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: amenomade am 26 Juni 2017, 18:51:25
Und warum rufst Du
JHome::WerZuhause();
und nicht
WerZuhause();

Mit use sind nw. die Funktionen beim Kompilieren schon importiert.
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: CoolTux am 26 Juni 2017, 19:00:23
Weil ja seit neusten Perlkonventionen es cooler ist einen Klassenaufruf zu machen  ;D
Das Thema hatte ich letztens erst. Ist wohl so eine politische Glaubenssache.
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: PerlJoe am 26 Juni 2017, 20:10:12
Ich nenne das Package ja nicht main, sondern: package JHome;
Also muss ich die Sub mit JHome:: ansprechen.

ZitatWas mir noch ein fällt.
Ich gehe einfach mal davon aus das der User fhem das Verzeichnis
"/var/www/home/module";
lesen kann.

Das habe ich schon gecheckt, Berechtigungen passen.

Keine Ahnung wo der Wurm drin ist.
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: betateilchen am 26 Juni 2017, 20:27:28
Zitat von: PerlJoe am 26 Juni 2017, 20:10:12
Keine Ahnung wo der Wurm drin ist.

Vielleicht an der Stelle, wo das Modul JHomeDB.pm heißt und Du versuchst, es mit "use JHome" einzubinden?



#Skriptname:  JHomeDB.pm

...

use JHome;



Wenn ich Dein Beispiel bei mir 1:1 nachbaue und die korrekten Namen verwende, bekomme ich bei AllMinCheck auch korrekt eine 0 zurück.
Titel: Antw:Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: PerlJoe am 26 Juni 2017, 20:43:57
Wie es scheint war doch die Berechtigung das Problem.

Habe eine neue Gruppe jhome erstellt und dort fhem und pi mit rein. Dann den Dateien die gruppe jhome hinzugefügt.
Danach folgende Rechte vergeben: sudo chmod 755 *.*
mit 666 ging es dann...

Danke.

Gruß,
Jörg
Titel: Antw:[gelöst] Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: betateilchen am 26 Juni 2017, 20:47:01

udo@fhemaws:/var/www/home/module$ ls -al JHomeDB.pm
-rw-r--r-- 1 fhem dialout 281 Jun 26 20:22 JHomeDB.pm
Titel: Antw:[gelöst] Eigene Funktion mit eigenem Modul in 99_myUtils.pm
Beitrag von: amenomade am 26 Juni 2017, 20:50:57
ZitatIch nenne das Package ja nicht main, sondern: package JHome;
Also muss ich die Sub mit JHome:: ansprechen.
Ja stimmt, weil Du auch kein Export machst. Ok sorry.