NEWS
node-exec PID übergeben
-
Moin,
ich würde mir gerne ein Script schreiben, welches meinen Kamerastream überwacht, killt und wieder neu startet.
Ich habe ein exec mit pidof als Befehl, um die PID des streamers herauszubekommen. Aber wie kann ich jetzt einem 3. exec diese PID übergeben, so dass dieser seine Befehle auch an diesen Task schickt?
hab da zwar einen Flow gefunden, aber diesen verstehe ich absolut nicht.
[{"id":"d6c16e01.a6f6a8","type":"inject","z":"20693e98.c7fb2a","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":80,"wires":[["183c2cfc.9db16b"]]},{"id":"183c2cfc.9db16b","type":"exec","z":"20693e98.c7fb2a","command":"","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":450,"y":80,"wires":[[],[],[]]},{"id":"235a9087.df7c","type":"inject","z":"20693e98.c7fb2a","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":140,"wires":[["20d208f2.12a6b"]]},{"id":"20d208f2.12a6b","type":"change","z":"20693e98.c7fb2a","name":"set to pid","rules":[{"t":"set","p":"payload","pt":"msg","to":"pid","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":140,"wires":[["790a721f.565ee4"]]},{"id":"790a721f.565ee4","type":"exec","z":"20693e98.c7fb2a","command":"kill ","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":490,"y":140,"wires":[[],[],[]]},{"id":"c12b76ce.692f38","type":"status","z":"20693e98.c7fb2a","name":"","scope":["183c2cfc.9db16b"],"x":160,"y":200,"wires":[["2cc3e208.46e966"]]},{"id":"2cc3e208.46e966","type":"function","z":"20693e98.c7fb2a","name":"get pid","func":"if(msg.status.text){\n let pid = msg.status.text.split(':');\n msg.payload = pid[1];\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"x":320,"y":200,"wires":[["8a7f851b.b5f7a"]]},{"id":"8a7f851b.b5f7a","type":"change","z":"20693e98.c7fb2a","name":"","rules":[{"t":"set","p":"pid","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":200,"wires":[[]]}]
Danke euch im Vorraus.
-
@renegade-0 Also ich habe mir den Flow angeschaut - kann das aber bei mir im Moment nicht nachvollziehen.
Der Flow ermittelt aus meiner Sicht die PID, speichert diese in einer Flowvariablen und killt dann den Prozess wieder, den er vorher identifiziert hat. Im Prinzip brauchst Du das ja alles nicht, weil Du das ja schon rausbekommen hast.
Das Prinzip ist aber an sich in Ordnung- wenn Du den Output aus der exec Node nicht direkt verwenden kannst, dann die pid in einer Flow Variablen zwischenspeichern. Wenn man Dir aber dabei helfen soll, dann zeig Deinen Flow und was dann als Output rauskommt, aus der Du die PID ermitteln willst.
Wenn Du den Flow testen willst musst Du halt ein Kommando in die 1. Exec Node eingeben (Ausführen) und dann solltest Du im Flowkontext die PID sehen. Aber das brauchst Du alles nicht, da Du ja pidof die PID bereits ermitteln kannst. Du musst also das Ergebnis nur abspeichern, um es dann in einem kill oder was weiss ich für ein Kommando übergibt.
-
@renegade-0 sagte in node-exec PID übergeben:
hab da zwar einen Flow gefunden, aber diesen verstehe ich absolut nicht.
Um Dir zu verdeutlichen was der Flow macht:
Ich habe der Einfachheit halber mal in dem 1. Exec das Kommando
ls -la
abgesetzt.
Im Status 1 - wird die Ausführen Node überwacht und gibt Dir folgenden Output - deshalb eine Debug Node dahinter.
Das Ausführen des Kommandos in der Exec Node erzeugt aus der Status Node , die diesen überwacht folgenden Output:
Im status objekt gibt es die Eigenschaft text - die, die PID enthält die dann in der Flow Variablen gespeichert wird.
Diese kann dann für das kill Kommando entsprechend genutzt werden, in dem man den Inhalt der Flow Variablen wieder in die payload kopiert und diesem mitgibt. Ich hoffe der Flow ist so für Dich verständlich geworden.
Statt einer function Node - kann man auch eine Change Node verwenden und nur die Nachrichten durchlassen, die auch eine Texteigenschaft enthalten:
Also das geht auch:
Switch Node überprüft, dass nur Nachrichten mit text Eigenschaft im Status durchkommen:
und die Change Node extrahiert dann die PID und speichert sie in der Flow Variablen:
Wenn man es ganz sauber machen möchte, prüft man noch ab ob es wirklich die pid ist:
-
Danke dir.
Also wenn ich das recht verstehe, muss ich meinen erhaltenen String von pidof ("1234") konvertieren und mit ("pid:1234") im msg an die 2. exec übergeben, damit diese es dann als variable pid erkennt?Oder muss ich den String dann noch in ein objekt konvertieren?
-
@renegade-0 sagte in node-exec PID übergeben:
Danke dir.
Also wenn ich das recht verstehe, muss ich meinen erhaltenen String von pidof ("1234") konvertieren und mit ("pid:1234") im msg an die 2. exec übergeben, damit diese es dann als variable pid erkennt?Oder muss ich den String dann noch in ein objekt konvertieren?
Nein - das habe ich doch alles nur erklärt, damit Du den Flow verstehst.
In Deinem Fall bekommst Du den String doch schon fertig geliefert. Den Flow, den Du gepostet hast, der ist nur dann sinnvoll, wenn Du die pid eines von einer exec-Node gestarteten Befehls ermitteln willst. Aber das brauchst Du ja alles nicht, da ich mal davon ausgehe, dass Dein pidof-Befehl ja mittels eines Namens die pid ja ermittelt.Du brauchst also nur den String den Du von pidof hast in einer Flow Variablen speichern (wie Du das machst ist ja in einer Change Node beschrieben) und Dir dann daraus den Befehl für Deine 2. Exec bauen. Wie Du den baust, kann ich Dir gerne helfen, aber dann musst halt genau schreiben, wie dort die pid eingebaut wird.
Am Besten Du nimmst dann aus dem 3. Ausgang der exec Node den Return Code 0 - in der Regel, der rc der einen erfolgreiche Befehlsausführung als trigger zum Absetzen Deines 2. Befehls. Das ist aber schon die Luxusvariante.Eigentlich brauchst Du im einfachsten Fall auch gar keine flow Variable sondern nutzt halt dann egal ob der Befehl erfolgreich war direkt die Ausgabe Deines pidof:
Du kannst auch sofort loslegen - dann brauchst gar nicht warten usw.:Also einfacher gehts nun wirklich nicht.
Die 1. Variante in einfacher Form mit der Speicherung der Flow Variablen musst Du halt auch dann anwenden, falls Du den 2. Befehl nach Ermittlung von pidof erst zeitlich zu einem viel späteren Zeitpunkt absetzen willst.
Ich hab das zum Beispiel für die Prozess-ID von node-red beim mir im System als Beispiel gemacht - also node-red als Text für pidof eingegeben. Den output da musst Du dann zum Beispiel erst mal den Zeilenvorschub eliminieren usw.
Hier mal bissi zum Spielen
In die 1. Inject Node gibst einfach den Namen ein, dessen pid Du ermitteln willst.
Ich sehe gerade in der Einleitung - dass Du doch die Variante mit der Flowvariablen wahrscheinlich brauchen wirst. Wenn Dir das nicht klar ist, dann musst halt mal Deinen gesamten Flow hier posten und konkret sagen, wann Du wie diesen 3. Exec mit der pid triggern willst.
Hier mal als Beispiel - erst pid ermitteln und in Flow Variablen zwischenspreichern. Irgendwann einfach 2. Exec triggern, der die pid aus der 1. Exec Node verwendet.
-
Ah OK, jetzt hab ich das soweit verstanden. Nur leider ist es nicht ganz das, was ich gesucht habe.
Ich will die laufende Instanz(pid) eines Programms herausfinden und in diese einen Befehl einbringen. Im konkreten Fall baresip. Da läuft meine Instanz und wenn ein call kommt, muss ich in der shell mit "a" annehmen oder mit "b" den call beenden. Aber anscheinend geht das nicht mit der exec. Muss wohl nach einer anderen Methode suchen.
-
@renegade-0 sagte in node-exec PID übergeben:
baresip
Das Problem ist, dass ich das so nicht beurteilen kann. Wenn es auf der Kommandozeile geht, dann sollte es auch mit exec gehen. Wenn nicht, dann gehts wahrscheinlich nicht.
Es bringt aber dann auch nichts, wenn Du hier immer nur Bruchstücke von Dir gibst. Wenn das Programm aber läuft und Du in dem Programm nur a oder b eingibst - bist Du ja nicht mehr in der Shell. Dann nützt Dir auch eine pid nichts. Wenn Du aber in einer Shell Befehle absetzen kannst, dann geht es sehr wohl.
Zum Einen ist da mal das Management:
Management:
Embedded web-server with HTTP interface
Command-line console over UDP/TCP
Command line interface (CLI)
Simple configuration files
MQTT (Message Queue Telemetry Transport) moduleIch geh mal davon aus, dass Du mit diesem Teil nur über eine SIP Session eine Kommunikation aufbauen kannst.
Dazu musst Du Dich aber in das SIP Protokoll einarbeiten und das kannst dann mit TCP Paketen machen - da musst Dich aber einarbeiten: https://www.elektronik-kompendium.de/sites/net/1305281.htm
Ansonsten gib mal NodeRed und SIP ein - da findest Du noch andere Möglichkeiten vielleicht als Alternative zu dem Baresip.
@renegade-0 sagte in node-exec PID übergeben:
Ah OK, jetzt hab ich das soweit verstanden. Nur leider ist es nicht ganz das, was ich gesucht habe.
Ich will die laufende Instanz(pid) eines Programms herausfinden und in diese einen Befehl einbringen.
Das ist das geringste Problem - das ist nur eine String - Manipulation. Aber dann musst Du halt sagen, welche Befehle Du in einer Shell im Moment in welcher Abfolge Du lostrittst und eben nicht diese Bruchstücke. Die PID in einen neuen Befehl einzubetten, das denke ich habe ich Dir gezeigt.
. -
es ist so. der client läuft aktuell auf dem Raspi. Ich starte ihn derzeit manuell in einer Konsole. Dann läuft in dem Fenster der baresip. Wenn jetzt ein call ankommt, muss ich in diesem Fenster "a" drücken und er nimmt ihn an. Mit "b" legt er eben auf.
WEnn ich baresip nun als CTL starte, habe ich ja kein Fenster, sondern muss dem Programm den Befehl ja anders übergeben. Mein Gedanke war eben, ähnlich wie bei screen, über die PID das Programm anzusprechen.aktuell starte ich über $baresip -v und dann wartet das Programm auf eingabe. Wenn ich nun "C" drücke, geht ein call raus,...
ESC Hangup call /about About box /accept a Accept incoming call /auloop .. Start audio-loop /auloop_stop Stop audio-loop /auplay .. Switch audio player /ausrc .. Switch audio source /callstat c Call status /conf_reload Reload config file /config Print configuration /contact_next > Set next contact /contact_prev < Set previous contact /contacts C List contacts /dial .. d .. Dial /dialcontact D Dial current contact /hangup b Hangup call /help h Help menu /insmod .. Load module /listcalls l List active calls /main Main loop debug /memstat y Memory status /message .. M .. Message current contact /modules Module debug /netstat n Network debug /options .. o .. Options /play .. Play audio file /quit q Quit /reginfo r Registration info /rmmod .. Unload module /sipstat i SIP debug /sysinfo s System info /timers Timer debug /uafind .. Find User-Agent /uanew .. Create User-Agent /uanext T Toggle UAs /uastat u UA debug /vidsrc .. Switch video source
es funktioniert ja auch soweit. Nur eben soll der Task als Systemctl laufen und über das Dashboard annehmen oder auflegen können.
-
@renegade-0 Du wirst Dir nie von aussen eine Schnittstelle über die PID erzwingen können.
Du kannst mE nur über das SIP Protokoll mit dem Teil von außen kommunizieren bzw über eine der anderen angebotenen Schnittstellen. Das Ding soll ja auch einen eingebauten Webserver mitbringen oder eine Command-line console über UDP/TCP - jedenfalls die CLI ist in diesem Fall nicht geeignet.
In diesem Beispielkonfigurationsfile gibt es zum Beispiel folgende Zugänge:
# UI Modules parameters cons_listen 0.0.0.0:5555 # cons - Console UI UDP/TCP sockets http_listen 0.0.0.0:8000 # httpd - HTTP Server ctrl_tcp_listen 0.0.0.0:4444 # ctrl_tcp - TCP interface JSON evdev_device /dev/input/event0
Das heißt wenn Du das Ding ohne Parameter aufrufst könntest Du mal schauen, ob Du über einen Browser auf Port 8000 Zugriff hast.
-
OK, danke, dann neuer Ansatz.
Tja, das kommt raus, wenn ein Neuling sich Gedanken macht.
Ja hab das httpd.so aktiviert und kann ihn auch über den Browser steuern. Was ist denn das cons_listen?Was wäre denn die beste alternative, zum ansteuern über node Red? MQTT, tcp, http oder dieses cons_listen?
-
@renegade-0
Node Red ist Deine Logikmaschine und diese steuert alles. NodeRed kann Kommandos an einen WEB-Server via http zu senden, sendet Dir an mqtt Broker oder kann auch über TCP Kommandos wegschicken. Ich habe nur noch nichts gefunden, wie die Syntax ist.Wenn Du sagst - Du kannst über den Browser steuern - weißt Du welche Kommandos DU über den Browser schicken kannst, dann kannst Du das zum Bespiel über Node Red auch http Befehle losschicken.
Über ctrl_tcp_listen kann man ggf. JSON Strings schicken - aber ich habe keine Ahnung wie die aufgebaut sein müssen.
-
Also im gesamten schaut das Projekt so aus:
Raspi1 (Rpi4 8gb) Ist mein Smarthome Server, auf dem läuft ioBroker (mit vis, node-Red,...). Dazu mjpg-streamer und baresip.
Raspi2. Der soll an die Türe und als Videosprechanlage fungieren. Auf diesem läuft baresip, mjpg-streamer und node-Red.
Dieses Gerät bekommt bei einer Klingelauslösung über den DoorIO-Adapter die Anweisung einen Anruf zu starten. Das funktioniert auch soweit.
node-Red läuft hier, um baresip und mjpg-streamer zu überwachen, und gegebenenfalls neuzustarten. Zudem kommt noch ein Arduino, welcher einige Kontakte
aufnimmt und diese sollen über node-Red weiterverteilt/bearbeitet werden.Die Frage ist, wie ich aus der visualisierung heraus am besten das annehmen, auflegen realisiere.
Bei mqtt müsste ich noch einen Broker installieren oder?
Http würde direkt gehen, aber GET ist einfach nicht die beste Methode.
TCP läuft hier über JSON. Die Syntax dafür habe ich aus der Doku.Was würdest du denn mit deiner Erfahrung empfehlen, was Ressourcen, Geschwindigkeit und Stabilität angeht?
-
@renegade-0 Nun ich habe gerade gesehen, dass Du ja noch in einem anderen Thread aktiv bist mit dem DoorIO Adapter.
Die direkte TCP Session - da habe ich wenig Erfahrung - aber das wäre aus meiner Sicht kein Hexenwerk, wenn man nur die JSON Strings losschicken müsste.
Ich habe mit HTTP keine so schlechten Erfahrungen gemacht, aber ich würde generell die mqtt Lösung präferieren. Das erspart Dir nicht nur einige Adapter sondern ist Industriestandard. Ich nutze das für Tasmota, Shellies und owntracks und brauche dafür nicht jedesmal einen Adapter.
Ich habe auf die Schnelle halt nicht viel Doku über die APIs dieser Schnittstelle gefunden - Du hast ja immerhin die JSON Syntax.
Nun also präferiert wäre von mir die mqtt Lösung. Ich verstehe zwar nicht ganz warum NodeRed und Baresip auf allen Raspis läuft aber da wirst auch Deine Gründe haben.
Also mqtt-Broker kann ich Dir nur mosquitto empfehlen - den kannst mE auf Deinen zentralen Server installieren. Dann noch den mqtt-Adapter im iobroker - als Client konfiguriert (der Adapter aber der beides anbietet - gibt noch einen uralten, der nur den client anbietet).
Via Node Red kannst Du direkt auf den mqtt-Server zugreifen oder mit dem Client Adapter via iobroker.
Der Vorteil via mqtt ist halt, dass du damit jederzeit auf einen Blick die Zustände Deiner baresip Schnittstelle sehen kannst. Allerdings musst Du auch die Struktur bzw. die mqtt Kommandos kennen.Genauso ist es bzgl. der HTTP API-
Letztlich wird Dir aber nur die Methode übrigbleiben, deren Dokumentation Du hast. Hast Du mal einen Links zu der JSON Syntax?
Zum Test müsste es einfach sein - den JSON String einfach in eine Inject Node und an die TCP-request Node übergeben mit ipAdresse und port: 4444 (falls das Config File des Beispiels genutzt wurde).
Na die mqtt- Commandos habe ich auch schon gefunden: https://github.com/baresip/baresip/wiki/Proposal:-Baresip-MQTT-API (wenn das implementiert wurde
)
Das heißt Du müsstest eigentlich nur einen Kommando-Datenpunkt im mqtt Broker haben - and den Du diese Kommandos schickst. Diese müssen in einen DP unter baresip - also /baresip/command
Bei der ganzen Mqtt Schnittstelle - weiß ich halt gar nicht was davon bereits implementiert ist - ich lese hier immer nur von Proposals.
https://github.com/baresip/baresip/wiki/Proposal:-MQTT-event-handler
Ansonsten wäre das natürlich auch für die andere Richtung interessant, da Du so über mqtt über Ereignisse in Deinem baresip informiert würdest.
Aber ich sehe gerade die mqtt-Schnittstelle kannst Du ja auch über Dein Configfile zur baresip konfigurieren:
# MQTT #mqtt_broker_host sollentuna.example.com #mqtt_broker_port 1883 #mqtt_broker_cafile /usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt # set this to enforce TLS, default off #mqtt_broker_clientid baresip01 # Has to be unique for each client, defaults to "baresip" #mqtt_broker_user alfred #mqtt_broker_password Crocus #mqtt_basetopic baresip/01 # May be uniqe for each client you want to control. Defaults to "baresip" #mqtt_subscribetopic /my/baresip/+/control # defaults to /${mqtt_basetopic}/command/+ #mqtt_publishtopic /my/baresip/123/event # defaults to /${mqtt_basetopic}/event
darüber ist ja dann auch konfiguriert - dass baresip über die Subsciption zu command die Befehle empfängt und über events Dich informiert, was passiert.
-
@renegade-0 sagte in node-exec PID übergeben:
Die Frage ist, wie ich aus der visualisierung heraus am besten das annehmen, auflegen realisiere.
Die Visualisierung ist in meinen Augen das Letzte um was man sich Gedanken machen muss. Wenn die Kommunikation mit den Befehlen hinhaut - dann würde ich ggf. eigene Datenpunkte setzen, die dann mit NodeRed weiterverarbeiten und dann rausschicken - das ist alles nur Übersetzungsarbeit und halt grafisches Design im VIS. Wichtig ist, dass Du die Kommunikation beherrschst.
In Vis schreibst zum Beispiel einfach in einen Datenpunkt "Auflegen" irgendwas und damit triggerst Du den Flow in NodeRed. Dieser schickt dann halt den entsprechenden JSON ({"hangup", 'b', 0, "Hangup call", cmd_hangup } oder ähnliches an MQTT oder direkt via TCP). Wenn es sich anbietet kannst Du diese JSON Strings auch direkt aus der VIS in einen Datenpunkt schreiben und schickst den Inhalt via NR an die entsprechende Schnittstelle.
-
@renegade-0 Ach und Deine Frage was dieses cons listen ist, vielleicht ist es ja auch das was Du suchst. Kannst ja mal versuchen über diese Schnittstelle Deine 'b' und 'a' zu schicken. Vielleicht funktioniert das ja. Das haut auf jeden Fall eher hin, als Dein Versuch über die pid. Also nutz die TCP request node und die Inject Node um es auszuprobieren.
-
Moin @mickym
OK, also das MQTT hört sich schon sehr verlockend an. Hab halt damit noch null Ahnung, aber kann man ja lernen.
Wenn ich dich richtig verstehe, muss ich dann parallel zum ioBroker einen Broker aufsetzen (Mosquitto) und in Broker, sowie auf dem anderen Gerät einen client?
Und dann noch node-Red als Logik, welche auf den client zugreift?Wäre es nicht einfacher, den Adapter im Broker als Server zu konfigurieren, node REd direkt darauf zugreifen zu lassen und nur auf dem Türgerät einen Client zu installieren, der mit dem Broker kommuniziert? Dafür auf dem Türgerät node-REd runter und die CTLs vom mjpg-streamer und baresip über ein Script zu überwachen und neu zu starten? Quasi wie watchdog.
https://github.com/baresip/baresip/tree/master/modules/mqtt hier ist ein wenig Doku enthalten. So wie ich das verstehe, kann baresip an einen lokalen MQTT angebunden werden und mit dem kommunizieren. Und die Doku, welche du gefunden hast, scheint mir eine Weiterentwicklung zu sein, damit das Programm einen eigenen MQTT client bekommt oder bin ich schon wieder falsch unterwegs??
-
@renegade-0 sagte in node-exec PID übergeben:
Moin @mickym
OK, also das MQTT hört sich schon sehr verlockend an. Hab halt damit noch null Ahnung, aber kann man ja lernen.
Wenn ich dich richtig verstehe, muss ich dann parallel zum ioBroker einen Broker aufsetzen (Mosquitto) und in Broker, sowie auf dem anderen Gerät einen client?
Und dann noch node-Red als Logik, welche auf den client zugreift?Wäre es nicht einfacher, den Adapter im Broker als Server zu konfigurieren, node REd direkt darauf zugreifen zu lassen und nur auf dem Türgerät einen Client zu installieren, der mit dem Broker kommuniziert? Dafür auf dem Türgerät node-REd runter und die CTLs vom mjpg-streamer und baresip über ein Script zu überwachen und neu zu starten? Quasi wie watchdog.
https://github.com/baresip/baresip/tree/master/modules/mqtt hier ist ein wenig Doku enthalten. So wie ich das verstehe, kann baresip an einen lokalen MQTT angebunden werden und mit dem kommunizieren. Und die Doku, welche du gefunden hast, scheint mir eine Weiterentwicklung zu sein, damit das Programm einen eigenen MQTT client bekommt oder bin ich schon wieder falsch unterwegs??
-
Fangen wir mal von hinten an. Ob man da nun nochwas zu dem baresip installieren muss, dass es mqtt spricht weiß ich nicht. Das Konfigurationsbeispiel habe ich eigentlich aus dem Beispiel Deines baresip links von github. Also vielleicht kann der auch alles ohne irgendwelche weitere Installation. Also sowie baresip einen eingebauten Webserver hat, hat es bereits einen mqtt client implementiert und Du musst ihn nur in der Konfigurationsdatei konfigurieren. Würde ich jedenfalls mal so ausprobieren, in dem ich die Konfigurationsdatei - wie gepostet entsprechend anzupassen.
-
Dafür auf dem Türgerät node-REd runter und die CTLs vom mjpg-streamer und baresip über ein Script zu überwachen und neu zu starten? Quasi wie watchdog. Da brauchst in dem Fall sowieso kein Node Red - da ja der baresip client über mqtt ebenfalls schon mit Deiner zentralen Maschine spricht.
-
NodeRed bringt einen mqtt Client von Haus aus mit. Das mit der Möglichkeit über iobroker auf mqtt Datenpunkte zuzugreifen war nur zustätzlich erwähnt. Im Prinzip würdest Du aber direkt mit mqtt Nodes auf Deinen Broker zugreifen.
-
Wäre es nicht einfacher, den Adapter im Broker als Server zu konfigurieren, node REd direkt darauf zugreifen zu lassen. Ja aber ich habe mit dem Adapter als Server schlechte Erfahrung gemacht - ist zwar nun schon 1 Jahr her - aber ich werde das nicht nochmal versuchen. Das hat mich Monate sinnlose Zeit gekostet. Deshalb empfehle ich zwar diesen Adapter, aber nur als Client, um dann im iobroker ein vernünftiges Front-End für den mosquitto-Server zu haben. Du brauchst dann auch keine Kommandozeilen mosquitto-clients zu installieren, da Du mit dem iobroker mqtt Adapter als client ein vernünftiges Front-End für Deinen mosquitto broker hast. Du musst Dich auch um keine Kommandos kümmern, sondern gibst einfach in die mqtt Datenpunkte ebenso Deine Werte ein, wie in den sonstigen iobroker Datenpunkten und schlägst Dich keinesfalls mit mosquitto_pub oder mosquitto_sub Befehlen rum.
-
So zusammenfassend zu Deinem 1. Absatz: Ja ich empfehle mosquitto als Broker parallel zum iobroker zu installieren. Aufpassen dass Du keinen Adapter im iobroker hast, der schon implizit als mqtt Broker arbeitet (sonoff etc.) - als port 1883 sollte frei sein. Im Iobroker installierst Du den mqtt-Adapter (der sowohl Server wie auch Client sein kann) als Client, abonnierst (subscribest alle Themen mit #) und hast somit ein Front-End für Deinen mosquitto Broker. Auf den anderen Geräten musst Du in meinen Augen gar nichts installieren, da baresip (gemäß Konfig-datei) bereits einen mqtt-Client implementiert hat.
==========================================================================
Trotz allem hast Du schon mal die TCP Kommunikation über das cons listen bzw. mit den JSON Strings versucht? Das wäre doch jetzt neben allen Vorteilen von mqtt - mal die schnellste Lösung, um zu sehen, ob das funktioniert???
-
-
Ah OK, jetzt komm ich mit. Den MQTT-Adapter einfach als Frontend nutzen. Das mal eine geniale Idee. Und auch danke dir für die Erklärung, warum einen extra Server. Hast mir viel Zeit gespart.
Dann werde ich mich mal ans umbauen machen und sehen, was ich da hinbekomme. MQTT ist halt einfach die Zukunft des IoT und gefällt mir von der Idee her auch echt gut.
===================================================
Das TCP habe ich jetzt noch nicht probiert. Also das ctrl_tcp arbeitet sauber. Damit hat wal seinen DoorIO programmiert. das con_listen mag vielleicht die schnellere Methode sein, aber ich denke, MQTT ist hier die bessere wahl, vor allem im Bezug auf die noch folgenden Datenpunkte der Kontakte. -
@renegade-0 Ja im Prinzip ist mein ganzer mosquitto Broker als Instanz im iobroker abgebildet
und man kann die mqtt Kommandos einfach direkt durch Eingabe in die Datenpunkte absetzen.
-
@mickym
Kann man dem Adapter auch irgendwie sagen, subscribe all oder muss man jedes topic einzeln angeben?