Ich würde gerne per Telegram bash Scripte ausführen lassen. Geht das?
Klar, warum soll das nicht gehen?
Du musst die Bashscripte nur in FHEM verfügbar machen, also z.B. einem dummy zuweisen und dann die eingehenden Nachrichten per notify prüfen und bei bestimmter Syntax den dummy schalten.
Gruß
Dan
Oder startest im notify gleich den system Aufruf ohne einen dummy.
Der User fhem braucht natürlich auch die Berechtigung das/die Script(e) auszuführen.
Gruß
Dan
Als Beispiel mal meine Sub dafür:
DEINE-TELEGRAM-ID ist mit Deiner Telegram ID zu ersetzen
sub TbToFhem()
{
my $text = ReadingsVal("TB","msgText","");
my $id = ReadingsVal("TB","msgPeerId","DEINE-TELEGRAM-ID");
my $name = ReadingsVal("TB","msgPeer","");
my $mes = ReadingsVal("TB","msgText","");
my $fhem = (split("FHEM: ",$text))[1];
my $speak = (split("SPEAK: ",$text))[1];
my $err = "Du bist nicht berechtigt das zu tun...";
if ($fhem)
{
if ($id eq "DEINE-TELEGRAM-ID")
{
fhem "set $fhem";
fhem "msg push 0 Befehl erfolgreich ausgeführt.";
}
else
{
fhem "set TB message @".$id." $err";
}
}
elsif ($speak)
{
if ($id eq "DEINE-TELEGRAM-ID")
{
speak("|DB-Gong| $speak",0);
fhem "sleep 5; msg push 0 Sprachansage erfolgreich ausgeführt";
}
else
{
fhem "set TB message @".$id." $err";
}
}
elsif ($id ne "DEINE-TELEGRAM-ID")
{
fhem "set TB message @".$id." Deine Nachricht wird voraussichtlich niemand lesen. Hier ist nur ein Roboter der Dir automatisch nur diese eine Nachricht schicken kann.";
fhem "set TB message @DEINE-TELEGRAM-ID Nachricht von $name: $mes";
}
}
Dann ein notify auf den TelegramBot:
define n_TB_to_FHEM notify TB:msgText.* {TbToFhem()}
Wenn ich jetzt z.B. "SPEAK: Hallo ich bin es" schicke wird das auf meinem Sonos ausgegeben!
Mit "FHEM: ku_Lampe1 on" schalte ich z.B. das Küchenlicht ein.
Als Letztes werden noch Nachrichten die von jemanden an meinen TelegramBot geschickt werden an mich weitergeleitet und eine automatische Antwortnachricht verschickt.
Diese Sub wäre genau so benutzbar wenn Du Dir die Ausführung der Scripte auf entsprechende dummy(s) legst.
Gruß
Dan
EDIT: Ein notify mit system Aufruf könnte z.B. so aussehen:
define n_DEINDUMMY_off notify DEINDUMMY:(off|on) {system("/opt/fhem/custom/deinscript.sh $EVENT&")}
Danke für eure Hilfe, dass muss ich jetzt erst erst mal testen.
Na dann sag mal Bescheid wenn/ob Du es hinbekommen hast.
Gruß
Dan
Hatte heute mal etwas Zeit.
1. script xy.sh auf entferntem Rechner erstellt.
2. fhem Benutzer passwort vergeben "sudo passwd fhem"
3. Public-Keys erzeugen "ssh-keygen -t rsa -b 4096"
4. Key auf entfernten Rechner kopieren "ssh-copy-id -i /opt/fhem/.ssh/id_rsa.pub benutzer@ip-des-entfernten-Rechners"
5. Dummy erzeugen:
define xy dummy
attr xy eventMap on:on
define xy_on notify xy:on "ssh benutzer@ip-des-entfernten-Rechners sh /benutzer/xy.sh"
Jetzt kann ich das Script mit Telegram vom Handy ausführen.
Warum erzeugst Du für den FHEM User ein Passwort?
2. fhem Benutzer passwort vergeben "sudo passwd fhem"