Kann man über Ethernet einen Synology NAS Server per FHEM herunterfahren?
Habe ein DS410 und würde dieses gerne per FHEM herunterfahren bei Abwesenheit.
Einfach abschalten ist dauerhaft keine gute Idee.
Hat das schon mal jemand realisiert (außer über Aktor am Schalter), ein Ethernet Befehl wäre mir lieber?
Geht ja über das Webinterface, also muss es eine remote Möglichkeit geben.
Hallo,
wenn du den Web-Befehl per Telnet/oder HTTP ans NAS schicken kannst sollte das möglich sein.
Grüße
Danke, ja, wenn ich den Web-Befehl wüsste, täte ich mir leichter.
Am Web-GUI von Synology dem DSM (Disk Station Manager) gibt es einen Button zum Herunterfahren, läuft in Java, soweit ich weiß. Aber wie man den Befehl "abfängt" - keine Ahnung.
wenn du mit runterfahren wirklich ausschalten meinst dann per ssh entweder poweroff oder syno_poweroff_task ausführen. wie man den suspend mode von der kommandozeile aktiviert habe ich leider noch nicht gefunden.
gruss
andre
Hallo Andre,
ich stand vor dem selben Problem bei meiner DS107+. Habe auch schon eine Lösung für das automatische Einschalten gefunden (Stichwort Funksteckdose und Kondensator an den Einschalttaster der Diskstation anlöten).
Das Herunterfahren habe ich experimentell wie folgt in einer 99_myutils.pm gelöst:
### Connect to diskstation
sub NAS_Shutdown()
{
{fhem ("set NAS shutdown")};
use Net::Telnet ();
my ($t) = new Net::Telnet ( Timeout=>50,
Errmode=>'die');
$t->open("192.168.xxx.xxx");
Log 1, "NAS: Verbindung hergestellt";
$t->waitfor('/login: $/i');
$t->print("root");
Log 1, "NAS: login eingegeben";
$t->waitfor('/Password: $/i');
$t->print("xxxxxxxx");
Log 1, "NAS: Passwort eingegeben";
$t->waitfor('/DiskStation>/i');
$t->print('poweroff');
Log 1, "NAS: Shutdown Befehl ausgegeben";
my ($output) = $t->waitfor('/>/i');
print $output;
Log 1, "NAS: Shutdown abgeschlossen";
}
Beim Herunterfahren wird noch eine Warnung ins Logfile geschrieben, aber es funktioniert seit einigen Wochen bei mir problemlos. Testhalber sind vielleicht auch noch ein paar zu viele Log-Einträge drin.
Viele Grüße,
Bernd
ja. oder das hier um per ssh ein kommando aufzuführen. das geht aber nur wenn die keys entsprechend ausgetauscht sind und nicht nach einem password verlangt wird. der vorteil ist es geht ohne zusätzliches perl paket wenn das ssh binary gefunden wird.
sub ssh_cmd($$@)
{
my($host,$cmd,$user) = @_;
my $ret;
my $ssh = qx(which ssh);
chomp( $ssh );
$ssh .= ' ';
$ssh .= $user."\@" if( defined($user) );
$ssh .= $host ." ". $cmd;
if( open(my $fh, "$ssh|" ) ) {
$ret = <$fh>;
close($fh);
}
return $ret;
}
vielleicht findet ja noch jemand einen weg den suspend mode per software zu triggern. das wäre eigentlich noch eleganter und man könnte per wol einschalten.
gruss
andre
Danke für die Tipps. Meinte schon ausschalten, aber eben so,dass WOL danach wieder funktioniert.
@justme1968: das werde ich testen, wenn ich wieder zu Hause bin.
Hallo Zusammen,
ich habe noch ein Frage bezüglich der SSH Funktion. Die Funktion läuft prima, aber ich frage mich ob diese Funktion solange sie ausgeführt wird, den FHEM Server blockiert?!
Zu meinem Hintergrund: Ich würde nämlich gerne einen SSH Command zur Datensicherung über diese Funktion aufrufen, der aber ein paar Sekunden dauert bis er die Sicherung durchgeführt hat. Das wäre ja blöd, wenn FHEM solange blockiert wäre.
Danke und Gruß,
Botze
ich muss das hier leider nochmal rauskramen
folgende routine habe ich in der 99_myutils stehen
sub NAS_Stop()
{
{fhem ("set WOL_Synology ausschalten")};
use Net::Telnet ();
my ($t) = new Net::Telnet ( Timeout=>50,
Errmode=>'die');
$t->open("192.168.xx.xx");
Log 1, "NAS: Verbindung hergestellt";
$t->waitfor('/login: $/i');
$t->print("admin");
Log 1, "NAS: login eingegeben";
$t->waitfor('/Password: $/i');
$t->print("xxxx");
Log 1, "NAS: Passwort eingegeben";
$t->waitfor('/DiskStation>/i');
$t->print('sudo poweroff');
Log 1, "NAS: Shutdown Befehl ausgegeben";
$t->waitfor('/Password: $/i');
$t->print("xxxxx");
Log 1, "NAS: Shutdown Befehl2 ausgegeben";
my ($output) = $t->waitfor('/>/i');
print $output;
Log 1, "NAS: Shutdown abgeschlossen";
}
folgende definition
Internals:
DEF 00:11:32:xx:xx:xx 192.168.xx.xx BOTH
IP 192.168.178.10
MAC 00:11:32:xx:xx:xx
MODE BOTH
NAME WOL_Synology
NR 48
REPEAT 000
STATE aufwecken
TYPE WOL
Readings:
2016-10-07 21:58:47 active off
2016-10-07 21:58:57 isRunning true
2016-10-07 21:58:47 packet_via_EW none
2016-10-07 21:58:47 packet_via_UDP none
2016-10-07 21:58:57 state on
Timer:
Wol_synology_ping:
HASH WOL_Synology
MODIFIER ping
NAME WOL_Synology_ping
Helper:
Bm:
Wol_set:
cnt 3
dmx 0
mAr
max 0
tot 0
Attributes:
alias Synology aufwecken
devStateIcon on:general_an@green off:general_aus@red
eventMap on:aufwecken off:ausschalten
group Synology
icon it_nas
room System
shutdownCmd { NAS_Stop() }
gebe ich die schritte per Hand in die Console ein (per Putty über SSH) funktioniert der WEg und die Synology fährt runter.
Wo habe ich da meinen Denkfehler?
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::fhem" at ./FHEM/99_myUtils.pm line 54.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::NAS_Stop" at (eval 5495) line 1.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzePerlCommand" at fhem.pl line 1025.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::CommandSet" at fhem.pl line 1084.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::WOL_Set" at ./FHEM/98_apptime.pm line 104.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::DoSet" at fhem.pl line 1633.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::CommandSet" at fhem.pl line 2374.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::CallFn" at fhem.pl line 1601.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::CallFn" at fhem.pl line 3143.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::apptime_getTiming" at ./FHEM/98_apptime.pm line 74.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::CallFn" at fhem.pl line 1591.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommandChain" at fhem.pl line 3233.
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommand" at fhem.pl line 954.
Sorry bibn zu "faul zum Suchen", kannst Du mir bitte sagen, was in folgender Zeile steht?
2016.10.07 21:52:28 1: PERL WARNING: Deep recursion on subroutine "main::fhem" at ./FHEM/99_myUtils.pm line 54.
Also Zeile 54 in der ./FHEM/99_myUtils.pm
Und .. gibt es einen besonderen Grund, das Du unbedingt per telnet arbeitest? Der admin-User hat sehr viele rechte auf der Synology ......
{fhem ("set WOL_Synology ausschalten")};
das ist die Zeile 54
ich habe es auch gerade noch versucht mit
{fhem ("set WOL_Synology off")};
leider mit selbem problem
per telnet arbeite ich eigentlich nur weil ich bisher keinen anderen weg gefunden habe über den raspberry die synology auszuschalten
stichwort ist ssh und keyauthentifizierung
Hast Du eventuell ein paar zeilen davor/dahinter?
Und .. was passiert genau bei "set WOL_Synology ausschalten"
folgende routine habe ich in der 99_myutils stehen
sub NAS_Stop()
{
{fhem ("set WOL_Synology ausschalten")};
use Net::Telnet ();
my ($t) = new Net::Telnet ( Timeout=>50,
Errmode=>'die');
$t->open("192.168.xx.xx");
Log 1, "NAS: Verbindung hergestellt";
$t->waitfor('/login: $/i');
$t->print("admin");
Log 1, "NAS: login eingegeben";
$t->waitfor('/Password: $/i');
$t->print("xxxx");
Log 1, "NAS: Passwort eingegeben";
$t->waitfor('/DiskStation>/i');
$t->print('sudo poweroff');
Log 1, "NAS: Shutdown Befehl ausgegeben";
$t->waitfor('/Password: $/i');
$t->print("xxxxx");
Log 1, "NAS: Shutdown Befehl2 ausgegeben";
my ($output) = $t->waitfor('/>/i');
print $output;
Log 1, "NAS: Shutdown abgeschlossen";
}
folgende definition
Internals:
DEF 00:11:32:xx:xx:xx 192.168.xx.xx BOTH
IP 192.168.178.10
MAC 00:11:32:xx:xx:xx
MODE BOTH
NAME WOL_Synology
NR 48
REPEAT 000
STATE aufwecken
TYPE WOL
Readings:
2016-10-07 21:58:47 active off
2016-10-07 21:58:57 isRunning true
2016-10-07 21:58:47 packet_via_EW none
2016-10-07 21:58:47 packet_via_UDP none
2016-10-07 21:58:57 state on
Timer:
Wol_synology_ping:
HASH WOL_Synology
MODIFIER ping
NAME WOL_Synology_ping
Helper:
Bm:
Wol_set:
cnt 3
dmx 0
mAr
max 0
tot 0
Attributes:
alias Synology aufwecken
devStateIcon on:general_an@green off:general_aus@red
eventMap on:aufwecken off:ausschalten
group Synology
icon it_nas
room System
shutdownCmd { NAS_Stop() }
gebe ich die schritte per Hand in die Console ein (per Putty über SSH) funktioniert der WEg und die Synology fährt runter
Warum steht in dem NAS_Stop() denn ein "fhem ("set WOL_Synology ausschalten")"???
Außerdem .. eigentlich brauchst Du keine {} bei dem fhem Befehl, da Du schon in Perl bist ....
Zitat von: Wernieman am 08 Oktober 2016, 16:01:30
Warum steht in dem NAS_Stop() denn ein "fhem ("set WOL_Synology ausschalten")"???
Außerdem .. eigentlich brauchst Du keine {} bei dem fhem Befehl, da Du schon in Perl bist ....
das hatte ich mir aus diesem Beitrag https://forum.fhem.de/index.php/topic,12791.msg77870.html#msg77870 (https://forum.fhem.de/index.php/topic,12791.msg77870.html#msg77870)
Hast Du einen noify auf "WOL_Synology"?