#この記事について
muiを入手したので、その開発情報を自分用にまとめたものです。
mui Developer Editionで遊んでみる(準備編)
mui Developer Editionで遊んでみる(HOME画面のカスタマイズ)
mui Developer EditionでSORACOMを使ってみる
HOME画面をカスタマイズしてみる
muiのSDKに付属のサンプルだけでは何もできませんので、さっそくカスタマイズをしてみます。
最初に、個人的に一番欲しかったゴミの日をお知らせしてくれる機能をHOME画面に追加してみたいと思います。
ゴミの日のデータを探す。
まず、ごみを出せる日をデータとして持つ必要があります。
私が住んでいる長野市では、ごみ収集日をエクセルでダウンロードできるので、まずはそれをダウンロードします。
今年のデータは以下のページからダウンロードすることが出来ます。
https://www.city.nagano.nagano.jp/site/kateigomi/423431.html
正直、このデータがダウンロードできる長野市は偉いと思います。若干神エクセルっぽいですが、できないよりはできたほうが良いので。
データを変換する
ダウンロードした神エクセルから使える形に変換します。ゴミの種類ごとにCSVファイルに変換します。こんな感じ。
2019-04-02,
2019-04-05,
2019-04-09,
2019-04-12,
2019-04-16,
2019-04-19,
2019-04-23,
2019-04-26,
それぞれの収集日データを作成したら、Raspberry Pi側に転送しておきます。ここでは~/mui/mui-display-lib/sample/gomi以下に下記のファイル名で保存しました。
ごみの種類 | ファイル名 |
---|---|
可燃ごみ | kanen.csv |
プラごみ | pla.csv |
不燃ごみ | funen.csv |
神ごみ | kami.csv |
缶ごみ | kan.csv |
ビンごみ | bin.csv |
##コードを修正する
class HomeApp(MyMUIApp, OnUpdateRequestListener, OnTouchEventListener):
クラスを修正していきます。
まずごみの日を検索する処理を追加します。今回はお手軽にファイルの中を日付文字列でsearchする方法で実装しました。
# Check Gomi no hi
def searchStringInFile(self, fileName, searchText):
ld = open(fileName)
lines = ld.readlines()
ld.close()
for line in lines:
if line.find(searchText) >= 0:
return True
return False
def checkGominoHi(self):
strGominoHiMsg = ""
tdatetime = dt.now(timezone(timedelta(hours=9)))
tstr = tdatetime.strftime('%Y-%m-%d')
if (self.searchStringInFile(os.path.normpath(os.path.join(dir, './gomi/kanen.csv')),tstr) == True ):
strGominoHiMsg = "今日は可燃ごみの日です"
if (self.searchStringInFile(os.path.normpath(os.path.join(dir, './gomi/pla.csv')),tstr) == True ):
strGominoHiMsg = "今日はプラごみの日です"
if (self.searchStringInFile(os.path.normpath(os.path.join(dir, './gomi/funen.csv')),tstr) == True ):
strGominoHiMsg = "今日は不燃ごみの日です"
if (self.searchStringInFile(os.path.normpath(os.path.join(dir, './gomi/kami.csv')),tstr) == True ):
strGominoHiMsg = "今日は紙ごみの日です"
if (self.searchStringInFile(os.path.normpath(os.path.join(dir, './gomi/kan.csv')),tstr) == True ):
strGominoHiMsg = "今日は缶ごみの日です"
if (self.searchStringInFile(os.path.normpath(os.path.join(dir, './gomi/bin.csv')),tstr) == True ):
strGominoHiMsg = "今日はビンごみの日です"
return strGominoHiMsg
次に、ごみの日かどうかを表示するViewを追加します。def __init__(self, appEventListener: AppEventListener):
で画面の定義を行っているので、ここにViewを追加する処理を記載します。
gominohiView = Text('')
gominohiView.setSize(0,0,100,8)
self.addView(gominohiView)
self.setView(gominohiView, 'gomi')
最後に表示データを更新する処理を追加します。とりあえずHOMEアプリが実行開始されるタイミングでデータを更新します。
muiのSDKではアプリケーションが開始されるタイミングでstartTask()
が、終了されるタイミングでstopTask()
が呼び出されます。ですので、startTask()
にテキストの更新処理を追加します。
def startTask(self):
# check gomi no hi
self.getView('gomi').setText(self.checkGominoHi())
# start clock update
self.getView('clock').startTick()