Datenaustausch zwischen externer webseite und ESP(32)

Hi,

mal allgemein eine Frage in die Runde:

Welche Möglichkeiten gibt es denn, um Datenaustausch/Kommunikation zwischen einem externen Server (z.B. PHP Application mit MySQL-Anbindung) und einem ESP32 herzustellen.

Die Richtung ESP --> externer Server ist mir geläufig.
Da mach ich es z.B. so, dass ich per HTTP(S) eine URL aufrufe und damit z.B. einen Eintrag in eine Datenbank auslöse. D.h. der ESP ruft z.B. "https://meinserver.de/meinscript.php?name=franz&alter=67" auf und das Script auf der Gegenseite macht dann einen Eintrag in eine Datenbank.
Ist natürlich nur ein Beispiel, MQTT und Konsorten gibts ja auch noch.

Aber welche Möglichkeiten gibts denn von der anderen Richtung her? Also Externer Server --> ESP?

Wenn ich in der externen Datenbank z.B. das Alter vom Franzl auf 68 erhöhe. Wie bekommt der ESP das am schnellsten / zuverlässigsten mit? Unsinnig erscheint mir, dass ich alle x Sekunden per HTTP einen Anfrage starte und mir per Response das Alter zurückgeben lasse - sprich AKTIV nach einer Datenänderung suche. Zumla ich ja u.U. gar nicht weiß, "was" ich fragen soll.

Welche Möglichkeiten gibt es denn, einen ESP von außen anzustupsen, wenn eine Datenänderung erfolgt ist, bzw. die Daten direkt zu schicken?

Würde mich freuen, wenn ihr eure Erfahrungen hier mit mir teilt.

LG
Daniel

So auf die Schnelle würde mir eine Websocket-Verbindung einfallen. Der ESP als Client.
Dazu wirst Du aber ein (großes) Loch in Deine Firewall bohren müssen.

Gruß Tommy

Das hab ich fast befürchtet.
Ich denk mal ohne die Firewall beleidigen zu müssen, geht sowas gar nicht.
Also wahrscheinlich doch nur, in dem der ESP den Webserver aktiv "fragt".

Doch geht schon mit MQTT and MQTT server. Webseite post nach MQTT server ESP lese die MQTT nachrichten. ESP post nach MQTT server und Webseite lese die MQTT Dateien.

Habe ich leider nicht, aber eine Idee:

ESP32 als Client und als Server einrichten. Externe Datenbank fragt ESP-Server "möchtest Du neue Daten?", der ESP-Client holt sich dann Daten vom Datenbank-Server.

und genau hierauf zwei meine Frage:
Wie könnte so ein Anstupser aussehen?

Aktuell wäre meine Lösung eben nur, dass der ESP der aktive Teil ist, d.h. alle x Sekunden per URL-Aufruf den Server kontaktiert und der dem ESP dann u.U. mitteilt, dass was in der Datenbank gelaufen ist und im besten Fall gleich die Daten mitgibt.

Aber wie könnte es aussehen, dass die Externe Datenbank der aktive Part ist und den ESP fragt?

Du hast nicht zufälligerweise ein Beispiel?

Im prinzip ist es doch genau das gleiche: auf deinem Webserver startest du ein client script bei Veränderung und das postet daten auf den ESP - der in diesem Fall ein Server ist.

und wie das geht ist mir noch nicht klar, sorry ;-(

Sagen wir, der ESP hat die IP-Adresse (http://)192.168.178.23.

Nun kann ich doch nicht einfach von Extern diese IP-Adresse aufrufen (also z.B. http://192.168.178.23/meineseite?name=franz&alter=68) da diese doch in meinem Netzwerk ist und nicht von außen zugänglich.

Oder stehe ich hier auf der Leitung (was durchaus sein kann)?

D.h. wie kann eine externe Seite etwas auf den ESP posten?

Helfen dir die Stichworte:
Dyndns um deiner Public ip einen Namen zu geben.
Portforwarding am Router um von einem Externen Port auf den ESP zu kommen.
PS daten schickt man mit POST nicht angehängt an den GET URL

Yep, dass sagt mit alles was und hab ich auch schon gemacht.
Aber dann wären wir wieder am Punkt, dass sowas ohne Portfreigabe nicht geht.
D.h. ich

D.h. dann wäre sowas wie MQTT evtl. doch der beste Weg.
Der ESP abonniert ein Topic und fragt alle x sekunden / Minuten nach einem Post?

Dann bist halt bei einem Pullsystem. Da kannst gleich deinen externen Webserver periodisch abfragen.

Ansonsten halt wie schon erwähnt ein websocket. Gibts da wo ein gutes ESP beispiel?

OK, dann wird das meine Lösung sein.
Bleibt nur noch die Frage, was pull-mäßig die smarteste Lösung ist.
MQTT oder per HTTP?

Der Ansatz ist ja quasi auch pull. Ich muss ja dann auch alle x sekunden/minuten per MQTT eine Anfrage stellen, korrekt?

Ich such mich mal durch die MQTT-Beispiele durch.

vielleicht wäre auch firebase etwas

kommt halt darauf an wie viel Daten du da durch die Gegend schaufeln möchtest

Hört sich nach einer interessanten Sache an. Aber da ist man dann halt wieder von Google anhängig und braucht nen API Key usw.
Ich will lieber ne unabhängige Lösung gekoppelt mit einer einfachen, selbstgehosteten PHP/MySQL Applikation. Irgendwie so

Der mit dem gefährlichen Halbwissen fragt: "Ist das schlimm?"

Hat Windows nicht ganz viele Ports offen, kommt es da auf einen mehr an?

Oder andersherum gefragt, was könnte passieren, was Du nicht willst?

Du bringst da einiges durcheinander. Die "offenen Ports von Windows" sind nur im lokalen Netz erreichbar.
Portfreigabe heißt vereinfacht: Ich gebe von außen (Internet) den von außen initiierten Zugriff auf einen Port innerhalb meines lokalen Netzes frei, bohre also ein Loch in meine Abschottung nach außen.
Normalerweise werden Verbindungen immer von innen initialisiert.

Gruß Tommy

Es ist ein Zugang zu deinem LAN.
Wenn da ein ESP dran hängt,
Der ESP ein HTTP Update erlaubt,
dann könnte der Blackhat ja auch was anderes draufspielen.
Wenn er mit dem ESP deinen Gartenhäcksler einschalten kann - ist das vieleicht auch nicht gesund.

Man könnten den ESP in ein anderes Netz stellen. Einige Router unterstützen eine DMZ. Dann muss selber auch "von außen" darauf zugreifen.

Ich bin jetzt kein EDV-Profi, aber ich dachte eigentlich schon immer, dass eine Portfreigabe ein paar Tücken / Gefahren mit sich bringt. Aber evtl. hast du Recht und ich seh das zu eng.

Dennoch wäre mir eine Lösung lieber gewesen, die keine Portfreigabe voraussetzt.

:rofl:

Kannst du das mal genauer ausführen?
Ich bringe die Frage mal platt auf den Punkt:

Ich öffne irgendeine exotische Portnummer zum Beispiel 49541 im Sinne von die Firewall im Router leitet Anfragen auf diesem Port weiter und schon können mit dem entsprechenden Fachwissen meine ganzen Rechner die im lokalen LAN/WLAN sind mit Trojanern / Ransomware infiziert werden?

Hängt davon ab welches Service an diesem Port lauscht.
Darum schrieb ich oben ja von einem ESP mit HTTP Update.
Wenn ein Blackhat diesen Port findet,
Kann er da auch einen Sketch aufbringen.
Der Sketch kann dann durchaus ungewünschte Sachen im Netz machen.
Was auf deinen Rechnern auf 49541 läuft weis ich nicht. Fantasie hat es.