mui Developer Editionで遊んでみる（HOME画面のカスタマイズ）

#この記事について
muiを入手したので、その開発情報を自分用にまとめたものです。

[mui Developer Editionで遊んでみる（準備編）](https://qiita.com/kobayuta/items/9a78b923648a2478604d)
[mui Developer Editionで遊んでみる（HOME画面のカスタマイズ）](https://qiita.com/kobayuta/items/76cd0d2483e42ae6e34d)
[mui Developer EditionでSORACOMを使ってみる](https://qiita.com/kobayuta/items/b8b15639be6c866641e1)


# 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する方法で実装しました。

```python:sample.py

    # 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を追加する処理を記載します。

```Python:sample.py
        gominohiView = Text('')
        gominohiView.setSize(0,0,100,8)
        self.addView(gominohiView)
        self.setView(gominohiView, 'gomi')

```

最後に表示データを更新する処理を追加します。とりあえずHOMEアプリが実行開始されるタイミングでデータを更新します。
muiのSDKではアプリケーションが開始されるタイミングで``startTask()``が、終了されるタイミングで``stopTask()``が呼び出されます。ですので、``startTask()``にテキストの更新処理を追加します。

```Python:sample.py
    def startTask(self):
        # check gomi no hi
        self.getView('gomi').setText(self.checkGominoHi())

        # start clock update
        self.getView('clock').startTick()
```

この修正を実行するとこのように表示されました。
![mui1.png](https://qiita-image-store.s3.amazonaws.com/0/392998/78826b46-771d-f467-8bea-32ea41adddc0.png)