Wemos D1 mini / Es kommt nur noch das erste MQTT Topic an

Begonnen von Groej, 13 April 2018, 06:58:50

Vorheriges Thema - Nächstes Thema

Groej

Hallo an Alle,

ich weiß nicht ob ich an der Stelle richtig bin darum beschreibe ich erstmal nur mein Problem.

Seit kurzen besteht das Problem das mein WEMOS D1 mini mit einen DHT22 nur noch das erste MQTT Topic sendet und die restlichen nicht mehr. Das Programm wird aber komplett ausgeführt. Kommentiere ich das erste Topic im Programm aus wird nur das zweite gesendet und die restlichen wieder nicht.

Hat Jemand eine Idee vielleicht dazu was es sein könnte?

Wenn ich hier richtig bin würde ich den Programmcode hier mal reinstellen.
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

Gear

#1
Moin,

nutzt du ESPEasy oder etwas selbst programmiertes?

Grüße
Gear

Edit:
Ahh, sry habs irgendwie überlesen.
Poste mal den Programmcode.

Ich gehe mal davon aus, du lauschst auf dem MQTT Server?
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

RaspiLED

Hi,
wie überprüfst Du das? z.B. so?

mosquitto_sub -d -v -t \#

Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Groej

#3
Hallo,

selber programmiert mit Arduino IDE. Hat bis vor ein paar Tagen auch funktioniert bis zum Batterie wechsel. Ich hab es mit einen MQTT Client auf meinen Windows Rechner geprüft ob die Topics kommen oder nicht. Aber auch direkt auf dem Raspi sind die Topics von dem Gerät nicht zu sehen bis auf das erste was im Programmcode steht.

Hier der Programmcode:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

#include "DHT.h"
#include <MQTTClient.h>

#define DHTTYPE DHT22  //DHT Typ DHT22 oder DHT11
#define DHTPIN 2  //Data Pin des DHT

#define FORCE_DEEPSLEEP

#define temperature_topic "/wohnung/klima/test/temp"
#define humidity_topic "/wohnung/klima/test/humidity"
#define battery_topic "/wohnung/klima/test/battery"
#define voltage_topic "/wohnung/klima/test/voltage"
#define rssi_topic "/wohnung/klima/test/rssi"
#define reset_topic "/wohnung/klima/test/resetReason"

const char* mqtthost = "192.168.xxx.xxx"; //IP des MQTT Brokers
const char* wifissid = "xxxxxxxxxxxxx";  //SSID des WiFi Netzes
const char* wifipassword = "xxxxxxxxxxxxxxxx";  //Passwort des WiFi Netzes

WiFiClient net;
MQTTClient mqtt;

DHT dht(DHTPIN, DHTTYPE);

unsigned int batt;

void connect();

void setup(){

  Serial.begin(9600);
  Serial.println();
  Serial.println("Boote Sketch...");
 
  pinMode(4,OUTPUT);  //Pin an dem VCC vom DHT angeschlossen ist
  digitalWrite(4,HIGH); //Stromversorgung für DHT22 ein
  Serial.println("D2 auf HIGH");
  delay(500);

  dht.begin();
     
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(wifissid, wifipassword);

  mqtt.begin(mqtthost, net);

  connect();
  Serial.println("fertig!");
}

void loop(){
  if(!mqtt.connected()) {
    connect();
  }

  mqtt.loop();
  delay(500); // time to make reprogramming possible

  int sensorValueBatt = analogRead(A0);
  long rssi = WiFi.RSSI();
  float batt = sensorValueBatt / 192.2131;
  float humidity = dht.readHumidity();
  float temp = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (batt<=3.7){
     mqtt.publish(battery_topic, String("low"));
    } else {
     mqtt.publish(battery_topic, String("ok"));
    }

  // Check if any reads failed and exit early (to try again).
  if (!isnan(humidity) || !isnan(temp)) {
    mqtt.publish(temperature_topic, String(temp));
    mqtt.publish(humidity_topic, String(humidity));
  }
   
  mqtt.publish(voltage_topic, String(batt));
  mqtt.publish(rssi_topic, String(rssi));
  mqtt.publish(reset_topic, ESP.getResetReason());

    Serial.print("WiFi Empfang: ");
    Serial.print(WiFi.RSSI());
    Serial.println(" dBm");
    Serial.print("Temperatur: ");
    Serial.print(String(temp));
    Serial.println(" °C");
    Serial.print("Luftfeuchte: ");
    Serial.print(String(humidity));
    Serial.println(" %");
    Serial.print("Batterie Volt: ");
    Serial.print(String(batt));
    Serial.println(" V");

  digitalWrite(4,LOW); //Stromversorgung für DHT22 aus
  Serial.println("D2 auf LOW");
  delay(100);

  FORCE_DEEPSLEEP
    Serial.println("Tiefschlaf fuer 10 min!");
    ESP.deepSleep(10 * 60 * 1000000);
    delay(100);
}
   
void connect() {
  while(WiFi.waitForConnectResult() != WL_CONNECTED){
    WiFi.begin(wifissid, wifipassword);
    Serial.println("WiFi Verbindung fehlgeschlagen. Wiederhole.");
  }

  Serial.print("Wifi verbunden - IP-Address: ");
  Serial.println(WiFi.localIP());

  while (!mqtt.connect(mqtthost, "MQTT", "MQTT-Fhem")) {
    Serial.print(".");
  }
  Serial.println("MQTT verbunden!");

}


Der WEMOS bootet setzte D1 auf HIGH an dem der DHT22 hängt und verbindest sich dann mit dem WLAN und dem MQTT Broker.  Danach wird dann die Batteriespannung geprüft und je nach dem wie die Spannung ist wird per MQTT dann im Topic ein ok oder low gesendet. Danach sollten dann die anderen Topics kommen die aber nicht kommen und der WEMOS lägt sich dann für 10 Minuten schlafen. Auf der seriellen Schnittstelle ich ich alle Print Befehle aber die Topics kommen nach der Batterieprüfung nicht. Nehm ich die if Schleife raus kommt nur das Topic Temperatur und wieder Schluß. Wie gesagt nur das erste Topic kommt immer und die restlichen Topics nicht obwohl das Programm sauber durchläuft anscheinend. Hab ihn auch schon mal neu geflasht aber brachte auch nichts.
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

Beta-User

Nimm doch bitte die Passwörter etc. aus dem Sketch...

#include mysecrets.h

Dann würde ich kurze Waits einfügen, vielleicht bricht die Spannung beim Senden zu sehr ein.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Groej

#5
Danke für den Tipp. Hatte noch dran gedacht aber dann klingelte das Telefon.

Hab jetzt nach dem Batterie prüfen ein delay von 50 eingebaut und dann geht alles. Komischweise macht er das auch wenn er am Netzteil ist.

DANKE FÜR DIE HILFE AN ALLE.

Gruß

Jörg
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

RaspiLED

Hi,
Ich wollte gerade schreiben, nimm einen neuen DHT ;-) Der darf ja nur alle 2s befragt werden und Deine Loop prüft auf Fehler beim lesen und sendet dann nix, statt im Debug einen Fehler ;-)
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Groej

Er hat ja die Daten gesendet aber nur den ersten Topic wie gesagt. Wenn ich die Batterieprüfung raus genommen hat hat er ja die Temperatur gesendet weil es dann das erste Topic war. Die Werte vom DHT22 waren ja auf der seriellen Schnittstelle zu sehen.
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

Beta-User

Was mir grade auffällt:

Delay war untechnisch gemeint: nimm also lieber ein wait().
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Groej

Von www.arduino.cc

wait() (removed from 1.5.1)

This function was removed from 1.5.1, use delay() instead.
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

habeIchVergessen