Stránka 2 z 2

Napsal: 09 led 2021, 22:35
od FHonza
Máš to nějaké celé zmatené. Nerozumím tomu, proč předáváš přes GET parametr s názvem "username" s hodnotou tvořenou velikostí napájecího napětí a sílou WiFi signálu.
To url bude vypadat nějak takhle:

Kód: Vybrat vše

neco.php?username=3032-67
Rozhodně nevidím žádnou souvislost se změřenou teplotou.

Napsal: 10 led 2021, 11:43
od markoni
Proměnná temp která je získána výše v kódu díky

Napsal: 10 led 2021, 14:48
od FHonza
OK. Ale stejně pořád script PHP dostane v $_GET["username"] hodnotu, jejíž význam mně uniká. V jedné proměnné máš string, který je složen z velikosti teploty, napájecího napětí a síly WiFi signálu. Bez žádného dalšího oddělovače. Nerozumím tomu, jak to chceš v PHP scriptu dekódovat. Proč každou hodnotu nepředáváš v samostatné proměnné ?

Napsal: 10 led 2021, 15:32
od markoni
Protože jsem to okopíroval tu část kódu který je nad červeným rámečkem a php skript co mám na webovce je takový to
  • <?php
    $username = $_GET['username']; //make sure you filter these values, before showing them
    echo $username; //$username == "john"

    $sez = $username;
    preg_match('/(\d+\.\d{2})(\d+\.\d{2})(-\d+)/', $sez, $matches);
    $tep=$matches[1];
    $volt=$matches[2];
    $db=$matches[3];
    //if (strlen($tep)< 5) {$tep="0".$tep;}
    /*$tep=substr($sez,0,6);
    //if (strlen($tep)== 5) {$tep="0".$tep;}
    $volt=substr($sez,7,4);
    $db=substr($sez,10,3); */
    $dev=$tep."C, ".$volt."Volt, ".$db."dB ";
    $datum = date("H:i:s d/m/y");
    //if (time() - filemtime("./IP/zap.txt") > 1200){
    $relace = fopen("./IP/zap.txt", "a+"); // Otevřeme soubor
    fwrite($relace,$dev );
    //fwrite($relace," C ");
    fwrite($relace,$datum);
    fwrite($relace,"\r\n"); // Zapíšeme text do souboru
    fclose($relace);
    //*****************************************
    /*$relac = fopen("./IP/pomocna.txt", "a+");
    fwrite($relac , $sez);
    //fwrite($relac,$datum);
    fwrite($relac,"\r\n");
    fclose($relac);
    //}
    */
    ?>

Napsal: 10 led 2021, 16:12
od FHonza
Proč to dělat jednoduše, když to jde udělat hodně složitě. Ten regulární výraz fakt louskat nebudu. Pošli to do skriptu PHP jako tři parametry. To se dělá takhle:

příklad url:

Kód: Vybrat vše

server/moje.php?parametr1=nazdar&parametr2=bazar&parametr3=lazar
V php pak:

Kód: Vybrat vše

...
par1 = $_GET["parametr1"];
par2 = $_GET["parametr2"];
par3 = $_GET["parametr3"];
...

Napsal: 14 led 2021, 14:56
od markoni
Mě se jedná o jak to napsat do ESP8266
server/moje.php?parametr1=nazdar&parametr2=bazar&parametr3=lazar to nevím, jinak na seriáku mě to
dává /somepage.php?username=-127.003.38-47
což je v pořádku (nemám tam připojené teplotní čidlo ) ale ve výpisu mě ten znak mínus chybí 127.00C, 3.38Volt, -47dB 14:12:14 14/01/21 a když upravím dtostrf(temp, 4,2, charVal); dám tam místo 4 tak 8 tak se ten php skript neprovede :oops: díky

Napsal: 14 led 2021, 19:49
od FHonza
No jasně že ze na sériový port to jde včetně znaku '-'. Mínus ti vyhodí až php funkce preg_match. V tom vzoru regulárního výrazu nemáš mínus jako povolený znak. Nejmíň práce je ten vzor opravit. Vzor patří mezi ty jednodušší. Tady je popis. Ale s přidáním dalšího parametru nebo změnou formátování na vstupu ho budeš muset opravovat znovu.

dtostrf(temp, 4,2, charVal); to se stačí podívat do nějaké dokumentace, co ten druhý parametr znamená. Ten skript se "neprovede", protože v proměnné $matches bude prázdný seznam. Nenajde se žádná shoda se vzorem (protože jsi přidal další znaky do proměnné charVal). A to tam nemáš ošetřené, předpokládáš že má vždy alespoň tři pole.

Fakt neumíš spojovat řetězce do jednoho ? Vždyť to v té ukázce máš. Stačí tam dopsat něco takového:

Kód: Vybrat vše

String username = "teplota=" + charVal;
username += "&vcc=" + String(getVcc);
username += "&rssi=" + String(WiFi.RSSI());

String url = "neco.php?" + username;
Promiň, ale přijde mi že absolutně netušíš o čem to je.

Napsal: 15 led 2021, 11:01
od markoni
Po částečné úpravě v projektu je takový stav, co se týká
preg_match('/(\d+\.\d{2})(\d+\.\d{2})(-\d+)/', $sez, $matches);
je tam zahrnuto i "-" ? díky

Napsal: 15 led 2021, 12:21
od FHonza
Není, neboť ten regulární výraz máš stále úplně stejný. Na testování použij třeba následující skript, který budeš spouštět na svém lokálním serveru:

Kód: Vybrat vše

<?php
$s='-127.003.38-47';
$r='/(\d+\.\d{2})(\d+\.\d{2})(-\d+)/';
preg_match($r, $s, $vysledek);
var_dump($s);
var_dump($r);
var_dump($vysledek);
?>

Napsal: 15 led 2021, 12:42
od markoni
Já jsem zkoušel ten druhý způsob a to přiřadit v do volání php skriptu parametry

Kód: Vybrat vše

                 String username = "temp=" + String(temp);
                 
                 username += "&vcc=" + String(getVcc); 
                 username += "&rssi=" + String(WiFi.RSSI()); 
               
                 Serial.println(username);
                 
                 Serial.println(getVcc);
                 String urli = "/somepage.php?username=" + username;
                 //**
                 Serial.println(urli);
na sériáku mi to dá
/somepage.php?username=temp=-127.00&vcc=3.39&rssi=-44

ale na serveru v surových datech jen je
temp=-127.00
Já na tom trávím už hodně dlouho a zapomínám dělat práci kolem domu odhazovat sníh a tak dále :D díky
edit

Kód: Vybrat vše

String username =  String(temp);
                 String Volt = String(getVcc);
                 String DB = String(WiFi.RSSI()); 
                
                 username = username+Volt+DB;
                 Serial.println(username);
                 
                 Serial.println(getVcc);
                 String urli = "/somepage.php?username=" + username;
tak mě to funguje ale snahu to nějak rozdělit dát tam nějaké markanty tak okamžitě to přestane vykonávat php skript na serveru :oops:

Napsal: 15 led 2021, 14:13
od FHonza
máš tam navíc username=

Napsal: 16 led 2021, 16:06
od markoni
FHonza píše:máš tam navíc username=
username = username+Volt+DB; to tam musím mít jinak to bere jen první parametr poraď jak do toho řetězce přidat pojmenování parametrů ? já když tam přidám username = username+"C"+Volt+"V"+DB+ "dB";tak se na seriáku vypíše celá řetězec ale neprovede se php sript na serveru :oops: díky

Napsal: 16 led 2021, 17:24
od FHonza
Vždyť ti to píšu. Máš v url navíc /somepage.php?username=temp=-127.00&vcc=3.39&rssi=-44

Napsal: 16 led 2021, 18:31
od markoni
Nedaří se :pc:

Napsal: 24 led 2021, 16:50
od markoni
Už se za dařilo

Kód: Vybrat vše

                   String username =  String(temp);
                
                  username += "%=Temp,"+ String(getVcc);
                 
                 username += "%=Volt," + String(WiFi.RSSI()); 
                 username +=  "%=dB";
                 
                 Serial.println(username);
                 
                 Serial.println(getVcc);
                 String urli = "/somepage.php?username=" + username;
                 //**
                 Serial.println(urli);
v prohlížeči je
23.31%=Temp,3.46%=Volt,-51%=dB
díky