やっと重い腰を上げてラズベリーパイなるものに手を出しました。
これからの時代IoTだと。
プログラミングなんてほとんど知らないのでインターネットから先人の方々のお知恵を拝借しました。
参考にしたサイトはこちら。
簡単にRaspberryPi+DHT11で気温と湿度を通知するTweetBotを作る。
と
ラズパイを通じてIoTデバイスからtwitterにつぶやいてみる(DHT11+IFTTT編)
私は…
挫折しました。
TwitterのAPI取得がめちゃくちゃ手間だったのです。
ですので、webhooksというものを使いIFTTTに飛ばし、そこからGoogleスプレッドシートに書き込んでいくという形にしました。
まず、ラズベリーパイをインストールし、設定などやっていきました。
家にUSBキーボードがなかったのでVNCでノートパソコンで操作できるようにしました。
挫折しました。
TwitterのAPI取得がめちゃくちゃ手間だったのです。
ですので、webhooksというものを使いIFTTTに飛ばし、そこからGoogleスプレッドシートに書き込んでいくという形にしました。
まず、ラズベリーパイをインストールし、設定などやっていきました。
家にUSBキーボードがなかったのでVNCでノートパソコンで操作できるようにしました。
よりDHT11の接続、温度と湿度の取得を行いました。
プログラムがどうなっているかほとんどわかりません。少し英語の力でこうなのかなと思えるくらいです。
超初心者。
なんとか温度、湿度が出るようになりました。
それをどう手元で確認できるようにするのか。
TwitterだとAPIに登録するところでめんどくさくなってつまづきました。
IFTTTはどうか?
Google大先生に教えを頂き、直接IFTTTではなくwebhooksというものを間にいれるということを知りました。
そこで、
ここでつまづきました。
dht11_ifttt.py
# -*- coding: utf-8 -*
import RPi.GPIO as GPIO
import dht11
import time
import os
import sys
sys.path.append('/path/to/program/') #auth_ifttt.pyのありか
import json
import requests
from auth_ifttt import(
ifttt_key
)
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
instance = dht11.DHT11(pin=21)
def getInfo():
while True:
result = instance.read()
if result.is_valid():
#print('温度:', str(result.temperature), '℃です。')
#print('湿度:', str(result.humidity), '%です。')
pass
break
time.sleep(1)
return result
def commInfo(current_time, res):
#IFTTT Webhooks
str_key = ifttt_key
str_event = "DHT11"
str_headers = {'Content-Type': 'application/json'}
str_json_data = {
"value1" : current_time,
"value2" : res.temperature,
"value3" : res.humidity
}
str_url = "https://maker.ifttt.com/trigger/"\
+ str_event\
+ "/with/key/"\
+ str_key
#print(str_url)
jd = json.dumps(str_json_data)
print("begin request")
s = requests.Session()
r = requests.post(str_url, data=jd, headers=str_headers)
#print("status code : ", r.status_code)
print("end request")
if r.status_code == 200:
return r.text
else:
return "error occurred!!"
if __name__ == '__main__':
#time stamp
timestamp = 'date +%F_%H:%M:%S'
current_time=os.popen(timestamp).readline().strip()
res = getInfo()
rt = commInfo(current_time, res)
print(rt)
どうやっても温度と湿度が出てきません。0になるのです。
プログラミング超初心者。どこをどう変えてもうまくいきません。
試行錯誤、Google大先生の聞いてもわかりません。
最後の望み、知人。
彼からラズパイの面白さを聞いたと言っても過言ではありません。
彼にどうすれば最後の値が返るのか尋ねました。
ちょっとしたら、彼は言います。
このプログラム、変だ。と。
なぬっ。
def getInfo():
while True:
result = instance.read()
if result.is_valid():
#print('温度:', str(result.temperature), '℃です。')
#print('湿度:', str(result.humidity), '%です。')
pass
break
time.sleep(1)
ここのpassが入らなくてbreakとtime.sleep(1)を一階層下げないといけない。と。
なんと。
そんなことがすぐわかるのか。
ということで修正しました。
最後、値が返るのか確認のためにprintがいくつか入っています。
# -*- coding: utf-8 -*
import RPi.GPIO as GPIO
import dht11
import time
import os
import sys
sys.path.append('/path/to/program/') #auth_ifttt.pyのありか
import json
import requests
from auth_ifttt import(
ifttt_key
)
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
instance = dht11.DHT11(pin=14)
def getInfo():
while True:
result = instance.read()
if result.is_valid():
print('温度:', str(result.temperature), '℃です。')
print('湿度:', str(result.humidity), '%です。')
break
time.sleep(1)
return result
def commInfo(current_time, res):
#IFTTT Webhooks
str_key = ifttt_key
str_event = “DHT11"
str_headers = {'Content-Type': 'application/json'}
str_json_data = {
"value1" : current_time,
"value2" : res.temperature,
"value3" : res.humidity
}
str_url = "https://maker.ifttt.com/trigger/"\
+ str_event\
+ "/with/key/"\
+ str_key
#print(str_url)
jd = json.dumps(str_json_data)
print("begin request")
s = requests.Session()
r = requests.post(str_url, data=jd, headers=str_headers)
#print("status code : ", r.status_code)
print("end request")
if r.status_code == 200:
print(res.temperature, res.humidity)
return r.text
else:
return "error occurred!!"
if __name__ == '__main__':
#time stamp
timestamp = 'date +%F_%H:%M:%S'
current_time=os.popen(timestamp).readline().strip()
res = getInfo()
rt = commInfo(current_time, res)
print(rt)
これで、値がWebhooksを通じてIFTTTへ行くようになりました。
IFTTTからGoogleスプレッドシートへ行くようになっています。
ちなみにこのプログラムはcronで1時間おきに動くようになっています。
…
なんとか完成。
知人、ありがとう。めちゃくちゃ助かった。
Comments