NEWS
node-exec PID übergeben
-
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? -
@renegade-0 Mit dem Hashtag # sagst Du, dass Du alles subscribst.
Bei Dir steht nur statt mqtt.1.* , mqtt.0.* - um alles zu publishen, was Du in die Datenpunkte schreibst.
Um das alles zu überprüfen schreibst Du in Node Red mit einer mqtt-out Node einfach einen Datenpunkt, der sollte dann automatisch unter den Objekten auftauchen - ggf. Browser refreshen.