Diskuze: Jak předávat data z C(++) na web ?
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
No, rovnou ti řeknu, že přistupovat z klienta přímo do MySQL databáze je obrovské bezpečnostní riziko. Minimálně bys to mohl aspoň posílat jako nějaký specifický dotaz na PHP,které by ti následně vrátilo v nějakém formátu data o která jsi žádal. Hodně taky záleží na typu dat, která chceš posílat.
Asi to vyznělo špatně, takže to popíšu více. Původně jsem měl jednodeskový stroj s harddiskem, takže tento stroj sériovou linkou vyčítá data z teploměru a rovnou je cpe do MySQL, která běží na tomtéž stroji i s web serverem. Takže klient z venku se podívá na stránku a vidí tam teplotu. Tak a teď to chci předělat do hardwéru typu nějaký WiFi router, kde běží třeba nějaký OpenWRT linux a není tam harddisk, ale jen CF nebo SD karta, která je v normálním provozu jen ReadOnly. Mohu do ní nahrát nějakou jednoduchou webovou stránečku, která by mi zobrazovala online teplotu. A tak jsem chtěl céčkem vykomunikovat teplotu po sériové lince, uložit do XML nebo JSON do souboru v TMP složce a jakmile by někdo otevřel webovou stránku, tak by se ten XML nebo JSON načetl a zobrazila by se hodnota na stránce. Takže principielně mi jde o tuto druhou variantu a ne o MySQL. Jirka
Můžeš přímo v tom C spustit webserver, který jen pošle klientovi výsledné HTML, do kterého ty hodnoty vlepí.
Ano to by šlo. A jak to udělám obráceně ? Tedy zobrazím stránku a v ní tlačítko ON/OFF a chci dostat informaci o tlačítku do té mé sériové linky.
To tlačítko bude normálně odkaz zpátky na to zařízení a informace (třeba o tom vypnutí) si pošleš v get parametrech, které pak přečteš. Nebo můžeš i třeba jen rozparsovat text požadavku za adresou - např. ta url může být
192.168.0.5/off
a ty z toho přečteš jen ten text za lomítkem a podle toho zareaguješ
Mně přijde nejlepší řešit to tak, že údaje z teploměru se budou zapisovat do nějakého souboru v TMP namapovaném do RAM (aby mohla být SD karta readonly). Webserver poběží nezávisle na tomto zapisování dat (samozřejmě, před zápisem můžeš zkontrolovat, zda webserver běží, a podle toho se rozhodnout).
Když přijde klient, webová stránka, kterážto je v části v PHP, načte a naparsuje soubor z daty a zobrazí to, co si uživatel asi přeje.
Co se týče vypínání a zapínání teploměru, nedala by se tahle informace řešit komunikací PHP přes sockety s aplikací, která komunikuje s teploměrem?
Jo, tak nějak jsem tu první část myslel, zapisovat periodicky do souboru
nebo spíš jej periodicky přepisovat. A ta druhá část směrem dolů mně
taky napadla, jen pořád nevím, zda je to nejlepší řešení.
A tak problém rozšířím ještě o další vymoženosti. K tomu
jednodeskáči bych připojil nějaký jednočip, který jednak bude něco
měřit a potom třeba i regulovat. Takže tam budu mít třeba 4 parametry. 1.
požadovanou hodnotu teploty, 2. diferenci teploty, 3. a 4. začátek a konec
časového úseku. A teď tedy bych měl představu, že budu mít webovou
stránku, kde bych měl 4 pole. Jakmile stránku budu chtít zobrazit, tak bych
měl načíst z toho jednočipa aktuální hodnoty parametrů. Potom by se daly
hodnoty ve stránce změnit a následně je zapsat do jednočipu. V tom
jednodeskáči by se měly zkontrolovat rozsahy zadávaných hodnot a teprve
potom buď říci, že jsou špatně a nebo je fyzicky zapsat. No a otázkou je,
zda toto dělat přes sockety z PHP nebo nějak jinak a jak ? Byla by ještě
nějaká rada prosím ? Jirka.
To asi záleží, zda-li bude k tomu stroji připojen jednak jednočip, druhak te nteploměr, nebo jen jednočip, který bude, vyjma možnosti změnit tebou popsané parametry, zprostředkovávat měření z těploměru (periodicky je posílat třeba po sériové lince). Pokud by to byla ta druhá možnost, můžeš buď použít sockety v PHP, nebo by z PHP šlo přímo zapisovat a číst ze sériové linky.
Tam pak záleží, zda ta webová stránka bude jediná entita, která bude s tím jednočipem komunikovat, protože po sériové lince nemohou komunikovat dvě entity současně (je to exkluzivní zařízení). Tím, že bys na té sériové lince měl nějakou aplikaci, která by ji zpřístupňovala přes sockety (třeba pro to PHP) bys právě zajistil možnost pracovat s teploměrem z více entit +- současně. Pokud sdílení nepotřebuješ, stačí přímá komunikace po sériové lince.
To ověřování správnosti parametrů zase můžeš dělat na několika místech: v jednočipu, na webové stránce... Důležité je, aby jej uživatel nemohl obejít.
Cílem je mít jednočip, který se bude starat o měření teploty a regulaci podle požadovaných parametrů. Toto by mělo být autonomní. Sériovou linkou to chci připojit k WRAPu nebo ALIXu. To vyčítání a i možnost nastavování sériovou linkou mi funguje. Mám vlastně komunikační proces, který přes FIFO roury komunikuje s jiným procesem, který se stará o to, že si žádá o teploty a parametry. Dnes mi to ukládá do MySQL a i ty parametry proháním přes MySQL. Co se parametrů týká, tak v MySQL mám sloupec se statusem, kde sudé hodnoty se mi starají o zápis parametrů a liché o čtení parametrů. Když je tam 0, tak nic nedělám, jakmile bych tam dal 1, tak to znamená, že chci vyčíst parametr, sestavím tedy žádost o komunikaci a zvýším status na 3. Pokud mi nepřijdou data - je porucha, tak to zvýším na 7, pokud mi to odkomunikuje a data strčím do MySQL, tak status nahodím na 5. Z Webíku bych potom podle statusů mohl signalizovat nebo zobrazovat stav a hodnotu. Jenže webík nějak neumím udělat a navíc se chci zbavit té MySQL, protože ve WRAPu nebo ALIXu mám jen CF kartu s OpenWRT linuxem a není tedy vhodné do ní zapisovat. Tak jsem si myslel, že bych si udělal v TMP soubor s hodnotami měřenými a i parametry a tyto soubory by sloužily pro výměnu dat mezi webem a komunikační aplikací. A jak je dnes moderní responzivní web, tak by bylo pěkné to tak mít. Takže 1 stránka, na ní nahoře 1 teplota a pod ní 4 nastavovací políčka s nějakými tlačítky něco jako načíst a uložit (parametry). Ověřování rozsahů parametrů bych viděl na ten komunikační proces ve WRAPu (ALIXu). Taky mně napadlo, že by se o ověřování mohl starat nějaký JAVASCRIPT, který by v podstatě běžel u uživatele - nedovolil by mu tam nastavit blbosti. Jirka
Zobrazeno 10 zpráv z 10.