[gelöst] Eigene Funktion mit eigenem Modul in 99_myUtils.pm

Begonnen von PerlJoe, 24 Juni 2017, 15:14:49

Vorheriges Thema - Nächstes Thema

PerlJoe

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

JoWiemann

Warum benutzt Du kein 'at'? Schau mal ins Wiki oder in die commandref.


Grüße Jörg

Gesendet von iPhone mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

PerlJoe

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.

Otto123

Hi,

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

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

PerlJoe

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.




PerlJoe

Gibt es keine Möglichkeit eigene Module einzubinden?

CoolTux

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.
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

CoolTux

Was mir noch ein fällt.
Ich gehe einfach mal davon aus das der User fhem das Verzeichnis
"/var/www/home/module";
lesen kann.
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

amenomade

Und warum rufst Du
JHome::WerZuhause();
und nicht
WerZuhause();

Mit use sind nw. die Funktionen beim Kompilieren schon importiert.
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

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.
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

PerlJoe

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.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

PerlJoe

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

betateilchen


udo@fhemaws:/var/www/home/module$ ls -al JHomeDB.pm
-rw-r--r-- 1 fhem dialout 281 Jun 26 20:22 JHomeDB.pm
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus