Portál AbcLinuxu, 5. května 2025 03:09
teplomer.wz.cz/teplota2.php?temp=
Potřeboval bych něco takového zprovoznit na Linuxu, ale nevím moc jak na to. S teploměrem se mi zatím daří komunikovat v minicomu.
Našel jsem také, že na RS232 lze poslat data z BASH příkazem:echo TEXT_K_POSLANI > /dev/ttyS1
cat
funguje:cat /dev/ttyS1
+23.5C
. Ale má to jeden háček: příkaz se po získání dat neukončí. Teploměr vloží za hodnotu znak 13 (0x0D) a příkaz cat
čeká na další hodnotu. Potřebuju získat jen jednu hodnotu např. do souboru a pak s ním něco dělat:
cat /dev/ttyS1 > teplota.txt
Výše uvedený povel ale udělá to, že do souboru "nabouchá" za sebe několik hodnot (dle délky běhu), které jsou odděleny znakem s ASCII hodnotou 13 (0x0D).
Poraďte prosím co teď... Nyní vždy příkaz cat ....
musím ukončit kombinací kláves CTRL+C
Děkuji předem
sed 's/\r.*//;q' /dev/ttyS1
namiesto cat
dobry den
mame stejne teplomery a pouzivame:
read teplota < /dev/ttyS0 && echo -n $teplota | tr -d "\r" date +" %H:%M:%S %d.%m.%Y"
marek
read teplota < /dev/ttyS0 && echo -n $teplota
výsledek:
[1] 27427 bash: lt: command not found [1]+ Stopped read teplota bash: /dev/ttyS1: Permission denieda to i pod rootem
dobry den.
obavam se, ze Vam dela v shellu bordel v zobrazeni ten \r (\xd) a ze jste tam cosi napsal navic.
zkuste to v novem shellu zapsat treba takto, at vyloucite vsechny pochybnosti:
read teplota < /dev/ttyS0 echo $teplota | od -c
marek
0000000 \n 0000001Pak jsem zkusil:
cat /dev/ttyS1 > teplota.txt
a samozřejmě po pár sekundách CTRL+C
dále jsem chtěl vypsat příkazem cat
obsah souboru, ale výsledek je takovýto:
root@miniPC:/home/user# cat teplota.txt root@miniPC:/home/user#když ovšem teplota.txt otevřu v mcedit, jsou tam teploty oddělené právě tím problematickým znakem (^M), který asi dělá ten zmiňovaný bordel. Použil jsem tedy toto:
root@miniPC:/home/user# read teplota < teplota.txt root@miniPC:/home/user# echo $teplota | od -c 0000000 + 0 2 3 . 5 C \r + 0 2 3 . 5 C \r 0000020 + 0 2 3 . 5 C \r \n 0000031 root@miniPC:/home/user#Teď už opravdu nevím jak dál. Prosím, poraďte
cat /dev/ttyS1 > teplota.txt
cat teplota.txt
read teplota < /dev/ttyS1 && echo "http://www.domena.cz/uloz.php?temp="$teplota
http://www.domena.cz/uloz.php?temp=+23.6C
wget
a celé vykonat:wget http://www.domena.cz/uloz.php?temp=+23.6
wget
namísto echo
mě mohlo také napadnout samotného dobry den
ja si myslim, ze tam ten ukoncovaci znak teplomer dava porad (alespon to ma ve specifikaci), ale ze to tomu wgetu proste nevadi.
jinak odstraneni vsech vyskytu 0x0d delame prave tim tr -d "\r"
v tom php je NUTNE parsovat promennou temp a prevadet ji na hodnotu vhodnou pro mysql - nikdy nevite co vam tam kdo posle.
marek
ps: resili jsme vpodstate to same - akorat si to predavame pomoci ssh a klicu co umi spustit prave jednu akci. bezpecnost reseni se potom pohybuje uplne nekde jinde
>
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.