Shelly CoIoT + UDP Proxy mit NGINX

2022-10-08 - christian - docker, home assistant, linux, network, nginx, shelly

Mein Smarthome besteht Docker Containers mit einem NGINX als Frontend, welche die einzelnen Dienste von außen erreichbar macht.

Die neuste Errungenschaft ist ein Shelly 1PM, ein smartes WLAN Relais, welches auch den Stromverbrauch messen kann.

Die Kommunikation zwischen Home Assistant und Shelly findet dabei via CoIoT statt statt, einem bidirektionalem UDP Protokoll.

Home Assistant stellt diese Schnittstelle unter dem Port 5683/udp bereit.

Damit die Status Nachrichten von Shelly richtig erkannt werden, muss im NGINX die Direktive proxy_bind gesetzt werden, welche es erlaubt die Quell IP Adresse der UDP Pakete zu überschreiben.

So denkt Home Assistant, dass die Pakete vom Shelly kommen, und nicht im NGINX.

stream {
    resolver 127.0.0.11;
    server {
        listen 5683 udp;
        # override source IP
        proxy_bind $remote_addr transparent;
        set $proxy_destination "homeassistant:5683";
        proxy_pass $proxy_destination;
    }
}

Bei UDP Verbindungen ist so etwas super einfach, bei TCP Paketen hingehen nicht zu empfehlen. Da kann es so weit kommen, dass man an Routing Tabellen rumschrauben muss.

War in diesem Fall zum Glück nicht notwendig. 🙂


More


serverless.industries BG by Carl Lender (CC BY 2.0)
cc16b321 2022-11-19 19:41
Mastodon via chaos.social Mastodon via einbeck.social