著者:麻生 二郎
小型コンピュータボードの最新機種「Raspberry Pi 4 Model B」が国内で発売できる状態になりました。Raspberry 4 Model Bは、高機能かつ高性能なハードウエアです。このラズパイが登場することでラズパイの適用範囲が広がりますが、同時に古いモデルが不要になります。いらなくなったラズパイを有効利用する三つの方法を紹介します。
シェルスクリプトマガジン Vol.63は以下のリンク先でご購入できます。
図5 DMを一斉送信するシェルスクリプト(raspi_dm.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/sh SOURCE_ADDRESS="自分のGmailアドレス" DISTINATION_LIST="sendlist.txt" USER_ID="Googleアカウントのユーザー名" PASSWORD="Googleアカウントのパスワード" MESSAGE_TEMPLATE_FILE="message.txt" NUMBER_SEND=$(cat ${DISTINATION_LIST} | wc -l) sed "s/%source_address%/${SOURCE_ADDRESS}/" ${MESSAGE_TEMPLATE_FILE} > /tmp/tmp_message.txt for i in $(seq ${NUMBER_SEND}) do DISTINATION_ADDRESS=$(sed -n ${i}p ${DISTINATION_LIST} | cut -f 1) DISTINATION_NAME=$(sed -n ${i}p ${DISTINATION_LIST} | cut -f 2) sed "s/%name%/${DISTINATION_NAME}/g" /tmp/tmp_message.txt | sed -e "s/%distination_address%/${DISTINATION_ADDRESS}/" > /tmp/message.txt curl -s -k --url 'smtps://smtp.gmail.com:465' --mail-rcpt ${DISTINATION_ADDRESS} --mail-from ${SOURCE_ADDRESS} --user ${USER_ID}:${PASSWORD} --upload-file /tmp/message.txt done rm /tmp/tmp_message.txt /tmp/message.txt |
図6 送信メッセージのテンプレートファイル(message.txt)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
To: %distination_address% From: %source_address% Subject: 同窓会のご案内 Content-Type: text/plain; charset="UTF-8" %name% お元気ですか? ご無沙汰しております。 早速ですが、下記の日程で同窓会を開催いたします。お手数をおかけしますが、出欠をメールにてご返信ください。%name%にお会いできるのを楽しみにしています。 記 日時:2019年11月30日(土曜日) 16時から 場所:〇〇〇高等学校 体育館 会費:5000円 以上 |
図7 送信先のメールアドレスと、個別に書き換えたい情報を保存し
たタブ区切りテキストファイル(sendlist.txt)
1 2 3 |
taro@example.co.jp シェルマグ太郎先生 hanako@example.com シェルマグ花子さん jiro@example.com マガジン二郎君 |
図11 受信メッセージをLINEに転送するシェルスクリプト (raspi_mail_line.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#!/bin/sh POP_SERVER="pop.gmail.com" USER_ID="Googleアカウントのユーザー名" PASSWORD="Googleアカウントのパスワード" LINE_TOKEN="LINE Notifyのアクセストークン" SUBJECT_BASE64="44CQ6YeN6KaB44CR" expect -c " set timeout 30 spawn openssl s_client -connect ${POP_SERVER}:995 expect \"+OK Gpop ready\" send \"user ${USER_ID}\n\" expect \"+OK send PASS\" send \"pass ${PASSWORD}\n\" expect \"+OK Welcome.\" send \"stat\n\" expect \"+OK\" send \"quit\n\" expect \"+OK Farewell.\" exit 0 " > receive.log RECEIVE_COUNT=$(grep +OK receive.log |tail -n2 |head -n 1 | cut -d " " -f 2) for i in $(seq ${RECEIVE_COUNT}) do expect -c " set timeout 30 spawn openssl s_client -connect ${POP_SERVER}:995 expect \"+OK Gpop ready\" send \"user ${USER_ID}\n\" expect \"+OK send PASS\" send \"pass ${PASSWORD}\n\" expect \"+OK Welcome.\" send \"retr 1\n\" expect \".\" send \"quit\n\" expect \"+OK Farewell.\" exit 0 " > message.log SUBJECT=$(cat message.log | grep "Subject: =" | sed "s/Subject: =?UTF-8?B?//g "| cut -c 1-16) if [ ${SUBJECT} = ${SUBJECT_BASE64} ] ; then cat message.log | awk '/Content-Language\: en-US/,/^\./' | head -n -1 | tail -n +2 > message.txt curl -s -X POST -H "Authorization: Bearer ${LINE_TOKEN}" -F "message=$(cat message.txt)" https://notify-api.line.me/api/notify fi done |
図5 エアコン制御のシェルスクリプト(raspi_aircon)
1 2 3 4 5 6 7 8 |
#!/bin/sh case $1 in "on" ) bto_advanced_USBIR_cmd -d $(cat /var/aircon/start.txt);; "off" ) bto_advanced_USBIR_cmd -d $(cat /var/aircon/stop.txt);; esac |