Stránka 1 z 5

Zapis hodnoty do DB

Napsal: 15 zář 2020, 21:36
od Kony
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ě

Re: Zapis hodnoty do DB

Napsal: 15 zář 2020, 22:21
od mart-in
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?

Re: Zapis hodnoty do DB

Napsal: 16 zář 2020, 08:00
od Kony
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

Re: Zapis hodnoty do DB

Napsal: 16 zář 2020, 11:19
od pavel1tu
A jen PHP

Kód: Vybrat vše

http://xxx.eu/logger.php?text=blablabla
ti to do databáze zapíše ?

Re: Zapis hodnoty do DB

Napsal: 16 zář 2020, 11:35
od Kony
ano to zapise spravne vcetne casu

Re: Zapis hodnoty do DB

Napsal: 16 zář 2020, 13:27
od KamilV
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");

Re: Zapis hodnoty do DB

Napsal: 16 zář 2020, 23:43
od martinius96
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é...

Re: Zapis hodnoty do DB

Napsal: 21 zář 2020, 21:00
od Kony
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.

Re: Zapis hodnoty do DB

Napsal: 21 zář 2020, 22:36
od KamilV
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.

Re: Zapis hodnoty do DB

Napsal: 24 zář 2020, 10:14
od Kony
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....