NEWS
UNSOLVED Shelly Adapter startet nicht mit COAP und IP-Aliasen
-
Systemdata Bitte Ausfüllen Hardwaresystem: Docker buanet/iobroker:latest, hostmode Node-Version: v10.19.0 NPM-Version: 6.13.4 Shelly Adapter: 3.1.6 Betriebssystem: Debian 10 Hallo,
der Shelly-Adapter startet nicht in der COAP-Version, wenn auf einem Interface mindestens ein IP-Alias gesetzt ist. Per Default wird versucht auf allen IP-Interfacen ein Multicast-Listener aufzumachen. Ist ein IP-Alias gesetzt, wird versucht ein zusätzlicher Listener aufzumachen. Allerdings ist auf dem physikalischen Interface bereits ein Listener offen, was zu einer Exception führt und der Adapter nicht startet.
lo: 127.0.0.1 => OK eth0: 10.0.0.1 => OK eth0.1: 10.0.0.2 => Exception EADDRINUSE
Konsolen-Ausgabe manueller start:
2020-03-15 22:45:38.031 - info: shelly.0 (1428) starting. Version 3.1.6 in /opt/iobroker/node_modules/iobroker.shelly, node: v10.19.0 2020-03-15 22:45:38.083 - info: shelly.0 (1428) Starting Shelly adapter in CoAP modus. Exception: Error: addMembership EADDRINUSE/Error: addMembership EADDRINUSE addMembership EADDRINUSE Error: addMembership EADDRINUSE at Socket.addMembership (dgram.js:581:11) at /opt/iobroker/node_modules/coap/lib/server.js:234:26 at Array.forEach (<anonymous>) at Socket.<anonymous> (/opt/iobroker/node_modules/coap/lib/server.js:233:44) at Object.onceWrapper (events.js:286:20) at Socket.emit (events.js:198:13) at startListening (dgram.js:128:10) at state.handle.lookup (dgram.js:249:7) at process._tickCallback (internal/process/next_tick.js:63:19) 2020-03-15 22:45:38.110 - error: shelly.0 (1428) Exception: Error: addMembership EADDRINUSE 2
Dazu habe ich folgendes im Source-Code gefunden:
In Datei "node_modules/coap/lib/server.js", Zeile 80 ist bereits vorgesehen, anstatt auf allen Interface einen Multicast-Listener aufzumachen, dies nur auf einem Interface zu tun. Hierzu müsste der Funktion CoAPServer zusätzlich ein Wert für options.multicastInterface übergeben werden.
Soweit ich sehen kann erfolgt der Aufruf dieser Funktion in "node_modules/shelly-iot/index.js", Zeile 170:
this.coapServer = coap.createServer({ multicastAddress: '224.0.1.187' });
Hier gibt es momentan keine Möglichleit, eine Variable mit zu setzen oder zu übergeben. Könnte das nicht als Option in die COAP-Einstellungen des Adapters mit aufgenommen werden?
Oder habe ich etwas übersehen?
Grüße,
Magnus