Benutzer Diskussion:Wernieman
Willkommen!
Hallo Wernieman, willkommen im FHEM Wiki! | |||
Danke für dein Interesse an unserem Projekt, ich freue mich schon auf deine weiteren Beiträge. Die folgenden Seiten sollten dir die ersten Schritte erleichtern, bitte nimm dir daher etwas Zeit, sie zu lesen.
FHEM-spezifische Informationen | |||
Systemübersicht FHEM Systemübersicht |
FHEMWiki:Über FHEMWiki Informationen über dieses Wiki | ||
Generelle Informationen über (Media)Wikis | |||
Hilfe:Bearbeiten Zugang zu allen wichtigen Informationen. |
Wikipedia:Tutorial Schritt-für-Schritt-Anleitung für Einsteiger. | ||
Wikipedia:Grundprinzipien Die grundlegende Philosophie unseres Projekts. |
Wikipedia:Mentorenprogramm Persönliche Einführung in die Beteiligung bei Wikipedia. | ||
Bitte beachte, was Wikipedia nicht ist, und "unterschreibe" deine Diskussionsbeiträge durch Eingabe von |
Externe Scripte aufrufen / Daten in FHEM reinkriegen
Hin und wieder möchte man ein externes Script/Programm von FHEM heraus aufrufen. Hier möchten wir die Wege diskutieren
Zu beachten ist, ob während der Abarbeitung des Scriptes FHEM blockieren soll oder nicht. Wenn es blockiert, aber das Script sich nicht beendet, wird FHEM nicht mehr weiterlaufen
Grundlage: Hier verwenden wir einfach mal ein Notify test_notify, welches bei allen test-Befehlen aufgerufen werden soll und ein Script mit Devicename und Status aufrufen soll.
Möglichkeiten des Aufrufs
FHEM ermöglicht direkt den Aufruf des Scriptes per "Bordmitteln", sowie über den Umweg perl.
- Fhem Bordmittel
define test_notify notify test.* "/opt/fhem/test.sh $NAME $EVENT"
Dieses ist nicht blockierend, dafür kriegt man Daten so auch nicht direkt in FHEM
- über perl (per ` qx oder system)
define test_notify notify test.* {`/opt/fhem/test.sh $NAME $EVENT`}
Dieses ist blockierend, d.h. FHEM arbeitet während der Abarbeitung des Scriptes nicht mehr weiter. Dafür könnte man eventuelle Rückgaben des Scriptes in FHEM verwenden.
- über perl unblockierend (per ` qx oder system)
Es ist möglich, mit einem "&" am Ende das Script wieder unblockierend zu machen, nur kann man dann wieder die Parameter nicht verwenden.
define test_notify notify test.* {`/opt/fhem/test.sh $NAME $EVENT &`}
Hinweis:
Vor/Nachteile von qx/ System und `, siehe perl-Dokumentation
Daten in FHEM reinkriegen
Wenn man jetzt ein Script unblockierend haben möchte, trotzdem aber die Daten in FHEM braucht, weil man z.B: darauf reagieren will, ist dieses durch eine Rückübertragung der Daten über die telnet-Schnitstelle möglich.
Kurzgefasst im Bash-Syntax:
echo -en "<FHEM-Befehl>\”quit\n" | nc -w5 <FHEM-Server> 7072
<FHEM-Befehl>: Gültiger FHEM-Befehl, wie z.B. "set Dummy on"
<FHEM-Server>: wenn es auf dem gleichen System läuft localhost, sonst IP oder DNS-Name
7072: Telnet-Port. Wenn geändert wurde, bitte Anpassen (Experten)
Damit kann über set, tricker etc. die Komplette FHEM-Basis verwendet werden, um auf das Script zu reagieren. In anderen Programmiersprachen ist es analog möglich.
Hinweis:
Falls ein Password für Telnet vergeben wurde, kann auch dieses erfolgen:
echo -en "<Telnet-PW>\n<FHEM-Befehl>\”quit\n" | nc -w5 <FHEM-Server> 7072
Wenn SSL-definiert wurde, gibt es analoge Möglichkeiten, siehe Dokumentation von FHEM