kann mir jemand verraten wie ich mit IPS auf dem RasPi Befehle (Kommandozeile) ausführen kann?
Ich möchte meinen Sony Bravia ansteuern und kann dies mit Befehlen aus einem Ubuntu Linux über die Kommandozeile heraus sehr gut machen. Dies würde ich nun gerne vom RasPi über IPS aus durchführen.
Hierzu ein Beispiel.
Folgendes Shellscript aktualisiert den Zugriffs- und Änderungszeitstempel der Datei, deren Name als Parameter übergeben wurde.
Existiert die Datei nicht, wird sie angelegt.
In der Variablen „$?“ wird der Rückgabewert des zuletzt ausgeführten Befehls gespeichert.
Mittels des echo-Befehls wird dieser Wert an das aufrufende IPS-Script zurückgegeben.
#! /bin/bash
/usr/bin/touch $1
echo $?
In IP-Symcon kann das Shellscript mittels IPS_Execute ausgeführt werden.
<?
// Ausführung eines Linux-Shell-Scripts mittels "IPS_Execute"
// Der Rückgabewert des Shellscripts wird der Variablen "$result" zugewiesen.
// Dies ermöglicht es, auf eventuell auftretende Fehler zu reagieren.
$result = IPS_Execute("/usr/local/bin/symcon_test.sh","/home/user/test.txt",false,true);
if ($result == 0) {
print "Der Befehl wurde erfolgreich ausgeführt.";
} else {
print "Der Befehl gab den Fehler \"".$result."\" zurück.";
}
?>
Ups,
hab gerade mal geschaut, was du denn da ausführen möchtest.
Das sind ja schon Shellscripte. Die musst du natürlich nicht noch einmal aus einem Shellscript aufrufen.
Hast du schon probiert, ob das Script „send_command.sh“ auf der Kommandozeile des Pi funktioniert?
Wenn nicht:
Rechte prüfen. Das Script muss von dem User, unter dem symcon läuft, ausführbar sein.
Netzwerk prüfen. Ist der Fernseher vom Pi erreichbar?
Ist „curl“ installiert? Der Befehl „which curl“ zeigt dir ob und wenn ja wo curl installiert ist.
Wenn ja:
Dann sollte es auch aus IPS heraus funktionieren.
Ich würde das Script wie folgt aufrufen:
Der aufzurufende Befehl „send_command.sh“ bildet incl. absoluter Pfadangabe, in Anführungszeichen gesetzt, den ersten Parameter von „IPS_Execute“.
Die beiden Parameter „TV_IP_HERE“ und „ONE_COMMAND_HERE“ bilden gemeinsam, durch ein Leerzeichen getrennt und zwischen Anführungszeichen den Parameter „Parameter“ des Befehls „IPS_Execute“.
Sollte „ONE_COMMAND_HERE“ Leerzeichen enthalten, z.B. „Switch_to_channel 3“, musst du „Switch_to_channel 3“ in separate Anführungszeichen setzen, die du mit einem Backslash „“ escapest.
Der Aufruf sieht dann so aus:
Servus
leider klappt es nicht. Vom Ubuntu auf dem Laptop läuft die Ansteuerung des TV. Den Ordner mit den gleichen Dateien habe ich auf den Pi kopiert.
zu 1) Ich bekomme es leider nicht mal über die Kommandozeile zum laufen. Per IPS geht es trotz der präzisen Vorlage von Ralla auch nicht. So gehts per Ubuntu, wenn ich im Ordner mit den Dateien bin im Terminal: ./send_command.sh 192.168.178.29 AAAAAQAAAAEAAAATAw==
IPS läuft unter root aber da gehts nicht.
per putty auf dem RasPi gibt folgende Fehler:
Fehlermeldung ist bei ./send_command.sh 192.168.178.29 AAAAAQAAAAEAAAATAw==
-bash: ./send_command.sh Permission denied
und beim Befehl ohne den Punkt vorne /send_command.sh 192.168.178.29 AAAAAQAAAAEAAAATAw==
-bash: send_command.sh: command not found
zu 2) Ja TV ist erreicbar. Laptop und RasPi hängen im gleichen Netz.
zu 3) curl ist installiert. ich bekomme einen Ordnerpfad als antwort
Die Fehlermeldung „Permission denied“ weist auf ein Berechtigungsproblem hin.
Im einfachsten Fall hast du vergessen die Datei ausführbar zu machen.
Wenn du in dem Ordner mit den Dateien den Befehl
sudo chmod +x ./send_command.sh
eingibst, machst du die Datei für alle Benutzer ausführbar.
Funktioniert es danach auf der Kommandozeile, sollte es auch mit IPS_Execute klappen.
Hierbei ist es wichtig, dass du den Befehl mit absolutem Pfad angibst.
Solltest du den gar nicht so genau kennen, hilft dir
ls send_command.sh | awk -v a=$PWD '{ print a "/" $0 }'
( ebenfalls im Ordner mit den Dateien ausgeführt) weiter.
Vielen Dank, Ralla!!!
Es läuft mit Deinem Tipp, dass ich die Dateien ausführbar machen musste. (Das bin ich als WIN/MAC-User nicht gewohnt )
Grüße
Matthias