INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Pushbutton mit ESP und MQTT
10.01.2020, 14:39 (Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2020 14:40 von FirstS0ul.)
Beitrag #9
RE: Pushbutton mit ESP und MQTT
Hoppala. Du hast Recht.


Hier der aktuelle Code:

Code:
//**********************************************************************
// INCLUDE
//**********************************************************************
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <WiFiClient.h>

//**********************************************************************
// PARAMETER
//**********************************************************************
// Wifi
const char* host = "dashbutton-sz-light";
const char* ssid = "Headquarter";
const char* password = "XXXXX";
// MQTT
const char* mqtt_server = "10.80.1.24";
const char* mqtt_clientId = "dashbutton-sz-light";
const char* outTopicMsg = "dashbutton-sz/light/state";
const char* outTopicVCC = "dashbutton-sz/light/vcc";
const char* outTopicCon = "dashbutton-sz/light/connect";
// Hardware
long sendtime = 0;                  // sendtime
char msg[50];                       // message for mqtt publish
//int mqtt_state = 3;

//**********************************************************************
// SETUP
//**********************************************************************
ADC_MODE (ADC_VCC);                 // VCC Read

WiFiClient espClient;
PubSubClient client(espClient);

void setup(){                        
  sendtime = millis();                    
  Serial.begin(115200);  

// Setup Wifi
  setup_wifi();

// Setup MQTT
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.println("Attempting MQTT connection...");
    // Client ID connected
    if (client.connect(mqtt_clientId)) {
      Serial.print(mqtt_clientId);
      Serial.println(" connected");
      // Once connected, publish an announcement...
      client.publish(outTopicCon, "connected");
      // ... and resubscribe
      client.subscribe(outTopicMsg);
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void callback(char* topic, byte* payload, unsigned int length) {
   int mqtt_state = payload[0] - 0x30;
   Serial.print("Actual State is: ");
   Serial.println(mqtt_state);
   // Read the VCC from Battery
   float vcc = ESP.getVcc() / 1000.0;
   vcc = vcc - 0.12;     // correction value from VCC
   dtostrf(vcc, sizeof(vcc), 2, msg);
   Serial.print("VCC: ");
   Serial.print(msg);
   Serial.println("V");
   Serial.print("Publishing VCC State to the MQTT Broker now.");
   client.publish(outTopicVCC, msg);
   //Set State and publish
   Serial.print("Setting State and publishing it to the MQTT Broker now. ");
   if (mqtt_state ==  0) {
      Serial.print("State is OFF. Turning ON. ");
      mqtt_state = 1;
      Serial.print("State is now: ");
      Serial.println(mqtt_state);
      sendtime = millis() - sendtime;
      Serial.print("Sendtime: ");
      Serial.print(sendtime);
      Serial.println("ms");
      Serial.print("Finished. Going to sleep now.");
      //ESP.deepSleep(0, WAKE_RFCAL);
   } else if (mqtt_state == 1) {
      Serial.print("State is ON. Turning OFF. ");
      mqtt_state = 0;
      Serial.print("State is now:");
      Serial.println(mqtt_state);
      sendtime = millis() - sendtime;
      Serial.print("Sendtime: ");
      Serial.print(sendtime);
      Serial.println("ms");
      Serial.print("Finished. Going to sleep now.");
      //ESP.deepSleep(0, WAKE_RFCAL);
   } else {
      Serial.print("ERROR: No vaild Value found. ");
      Serial.print("Finished with ERRORS. Going to sleep now.");
      //ESP.deepSleep(0, WAKE_RFCAL);
   }
}

//**********************************************************************
// LOOP
//**********************************************************************
void loop(){

  // MQTT Client
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  delay(500);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2020, 21:18
Beitrag #10
RE: Pushbutton mit ESP und MQTT
Ich habs!
Mir fehlte das wissen über MQTT, dass es eine retained Funktion gibt.
Hier Infos: https://www.hivemq.com/blog/mqtt-essenti...phRmmuPgpo

und hier der Finale Code:
https://create.arduino.cc/editor/FirstS0...fa/preview

evtl. die Delays nach seinem Credo anpassen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2020, 10:25
Beitrag #11
RE: Pushbutton mit ESP und MQTT
Nur Kurz Crosspostings sind viel Diskutiert weil eben viele in mehr als einem Forum sind und so die selbe / Ähnliche Antworten geben schreiben. da User nicht immer den selben Nick verwenden merk man das nicht gleich und hat so zeit "verschenkt". Deshalb die Reaktionen. Also wenn cross posts dann gleich selbst verlinken oder lassen.

Ich halte fest: Deine Gedanke das der Ardunio duch den Deepsleep nicht Aktuell ist erledigt sich dadurch das dein MQTT die Letzte Nachricht puffer und sie bei reaktivieren wieder zu stellt.
Sprich Pollen braucht man nicht wenn der MQTT "richtig" eingestellt ist.

Code:
void callback(char* topic, byte* payload, unsigned int length) {
   int mqtt_state = payload[0] - 0x30;
   Serial.print("Actual State is: ");

Code:
void callback(char* topic, byte* payload, unsigned int length) {
   if( length == 0 ) {
     Serial.print("Error Empty Data get");
     retrun;
   }
   int mqtt_state = payload[0] - 0x30;
   Serial.print("Actual State is: ");

So würde ich das machen falls mal eine Nachricht komisch ist.
Ohne die Prüfung
int mqtt_state = payload[0] - 0x30; wird das bei Length 0 zu einem Reboot.

Mein Projekt
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 und MQTT Jakohoho 2 228 20.03.2020 16:29
Letzter Beitrag: N1d45
  DeepSleep und MQTT Probleme N1d45 9 843 28.02.2020 18:03
Letzter Beitrag: N1d45
  MQTT DHT22 0816_Saft 2 532 11.02.2020 13:57
Letzter Beitrag: biologist
  MQTT / RSL problem am Wemos D1 Mini myreal84 7 796 19.01.2020 13:42
Letzter Beitrag: Fips
  ESP8266+PubSubClient und MQTT/ioBroker Arduino4Fun 8 2.730 14.01.2020 14:34
Letzter Beitrag: biologist
  MQTT Client mit Client Zertifikaten und Benutzer/Passwort klappt nicht Mausbiber 10 2.538 11.08.2019 22:28
Letzter Beitrag: Mausbiber
  ESP32 MQTT Ausfall nach 201 Minuten Jan Hirt 9 3.117 06.08.2019 18:31
Letzter Beitrag: Tommy56
  senden von JSON-Objekten an MQTT-Broker Ranulf 18 4.832 01.08.2019 16:27
Letzter Beitrag: Hilgi
  Wemos D1 mini - MQTT Problem PetA90 6 1.837 13.07.2019 21:40
Letzter Beitrag: PetA90
Question MQTT ausgabe mit Node MCU auf ili9225 display? merz 2 2.431 31.10.2017 21:48
Letzter Beitrag: merz

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste