Sim800 TinyGSM MQTT Authentifizierung

Hallo Leute,

ich versuche aktuell mit der Lib GitHub - platisd/TinyGSM: An Arduino library to control the SIM900 based TinyGSM board eine MQTT Verbindung aufzubauen.
Das Beispiel funktiniert soweit auch.
Leider kann ich im Beispiel keinen User und Password finden.
Kann mir eventuell jemand helfen?

Gruß Zimb

MqttClient.ino (3.66 KB)

Bitte setze Deinen Sketch in Codetags (oben links </> im Foreneditor oder [code] davor und [/code] dahinter - ohne die *).
Das kannst Du auch noch nachträglich durch Editieren tun. Bitte mach das, der Sketch ist besser zu lesen, besonders auf mobilen Geräten.

Gruß Tommy

Hallo,

ich füge mal deinen Code in die Tags

/**************************************************************
 *
 * For this example, you need to install PubSubClient library:
 *   https://github.com/knolleary/pubsubclient/releases/latest
 *   or from http://librarymanager/all#PubSubClient
 *
 * TinyGSM Getting Started guide:
 *   http://tiny.cc/tiny-gsm-readme
 *
 **************************************************************
 * Use Mosquitto client tools to work with MQTT
 *   Ubuntu/Linux: sudo apt-get install mosquitto-clients
 *   Windows:      https://mosquitto.org/download/
 *
 * Subscribe for messages:
 *   mosquitto_sub -h test.mosquitto.org -t GsmClientTest/init -t GsmClientTest/ledStatus -q 1
 * Toggle led:
 *   mosquitto_pub -h test.mosquitto.org -t GsmClientTest/led -q 1 -m "toggle"
 *
 * You can use Node-RED for wiring together MQTT-enabled devices
 *   https://nodered.org/
 * Also, take a look at these additional Node-RED modules:
 *   node-red-contrib-blynk-websockets
 *   node-red-dashboard
 *
 **************************************************************/

// Select your modem:
#define TINY_GSM_MODEM_SIM800
//#define TINY_GSM_MODEM_SIM900
//#define TINY_GSM_MODEM_M590

#include <TinyGsmClient.h>
#include <PubSubClient.h>

// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[]  = "pinternet.interkom.de";
const char user[] = "";
const char pass[] = "";

// Use Hardware Serial on Mega, Leonardo, Micro
#define SerialAT Serial1

// or Software Serial on Uno, Nano
//#include <SoftwareSerial.h>
//SoftwareSerial SerialAT(2, 3); // RX, TX

TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
PubSubClient mqtt(client);

const char* broker = "test.mosquitto.org";

const char* topicLed = "GsmClientTest/led";
const char* topicInit = "GsmClientTest/init";
const char* topicLedStatus = "GsmClientTest/ledStatus";

#define LED_PIN 13
int ledStatus = LOW;

long lastReconnectAttempt = 0;

void setup() {
  pinMode(LED_PIN, OUTPUT);

  // Set console baud rate
  Serial.begin(115200);
  delay(10);

  // Set GSM module baud rate
  SerialAT.begin(115200);
  delay(3000);

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  Serial.println("Initializing modem...");
  modem.restart();

  // Unlock your SIM card with a PIN
  //modem.simUnlock("1234");

  Serial.print("Waiting for network...");
  if (!modem.waitForNetwork()) {
    Serial.println(" fail");
    while (true);
  }
  Serial.println(" OK");

  Serial.print("Connecting to ");
  Serial.print(apn);
  if (!modem.gprsConnect(apn, user, pass)) {
    Serial.println(" fail");
    while (true);
  }
  Serial.println(" OK");

  // MQTT Broker setup
  mqtt.setServer(broker, 1883);
  mqtt.setCallback(mqttCallback);
}

boolean mqttConnect() {
  Serial.print("Connecting to ");
  Serial.print(broker);
  if (!mqtt.connect("GsmClientTest")) {
    Serial.println(" fail");
    return false;
  }
  Serial.println(" OK");
  mqtt.publish(topicInit, "GsmClientTest started");
  mqtt.subscribe(topicLed);
  return mqtt.connected();
}

void loop() {

  if (mqtt.connected()) {
    mqtt.loop();
  } else {
    // Reconnect every 10 seconds
    unsigned long t = millis();
    if (t - lastReconnectAttempt > 10000L) {
      lastReconnectAttempt = t;
      if (mqttConnect()) {
        lastReconnectAttempt = 0;
      }
    }
  }

}

void mqttCallback(char* topic, byte* payload, unsigned int len) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("]: ");
  Serial.write(payload, len);
  Serial.println();

  // Only proceed if incoming message's topic matches
  if (String(topic) == topicLed) {
    ledStatus = !ledStatus;
    digitalWrite(LED_PIN, ledStatus);
    mqtt.publish(topicLedStatus, ledStatus ? "1" : "0");
  }
}

ich denke du musst diese Zeile so ergänzen

if (!mqtt.connect("GsmClientTest", "testuser", "testpass")) {

Also mit deinen Zugangsdaten eben

Grüße

Danke @fckw

In den Zeilen

// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[]  = "pinternet.interkom.de";
const char user[] = "";
const char pass[] = "";

wird doch danach gefragt. Steht alles im Sketch.

achso, ich dachte es geht um die Zugangsdaten für den Mqtt Broker ::slight_smile:

fckw:
achso, ich dachte es geht um die Zugangsdaten für den Mqtt Broker ::slight_smile:

Ok, das kam nicht deutlich an, kann aber auch sein.

Hallo Leute,

danke für die Antworten!

@fckw
Ich danke dir für deine Anpassung. Ich werde es in Zukunft so machen.

@HotSystems
Das sind die Zugangsdaten des APN. Diese benötige ich nicht.

Ich wolllte ursprünglich diese Library verwenden für den MQTT Connect

Leider habe ich es nicht hinbekommen das SoftSerial zum Arduino Mega HW-Serial umzubauen.

Ich bin dann über die TinyGSM gestolpert.
Angeblich soll man diese ja verwenden können wie die Wifi oder Ethernet Library.
Ich möchte gerne das Cayenne Mydevices Als MQTT-Broker verwenden.
Für Cayenne gibt es eine eigene Library leider nicht in Kombination mit dem Sim800 Modul :confused:

Alles etwas kompliziert.

Gruß Zimb

zimb:
@HotSystems
Das sind die Zugangsdaten des APN. Diese benötige ich nicht.

Alles klar, hatte ich so nicht verstanden.

Ich wolllte ursprünglich diese Library verwenden für den MQTT Connect
Arduino MQTT Library for SIM800 GSM Modem | Random Codes - Elementz Tech Blog

Leider habe ich es nicht hinbekommen das SoftSerial zum Arduino Mega HW-Serial umzubauen.

Wo ist da das Problem ?
Wird doch mit Serial1 - Serial3 angesprochen.

Ich bin irgendwie zu blöd diese SoftwareSerial und HW-Serial zu verstehen.

#include "GSM_MQTT.h"
#include <SoftwareSerial.h>
String MQTT_HOST = "test.mosquitto.org";
/*
   MQTT host address
*/
String MQTT_PORT = "1883";
/*
   MQTT port
*/
SoftwareSerial mySerial(10, 11); // RX, TX
/*
   Software Serial through which mqtt events log is printed at 9600 baud rate
*/
void GSM_MQTT::AutoConnect(void)
{
  /*
     Use this function if you want to use autoconnect(and auto reconnect) facility
     This function is called whenever TCP connection is established (or re-established).
     put your connect codes here.
  */
  connect("qwertyuiop", 0, 0, "", "", 1, 0, 0, 0, "", "");

  
}
void GSM_MQTT::OnConnect(void)
{
 
}
void GSM_MQTT::OnMessage(char *Topic, int TopicLength, char *Message, int MessageLength)
{
  /*
    This function is called whenever a message received from subscribed topics
    put your subscription publish codes here.
  */

  /*
     Topic        :Name of the topic from which message is coming
     TopicLength  :Number of characters in topic name
     Message      :The containing array
     MessageLength:Number of characters in message
  */
  mySerial.println(TopicLength);
  mySerial.println(Topic);
  mySerial.println(MessageLength);
  mySerial.println(Message);

}
GSM_MQTT MQTT(20);
/*
   20 is the keepalive duration in seconds
*/

void setup()
{
[color=red]  // initialize mqtt:
  // GSM modem should be connected to Harware Serial
  //  index =0;[/color]
  MQTT.begin();

  /*
     You can write your code here
  */

}
void loop()
{

  /*
     You can write your code here
  */
  if (MQTT.available)
  {
    /*
      if you want to do something when mqtt connection is live.
      You can write your code here
    */
  }

  MQTT.processing();
}

Muss ich nur folgendes tun?

Serial1 mySerial; // RX, TX

NEIN.
Ich habe dir doch die Referenz verlinkt, da steht alles drin, wie du es verwenden musst.