Moin,
ich versuche schon geraume Zeit MySQL Daten an meine Webseite zu senden.
Entweder ich mache dort etwas verkehrt, oder es liegt an dem Webhoster.
Nur kann ich nicht wissen ob es an dem Code liegt oder überhaupt nicht
möglich ist.
Hier einer der versuchten, am simpelsten gestrickten Testcodes.
Verwendet wird www.000webhost.com.
Wifi verbindet zuverlässig, nur my_conn.mysql läuft eben nicht :
1
#include<ESP8266WiFi.h>
2
#include<Hash.h>
3
#include<MySQL.h>
4
5
// WLAN
6
// das bitte ändern
7
// <= 31 Zeichen
8
char*ssid="xxx";
9
// >= 8 oder <= 63 Zeichen oder NULL
10
char*password="xxx";
11
12
// DB
13
char*server_addr="http://xxx.000webhost.com/";
14
staticcharuser[]="idxxx_xxx";// SQL-Nutzer
15
staticchardbpassword[]="xxx";// SQL Kennwort
16
staticchardb[]="idxxx_xxx";
17
constcharins1[]="insert into ardu1 (tmst, intval, strval, floatval) values(now(),";
18
Connectormy_conn;
19
20
voidsetup(){
21
booleanerg;
22
Serial.begin(9600);
23
//sp(115200);
24
Serial.println("\nStart");
25
while(WiFi.status()!=WL_CONNECTED){
26
delay(500);
27
Serial.print(".");
28
}
29
30
Serial.println("\nConnected to Wifi. Connecting to database . . .");
Moin,
kenne keinen Hoster der externen MySQL Zugriff erlaub.
Du solltest ein kleines PHP Script auf deinen Webspace legen, was die
Daten vom ESP8266 per HTTP GET/POST empfängt und in die Datenbank
schreibt.
Vielleicht einfach mal einen normalen Desktop-Client bzw. "mysql"
benutzen und probieren, dass du dich mit dem Server verbindest?
> Serial.println("Connection failed.");
Hilfreich ist diese Meldung halt leider nicht.
Ich glaube nicht, dass du deine DB einfach so mit Klartext ansprechen
kannst, wie man das mit einem Terminal machen würde.
Du brauchst einen MySQL Client oder Treiber, denn du in ein Programm auf
deinem Webserver integrierst. Meine erste Wahl wäre dafür auch PHP.
Security-Technisch ist das, was du da vor hast (beliebige Statements
ausführen) ein absolute No-No-No-No-No-Go!
HTML/GET (in der form
http://meinedomain.de/empfang.php?temperatur=18&ort=Garten .....) habe
ich mal bei einem der bekannteren Hoster probiert, über NODEMCU ging es
nicht wenn ich aber die "GET-Adresse" im Browser eingegeben habe hat es
funktioniert. Da ich deshalb dort eine Firewall vermute bin ich dann bei
der etwas langsamen NAS geblieben.
Programmierung damals mit der Arduino IDE.
Evtl. wäre es möglich die Header Daten bzw. User Agent abzuändern um die
Firewall auszutricksen, allerdings vermute ich das bei den meisten
Hostern verdammt gute Admins sitzen welche die meisten tricks kennen und
entsprechende Vorkehrungen getroffen haben.
SQL Zugriff im Allgemeinen ist bei den Meisten Hostern nur möglich wenn
das script auf dem Server liegt. Evtl. ist es bei dem ein oder anderen
möglich im Backend "Fremdzugriff" zu erlauben.
Es gibt Datenbanken für speziell für IOT Anwendungen, allerdings habe
ich mich damit noch nicht beschäftigt.
Stefanus F. schrieb:> Thomas F. schrieb:>> Es gibt Datenbanken für speziell für IOT Anwendungen, allerdings habe>> ich mich damit noch nicht beschäftigt.>> Zum Beispiel MQTT.
Seit wann ist MQTT eine Datenbank?
Und was unterscheidet eine Datenbank für IoT von den anderen
Datenbanken?
Harry L. schrieb:>>> Es gibt Datenbanken für speziell für IOT Anwendungen, allerdings habe>>> ich mich damit noch nicht beschäftigt.>> Zum Beispiel MQTT.> Seit wann ist MQTT eine Datenbank?
Unter dem Stichwort findet der TO eine gängige Lösung für genau sein
Problem.
Erkläre doch selber, was deiner Meinung nach MQTT genau bedeutet. Bei
der Gelegenheit kannst du auch gleich die allgemeine Verwendung von den
Begriffen Linux, LCD Display, SMS Nachricht und Ethernet versus WLAN,
Akku versus Batterie, usw. korrigieren. Mit etwas Glück interessiert es
jemanden.
Stefanus F. schrieb:> Erkläre doch selber, was deiner Meinung nach MQTT genau bedeutet. Bei> der Gelegenheit kannst du auch gleich die allgemeine Verwendung von den> Begriffen Linux, LCD Display, SMS Nachricht und Ethernet versus WLAN,> Akku versus Batterie, usw. korrigieren. Mit etwas Glück interessiert es> jemanden.
Besser als Wikipedia kann ich das auch nicht erklären:
> MQTT (Message Queuing Telemetry Transport) ist ein offenes Nachrichtenprotokoll> für Machine-to-Machine-Kommunikation (M2M), das die Übertragung von> Telemetriedaten in Form von Nachrichten zwischen Geräten ermöglicht, trotz> hoher Verzögerungen oder beschränkter Netzwerke.
Das hat mit Datenbanken nun wirklich nicht das Geringste zu tun.
https://de.wikipedia.org/wiki/MQTT
TestX schrieb:> mysql als shared library auf einem 4mbyte großen esp8266? ich glaube> nicht. das sollte doch ohne ende fehler beim linken produzieren....
1. Kann man auch mehr Flash auflöten
2. Gibt es auch Libs für den Direktzugriff:
https://github.com/ChuckBell/MySQL_Connector_Arduino
Neverever schrieb:> 1. Kann man auch mehr Flash auflöten
Der ESP8266 kann nur 1MB vom Flash Speicher als Programmspeicher
adressieren. Der Rest ist nur für Daten (oder vom Programm
interpretierte Scripte) nutzbar.
Holger L. schrieb:>> ich versuche schon geraume Zeit MySQL Daten an meine Webseite zu senden.
Wohl nicht. Du versuchst, eine direkte Verbindung zum MySQL-Server bei
deinem Hoster aufzubauen. "MySQL Server" != "Webseite"
> Hier einer der versuchten, am simpelsten gestrickten Testcodes.> Wifi verbindet zuverlässig, nur my_conn.mysql läuft eben nicht :>>
Tja. Das hätte man deutlich schlauer anfangen können. Dein MySQL
Connector (für Arduino?) wird ja wohl Methoden haben, um detailliertere
Fehlermeldungen als nur "geht nicht" auszugeben.
> Es soll nach meiner Recherche angeblich Anbieter geben die solche> Kommunikationen nicht zulassen, nur wie finde ich das heraus?
Indem du einfach den MySQL Kommandozeilenclient auf deinem PC startest
und versuchst, dich mit dem MySQL Server bei deinem Hoster zu verbinden?
Jede Wette, daß das nicht geht. Das MySQL Protokoll ist weitgehend
Klartext. Niemand mit auch nur einer aktiven Hirnzelle wird das für den
Zugriff über das Internet öffnen. Es gibt zwar die Option für SSL, aber
das wird deinen ESP überfordern.
TestX schrieb:> mysql als shared library auf einem 4mbyte großen esp8266? ich> glaube nicht.
Das MySQL Protokoll ist relativ schlank. Der MySQL Connector für Arduino
implementiert das (auf den ersten Blick) direkt. Ohne den Rückgriff auf
libmysqlclient o.ä. Wenn man sich auf die BASICs beschränkt, also im
wesentlichen Login und COM_QUERY, dann reichen wenige KB dafür.
Dann geht zwar weder SSL noch Kompression. Auch keine prepared
statements oder das BLOB API. Aber auf alles das kann man notfalls auch
verzichten.
Axel S. schrieb:> Holger L. schrieb:>>>> ich versuche schon geraume Zeit MySQL Daten an meine Webseite zu senden.>> Wohl nicht. Du versuchst, eine direkte Verbindung zum MySQL-Server bei> deinem Hoster aufzubauen. "MySQL Server" != "Webseite">
Selbst das noch nicht ;) - ein ‚mysql-server‘ heisst niemals
‚https://...‘ (server_addr). Auf Nummer Sicher geht man da mit der
IP-Adresse, es sei denn, DNS funktioniert, und dann ohne die
Protokollangabe...
Holger L. schrieb:> Moin,> Es soll nach meiner Recherche angeblich Anbieter geben die solche> Kommunikationen nicht zulassen, nur wie finde ich das heraus?
Nimm einen Vserver und gut ist.
Ich bin jetzt durch Zufall auf die Information gestoßen, es geht und es
geht nicht.
Wenn man sich einen Premium Account bucht kann man den direkten Zugriff
erlauben, der Betreiber rät davon allerdings ab.
Da ich mich mit diesem Internetgelumpe noch nie richtig auseinander
gesetzt habe ist es halt schwierig, besonders wenn man dann noch in ein
komplett neues Gebiet wie den NodMcu einsteigt. Deshalb wollte ich
einfachen CopyPaste Code verwenden. Nur so zur Erklärung...
Es sind ja ein paar Vorschläge vorhanden, da werde ich mal ein wenig
ausprobieren.