Closed tafadafi closed 6 years ago
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
Hey Sebastian,
einfachste Ausgangssituation:
Dann geht es recht schnell - nach deploy stürzt Node-Red ab.
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 ;-)
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: https://github.com/originallyus/node-red-contrib-alexa-local/issues/54
Loglevel setzen ist hier beschrieben: https://github.com/hobbyquaker/RedMatic/wiki/Loglevel
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...)
Hmmmm - werd ich dann nochmal versuchen. Auf meinem anderem Pi läuft das über MQTT jedoch problemlos.
Und die letzten Zeilen des Logs
# 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
Hast Du in diesem dashboard switch node If msg arrives on input, pass through to output:
deaktiviert?
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
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.
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.
sooo - jetzt definitiv ausgeschaltet
aber leider leider tritt das Problem wieder auf
Generell hab ich dein Addon neu installiert und lediglich das Alexa Addon dazu installiert. Alles andere ist jungfräulich ...
Aber aber ... das tolle Alexa local addon emuliert eine hue bridge. Evtl. ist das tatsächlich das Problem.
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.
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...
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
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
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?
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.
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
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.
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
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.
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