Befehl auf Remoteserver per ssh ausführen und das Ergebnis anzeigen.

Begonnen von cosinuz, 21 November 2020, 17:11:41

Vorheriges Thema - Nächstes Thema

cosinuz

Hallo zusammen,

könntet ihr mir bitte mal einen Tipp geben in welche Richtung ich suchen muss um folgendes hinzubekommen.
Per SSH auf ein Remotesystem einloggen, ein Befehl ausführen und das Ergebnis im FHEM Reading anzeigen lassen. Z.B. "ps x | grep wc -l"

Wie ich das verstanden habe funktioniert SYSSTAT nicht für so etwas.

Danke und Gruß,
cosinuz

Otto123

Hi,

also prinzipell muss ssh natürlich für den User mit dem FHEM läuft ohne Passworteingabe funktionieren.
Wenn noch nicht eingerichtet, hier meine Notiz dazu.

Wenn - dann sollte sowas in der FHEM  Kommandozeile gehen: Achtung @ muss escaped werden!
{qx(ssh otto\@192.168.56.44 ls -lha)}
Wenn das geht kannst Du den Inhalt in Perl natürlich weiterverwenden.

Achtung qx() blockiert FHEM für den Zeitraum der Ausführung!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cosinuz

Hi,

wow das ging aber schnell! Danke.

SSH ohne Passwort läuft schon. Dann werde ich mal schauen ob und wie ich ein Ergebnis in ein "Reading" bekomme.

Danke!

Gruß,
coinuz

Otto123

Na z.B. einfach mit set magic

setreading Device Reading {(qx(ssh ..))}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cosinuz

Super, danke.

Ich hatte gerade mal folgendes probiert. Aber wenn der Server 10.10.10.10 nicht erreichbar ist, friert mein fhem ein. :)

define GET_10.10.10.10 CustomReadings
attr GET_10.10.10.10 interval 600
attr GET_10.10.10.10 readingDefinitions proc:qx(ssh fhem\@10.10.10.10 ps waux | wc -l)
attr GET_10.10.10.10 room Server



Otto123

Ja, deswegen wäre es besser das so zu machen, dass FHEM nicht blockiert.
1. Befehl nur absetzen wenn SSH auf dem Host verfügbar - da gibt es sowas wie einen Servicemonitor
2. Befehl einfach absetzen und nicht auf Ergebnis warten, Ergebnis aus dem aus dem Aufruf (Script) zurück nach FHEM schicken. z.B. damit oder per Telnet.

attr LVK2019 userReadings sshRunning {ServiceMonitor($NAME,"22")}
Für die 99_myUtils.pm
############ Service Monitor for Presence
sub ServiceMonitor($$)
# Usage: ServiceMonitor("Hostname","Portnummer")
# in Presence: function {ServiceMonitor("Hostname","Portnummer")}
{
    use Net::Ping;
    my ($host, $port)    = @_;
    my $status;
   
    # Create a new ping object
    my $p = Net::Ping->new("syn");
    $p->port_number($port);
    $p->ping($host,10);
   
    # perform the ping
    if ( $p->ack ) {
$status = 1;
    }
    else{
    $status = 0;
    }
   
    # close our ping handle
    $p->close();
    return $status;
   
}


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cosinuz