Portál AbcLinuxu, 8. května 2025 15:33
Ahoj, mám tu problém. Z USB teploměru získávám data o teplotě (ASCII), občas se stane, že teploměr na první dotaz neodpoví, tak bych chtěl, aby se v případě nulového výstupu dotaz na data zopakoval.
Výstup z USB zařízení vypadá takto:
*B1E1+019.7
Kde *B1E1 se nemění, mění se až data za ním (znaménko a čísla).
#!/bin/bash
TEMPREAD=(`head -1 /dev/ttyUSB0`); # | cut -c6-11`);
while [ $TEMPREAD == *"B1E1"* ]; do
echo $TEMPREAD;
done
Zatím jsem chtěl pouze nechat vypisovat vrácená data a aby se script ukončil v případě, že data nebudou k dispozici. Ovšem nechápu, proč se data nevypíšou ani jednou? Co mám v tom cyklu špatně?
DíkyŘešení dotazu:
#!/bin/bash
TEMPREAD=(`head -1 /dev/ttyUSB0`); # | cut -c6-11`);
while [[ "$TEMPREAD" != *"B1E1"* ]]; do
# READ DATA AGAIN
TEMPREAD=(`head -1 /dev/ttyUSB0`);
# echo $TEMPREAD
done
# FORMAT OUTPUT
TEMPREAD=(`echo $TEMPREAD | cut -c6-11`);
# echo $TEMPREAD;
# WRITE DATA TO SQL
sqlite3 /root/meteo-temp1.sqlite "INSERT INTO 'meteo-temp1' ('datum', 'teplota') VALUES (DATETIME('now', 'localtime'), '$GETTEMP0');"
$GETTEMP0
má být $TEMPREAD
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.