Portál AbcLinuxu, 8. května 2025 15:25
Řešení dotazu:
tak to dám do souboru topeni.jsta sama funkce co ti vypise do souboru to muze vypsat na pozadani do websocketu https://websockets.readthedocs.io/en/stable/intro.html https://www.tutorialspoint.com/html5/html5_websocket.htm
Na stejné stránce zmačknu (Přidat +1st.C) a script prikazy.php mi do souboru přikazy.txt zapíše "T+".no a abys nemusel obnovavat stranku, tak tu interakci musis delat v js, ja pouzivam Vue, ale moznosti je vic https://tutorialedge.net/javascript/vuejs/vuejs-websocket-tutorial/ ty navody jsem podrobne necetl ale neprisly mi zly na prvni pohled, ja bych to udelal tak ze bych celej tenhle problem rozdelil na casti, z tech vzdycky udelal minimalni priklad a nabaloval to, az by mi to cely nejak chodilo tak bych to slepil a pripadne potom vylepsil.
<html> <head></head> <body> Data senzorů:<br /> <div id="svetlo_chodba">N/A</div> <div id="svetlo_kuchyne">N/A</div> <div id="teplota_kuchyne">N/A</div> <script type="text/javascript"> function jednotka_na_text(jedn) { if (jedn === null) return ''; return ' (' + jedn + ')'; } async function aktualizuj_senzory() { fetch( "http://localhost:8080/data_senzoru.json" ).then( (resp) => { if (resp.status !== 200) { // VYŘEŠ CHYBU! alert("Chyba " + resp.status + "!"); return; } resp.json().then( (stav_senzoru) => { for (const senzor of stav_senzoru) { document.getElementById(senzor.jmeno).innerHTML = senzor.stav + jednotka_na_text(senzor.jednotka); } } ) } ) } </script> <input type="submit" onClick="aktualizuj_senzory();" value="Aktualizuj" /> </body> </html>
data_senzoru.json
[ { "jmeno": "svetlo_chodba", "jednotka": null, "stav": 0 }, { "jmeno": "svetlo_kuchyne", "jednotka": null, "stav": 1 }, { "jmeno": "teplota_kuchyne", "jednotka": "°C", "stav": 22 } ]
zvhledem ktomu že nějaký domácí topení je obecně jakoby celkem pomalej proces aže to nebude ovládat hrozně moc uživatelů najednou tak to opakovaný načtení *.json v nějakým rozumě dlouhým intervalu mi připadá jako dobrý řešení :D ;D
nóó ale pokud bys chtěl mit třeba víc různejch klientů najednou připojenejch k tomu raspberry a chtěl taky aby všecky mohli 'najednou' ovládat tu požadovanou teplotu a bez refreshů stránky/ znovunačítání souboru v pevně danejch intervalech tak bych asi nato vzala ty websockety jak už je zmiňoval debian+. hezkej návod pro python + js tady hele nóó a hodně nejpodobnější příklad k tomu tvýmu problémku tam maj takový počítadlo na kterým muže víc klientů nezávisle nasobě měnit hodnotu hele. pro tvuj problémek je tohleto možná zbytečně moc nóó ale bude dlouuuuůůůůůhhháááááá zima a kdybyses hrozně nudil tak aspoň máš s čim si hrát :D ;D
drobná poznámka bokem
pokud chceš trošičku prodloužit životnost sdkarty tak se dá vyrobit takzvanej ramdisk. je to jakoby souborovej systém skovanej přímo v ramce takže se ty data nezapisujou do souborů na sdkartě ale jenom do ramky nóó a je to ideální právě pro různý ty maličký senzorový data :D ;D jak vyrobit ramdsik návod tady hele jen si myslim že 50MB je zbytečně moc velký nastav si nějakou rozumnější hodnotu :O ;D
<!DOCTYPE html> <html lang="cs"> <head> <meta charset="utf-8"> <title>Teplota</title> <script src="http://code.jquery.com/jquery-latest.js"> <script type="text/javascript"> $(document).ready(function(){ var f = function(){ console.log('Aktualizuji teplotu...'); $("#teplota").load('/data/teplota.txt'); }; setInterval(f, 1000); }); </script> </head> <body> <div class="wrapper"> <h1>Teplota</h1> <div>Teplota je: <span id="teplota"></span></div> </div> </body> </html>
Ale něco je asi blbě, neděje se nic.
předpokládám že to jakoby zablokovaný kuli conten security policy hele nóó a to by bylo uplně v pořádku :O ;D zmáčkni v prohlížeči f12 a koukni jestli ti to něco piše do webový konzole :O ;D
asi tě bude zajímat jak jako to zabezpečení pro vývoj trošičku vobejít. chrome/chromium de pustit s vypnutým zabezpečením noa tam by ti to mohlo fungovat snad :O :O
vyrob si nějakou složku pro dočasnej uživatelskej profil a pak chromium pust takle nějak
chromium --user-data-dir='cesta/k/docasne/slozce' --disable-web-security /nejaka/cesta/k/souboru/index.html
mi to takle pustit de :D ;D pro firefox ale na něco podobnýho bude potřeba nějakej doplněk aby šlo tu content policy deaktivovat :O :O
sem zapoměla říct to důležitý :D tyhlety problémy s csp to má předevšim proto žeto jakoby neběží na serveru ale z nějakýho uživatelskýho adresáře. kdybys to strčil na server tak todleto zlobení přestane :O ;D
další řešení je si třeba na vývoj udělat nějakou virtuálku třeba ve virtualboxu hele a tam mit server na zkoušení :D ;D
php -S localhost:8080
Pak stačí otevřít odkaz
http://localhost:8080/
šestej řádek je potřeba přepsat takle
<script src='https://code.jquery.com/jquery-latest.js'></script>
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.