前提・実現したいこと
Raspberry Piと照度センサーから照度を感知し、閾値を設定したうえで現在その空間が明るいか、明るくないかの二段階を明るくなった時と暗くなった時で通知したいと考えています(幸い中途半端に暗いという状況はないため、二分できます)。
環境はPython 2.7です。
照度センサー→Raspberry Pi→100を基準に①明るく「なった」と判断 ②暗く「なった」と判断
①②それぞれをきっかけとしてIFTTTにwebhookを送信、そこからLINEに通知という流れを考えています。
私はプログラミングに関しては全くの初心者です。
過去の質問で少し進むことができましたが、また質問させていただきます。
https://teratail.com/questions/112364
現在Raspberry Piにi2cで照度を読ませ、Pythonを用いて実行時の明るさの数字を表示、また100を基準にstatusを出力させることには成功しています。
そして中途段階として、Cronを用いて毎分計測すること(常時測っているのがのが理想ですが、短い間隔での計測でも可です)、そしてシェルスクリプトを作成し、webhook、LINEに任意の文字を通知することは成功しています。
現在行き詰まっているのは、pythonでsubprocessでshファイルを起動させるところです。
どうか皆様のお力をお貸しください。
発生している問題・エラーメッセージ
Lux:9 Traceback (most recent call last): File "/home/pi/luxget.py", line 33, in <module> r = subprocess.Popen(shfile, status) File "/usr/lib/python2.7/subprocess.py", line 339, in __init__ raise TypeError("bufsize must be an integer") TypeError: bufsize must be an integer
該当のソースコード
python
1 2#!/user/bin/python 3# -*- coding: utf-8 -*- 4 5import smbus 6import subprocess 7 8threshold = 100 9logfile = "/tmp/lux.log" 10shfile = "/home/pi/post.sh" 11 12bus = smbus.SMBus(1) 13addr = 0x23 14luxRead = bus.read_i2c_block_data(addr,0x11) 15 16print("Lux:"+str(luxRead[1])) 17 18 19if luxRead[1] < threshold: 20 status = "0" 21else: 22 status = "1" 23if not status in laststatus: 24 r = subprocess.Popen(shfile, status)
#post.sh #!/bin/bash URL="https://maker.ifttt.com/trigger" EVENTNAME="Lux" YOUR_KEY="*********************" LUX="python light.py" WEBHOOKSURL="${URL}/${EVENTNAME}/with/key/${YOUR_KEY}" curl -X POST -H "Content-Type: application/json" -d \ '{"value1":"'明るくなりました'","value2":"'$2'","value3":"'$3'"}' \ ${WEBHOOKSURL} echo exit 0
試したこと
試しに最後を
if not status in laststatus: r = subprocess.Popen('/home/pi/post.sh')
として引数を与えないようもしてみましたが、以下のようなエラーでした。
Traceback (most recent call last): File "/home/pi/luxget.py", line 33, in <module> r = subprocess.Popen('/home/pi/postIF.sh') File "/usr/lib/python2.7/subprocess.py", line 390, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1024, in _execute_child raise child_exception OSError: [Errno 8] Exec format error
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/08 04:30
2018/02/08 08:27
2018/02/08 08:44
2018/02/08 08:48
2018/02/08 08:58
2018/02/08 09:09