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
Warum benutzt Du kein 'at'? Schau mal ins Wiki oder in die commandref.
Grüße Jörg
Gesendet von iPhone mit Tapatalk
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.
Hi,
was gibt den { AllMinCheck() } in der FHEM Kommandozeile zurück?
Gruß Otto
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.
Gibt es keine Möglichkeit eigene Module einzubinden?
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.
Was mir noch ein fällt.
Ich gehe einfach mal davon aus das der User fhem das Verzeichnis
"/var/www/home/module";
lesen kann.
Und warum rufst Du
JHome::WerZuhause();
und nicht
WerZuhause();
Mit use sind nw. die Funktionen beim Kompilieren schon importiert.
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.
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.
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.
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
udo@fhemaws:/var/www/home/module$ ls -al JHomeDB.pm
-rw-r--r-- 1 fhem dialout 281 Jun 26 20:22 JHomeDB.pm
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.