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
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 22 2.133 08.02.2021 15:34
Letzter Beitrag: ardu_arne
  MQTT Topic abbonieren? Steinspiel 32 2.101 21.01.2021 22:50
Letzter Beitrag: Tommy56
  433MHz-WiFi-MQTT-Sender nbk83 25 1.523 04.01.2021 16:35
Letzter Beitrag: nbk83
  Wo MQTT LogIn Daten einfügen? Steinspiel 10 830 28.12.2020 14:32
Letzter Beitrag: Tommy56
  Sensorausgabe mit MQTT publishen ? Steinspiel 14 1.083 16.12.2020 13:06
Letzter Beitrag: biologist
  Hilfe bei async-mqtt-client für ESP32 amshh 7 743 12.11.2020 09:19
Letzter Beitrag: amithlon
  DHT11 Daten via MQTT an Raspi senden Hanibal_Smith 5 577 10.11.2020 16:24
Letzter Beitrag: biologist
  wert an client schicken während Deepsleep mqtt & ibroker stevensen 13 1.140 06.11.2020 21:07
Letzter Beitrag: nbk83
  MQTT Connect schleife looped crazysky 1 454 29.10.2020 15:21
Letzter Beitrag: crazysky
  ESP8266 - MQTT Probleme mit SSL decrypt tenor 8 1.390 22.09.2020 19:33
Letzter Beitrag: tenor

Gehe zu:


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