Hallo Adrian ,
danke für die Unterlagen, schau ich mir die Tage mal an.
Bei meinem Projekt komme ich gerade nicht weiter, die ganze Geschichte mit den RST als Türklingel signal will nicht so recht.Ich bin probeweise mal auf deinen Original Code zurückgegangen und habe von dort angefangen die Fehler zu suchen und habe immer mehr deiner neueren "module" eingebaut , ich habe es es soweit beisammen , dass das Klingelsignal nun auf GPIO 14 mit einer Taste gegen GND gezogen wird , das funktioniert perfekt, die Meldung kommt auch beim broker an und somit auch bei Homekit. Der öffner funktioniert dann genau einmal , dann reconnected der MQTT , dann funktioniert auch das klingeln nicht mehr. sobald der MQTT broker wieder verbunden ist gehts einmal ... dann reconnect ... usw.
Der broker läuft als mosquitto auf der homebridge und läuft, soweit ich das sehe, sehr stabil. ( muss aber dort mal die mosquitto log's checken, das muss ich noch suchen)
Um den Stromverbauch kümmern wir uns dann später , zuerst muss das Ding zuverlässig laufen
Serial Out :
MQTT Connected...
Closing door
It ringed for you!
Received message [Klingelgedrueckt] 11
Nichts kam an
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
MQTT Connected...
Closing door
Received message [Haustueroeffnen] offenoffen
opening door
Haustuer wurde geoeffnet!
Haustuer wird geschlossen!
Haustuer wurde gesichert!
Received message [Haustueroeffnen] offenoffen
opening door
Haustuer wurde geoeffnet!
Haustuer wird geschlossen!
Haustuer wurde gesichert!
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
failed, rc=-2
Reconnecting MQTT...
MQTT Connected...
Closing door
It ringed for you!
Received message [Klingelgedrueckt] 11
Nichts kam anReceived message [Klingelgedrueckt] 00
Nichts kam an
Dafür disconnected das WIFI nicht mehr ( oder ich seh die Meldungen nicht mehr) .. ich habe wegen dem WIFI Problem ausserdem die beiden Lib's ArduninoOTA.h und ESP8266mDNS rauskommentiert.
mein Code im Moment als Anhang , vielleicht siehst du , wo es klemmt ?
Grüsse
Gerold
/*********
©Adrian Zilly
@Tueroeffner
Hardware Lib: ESP8622 NodeMCU 1.0 (ESP12E-Module)
*********/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
//#include <ArduinoOTA.h>
#include <WiFiUdp.h>
//#include <ESP8266mDNS.h>
//--------------------------------------------------
//Define Variables
//int Digits = 0;
//int BattVolt = 0;
//int BattPerc = 0;
//int valA0 = 0;
int StartMerker = 0;
int Start = 0;
int Start2 = 0;
int Start3 = 0;
unsigned long sleepMillis = 10, Sendertime = 10, previousMillis = 10, currentMillis = 10;
const long intervalon = 1000;
const long intervaloff = 1000;
int SendeDelay = 5000;
int WLANTimeout = 30;
int WLANCounts = 0;
int SetSleep = 0;
//--------------------------------------------------
//PARAMETER EINSTELLUNGEN
//Parameter Analogwertauslesen (Digit Korrektur)
//int DigitsCor = 0;
//Sleep Delay Parameter
unsigned long currentSleep, SenderSleep;
const long gosleepdelay = 1200000; //Verzoegerung Schlafen gehen 1000ms = 1s - Set to 100000 (2min.)
//WLAN Setup
const char* SSID = "ABCD"; //WLAN Name
const char* PSK = "EFGH"; //Passwort WLAN
//Pin Setup
//#define BattVoltIn A0 //Analog Input
int Rot = 4; //GPIO LED Rot Tueroffner aktiv
int Gelb = 5; //GPIO Bereitschaft
int Gruen = 12; //GPIO Klingelgedrueckt
int Tueroeffner = 15; //GPIO 15 Tueroeffner --- HIGH
int Klingeltaste = 14; //GPIO 14 Klingeltaste
//--------------------------------------------------
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
int wifi_retry;
//---------------
//void Klingel() {
//Unterprogramm Klingelsignal senden
// digitalWrite(Gruen, HIGH);
// client.publish("Klingelgedrueckt", "1");
// Serial.println("It ringed for you!");
// delay(1000);
// digitalWrite(Gruen, LOW);
// client.publish("Klingelgedrueckt", "0");
//}
//---------------
void Close() {
//Unterprogramm Tuer schließen
Serial.println("Closing door");
client.publish("Haustuerstatuslaueft", "gesichert");
//delay(500);
client.publish("Haustuerstatusist", "gesichert");
client.publish("Haustuer", "Sicherung durchgefuehrt!");
}
//---------------
void Open() {
//Unterprogramm Tuer oeffnen
Serial.println("opening door");
client.publish("Haustuerstatuslaueft", "offen");
client.publish("Haustuerstatuslaueft", "offen");
//delay(500);
digitalWrite(Tueroeffner, HIGH);
client.publish("Haustuerstatusist", "offen");
client.publish("Haustuerstatusist", "offen");
Serial.println("Haustuer wurde geoeffnet!");
delay(1000);
digitalWrite(Tueroeffner, LOW);
client.publish("Haustuerstatuslaueft", "gesichert");
client.publish("Haustuerstatuslaueft", "gesichert");
Serial.println("Haustuer wird geschlossen!");
//delay(500);
client.publish("Haustuerstatusist", "gesichert");
client.publish("Haustuerstatusist", "gesichert");
Serial.println("Haustuer wurde gesichert!");
//delay(500);
}
//void SendAkku() {
//Unterprogramm Akkulevel uebertragen
//client.publish("BatterieLevelTuer", String(BattPerc).c_str(), true);
//client.publish("HaustuerAkkuDigit", String(Digits).c_str(), true);
//String mV = ("mV: " + String(BattVolt));
//client.publish("HaustuerAkku", String(mV).c_str(), true);
//String Perc = ("Perc: " + String(BattPerc));
//client.publish("HaustuerAkku", String(Perc).c_str(), true);
//Serial.print("\nHaustuerAkku:");
//Serial.print(BattPerc);
//Start3++;
//}
//---------------
//Unterprogramm Callback MQTT
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Received message [");
Serial.print(topic);
Serial.print("] ");
char msg[length + 1];
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
msg[i] = (char)payload[i];
}
msg[length] = '\0';
Serial.println(msg);
client.publish("Haustuer", "I got an Order!");
if (strcmp(msg, "gesichert") == 0) {
Close();
}
else if (strcmp(msg, "offen") == 0) {
Open();
}
else {
Serial.print("Nichts kam an");
}
}
//---------------
void setup() {
//Cleanup
ESP.eraseConfig();
WiFi.disconnect();
Serial.begin(115200);
//PIN Setup
pinMode(Tueroeffner, OUTPUT); //Relais Tueroeffner
pinMode(Gelb, OUTPUT); //Bereitschaft
pinMode(Rot , OUTPUT); //LED Tueroeffner
digitalWrite(Tueroeffner, LOW); //low = Zu - HIGH = Oeffnen
pinMode(Klingeltaste, INPUT_PULLUP); //Eingang Klingel
pinMode(Gruen, OUTPUT); //Klingelsignal
digitalWrite(Gruen, HIGH); //Klingel gedrückt
delay(100);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PSK);
while (WiFi.status() != WL_CONNECTED && WLANTimeout > WLANCounts) {
delay(500);
WLANCounts++;
Serial.print("\n Wifi Connecting..");
Serial.print("\n Trys:");
Serial.print(WLANCounts);
Serial.print("/");
Serial.print(WLANTimeout);
}
if (WLANCounts >= WLANTimeout) {
ESP.restart();
}
else {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
WLANCounts = 0;
}
client.setServer("192.168.1.217", 1883);
client.setCallback(callback);
}
//---------------
//Unterprogramm Neu Verbinden MQTT
void reconnect() {
while (!client.connected()) {
Serial.println("\nReconnecting MQTT...");
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
if (!client.connect(clientId.c_str())) {
Serial.print("failed, rc=");
Serial.print(client.state());
delay(1000);
}
else {
client.subscribe("Haustueroeffnen");
client.publish("HaustuerStatus", "MQTT Connected");
char buf[16];
sprintf(buf, "%d", StartMerker);
const char* SendMerker = buf;
client.publish("HaustuerStatus", SendMerker);
Serial.println("MQTT Connected...");
Close();
}
}
}
//----------------------------------------
void loop() {
if (!client.connected()) {
reconnect();
}
if (digitalRead(Klingeltaste) == LOW) {
digitalWrite(Gruen, HIGH);
Serial.println("It ringed for you!");
client.subscribe("Klingelgedrueckt");
client.publish("Klingelgedrueckt", "1");
delay(1000);
digitalWrite(Gruen, LOW);
client.publish("Klingelgedrueckt", "0");
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= intervaloff) {
previousMillis = currentMillis;
digitalWrite(Gelb, HIGH);
}
else if (currentMillis - previousMillis >= intervalon) {
digitalWrite(Gelb, LOW);
}
//WLAN noch verbunden? Andernfalls neu verbinden
if (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("WLAN not connected, reconnecting...");
wifi_retry = 0;
while (WiFi.status() != WL_CONNECTED && wifi_retry < 30) {
Serial.println(wifi_retry);
wifi_retry++;
Serial.println("WiFi not connected. Try to reconnect");
delay(500);
}
//Falls zu oft Verbindungsversuch durchgefuehrt wurde, ESP neu starten
if (wifi_retry >= 30) {
Serial.println("\nReboot");
ESP.restart();
}
}
client.loop();
//Variable ablegen mit der aktuellen Zeit fuer Ueberpruefung Schlafengehen
currentSleep = millis();
//Ueberpruefen ob zeit zum schlafen ist
if (currentSleep - sleepMillis >= gosleepdelay && client.connected() && WiFi.status() == WL_CONNECTED) {
//WLAN und MQTT noch verbunden? Andernfalls neu verbinden
if (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("WLAN not connected, reconnecting...");
while (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi not connected. Try to reconnect");
delay(500);
}
}
if (!client.connected()) {
reconnect();
}
//Ausgaenge für Schlafen vorbereiten
//sleepMillis = currentSleep;
//Ausgaenge für Schlafen vorbereiten
//digitalWrite(Tueroeffner, LOW);
//digitalWrite(Gruen, LOW);
//digitalWrite(Gelb, LOW);
//digitalWrite(Rot, LOW);
//Mitteliung dass Deepsleep gestartet wird.
//client.publish("Haustuer", "END WIFI NOW and go Sleep...");
//client.publish("Haustuer", "go sleeping...");
//ESP schlafen legen
//delay(1000);
//Serial.println("END WIFI");
//WiFi.mode(WIFI_OFF);
//delay(1000);
//Serial.println("Deepsleep Now..");
//delay(500);
//ESP.deepSleep(0);
//delay(200000);
}
}
//--------------------------------------------------
Alles anzeigen