From 79f47875d2bd4212ca4388539930a357790ea393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anian=20B=C3=BChler?= <anian.buehler@reutlingen-university.de> Date: Fri, 15 Jul 2022 11:15:10 +0200 Subject: [PATCH] added getSubscribedTopics + examples --- examples/sPSN_PlotTopics/sPSN_PlotTopics.ino | 61 ++++++++++++++++++++ keywords.txt | 5 +- src/DidacticNet.cpp | 10 +++- src/DidacticNet.h | 4 ++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 examples/sPSN_PlotTopics/sPSN_PlotTopics.ino diff --git a/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino b/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino new file mode 100644 index 0000000..1a6f395 --- /dev/null +++ b/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino @@ -0,0 +1,61 @@ +/** + *file: sPSN_PlotTopics + *author: letsgoING -> info@letsgoing.de + * + *description: + * Dieses Programm abboniert Beispiel-Topics und gibt diese auf dem SerialMonitor aus. + * + * parameter: + * MAX_LEN_PAYLOAD = 20 Zeichen (didacticNet.h) + * MAX_LEN_TOPICS = 10 Zeichen (didacticNet.h) + * + *date: 15.07.2022 + */ +#include <Arduino.h> +#include "SoftwareSerial.h" +#include "DidacticNet.h" + +#define SERIAL_BAUD 2400 //lege Geschwindigkeit für serielle Schnittstellen fest + +SoftwareSerial sSerial(10, 11); //Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender + +DidacticPSNetClient psnClient; //Erzeuge PubSub-Client-Instanz + + +//Callback-Funktion - in diesem Beispiel nicht verwendet +void newData(char* topic, char* payload) { +} + + +void setup() { + + Serial.begin(SERIAL_BAUD); //Starte Serielle Schnittstelle (zum PC) + sSerial.begin(SERIAL_BAUD); //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen) + + psnClient.begin(sSerial, newData); //Starte PubSub Client an SoftwareSerial Schnittstelle + + //Beliebige Beispiel-Topics abbonieren -> zusätzliche Topics hinzufügen + psnClient.subscribe("temp1"); + psnClient.subscribe("temp2"); + psnClient.subscribe("light1"); + psnClient.subscribe("poti"); + + //lese Anzahl der abbonierten Topics aus + int countTopics = psnClient.getMaxNrTopics(); + Serial.print("Anzahl Topics: "); + Serial.println(countTopics); + + //Gebe alle Topics nacheinander aus + for(int i = 0; i < countTopics; i++){ + char topic[MAX_LEN_TOPICS]; + psnClient.getSubscribedTopic(topic, i); + + Serial.print("Topic "); + Serial.print(i); + Serial.print(": "); + Serial.println(topic); + } +} + +void loop() { +} diff --git a/keywords.txt b/keywords.txt index 542b41d..c9c8452 100644 --- a/keywords.txt +++ b/keywords.txt @@ -27,6 +27,9 @@ publishOnChange KEYWORD2 subscribe KEYWORD2 unsubscribe KEYWORD2 +getMaxNrTopic KEYWORD2 +getSubscribedTopic KEYWORD2 + timeElapsed KEYWORD2 readSerialData KEYWORD2 @@ -53,4 +56,4 @@ DN_ASCII_NL LITERAL1 DN_PUBLISH_SUCCESSULL LITERAL1 DN_ERROR_NO_ERROR LITERAL1 DN_ERROR_TOPIC_LEN LITERAL1 -DN_ERROR_PAYLOAD_LEN LITERAL1 \ No newline at end of file +DN_ERROR_PAYLOAD_LEN LITERAL1 diff --git a/src/DidacticNet.cpp b/src/DidacticNet.cpp index 380c12a..a61796c 100644 --- a/src/DidacticNet.cpp +++ b/src/DidacticNet.cpp @@ -268,7 +268,6 @@ int DidacticPSNetClient::subscribe(char* topic, int topicLength){ return error; } - bool DidacticPSNetClient::unsubscribe(char* topic){ return unsubscribe(topic, strlen(topic)); } @@ -331,6 +330,15 @@ int DidacticPSNetClient::getFreeTopicNr() { return -1; } +int DidacticPSNetClient::getSubscribedTopic(char* topic, int number){ + strcpy(topic, _topic[number]); + return 1; +} + +int DidacticPSNetClient::getMaxNrTopics(){ + return getFreeTopicNr(); +} + //************************************************************************** //Broker diff --git a/src/DidacticNet.h b/src/DidacticNet.h index 498e953..fe9321d 100644 --- a/src/DidacticNet.h +++ b/src/DidacticNet.h @@ -173,6 +173,10 @@ class DidacticPSNetClient : public DidacticPSNet DidacticPSNetClient(); ~DidacticPSNetClient(); + int getMaxNrTopics(); + int getSubscribedTopic(char*, int); + + int publish(char*, char*); int publish(char*, int, char*, int); int publish(char*, int); -- GitLab