일몰 무렵에 자동으로 조명을 켜 보자

일몰 무렵에 자동으로 조명을 켜 보자



하고 싶은 일



방이 어두워지면 작업하기 어려우므로 자동으로 조명이 켜지도록 한다.

환경



- 적외선 원격 제어 회로를 연결한 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.py
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)

(4)의 "오후 3시에"는 Raspbian에서 cron를 이용한다.
crontab을 설정합니다.
# crontab -e
0 15 * * 1-5 python3 /home/pi/python_code/light_on_sunset.py

이것으로 자동 조명 점등 시스템이 완성되었습니다!

마지막으로



일몰 무렵에 집의 조명이 붙어도 기쁘지 않다는 것을 알고 있다.
WebAPI를 사용하고 싶었을 뿐.

좋은 웹페이지 즐겨찾기