Vorstellung und Frage zum ESP8266

Hallo zusammen

Ich bin neu hier, in meinem Haus läuft ein SmartHome mit FHEM und diversen Hardware-Komponenten. Leider funktioniert nicht mehr ganz alles so wie ich es haben möchte, darum habe ich mich auf die Suche begeben und bin zum Entschluss gekommen, "muss ich halt selber machen".

Jetzt habe ich mir so einen Wemos D1 mini mit einem DHT22 Shield gekauft und möchte das ganze dann via den Mosquitto-Brocker im fhem verarbeiten. Ich habe hier den gesamten Sketch mal einkopiert:

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

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

#define DHTTYPE DHT22
#define DHTPIN 2


//Wifi Client
const char* host = "192.168.xxx.xx";
const char* ssid = "xxxxx";
const char* password = "xxxxx";
//

//MQTT Client
const char* mqttUser = "ESP8266";
const char* mqttPassword = "esp8266";
//


WiFiClient net;
MQTTClient mqtt;

DHT dht(DHTPIN, DHTTYPE);

void connect();

void setup() {

  dht.begin();

  Serial.begin(115200);
  Serial.println();
  Serial.println("Booting...");

  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);

  mqtt.begin(host, net);

  connect();
  Serial.println("Setup completed...");
}

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

  mqtt.loop();
  delay(30000);

  float temp = dht.readTemperature();
  float humidity = dht.readHumidity();

  Serial.print("Sending... ");
  if (!isnan(humidity) || !isnan(temp)) {
    mqtt.publish("/Wohnung/Buero/temp", String(temp));
    mqtt.publish("/Wohnung/Buero/humidity", String(humidity));

    Serial.print("Temp: ");
    Serial.print(String(temp));
    Serial.print(" Humidity: ");
    Serial.println(String(humidity));
  }
}

void connect() {
  while(WiFi.waitForConnectResult() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
    Serial.println("WiFi connection failed. Retry.");
  }

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

  while (!mqtt.connect(host)) {
    Serial.print(".");
  }

  Serial.println("MQTT connected!");
}

void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
  Serial.print("incoming: ");
  Serial.print(topic);
  Serial.print(" - ");
  Serial.print(payload);
  Serial.println();
}

Es läuft halbwegs, das Merkwürdige an der ganze Sache ist aber die Ausgabe im Seriellen Monitor:

16:31:52.954 -> MQTT connected!
16:32:22.956 -> Sending... Temp: 25.60 Humidity: 36.80
16:32:22.989 -> Wifi connection successful - IP-Address: 192.168.168.107
16:32:22.989 -> MQTT connected!
16:32:53.017 -> Sending... Temp: 25.60 Humidity: 36.60
16:32:53.017 -> Wifi connection successful - IP-Address: 192.168.168.107
16:32:53.017 -> MQTT connected!
16:33:23.005 -> Sending... Temp: 25.50 Humidity: 36.90
16:33:23.005 -> Wifi connection successful - IP-Address: 192.168.168.107
16:33:23.039 -> MQTT connected!
16:33:53.037 -> Sending... Temp: 25.50 Humidity: 36.00
16:33:53.037 -> Wifi connection successful - IP-Address: 192.168.168.107
16:33:53.037 -> MQTT connected!

Mit den Mqtt.fx erhalte ich aber keine Topics. Wenn ich im Mosquitto den "allow_anonymous false" setze geht gar nichts mehr. Aber wie ich die "Logindaten" zum Mosquitto hinschreiben soll? (müsste doch im void setup zum mqtt.begin?

Nach etlichen Stunden suchen und nicht wirklich was finden im Web versuche ich hier eine Lösung zu finden.

Zu einem späteren Zeitpunkt möchte ich dann eben das meiste meines 1Wire Zeugs Ablösen oder mindestens mit jeweils 1 Arduino zusätzlich aufteilen.

Gruss Andi

Hallo und Willkommen

Mit den Mqtt.fx erhalte ich aber keine Topics.

-->Oder Du hast die falschen Topics abonniert. Lade Dir mal den mqttspy-Clienten. Bist Du mit dem im Netzwerk drin, kannst Du auf alle Topics lauschen und weißt ganz genau, was für Daten wo rumschwirren.

Wenn ich im Mosquitto den "allow_anonymous false" setze geht gar nichts mehr. Aber wie ich die "Logindaten" zum Mosquitto hinschreiben soll? (müsste doch im void setup zum mqtt.begin?

-->Guggst Du hier

Hallo DerLehmi

Grundsätzlich denke ich nicht das ich auf die falschen Topic höre, denn ich habe bereits 3 Raspy die mit MQTT untereinander Daten austauschen eingerichtet. Diese Topic sehe ich alle sowohl im mqtt.fx als auch direkt auf der Raspy Konsole.

Ich habe eben gerade das mqttspy getestet, leider finde ich damit auch keine Topic vom ESP8266.

Was ich dafür festgestellt habe: 1x Arduino UNO mit W5100 Shield und dem Sketch w5100mqttv2.1 aus den Example geht einwandfrei, da drin habe ich wirklich nur die Server IP geändert. Heir wird aber eben die PubSubClient.h verwendet. Ich weiss aber auch hier nicht so genau wie ich die Logindaten platzieren müsste. Gehe aber davon aus, dass man die bei der Zeile "mqttClient.setServer" hinten anfügen muss.

Die Befehlsreferenz habe ich mir auch schon angeschaut, und auch verschiedenes ausprobiert, aber irgendwie kriege ich das nicht hin. Eine "Client ID" habe ich bis jetzt keine im Server definiert, oder ist das wirklich nur der DeviceName des Print?

Gruss Andi

Der Sketch für UNO und W5100 wird nicht auf dem ESP laufen. Das ist völlig andere Hardware. Auch die Libs sind andere.

Gruß Tommy

Hallo Tommy

Das ist mir absolut klar, sind ja auch verschieden Mikrokontroller mit unterschiedlichem Befehlssatz darum ja auch die verschiedenen Libs. Rund um meinen PC, liegen auch beide Boards rum, ich habe auf dem Weg der Fehlersuche eben einfach mal rasch das Beispiel aus der Arduino IDE genommen und angepasst und raufgepappt um zu schauen ob mein Mosquitto etc wirklich richtig funktioniert.

-> Fazit: Der Uno mit dem W5100 geht richtig, auch wenn im Beispiel für mich noch ganz falsches Zeugs daherkommt aber im Prinzip funktioniert es (logisch auch immer noch ohne Anmeldung).
Beim ESP läuft zwar das Beispiel und zeigt im Seriellen Monitor Werte an, aber das versenden via MQTT funktioniert nicht.

Ich werde jetzt mal versuche das Login mit dem Uno einzurichten und danach mich wieder um den ESP kümmern. Kann es mir zwar nicht vorstellen, aber gibt es evt. Probleme mit der Lib "MQTTClient.h" und dem Mosquitto?

Wenn der Uno läuft, kann ich auch meine Solarmessung mal realisieren, bei der ich mit 1Wire gescheitert bin. Die Messungen liefern alle 0-1V, 0-5V oder gar 0-10V, somit nicht wirklich ein Problem für den Arduino. (so zwischendurch ein Erfolgserlebnis und eine optische Erfolgsanzeige motieviert auch die Familie).

Gruss Andi

Andi_Haus:
gar 0-10V, somit nicht wirklich ein Problem für den Arduino.

Doch, das könnte magischen Rauch produzieren.

Gruß Tommy