Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Node-Red-Contribute-Alexa-local - Port 1900/UDP schon von ssdpd belegt #15

Closed
tafadafi opened this issue Jun 11, 2018 · 22 comments
Closed

Comments

@tafadafi
Copy link

Hallo Sebastian,
habe versucht in Node-Red noch das Alexa Addon zu integrieren (Node-Red-Contribute-Alexa-local). Installation klappt - aber sobald der Node eingebunden wird - stürzt das gesamte System ab. Auch eine deinstallation ist dann nicht mehr möglich. Nur rm der einzelnen ordner / dateien.
Viele Grüße

@hobbyquaker
Copy link
Member

Hab eben versucht das zu reproduzieren, ist mir "leider" ;-) nicht gelungen. Konnte es installieren, den Node in einen Flow ziehen und deployen ohne Absturz. Mangels Echo kann ich es aber nicht testen. Wann genau ist es bei Dir abgestürzt? Bereits beim ersten Deploy nachdem Du den Node in ein Flow gezogen hast?
Wenn Du Zeit/Lust hast wäre es hilfreich wenn Du den Log-Level mal auf Debug stellst und es noch mal versuchst und dann den Logauszug hier postest

@tafadafi
Copy link
Author

tafadafi commented Jun 11, 2018

Hey Sebastian,
einfachste Ausgangssituation:
image

Dann geht es recht schnell - nach deploy stürzt Node-Red ab.
image

hier noch die letzten Zeilen

Jun 11 21:34:38 homematic-ccu2 user.info node-red: [debug] [ccu-connection:localhost] subscribe {"iface":"BidCos-RF","cache":true,"change":true,"channel":"NEQ1731421:1","datapoint":"STATE"}
Jun 11 21:34:38 homematic-ccu2 user.info node-red: [info] Started flows
Jun 11 21:34:38 homematic-ccu2 user.info node-red: 11 Jun 21:34:38 - [red] Uncaught Exception:
Jun 11 21:34:38 homematic-ccu2 user.info node-red: 11 Jun 21:34:38 - Error: bind EADDRINUSE 0.0.0.0:1900
Jun 11 21:34:38 homematic-ccu2 user.info node-red:     at Object._errnoException (util.js:992:11)
Jun 11 21:34:38 homematic-ccu2 user.info node-red:     at _exceptionWithHostPort (util.js:1014:20)
Jun 11 21:34:38 homematic-ccu2 user.info node-red:     at _handle.lookup (dgram.js:266:18)
Jun 11 21:34:38 homematic-ccu2 user.info node-red:     at _combinedTickCallback (internal/process/next_tick.js:141:11)
Jun 11 21:34:38 homematic-ccu2 user.info node-red:     at process._tickCallback (internal/process/next_tick.js:180:9)

log-level hab ich umgestellt aber wie ich dran komm - musst du mir noch sagen ;-)

@hobbyquaker
Copy link
Member

Ah, ich glaub das ist eine Endlosschleife die da entsteht, das lähmt vermutlich nicht nur Node-RED sondern führt auch zu einem "Funk-Feuerwerk" weil das Homematic Gerät ständig Befehle erhält.

Mögliche Lösungansätze siehe: originallyus/node-red-contrib-alexa-local#54

Loglevel setzen ist hier beschrieben: https://github.com/hobbyquaker/RedMatic/wiki/Loglevel

@hobbyquaker
Copy link
Member

hobbyquaker commented Jun 11, 2018

Oh. Ich hab das glaube ich falsch verstanden. Du hast den Alexa Node noch gar nicht "verdrahtet" und es stürzt schon ab? Könntest Du mal auf Deinem Raspberrymatic netstat -tulpen ausführen und den Output hier posten? Die Fehlermeldung dass Port 1900 schon belegt ist könnte darauf hindeuten dass da schon/noch eine Node-RED Instanz läuft und versucht wird eine weitere zu starten (was natürlich nicht passieren sollte und ein Bug wäre...)

@tafadafi
Copy link
Author

Hmmmm - werd ich dann nochmal versuchen. Auf meinem anderem Pi läuft das über MQTT jedoch problemlos.

image

Und die letzten Zeilen des Logs

image

@tafadafi
Copy link
Author

tafadafi commented Jun 11, 2018

# netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:1999            0.0.0.0:*               LISTEN      727/ReGaHss
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      468/lighttpd
tcp        0      0 0.0.0.0:2001            0.0.0.0:*               LISTEN      615/rfd
tcp        0      0 0.0.0.0:8181            0.0.0.0:*               LISTEN      468/lighttpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      481/sshd
tcp        0      0 0.0.0.0:8183            0.0.0.0:*               LISTEN      727/ReGaHss
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      468/lighttpd
tcp        0      0 0.0.0.0:8700            0.0.0.0:*               LISTEN      529/cuxd
tcp        0      0 0.0.0.0:8701            0.0.0.0:*               LISTEN      529/cuxd
tcp        0      0 127.0.0.1:705           0.0.0.0:*               LISTEN      568/snmpd
tcp        0      0 :::9292                 :::*                    LISTEN      631/java
tcp        0      0 :::80                   :::*                    LISTEN      468/lighttpd
tcp        0      0 :::8181                 :::*                    LISTEN      468/lighttpd
tcp        0      0 :::22                   :::*                    LISTEN      481/sshd
tcp        0      0 :::2010                 :::*                    LISTEN      631/java
tcp        0      0 :::443                  :::*                    LISTEN      468/lighttpd
udp        0      0 0.0.0.0:1900            0.0.0.0:*                           473/ssdpd
udp        0      0 0.0.0.0:43439           0.0.0.0:*                           460/eq3configd
udp        0      0 0.0.0.0:50109           0.0.0.0:*                           568/snmpd
udp        0      0 0.0.0.0:56270           0.0.0.0:*                           615/rfd
udp        0      0 127.0.0.1:8182          0.0.0.0:*                           179/hss_led
udp        0      0 192.168.160.63:123      0.0.0.0:*                           437/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           437/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           437/ntpd
udp        0      0 0.0.0.0:161             0.0.0.0:*                           568/snmpd
udp        0      0 fe80::ba27:ebff:fe1d:472b:123 :::*                                437/ntpd
udp        0      0 ::1:123                 :::*                                437/ntpd
udp        0      0 :::123                  :::*                                437/ntpd
udp        0      0 ::1:161                 :::*                                568/snmpd
udp        0      0 :::50436                :::*                                631/java

@hobbyquaker
Copy link
Member

Hast Du in diesem dashboard switch node If msg arrives on input, pass through to output: deaktiviert?
bildschirmfoto 2018-06-11 um 21 53 00

@hobbyquaker
Copy link
Member

Ah ok, ich glaube wir kommen der Sache näher. Der Port 1900 ist bei Dir bereits vom "ssdpd" belegt und der Alexa Node will den auch haben. Dass der Fehler nicht abgefangen wird ist etwas unschön, könnte man evtl mal ein Issue zu aufmachen, das sollte Node-RED nicht crashen lassen, besser wäre ein Error Eintrag im Log... ;)
Was mich wundert ist dass auf meinem Test-Raspberrymatic kein ssdpd läuft, ich recherchier mal ein wenig

@hobbyquaker
Copy link
Member

hobbyquaker commented Jun 11, 2018

Erste Vermutung, ohne es wirklich zu wissen: Kann es sein dass RaspberryMatic den ssdpd startet wenn man die Osram/Hue Integration benutzt? Ist das bei Dir der Fall? Ich befürchte dass es da keinen gangbaren Workaround gibt, den Port Ändern kommt glaube/vermute ich nicht in Frage - und wenn er belegt ist kann ihn der Alexa node nicht nutzen...

Was Du mal testen könntest: den ssdpd beenden (/etc/init.d/S50ssdpd stop) und dann Node-RED wieder starten (/etc/config/rc.d/redmatic start). Vermutlich läuft es dann. Ich kann Dir im Moment allerdings nicht sagen wozu der ssdpd eigtl verwendet wird, vermutlich damit irgendwelche Geräte RaspberryMatic im Netzwerk discovern können. Auf der "originalen" CCU2 Firmware ist der gar nicht vorhanden, insofern geh ich von aus dass Du ihn "gefahrlos" beenden kannst.

@tafadafi
Copy link
Author

nee - hab keine osram/hue am laufen. Schalte mit Alexa nur Licht + Sonoff Pows. Aber ich bin gerade etwas verunsichert, was deinen Kommentar If msg arrives on input, pass through to output betrifft. In meinem "Standard" Flow ist das deaktiviert, aber auf dem Raspberrymatic?!! werde das nochmal testen.

@tafadafi
Copy link
Author

sooo - jetzt definitiv ausgeschaltet
image

aber leider leider tritt das Problem wieder auf

image

Generell hab ich dein Addon neu installiert und lediglich das Alexa Addon dazu installiert. Alles andere ist jungfräulich ...

@tafadafi
Copy link
Author

Aber aber ... das tolle Alexa local addon emuliert eine hue bridge. Evtl. ist das tatsächlich das Problem.

@hobbyquaker
Copy link
Member

hobbyquaker commented Jun 11, 2018

Hab grad mal noch weiter geforscht zum thema ssdpd (siehe editiertes kommentar oben).
Der ist auch in der original CCU Firmware vorhanden, hat allerdings kein eigenes Start Script sondern wird in S50eqconfigd mit gestartet. Belegt allerdings auch nicht den Port 1900. Ich hab auf meinem Testsystem gar nicht die neuste RaspberryMatic drauf, vermutlich liegt es daran dass es bei mir geht und bei Dir nicht. Ich denke aber immer noch der Versuch das Ding einfach mal zu beenden könnte erst mal zum Erfolg führen. Müsste man dann noch klären wozu der eigtl da ist, ich werde bei Gelegenheit mal Jens fragen.

@hobbyquaker
Copy link
Member

hobbyquaker commented Jun 11, 2018

Hab mal noch ein bisschen recherchiert und Jens und Anli gefragt, ich glaube der ssdpd ist quasi-nutzlos. Dient nur dazu dass die CCU in Windows angezeigt wird. Sollte also imho verzichtbar sein. Hartnäckiger weg wäre einfach die /etc/init.d/S50ssdpd zu löschen, dann wird er beim CCU boot nicht mehr gestartet (vorher muss Dateisystem rw gemountet werden). Dann "sollte" auch Dein Alexa Node laufen. Allerdings müsstest diese Löschung nach jedem RaspberryMatic update wiederholen. Nicht schön... Denkbare alternative wäre ein weiteres Script anzulegen was das Ding einfach beendet bevor Node-RED startet...

Ein Hinweis noch von Jens: wenn man den ssdpd deaktiviert wird ein evtl installiertes Watchdog-Addon ihn wieder neu starten - man könnte daher das Watchdog Addon nicht mehr nutzen. Außerdem könnte es sein dass Mediola UPNP nutzt um die CCU zu discovern, das würde dann auch nicht mehr funktionieren...

@hobbyquaker hobbyquaker changed the title Node-Red-Contribute-Alexa-local Node-Red-Contribute-Alexa-local - Port 1900/UDP schon von ssdpd belegt Jun 12, 2018
@hobbyquaker hobbyquaker removed the 🐛bug Something isn't working label Jun 12, 2018
@tafadafi
Copy link
Author

Morgen Sebastian,
hat funktioniert. Vielen Dank für Deine Unterstützung.
Evtl noch für die Nachwelt ....

mount -o remount,rw
rm /etc/init.d/S50ssd
Neustart Raspberrymatic

Und alles tut ... DANKE

@hobbyquaker
Copy link
Member

Hab nochma nachgedacht, ein einfacher Weg das zu lösen so dass es auch RaspberryMatic updates übersteht:

Datei /etc/config/rc.d/killssdpd anlegen (name eigentlich egal, aber er muss in alphabetischer Sortierung vor "redmatic" stehen):

#!/bin/sh
/etc/init.d/S50ssdpd stop

Und dann noch die Datei ausführbar machen: chmod a+x /etc/config/rc.d/killssdpd

@TheRealTremes
Copy link

Funktioniert das noch? Denn wenn ich den Befehl "/etc/init.d/S50ssdpd stop" manuell eingebe, dann bekomme ich diese Meldung:

-sh: /etc/init.d/S50ssdpd: Permission denied

Um welche Datei handelt es sich eigentlich genau? Ich lese irgendwie immer von 2 Dateien mal wird diese "S50eq3configd" angesprochen und mal diese "S50ssdpd". Welche ist nun zuständig für UPnP auf der CCU?

@hobbyquaker
Copy link
Member

auf Raspberrymatic wird der ssdpd von /etc/init.d/S50ssdpd gestartet, dass Du da ein Permission denied bekommst ist seltsam. Läuft der Dienst überhaupt? Was gibt denn ein ps | grep ssdpd zurück?
Auf der CCU2 existiert /etc/init.d/S50ssdpd nicht, dort wird der ssdpd von /etc/init.d/S50eq3configcmd gestartet.

@TheRealTremes
Copy link

TheRealTremes commented Jun 23, 2018

Hallo, ps | grep ssdpd gibt aus 918 root 0:00 grep ssdpd

Ich habe halt auch nach dieser Datei /etc/init.d/S50eq3configd gefragt, weil ein User aus dem Homematic-Forum meint, man müsse diese Datei bearbeiten damit UPnP nicht mehr läuft.

Siehe Beitrag:
https://homematic-forum.de/forum/viewtopic.php?f=44&t=33848&start=2400#p411514

@hobbyquaker
Copy link
Member

Da scheint irgendwas bei Dir nicht so zu laufen wie es sollte, der ssdpd läuft jedenfalls garnicht - insofern musst ihn auch nicht deaktivieren ;-)
Ansonsten könntest Du den weg mit dem "killssdpd" Script gehen dass ich ein paar Posts weiter oben beschrieben habe.

@TheRealTremes
Copy link

TheRealTremes commented Jun 23, 2018

Sehr komisch.

Beide Dateien sind bei mir auf der RaspberryMatic zu finden.

Ich muss den UPnP Dienst halt deaktivieren, weil sonst die Roku-Fake-Devices von HVL bei mir nicht laufen. Aber Du sagst, er läuft bei mir garnicht, aber die Rokus funktionieren nicht :-(

Selbst wenn ich /etc/init.d/S50ssdpd start eingebe kommt diese Meldung
-sh: /etc/init.d/S50ssdpd: Permission denied

@jens-maus
Copy link

Hier nur kurz der Hinweis, dass ich mir den ssdpd daemon noch einmal auf Grund eines dankenswerten Hinweises von Alexander Reinert einmal näher angeschaut habe und die socket Initialisierung so anpassen konnte das nun SO_REUSEPORT/SO_REUSEADDR dazu verwendet wird das nun prinzipiell neben ssdpd noch andere Applikationen/UPnP-Announcer sich auf Port 1900/UDP setzen können (siehe https://homematic-forum.de/forum/viewtopic.php?f=65&t=41452&start=10#p441092).

Es sei allerdings dazu gesagt, dass die anderen/weiteren UPnP-Announcer dann auch ihre sockets mittels SO_REUSEPORT/SO_REUSEADDR öffnen müssen und ob dies bei den besagten Diensten dann der Fall ist muss jeder selbst herausfinden bzw. deren Entwickler fragen.

Für die nächste RaspberryMatic Version wird der angepasste ssdpd daemon bereits integriert sein.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

4 participants