MQTT Library und Thingspeak API

Forums The NanoESP & Pretzel Board Forum MQTT Library und Thingspeak API

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #2061
    jpb
    Participant

    Hat schon einmal jemand erfolgreich die Nanoesp MQTT Library mit einem anderen Broker speziell dem von Thingspeak benutzt?

    Wenn ich mir die Thingspeak API anschaue sollte ich doch eigentlich mit dem Befehl
    (mqtt.connect(0, "mqtt.thingspeak.com", 1883, mqttId)
    eine Verbindung zum Broker bekommen können, was mache ich da falsch?
    Ich erhalte nur den Fehler “error connecting”

    Zum weiteren Verständnis:
    Wenn der Fehler behoben ist müsste ich im nächsten Schritt doch dann meine Nachricht newMsg = {"channels/<em><ChannelID></em>/publish/fields/field1/<em><ApiKey></em>", "0", 0, true}; mit
    mqtt.publish(0, &newMsg) schicken können?

    • This topic was modified 7 years, 8 months ago by jpb.
    #2063
    jpb
    Participant

    inzwischen bin ich ein Stück weiter gekommen und erreiche ein erfolgreiches connect hierfür ist es bei Thingspeak notwendig dass das CleanSession flag auf 1 und lastWill flag auf 0 steht.
    dies erreiche ich im meinem Programm durch:

    mqtt_msg lastWill = {"", "", 0, true}; 
    if (mqtt.connect(0,"mqtt.thingspeak.com", 1883 , mqttId, true, 120, &lastWill, "", "")) {
        Serial.println(F("Connected to Broker"));
      }
    else {
        Serial.println(F("error connecting"));
        setupOk = false;
      };

    Jetzt bleibt noch das Publish zu lösen hier funktioniert es noch nicht wie gedacht und ich bin für Ratschläge dankbar.

    #2065
    Yunaria
    Participant

    Hallo jpb,

    möglicherweise konnten Sie das Problem schon lösen. Falls nicht –
    hier die wesentlichen Zeilen aus einem funktionierendem Programm, die für Sie interessant sein könnten.
    Lastwill usw. behandle ich im Moment (noch) nicht.
    Mir ging es einmal rein darum, an ThingSpeak per MQQT Werte zu senden.

    mqtt_msg newPing;
    
    void setup()
    {
      newPing = {"channels/210619/publish/fields/field8/" + ThingSpeakKEY, "0"};
    
    if (mqtt.connect(0, "mqtt.thingspeak.com", 1883, ThingSpeakKEY))
    	{
       		Serial.println("Mit ThingSpeak MQTT verbunden");
       		digitalWrite(MQTTLED, HIGH);
    	}
      else
      	{
        Serial.println("Verbinden mit ThingSpeak MQTT gescheitert");
        digitalWrite(MQTTLED, LOW);
      	}
    }
    
    void loop() 
    {
      sendValues();
      delay(15000); 
    }
    
    void sendValues() 
    {
      newPing.value = String(holePing());
      mqtt.publish(0, &newPing);
    }
    
    int holePing()
    {
     int pingZeit = nanoesp.ping("www.google.at");
      return pingZeit;
    }
    

    Abgeleitet ist dies von http://iot.fkainka.de/day23-2016

    LG Yunaria

    #2067
    Yunaria
    Participant

    Nochmal ich…

    Das gleichzeitige Übertragen mehrerer Sensordaten / mehrerer Felder funktioniert auch auf diese Art.
    Den unschönen Code bitte ich zu entschuldigen.

    Die relevanten Zeilen:

    mqtt_msg newData;
    
    void setup() 
    {
    
    newData = {"channels/210619/publish/" + ThingSpeakKEY, "0"};
    
    if (mqtt.connect(0, "mqtt.thingspeak.com", 1883, ThingSpeakKEY))
    	{
       		Serial.println("Mit ThingSpeak MQTT verbunden");
     	}
    else 
      {
        Serial.println("Verbinden mit ThingSpeak MQTT gescheitert");
      }
    
    }
    
    void loop() 
    {
      sendValues();
      delay(15000); 
    }
    
    void sendValues() 
    {
      newData.value = String("field1=" + String(getDHT11Temp()) + "&field2=" + String(getDHT11Hum()) + "&field3=" + String(getDS18B20()) + "&field4=" + String(getLDR()) + "&field5=" + String(getPing())); 
    
      mqtt.publish(0, &newData);
      
      delay(500);
    }
    
    //--------------------------------Sensoren----------------------------------------------------
    
    float getDHT11Temp()
    {
        float DHTtemp = dht.readTemperature();
        
    	return DHTtemp;
    }
    
    int getDHT11Hum()
    {
        float DHThum = dht.readHumidity();
        return DHThum;
    }
    
    double getDS18B20()
    {
    	sensors.requestTemperatures(); 
        double SensorDS = sensors.getTempCByIndex(0);
        return SensorDS;
    }
    
    int getPing()
    {
    	int pingZeit=0;
    	do
    	{
    	    pingZeit = nanoesp.ping("www.google.at");
    	} 
    	while (pingZeit<=0);
    
     return pingZeit;
    }
    
    double getLDR()
    {
    	double LDRinput = analogRead(LDR);
    	LDRinput = LDRinput/10;
    	return LDRinput;
    }
    

    LG Yunaria

    Attachments:
Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.