Kann auf meinem Raspberry mit folgendem Befehl die Lautstärke ändern:
amixer -D pulse sset Master 50%
Wenn ich den Befehl per Script ausführe funktioniert es nicht.
system(‚amixer -D pulse sset Master 50%‘);
oder
exec(‚amixer -D pulse sset Master 100%‘);
Naja,
wenn es tatsächlich nur um eine einfache Lautstärkeänderung geht, sollte das auf alle Fälle auch mit amixer funktionieren. Bei mir funktioniert es jedenfalls. Außerdem lernt man nichts dazu, wenn man bei jedem kleinen Problem gleich nach einer anderen Lösung sucht.
Die Feststellung „funktioniert nicht“ hilft in solchen Fällen allerdings nicht wirklich weiter.
Meistens hilft es ungemein, sich den Rückgabewert der aufgerufenen Funktion anzeigen zu lassen.
In der Variablen „$?“ steht der Rückgabewert des zuletzt ausgeführten Befehls. In diesem Fall also der Rückgabewert von „/usr/bin/amixer -D …“. Mit dem Befehl „echo $?“ wird dieser Wert auf der jeweiligen Standardausgabe ausgegeben. Bei dem Aufruf über ein IP-Symcon-Script wird der Wert an das aufrufende Script zurückgegeben.
Im IP-Symcon-Script erhält man auf diesen Wert Zugriff, in dem man den Rückgabewert des aufgerufenen Scripts einer Variablen zuweist. Im vorliegenden Fall sieht das dann so aus:
Der Wert „true“ des vierten Parameters von „IPS_Execute“ ist wichtig. Bei „false“ wird nicht auf das Ende des aufgerufenen Befehls ( in diesem Fall des Shellscripts) gewartet. Der Rückgabewert kann dann natürlich nicht zur Verfügung stehen. Mit „print $result.“
„“ wird der empfangene Rückgabewert ausgegeben. Nach dem Ausführen des Scripts aus dem Scripteditor heraus, steht der Rückgabewert dann in der Scriptausgabe zur Begutachtung bereit.
Wenn diese Ausgabe anschließend hier gepostet wird, kann wesentlich besser geholfen werden.