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 - MQTT Probleme mit SSL decrypt tenor 8 137 Gestern 19:33
Letzter Beitrag: tenor
  ESP8266+PubSubClient und MQTT/ioBroker Arduino4Fun 10 5.486 08.09.2020 10:22
Letzter Beitrag: biologist
  i2c LCD Display am Wemos D1 Mini mit mqtt klappt nach modifikation nicht raspido 5 872 15.06.2020 22:19
Letzter Beitrag: stw
  MQTT Subcribe funktioniert nicht crazysky 13 1.519 20.04.2020 17:39
Letzter Beitrag: Tommy56
  ESP8266 + SSD1306 + BME280 + MQTT crazysky 11 1.980 05.04.2020 06:05
Letzter Beitrag: N1d45
  ESP8266 und MQTT Jakohoho 2 1.023 20.03.2020 16:29
Letzter Beitrag: N1d45
  DeepSleep und MQTT Probleme N1d45 9 2.169 28.02.2020 18:03
Letzter Beitrag: N1d45
  MQTT DHT22 0816_Saft 2 953 11.02.2020 13:57
Letzter Beitrag: biologist
  MQTT / RSL problem am Wemos D1 Mini myreal84 7 1.357 19.01.2020 13:42
Letzter Beitrag: Fips
  MQTT Client mit Client Zertifikaten und Benutzer/Passwort klappt nicht Mausbiber 10 3.235 11.08.2019 22:28
Letzter Beitrag: Mausbiber

Gehe zu:


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