mobizt / Firebase-ESP-Client

[DEPRECATED]🔥Firebase Arduino Client Library for ESP8266, ESP32 and RP2040 Pico. The complete, fast, secured and reliable Firebase Arduino client library that supports RTDB, Cloud Firestore, Firebase and Google Cloud Storage, Cloud Messaging and Cloud Functions for Firebase.
MIT License
471 stars 100 forks source link

connection refused #574

Closed diaskabdualiev1 closed 11 months ago

diaskabdualiev1 commented 11 months ago

I have been trying to solve the problem for 2 days. After 20-30 minutes of operation, the connection refused error appears

#include <WiFi.h>
#include <Firebase_ESP_Client.h>
#include <addons/TokenHelper.h>
#include <addons/RTDBHelper.h>
#define WIFI_SSID "***"  
#define WIFI_PASSWORD "***"
#define API_KEY "***"
#define DATABASE_URL "****"
//#define API_KEY "****"//database for testing
//#define DATABASE_URL "****" //database for testing
#define USER_EMAIL "***"
#define USER_PASSWORD "****"
#define WM_MACHINE_STREAM_DIRECTORY "/1/input"
unsigned long previousMillis = 0; // Переменная для хранения предыдущего времени
int previosSensorValue = 0;

FirebaseData stream;
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;

FirebaseJsonData washModeJson;
FirebaseJsonData onOffModeJson;
FirebaseJsonData startStopModeJson;

unsigned long sendDataPrevMillis = 0;
unsigned long sendDataPrevSeconds = 0;

const int pin34 = 34;// voltage sensor
const int pin32 = 32;
const int pin33 = 33;
const int pin25 = 25;
const int pin26 = 26;
const int pin18 = 18;// on/off
const int pin19 = 19;// start/stop

int pin18Val = 0;
int pin19Val = 0;
float pin34Val = 0; // value voltage sensor

int sensorValue = 0;  // variable to store the value coming from the sensor
int cnt = 1;
int MXvalue = 0;

int onOffData = 0;//локальные данные с firebase
int startStopData = 0;
int washModeData = 0;
int doorIsBlocked = 0; //когда 0 дверь разблокирован если 1 то дверь заблокирован

bool signupOK = false;
unsigned long count = 0;

const int signals[][4] = {
  {0, 0, 0, 0},
  {1, 0, 0, 0},
  {1, 1, 0, 0},
  {0, 1, 0, 0},
  {0, 1, 0, 1},
  {1, 1, 0, 1},
  {1, 1, 1, 1},
  {0, 1, 1, 1},
  {0, 1, 1, 0},
  {1, 1, 1, 0},
  {1, 0, 1, 0},
  {0, 0, 1, 0},
  {0, 0, 1, 1},
  {1, 0, 1, 1},
  {1, 0, 0, 1},
  {0, 0, 0, 1}
};

const int numSignals = sizeof(signals) / sizeof(signals[0]);

void onOff(){
//  delay(3000);
  pin18Val = 1;
  digitalWrite(pin18, pin18Val);
  Serial.print("Output pin 18: ");
  Serial.println(pin18Val);
  delay(500);
  pin18Val = 0;
  digitalWrite(pin18, pin18Val);
  Serial.print("Output pin 18: ");
  Serial.println(pin18Val);
}
void startStop(){
//  delay(3000);
  pin19Val = 0;
  digitalWrite(pin19, pin19Val);
  Serial.print("Output pin 19: ");
  Serial.println(pin19Val);
  delay(500);
  pin19Val = 1;
  digitalWrite(pin19, pin19Val);
  Serial.print("Output pin 19: ");
  Serial.println(pin19Val);
}
void washMode(){
  if (washModeData >= 1 && washModeData <= numSignals) {
    int index = washModeData - 1;
    int pin32Val = signals[index][0];
    int pin33Val = signals[index][1];
    int pin25Val = signals[index][2];
    int pin26Val = signals[index][3];

    digitalWrite(pin32, pin32Val);
    digitalWrite(pin33, pin33Val);
    digitalWrite(pin25, pin25Val);
    digitalWrite(pin26, pin26Val);

    Serial.print("Output: ");
    Serial.print(pin32Val);
    Serial.print(pin33Val);
    Serial.print(pin25Val);
    Serial.println(pin26Val);
  }else{
    Serial.println("Invalid input. Enter a number between 1 and 16.");
  }
}

void streamTimeoutCallback(bool timeout)
{
  if(timeout){
    // Stream timeout occurred
    Serial.println("Stream timeout, resume streaming...");
  }  
}

void streamCallback(FirebaseStream data) {
  Serial.printf("stream path, %s\nevent path, %s\ndata type, %s\nevent type, %s\n\n",
                data.streamPath().c_str(),
                data.dataPath().c_str(),
                data.dataType().c_str(),
                data.eventType().c_str());
  printResult(data); // see addons/RTDBHelper.h
  Serial.println();
  Serial.printf("Received stream payload size: %d (Max. %d)\n\n", data.payloadLength(), data.maxPayloadLength());

  if(data.dataTypeEnum() == fb_esp_rtdb_data_type_json  && 5000 < sendDataPrevMillis){
    FirebaseJson *json = data.to<FirebaseJson *>();

    json->get(washModeJson, "mode");
    json->get(onOffModeJson, "onOff");
    json->get(startStopModeJson, "startStop");

    if(washModeJson.success ){
      washModeData = washModeJson.to<int>();
      washMode();
      Serial.print("Output with data WashModeData");
      Serial.println(washModeData);
    }

    if(onOffModeJson.success ){
      onOffData = onOffModeJson.to<int>();
      onOff();
      Serial.print("Output with data onOffData");
      Serial.println(onOffData);
    }

    if(startStopModeJson.success){
      startStopData = startStopModeJson.to<int>();
      startStop();
      Serial.print("Output with data startStopData");
      Serial.println(startStopData);
    }
  }
  if (data.dataTypeEnum() == firebase_rtdb_data_type_integer && 5000 < sendDataPrevMillis){
    if(data.dataPath() == "/onOff"){
      onOffData = onOffModeJson.to<int>();
      onOff();
      Serial.print("Output with data onOffData");
      Serial.println(onOffData);
    }
    if(data.dataPath() == "/mode"){
      washModeData = data.to<int>();
      washMode();
      Serial.print("Output with data WashModeData");
      Serial.println(washModeData);
    }
    if(data.dataPath() == "/startStop"){
      startStopData = startStopModeJson.to<int>();
      startStop();
      Serial.print("Output with data startStopData");
      Serial.println(startStopData);
    }
  }
}

void setup()
{
  Serial.begin(115200);

  pinMode(pin32, OUTPUT);
  pinMode(pin33, OUTPUT);
  pinMode(pin25, OUTPUT);
  pinMode(pin26, OUTPUT);
  pinMode(pin18, OUTPUT); //J white on/off
  pinMode(pin19, OUTPUT); //K yellow start/stop
  digitalWrite(pin19, HIGH);

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
  config.api_key = API_KEY;

//  auth.user.email = USER_EMAIL;
//  auth.user.password = USER_PASSWORD;

  /* Assign the RTDB URL (required) */
  config.database_url = DATABASE_URL;

if (Firebase.signUp(&config, &auth, "", "")){
    Serial.println("ok");
    signupOK = true;
  }
  else{
    Serial.printf("%s\n", config.signer.signupError.message.c_str());
  }

  config.token_status_callback = tokenStatusCallback; // see addons/TokenHelper.h
  Firebase.begin(&config, &auth);
//  Firebase.reconnectWiFi(true);

  if (!Firebase.RTDB.beginStream(&stream, WM_MACHINE_STREAM_DIRECTORY))
    Serial.printf("stream begin error, %s\n\n", stream.errorReason().c_str());
  Firebase.RTDB.setStreamCallback(&stream, streamCallback, streamTimeoutCallback);
}

void loop()
{
  if (Firebase.ready() && (millis() - sendDataPrevMillis > 5000 || sendDataPrevMillis == 0)){
    sendDataPrevMillis = millis();
    sendDataPrevSeconds = sendDataPrevMillis / 1000;
    if(Firebase.RTDB.setInt(&fbdo, "/1/output/timer", sendDataPrevSeconds)){
//      Serial.println(premOnOffMode);
    }else{
      Serial.println(fbdo.errorReason());
    }
    if(Firebase.RTDB.setInt(&fbdo, "/1/output/inDoor", doorIsBlocked)){
      Serial.println(doorIsBlocked);
    }else{
      Serial.println(fbdo.errorReason());
    }
  }
  sensorValue = analogRead(pin34);
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= 15) {
    MXvalue=max(MXvalue, sensorValue);
    cnt++;
    if(cnt == 10 && MXvalue > 3500){
      doorIsBlocked = 0;
    }
    else if(cnt == 10) {
      doorIsBlocked = 1;
    }

    if(cnt == 10){
      MXvalue = 0;
      cnt = 0;
    }
    previousMillis = currentMillis;
    previosSensorValue = doorIsBlocked;
  }
  if (doorIsBlocked != previosSensorValue) {
    Serial.println(doorIsBlocked);
  }   
}
mobizt commented 11 months ago

It is the network interruption or internet problem.