Programm auf dem Rasp Pi per exec ausführen

Hallo lb. Forum,
auf dem Raspberry liefert mir der Befehl im Ordner home/pi/ordner1
.sudo ./can_scan can0 123 123.0112 eine Antwort-String.
Nun möchte ich diesen Befehl aus ip-symcon aufrufen.
Leider liefert dieser Befehl:
$ergebnis=exec("\192.xxx.yyy.zz\home\pi\ordner1/can_scan can0 123 123.0112");
mir keine Daten in der Variablen $ergebnis.
Die IP-Adresse ist natürlich die richtige eingetragen.
Meine Frage: was mache ich falsch bei dem Befehl?
Danke für die Hilfe
Grüße von
Ekkehard

Ich brauchte das auch mal, habe es aber derzeit nicht im einsatz (daher ohne Gewähr):


// richtiges Komando eintragen
$cmd = 'sudo xyz';

$ret = exec("$cmd", $out, $rc); 
//var_dump($ret); // last output line
//var_dump($rc); // int(0)
foreach ($out as $line) { 
	echo $line.PHP_EOL;
}

Hallo pitti,

habe Deine Vorgaben wie folgt ergänzt:

$cmd =‚sudo .\192.xxx.yyy.zz\home\pi\ordner1/can_scan‘;

$out = „can0“;
$rc = „123 123.0112“;

$ergebnis=exec("$cmd", $out, $rc);

Leider erhalte ich in der Variable $ergebnis keinen Wert.

Sicherlich mache ich noch im Aufruf falsch?
Gruß
Ekkehard

Hi Ekkehard,

hier die Definition von exec:


exec ( string $command [, array &$output [, int &$return_var ]] ) : string
[/CODE

in $cmd packst Du das komplette Kommando rein mit Parameter usw.

EXEC liefert die einen String zurück ($ergebnis) welches die letzte Zeile des Outputs entspricht.

Willst Du alles haben was EXEC ausgibt musst Du mit der Schleife zeilenweise durch $out iterieren!

Gruß Heiko

Hallo Heiko,
danke für Deine Rückantwort gestern Abend.
Habe aber immer noch Probleme eine Rückantwort vom pi zu bekommen.
Das Script sieht wie folgt nun aus:

$cmd =‚sudo .\\192.168.xxx.yyy\home\pi\ordner1/can_scan can0 123 123.0112‘;
echo "pi command " . $cmd . "
";

$ergebnis=exec($cmd, $out);

echo "ergebnis " . $ergebnis . "
";
var_dump ($ergebnis);
var_dump ($out);

die Echo Befehle sehen dann so aus:

pi command sudo .\192.168.xxx.yyy\home\pi\ordner1/can_scan can0 123 123.0112
ergebnis
string(0) „“
array(0) {
}

Sicherlich habe ich noch ein Problem mit der Syntax, damit der Befehl auch auf dem Pi ausgeführt wird.
Danke für Deine Hilfe.
Grüße von
Ekkehard

Jetzt muss ich nochmal ganz doof fragen, was möchtest Du eigentlich machen?

Führst Du den Befehl von einem anderen Rechner aus aus, also Pi A führt Befehl auf Pi B aus? Ich verstehe das Kommando nicht so ganz :eek:

Gruß Heiko

PS: Du schreibst ja auch in #1 den Befehl auf dem Rechner ohne ‚.\ip…‘?!?

Hallo Heiko,
Ziel soll es sein, dass ich vom ip-symcon-Rechner einen Befehl absetze, der auf dem rasp pi ausgeführt wird und als return-Wert mir einen String zurückgibt.
Ip-symcon läuft auf einem Windows-Rechner und hat z.B. die IP Adresse: 192.168.100.010
der Raspberry hat in meinem Netz die Ip-Adresse 192.168.100.020
Deshalb muss ich doch sicherlich irgendwie die IP-Adresse in die $cmd Variable mit einbauen, auf welchem Rechner
der Befehl ausgeführt werden soll:
z.B.

<?

//Start writing your scripts between the brackets

$cmd =‚sudo .\\192.168.100.020\home\pi\ordner1/can_scan can0 123 123.0112‘;
echo "pi command " . $cmd . "
";

$ergebnis=exec($cmd, $out);

?>

PS:die IP Adressen sind nicht die Orignal-IP-Adressen, aber so ist das besser verständlich was ich will.

Danke für Deine Hilfe.

Grüße von
Ekkehard

Wenn ich Dich richtig verstehe wird der Befehl ja auf einem Windows-Rechner ausgeführt!!! Wie soll das funktionieren? Windows kennt kein „sudo“ usw. … selbst wenn … welcher User sollte verwendet werden???

Windows zu Linux habe ich selber nicht im Betrieb, hatte mal Linux zu iOS. Da musste ich mich auch erst mal via ssh mit dem iPad verbinden und dann den Befehl ausführen. Dazu habe ich damals „sshpass“ genutzt.

Das sah dann so aus:


echo exec('sshpass -p alpine ssh root@192.168.0.xx "activator send libactivator.lockscreen.show"');

Da wird dann eine SSH-Verbindung mit user&pw aufgebaut und der Befehl „activator send libactivator.lockscreen.show“ ausgeführt.

Sowas musst Du halt auch von Windows aus schaffen :smiley:

Ciao Heiko

Moin Ekkehard,

ich war immer der Ansicht, dass man sich zunächst mit ssh auf dem Pi anmelden muss. Vielleicht liege ich da ja falsch :wink:

Schau mal hier CPU Temperatur im WF anzeigen - Seite 14 vielleicht hilft dir Post 134 weiter.

Gruß
Hans

Hallo Hans,
danke für den Link.
Habe mir die Zip Datei runtergeladen und als neuen Ordner net_php in den script ordner eingefügt.
nun will ich ssh2 aufrufen:

//SSH Login
include(‚net_php/net/SSH2.php‘);
$ssh = new Net_SSH2(‚192.168.100.20‘);

Aber ich bekommen die Fehlermeldung
Warning: include_once(Math/BigInteger.php): failed to open stream: No such file or directory in C:\IP-Symcon\scripts
et_php\Net\SSH2.php on line 943

Den Ordner Math gibt es, aber unter net_php/math.

Muss irgendwo noch die Pfade einstellen, oder beim Start einen Befehl absetzen, damit ip-symcon auch die anderen Ordner kennt?

Gruß
Ekkehard

Hi,

du musst die Daten aus Post 5 runterladen. Post 1 enthält nicht alle Dateien deshalb kommt die Fehlermeldung. Lies mal die ersten Posts :wink:

Gruß
Hans

Hallo Hans,
die Files sind alle vorhanden.
Sicherlich muss ich für php irgendwo hinterlegen, wo die Files liegen?

dienstag 1.PNG

Aufruf im Script:

//SSH Login
include(‚net_php/net/SSH2.php‘);
$ssh = new Net_SSH2(‚192.168.100.20‘);

führt zur Fehlermeldung

Warning: include_once(Math/BigInteger.php): failed to open stream: No such file or directory in C:\IP-Symcon\scripts
et_php\Net\SSH2.php on line 943

Warning: include_once(): Failed opening ‚Math/BigInteger.php‘ for inclusion (include_path=’.;C:\php\pear’) in C:\IP-Symcon\scripts
et_php\Net\SSH2.php on line 943

Math/BigInteger.pho gibts es, doch wird dies nicht gefunden. Warum?
Das bedeutet für mich, dass ich die Suchoptionen einstellen muss. Aber wo?
Gruß
Ekkehard

Hi,

Neustart vielleicht erforderlich? Bei mir ist ansonsten nichts weiter eingetragen.

Gruß
Hans

Hi,

ich sehe gerade, dass bei dir ein Unterverzeichnis existiert. Das ist bei mir nicht der Fall. Die Ordner liegen alle direkt unter scripts und der include Befehl lautet:

include('Net/SSH2.php');

Gruß
Hans

Hallo Hans,
irgendwie haben wir sicherlich unterschiedliche Programmstände, denn im File ssh2.php
wird in Zeile 943 dieser Befehl gelistet

include_once ‚Math/BigInteger.php‘;

der Ordner Math gibt es bei mir, doch unter scripts/net_php/ Math

Unter Windows kann man einen „Suchpfad“ einstellen, sicherlich kann man in php doch solch ein Einstellung ebenfalls vornehmen?

Gruß
Ekkehard

Hi,

nochmals, der Suchpfad spielt keine Rolle :slight_smile: Der Fehler ist, dass du das Unterverzeichnis net_php angelegt hast. Das muss weg. ALLE Ordner müssen direkt unter scripts liegen - dann funktioniert es :wink:

Gruß
Hans

Hallo Hans,
man sollte auf einen erfahrenen Anwender immer folgen!
Du hast ja Recht. Habe die Unterordner direkt in scripts eingefügt und dann kann ich mich mit ssh anmelden.
Nun komme ich zu Step 2 und will einen Befehl auf dem pi ausführen und als Ergebnis erwarte ich ein String:

$status = exec(‚ssh /home/pi/elster_v3/./can_scan can0 680 180.0112‘);

echo "pi command " . $status . "
";

in $status kommt kein Wert an, auch mit var_dump ($status); kommen keine Daten.

Jetzt mache ich sicherlich beim exec Aufruf noch was falsch?
Danke für Deine Geduld mit mir.

Grüße von
Ekkehard

Hi,

schau doch mal meine Beispiele an, die ich verlinkt hatte und probiere, ob diese Befehle funktionieren. Ich kenne den Befehl nicht den du nutzen willst.

Kannst du den Befehl denn direkt im Pi eingeben?

Gruß
Hans

Hallo Hans,
habe Deinen Befehl gefunden und wie folgt auf meine Anforderung angepasst:

$status = $ssh->exec(„sudo ./home/pi/elster_v3/can_scan can0 680 180.0112“);

als Antwort bekomme ich

Anmeldung ok
pi command sudo: ./home/pi/elster_v3/can_scan: command not found

string(54) "sudo: ./home/pi/elster_v3/can_scan: command not found

Wenn ich den Befehl im pi direkt eingeben erhalte ich ein korrekt Ergebnis:

Danke für Deinen prüfenden Blick
Grüße von
Ekkehard

Woher kommt der Doppelpunkt nach sudo?

Gesendet von iPad mit Tapatalk