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
  ESP über HTTPS Fingerabdruck/Zertifikat HeKe 4 161 Gestern 03:38
Letzter Beitrag: HeKe
  AES256 / SHA384 Chiffren bei HTTPS requests mit ESP32 nutzen TBMSam 0 112 23.11.2020 13:47
Letzter Beitrag: TBMSam
  Hilfe bei async-mqtt-client für ESP32 amshh 7 321 12.11.2020 09:19
Letzter Beitrag: amithlon
  wert an client schicken während Deepsleep mqtt & ibroker stevensen 13 811 06.11.2020 21:07
Letzter Beitrag: nbk83
  Wemos D1 mini (8266) und OTA Probleme Arduino4Fun 55 2.839 16.10.2020 21:30
Letzter Beitrag: hotsystems
  ESP8266 - MQTT Probleme mit SSL decrypt tenor 8 1.000 22.09.2020 19:33
Letzter Beitrag: tenor
  remoteIP() mit Client.h? miq19 6 774 11.09.2020 10:21
Letzter Beitrag: miq19
  ESP32 "ESP32 BLE Keyboard library" und Pairing Probleme Arduino4Fun 0 801 23.05.2020 18:47
Letzter Beitrag: Arduino4Fun
  Seit heute 17.05.2020 Probleme mit UDP DO3GE 14 1.952 18.05.2020 19:04
Letzter Beitrag: Fips
  Pwd Abfragen das Client beim Verbindungsversuch übergibt Fips 2 767 17.04.2020 08:28
Letzter Beitrag: Fips

Gehe zu:


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