Auf RasPi Linux Befehle ausführen

Hallo zusammen,

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.

https://github.com/breunigs/bravia-auth-and-remote

(Das hier im Forum existierende Script geht leider bei meinem TV aus 2015 nicht.)

Grüße
Matthias

Kann mir kein Linux-Profi helfen? Wäre die Funktion nicht in etwa vergleichbar mit IPS_Execute(…) auf WIN?
Grüße
Matthias

Hallo Matthias,

du musst den Befehl in ein Shellscript verpacken.

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.";
	}
?>

Gruß
Ralla

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:

  1. Rechte prüfen. Das Script muss von dem User, unter dem symcon läuft, ausführbar sein.
  2. Netzwerk prüfen. Ist der Fernseher vom Pi erreichbar?
  3. 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:


$result = IPS_Execute("<PFAD>/send_command.sh","TV_IP_HERE ONE_COMMAND_HERE",false,true);

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:


$result = IPS_Execute("<PFAD>/send_command.sh","TV_IP_HERE \"Switch_to_channel 3\"",false,true);

In der Variablen „$result“ erhälst du den Rückgabewert des Scripts „send_command.sh“.

Gruß
Ralla

Ganz herzlichen Dank Ralla. Ich werde versuchen alles heute Abend zu verstehen und umzusetzen und melde mich wieder.

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

Hat jemand noch eine Idee?

Gruß
Matthias

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.

Gruß
Ralla

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 :wink: )
Grüße
Matthias