Hallo,
möchte aus einem Programm auf dem Raspi heraus auf den MQTT-Server zugreifen und Kommandos wie lesen von Temperatursensordaten sowie schalten von GPIO Pins ausführen.
Gerne würde ich das in C++ machen, könnte per Programm dann einen Konsolenbefehl wie mosquitto_pub -d -t /home/data -m "on" absenden. Aber wie könnte ich Sensordaten empfangen?
Kann mich aber auch mit Python u.s.w. anfreunden. Für Python hätte ich schon mal die Software paho-MQTT in ausgemacht. Wäre es das?
Welche Informationen oder welchen Rat könnt ihr mir geben? Bin auf alle Antworten gespannt.
Vielen Dank!
Raspi-MQTT-Broker (Mosquitto) wie und mit welcher Programmierung / Sprache kann man am leichtesten zugreifen?
-
- MQTT
-
bug-reporter -
5. November 2020 um 08:45 -
Erledigt
-
-
Raspi-MQTT-Broker (Mosquitto) wie und mit welcher Programmierung / Sprache kann man am leichtesten zugreifen?? Schau mal ob du hier fündig wirst!
-
Dann mach es mit C++ und https://github.com/eclipse/paho.mqtt.cpp
Kann man aber auch selbst im internet recherchieren?
-
Dann mach es mit C++ und https://github.com/eclipse/paho.mqtt.cpp
Kann man aber auch selbst im internet recherchieren?
Hallo und danke.
Muss ich da Eclipse auf meinem Raspi installieren? Glaube nicht dass das auf meinem 3B läuft
-
Muss ich da Eclipse auf meinem Raspi installieren?
Was meinst du mit Eclipse installieren? Die IDE?
-
Was meinst du mit Eclipse installieren? Die IDE?
Ja, oder nicht?
-
Ja, oder nicht?
Könnte auch eclipse mosquitto gemeint sein, deswegen die Frage.
Die IDE musst du nicht auf dem Raspi installieren. Du musst nur deine erzeugte Binary / Programm auf den Raspi übertragen und ausführen / einrichten.
-
Eclipse ist nicht nur eine IDE. Sondern auch eine foundation die Projekte unterstützt bzw entwickelt. Genauso wie Apache auch ein Server und eine foundation ist.
Und das ist einfach nur ein Projekt. Der Teil mit den “erzeugten binaries” ist allerdings nur relevant, wenn man auf dem PC mit einem Cross Compiler arbeitet.
Zu guter letzt: sowas mit C++ zu machen statt Python ist viel Aufwand für keinen Gewinn. MQTT ist Netzwerk, und nahezu alles, was du da tust, wird eh von der IO dominiert. Da wegen ein paar gesparten microsekunden auf die angenehmen Datenstrukturen und Stringverarbeitung von Python zu verzichten würde ich nur mit einem sehr guten Grund machen.
-
-
-
Bist Du da weiter gekommen? Ich stehe gerade vor dem gleichen Problem.
Irgendwie ist ein kleines Beispielprogramm dazu nicht im Netz zu finden.
-
Je nachdem was genau implementiert werden soll reicht auch bash mit mosquitto_pub und mosquitto_sub.
-
Programmatisch mache ich alles mit paho.mqtt.
Beispiel für Python:
Python
Alles anzeigenfrom paho.mqtt.client import Client def connect(): mqtt = Client() mqtt.connect("localhost") mqtt.on_message = lambda client, flags, msg: print(msg.payload.decode()) mqtt.subscribe("#") mqtt.loop_forever() if __name__ == "__main__": connect()
- Mit der Klasse Client den client initialisieren
- Dann mit der Methode connect verbinden
- Eine (anonyme) Funktion zu mqtt.on_message zuweisen. Diese Funktion wird immer ausgeführt, wenn eine Nachricht angekommen ist.
- Mittels subscribe das Thema abonnieren. In diesem Beispiel wird alles `subscribed`.
- Die Methode loop_forever startet einen Hintergrundthread. D.h. man kann im Programm nebenbei noch andere Sachen erledigen.
https://www.eclipse.org/paho/index.php…hp#network-loop
Das topic ist immer ein str (Unicode) und der payload ist immer bytes. D.h. man kann auch binäre Daten übertragen.
Wenn man mit normalen str arbeiten will, muss der payload decodiert werden: msg.payload.decode().
Ihr könnt eure C++/Perl/PHP/C#/NodeJs/Java/Bash-Beispiele auch posten.
-
Ihr könnt eure C++/Perl/PHP/C#/NodeJs/Java/Bash-Beispiele auch posten.
Auf dieser Seite finden sich kleine bash Beispiele fuer mosquitto_{pub|sub}.
-
Danke für eure Antworten!
Das hab ich mittlerweile bei github gefunden:
C
Alles anzeigen#include <stdio.h> #include <mosquitto.h> int main(){ int rc; struct mosquitto * mosq; mosquitto_lib_init(); mosq = mosquitto_new("publisher-test", true, NULL); rc = mosquitto_connect(mosq, "localhost", 1883, 60); if(rc != 0){ printf("Client could not connect to broker! Error Code: %d\n", rc); mosquitto_destroy(mosq); return -1; } printf("We are now connected to the broker!\n"); mosquitto_publish(mosq, NULL, "test/t1", 6, "Hello", 0, false); mosquitto_disconnect(mosq); mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 0; }
C
Alles anzeigen#include <stdio.h> #include <stdlib.h> #include <mosquitto.h> void on_connect(struct mosquitto *mosq, void *obj, int rc) { printf("ID: %d\n", * (int *) obj); if(rc) { printf("Error with result code: %d\n", rc); exit(-1); } mosquitto_subscribe(mosq, NULL, "test/t1", 0); } void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *msg) { printf("New message with topic %s: %s\n", msg->topic, (char *) msg->payload); } int main() { int rc, id=12; mosquitto_lib_init(); struct mosquitto *mosq; mosq = mosquitto_new("subscribe-test", true, &id); mosquitto_connect_callback_set(mosq, on_connect); mosquitto_message_callback_set(mosq, on_message); rc = mosquitto_connect(mosq, "localhost", 1883, 10); if(rc) { printf("Could not connect to Broker with return code %d\n", rc); return -1; } mosquitto_loop_start(mosq); printf("Press Enter to quit...\n"); getchar(); mosquitto_loop_stop(mosq, true); mosquitto_disconnect(mosq); mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 0; }
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!