일몰 무렵에 자동으로 조명을 켜 보자
10086 단어 RaspberryPiJSONWebAPI파이썬IoT
일몰 무렵에 자동으로 조명을 켜 보자
하고 싶은 일
방이 어두워지면 작업하기 어려우므로 자동으로 조명이 켜지도록 한다.
환경
- 적외선 원격 제어 회로를 연결한 RaspberyPi는 이다
(적외선 리모컨을 만드는 방법은 Make. 참조)
-RaspberryPi에서 리모컨으로 조작 할 수있는 천장 조명이 있습니다.
-조도 센서 없음
- 인터넷 환경은
정책
인터넷에서 일몰 시간을 조사하고 그 시간 무렵에 RaspberryPi 리모컨으로 조명을 켜십시오.
조사
일몰 시간은 어떻게 알아볼까?
→ 일몰 시간을 얻는 WebAPI가 있다.
오하콘 번지는 ⁈API
· 파라미터 지정 예
1. 일출 · 일몰, 달의 일출 · 달의 진입 시각을 계산
?mode=sun_moon_rise_set&year=2017&month=10&day=12&lat=35.8554&lng=139.6512
파라미터는 mode, 날짜, 위도/경도가 필요.
위도/경도는 어떻게 얻는가?
GPS가 없다 → 주소에서 얻기
주소에서 위도/경도는 어떻게 취득합니까?
GoogleMAP WebAPI가 있다.
Geocoding API
조사한 결과 우편번호에서도 위도/경도를 얻을 수 있는 것 같다.
정밀도는 높지 않아도 되므로, 이것으로 충분.
방법
(1) RaspberryPi가 놓여있는 주소의 우편 번호에서 위도 경도를 조사한다.
(2) 위도 경도와 날짜로부터 일몰 시간을 조사한다.
(3) 일몰 시간 -20 분에 조명을 켜는 스크립트를 스케줄링한다.
(4) 상기를 매일 오후 3시(이 시간은 해가 지지 않을 것이다)에 실시한다.
코드
코드는 WebAPI를 이용하기 위해서는 requests가 쉽기 때문에 파이썬으로 만들었다.
이 코드는 상기 (1) (2) (3)의 처리를 행한다.
light_on_sunset.pyimport requests
import json
import xml.etree.ElementTree as etree
from datetime import date
import subprocess
from math import modf
#日没時刻を取得する関数
def get_time_sunset(year, month, day, lat,lng):
url = 'http://labs.bitmeister.jp/ohakon/api/?'
payload = {'mode':'sun_moon_rise_set', 'year':year, 'month':month, 'day':day, 'lat':lat, 'lng':lng}
response = requests.get(url, params=payload)
data = etree.fromstring(response.content)
return data[3][1].text
#郵便番号から緯度/経度を取得する関数
def get_geocode(zipcode):
url = 'https://maps.googleapis.com/maps/api/geocode/json?'
key = 'SetYourKey'
payload = {'address':zipcode, 'key':key}
response = requests.get(url, params=payload)
dict_json = response.json()
lat = dict_json['results'][0]['geometry']['location']['lat']
lng = dict_json['results'][0]['geometry']['location']['lng']
return (lat,lng)
#緯度/経度を取得
lat, lng = get_geocode('YourZipCode')
#日付を取得
today = date.today()
#日没時刻を取得
time_sunset = get_time_sunset(today.year, today.month, today.day, lat, lng)
#約20分前に点灯するように調整
num_time_light_on = float(time_sunset)-0.33
#時刻をHH:MMの形の文字列に変換
decimal, integer = modf(num_time_light_on)
minutes = int(60 * decimal)
hour = int(integer)
str_time_light_on = str(hour) + ':' + str(minutes)
#照明をつけるコマンド
cmd_light_on = '/home/pi/python_code/light_on.sh'
#ATでスケジューリング
at_cmd = "at -f " + cmd_light_on + ' ' + str_time_light_on
subprocess.call(at_cmd, shell=True)
(4)의 "오후 3시에"는 Raspbian에서 cron를 이용한다.
crontab을 설정합니다.
# crontab -e
0 15 * * 1-5 python3 /home/pi/python_code/light_on_sunset.py
이것으로 자동 조명 점등 시스템이 완성되었습니다!
마지막으로
일몰 무렵에 집의 조명이 붙어도 기쁘지 않다는 것을 알고 있다.
WebAPI를 사용하고 싶었을 뿐.
Reference
이 문제에 관하여(일몰 무렵에 자동으로 조명을 켜 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mitazet/items/00754f62ba089ea29353
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import requests
import json
import xml.etree.ElementTree as etree
from datetime import date
import subprocess
from math import modf
#日没時刻を取得する関数
def get_time_sunset(year, month, day, lat,lng):
url = 'http://labs.bitmeister.jp/ohakon/api/?'
payload = {'mode':'sun_moon_rise_set', 'year':year, 'month':month, 'day':day, 'lat':lat, 'lng':lng}
response = requests.get(url, params=payload)
data = etree.fromstring(response.content)
return data[3][1].text
#郵便番号から緯度/経度を取得する関数
def get_geocode(zipcode):
url = 'https://maps.googleapis.com/maps/api/geocode/json?'
key = 'SetYourKey'
payload = {'address':zipcode, 'key':key}
response = requests.get(url, params=payload)
dict_json = response.json()
lat = dict_json['results'][0]['geometry']['location']['lat']
lng = dict_json['results'][0]['geometry']['location']['lng']
return (lat,lng)
#緯度/経度を取得
lat, lng = get_geocode('YourZipCode')
#日付を取得
today = date.today()
#日没時刻を取得
time_sunset = get_time_sunset(today.year, today.month, today.day, lat, lng)
#約20分前に点灯するように調整
num_time_light_on = float(time_sunset)-0.33
#時刻をHH:MMの形の文字列に変換
decimal, integer = modf(num_time_light_on)
minutes = int(60 * decimal)
hour = int(integer)
str_time_light_on = str(hour) + ':' + str(minutes)
#照明をつけるコマンド
cmd_light_on = '/home/pi/python_code/light_on.sh'
#ATでスケジューリング
at_cmd = "at -f " + cmd_light_on + ' ' + str_time_light_on
subprocess.call(at_cmd, shell=True)
# crontab -e
0 15 * * 1-5 python3 /home/pi/python_code/light_on_sunset.py
Reference
이 문제에 관하여(일몰 무렵에 자동으로 조명을 켜 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mitazet/items/00754f62ba089ea29353텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)