INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme bei der Kombination Firebase/HTTPS client
05.11.2020, 15:05
Beitrag #9
RE: Probleme bei der Kombination Firebase/HTTPS client
Noch ein interessanter Aspekt

Wenn ich aus dem dynamisch erstellten String buffer[len] ein Array fester Länge mache und es statisch vorbelege (mit den gleichen Keys, die sonst aus der Datenbank kämen), dann funktioniert der anschließende HTTPS-Request jeweils einwandfrei.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.11.2020, 15:17
Beitrag #10
RE: Probleme bei der Kombination Firebase/HTTPS client
Dann lass Dir die Strings mal in HEX ausgeben, ob da evtl. Steuerzeichen drin sind.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.11.2020, 16:30
Beitrag #11
RE: Probleme bei der Kombination Firebase/HTTPS client
Ich hab's hinbekommen

Das Kernthema: Akribische Trennung von Verbindungen

- Das buffer-Array wird in fester Länge vorgegeben (aber nicht statisch belegt)
- Firebase holt sich die Daten in setup(). Das Firebase-Objekt wird am Ende von Setup disposed
- Die Keys aus den Daten werden in den buffer geschrieben (globales Array)
- In loop wird jeweils nur EIN Key aus dem Buffer ausgelesen. Ein globaler Counter zählt mit, wo man sich im buffer befindet
- Das Schreiben nach Firebase findet erst statt, wenn der HTTPS-Request beendet und der Client gestoppt wurde. Dafür wird jedesmal ein neues Firebase-Objekt erzeugt
- Am Ende ein delay(500) vor dem nächsten Loop-Aufruf
- Wenn der buffer abgearbeitet ist, dann deepSleep für 60 Minuten

FERTIG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.11.2020, 16:33
Beitrag #12
RE: Probleme bei der Kombination Firebase/HTTPS client
Glückwunsch und danke für die Rückmeldung.
Kannst Du Deinen funktionierenden Code noch hier einstellen? Evtl. kann den mal jemand gebrauchen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.11.2020, 16:39
Beitrag #13
RE: Probleme bei der Kombination Firebase/HTTPS client
Hier der Code

Code:
#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <WiFiClientSecureBearSSL.h>


#include <WiFiClient.h>
#include <Wire.h>
#include <SSD1306.h>

#include <FirebaseESP8266.h>

#define FIREBASE_HOST "xxxxxxxxxxxxxxxxxxxx"
#define FIREBASE_AUTH "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"

#define OLED_ADDRESS                0x3C //you may need to change this, this is the OLED I2C address.  
#define LED_PIN                     D5

SSD1306 display(OLED_ADDRESS, D2, D1);

const char* host = "abc.com";
const int httpsPort = 443;

String videoId;

ESP8266WiFiMulti WiFiMulti;

FirebaseData firebaseData;

String buffer[163];
size_t bufferlen = 0;

void setup() {
  
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  Serial.begin(115200);

  display.init();

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  display.drawString(0, 0, "Connecting to Wifi....");
  display.display();

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("aaaaaaaaaaaaaaa", bbbbbbbbbbbbbbbbbbbbbbb");

  while(WiFiMulti.run() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  display.setFont(ArialMT_Plain_10);
  display.drawString(0, 15, "Connected!");
  display.display();
  digitalWrite(LED_PIN, HIGH);

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.reconnectWiFi(true);
  firebaseData.setBSSLBufferSize(3072, 512);
  firebaseData.setResponseSize(3072);
  
  if(Firebase.get(firebaseData, "/my/path")){
    Serial.print("Read object of type ");
    Serial.println(firebaseData.dataType());

    FirebaseJson& json = firebaseData.jsonObject();
    bufferlen = json.iteratorBegin();
    String key, value = "";
    int type = 0;
    for (size_t i = 0; i < bufferlen; i++)
    {
        json.iteratorGet(i, type, key, value);
        buffer[i] = key;
    }
    json.iteratorEnd();
  }
}

int counter = 0;
void loop() {
  String currentId = buffer[counter];
  WiFiClientSecure client;
  client.setInsecure();

  if (!client.connect(host, httpsPort)) {
    Serial.println("connection failed");
  } else {

    String code;
    String url = "/" + currentId;
    
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "User-Agent: ESP8266IOT\r\n" +
                 "Connection: close\r\n\r\n");
  
    bool gefunden = false;
    while (client.connected()) {
      String line = client.readStringUntil('\n');
      if (line == "\r") {
        Serial.println("headers received");
        break;
      }
      while (client.available()) {
        String line = client.readStringUntil('\n');
        int idx = line.indexOf("source: ") + 9;
        if(idx != 8) {
          String restLine = line.substring(idx);
          int endIdx = restLine.indexOf("'");
          code = restLine.substring(0, endIdx);
  
          code = decodeUri(code);
          
          Serial.println("Code:" + code);
          code = normalize(code);
          
          Serial.println("Normalized:" + code);

          gefunden = true;
          break;
        }
      }
      if(gefunden)
        break;
    }

    client.stop();

    Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
    Firebase.reconnectWiFi(true);
    firebaseData.setBSSLBufferSize(512, 512);
    firebaseData.setResponseSize(512);
  
    Firebase.setString(firebaseData, "/my/path/" + currentId, code);
    display.clear();
    display.setFont(ArialMT_Plain_10);
    char buffer[22];
    sprintf(buffer, "Video Nr. %d von %d", (counter+1), bufferlen);
    String drawString = String(buffer);
    display.drawString(0, 0, drawString);
    display.display();
  }

  counter++;

  if(counter >= bufferlen) {
    display.clear();
    display.display();

    // sleep one hour
    ESP.deepSleep(3600000000);
    delay(100);
  } else {
    delay(500);
  }
}

String normalize(String obfuscated) {
  String result = "";
  for(int i=0; i<obfuscated.length(); i++) {
    int current = (int)(obfuscated.charAt(i)) + 47;
    current = current > 126 ? current - 94 : current;
    result += (char) current;
  }
  return result;
}

String decodeUri(String encoded) {
  String result = "";
  for(int i=0; i<encoded.length(); i++) {
    if(encoded.charAt(i) == '%') {
      if(encoded.length() > i+2) {
        result += (char)(from_hex(encoded.charAt(i+1)) << 4 | from_hex(encoded.charAt(i+2)));
        i += 2;
      }
    } else if(encoded.charAt(i) == '+') {
      result += ' ';
    } else {
      result += encoded.charAt(i);
    }
  }
  return result;
}

char from_hex(char ch) {
  return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.11.2020, 16:47
Beitrag #14
RE: Probleme bei der Kombination Firebase/HTTPS client
Danke.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Daten zwischen 2 esp (Client-Server) mat-sche 8 483 16.07.2021 21:47
Letzter Beitrag: nbk83
Brick SOLVED: "client.get" wird im Loop nur einmal ausgeführt Majocchi 8 1.199 19.05.2021 19:07
Letzter Beitrag: Tommy56
  Probleme mit Motor-Shield hajo 11 1.292 06.05.2021 22:01
Letzter Beitrag: Chopp
  Client(ESP8266) und Webserver(ESP32) Dahabcon 14 1.933 25.04.2021 20:32
Letzter Beitrag: Tommy56
  Probleme mit DHT22 Sensor wonk 22 2.782 23.04.2021 19:52
Letzter Beitrag: wonk
  Wemos D1 mini (8266) und OTA Probleme Arduino4Fun 58 8.207 28.03.2021 17:12
Letzter Beitrag: miq19
  ESP32 Mail Client stefan.hild@t-online.de 20 2.496 06.02.2021 22:16
Letzter Beitrag: Corvus
  Esp8266 - Client, immer wieder ... rev.antun 37 3.603 19.01.2021 23:09
Letzter Beitrag: rev.antun
Question ESP32 als BLE client, int to 2byte Wert reisner 3 855 07.01.2021 18:13
Letzter Beitrag: Tommy56
  ESP über HTTPS Fingerabdruck/Zertifikat HeKe 4 1.000 26.11.2020 03:38
Letzter Beitrag: HeKe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste