Fonera Simpl(fon2405e 8M)を使って自動水やりシステム器の制作をしました。Fonera Simplは以前にSPIフラッシュを換装してOpenWrtをインストールしたものを使います。今回、リセットボタンのgpioを使うのでDTSを修正して使います。
- Fonera simpl: SPIフラッシュROMの換装
- https://labs.hottunalabs.net/media/fon_simpl.patch
- https://labs.hottunalabs.net/media/fon_simpl_add_gpio_mod.patch
cronでシェルスクリプトを起動させて稼働させます。
#!/bin/sh
GPIO='/sys/devices/platform/gpio-leds/leds/switch1/brightness'
#TMPF='/tmp/tap.log'
#DATE=`date -I'seconds'`
MINS=$1
if [ -z "$1" ]; then
MINS=1
elif [ "$1" -gt "3" ]; then # MAX 3min
MINS=5
fi
STATE=`cat $GPIO`
if [ "$STATE" -ne "0" ] ; then
echo 0 > $GPIO
logger -p notice -t tap "start"
# water_control.sh &
sleep $(( $MINS * 60 ))
fi
STATE=`cat $GPIO`
if [ "$STATE" -eq "0" ] ; then
echo 255 > $GPIO
logger -p notice -t tap "stop"
fi
STATE=`cat $GPIO`
if [ "$STATE" -ne "255" ] ; then
logger -p err -t tap "tap malfunction"
fi
さらに天気に合わせて水やりをコントロールしてみます。
#!/bin/sh
GPIO='/sys/devices/platform/gpio-leds/leds/switch1/brightness'
tap_off () {
echo 255 > $GPIO
logger -p notice -t tap "stop"
}
get_data () {
DATA=`wget -q -O - 'https://api.openweathermap.org/data/2.5/onecall?lat=35.4761&lon=139.2810&units=metric&lang=en&exclude=minutely&appid=**********************'`
TEMP=`echo $DATA | jq ".daily[0].temp.day"`
PREC=`echo $DATA | jq ".daily[0].rain"`
}
get_data || exit
if [ "$PREC" = "null" ]; then
PREC=0
fi
if [ `echo $TEMP'<'10 | bc` -eq "1" ] && [ `echo $PREC'>'1 | bc` -eq "1" ]; then
sleep 30
tap_off
elif [ `echo $TEMP'<'10 | bc` -eq "1" ] && [ `echo $PREC'<='2 | bc` -eq "1" ]; then
sleep 45
tap_off
elif [ `echo $TEMP'<'20 | bc` -eq "1" ] && [ `echo $PREC'>'2 | bc` -eq "1" ]; then
sleep 45
tap_off
elif [ `echo $TEMP'<'20 | bc` -eq "1" ] && [ `echo $PREC'<='2 | bc` -eq "1" ]; then
sleep 60
tap_off
elif [ `echo $TEMP'<'30 | bc` -eq "1" ] && [ `echo $PREC'>'2 | bc` -eq "1" ]; then
sleep 60
tap_off
fi
logger -p notice -t tap "Temp: ${TEMP} Precipitation: $PREC"