1. ホーム
  2. 塾の紹介
  3. Raspberry Piで温湿度センサー1
  4. 同2
  5. 同3
  6. 最終
見附市000塾
中学生、高校生のための理系個人塾。新潟県見附市。

Raspberry Piを温湿度センサーに(最終)

§アラートメールの送信設定

さて、測定した温度が一定の数値を超えたら、アラートメールを送信したい場合があります。 そんな場合には、以下のように設定します。 まずは、設定ファイルを開きます。

        pi@raspberrypi:~ $ sudo vim /etc/munin/munin.conf
      

100行目付近に以下を記述します。

        contact.email.command mail -s "Munin Alerts!!!" yyy@gmail.com
        #contact.email.max_messages 1
        contact.email.always_send warning critical
        
        # a simple host tree
        [localhost.localdomain]
            address 127.0.0.1
            use_node_name yes
            temp.temp.warning 4:16
            temp.temp.critical 3:15
      

このセクションの内容は、参考文献[1]に詳しく掲載されています。 設定ファイル編集の1行目は、宛先のメールアドレスを記載してください。 9,10行目は、4度から16度という温度域から外れた時にwarningアラートメールを、3度から15度という温度域から外れた時にcriticalアラートメールを送信しなさいという命令です。

平均気温を自動で算出・メール送信

本セクションのpythonモジュールは、自作のため、よりよいコードがあるかもしれません。 それに関しましては、ご了承ください。 まずは新規ファイルを開きましょう。

        pi@raspberrypi:~ $ sudo vim /home/pi/program/log_handle.py
      

以下のように記述します。

        # -*- coding: utf-8 -*-

        import smtplib
        from email.MIMEText import MIMEText
        from email.Utils    import formatdate
        from email.Header import Header
        import datetime

        if __name__ == "__main__":

          file_in = open("log.txt")
          
          data = file_in.read()
          lines = data.split('\n')

          counter = 0
          sum_num = 0

          for line in lines:

            counter += 1
            bad_line = "nan" in line

            if counter == 1 or counter == 2:    # 二行目までは無視
              pass
            elif bad_line == 1:                 # 1=True
              counter -= 1
            elif line == "":
              counter -= 1
            else:
              value = float(line[12:17]) # 有効数字部
              expo = line[26:28]    	 # 指数部

              if expo == "01":
                value = value * 10

              sum_num += value

          element = counter - 2
          if element > 0:
            average = sum_num / element
          else:
            average = 0
          
          file_in.close()

        ############################################

          today = datetime.date.today()

          from_address = "xxx@gmail.com"
          to_address   = "yyy@gmail.com"

          login_user = 'xxx@gmail.com'
          login_pass = 'passward'

          charset = "ISO-2022-JP"
          subject = u"Munin Data"
          text    = u"Temperature Average of Today(%s) is %f C." % (today, average)

          msg = MIMEText(text.encode(charset),"plain",charset)
          msg["Subject"] = Header(subject,charset)
          msg["From"]    = from_address
          msg["To"]      = to_address
          msg["Date"]    = formatdate(localtime=True)

          smtp = smtplib.SMTP('smtp.gmail.com', 587)
          smtp.ehlo()
          smtp.starttls()
          smtp.ehlo()
          smtp.login(login_user, login_pass)
          smtp.sendmail(from_address, [to_address], msg.as_string())
          smtp.close()
        

ファイルをコピーします。

          pi@raspberrypi:~ $ cd /
        
          pi@raspberrypi:/ $ mkdir temp_avg
          
          pi@raspberrypi:/ $ sudo cp /home/pi/program/log_handle.py /temp_avg
        

モジュールを実行させるための設定をします。以下のファイルを開きます。

          pi@raspberrypi:~ $ sudo vim /usr/share/munin/plugins/temp
        

以下のように編集します。一部のみ抜粋。

            echo 'temp.draw LINE2'
            echo 'temp.type GAUGE'
            exit 0
          fi

          day1=`date '+%d'`
          day2=`date -d '6 minutes' '+%d'`
          day3=`date '+%Y%m%d'`
          day4=`date -d '1 days' '+%Y%m%d'`

          if [ $day1 != $day2 ]; then
          #if [ $day1 = $day2 ]; then
            rrdtool fetch /var/lib/munin/localdomain/localhost.localdomain-temp-temp -g.rrd AVERAGE -s $day3 -e $day4 > /temp_avg/log.txt
            python /temp_avg/log_handle.py
          fi

          echo "temp.value $GETNUM";
        

実はday1,2,3,4が少し粗削りな設定ですが、お許しください。 以上で設定は終了です。

前のページへ

冒頭に戻る

参考文献/URL

  1. 棚からパルチャギ