Portál AbcLinuxu, 27. října 2025 04:52
Ř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.