Sunday, October 29, 2017

ตั้งเวลาเปิดพัดลมให้แมวด้วย Python กับ DHT11

1.ติดตั้งสิ่งที่จำเป็น
sudo apt-get install git-core
sudo apt-get install build-essential python-dev
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install

2.แก้ไข code ตัวอย่างสำหรับตรวจสอบอุณหภูมิ
cd Adafruit_Python_DHT/examples
nano AdafruitDHT.py
แก้ตรงส่วนเช็คอุณหภูมิด้านล่างของไฟล์ ถ้าอุณหภูมิสูงกว่า 27 องศา return ค่าเป็น 1
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
    if temperature > 27:
        print 1
    else:
        print 0 
else:
    print('Error')

3.สร้างไฟล์ dht11mqtt.h เพื่อเรียกใช้ python แล้วสั่งไปที่ MQTT Broker อีกที (11 คือ DHT11, 4 คือ GPIO4)
#!/bin/bash
result=`python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py "11" "4"`
if [ $result == "1" ]; then
    echo "hot"
    mosquitto_pub -h 192.168.x.x -t "cmnd/fan1/power" -m 1
    mosquitto_pub -h 192.168.x.x -t "cmnd/fan2/power" -m 1
else
    echo "cool"
fi

4.ตั้ง crontab ให้เรียก script มาเช็คอุณหภูมิทุก 30 นาที
*/30 10-18 * * 1-5 /home/pi/Adafruit_Python_DHT/dht11mqtt.sh

Tuesday, October 24, 2017

How to schedule Power On/Off Raspberry Pi

วิธีตั้งเวลา Power On/Off Raspberry Pi
   เรื่อง Shutdown หรือ Wakeup Raspberry Pi หลายคนคงค้นเจอเยอะแล้ว แต่นี่น่าจะเป็นการ Power On และ Power Off ที่ค่อนข้างตรงความหมายจริง ๆ คือ จ่ายและหยุดจ่ายไฟ

วงจรการทำงาน
  ณ จุด ๆ นี้ ขอบอกเลยว่า เราเน้นที่การตั้งเวลา Power On และ Power Off ไม่ได้คำนึงในแง่ของการประหยัดไฟ ดังนั้นเราจะใช้อุปกรณ์มาควบคุมการจ่ายไฟเพิ่มนั่นก็คือ Sonoff นั่นเอง ตามรูป

หลักการทำงาน
Shutdown :
1.ตั้ง crontab ที่ Raspberry Pi ให้ shutdown ตามเวลาที่ต้อง
sudo crontab -e
0 18 * * 1,2,3,4,5,6 /sbin/shutdown -h now

Power Off/On :
2.Setup MQTT Broker ตามตัวอย่าง http://www.komkid.net/2017/10/mqtt.html

3.โปรแกรม Sonoff ให้เป็น MQTT Client ซึ่งมีหลายวิธี แต่ทำตามตัวอย่างนี้ ก็สะดวกดี https://github.com/arendst/Sonoff-Tasmota โดย setup ให้ subscribe ไปที่ topic ชื่อ raspberrypi

4.ตั้ง crontab ที่ broker หรือที่ MQTT Client ก็ได้ให้ publish ไปที่ topic ที่ว่า เช่น
3 18 * * * mosquitto_pub -h 127.0.0.1 -t "cmnd/raspberrypi/power" -m "0"
0 8 * * * mosquitto_pub -h 127.0.0.1 -t "cmnd/raspberrypi/power" -m "1"
คือ ตั้งเวลาให้ Sonoff หยุดจ่ายไฟหลังจาก Shutdown แล้ว และตั้งเวลาให้จ่ายไฟเพื่อเปิดเครื่อง ตอน 8.00 น.
5.หรือเช็คว่า Pi ปิดไปแล้วหรือยังก่อนตัดไฟโดยให้ crontab เรียก Ping จาก shell script เพื่อตรวจสอบแทนที่จะส่งข้อความให้ปิดไปที่ broker เลย
ping -w 3 IP_ADDRESS
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
    echo 'Shutting down'
    mosquitto_pub -t "cmnd/raspberrypi/power" -m "0"    
else
    echo 'Pi3C is running!'
fi