Forum: Mikrocontroller und Digitale Elektronik NodeMCU MySQL Webhoster


von Holger L. (max5v)


Lesenswert?

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
static char user[] = "idxxx_xxx"; // SQL-Nutzer
15
static char dbpassword[] = "xxx"; // SQL Kennwort
16
static char db[] = "idxxx_xxx";
17
const char ins1[] = "insert into ardu1 (tmst, intval, strval, floatval) values(now(),";
18
Connector my_conn;
19
20
void setup() {
21
boolean erg;  
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 . . .");
31
  if (my_conn.mysql_connect(server_addr, 3306, user, dbpassword)) {
32
    Serial.println("Connection ok.");
33
    delay(500);
34
  }
35
  else
36
    Serial.println("Connection failed.");
37
38
  erg = my_conn.cmd_query("use ardutest");
39
  Serial.println("use ardutest");
40
  erg = my_conn.cmd_query("insert into ardu1 (tmst, intval, strval, floatval) values( now(),11,'Text54',5.44)");
41
  Serial.println("insert");
42
  my_conn.disconnect();
43
}
44
45
void loop() {
46
}

Es soll nach meiner Recherche angeblich Anbieter geben die solche 
Kommunikationen nicht zulassen, nur wie finde ich das heraus?

von Dirk M. (dirkm)


Lesenswert?

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.

von AVR Mplabx Pickit 4 (Gast)


Lesenswert?

Indem du in ein paar Minuten eine eigene Infrastruktur aufbaust.

Beispielsweise mi Xampp

von nocheinGast (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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!

von Thomas F. (thomas_82)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Harry L. (mysth)


Lesenswert?

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?

von TestX (Gast)


Lesenswert?

mysql als shared library auf einem 4mbyte großen esp8266? ich glaube 
nicht. das sollte doch ohne ende fehler beim linken produzieren....

von Stefan F. (Gast)


Lesenswert?

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.

von Harry L. (mysth)


Lesenswert?

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

: Bearbeitet durch User
von Neverever (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Axel S. (a-za-z0-9)


Lesenswert?

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 :
>
>
1
>   if (my_conn.mysql_connect(server_addr, 3306, user, dbpassword)) {
2
>     Serial.println("Connection ok.");
3
>     delay(500);
4
>   }
5
>   else
6
>     Serial.println("Connection failed.");
7
>

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.

von Jan L. (ranzcopter)


Lesenswert?

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...

von Mein Senf (Gast)


Lesenswert?

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.

von Holger L. (max5v)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.