Bei der Suche nach einer Lösung, aus einem Shell-Script FHEM-Befehle auszuführen, habe ich einen Teilerfolg errungen.

Die Methode, die ich im Netz gefunden habe (perl fhem.pl <Port> <Befehl>) hat bei mir leider nicht funktioniert. Eine URL aufzurufen, fand ich zu aufwendig. Letztendlich habe ich das Program namens socat verwendet. Eine Schwirigkeit stellte die Passwortabfrage dar, nach dem Passwort muss ein Zeilenumbruch kommen. Für Linux sieht das Ergebnis so aus (Passwort, Adresse und Port sind ggf. anzupassen):

echo -e "<password>\n<Befehl>" | /sbin/socat -t60 - TCP:127.0.0.1:7072

Leider wartet socat nicht bis der FHEM-Befehl ordnungsgemäß beendet wird. Dem kann zwar mit der Erhöhung des Timeouts begegnet werden, eine generelle Lösung ist das jedoch nicht.

Etwas bequemmer geht das Ganze mit folgendem Script:

#!/bin/sh
# Übermittelt einen Befehl an den laufenden FHEM-Server
# Usage:    ./fhemcmd.sh 
# Beispiel: ./fhemcmd.sh list A.*
echo -e "<password>\n$1 $2 $3 $4 $5" | /sbin/socat -t50 - TCP:127.0.0.1:7072 

Die Begrenzung auf 5 Parameter ist willkürlich, wenn mehr gebraucht werden, kann der Befehl in Einführungszeichen eingeschlossen werden. Das Script kann leicht so umgebaut werden, dass das Passwort auch als Parameter übergeben werden kann.

 

Für Windows ist mir auf die Schnelle keine elegante Lösung gelungen. Das Zeilenumbruch-Problem. Man könnte es mit einer Umleitung in eine Datei versuchen, das ist jedoch nicht wirklich elegant, um nicht zu sagen hässlich.

 

Update:

Nach dem Umstieg auf Raspberry Pi habe ich festgestellt, dass der Aufruf perl fhem.pl <Port> "<Befehl>" ohne Probleme funktioniert. Eine Passtowrtangabe ist bei lokalen Aufrufen nicht nötig, wenn das Password in fhem.cfg mit globalpassword (anstatt password) angegeben wird.

...
define tPort telnet 7072 global attr tPort globalpassword <PASSWORD>
...

 

Kommentare (0)

Cancel or