Kann man per Telegram ein bash script ausführen lassen?

Begonnen von Criz, 02 September 2016, 18:12:52

Vorheriges Thema - Nächstes Thema

Criz

Ich würde gerne per Telegram bash Scripte ausführen lassen. Geht das?

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

#3
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&")}
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Criz

Danke für eure Hilfe, dass muss ich jetzt erst erst mal testen.

DeeSPe

Na dann sag mal Bescheid wenn/ob Du es hinbekommen hast.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Criz

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.

Wernieman

Warum erzeugst Du für den FHEM User ein Passwort?
2. fhem Benutzer passwort vergeben "sudo passwd fhem"
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html