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
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
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
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
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 (https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung)
Moin
Bernd