close_btn
로그인, 회원가입후 더 많은 혜택을 누리세요 로그인 회원가입 닫기

라즈베리파이 부팅시 IP email로 수신하기

lovetang 2016.09.19 13:10 조회 수 : 300 추천:2

 

참고링크 http://fireloaf0.egloos.com/9840795  (현동일 연구원 )

 

다음 링크를 참조하여 앱 비밀번호를 발급받는다.

https://support.google.com/accounts/answer/185833

 

1. python script 작성

2. python script를 실행가능하게 설정

3. 부팅시 프로그램이 실행되도록 설정

 

 

 

 

설정해 보기

 

 


 

sudo nano startup_mailer.py

 

 

#============================================================================================

__author__ = 'Cody Giles'

__license__ = "Creative Commons Attribution-ShareAlike 3.0 Unported License"

__version__ = "1.0"

__maintainer__ = "Cody Giles"

__status__ = "Production"

 

import subprocess

import smtplib

from email.mime.text import MIMEText

import datetime

 

def connect_type(word_list):

    """ This function takes a list of words, then, depeding which key word, returns the corresponding

    internet connection type as a string. ie) 'ethernet'.

    """

    if 'wlan0' in word_list or 'wlan1' in word_list:

        con_type = 'wifi'

    elif 'eth0' in word_list:

        con_type = 'ethernet'

    else:

        con_type = 'current'

 

    return con_type

 

# Change to your own account information

# Account Information

to = 'username@email.com' # Email to send to.

gmail_user = 'username@gmail.com' # Email to send from. (MUST BE GMAIL)

gmail_password = 'gmailpassword' # Gmail password.

smtpserver = smtplib.SMTP('smtp.gmail.com', 587) # Server to use.

 

smtpserver.ehlo()  # Says 'hello' to the server

smtpserver.starttls()  # Start TLS encryption

smtpserver.ehlo()

smtpserver.login(gmail_user, gmail_password)  # Log in to server

today = datetime.date.today()  # Get current time/date

 

arg='ip route list'  # Linux command to retrieve ip addresses.

# Runs 'arg' in a 'hidden terminal'.

p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE)

data = p.communicate()  # Get data from 'p terminal'.

 

# Split IP text block into three, and divide the two containing IPs into words.

ip_lines = data[0].splitlines()

split_line_a = ip_lines[1].split()

split_line_b = ip_lines[2].split()

 

# con_type variables for the message text. ex) 'ethernet', 'wifi', etc.

ip_type_a = connect_type(split_line_a)

ip_type_b = connect_type(split_line_b)

 

"""Because the text 'src' is always followed by an ip address,

we can use the 'index' function to find 'src' and add one to

get the index position of our ip.

"""

ipaddr_a = split_line_a[split_line_a.index('src')+1]

ipaddr_b = split_line_b[split_line_b.index('src')+1]

 

# Creates a sentence for each ip address.

my_ip_a = 'Your %s ip is %s' % (ip_type_a, ipaddr_a)

my_ip_b = 'Your %s ip is %s' % (ip_type_b, ipaddr_b)

 

# Creates the text, subject, 'from', and 'to' of the message.

msg = MIMEText(my_ip_a + "\n" + my_ip_b)

msg['Subject'] = 'IPs For RaspberryPi on %s' % today.strftime('%b %d %Y')

msg['From'] = gmail_user

msg['To'] = to

# Sends the message

smtpserver.sendmail(gmail_user, [to], msg.as_string())

# Closes the smtp server.

smtpserver.quit()

#============================================================================================

 

 

 

위 코드를 복사한 후 우클릭하여 붙여넣기

 

다음 부분을 개인에 맞게 수정

to = 'username@email.com' # Email to send to.

gmail_user = 'username@gmail.com' # Email to send from. (MUST BE GMAIL)

gmail_password = 'gmailpassword' # Gmail password.

 

 

sudo chmod +x startup_mailer.py

 

script 동작여부 확인, 이메일이 수신되었는지 확인


 

sudo python startup_mailer.py

 

 

에러가 발생할 경우, script 열어서 다음과 같이 수정

#============================================================================================

__author__ = 'Cody Giles'

__license__ = "Creative Commons Attribution-ShareAlike 3.0 Unported License"

__version__ = "1.0"

__maintainer__ = "Cody Giles"

__status__ = "Production"

 

import subprocess

import smtplib

from email.mime.text import MIMEText

import datetime

 

def connect_type(word_list):

    """ This function takes a list of words, then, depeding which key word, returns the corresponding

    internet connection type as a string. ie) 'ethernet'.

    """

    if 'wlan0' in word_list or 'wlan1' in word_list:

        con_type = 'wifi'

    elif 'eth0' in word_list:

        con_type = 'ethernet'

    else:

        con_type = 'current'

 

    return con_type

 

# Change to your own account information

# Account Information

to = 'username@email.com' # Email to send to.

gmail_user = 'username@gmail.com' # Email to send from. (MUST BE GMAIL)

gmail_password = 'gmailpassword' # Gmail password.

smtpserver = smtplib.SMTP('smtp.gmail.com', 587) # Server to use.

 

smtpserver.ehlo()  # Says 'hello' to the server

smtpserver.starttls()  # Start TLS encryption

smtpserver.ehlo()

smtpserver.login(gmail_user, gmail_password)  # Log in to server

today = datetime.date.today()  # Get current time/date

 

arg='ip route list'  # Linux command to retrieve ip addresses.

# Runs 'arg' in a 'hidden terminal'.

p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE)

data = p.communicate()  # Get data from 'p terminal'.

 

# Split IP text block into three, and divide the two containing IPs into words.

ip_lines = data[0].splitlines()

split_line_a = ip_lines[1].split()

# split_line_b = ip_lines[2].split()

 

# con_type variables for the message text. ex) 'ethernet', 'wifi', etc.

ip_type_a = connect_type(split_line_a)

# ip_type_b = connect_type(split_line_b)

 

"""Because the text 'src' is always followed by an ip address,

we can use the 'index' function to find 'src' and add one to

get the index position of our ip.

"""

ipaddr_a = split_line_a[split_line_a.index('src')+1]

# ipaddr_b = split_line_b[split_line_b.index('src')+1]

 

# Creates a sentence for each ip address.

my_ip_a = 'Your %s ip is %s' % (ip_type_a, ipaddr_a)

# my_ip_b = 'Your %s ip is %s' % (ip_type_b, ipaddr_b)

 

# Creates the text, subject, 'from', and 'to' of the message.

msg = MIMEText(my_ip_a) # + "\n" + my_ip_b)

msg['Subject'] = 'IPs For RaspberryPi on %s' % today.strftime('%b %d %Y')

msg['From'] = gmail_user

msg['To'] = to

# Sends the message

smtpserver.sendmail(gmail_user, [to], msg.as_string())

# Closes the smtp server.

smtpserver.quit()

#============================================================================================

 

 

 

 

부팅 시 script가 실행되도록 설정

 sudo nano /etc/rc.local

 

 

script에서 다음과 같이 한 줄 추가

 

#============================================================================================

 # rc.local

 #

 # This script is executed at the end of each multiuser runlevel.

 # Make sure that the script will "exit 0" on success or any other

 # value on error.

 #

 # In order to enable or disable this script just change the execution

 # bits.

 #

 # By default this script does nothing.

 # Print the IP address if it doesn't work ad sleep 30 before all your code 

 _IP=$(hostname -I) || true

 if [ "$_IP" ]; then

   printf "My IP address is %s\n" "$_IP"

   python /home/pi/startup_mailer.py        <<<------ ADD THIS LINE!!!

 fi

 exit 0

#============================================================================================

 

 

제대로 동작하지 않는 경우는

주석문 바로 밑에 sleep 10을 추가한다.

시간을 길게 주면 줄수록 제대로 동작할 확률이 높아지지만

부팅시간이 길어진다.

 

*허나 여러연구원들이 해본결과 잘 되는 분도 있고 안되는 분들도 있네요*

이유는 아직 잘 모르겠습니다.

번호 제목 글쓴이 날짜 조회 수
공지 모두의IoT 연구실 안내 모두의연구소 2016.06.12 178
공지 모두의IoT 연구실 안내 모두의연구소 2016.06.12 294
공지 모두의IoT 연구실 안내 모두의연구소 2016.06.12 1381
59 10월 마지막주 복습 불나방 2016.11.07 148
58 [공모&대회정보] IoT 홈가전 개발 ~11.30 접수한 lovetang 2016.11.07 146
57 robot kitchen 2년전부터 관심있게 보던 로봇+ IoT lovetang 2016.10.30 155
56 MKR1000 + DHT11 + KT IoTMakers 연동 file lovetang 2016.10.30 475
55 LoRa + IoT lovetang 2016.10.27 1079
54 [온습도센서-아두이노 ] SHT11 file lovetang 2016.10.25 302
53 아두이노 MKR1000 직구 했슴당. [1] lovetang 2016.10.19 356
52 [SK ThingPlug 초기자료] lovetang 2016.10.19 477
51 [KT IoTMakers 초기자료 수집] [1] lovetang 2016.10.19 583
50 교육강좌 사이트 & IoT플랫폼 (계속 수정 합니다.) lovetang 2016.10.16 243
49 [ARTIK 입문기 3회] lovetang 2016.10.15 574
48 라즈베리파리 + HDMI 연결 모니터 해상도 변경하기 lovetang 2016.10.14 1233
47 [ARTIK 입문기 2회] lovetang 2016.10.10 895
46 [ARTIK 입문기 1회 - 목소리 녹음 "Say Hello~~"] [1] file lovetang 2016.09.22 1313
» 라즈베리파이 부팅시 IP email로 수신하기 lovetang 2016.09.19 300
44 [기초 용어 이해하기 ] lovetang 2016.09.19 967
43 MongoDB - 라즈베리파이 제시버전용 (수정중) lovetang 2016.09.12 547
42 [Arduino] 아두이노와 BLE + Json +EEPROM(DATABASE)+SD카드 +RTC (정리중) file lovetang 2016.08.30 532
41 [ARTIK] 아틱 소식 1 lovetang 2016.08.30 268
40 D3.js (4) Node.js에서 D3.js - CSV 인덱스 콜백 함수 이해 lovetang 2016.08.29 133