FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Uhrheber am 22 September 2016, 19:43:52

Titel: TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Uhrheber am 22 September 2016, 19:43:52
Hi.
Ich habe einen TP-Link GB Ethernet Switch (TL-SG2210P), der Power over Ethernet beherrscht.
Ich habe einige Geräte per PoE versorgt, die ich gerne mit FHEM ferngesteuert schalten würde.
Man kann PoE per Port entweder über die Weboberfläche des Switches schalten, oder per SSH.

Um z.B. Port 1 auszuschalten, muss ich mich mit Username und Passwort per ssh einloggen, und dann eingeben:

enable
configure
interface gigabitEthernet 1/0/1
power inline supply disable


Jeweils mit Enter angeschlossen.

Wie könnte ich so was mit FHEM automatisieren?
Also per script einloggen und die Kommandos senden?

Danke für Euro Antworten.
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Dr. Boris Neubert am 22 September 2016, 20:23:34
Hallo,

unter Unix würde ich das mit expect | ssh skripten und per "" als Shell-Kommando aus einem notify auf ein set dummy on/off absetzen. Zu expect gibt es gute Tutorials.

Grüße
Boris
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Uhrheber am 22 September 2016, 20:54:00
Bingo.
Expect war der entscheidende Tip.
Vielen herzlichen Dank.

Kann ich in FHEM eine Aktion auslösen, wenn eine spezielle IP Adresse längere Zeit nicht erreichbar ist?
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Sunless am 05 Oktober 2016, 20:53:58
Zitat von: Uhrheber am 22 September 2016, 20:54:00
Kann ich in FHEM eine Aktion auslösen, wenn eine spezielle IP Adresse längere Zeit nicht erreichbar ist?

Hallöchen, ganz easy:

Das Modul "PRESENCE" benutzen und ein Notify auf den Status. Wenn dieser "absent" ist, ist das Gerät nicht erreichbar.
Presence kann man recht gut konfigurieren und es werden auch temporär fehlgeschlagene Pings abgefangen.

Grüße
Sebastian
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 14 Februar 2018, 11:40:34
könnte der threadersteller eventuell sein script hier veröffentlichen? ich bin ebenfalls auf der suche nach einer möglichkeit den SG2210P per fhem zu verwalten.
hab mir diverse expect tuts angeschaut, so richtig schlau werd ich daraus allerdings nicht...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 18 April 2018, 08:51:54
habe folgendes expect script "poe_set.exp" erstellt welches in der linux shell mit dem aufruf

/usr/bin/expect /opt/fhem/poe_set.exp w.x.y.z user password 2 enable/disable

einwandfrei den port aktiviert und deaktiviert


#!/usr/bin/expect -f

set host [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]
set port [lindex $argv 3]
set status [lindex $argv 4]

if { $host == "" || $user == "" || $pass == "" || $port == "" || $status == "" }  {
  puts "Usage: <host> <user> <password> <switchport> <POE enable/disable>\n"
  exit 1
}

spawn telnet $host
expect "User:"
send "$user\r"
expect "Password:"
send "$pass\r"

send "enable\r"
send "configure\r"
send "interface gigabitEthernet 1/0/$port\r"
send "power inline supply $status\r"

# Exit the telnet session, and wait for a special end-of-file character.
send "exit\r"
expect eof


wenn ich das script aber per folgendem notify aktivieren will

define n_PoE_Port_2_on notify PoE_Port_2_Switch:on {system("/usr/bin/expect poe_set.exp w.x.y.z user password 2 enable");;}


gibts folgenden mist im logfile und das script wird nicht ausgeführt...

spawn telnet 10.0.0.248
Trying 10.0.0.248...
Connected to 10.0.0.248.
Escape character is '^]'.

***************** User Access Login ********************

User:$$                                                                                                    $                                                                                                    $                                                                                                    $
Password:

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Press any key to continue (Q to quit)
                                     
***************** User Access Login ********************
Press any key to continue (Q to quit)
                                     

Press any key to continue (Q to quit)
                                     
User:$
Password:

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Press any key to continue (Q to quit)
                                     
***************** User Access Login ********************
Press any key to continue (Q to quit)
                                     

Press any key to continue (Q to quit)
                                     
User:$$                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Connection closed by foreign host.
2018.04.18 08:51:11 3: n_PoE_Port_2_on return value: -1


was kann die ursache dafür sein?
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 18 April 2018, 09:21:10
Das login scheint nicht zu funktionieren ...

Aber mal eine andere Frage, kann der Switch nicht auch Login per Key (geht jedenfalls hier, sind aber andere TP-Links)? Wäre eigentlich die Optimale Möglichkeit ...

Hast Du mal Probiert, ob der User FHEM auf der Konsole das Script starten kann?
"User:$$ " sieht mir nach Coding-Problemen aus ...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 18 April 2018, 09:39:16
in der fhem console klarerweise das selbe, funzt nicht

character encoding wäre naheliegend nachdem was im log steht, aber wie dem entgegenwirken?

Zitat
Aber mal eine andere Frage, kann der Switch nicht auch Login per Key (geht jedenfalls hier, sond aber andere TP-Links)? Wäre eigentlich die Optimale Möglichkeit ...

bitte näher erläutern, ich weiß gerade nicht was du meinst...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 18 April 2018, 09:50:23
Ich meinte nicht "Fhem-Console", sondern als User FHEM in der ssh-konsole.

Bezüglich ssh-key
ssh kann nicht nur mit User/Passwort, sondern auch mit User/ssh-key sich Authentifiziere.  Ist besser (ujnd sicherer), vorallem bei automatischen Logins.

Weiß nur nicht, ob Dein Switch es kann und wo man es einstellt. Für die generierung eines ssh-.keys gibt es genügend Anleitungen
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 18 April 2018, 10:20:06
user fhem kann das script ebenfalls problemlos ausführen

ob nun per telnet oder ssh, die übergabe bzw. das ausführen des expect scripts wird wieder failen nach der derzeitigen variante. wenn die telnet variante mal steht kann ich das immer noch auf die ssh variante übertragen... momentan liegt das hase aber noch woanders im pfeffer...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 18 April 2018, 10:33:04
Machst Du jetzt ssh oder telnet??
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 18 April 2018, 10:37:40
jetzt telnet
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 18 April 2018, 11:42:11
telent ....wenig Wissen (mehr) meinerseits ...

aber Grundsätzlich zum Debuggen:
Packe den expect-Befel mal in ein Eigenes Script.
Gebe Dir dort die Übergebenen Variablen aus.
Starte das dann per FHEM ....
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 18 April 2018, 12:37:17
übergeben wird anscheinend korrekt:

spawn telnet 10.0.0.248
Trying 10.0.0.248...
Connected to 10.0.0.248.
Escape character is '^]'.

***************** User Access Login ********************

User:$$                                                                                                    $                                                                                                    $
Password:

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Press any key to continue (Q to quit)
                                     
***************** User Access Login ********************
Press any key to continue (Q to quit)
                                     

Press any key to continue (Q to quit)
                                     
User:$
Password:

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Press any key to continue (Q to quit)
                                     
***************** User Access Login ********************
Press any key to continue (Q to quit)
                                     

Press any key to continue (Q to quit)
                                     
User:$$                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Connection closed by foreign host.
10.0.0.248
user
password
2
enable
2018.04.18 11:55:19 3: n_PoE_Port_2_on return value: -1
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 18 April 2018, 14:35:12
ZitatUser:$$
Bist Du Dir sicher?

P.S: wie hast DU es auf der Konsole getestet? Mit "sudo fhem" oder richtig "su - fhem"?
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 18 April 2018, 14:42:40
per su - fhem
hat anstandslos gefunkt
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 18 April 2018, 14:43:47
Zeig mal Dein Script ... ist mir momentan rätselhaft
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 18 April 2018, 14:46:29

root@fhem:/opt/fhem# sudo su - fhem
fhem@fhem:~$ cd /opt/fhem
fhem@fhem:~$ ./poe.sh
spawn telnet 10.0.0.248
Trying 10.0.0.248...
Connected to 10.0.0.248.
Escape character is '^]'.

***************** User Access Login ********************

User:****
Password:


TL-SG2210P>enable

TL-SG2210P#configure

TL-SG2210P(config)#interface gigabitEthernet 1/0/2

TL-SG2210P(config-if)#power inline supply enable

TL-SG2210P(config-if)#exit

TL-SG2210P(config)##2018-04-18 14:43:32,[User]/3/Login the CLI by root on vty0 (10.0.0.201).
#2018-04-18 14:43:32,[PoE]/3/Power supply status of gigabitEthernet 1/0/2 changes from off to on.
#2018-04-18 14:43:42,[Link]/3/gigabitEthernet 1/0/2 changed state to up.
10.0.0.248
****
****
2
enable


das sh script

/usr/bin/expect /opt/fhem/poe_set.exp 10.0.0.248 **** **** 2 enable


das expect script

#!/usr/bin/expect -f

set host [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]
set port [lindex $argv 3]
set status [lindex $argv 4]

#if { $host == "" || $user == "" || $pass == "" || $port == "" || $status == "" }  {
#  puts "Usage: <host> <user> <password> <switchport> <POE enable/disable>\n"
#  exit 1
#}

spawn telnet $host
expect "User:"
send "$user\r"
expect "Password:"
send "$pass\r"

send "enable\r"
send "configure\r"
send "interface gigabitEthernet 1/0/$port\r"
send "power inline supply $status\r"

# Exit the telnet session, and wait for a special end-of-file character.
send "exit\r"
expect eof

puts "$host"
puts "$user"
puts "$pass"
puts "$port"
puts "$status"
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 18 April 2018, 15:17:40
Ich hatte Dir vorgeschlagen, mal das "/usr/bin/expect /opt/fhem/poe_set.exp 10.0.0.248 **** **** 2 enable" in ein eigenes Script zu pachen

ala (nur ein Ungetesteter Schnellschuß)
#!/bin/bash
IP=$1
PORT=$2
WIE=$3

echo "$IP $PORT $WIE"
/usr/bin/expect /opt/fhem/poe_set.exp $IP **** **** $PORT $WIE


Ich habe mit Absicht User/Passwort hier nicht per Parameter übergeben. Sollte doch eigentlich statisch sein?

Und dann in FHEM audrufen mit
"./paf/zum/tollen/scirpt/script.sh 10.0.0.248 2 enable"

Ist zwar dann erstmal ein schritt mehr als vorher, dafür kannst Du besser testen...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 19 April 2018, 06:56:56
hat nix geändert:

10.0.0.248 2 enable
spawn telnet 10.0.0.248
Trying 10.0.0.248...
Connected to 10.0.0.248.
Escape character is '^]'.

***************** User Access Login ********************

User:$$                                                                                                    $                                                                                                    $
Password:

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Press any key to continue (Q to quit)
                                     
***************** User Access Login ********************
Press any key to continue (Q to quit)
                                     

Press any key to continue (Q to quit)
                                     
User:$
Password:

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Press any key to continue (Q to quit)
                                     
***************** User Access Login ********************
Press any key to continue (Q to quit)
                                     

Press any key to continue (Q to quit)
                                     
User:$$                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $                                                                                                    $

Press any key to continue (Q to quit)
                                     
Login invalid.
Press any key to continue (Q to quit)
                                     
Connection closed by foreign host.
2018.04.19 06:54:32 3: n_PoE_Port_2_on return value: -1


mich würds brennend interessieren wie der threadersteller das damals scheinbar erfolgreich implementiert hat...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 19 April 2018, 08:10:40
Mit was für einem Editor hast Du es bearbeitet??

Da  Script funktioniert aus der Konsole, aber nicht aus FHEM??
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 19 April 2018, 09:33:21
scripte mit nano erstellt und ausführbar gemacht, laufen unter allen benutzern einwandfrei in der console durch...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 19 April 2018, 09:55:29
Komisch .. kann ich mir nicht erklären ...

Kannst DU mal mit den "Lang" Einstellungen rumspielen?
Bzw. Dir ausgeben?
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 19 April 2018, 10:04:50
wie meinen?
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 19 April 2018, 10:24:07
Sorry, dachte Du hast schon in der Richtugn gearbeitet ...
http://linuxwiki.de/locale (http://linuxwiki.de/locale)

also einfach mal reinsetzen:
LC_ALL=de_DE.UTF-8
LANG=de_DE.UTF-8


Bzw vorher einfach mal ausgeben lassen:
echo $LC_ALL
echo $LANG


Dann eventuell mal mit dem Parameter de_DE.UTF-8 spielen...

Edit:
Die auf dem System verfügbaren anzeigen:
locale -a
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 20 April 2018, 10:25:25
alle möglichen de und en varianten durchprobiert, es verändert sich nix... ich gebs auf...
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 20 April 2018, 13:11:37
da ich hier so einen switch nicht habe, kann ich Dir leider nicht weiterhelfen ....
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 23 April 2018, 06:16:56
danke trotzdem für deine inputs! :thumbsup:
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: Wernieman am 23 April 2018, 09:03:01
Was mich wundert, das es auf der Konsole geht, aber beim Aufruf durch FHEM nicht.
Titel: Antw:TP-Link Power over Ethernet Switch fernsteuern
Beitrag von: fl_Indigo am 17 Mai 2018, 09:55:51
habs jetzt in perl gelöst

folgende routine in die myutils

sub poeswitch {
my ($port, $status) = @_;

use Net::Telnet;
my $remote;
$remote = new Net::Telnet (Timeout => 10,
                     Errmode => 'die');

$remote->open("10.0.0.248");
$remote->waitfor('/User:/');
$remote->print("user") ;
$remote->waitfor('/Password:/');
$remote->print("password") ;

$remote->waitfor('/TL-SG2210P/');
$remote->print("\n");
$remote->print("enable\n");
$remote->waitfor('/TL-SG2210P/');
$remote->print("configure\n");
$remote->waitfor('/TL-SG2210P/');
$remote->print("interface gigabitEthernet 1/0/$port\n");
$remote->waitfor('/TL-SG2210P/');
$remote->print("power inline supply $status\n");
$remote->waitfor('/TL-SG2210P/');
}

eventuell muss auf dem ausführenden system NET::Telnet via cpan oder libnet-telnet-perl via packagemanager nachinstalliert werden

danach klappt der aufruf von

define n_PoE_Port_2_on notify PoE_Port_2_Switch:on {poeswitch("2","enable")};;
define n_PoE_Port_2_off notify PoE_Port_2_Switch:off {poeswitch("2","disable")};;

und der switch schaltet den angegebenen port

vielleicht hilfts ja nochmal jemandem :)