Zapis hodnoty do DB

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Zapis hodnoty do DB

Příspěvek od Kony » 15 zář 2020, 21:36

Ahoj, snažím se zapsat změnu do logu do DB

v arduinu mám :

Kód: Vybrat vše

#include <SPI.h>
#include <UIPEthernet.h> // Used for Ethernet
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x78, 0xEE  };
unsigned long cas = 0;
// ********************************************
// ***************EDITACE *********************
// ********NUTNO DODRŽET ADRESU SOUBORU *******
// ********/reset1.php reset2.php *******
// ********************************************
// **** NASTAVENI SITE****
IPAddress ip(192, 168, 1, 82);      //IP ADRESA
IPAddress gateway(192, 168, 1, 1);  // VYCHOZI BRANA
IPAddress subnet(255, 255, 255, 0); // MASKA
IPAddress dnServer(8, 8, 4, 4);     // DNS
int ID_MODULU = 2;
char serverName[] = "xxx.eu"; // webserver
// ********************************************
// ********************************************
// ********************************************

EthernetClient client;

void setup() {
  Serial.begin(9600);
  pinMode(4, OUTPUT);
  Ethernet.begin(mac, ip, dnServer, gateway, subnet);
  Serial.print("ip-");
  Serial.println( Ethernet.localIP());
  Serial.print("Subnet mask-");
  Serial.println( Ethernet.subnetMask());
  Serial.print("Gateway-");
  Serial.println( Ethernet.gatewayIP());
  Serial.print("DNS-");
  Serial.println( Ethernet.dnsServerIP());
}

void loop() {
  if (millis() - cas >= 6000 || cas == 0) {
    cas = millis();
    if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
      client.print("GET http://xxx.eu/reset");
      client.print(ID_MODULU);
      client.println(".php HTTP/1.0");
      client.println("Host: xxx.eu");
      client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
      client.println("Connection: close");
      client.println();
      delay(1000);
      while (client.connected()) {
        String line = client.readStringUntil('\n');
     //   Serial.println(line); //ak chceme vypísať HTTP header
        if (line == "\r") {
          break;
        }
      }
      String line = client.readStringUntil('\n');
      Serial.println("Nacitany payload response:");
      Serial.println(line); //odpoveď webservera - naše dáta
      if(line=="0"){
        digitalWrite(4, LOW); 
        if (client.connect(serverName, 80)) {
        client.print("GET http://xxx.eu/logger.php?text=Čidlo číslo ");
        client.print(ID_MODULU);
        client.println(" vypnuto");
        client.println("Host: kxxx.eu");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        }
      }
        else if(line=="1"){
        digitalWrite(4, HIGH); 
        if (client.connect(serverName, 80)) {
        client.print("GET http://xxx.eu/logger.php?text=Čidlo číslo ");
        client.print(ID_MODULU);
        client.println(" zapnuto");
        client.println("Host: xxx.eu");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        }
       }
    }
    } else {
      Serial.println("Pripojenie na webserver sa nepodarilo");
    }
    client.stop();
}
a v php :

Kód: Vybrat vše

<?php
        $server = "localhost";
        $user = "kony";
        $pass = "heslo";
        $db = "jirka";

        $mysqli = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL
                $datum = StrFTime("%Y-%m-%d_%H:%M:%S", Time());
                if($mysqli && isset($_GET['text'])){ //pokud GET obsahuje 'hodnota', pokračuj
                $text = sanitize($_GET['text']);
                $sql = "INSERT INTO log (text, time) VALUES ('".$text."', '".$datum."')"; //sestavení SQL
                $doSql = $mysqli->query($sql); //vykonání SQL
                if($doSql){ //test úspěchu
                        echo 'Zápis byl úspěšný';
                        echo $datum;

                }
                else{
                        echo 'Něco se nepovedlo';
                        echo $datum;
                }

        }
        else{
                echo "Neco je špatně";
        }

        function sanitize($input){ //ořízne řetězec
                $input = htmlspecialchars($input);
                $input = htmlentities($input);
                $input = strip_tags($input);
                $input = trim($input);
                return $input;
        }
?>
DB :
ID : ID
time : Timestamp
text : prosty text


a ani zaboha nemůžu přijít co je špatně

mart-in
Příspěvky: 16
Registrován: 27 kvě 2020, 21:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od mart-in » 15 zář 2020, 22:21

Zdravím,
a co to teda dělá nebo nedělá?

Kód: Vybrat vše

client.print("GET http://xxx.eu/logger.php?text=Čidlo číslo ");
Po zběžném rychlo přečtení tvého kódu mi tohle přijde podezřelé, používáš tam českou diakritiku a navíc mezery.

EDIT:

Kód: Vybrat vše

client.println("Host: kxxx.eu");
To "k" tam má být?

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 16 zář 2020, 08:00

Zkousel jsem to i bez diakritiky, bez mezer a je to samy...
ad client.println("Host: kxxx.eu");
Tohle nevad, to jsem umazaval manualne domenu, takze v originale patri jina

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Zapis hodnoty do DB

Příspěvek od pavel1tu » 16 zář 2020, 11:19

A jen PHP

Kód: Vybrat vše

http://xxx.eu/logger.php?text=blablabla
ti to do databáze zapíše ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 16 zář 2020, 11:35

ano to zapise spravne vcetne casu

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Zapis hodnoty do DB

Příspěvek od KamilV » 16 zář 2020, 13:27

Nezdá se mi ta GET hlavička. Zkus to takto:

Kód: Vybrat vše

client.print("GET /logger.php?text=Čidlo číslo ");
client.print(ID_MODULU);
client.println(" zapnuto");
client.println("Host: xxx.eu");
client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.println("Connection: close");

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Zapis hodnoty do DB

Příspěvek od martinius96 » 16 zář 2020, 23:43

Diakritika by nutne nemusel byť problém, ale ten request nemáš URL encoded...
Máš tam medzery, ktoré musíš nahradiť enkódovaným reťazcom %20 (ktorý sa používa pre medzery).

Ten request, ktorý posielaš na stránku v takomto zápise, ako máš tam pošle /logger.php?text=Čidlo a ďalšie znaky webserver nenačíta, preto sa ti aj ten request vlastne rozbije, nakoľko ho nenačíta celý správne s ukončovacími znakmi a nespracuje sa to korektne...
Takže napr. by mohlo fungovať toto:

Kód: Vybrat vše

client.print("GET /logger.php?text=Čidlo%20číslo%20");
client.print(ID_MODULU);
client.println("%20zapnuto");
client.println("Host: xxx.eu");
client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.println("Connection: close");
Na strane webservera ti to načíta teraz ako - po spracovaní GET premennej:
Čidlo číslo 2 zapnuto.

Môžeš si to vypísať aj cez var_dump(); a načítať to spätne z response webservera, aby si si overil, čo webserver reálne načítal.
Taktiež si jedno spojenie ukonč predtým, ako robíš nové...

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 21 zář 2020, 21:00

Tak jsem prisel na to, ze jak jsem to chtel udelat tak je to naprd....
Chtel jsem aby arduino zapisovalo do DB zmeny hodnot stavu na PINu... ale jen ty zmeny. A pokud to pouziji takto, tak to zapisuje kazdou sekundu stav... chtel jsem mit takovy LOG zmen udalosti. Abych mel kontrolu, ze se ta zmena provedla.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Zapis hodnoty do DB

Příspěvek od KamilV » 21 zář 2020, 22:36

Je přeci jen a jen na Tobě, kdy ten GET zavoláš. Tak si udržuj v prom. poslední stav pinu a pokud se změní, vytvoř GET request a do prom. si poznač nový stav pinu.

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 24 zář 2020, 10:14

nyní to mám takto :

Kód: Vybrat vše

void loop() {
  if (millis() - cas >= 6000 || cas == 0) {
    cas = millis();
    if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
      client.print("GET http://xxx/jirka/reset");
      client.print(ID_MODULU);
      client.println(".php HTTP/1.0");
      client.println("Host: xxx");
      client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
      client.println("Connection: close");
      client.println();
      delay(1000);
      while (client.connected()) {
        String line = client.readStringUntil('\n');
     //   Serial.println(line); //ak chceme vypísať HTTP header
        if (line == "\r") {
          break;
        }
      }
      String line = client.readStringUntil('\n');
      Serial.println("Nacitany payload response:");
      Serial.println(line); //odpoveď webservera - naše dáta
      if(line=="0"){
        if(client.connect(serverName, 80)){
        client.print("GET http://xxx/jirka/logger.php?text=Cidlo%20");
        client.print(ID_MODULU);
        client.println("%20vypnuto");
        client.println("Host: xxxx");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        digitalWrite(4, LOW);
        }
      }
        else if(line=="1"){
        if(client.connect(serverName, 80)){ 
        client.print("GET http://xxxx/jirka/logger.php?text=Cidlo%20");
        client.print(ID_MODULU);
        client.println("%20zapnuto");
        client.println("Host: xxxxxx");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        digitalWrite(4, HIGH);
       }
    } 
    else {
      Serial.println("Pripojenie na webserver sa nepodarilo");
    }
    client.stop();
    }
  }
}
ale to mi ukládá pokaždé kontrole....

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů