GPS적 수제 전언 시스템

소개



집에 돌아오면 전언 메시지가 도착하는 시스템을 만들고 싶었습니다.
그리고 생각한 아이디어가 iBeacon을 사용하는 방법이었습니다.
Beacon에 가까워지면 알림이 와서 전언을 읽을 수 있다는 느낌입니다.
하지만 Mac이 없기 때문에 개발할 수 없다는 것을 깨달았습니다.
그러나 다시 깨달았습니다. 장소를 알고 싶다면 GPS를 사용하면 좋다는 것에.

만들고 싶은 것



집에 돌아오면 전언이 메시지가 도착하는 시스템.

준비하는 것



RaspberryPi (전언을 두는 곳)
iPhone(Pythonista3 설치됨)

완성 이미지



우선 A씨가 전언을 설정합니다.


그리고 B 씨가 집에 도착하면 전언이 도착한다는 이미지입니다.


만들기



iPhone 측 처리



전언 설정



설정하는 쪽은 Pythonista3로 손쉽게 만들었습니다.
UI에서 메시지를 가져오고 HTTP POST에서 보내는 중입니다.

set_msg.py
import requests
import ui
import console

def set_msg(sender):
    payload = {'text': 'set_msg', 'msg': sender.text}
    r = requests.post('http://YOUR_SERVER_ADDRESS/', data=payload)
    console.alert(`Message', sender.text, 'OK', hide_cancel_button=True)

view = ui.View()                                      
view.name = 'Set Message'                                    
view.background_color = 'white'
view.bounds = (0,0,450,600)

msg_field = ui.TextField(frame=(view.width * 0.05, view.height * 0.3, view.width * 0.75, view.height * 0.1), title='input message')
msg_field.action = set_msg

view.add_subview(msg_field)
view.present('sheet')

다가왔다는 사실을 알려



이것은 iPhone이 장착 된 GPS를 사용합니다. 이쪽도 손쉽게 Pythonista3로 만들었습니다.
매분마다 위치를 결정하고 가까워지면 HTTP POST를 수행합니다.
나가기 직전에 스크립트를 시작한다고 가정합니다.
스크립트를 시작한 위치가 집이라고 가정합니다.
이 위치를 임의의 장소로 변경하면, 그 지점에 도달했을 때에 메세지를 보내는 것도 가능합니다.

gps_msg.py
import location
import notification
import requests
import console
from time import sleep

console.set_idle_timer_disabled(True)

geocode=location.get_location()
home_lat = geocode['latitude']
home_lng = geocode['longitude']
print(home_lat)
print(home_lng)

while True:
    sleep(60)
    location.start_updates()
    cur_geocode=location.get_location()
    cur_lat = cur_geocode['latitude']
    cur_lng = cur_geocode['longitude']
    print(cur_lat)
    print(cur_lng)
    if home_lat - 0.0003 < cur_lat and cur_lat < home_lat + 0.0003:
        if home_lng - 0.0003 < cur_lng and cur_lng < home_lng + 0.0003:
            payload = {'text': 'send_msg'}
            requests.post('http://YOUR_SERVER_ADDRESS/', data=payload)

    location.stop_updates()

백그라운드 동작을 계속하는 것 같습니다만, 장시간의 가동은 시도하고 있지 않습니다.

RaspberryPi 측 처리



전언을 받고 보내기



RaspberryPi를 웹 서버로 사용하여 PHP에서 전언을 받고 보내는 과정을 수행합니다.
HTTP POST를 계기로 각 처리를 실행합니다.
전언은 set_msg 로 텍스트에 저장하고 send_msg 로 Slack 게시를 합니다.
일단 메시지를 보내면 내용을 지우고 보내지 않게 하고 있습니다.
<?php
function func_set_msg($msg){
    $filename = '/home/pi/work/msg.txt';
    file_put_contents($filename, $msg);
    return;
}

function func_send_msg(){
    exec("python3 /home/pi/python_code/slack_msg.py");
    $filename = '/home/pi/work/msg.txt';
    file_put_contents($filename, '');

    return;
}

if($_POST['text'] == "set_msg"):
    func_set_msg($_POST['msg']);
endif;

if($_POST['text'] == "send_msg"):
    func_send_msg();
endif;
?>

Slack 게시



Slacker를 사용하여 텍스트 메시지를 게시하기만 하면 됩니다.
from slacker import Slacker
import codecs

token = "set_your_token"
slacker = Slacker(token)
channel_name = "#" + "general"

message = ''

with codecs.open('/home/pi/work/msg.txt','r', 'utf-8') as f:
    message = f.read()

if message != '' :
    slacker.chat.post_message(channel_name, message)

테스트



테스트이므로 스스로 전언을 설정하고 스스로 받습니다.
먼저 전언을 설정합니다.


설정할 수 있었습니다.


그리고 외출합니다.
집에 붙었는지 여부의 판정이 적당하기 때문에 가능한 멀리 갑니다.
그리고. . .
집에 돌아왔습니다.

전언, 왔어요.

마지막으로



보안 측면은 생각하지 않습니다.
완전히 자기 만족입니다.

좋은 웹페이지 즐겨찾기