Hallo,
habe eine Synology DS115j. Diese hat kann kein WakeOnLan.
Habe mir deshalb nach foldener Anleitung mit einem Arduino beholfen, welcher die DS hochfährt sobald Strom anliegt.
(https://www.synology-forum.de/showthread.html?4581-Automatisches-Einschalten-DS106-fuer-20-Cent/page4&p=856049#post856049)
Angesteckt habe ich die DS an eine osram smart+ Steckdose angesteckt, welche ich über FHEM steuere.
Damit das nächste mal der Arduino wieder "WOL" durchführt muss der DS vorher stromlos sein. Ich möchte aber die Steckdose mit den DS nicht einfach ausschalten sondern die DS vorher herunterfahren.
Ich habe es geschafft, dass ich mit Putty und folgenden Befehl die DS herunterfahren kann
poweroff
Hierfür habe ich ein Kennwort für den Benutzers Root vergeben den Root-Login in der Datei /etc/ssh/sshd_config mit der Erweiterung um die Zeile "PermitRootLogin yes" ermöglicht.
Wie kann ich mit FHEM steuern, dass der o.g. Befehl "poweroff" über ssh gesendet wird und dann nach z.B. 5 Minuten die Osram Steckdose automatisch ausgeschaltet wird.
Ich das möglich und falls ja wie?
(Ich kenne mich mit der Materie nicht gut aus und habe mich bisher mit Hilfe von anderen Anleitungen bis zu diesem Punkt gebracht)
Vielen Dank
Grüße
Ruggy
Hi,
vom Prinzip her geht das einfach so (https://heinz-otto.blogspot.com/2017/01/per-ssh-remote-befehle-direkt-ausfuhren.html).
Ich entsinne mich aber, dass es bei Syno irgendwie besonders war, es gab da mal eine endlose Diskussion...
Gruß Otto
Das ist mir schon fast zu kompliziert; geht es auch einfacher? Wenn nicht, muss ich es doch probieren.
Habe folgenden Thread gefunden.
https://forum.fhem.de/index.php/topic,48902.msg405669.html#msg405669
Hier wird durch @ujaudio folgendes geschrieben
Zitat von: ujaudio am 20 August 2016, 10:54:33
Aus FHEM heraus kann ich meine Synology wie folgt herunterfahren:
system ('ssh root@xxx.xxx.xxx.xxx poweroff');
# statt der xxx die IP-Adresse
Wenn ich aber
system ('ssh root@xxx.xxx.xxx.xxx poweroff');
(mit meiner IP; muss ich die IP dreistellig eingeben; z.B. 192.168.001.002 ?)
in FHEM oben in der Befehlszeile eingebe, kommt die Meldung
Unknown command system, try help.
Was mache ich falsch?
Könnte das so funktionieren?
Habe es jetzt mal so probiert
{ system ('ssh root@192.168.001.002 poweroff') }
In FHEM zeigt es
-1
an; die DS fährt aber nicht herunter
Dein user fhem darf bestimmt nicht auf die Synology so einfach "drauf" ....
Probiere es doch bitte erstmal "normal" von der Konsole. Wenn das funzt, kannst Du es nach fhem portieren.
Wenn Du auf Deinen fhem-Rechern mit der Konsole gehst (putty), was kommt bei ssh root@192.168.001.002 poweroff
Folgendes wird nach der Eingabe in Putty angezeigt (den Fingerprint habe ich für hier etwas verändert):
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
ECDSA key fingerprint is SHA256:mnoTiQ3zBKYwFTbbmN1e/THP34teH+zPhmoHVtNFCMM.
Are you sure you want to continue connecting (yes/no)?
Dann nach folgender Eingabe
yes
wird diese Meldung angezeigt
Warning: Permanently added '192.168.1.2' (ECDSA) to the list of known hosts.
root@192.168.1.2's password:
nach Eingabe des Passwortes (welches ich root festgelegt habe; siehe Eingangsthread) wird die DS heruntergefahren :)
Beim erneuten eingeben deines codes wird nur mehr das Passwort abgefragt und die DS fährt herunter.
Jetzt frage ich mich zusätzlich, wie es grundsätzlich von FHEM aus funktioniert. Deinen Befehl habe ich ja in Putty eingegeben, welches auf meinen Win-PC läuft.
Muss ich dann ssh auch auf meinen Raspberry installieren, auf welchen FHEM läuft?
Den PC möchte ich dazu nicht immer laufen lassen, sonder z.B. auch vom Smartphone steuern.
Die Passworteingabe stört auch noch.
Dann lies Dir den Beitrag von Otto durch ... da geht es um einen Passwortlosen ssh Zugang ...
Und wie funktioniert das mit dem portieren?
Zitat von: Wernieman am 09 März 2020, 20:55:40
kannst Du es nach fhem portieren.
Ruggy, ehrlich - wenn Dir das in meinem Artikel zu kompliziert dargestellt ist - dann lass das lieber.
Ich kann Dir sagen, alle anderen Artikel die Du zum Thema finden wirst sind komplizierter ;)
Alle Alternativen sind sicher viel unsicherer, aber davon gibt es sicher viele Varianten.
Mein Artikel ist für einen raspberry, Du musst das auf die Syno portieren. Bei deinem jetzigen Stand wird das nichts - tut mir leid.
Du kannst aber gern noch mal in Ruhe von vorn und Satz für Satz (link für link) lesen. Vielleicht kommst Du ja dann nicht wieder sofort zu dem Schluß: Länger als eine A4 Seite - zu kompliziert ;)
Wenn was unklar ist, frag einfach.
Hier war die alte Diskussion mit der Synology -> https://forum.fhem.de/index.php?topic=37090.45
Gruß Otto
:(
In dem anderen Thread hat es sich so einfach angehört (system ('ssh root@xxx.xxx.xxx.xxx poweroff');)
Werde mir deinen Artikel genauer anschauen und versuchen das ich es damit hin bekomme.
Habe leider niemanden, den ich hierzu fragen kann. Diejenigen, welche ich später kennengelernt habe, haben Openhab; hatte mich aber da schon mit FHEM "angefreundet" und wollte nicht mehr umsteigen.
Evlt. schaffe ich es. Wenn nicht muss ich es leider sein lassen oder oder den umständlichen Weg über DS finder. Damit wird sich meine Frau aber wahrscheinlich nicht anfreunden können.
Trotzdem Danke
Zitatso einfach angehört (system ('ssh root@xxx.xxx.xxx.xxx poweroff')
so einfach ist es am Ende auch. Aber dazu brauchst Du den passwortlosen ssh Zugang mit public key - der genau das erlaubt.
Wieso kannst Du keinen fragen? Hier hast Du schon mal zwei ziemlich nette Leute in deinem Thread ;)
Vielleicht hast Du ein anderes Linux System zum üben. Einmal verstanden ist es leichter es am finalen Objekt um zu setzen.
Ich meine jemand der sich mal mit an meinen Computer setzen kann und mir das erklären bzw. zeigen kann. Mir fehlen halt grundlegende Programierkenntnisse.
Hier im Forum wurde mir schon öfters geholfen und es gibt hier auch noch mehr nette Leute ;)
Ich verstehe aber auch, dass es nicht leistbar ist, jeden Schritt für Schritt zu helfen;
Ich werde mir deinen Artikel jedenfalls mal in Ruhe anschauen und ein paar Mal durchlesen. Auf die Kürze habe ich es nicht kapiert und steige irgenwann aus. Liegt aber nicht an Deinen Artikel sondern an mir. ;)
Mal eine Adaption:
1. Du logst Dich auf dem FHEM-Rechner ein
2. root werden ("sudo -i", "su -" oder wie auch immer Du es machst)
3. Dort erlaubst Du (temporär!) das einloggen als FHEM user
- in der /etc/passwd das /bin/false durch /bin bash ersetzen
4. per "su - fhem" fhem werden
5. ssh-key erstellen "ssh-keygen -t rsa -b 4096"
6. ssh-key auf Synology kopieren "ssh-copy-id root@<Deine Synology>"
- Eventuell mjußt Du das "will ich" bestätigen
- Es erfolgt natürlich eine Passwortabfrage
7. probieren ob es jetzt wirkich funzt "ssh root@<Deine Synology>"
8. wieder root werden "exit"
9. Punkt 3. deaktivieren (/bin/false in /etc/passwd)
jetzt kannst Du mit fhem weitermachen ;o)
Ergänzung:
Bei Punkt 5. Ganz wichtig - und dies war für mich als Laie damals absolut nicht klar: Zweimal die Passwortabfrage nur mit enter, also leer quittieren und damit kein Passwort erzeugen!
Hallo Wernieman und vielen Dank für die Anleitung, hat funktioniert. :D
Und der Tip von Otto123 habe ich auch benötigt. Das erste Mal habe ich ein Passwort vergeben und hat nicht funktioniert. Danke
Muss ich jetzt mit einen dummy und notify arbeiten um erst den Befehl fürs herunterfahren zu senden und nach einer bestimmten Zeit die Osram Steckdose auszuschalten?
Oder funktioniert das auch direkt mit device der Osram Steckdose?
Erstmal schön das Du das hinbekommen hast.
Man kann das sicher verschieden gestalten. Ich habe generell ein WOL Device - aber genau das geht ja bei Dir nicht.
Du brauchst ja auch einen Status, also Ablauf sehe ich etwa so:
Gerät an? (Ping / PRESENCE)
shutdown Befehl
Gerät aus? (Ping / PRESENCE)
kurze Verzögerung zur Sicherheit
Steckdose aus
Vielleicht ist eine ReadingsGroup in deinem Fall die bessere "Repräsentation"?
Im Übrigen geht der Befehl zum Herunterfahren auch ohne den Perl Umweg direkt so:
"ssh root@192.168.001.002 poweroff"
siehe https://fhem.de/commandref_DE.html#command
Gruß Otto
Viele verschidene Wege "führen nach Rom". Es geht auch per at ..... also wenn nach 2 Minuten difinitif die Synology down ist, sie nach 2 Minuten per at ...
Der Weg über Ping wäre wahrscheinlich der elegantere. Derzeit für mich einfacher ist wahrscheinlich der mit at (aber nichtmal das).
Probiere jedoch jetzt schon 1,5 Std. an dem Notify und ich schaffe es nicht, dass er die Steckdose nach einer bestimmten Zeit ausschaltet (zum Test 5 sec). Ohne die Zeitangabe funktioniert das ein und ausschalten der Steckdose über den Dummy-Schalter.
Folgendes habe ich gemacht:
- ein Dummy als Schalter angelegt
- je ein notify für on und off
Hier das list vom off-notify. Habe schon in der Commandref gelesen und auch andere Threads. Mit Semikolons hätte ich auch an den verschiedensten Stellen schon versucht.
Internals:
CFGFN
DEF MEDIA_NAS:off at +00:00:05 set HUEDevice3 off
FUUID 5e694ca6-f33f-194f-272c-a8546453bdf730c8
NAME MEDIA_NAS_off
NOTIFYDEV MEDIA_NAS
NR 20859
NTFY_ORDER 50-MEDIA_NAS_off
REGEXP MEDIA_NAS:off
STATE 2020-03-11 22:33:19
TRIGGERTIME 1583962399.81211
TYPE notify
Helper:
DBLOG:
state:
DbLog:
TIME 1583962388.93561
VALUE active
READINGS:
2020-03-11 22:33:08 state active
Attributes:
room Abstellkammer
Hier das on:
Internals:
CFGFN
DEF MEDIA_NAS:on set HUEDevice3 on
FUUID 5e694b7f-f33f-194f-40bb-44e6662d161cc9cb
NAME MEDIA_NAS_on
NOTIFYDEV MEDIA_NAS
NR 20842
NTFY_ORDER 50-MEDIA_NAS_on
REGEXP MEDIA_NAS:on
STATE 2020-03-11 22:33:18
TRIGGERTIME 1583962398.11419
TYPE notify
Helper:
DBLOG:
state:
DbLog:
TIME 1583958911.73656
VALUE active
READINGS:
2020-03-11 21:35:11 state active
Attributes:
room Abstellkammer
Hier das Dummy:
Internals:
CFGFN
FUUID 5e694522-f33f-194f-b943-e2a82a03423ba51c
NAME MEDIA_NAS
NR 20770
STATE off
TYPE dummy
Helper:
DBLOG:
state:
DbLog:
TIME 1583962399.80603
VALUE off
READINGS:
2020-03-11 22:33:19 state off
Attributes:
room Abstellkammer
webCmd on:off
Das hier ist MEDIA_NAS:off at +00:00:05 set HUEDevice3 off - sagen wir mal Unfug :)
define n_test notify MEDIA_NAS:off {}
define a_test at +00:00:05 {}
Sind zwei Paar Schuhe :)
mach einfach :
defmod MEDIA_NAS_off notify MEDIA_NAS:off sleep 5;;set HUEDevice3 off
Was Du machen wolltest - ich finde aber die sleep Variante übersichtlicher. Am Ende ist es das Ergebnis exakt gleich:
Achtung: das ist der Inhalt der DEF
MEDIA_NAS:off define at +00:00:05 set HUEDevice3 off
Hallo,
Zitat von: Ruggy am 09 März 2020, 14:17:02Ich habe es geschafft, dass ich mit Putty und folgenden Befehl die DS herunterfahren kann
poweroff
Ich besitze einen DS216J, und bei diesem würde es so nicht klappen, er würde bei Anlegen vom Strom nicht wieder aufwachen. Das ist so, als wenn man ihn von der Weboberfläche ausschaltet.
Was beim DS216J geht, ist folgender Befehl:
/usr/syno/sbin/synopoweroff -fr
den würde Synology verwenden, wenn eine USB sagen würde, dass zu wenig Spannung da ist.
Wenn man den ausführt, bootet die Synologie neu ohne die Festplatten zu mounten. Die drehen sich zwar noch, aber man kann das Teil gefahrlos vom Netz trennen.
Es kann natürlich beim der DS115j etwas anders sein, wenn aber poweroff nicht funktioniert, nimm den obigen Befehl, das funktioniert bei mir seit vielen Jahren.
Viele Grüße
Stefan
PS: Ich sehe gerade, dieses Manko des poweroff wird durch die Arduino-Lösung behoben. Mit dem obigen Befehl reicht allein eine Smart-Steckdose ohne Arduino.
@SCMP77
Danke für den Tip. Wie Du später gelesen hast habe ich den Arduino schon eingebaut. Aber evlt. kann es jemand anderes mal gebraucht, der vor dem gleichen Problem steht.
Ich habe es aber jetzt geschafft, dass es funktioniert so wie ich mir es vorgestellt habe. Dank Otto123 und Wernieman.
Falls es jemand anderes benötigt, so habe ich es gemacht:
Um Device für den Schalter anzulegen folgender Befehl:
define MEDIA_NAS dummy
dann in diesem Device MEDIA_NAS folgedes Attribut hinzugefügt
attr MEDIA_NAS webCmd on:off
Dann für das einschalten der Osramsteckdose (mit der eingesteckten DS) folgenden Befehl:
define MEDIA_NAS_on notify MEDIA_NAS:on set HUEDevice3 on
Für das Ausschalten habe ich folgenden Befehl von Otto123 verwendet.
defmod MEDIA_NAS_off notify MEDIA_NAS:off sleep 300;;set HUEDevice3 off
Und in diesem Device dann den Inhalt im DEF nachträglich verändert, dass dort folgendes steht und der Befehl fürs herunterfahren vorher gesendet wird. (mit einem defmod Befehl und beiden Befehlen gleichzeitig hat es irgendwie nicht geklappt):
MEDIA_NAS:off { system ('ssh root@192.168.33.93 poweroff') }; sleep 300; set HUEDevice3 off
Wahrscheinlich würde es jemand der sich damit auskennt nicht so machen (vermischen von Perl und FHEM-Befehl), aber es funktioniert zumindest ;)
Außerdem habe ich wieder etwas hinzugelernt. Mein Problem im Allgemeinen ist, wenn ich die fertigen Befehle vor mir sehe kann ich diesen einigermaßen folgen, wie diese funktionieren. Wenn ich diese aber selber zusammenstellen muß wird es schon wieder schwierig.
Ich denke jetzt mal bloß laut. :)
Kann man auf alle Fälle so machen.
Rudi hat letztens gesagt: auch wenn es funktioniert ist die Vermischung der einzelnen Befehlstypen (Perl, Shell, FHEM) nicht garantiert.
der system Befehl blockiert, könnte man verhindern aber dann läuft der Befehl ohne Rückmeldung
Die Befehlsfolge schaltet hart die Dose aus, auch wenn der shutdown gar nicht an kommt.
Besser wäre:
Die syno bekommt den shutdown Befehl, gibt eine Rückmeldung an FHEM, FHEM wartet und schaltet die Dose aus.
Wie gesagt: erstmal nur gedacht. Weil - Kompromisse halten bekanntlich ewig ;)
Gruß Otto
Kann mir vorstellen, dass meines nicht die Ideallösung ist, bin aber (vorerst) mal froh, dass es soweit funktioniert. 8) ::)
Ginge das in die Richtung Doif?
In der Commandref bei PRESENCE habe ich Modus: lan-ping gefunden.
ZitatIn der Commandref bei PRESENCE habe ich Modus: lan-ping gefunden.
... das wäre meine Idee aus #15 ;)
Die Syno könnte aber auch richtig zurückmelden, per HTTP, per MQTT ...
Aber einfach den shutdown Befehl so absetzen
"ssh root@192.168.33.93 poweroff"
ohne {system()}, ja - die " " gehören dazu und müssen sein, ja - das blockiert nicht ;D
Und dann warten das PRESENCE absent ist, funktioniert auch.