SSH per PHP z.B. um AppleScript auszuführen mit Siri Beispiel :-)

Hier ganz auf die schnelle :

So wird ein Befehlt ausgeführt:



//SSH Login
include('Net/SSH2.php');
$ssh = new Net_SSH2('192.168.0.3'); // IP vom Mac
    if (!$ssh->login('username', 'password')) // Anmeldedaten vom Mac
	 {
        exit('Login Failed');
    }
//SSH Ende
$ssh->exec("say -v Anna Danny, das Fenster im Buero ist seit 30min $zustand !"); //Befehl der auf dem Mac ausgeführt //werden soll.

}

Die Dateien im Anhang nach x:\IP-Symcon\scripts\Net kopieren.

Eine Ausführliche Anleitung folgt noch, und ein paar Anwendungsbeispiele z.B. Siri :slight_smile:

Viel Spaß…

Net.zip (43.2 KB)

Moin…

danke fürs posten. Hab es gleich mal versucht zu testen und bekomme folgende Fehlermeldung.
Scheint das ein PHP-Skript fehlt oder?
Gruß,
Peter

Warning: require_once(Math/BigInteger.php): failed to open stream: No such file or directory in C:\IP-Symcon\scripts\Net\SSH2.php on line 77
[0] in function require_once in C:\IP-Symcon\scripts\Net\SSH2.php on line 77
[1] in function include in C:\IP-Symcon\scripts\49385.ips.php on line 4

Fatal error:  require_once(): Failed opening required 'Math/BigInteger.php' (include_path='.;C:\php\pear') in C:\IP-Symcon\scripts\Net\SSH2.php on line 77

Hi sorry habe die Abhängigkeit nicht mehr gewusst :frowning:

Die Dateien im Anhang nach x:\IP-Symcon\scripts\ kopieren, dann sollte es klappen :slight_smile:

Math.zip (22.9 KB)

Moin…

Hmmm… ich muss schon wieder stören! :slight_smile:
Jetzt wird folgendes als Fehler angezeigt:

Warning: require_once(Crypt/Random.php): failed to open stream: No such file or directory in C:\IP-Symcon\scripts\Net\SSH2.php on line 88
[0] in function require_once in C:\IP-Symcon\scripts\Net\SSH2.php on line 88
[1] in function include in C:\IP-Symcon\scripts\49385.ips.php on line 4

Fatal error:  require_once(): Failed opening required 'Crypt/Random.php' (include_path='.;C:\php\pear') in C:\IP-Symcon\scripts\Net\SSH2.php on line 88

Ich habe dann mal in das Skript SSH2.php geschaut und da fehlen wohl noch ein paar Skripts mehr. Hier mal der Auszug aus dem Skript. Kann das sein das Du diese Skripts auch noch im scripts-Ordner hast? In einem Crypt-Ordner?! :wink:

Crypt/Random.php
Crypt/Hash.php
Crypt/TripleDES.php
Crypt/RC4.php
Crypt/AES.php

/**
 * Include Math_BigInteger
 *
 * Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
 */
if (!class_exists('Math_BigInteger')) {
    require_once('Math/BigInteger.php');
}

/**
 * Include Crypt_Random
 */
// the class_exists() will only be called if the crypt_random function hasn't been defined and
// will trigger a call to __autoload() if you're wanting to auto-load classes
// call function_exists() a second time to stop the require_once from being called outside
// of the auto loader
if (!function_exists('crypt_random') && !class_exists('Crypt_Random') && !function_exists('crypt_random')) {
    require_once('Crypt/Random.php');
}

/**
 * Include Crypt_Hash
 */
if (!class_exists('Crypt_Hash')) {
    require_once('Crypt/Hash.php');
}

/**
 * Include Crypt_TripleDES
 */
if (!class_exists('Crypt_TripleDES')) {
    require_once('Crypt/TripleDES.php');
}

/**
 * Include Crypt_RC4
 */
if (!class_exists('Crypt_RC4')) {
    require_once('Crypt/RC4.php');
}

/**
 * Include Crypt_AES
 */
if (!class_exists('Crypt_AES')) {
    require_once('Crypt/AES.php');
}

/**#@+
 * Execution Bitmap Masks
 *
 * @see Net_SSH2::bitmap
 * @access private
 */

Gruß,
Peter

Sorry Sorry

Dateien hängen alle an :slight_smile:

Archive.zip (209 KB)

Moin…

… danke für den Support. Jetzt funktioniert es bei mir. Ich hab es auch schon hinbekommen ein Programm auf den Mac per Skript zu starten.
Das funktioniert so… ( für die Nachwelt )
(Entsprechende Freigaben in den Einstellung / Freigaben vorausgesetzt)

$ssh->exec('open /Applications/Sonos.app'); //Befehl der auf dem Mac ausgeführt //werden soll.

Kannst Du mir aber noch den Tip geben wie ich ein Applescript starten kann?!
Wenn ich das mit dem ‚open‘-Befehl versuche öffnet es mir den Applescript-Editor mit dem entsprechenden Applescript!

1000 Dank noch mal…

Peter


$ssh->exec('osascript -e "tell application \"EyeTv\" to channel up"');

Happy coding
Johannes

Hi ja supe da war jemand schneller :slight_smile:

Kein Thema, sorry das es solange gedauert hat.

Huhu,

kleine Frage, das Script läuft wunderbar bei mir :slight_smile: … gibts ne möglichkeit sich die Ausgabe der SSH Shell
wieder in eine String Variable zu schreiben ?

Du meinst du gibst einen Befehl per SSH Shell aus und dort gibt der Befehl was zurück und das willst du erfassen ?
Könnte gehen aber da muss ich passen.

Jo genau, ich verwende dein Script um SSH Anfragen auf Router zu realisieren. Quasi Router Rebooten per Webfront, funktioniert ausgezeichnet. Was ich momentan auswerten will ist einen Ping auf dem Router per SSH auslösen und die werte als String auszugeben, diese dann wiederrum in eine Integervariable umzuwandeln.
Ich versuch mich mal dran und werde dann die Ergebnisse hier einstellen :slight_smile:

Hallo drapple,

Script läuft prima.

Meine Frage, gibt es eine Möglichkeit abzufragen aufem MAC ob z.B. iTunes gestartet ist?

Im Voraus danke

Hi das habe ich mich auch schon gefragt, das Problem ist, das man zwar Befehle zum Mac schicken kann aus IPS, aber keine vom Mac zu IPS :frowning:

Windoff hat keinen SSH Zugang oder so was ähnliches und alles was ich an tools getestet habe funzen nicht so wie wir es brauchen :frowning:

IPS müsste mal ein Kommandozeilenprogramm für Mac rausbringen das würde viele Möglichkeiten eröffnen :wink:

Hi,

weil ich das auch gerade brauchte. Ja es gibt eine Möglichkeit den Inhalt wieder in eine String Variable, Float Variable oder was auch immer zu schreiben

Hier ein Beispiel Script das ich soeben erstellt habe, wie ich mir die GPU und CPU Temperatur meines Raspberries auslese. (Für CPU muss auf dem Raspberry noch das Paket bc installiert werden „sudo apt-get install bc“

Vielen Dank an den Thread Ersteller für den Hinweis mit SSH per PHP

<?

//SSH Login : Beginn
include('Net/SSH2.php');

// IP vom Raspberry
$ssh = new Net_SSH2('192.168.0.112'); 

//Anmeldeuser und Passwort für Raspberry nach UFT8 konvertieren
//nur mit UTF8 Einstellung klappt auch ein putty login
//ohne diese Konvertierung erscheint immer "Login Failed" auch hier per ssh->login
$username = utf8_encode( 'deinen Benutzer hier' );
$password = utf8_encode( 'dein Passwort hier' );

    if (!$ssh->login($username, $password)) // Hier der echte Login
    {
        exit('Login Failed');
    }
//SSH Login: Ende

//Befehl der auf dem Raspberry ausgeführt wird um die GPU Temperatur zu erhalten
// /opt/vc/bin/vcgencmd measure_temp liefert als String temp=43.3'C
// cut -c6-9 liefert dann nur noch 43.3
// tr '.' ',' wandelt 43.3 in 43,3 um damit es korrekt in die Variable passt
$resultgpu = $ssh->exec("/opt/vc/bin/vcgencmd measure_temp | cut -c6-9 | tr '.' ','");

//Befehl für CPU Temperatur
$resultcpu = $ssh->exec("echo \"scale=1; $(cat /sys/class/thermal/thermal_zone0/temp | awk -F ' ' '{print \$1}') / 1000\" | bc -l | tr '.' ','");

//$resultgpu hat jetzt zB: 43,3 als Temperatur. Diesen Wert in eine Variable speichern
//die zuvor angelegt wurde als Typ Float. Gleiches für $resultcpu
SetValue(28782 /*[Hardware_Monitoring\Raspberry\GPU °C]*/  , $resultgpu);
SetValue(51862 /*[Hardware_Monitoring\Raspberry\CPU °C]*/  , $resultcpu);

//print_r($resultgpu);
//print_r($resultcpu);

?>

LG

Hi cool danke dir darauf wäre ich nicht gekommen das es so einfach geht :slight_smile:

Jetzt muss ich nur noch es hinbekommen das der Mac irgendwie etwas zu IPS senden kann, z.B. wenn ich ein Programm habe, das löst ein AppleScript aus, und dann will ich nur das ich eine Variable im IPS von false auf True umschalte…

Hi,

also hier habe ich nur 2 Ideen die ich auch schon so ähnlich realisiert habe (ein direkter Zugriff ist mir auch nicht bekannt). Da bist Du aber immer Zeit versetzt unterwegs.

Möglichkeit a.) In einem Unix/Applescript TRUE oder FALSE in eine Datei schreiben und per IPS Script mit zyklischem Ereignis alle paar Sekunden mittels ssh Aufruf das Ergebnis der Datei einlesen und in eine IPS Variable vom Typ Boolean schreiben.

Möglichkeit b.) In einem Unix bzw. Applescript wird TRUE oder FALSE in eine Datei geschrieben. Bitvise SSH Server im Windows installieren und dann per Public ssh key direkten Zugriff von Unix einrichten. Dann habe ich bei mir noch rsync für Windows zusätzlich installiert und schiebe so Dateien per Unixscript mit rsync von Unix auf meinen Windows Server.
Den Dateiinhalt kann man dann wieder elegant einlesen per IPS Script und weiterverarbeiten. Auf das IPS Script noch ein zyklisches Ereignis setzen damit das alle x Sekunden gemacht wird.

LG

Hallo Thiemo,

ich habe mal so spontan Dein Skript ausprobiert…
Bei der GPU bekomme ich einen Wert von 53,0 - das ist offenbar im Bereich des Möglichen, bei der CPU-Temperatur bekomme ich als Rückgabewert: „bash: bc: Kommando nicht gefunden.“

Muss ich auf dem Raspberry Pi noch etwas anpassen?

Ansonsten: Tolles Skript! (soll heißen: Gerne mehr davon!:D)

Joachim

Nachtrag: Die Datei die aufgerufen wird ist auf dem System vorhanden.
Nachtrag 2: Irgendwie scheint ihm das „scale=1“ nicht zu gefallen…

Ich habe mal etwas herumgespielt und folgendes hinbekommen:
CPU-Temperatur

$resultcpu = $ssh->exec("cat /sys/class/thermal/thermal_zone0/temp");
$resultcpu = $resultcpu/1000;

CPU Nutzung

$resultCPUUsage = $ssh->exec("echo `vmstat 2 3 | tail -n1 | sed \"s/\ \ */\ /g\" | cut -d' ' -f 16`");
$resultCPUUsage = 100 - $resultCPUUsage." %";

Kann ein Linux-Kenner bestimmt besser…

Hallo JPaeper,

auf dem Raspberry PI musste ich noch das bc package vorher nachträglich dazu installieren.

sudo apt-get install bc

LG
Thiemo

Hallo Thiemo,

jetzt funktioniert es!
Danke!

Joachim

Hi Thiemo,

Ich verwende dein Skript um einiges von meinen PIs herauszubekommen. Funktioniert echt Klasse!
Ich habe mehrere SSH Befehle (zu unterschiedlichen PIs) welche ich in einer Schleife aufrufe. Wenn jetzt ein PI mittendrin ausgeschaltet ist, läuft das Skript ins Timeout und fragt die anderen PIs nicht mehr ab. Hast du ne Ahnung wie ich das abfangen könnte?