Hauptmenü

MQTT kommt nicht an

Begonnen von Marlen, 06 Mai 2019, 20:57:54

Vorheriges Thema - Nächstes Thema

Marlen

Hallo,

ich hab in der Garage einen Wemos D1 mini mit Arduino IDE sende ich hiermit per MQTT an FHEM die Position.

Doch irgendwie kommt ab und an mal nix an.

Hier der Sketch auf dem Wemos:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "./secret.h"

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
int Tor_oben_PIN = D5; // = D5
int Tor_unten_PIN = D4; // = D2
String GPosMerker = "0";
String GPos = "0";

void setup() {
  pinMode(Tor_oben_PIN,INPUT_PULLUP);
  pinMode(Tor_unten_PIN,INPUT_PULLUP);
    Serial.begin(115200);
    setup_wifi();
    client.setServer(MQTT_BROKER, 1883);
}

void setup_wifi() {
    delay(10);
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(SSID);

    WiFi.begin(SSID, PSK);

    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() {
    while (!client.connected()) {
        Serial.print("Reconnecting...");
        if (!client.connect("ESP8266Client")) {
            Serial.print("failed, rc=");
            Serial.print(client.state());
            Serial.println(" retrying in 5 seconds");
            delay(5000);
        }
    }
       client.subscribe("/home/data"); // für empfagen
    Serial.println("MQTT Connected..."); // für empfangen
}
void loop() {

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

// Abfrage Pos oben
if (digitalRead(Tor_oben_PIN) == LOW) {
GPos = "auf";
}
// Abfrage Pos unten
if (digitalRead(Tor_unten_PIN) == LOW) {
GPos = "zu";
}
// Abfrage Pos zwischenpos
if (digitalRead(Tor_unten_PIN) != LOW && digitalRead(Tor_oben_PIN) != LOW) {
GPos = "zwischenpos";
}
// Abfrage Pos zwischenpos
if (digitalRead(Tor_unten_PIN) == LOW && digitalRead(Tor_oben_PIN) == LOW) {
GPos = "FEHLER";
}

if (GPos != GPosMerker) {
GPosMerker = GPos;

char attributes[100];
  GPos.toCharArray( attributes, 100 );


client.publish("/Garage/Tor", attributes );
}
delay(500);
}


Definition in FHEM:
defmod Garage_dummy MQTT_DEVICE
attr Garage_dummy userattr subscribeReading_state
attr Garage_dummy IODev myBroker
attr Garage_dummy devStateIcon zu:Garage_zu auf:Garage_auf fährt_auf:Garage_faehrt_auf fährt_zu:Garage_faehrt_zu Position_verloren:Garage_fehler zwischenpos:Garage_zwischen
attr Garage_dummy group Garagentor
attr Garage_dummy publishSet zu auf /Garage/Tor
attr Garage_dummy room Ausgänge_Funk_GA,MQTT
attr Garage_dummy stateFormat state
attr Garage_dummy subscribeReading_state /Garage/Tor
attr Garage_dummy webCmd zu:auf

setstate Garage_dummy zu
setstate Garage_dummy 2019-05-06 20:23:37 state zu
setstate Garage_dummy 2019-05-06 20:23:37 transmission-state incoming publish received



Und der MQTT Broker:
defmod myBroker MQTT 192.168.178.150:1883
attr myBroker room MQTT

setstate myBroker opened
setstate myBroker 2019-05-06 20:56:00 connection active
setstate myBroker 2019-04-30 22:16:07 state opened



Ich weiß garnicht genau wo ich das suchen beginnen soll.
Manchmal geht es ja auch ganz gut.

Hoffe ihr könnt mir helfen.

LG
   Marlen

Gisbert

Hallo Marlen,

ich bin mittlerweile der Meinung, lieber auf ESPEasy oder Tasmota zu setzen anstelle auf eigene Sketche, da ich genau das von dir beschriebene Verhalten auch beobachtet habe, insbesondere was die Rückmeldung angeht.

Tasmota scheint mittlerweile soweit flexibel zu sein, dass man seine eigenen Geräte definieren kann; ich hab's aber noch nicht ausprobiert.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

pwlr

Moin Marlen,

ich habe vor längerer Zeit auch mal mit einem ESP8266-F rumgespielt. Die Kommunikation via MQTT fand ich schwierig....
Ich habe keine Lösung für Dein Problem, aber vielleicht mal checken:

1. Ist bei subscribeReading_state /Garage/Tor und publishSet ein "/" an der 1. Stelle erlaubt ?
2. Ich würde für subscribeReading_state und publishSet unterschiedliche Werte vergeben, um einen ev. Loop zu vermeiden. Ist aber wohl nur erforderlich, wenn Du Befehle von fhem an das device schickst.
3. Das Device mit lan-ping (Modul PRESENCE) überwachen, ob es Aussetzer auf IP-Ebene gibt. Ggf die Werte zur Analyse mit DbLogInclude speichern (falls Du dbLog installiert hast).
4. Die MQTT-Kommunikation zwischen dem Device und fhem kann man gut mit dem Windows-Tool MQTT.fx (freeware) mitlesen und analysieren.

Viel Erfolg !
Bernd

Marlen

Hallo,

Zitatich habe vor längerer Zeit auch mal mit einem ESP8266-F rumgespielt. Die Kommunikation via MQTT fand ich schwierig....

Wie kommunizierst du jetzt zwischen ESP und FHEM?
Was gibt es noch für Möglichkeiten?

LG
  Marlen

pwlr

Moin,

... immer noch via MQTT (hat mich viele Stunden gekostet) und versuchsweise (aber erst die ersten Gehversuche) über HTTP. Allerdings ist die Programmierung einer HTTP-Seite auf dem ESP auch nicht gerade komfortabel.

Ich habe allerdings den mosquitto-Broker auf meinem PI installiert. Das ging probelemlos und funktioniert. Ich will damit mein fhem auch etwas entlasten, weil die Umgebung zu groß wird und ich den Broker so auch einfach für meine Testumgebung nutzen kann.

Installation mosquitto:
https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung

Moin
Bernd