FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: Criz am 02 September 2016, 18:12:52

Titel: Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: Criz am 02 September 2016, 18:12:52
Ich würde gerne per Telegram bash Scripte ausführen lassen. Geht das?
Titel: Antw:Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: DeeSPe am 02 September 2016, 18:17:45
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
Titel: Antw:Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: DeeSPe am 02 September 2016, 18:27:59
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
Titel: Antw:Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: DeeSPe am 02 September 2016, 18:38:33
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&")}
Titel: Antw:Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: Criz am 03 September 2016, 12:46:37
Danke für eure Hilfe, dass muss ich jetzt erst erst mal testen.
Titel: Antw:Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: DeeSPe am 04 September 2016, 01:25:09
Na dann sag mal Bescheid wenn/ob Du es hinbekommen hast.

Gruß
Dan
Titel: Antw:Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: Criz am 29 Januar 2017, 19:31:43
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.
Titel: Antw:Kann man per Telegram ein bash script ausführen lassen?
Beitrag von: Wernieman am 31 Januar 2017, 12:31:32
Warum erzeugst Du für den FHEM User ein Passwort?
2. fhem Benutzer passwort vergeben "sudo passwd fhem"