WOL aus Docker Container klappt nicht

Begonnen von wuast94, 11 Mai 2018, 18:43:35

Vorheriges Thema - Nächstes Thema

wuast94

hey :) Ich habe mein Fhem in einem docker container laufen und versuche meinen LG Web os 3 tv über wol zu starten was allerdings nicht so ganz klappt. so wie ich es gelesen habe liegt es wohl am container das er das "Magic Packet" nicht weiter schickt.

Hat jemand von euch eine Idee wie ich das fixxen kann ? :)

[EDIT] Klappt übrigens weder mit UDP noch mit EW
und hier noch meine RAW definition:

defmod LG_WOL WOL [MAC adresse] 192.168.178.67 EW
attr LG_WOL event-on-change-reading 1
attr LG_WOL interval 30
attr LG_WOL room Workarounds
attr LG_WOL shutdownCmd set lg off
Zigbee  Temp+Luftdruck+Humi Bewegungsmeldern Tür Kontakte, Klingel, TV, Denon, Schaltbare Steckdosen mit leistungsmessung, und weiteres

Homeassistant mit Nodered

thgorjup

Kannst du denn aus dem Container heraus pingen oder geht das schon nicht?
Mit dem Starten von Docker werden automatisch iptables Regelwerke gesetzt. Schau mal, ob da evtl. die MAGIC-Pakete speziell erlauben musst.
Ansonsten würde ich auch mal prüfen, ob die ID des FHEM users auf dem Host bekannt ist. Alle User im Container sollten auf dem Host die gleiche ID haben.
FHEM auf Ubuntu 18.04LTS, 2x nanoCUL, JeeLink, nanoPIR, MQTT, ESP-Easy, HUE.
Sensoren+Aktoren: HM, IT, Lacrosse, Multitrade-PIR, VU+, Somfy

ulli

ich habe das selbe Problem. Konntest du es lösen?

AndiB

Gleiches Problem hier -> Suche nach Lösung

Danke für jede Hilfe.
FHEM 5.7 development auf Ubuntu 14.04 LTS auf intelnuc i3 installiert. ca.20x1Wire, Solarview, VantagPro2, KNX-EIB, S0 Stromzähler, etc

bartman121


kadettilac89

Ich habe das mir das Modul angepasst und sende den Befehl per SSH an den host. Alternative auf bridge verzichten was ich nicht wollte. Wenn du willst posten ich nachher mein Modul

kadettilac89

ich poste mal die Änderung im WOL-Modul wodurch dann per SSH ein etherwake-call auf dem Host gemacht wird.

Zeile 315 98_WOL.pm

Original

315     # sysCmd splitten und den nur ersten Teil (-e teil[0])prüfen
316     my ($sysWake) = split( " ", $sysCmd );
317     if ( -e $sysWake ) {
318         $sysCmd =~ s/\$mac/$mac/;
319         $sysCmd =~ s/\$sysInterface/$sysInterface/;
320         Log3 $hash, 4, "[$name] executing $sysCmd";
321         qx ($sysCmd);
322     }
323     else {
324         Log3 $hash, 1, "[$hash->{NAME}] system command '$sysWake' not found";
325     }


Neu

    # sysCmd splitten und den nur ersten Teil (-e teil[0])prüfen
    my ($sysWake) = split( " ", $sysCmd );
    if (-e $sysWake) {
       $sysCmd =~ s/\$mac/$mac/;
       $sysCmd =~ s/\$sysInterface/$sysInterface/;
       Log3 $hash, 4, "[$name] executing $sysCmd";
       #qx (sudo $sysCmd);
   qx (ssh <user-auf-host>\@host.docker.internal -p 22 -o StrictHostKeyChecking=no    "sudo $sysCmd -i eth0")
    } else {
       Log3 $hash, 1, "[$hash->{NAME}] system command '$sysWake' not found";
    }


<user-auf-host> .. das ist der User auf dem Host mit dem etherwake ausgeführt werden soll. die <> nur ein Zeichen für Platzhalter.

-o StrictHostKeyChecking=no war ein Notbehelf ... kannst du auch weglassen.

Wenn möglich nicht Root auf dem Host nutzen sondern einen User mit eingeschränkten Rechten. Damit etherwake per SSH funktioniert musst du dann dem host-user sudo gewähren sonst kommt eine Fehlermeldung (fehlende Rechte oder so).

sudo für den host-user sieht bei mir so aus.

<user-auf-host> ALL=(ALL:ALL) NOPASSWD: /usr/sbin/etherwake


Schritte:
1) SSH konfigureren um vom Fhem-Docker auf Host ohne Passwort sondern per Zertifikat auf den Host zugreifen zu können. Sicherstellen dass das geht, erst dann weitermachen
2) User auf dem Host etherwake erlauben. Im SSH-tunnel testen. Wenn das funktioniert weiter ..
3) Modul anpassen
4) in global das Attribut "exclude-from-update setzen" und das Modul vom Update ausnehmen.

SSH-Diskussion gab es vor kurzem im Docker-Thread. Fragen zu SSH ggf. dort stellen.

Phil1602

Hallo zusammen,

ich hatte dasselbe Problem, nachdem ich auf Docker umgestiegen bin.

Das Aufwecken per UDP bzw. per Etherwake hat solange funktioniert, solange mein Router den IP Table Eintrag noch besaß, da so per direkter IP aufgeweckt werden konnte.
Das Broadcast Paket geht allerdings verloren, wie ihr schon beschrieben habt, da das Docker Bridge Netzwerk diese Pakete nicht routet.

Die Idee per SSH auf den Host zuzugreifen und dort den Command auszuführen gefiel mir irgendwie nicht ganz so gut, deswegen hatte ich nach einer anderen Lösung gesucht und bin letztlich auf die Idee gekommen meine FritzBox, die ich bereits in FHEM integriert hatte, dafür zu nutzen.

Per tr064 Command und einem Dummy und Notify hatte ich das ganze dann realisiert, der tr064 Command sieht wie folgt aus:

get <FritzBoxName> tr064Command Hosts:1 hosts X_AVM-DE_WakeOnLANByMACAddress NewMACAddress "12:34:56:78:9A:BC"


Vielleicht ist dieser Ansatz ja für jemanden hilfreich, der ebenfalls eine FritzBox im Einsatz hat  :)

Schön wäre es evtl. noch das WOL Device zu erweitern. Das Modul hab ich mir allerdings noch nicht genauer angeschaut.
Den Systemcommand kann man ja bereits ändern, vielleicht könnte man das noch so erweitern, dass statt dem Systemcommand auch ein entsprechender FHEM Command genutzt werden kann.



Otto123

Zitat von: Phil1602 am 21 August 2019, 21:26:29
Schön wäre es evtl. noch das WOL Device zu erweitern. Das Modul hab ich mir allerdings noch nicht genauer angeschaut.
Den Systemcommand kann man ja bereits ändern, vielleicht könnte man das noch so erweitern, dass statt dem Systemcommand auch ein entsprechender FHEM Command genutzt werden kann.
Hi,

zum Einen kann man die TR064 Kommandos direkt zusammenbasteln und per Shell absetzen:
https://wiki.ubuntuusers.de/FritzBox/Skripte/
Oder man kann FHEM aus der Shell über den Clientmodus aufrufen
https://commandref.fhem.de/#command
Oder oder oder ...

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kadettilac89



Zitat von: Phil1602 am 21 August 2019, 21:26:29
vielleicht könnte man das noch so erweitern, dass statt dem Systemcommand auch ein entsprechender FHEM Command genutzt werden kann.

"Man" könnte das ändern. Es muss sich nur je"man"d finden. Du kannst dazu mal  im wol Modul zugehörigen Forum die Frage an den modulautor stellen.


Phil1602

Zitat von: Otto123 am 21 August 2019, 22:37:32
Hi,

zum Einen kann man die TR064 Kommandos direkt zusammenbasteln und per Shell absetzen:
https://wiki.ubuntuusers.de/FritzBox/Skripte/
Oder man kann FHEM aus der Shell über den Clientmodus aufrufen
https://commandref.fhem.de/#command
Oder oder oder ...

Gruß Otto


Danke für den Tipp! Ich hatte mir das WOL Modul nochmals genauer angeschaut. Den SysCmd den man dort mitgeben kann wird zusammen mit der Mac Adresse aufgerufen, ist also primär vermutlich dazu da etherwake ohne Root zu benutzen. Ein eigenes Shellscript aufzurufen bzw. direkt einen Shellbefehl mit eigenen Parametern zu benutzen ist mir leider nicht gelungen.

Zitat von: kadettilac89 am 22 August 2019, 08:04:00
"Man" könnte das ändern. Es muss sich nur je"man"d finden. Du kannst dazu mal  im wol Modul zugehörigen Forum die Frage an den modulautor stellen.

Ich hab das Modul mal um einen "CMD" Mode erweitert, sodass ein Command (Fhem, Perl oder System) ähnlich des ShutdownCmd definiert werden kann und dann direkt aufgerufen wird ohne dass Etherwake oder Wakeonlan verwendet wird. Den Entwurf davon werde ich mal im zugehörigen Forum posten.

Vielen Dank und viele Grüße  ;)