Hallo,
ich habe im GitHub-Projekt https://github.com/doublexminus/xx-fhem#dash_dhcp-amazon-dashbuttons gelesen, dass man die Ports der Dashbuttons (67) einfach über den Port-Docker-Parameter auf 6767 umrouten kann. Persönlich habe ich das über die "docker-compose.yml" umgesetzt.
-p 67:6767
Drücke ich auf die Dashbuttons, so sehe ich im tcpdump auch die empfangen Pakete:
sudo tcpdump -i eth0 port 67 or port 68 -e -n
Gehe ich aber in meinem FHEM-Container (egal ob privileged oder nicht), so wird dort nichts empfangen. Der FHEM-Container läuft selbstverständlich nicht im Host-Modus.
Innerhalb des Containers läuft FHEM eigentlich auch mit Root-Rechten. Dürfte die Weiterleitung auf Ports > 1000 dann nicht sowieso egal sein?
Hat sich zufälligerweise irgendjemand mit Docker und den Dashbuttons beschäftigt und kann mir einen Tipp geben?
Lesestoff:
https://github.com/doublexminus/xx-fhem#dash_dhcp-amazon-dashbuttons
https://haus-automatisierung.com/hardware/fhem/2017/12/11/fhem-tutorial-reihe-part-49-dash-button.html
https://maker-tutorials.com/fhem-geraete-mit-amazon-dash-button-schaltensteuern-raspberry-pi-home-automation/
Zwischenstand:
Ich bin in einem anderen Docker-Projekt zufällig darüber gestolpert, dass man dem Container evtl. mehr Rechte mitgeben muss.
cap_add:
- NET_ADMIN
- NET_RAW
Das scheint sinnvoll, da dann auch der volle Zugriff auf das Netzwerk eingerichtet wird. Aber ich habe mein FHEM nicht (wie im oben erwähnten Docker-Projekt als "network_mode: host" laufen).
Ich hätte wetten können, dass der erste Versuch in dash_dhcp erfolgreich war. Aber ich kann es nicht mehr rekonstruieren. Irgendwie reagiert mein dash_dhcp gar nicht mehr. Auch eine Neuanlage der dash_dhcp-Konfiguration führte nicht zum Erfolg.
Internals:
CFGFN
CONNECTS 2
FD 216
LAST_CONNECT 2018-01-29 22:15:46
LAST_DISCONNECT 2018-01-29 22:15:46
NAME dash_buttons
NR 1109
NTFY_ORDER 50-dash_buttons
PORT 6767
STATE listening
TYPE dash_dhcp
READINGS:
2018-01-29 22:15:46 state listening
Attributes:
allowed xc:63:be:xc:01:x8
port 6767
Ich habe die Mac-Adresse auch vorsichtshalber mal groß geschrieben. Und es auch mit devAlias (dann mit Bindestrichen) versucht.
Hallo FunkOsyssey,
ich hatte das gleiche Problem.
Wichtig is zu wissen, dass ein DHCP Request als UDP geschickt wird, Docker aber standardmäßig Portumleitungen auf TCP anlegt.
Das läßt sich auch leicht verifizieren, wenn Du auf dem Docker Host mit deiner Einstellung netstat -atn
aufrufst.
Dort sollte irgendwo der Port 67 auftauchen. Wenn Du netstat -aun
aufrufst, dann taucht da aber kein Port 67 auf...
Wenn Dir das ganz zu hoch ist, hier mal der Auszug aus meiner docker-compose.yml:
fhem:
restart: always
expose:
- "8080"
- "8083"
- "7072"
- "67"
ports:
- 7072:7072
- 8083:8083
- 8080:8080
- 67:6767/udp
build: fhem
container_name: fhem
privileged: true
ach ja - es ist eine docker-compose.yml Version "2"...
Mit der Einstellung funktioniert es bei mir.
Viel Erfolg!
Ach, so etwas doofes. Das hat mich Tage an Nerven gekostet und ich habe das schlussendlich anders gemacht:
- Dash_dhcp in einem leeren FHEM-Container im Host-Modus
- Anbindung per FHEM2FHEM mit dem Produktiv-FHEM-Container
Also jede Menge unnötiger Ballast. Und das nur, weil ich nicht aufs Protokoll geachtet habe. Obwohl ich das sogar gesehen habe. Nur wüsste ich nicht, dass Docker nur TCP forwarded.
Danke dir. Läuft auf Anhieb. Auch ohne ,,privileged". Die ,,cap_add"-Zeilen habe ich sowieso aktiv.
Ich weiß, es ist schon ein paar Tage her, dass hier das Problem aufgetaucht ist.
Da ich grade selbst dabei bin, mein FHEM mit Docker (auf alpine-basis) neu aufzusetzen, bin ich lustiger weise selbst darüber gestolpert.
Ich werde dann wohl mal die Beschreibung updaten, so das man direkt sieht das es sich um UDP handelt :D
Sorry für das Hochziehen des alten Threads.
Ich versuche den Dash Button in meiner FHEM Docker Instanz zum Laufen zu bekommen. Ich kriege den UDP Port nicht hinzugefügt.
In meinem Container bekomme ich die Fehlermeldung "Lokaler Port 67,.... steht in Konflikt mit anderen Ports und anderen Diensten". Mit netstat finde ich keinen Dienst der diesen Port benutzt.
Ich hab auch einen Tipp gefunden, in dem stand, man solle hier nach Applikationen und Ports suchen: /usr/local/etc/services.d
Leider finde ich dort auch nichts.
Jemand vielleicht ne Idee?
Zitat von: FunkOdyssey am 25 Februar 2018, 20:21:53
Danke dir. Läuft auf Anhieb. Auch ohne ,,privileged". Die ,,cap_add"-Zeilen habe ich sowieso aktiv.
Das Leben kann so einfach sein. :) Vielen Dank.
Bei mir reicht die einfache Ergänzung:
ports:
- 67:6767/udp
Es sieht also so aus, dass weder ein cap_add noch ein privileged=true für die Funktion notwendig ist, also keine Sicherheitseinbuße.
Um kein neues Thema zu öffnen, frage ich hier mal nach:
Habe FHEM im Docker:
services:
####>---- FHEM ----<######################################################################################################
fhem:
container_name: FHEM
image: fhem/fhem:latest
hostname: fhem
privileged: true
restart: always
networks:
internal:
ipv4_address: 172.18.0.2
ports:
- 8083:8083
- 7072:7072
- 67:6767/udp
cap_add:
- NET_ADMIN
- NET_RAW
environment:
PIP_PKGS: "fhem beautifulsoup4"
volumes:
- /My/Path/2/FHEM:/opt/fhem
####>---- Network ----<######################################################################################################
networks:
internal:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
gateway: 172.18.0.1
ip_range: 172.18.0.1/24
Habe auf dem Host folgendes ausgeführt:
sudo iptables -I PREROUTING -t nat -i enp1s0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767
sudo apt-get install iptables-persistent
Mein FHEM Define:
defmod DHCP.Catcher dash_dhcp
attr DHCP.Catcher DbLogExclude .*
attr DHCP.Catcher allowed XX:XX:XX:XX:XX:XX
attr DHCP.Catcher port 6767
Device getestet auf eine RPi ohne Docker.
Warum machst Du per iptables eine NAT-Umleitung??
Weil ich das damals irgendwo nach einer Anleitung gemacht hatte.
Kann es sein, das DU alle Befehle irgendwie "nur nach Anleitung" gemacht hast? Die apt-get Installationen machen erstmal keinen Sinn ...
Ich habe das nach der Anleitung gemacht, das ist aber auch schon ewig her.
Habe es nur aus meinen Notizen genommen und für das neue System auch so gemacht.
https://haus-automatisierung.com/hardware/fhem/2017/12/11/fhem-tutorial-reihe-part-49-dash-button.html
@Werner
Jetzt verstehe ich, was du meinst.
Doch der Befehl speichert die aktuellen Netzwerksettings feste ein.
Sonst müsste man das nach einem Neustart neu setzen.
So bin ich damals auf das Tutorial gestoßen.
tcpdump brauchst Du aber dafür nicht ....
Und leider OT .. von dem Tutorial halte ich nichts. Mangels Hardware kann ich Dir nur nicht weiterhelfen ...
Na ja, ich nutze keine Dash-Buttons.
Man kann hier auf jedes Gerät was sich am DHCP-Server anmeldet reagieren.
z.B. wenn das Smartphone sich anmeldet, ein TV-Stick, oder was auch immer.
Und ob das Tutorial gut ist oder nicht, es hat auf dem RPi bisher funktioniert.
Aber wie auch immer...
Man kann hier auf jedes Gerät was sich am DHCP-Server anmeldet reagieren.
Da würde ich Dir besser einen richtigen DHCP-Server mit Scripting funktionen empfehlen ....
Zitat von: Wernieman am 14 Januar 2023, 21:08:33
Man kann hier auf jedes Gerät was sich am DHCP-Server anmeldet reagieren.
Da würde ich Dir besser einen richtigen DHCP-Server mit Scripting funktionen empfehlen ....
Brauche ich das wirklich?
Das steht in keinster Weise in Relation für mein Vorhaben.
Ich lausche nach
drei Geräten, um mein WiFi 5 GHz zu steuern und das HomeComing zu realisieren.
Danke für Deinen Vorschlag, aber es ist wie gesagt zu viel für mein Vorhaben.