2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

定期ツイートを間欠動作で実施してラズパイの消費電力を削減

Last updated at Posted at 2021-08-26

はじめに

IMG_2115 - コピー.jpg

前回記事の続編でアプリケーション利用時の消費電力を計測します。
具体的には定期的なツイートと間欠動作を行います。

仕組みはざっくりと以下のようにラズパイの電源ON状態を減らすことで電力削減を図ります。
image.png

結論

1日当たりの消費電力量は、ツイート間欠動作(1サイクル60分)で「通常稼働させる場合」と比較して約98%削減されます。

前回よりも消費電力が低下しましたが、理由は稼働時間が大幅に短くなったことにあります。

前回の稼働時間 = 1分間
今回の稼働時間 = 1秒程度(ツイートした瞬間に待機状態へ移行のため短時間稼働)

検証方法・結果は以下記事をご覧ください。

計測器

前回同様、zmart デジタル電圧電流電力量計のワットチェッカーを使用して計測します。
0.01Whから積算電力値を計測できます。

ソフトの環境構築

4GPiのセットアップを行います。

①OSのセットアップ & 4GPiのインストール手順
https://qiita.com/vascodagama/items/114619c2bcf020226cd7#公式busterイメージのダウンロード
②SIMの情報登録方法
https://qiita.com/vascodagama/items/114619c2bcf020226cd7#simカードの情報を登録

slee-Pi3のセットアップを行います。

①slee-Pi3のインストール手順
https://qiita.com/vascodagama/items/6fae12853e861614635a#slee-pi3パッケージのインストール
②タイマー設定
https://qiita.com/vascodagama/items/3e8fda53e8780056a7e7#タイマー動作

ツイートプログラム

Twitterには簡単にツイートするプログラムを作成できるAPIがあるのでこちらを使用します。
使用にあたり、Twitterのアカウント登録とAPI利用申請が必要です。

API利用申請の手順
https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/

プログラミング言語はpythonを使用します。
pythonでtwitter APIを利用するためのパッケージをインストールします。

sudo apt-get -y install python3-pip
sudo pip3 install tweepy

ツイートするプログラムを作成します。

/home/pi/tweet.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tweepy
import datetime
#twitter APIで得た各種キーを代入
APIKEY="取得したAPIKEYを入力"
APISCT="取得したAPISCTを入力"
ACSTKN="取得したACSTKNを入力"
ACSSCT="取得したACSSCTを入力"

# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(APIKEY, APISCT)
auth.set_access_token(ACSTKN, ACSSCT)
api = tweepy.API(auth)

# ツイートの内容
api.update_status("tweet test:" + "{0:%Y-%m-%d %H:%M:%S}".format(datetime.datetime.now()))

注意
 Twitterの仕組上、プログラムでツイートする際に同文は重複として扱われるため投稿できません。
 日付等をツイートに追記して重複しない文章とする必要があります。

プログラムができましたら一度実行してみましょう。

python3 /home/pi/tweet.py

登録したアカウント上に以下のようにツイートできればOKです。
image.png

自動起動&ツイート&自動シャットダウンの設定構築

今回のやりたいことを簡単に実現できるsystemdを使用します。

/etc/systemd/system/tweetSystem.service
[Unit]
Description = tweet program
# サービスの概要入力です。自由に入力してください。

After = network-online.target
Requires = network-online.target
# ツイートプログラム実行前にネットワークを起動が必要なのでAfterとRequiresにnetwork-online.targetを指定

[Service]
Type = oneshot
ExecStartPre = sleepi3alarm set "+59min"
# 事前実行するプログラム。ここでは59分後に自動起動するslee-Pi3のタイマ設定

ExecStart = /home/pi/tweet.py
# 本実行プログラム。ここではツイートプログラムのパスを指定

ExecStartPost = poweroff
# ExecStart成功後に実行するプログラム。ここではシャットダウン

[Install]
WantedBy = multi-user.target
# 自動起動させるのに必要な行です。

補足
 上記設定は、シャットダウンと起動を永遠と繰り返します。
 ExecStartが失敗すると、ExecStartPostは実行されませんので、ネットワークを遮断するとシャットダウンされないです。操作したいときはネットワークを遮断すればOKです。

network-online.targetを使用するために以下システムを有効化します。

sudo systemctl enable systemd-networkd
sudo systemctl enable systemd-networkd-wait-online

ツイートプログラムを実行する権限を与えます。

sudo chmod 0755 /home/pi/tweet.py

先程作成したsystemdの設定を有効化します。

sudo systemctl enable tweetSystem.service

再起動させると60分ごとのツイートが開始されます。

sudo reboot

より実用的な運用方法

上記設定ではネットワーク遮断された場合には、シャットダウンされずシステムは停止してしまいます。例えば、停電時やネットワークのトラブル時にはシステムは停止してしまいます。

そこでネットワークに接続できなかった場合でも、3分経過したら強制的にシャットダウンを行う設定を追加します。

①タイマの設定ファイルを作成

/etc/systemd/system/shutdownSystem.timer
[Unit]
Description = shutdown system timer
[Timer]
OnBootSec = 3 minutes
[Install]
WantedBy = timers.target

②systemdファイルの作成

/etc/systemd/system/shutdownSystem.service
[Unit]
Description = shutdown system service
[Service]
Type = oneshot
ExecStartPre = sleepi3alarm set "+56min"
ExecStart = poweroff

systemdの設定を有効化します。

sudo systemctl enable shutdownSystem.timer

再起動させると3分経過したら強制的にシャットダウンを行います。

#実測値

今回のプログラム実行時の実測値を以下に記します。

|ラズパイの状況|消費電力量|
| --- | --- | --- |---|
|起動時|0.04Wh|
|シャットダウン時|0.01Wh|
|ツイート時(1秒程度)|0.01Wh|

間欠動作時の消費電力量について

1分あたり消費電力量0.000002Whとして考えます。
※計算方法は前回記事参照

間欠動作なしの連続稼働

24時間の消費電力量:64.8Wh

1時間に一回ツイートする間欠動作

1サイクル(起動 + ツイート + シャットダウン + 59分待機)の消費電力量は
消費電力量:0.04Wh + 0.01Wh + 0.01Wh + 0.000002Wh × 59分 = 0.0601Wh
※起動時間 + ツイート + シャットダウン時間の合計は1分としてます

24時間(24サイクル)の消費電力量:0.0601Wh × 24 = 1.4428Wh
#間欠動作時の消費電力の効果

通常稼働時とアプリケーション利用時では消費電力は大差はありませんでした。
待機時間が多い運用方法の場合、slee-Pi3(間欠動作の仕組み)を利用することで
大幅な消費電力削減(約98%程度)が見込めます。

#変更履歴

前回の記事同様に
間欠動作時における1分あたりの待機時消費電力の計算が間違っておりました。。。
以前は0.0072Whとしておりましたが、現状の0.000002Whが正しい情報です。
誤った情報を発信してしまい大変申し訳ありませんでした。。。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?