Synology DSM 6.0 poweroff skript funktioniert nicht mehr

Begonnen von neodee, 08 April 2016, 15:39:14

Vorheriges Thema - Nächstes Thema

neodee

Hallo,

ich habe seit dem Update meines NAS von Version DSM 5.0 auf 6.0 ein Problem mit meinen Shutdown Skript, welches ich in die  99_myUtils.pm ausgelagert habe.

Seit DSM 6.0 kann man nach dem Login als admin (root Login funktioniert nicht mehr), den poweroff Befehl nicht mehr absetzen ohne vorher mit "sudo -i" root rechte zu erlangen. Dieses Problem konnte ich mittlerweile lösen.


########################################
### Connect to diskstation
########################################

sub NAS_Shutdown()
{
use Net::Telnet ();
    my ($t) = new Net::Telnet ( Timeout=>10,Errmode=>'die');
$t->open("192.168.xxx.xxx");
Log 1, "NAS: Verbindung hergestellt";
$t->waitfor('/login: $/i');
$t->print("admin");
Log 1, "NAS: login eingegeben";
$t->waitfor('/password: $/i');
$t->print("admin-passwort");
Log 1, "NAS: Admin Passwort eingegeben";
$t->waitfor('/Disk-Station:~#/i');
$t->print("sudo -i");
Log 1, "Root rechte erlangen";
$t->waitfor('/password: $/i');
$t->print("admin-passwort");
Log 1, "NAS: Root Passwort eingegeben";
$t->print('poweroff');
Log 1, "NAS: Shutdown Befehl ausgegeben";
}


Allerdings habe ich mit der Zeile: "$t->waitfor('/Disk-Station:~#/i');" Probleme und bekomme immer den Log Eintrag:
"pattern match timed-out at ./FHEM/99_myUtils.pm line 32"

Hat jemand einen Tipp wie die Zeile angepasst werden müsste, damit das Pattern wieder korrekt erkannt wird?
Habe schon diverse versuche unternommen, jedoch ohne Erfolg.
Sofern ich die Zeile auskommentiere, läuft das Skript zwar durch, jedoch fährt das NAS nicht herunter...

Wie gesagt mit DSM 5.0 hatte das Skript noch ohne Probleme funktioniert.

Grüße und Danke

Jamo

Seit dem Synology update auf 6.0 geht der root access nicht mehr.
Diese Lösung funktioniert, das "root" password ist das gleiche wie das "admin" password.
Die IP Adresse, der "DISK-STATION-NAME" und das "admin-passwort" sind zu ersetzen.
Der Trick liegt im "sudo su -"

sub NAS_Shutdown()
{
use Net::Telnet ();
my ($t) = new Net::Telnet ( Timeout=>2,Errmode=>'die');
$t->open("192.168.xxx.xxx");
Log 1, "NAS: Verbindung hergestellt";
$t->waitfor('/DISK-STATION-NAME login: $/i');
$t->print("admin");
Log 1, "NAS: login eingegeben";
$t->waitfor('/Password: $/i');
$t->print("admin-passwort");
Log 1, "NAS: Admin Passwort eingegeben";
$t->waitfor(String => 'DISK-STATION-NAME', Timeout => 2);
$t->print('sudo su -');
$t->waitfor('/Password: $/i');
$t->print("admin-passwort");
Log 1, "NAS: Root Passwort eingegeben";
$t->print('poweroff');
Log 1, "NAS: Shutdown Befehl ausgegeben";
my ($output) = $t->waitfor('/The system is going down for power off NOW!$/i');
print $output; Log 1, "NAS: Shutdown abgeschlossen"; }
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

neodee

Hallo inoma,

danke für das Skript.

Herunterfahren tut die DS jetzt, allerdings bekomme ich im LogFile einen Eintrag:

[WOL_Synology]pattern match read eof at ./FHEM/99_myUtils.pm line 64

Zeile 64 ist: my ($output) = $t->waitfor('/The system is going down for power off NOW!$/i');

Irgendeine Idee woran das noch liegen könnte?

Grüße

Jamo

Ja klar.
Der 'return string' deiner NAS ist dann halt anders als "The system is going down for power off NOW!".
Das 'waitfor' wartet ja ganz genau auf diese Ausgabe.
Entweder den String anpassen, oder die Zeile beruhigt löschen :-)
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence