FHEM Forum

FHEM => Automatisierung => Thema gestartet von: fhainz am 17 Dezember 2013, 20:53:58

Titel: MacMini Ruhezustand via FHEM
Beitrag von: fhainz am 17 Dezember 2013, 20:53:58
Hallo!

Kann ich irgendwie via fhem Kommandozeilen befehle an den mac senden? So etwas wie hier. http://www.maclife.de/tipps-tricks/mac-os-x/os-x-den-mac-ueber-das-terminal-den-ruhezustand-versetzen
Würde gerne meinen MacMini zeitgesteuert in den Ruhezustand setzten.

Grüße
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: rudolfkoenig am 17 Dezember 2013, 21:23:44
Aber wieso ueber FHEM?
Der mac hat doch einen ganz  normalen crontab...
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Herr 3x am 17 Dezember 2013, 21:24:21
Mit ssh user@hostname command kannst du Befehle "ferngesteuert" vom Raspi aus auf dem Mac per Script starten.
Den ssh-Server musst du auf dem Mac in den Einstellungen unter Freigaben -> Entfernte Anmeldung aktivieren.
Allerdings habe ich noch keine Ahnung, wie du das von fhem aus steuerst.

Allerdings: Wenn es nur um einen zeitgesteuerten Ruhezustand geht: Den Ruhezustand kann der Mac auch selbst auslösen Systemeinstellungen -> Energie sparen -> Zeitplan.

HTH

Herr 3x
Titel: MacMini Ruhezustand via FHEM
Beitrag von: fhainz am 17 Dezember 2013, 21:24:48
Ich wollte es mit meinem Anwesend/Abwesend taster verknüpfen.

Edit:
Danke. Das ist schonmal super das es vom raspi aus klappt. Jetzt ist nur noch die Frage wie ich das mit fhem verbinde.
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: rudolfkoenig am 17 Dezember 2013, 21:34:58
Wenn FHEM auf einem "richtigen" Rechner laeuft, dann erzeugt man hier ein ssh-key (~fhem/.ssh/id_dsa bzw. id_dsa.pub), und man traegt id_dsa.pub auf dem macmini in /var/root/.ssh/authorized_keys ein (detaillierte Anleitung im Web suchen). Damit muesste ein "ssh root@macmini poweroff" als FHEM-Befehl ohne Passwort funktionieren.

Sonst (also FHEM@Fritzbox) faellt mir nur ein, FHEM auch auf dem mac mini zu starten, und per FHEM2FHEM was auzuloesen.


Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: fhainz am 17 Dezember 2013, 21:38:07
Fhem läuft am raspi.

Ich werde das morgen mal versuchen. Dann post ich das Ergebnis hier nochmal.

Danke für die Infos!

Grüße
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: UliM am 18 Dezember 2013, 07:31:29
Hi,
habe auf dem macmini ein php-script hinterlegt, das unterschiedl. Befehle ausführen kann (war urspr. mal für iTunes gedacht). Das kann auch die Befehle sleep und shutdown. Wird aus fhem auf meiner FB via GetFileFromURL aufgerufen.

Auf die Idee mit fhem2fhem bin ich nicht gekommen - da perl auf dem mac ja schon vorhanden ist, geht ein fhem-Install schnell und einfach - das hätte ich mal früher wissen sollen...

=8-)
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: fhainz am 18 Dezember 2013, 15:39:48
Hallo!

Ich hab das jetzt mal getestet. Funktioniert schon ganz gut. Schlafen legen klappt, aufwecken nicht.

define testSSH dummy
attr testSSH group SSH
attr testSSH room 8. Einstellungen
attr testSSH webCmd on:off

define n_testSSH notify testSSH{ if(VALUE($NAME) eq "on"){ ssh fhainz@10.0.0.40 pmset sleepnow }else{ ssh fhainz@10.0.0.40 pmset wake }}


MacMini eingerichtet wir Herr 3x gesagt hat und schon klappt's soweit.

Wenn ich aber vom Laptop den Befehl ssh fhainz@10.0.0.40 pmset wake sende wacht der Mini auf. Hab auch schon mit ssh fhainz@10.0.0.40 cd ./ versucht. Leider hat das auch nicht geklappt.

Jemand eine Idee?

Grüße
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 18 Dezember 2013, 15:53:42
wenn der rechner schläft kannst du ihn nicht per ssh aufwecken. du kannst aber wake on lan aktivieren und ihn mit dem wol modul aufwecken.

gruss
  andre
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 13:33:20
Hallo zusammen,

hier wurde zwar schon lange nichts mehr geschrieben, aber vielleicht kann mir ja jemand helfen.

Der MacMini ist eingerichtet und der Zugriff über ssh ohne Passwort funktioniert auch.

Das aufwecken des Macs geht per WOL auch sehr gut.

Jetzt würde ich den Rechner gerne in den Ruhezustand schicken, aber folgender Befehl funktioniert nicht:

define n_ssh_MacMini notify ssh_MacMini { if(VALUE($NAME) eq "on"){ ssh ThomasMacMini@192.168.200.34 pmset sleepnow }}

Kann mir jemand sagen was ich an dem Befehl falsch mache.

Vielen Dank.
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 13:40:14
$name muss ziemlich sicher klein geschrieben werden und der ssh aufruf muss z.b. in ein system("...") eingeschlossen werden.

ansonsten schau doch mal was im log steht.

gruss
  andre
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 14:18:40
Zitat von: justme1968 am 29 Oktober 2014, 13:40:14
$name muss ziemlich sicher klein geschrieben werden und der ssh aufruf muss z.b. in ein system("...") eingeschlossen werden.

ansonsten schau doch mal was im log steht.

folgendes steht in der FileLog:

2014.10.29 14:11:15 5: Cmd: >set ssh_MacMini off<
2014.10.29 14:11:15 4: dummy set ssh_MacMini off
2014.10.29 14:11:15 5: Triggering ssh_MacMini (1 changes)
2014.10.29 14:11:15 5: Notify loop for ssh_MacMini off
2014.10.29 14:11:15 4: eventTypes: dummy ssh_MacMini off -> off
2014.10.29 14:11:15 4: eventTypes: dummy ssh_MacMini state: off -> state: off
2014.10.29 14:11:15 5: Triggering n_ssh_MacMini
2014.10.29 14:11:15 4: n_ssh_MacMini exec { if(VALUE($name) eq "on") system("ssh ThomasMacMini@192.168.200.34 pmset sleepnow")}
2014.10.29 14:11:15 5: Cmd: >{ if(VALUE($name) eq "on") system("ssh ThomasMacMini@192.168.200.34 pmset sleepnow")}<
2014.10.29 14:11:16 3: n_ssh_MacMini return value: Global symbol "$name" requires explicit package name at (eval 11531) line 1.
syntax error at (eval 11531) line 1, near ") system"


Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 14:21:13
die geschweiften klammern um das system(...) darfst du natürlich nicht weg lassen.

define n_ssh_MacMini notify ssh_MacMini { if(VALUE("meinMacMini") eq "on"){ system("ssh ThomasMacMini@192.168.200.34 pmset sleepnow"); }}

statt $name schreib den namen direkt hin.

gruss
  andre
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 14:43:31
Jetzt steht folgendes in der FileLog

2014.10.29 14:24:26 5: Cmd: >set ssh_MacMini off<
2014.10.29 14:24:26 4: dummy set ssh_MacMini off
2014.10.29 14:24:26 5: Triggering ssh_MacMini (1 changes)
2014.10.29 14:24:26 5: Notify loop for ssh_MacMini off
2014.10.29 14:24:26 4: eventTypes: dummy ssh_MacMini off -> off
2014.10.29 14:24:26 4: eventTypes: dummy ssh_MacMini state: off -> state: off
2014.10.29 14:24:26 5: Triggering n_ssh_MacMini
2014.10.29 14:24:26 4: n_ssh_MacMini exec { if(VALUE("meinMacMini") eq "on"){ system("ssh ThomasMacMinissh_MacMini192.168.200.34 pmset sleepnow");; }}
2014.10.29 14:24:26 5: Cmd: >{ if(VALUE("meinMacMini") eq "on"){ system("ssh ThomasMacMinissh_MacMini192.168.200.34 pmset sleepnow"); }}<
2014.10.29 14:24:26 3: n_ssh_MacMini return value: Undefined subroutine &main::VALUE called at (eval 12043) line 1.


Es ist nur komisch das aus dem @ ein ssh_MacMni wird im Log.

2014.10.29 14:24:26 5: Cmd: >{ if(VALUE("meinMacMini") eq "on"){ system("ssh ThomasMacMinissh_MacMini192.168.200.34 pmset sleepnow"); }}<
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 14:47:55
mein fehler. ich war bei in gedanken grad ganz woanders.

in einem notify muss es $NAME heissen. wenn $NAME oder $EVENT nicht verwendet wird dann wird @ automatisch durch den namen ersetzt. und du müsstest @@ verwenden.

so sollte es jetzt wirklich gehen:
define n_ssh_MacMini notify ssh_MacMini { if(Value($NAME) eq "on"){ system("ssh ThomasMacMini@192.168.200.34 pmset sleepnow"); }}

gruss
  andre
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 15:11:55
eine Fehlermeldung bekomme ich noch

2014.10.29 15:04:10 3: n_ssh_MacMini return value: Undefined subroutine &main::VALUE called at (eval 13577) line 1.


Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 15:12:50
es muss Value heissen nicht VALUE
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 15:51:56
2014.10.29 15:36:39 5: Cmd: >set ssh_MacMini off<
2014.10.29 15:36:39 4: dummy set ssh_MacMini off
2014.10.29 15:36:39 5: Triggering ssh_MacMini (1 changes)
2014.10.29 15:36:39 5: Notify loop for ssh_MacMini off
2014.10.29 15:36:39 4: eventTypes: dummy ssh_MacMini off -> off
2014.10.29 15:36:39 4: eventTypes: dummy ssh_MacMini state: off -> state: off
2014.10.29 15:36:39 5: Triggering n_ssh_MacMini
2014.10.29 15:36:39 4: n_ssh_MacMini exec { if(Value($NAME) eq "on"){ system("ssh ThomasMacMini@192.168.200.34 pmset sleepnow");; }}
2014.10.29 15:36:39 5: Cmd: >{ if(Value($NAME) eq "on"){ system("ssh ThomasMacMini@192.168.200.34 pmset sleepnow"); }}<
2014.10.29 15:36:39 3: n_ssh_MacMini return value: -1


Jetzt werden keine Fehler mehr angezeigt.

Aber der MacMini geht nicht in den Ruhezustand.
Ich habe den Befehl (ssh ThomasMacMini@192.168.200.34 pmset sleepnow) nochmal ins Terminal von meinem Macbook und Raspi eingeben. Da funktioniert der Befehl ohne Probleme.
Habe auch schon versucht statt mit "on" mit  "off". Bringt aber leider auch keinen Erfolg.

An was könnte das noch liegen?

Danke für die Hilfe.

Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 15:54:02
und ganz ohne das if?

gruss
  andre
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 16:23:42
Zitat von: justme1968 am 29 Oktober 2014, 15:54:02
und ganz ohne das if?

geht auch nicht!

gruss Tom
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 16:48:17
und der user unter dem fhem läuft hat wirklich das recht ssh ohne password zu verwenden ?

gruss
  andre
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 16:57:49
Zitat von: justme1968 am 29 Oktober 2014, 16:48:17
und der user unter dem fhem läuft hat wirklich das recht ssh ohne password zu verwenden ?

ja habe ich vorher eingerichtet. Ich kann vom Raspi ohne Passwort den MacMini in den Ruhezustand versetzen. Auf dem Raspi läuft auch FHEM.
pi@raspberrypi ~ $ ssh ThomasMacMini@192.168.200.34 pmset sleepnow
Sleeping now...
pi@raspberrypi ~ $

Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 17:20:33
und fhem läuft als user pi oder als user fhem ?
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 17:28:13
ich hab FHEM mit user pi installiert.
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 17:30:14
und es läuft auch als user pi ?

was gibt einps -auxww|grep -i fhem
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 17:35:17
folgendes wird ausgeben

fhem       474  0.0  0.0   1692   428 ?        S    17:33   0:00 sleep 60
pi         491  0.0  0.1   4144   856 pts/0    S+   17:33   0:00 grep --color=auto -i fhem
fhem      1820  0.0  0.1   1760   536 ?        S    Okt24   0:13 /bin/sh ./watchdogloop.sh
root      2057  0.0  0.1   1696   560 ?        Ss   Okt24   0:24 startpar -f --fhem
fhem      8506  3.2  7.0  35344 31468 ?        S    00:44  32:25 /usr/bin/perl fhem.pl fhem.cfg
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 17:36:52
fhem läuft als user fhem. nicht als user pi. der user fhem muss ohne password auf deinen mac kommen.
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 29 Oktober 2014, 18:29:46
Zitat von: justme1968 am 29 Oktober 2014, 17:36:52
fhem läuft als user fhem. nicht als user pi. der user fhem muss ohne password auf deinen mac kommen.

ok, danke.

wie kann ich auf den user fhem wechseln?
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 29 Oktober 2014, 18:39:04
der user fhem hat vermutlich weder password noch homeverzeichnis.

wenn beides da ist kannst du mit su der user fhem werden.

das ganze ist jetzt aber nicht mehr wirklich fhem spezifisch.
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 30 Oktober 2014, 00:07:23
Habe jetzt beim user fhem ssh ohne Passwort eingestellt.

Leider geht es jetzt immer noch nicht.

define n_ssh_MacMini notify ssh_MacMini { if(Value($NAME) eq "on" ) { system "ssh ThomasMacMini@192.168.200.34 pmset sleepnow" } }

Ich weis nicht wo der Fehler liegt.
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Puschel74 am 30 Oktober 2014, 14:23:46
Hallo,

fehlt hier nicht noch das if  ???
{if (Value($NAME) eq "on" ) ...

Grüße
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Koppl am 30 Oktober 2014, 15:37:15
oh, hab ich beim eintragen ins Forum vergessen.

Ich meine der Befehl wird nicht weitergeben ans Terminal.
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Klinki am 02 März 2016, 20:45:43
Ist zwar schon etwas älter das Thema, aber vielleicht sind meine Erkenntnisse jemandem von Nutzen.

Auf eine Raspberry Pi wird fhem normalerweise unter dem Unix-Benutzer "fhem" ausgeführt. Damit man aus fhem ssh-Verbindungen mit anderen Systemen herstellten kann, benötigt der Unix-User "fhem" sudo-Rechte.
In einigen Threads liest man immer wieder von Leuten, die den Benutzer fhem in die Gruppe "root" eingepflegt haben. Damit läuft fhem mit root-Rechten. Davon ist strikt abzuraten!

Für unsere Problematik reicht es, dem Benutzer fhem die gleiche sudo-Berechtigung wie dem Raspi-eigenen User "pi" zu verpassen. Dazu die Datei /etc/sudoers anpassen:

pi ALL=(ALL) NOPASSWD: ALL
fhem ALL=(ALL) NOPASSWD: ALL


Anschließenden Reboot nicht vergessen!

Ein notify mit abgesetztem ssh-Befehl könnte so aussehen:

define MusikAus notify Musik:off { system("sudo ssh -o ConnectTimeout=3 zbox init 0");; fhem("sleep 50;;set harmony_34246653 PowerOff;;sleep 3;;set HM_ST_01_Sw off;;");;}

Voraussetzung ist natürlich der SSH-Zugang auf das fremde System (hier:zbox - mein Multimedia-Sklave ) ohne Passwort.
Das Timeout von 3 Sekunden ist optional.
Die langen Wartezeiten mit sleep geben dem box-Rechner genug Zeit um sauber herunter zu fahren.
Dahinter folgen noch ein paar fhem-Befehle.

So fahre ich meine HiFi-Anlage, inkl. einem Linux-Rechner mit Kodi, vollständig herunter.

jroos
Titel: MacMini Ruhezustand via FHEM
Beitrag von: justme1968 am 03 März 2016, 17:58:23
um ssh zu nutzen braucht man keine sudo rechte und man muss ssh auch nicht mit sudo ausführen sondern beim ssh kommando den den user angeben als der man auf dem ziel system aufschlagen will und für den fhem user dafür sorgen das er ein .ssh verzeichnis mit passendem known_hosts file hat.

gruss
  andre
Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: Klinki am 03 März 2016, 18:46:27
Das ist richtig!
In meinem Fall war es praktisch für diese Geschichte root zu nutzen. Ich hatte halt schon einen Schlüssel, der auf allen meinen Linux-Boxen einen schnellen root-Zugriff ermöglicht. Also sudo.

Aber Andre hat Recht! Seine Variante ist auf jeden Fall auch die Bessere. Mit root-Rechten sollte man immer vorsichtig sein!

Danke für den Hinweis!

Titel: Antw:MacMini Ruhezustand via FHEM
Beitrag von: moppy am 13 Januar 2017, 10:57:40
Servus,

vielleicht kann ich dem ein oder anderem helfen: Habe die letzten Tage genau dieses Vorhaben auch selbst bei mir versucht und kam immer wieder ins stolpern: für einen Anfänger wie mich war es nicht ganz trivial und selbsterklärend.

Vorhaben: Mac Mini (als HTPC mit Plex) per FHEM (läuft auf einem Raspberry) mit Terminalbefehlen zu füttern, sprich: Ruhezustand, Apps starten, Festplatten mounten und auch auswerfen

Zuerst muss dem Raspberry ein SSH Zugang ohne Passwort auf dem Mac erlaubt werden. Das funktioniert mit sog. Puplic-RSA-Keys.

Problem Nr.1: Fhem läuft auf dem Benutzer "fhem" (wohl bei den meisten) und nicht als Benutzer "pi" .. Somit muss man sich, um den Key zu erzeugen, erstmal auf dem Benutzer "fhem" per SSH am Raspberry einwählen. Das ist aber standardmäßig deaktiviert, bzw hat der Benutzer "fhem" gar kein Passwort. Um es trotzdem zu ermöglich wie folgt vorgehen (alles am Raspberry per SSH)

Zitatsudo nano /etc/passwd

und den Eintrag

Zitatfhem:x:999:20::/opt/fhem:/bin/false
in
Zitatfhem:x:999:20::/opt/fhem:/bin/bash

ändern + Speichern

Dann kann man sich in den Benutzer "fhem" einwählen, das darf aber nur der Benutzer root. Also erst als root, dann als fhem anmelden (evtl. vorher ein root passwort vergeben, das hatte ich aber vor einiger Zeit schon erledigt)

Zitatsu - root

dann

Zitatsu - fhem

und erst jetzt kann der Key erzeugt werden:

Zitatssh-keygen -t rsa -C MacMini@Emanuels-Mini.fritz.box

hier entsprechend den Benutzername und die IP/Hostname vom zu steuerndem Mac eintragen

3x mit Enter bestätigen (also ohne Kennwort und den Speicherpfad nicht verändern)

dann wird der Key auf den Mac kopiert:

Zitatcat /opt/fhem/.ssh/id_rsa.pub | ssh MacMini@Emanuels-Mini.fritz.box 'cat >> .ssh/authorized_keys'

auch hier natürlich wieder anpassen und den Benutzernamen und IP/Hostname vom eigenen Mac eingeben. Hier muss einmalig das Kennwort vom Mac Mini angegeben werden. Jetzt kann der SSH Zugang getestet werden, normalerweise ist kein Passwort mehr notwendig.

Jetzt noch die Änderung in /etc/passwd rückgängig machen (den Eintrag ,,fhem:x:999:20::/opt/fhem:/bin/bash" in ,,fhem:x:999:20::/opt/fhem:/bin/false" ändern.

Hier ein paar Beispielbefehle, die so direkt in FHEM funktionieren

Ruhezustand aktivieren
Zitat{system ("ssh MacMini\@192.168.178.28 pmset sleepnow")}

Die App Plex schließen
Zitat{system ("ssh MacMini\@192.168.178.28 osascript -e \\\'quit app \\\"Plex\\\"\\\'")};;

Festplatte auswerfen
Zitat{system ("ssh MacMini\@192.168.178.28 diskutil unmount /dev/disk1s2")}

Plex öffnen
Zitat{system ("ssh MacMini\@192.168.178.28 open -a Plex")}

hoffentlich habe ich nichts vergessen :)