Fhem.pl

Aus FHEMWiki
Wechseln zu: Navigation, Suche

Die Datei fhem.pl stellt den eigentlichen Kern jeder Hausautomatisierung mit FHEM dar. Sie enthält den zentralen Perl-Code, der als Programm ausgeführt wird.

Standardaufruf

In der Regel wird FHEM über einen Aufruf innerhalb der jeweiligen Autostart-Routine des Betriebssystems[1] mit gestartet und läuft dann als eine Art "Schleife" dauerhaft im Hintergrund.

Im Startaufruf muss dabei eine Konfigurationsdatei[2] mit übergeben werden. Wird FHEM auf diese Weise gestartet,

  • überwacht dieser FHEM-Prozess von den Modulen gesetze Timer,
  • nimmt Daten aus den in der Konfiguration definierten Schnittstellen entgegen,
  • gibt diese an Module weiter,
  • generiert daraus Events[3],
  • schreibt das zentrale Logfile und
  • verarbeitet die Anweisungen, die die geladenen Module als Reaktion auf Events an fhem.pl zurückgeben.


Info blue.png
Dieser Prozess läuft streng linear ab, es wird also immer eine Anweisung nach der anderen abgearbeitet. Dauert die Bearbeitung einer Anweisung an fhem.pl länger, hängen solange auch alle anderen Programmabläufe. Manche Module erlauben daher, einen weiteren FHEM-Prozess zu generieren, der dann parallel abgearbeitet wird[4].


Darüber hinaus stellt fhem.pl allen Modulen eine Reihe von Standardfunktionen zur Verfügung, um z.B. Readings zu aktualisieren oder abzufragen, Timer zu setzen oder zu löschen usw..

Erweiterte Möglichkeiten

Daneben besteht die Möglichkeit, fhem.pl mit dezidierten Anweisungen als zusätzlichen Prozess zu aufzurufen. Dies kann insbesondere nützlich sein, um Daten zwischen FHEM und anderen Anwendungen oder scripten[5] auszutauschen. Dieser Prozess wird dann nach Abarbeitung der Anweisung wieder beendet.

Beispielhaft hat Rudolf König die Vorgehensweise in diesem Forumsbeitrag erläutert:

  • Abfrage eines Readings aus einem anderen Perl-Script:
my $regenmenge=`perl fhem.pl 7072 "{ReadingsNum('wetterstation','rain',0)}"`;
  • Gerät aus einem shell-Script eine Zeitlang anschalten:
`perl fhem.pl 7073 "set Pumpe on-for-timer $dauer"`;
  • oder ein Event auslosen:
`perl fhem.pl 7073 "trigger bewaessern giessen_ist_fertig"`;

Mit dieser Methode ist es möglich, Aufgaben auszulagern, die selbst schlafen, blockieren oder lange rechnen können, ohne dabei FHEM zu blockieren.

Hilfe: Im Log steht eine Fehlermeldung mit ...fhem.pl...

Da fhem.pl viele Funktionen für alle Module bereitstellt, finden sich auch bei Problemen häufig Fehlermeldungen, die scheinbar von fhem.pl verursacht sind, die aber eigentlich aus den Modulen kommen.

Sofern eine entsprechende Meldung im FHEM-Log zu finden ist, sollte man versuchen herauszufinden, wer der eigentliche Verursacher war. Hilfsmittel:

Hinweise

  1. z.B. wird FHEM bei neueren Debian-Derivaten mit systemd gestartet
  2. bzw. die Datenbank, in der die Konfiguration enthalten ist
  3. dabei bestimmt in der Regel das Modul, dem Informationen von fhem.pl übergeben werden, ob und welche Events generiert werden sollen
  4. Stichworte: fork, non-Blocking
  5. z.B. shell-scripten, diese Möglichkeit ist aber nicht auf eine bestimmte Scriptsprache beschränkt.