0

我正在尝试将来自 Arduino Yun(运行 openWRT)上的 USB 端口的输入保存到文件中,以便可以从 Yun 上托管的 PHP 页面准备好并通过浏览器访问。

这个想法是 Yun 充当锅炉的 Web 界面,通过 RS485 记录所有数据,并生成从锅炉馈送的各种温度的图表并保存到文件中。

数据来自 RS485 馈送(来自锅炉),通过 FTDI 电缆。

数据以每秒的形式馈送...

DAT,39665,8,0.00,-273.15,-273.15,-273.15,0,0.00,0.60,0.00,0.00,-6.25,0.00,0.00,60.00,60.00,225,-273.15,0.00
STAT,39666,0.00,0,19,924,2,0,0,0,0,2,2,2,0,0

使用以下提示我有一些运气... Linux shell:每分钟从串行端口保存输入行并发送到远程服务器

和... Bash 脚本:将流从串行端口 (/dev/ttyUSB0) 保存到文件,直到出现特定输入(例如 eof)

最后一篇文章提供了代码:

#!/bin/bash
while read line; do
     if [ "$line" != "EOF" ]; then
          echo "$line" >> file.txt
     else
          break
     fi
done < /dev/ttyUSB0

但是它会引发错误line 8: syntax error: unexpected "done" (expecting then)

但我不知道为什么,所以简化为:

#!/bin/bash
while read line; do
    echo "$line" >> hsffile.txt
done < /dev/ttyUSB0

迄今为止的行动:

  1. 安装 FTDI 驱动程序opkg install kmod-usb-serial-ftdi

  2. 根据上面的简化版本,在文件夹/bin/ihiu中创建了一个名为boiler2text.sh的脚本。

  3. 给定文件运行权限chmod u+x boiler2text.sh

  4. 从 Putty SSH 窗口中执行脚本。sh /bin/ihiu/boiler2text.sh

到目前为止,它工作得很好,但我遇到了一些问题:

  1. 我需要让脚本 24/7 全天候运行,而无需通过 SSH 连接到系统。我可以从 PHP 页面中执行系统命令,但它只是在运行脚本时挂起,并且似乎没有任何内容输出到文件。
  2. 随着文件开始变得非常大,理想情况下,每次添加一个文件时,我都需要从文件开头删除一行 - 一旦文件达到最大文件大小。或者让它根据一天中的日期和时间保存到文件名,这样文件名每小时都会更改。

我是 Linux 新手,非常感谢任何指针。

4

1 回答 1

0
  1. 为了避免必须通过 SSH 进入系统,当您启动命令时,运行/bin/ihiu/boiler2.txt &. & 符号将在后台启动进程;您将不得不在某些时候使用killorkillall命令手动终止该进程(或者您可以让它永远运行)。如果您不想在每次重新启动时都启动脚本,您可以在/etc/init.d/
  2. 例如,为了防止您的文件超过 1000 行,您可以执行以下操作:

    #!/bin/bash
    SAVE_FILE=hsffile.txt
    while read line; do
        echo "$line" >> $SAVE_FILE
        # Determine the number of lines currently in the file by
        # doing a word count and then getting the first piece
        # of output.
        lines=`wc -l $SAVE_FILE | awk '{print $1;}'`
    
        # Check to see if the line count is greater than 1000.
        if [[ $lines -gt 1000 ]]; then
            # Delete the first line of the file using sed.
            sed -i '1d' $SAVE_FILE
        fi
    done < /dev/ttyUSB0
    
于 2015-07-02T00:03:03.220 回答