Hogyan tudok python 3 ban adatokat egy weblapon megjeleníteni? Raspbery Pi platform használata közben.
Elnézést a fura fogalmazásért, tehát van 1 programom python 3 as nyelven íródott ami egy GPIO portra kötött jelet figyel van vagy nincs, ezt elmenti 1 .csv fájlba ha bezárom CTRL+C vel. Az lenne még a feladatom hogy ezt ne keljen sd kártáyrol mindig kiszednem hanem küldje el 1 általam készített weblapra ahol folyamatosan tudnám figyelni hogy volt jel vagy nem volt. Illetve ha megnyomok egy Start gombot rajta akkor nyit egy új fájlt belementi a dolgokat Stop al meg bezárja és utána letudom tölteni a csv fájlom vagy txt mindegy. Lényegében Távelérést szeretnék elérni amivel tudnám nézni hogy a kis málna pc miket mér úgy, hogy ne keljen mellette ülnöm folyamatosan.
Válaszaitokat előre is köszönöm!
Több megoldás lehetséges:
1. A Raspberry Pi-re feltelepítesz egy webszervert, aminek a megfelelő könyvtárába (alapesetben általában /var/www) menti el a Python-szkripted a CSV-állományt. Ehhez készíthetsz egy Javascriptes alkalmazást, ami megnyitja a helyi .csv fájl, és megfelelő formában (táblázat, grafikon,...) megjeleníti.
2. Egy távoli szerveren létrehozol egy szerveroldali szkriptet, ami fogadja a Raspberry Pi-n levő Python szkripttől az adatokat. Szóval a Python szkript nem (csak) a lokális CSV-fájlba menti, hanem a szerveren egy URL-t (például [link] ) felkeresve "tölti fel" az adatokat.
Flask és SSE használatával viszonylag egyszerűen össze lehet dobni egy ilyet, kb. 30-40 sorból mindennel együtt.
Lényegében csinálsz egy generátort ami minden pin változásnál visszadobja a megjelenítendő információt és ezt küldöd a weblapnak text/event-stream -ként. A weblapon pedig implementálod az SSE-t. Egy gombot vagy checkboxot hozzáadni pedig nem nagy dolog, ekkor az eventet nem csak megjeleníti de fájlba is írja.
Köszönöm szépen mind a két választ sajnos egyiket sem értettem :D
Reméltem hogy van valami nagyon egyszerű eljárás talán a távoli szerver létrehozását megtudom valósítani esetleg valami minta program nincs valahol amiből kitudnék indulni ?
Sajnos Javát már nagyon rég nem használtam akkor is csak nagyon alap szinten :(
"Sajnos Javát már nagyon rég nem használtam akkor is csak nagyon alap szinten :("
Az nem Java, hanem Javascript, és az a lokális szerveres megoldásnál használatos.
Tehát például tegyük fel, hogy a Raspberry Pi-n a webszerver főkönyvtárából a /var/www könyvtárból tölti be az index.html-t. Akkor ugyanabba a könyvtárba írhatja a Python-szkript a CSV-állományt, amit a böngészőben megnyitott HTML-kódból meghívott Javascript-kód tud betölteni, kiértékelni.
Készítettem egy kis példát (jQuery és Flot könyvtárak segítségével):
letöltöd, kicsomagolod és megnyitod böngészőben az index.html-t.
Az előnye a dolognak, hogy csak egy webszerver kell hozzá - amit akár a Python is képes létrehozni (ez esetben az a könyvtár lesz a webszerver főkönyvtára, ahol elindítod a Simplewebservert):
nem kell hozzá semmilyen külön szerveroldali nyelv, és nem függ az Internettől se.
Áhám már értem mire gondoltál, nagyon jól néz ki az ábrázolás is, pont egy ilyen dologra gondoltam már végig néztem az összes blogot és feltettem 3 webszervert is de a végére sosem jutottam :D
Az miért van hogy pl a sudo apt-get install apache2 -y utasítás után létre jött egy index.html fájlom de módosítani nem tudtam nem engedte felülírni.
Ezeket a JavaScripteket mivel csináltad, vagy hogyan ?
Hogyha nem kell überkirály biztonság, akkor egyszerűen a python programod nyisson egy TCP szervert valamilyen porton. Minden egyes kérés esetén jöjjön létre egy új szál, ami feldolgozza a kérést.
A böngésző valami ilyesmit fog neked küldeni, ha megnyitod a http://raspberry_ip_címe:port oldalt:
GET / HTTP/1.1
Accept-Language: hu-HU
Accept-Encoding: gzip
Ami a lényeg, az az első sora lesz a kérésnek. Az három részre osztható:
[kérés módja] [kért erőforrás] [protokoll verziója]
Erre a programod egy olyat fog válaszolni, hogy:
HTTP/1.1 200 OK
Content-Length: A küldött tartalom bájtokban
Content-Type: A küldött tartalom MIME-típusa
(ez egy üres sor)
és itt jön a tartalom, pl. egy HTML oldal forráskódja
És lőn weblap. A weblapba ágyazva leküldesz egy kis JavaScript programocskát, ami AJAX kérésekkel szépen valamilyen időközönként lekéri a mért adatokat. Szóval, ha kap egy olyat a TCP szerver, hogy:
GET /meresadatok HTTP/1.1
Vegye észre, hogy most nem a weboldalt, hanem a mérési adatokat kértük, és küldje le JSON formában, merthogy azzal JavaScript-ben baromi könnyű dolgozni.
A szabvány szerint egy ilyen webszervernek a GET és a HEAD kéréseket kötelező lenne kezelnie. A kettő között az a marha nagy különbség, hogy a GET-re válaszként elküldöd a fejlécet és a tartalmat, míg a HEAD esetében csak a fejlécet.
Hát ebből kb egy mukkot sem értetem :D
Első körben nekem nagyon tetszik az amit csináltál ilyen szinten nekem megfelel, az adatok elérése hogyan alkottad meg a scripteket? akárhogy próbálom nem tudom áthelyezni az index_html edből de még eltolni se semmi :D
"hogyan alkottad meg a scripteket?"
Leültem a gép elé és az általam preferált kódszerkesztőben - jelenleg ez a Komodo Edit - megírtam. ;)
Mindehhez ismerni kellett:
* a HTML leírónyelvet
* a CSS-t
* a Javascriptet ( [link] )
* a Jquery ( [link] ) függvénykönyvtárat
Illetve kellett keresni egy grafikon rajzolását végző, a Jquery-re épülő függvénykönyvtárat - ez a Flot ( [link] ) - aminek a dokumentációja alapján és az előbbiek ismeretében összerakható.
"index.html weblap működik de ezt csak lokálisan tudom elérni"
Ha a Raspberry Pi egy router mögött van, csak át kell engedni (port forward, virtual server néven keresd a routerben) a 80-as TCP portot a routerben. Hogy ne a változékony, külső, publikus IP-címed alapján kelljen elérni a Raspbery Pi-t, használhatsz DDNS szolgáltatást (ilyen például a [link] ).
"csináltam is egy ftp.atw.hu szervert arra kéne ezt a meresek.csv fájlt elküldenem"
Ez is egy megoldás - Pythonban van FTP-modul:
az általam elkészített szkriptet csak mellé fel kell tölteni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!