我是新手来编写脚本,我的脚本有问题。
#!/bin/sh
timestamp() {
date +"%Y-%m-%d %T"
}
LOGDIR="/home/pi/tempcontroller_rum1.log"
VALUE=28
TEMP=$(cat /home/pi/temperaturloggar/rum1.txt)
STATUS=`cat /sys/class/gpio/gpio18/value`
echo `timestamp` " Info: Temperature: $TEMP" >>$LOGDIR
if [ $TEMP -le $VALUE ] && [ $STATUS -eq 0 ]
then
echo `timestamp` "Too Cold, Heater started." >>$LOGDIR
echo "1">/sys/class/gpio/gpio18/value
print $TEMP
elif [ $TEMP -ge $VALUE ] && [ $STATUS -eq 1 ]
then
echo `timestamp` "Warm enough, Heater stoped." >>$LOGDIR
echo "0">/sys/class/gpio/gpio18/value
print $TEMP
fi
文件" rum1"包含一个小数小数的数字我认为这是问题所在,因为当我得到我得到的脚本时
./tempcontroller_rum1.sh: 12: [: Illegal number: 25.10000038147
./tempcontroller_rum1.sh: 17: [: Illegal number: 25.10000038147
有什么建议吗?我需要脚本从.txt中读取,将其与VALUE进行比较然后打开GPIO,具体取决于它是低于还是高于VALUE
如果我手动将rum1.txt设置为24.脚本有效,但我收到了警告/错误。
Warning: unknown mime-type for "24" -- using "application/octet-stream"
Error: no such file "24"
我该如何解决这个问题?
写给rum.txt的我的Lua脚本可以将它向上/ dwn
commandArray = {}
if (devicechanged['Rum1']) then
local file = io.open("/home/pi/temperaturloggar/rum1.txt", "w")
file:write(tonumber(otherdevices_temperature['Rum1']))
file:close()
end
return commandArray
答案 0 :(得分:1)
您可以使用bc进行浮点比较:
$ VALUE=28
$ TEMP=25.10000038147
$ bc<<<"$TEMP < $VALUE"
1
在你的情况下:
if [ $(bc<<<"$TEMP < $VALUE") -eq 1 ] && [ $STATUS -eq 0 ]
答案 1 :(得分:0)
要回答评论中的问题,请使用math.floor
向下舍入,如:
file:write(math.floor(otherdevices_temperature['Rum1']))
要整理,请使用
file:write(math.floor(otherdevices_temperature['Rum1']+0.5))
答案 2 :(得分:0)
现在我的脚本正在工作,因为如果有人和我有同样的问题,我想发布代码。
#!/bin/bash
timestamp() {
date +"%Y-%m-%d %T"
}
LOGDIR="/home/pi/tempcontroller_rum1.log"
VALUE=23
TEMP=$(cat /home/pi/temperaturloggar/rum1.txt)
STATUS=`cat /sys/class/gpio/gpio18/value`
echo `timestamp` " Info: Temperature: $TEMP" >>$LOGDIR
if [ $(bc<<<"$TEMP < $VALUE") -eq 1 ] && [ $STATUS -eq 0 ]
then
echo `timestamp` "Too Cold, Heater started." >>$LOGDIR
echo "1">/sys/class/gpio/gpio18/value
elif [ $(bc<<<"$TEMP < $VALUE") -eq 0 ] && [ $STATUS -eq 1 ]
then
echo `timestamp` "Warm enough, Heater stoped." >>$LOGDIR
echo "0">/sys/class/gpio/gpio18/value
fi