あけましておめでとうございます。 近所のホムセンでポテトバッグが売っていたので、今年はベランダ菜園でじゃがいもを育ててみようと植えた話です。
ただ植えるだけでじゃあれなので、結構前に買ってからそのまま寝かしてたPomoroniのGrow使って水分量も測ってみました。

ポテトバッグとじゃがりこバケ土

ホムセンにこんな感じで売られていたので1週間くらい悩んでから衝動的に購入

きっとこれを育てればポテトチップスとかじゃがりこを収穫できるはず。たぶん。

植えるまで

芽出し

なんか数週間、種芋を日光浴(直射日光はNGらしい)させて芽をださせてから植えると成功率があがるとあったので、芽出しを実施。
室内のそこそこ日当たりいいとこで結局1ヶ月?くらい放置してこんな感じに。

植える

裏に書いてある手順どおりに、穴を開けて、深めに種芋を植えて、完了です。
植えるのは非常に簡単でした。

最後に水やりをして芽が出るまでほぼ放置(水やりすぎるほうがNGらしい)でOKと書かれていたのでこのまま放置予定。

Growの準備

セットアップ

チュートリアルにある通りRasPi準備して、以下のコマンドで準備完了。

curl -sSL https://get.pimoroni.com/grow | bash

セットアップ完了後に、水分量センサーをぶっ刺して準備完了です。

本来は室内栽培用なので、屋外栽培でどこまで動くかは…まぁ運頼み?でいく作戦です。

カスタマイズ

ここまでは手順どおりにやった感じですが、Growは液晶で状態確認をするのが普通な使い方のようです。
とりあえず、「監視なのでZabbixで見たいよね」という脳死した感じの発送しかないのでちょこっといじってZabbixで見れるようにします。

とりあえず自作のpyzbxtoolを使ってZabbixSenderで投げれるように修正。
最終的に/usr/bin/grow-monitorをこんな感じに修正しました。
液晶表示とか不要なので、本来はもっとコード減らせるはずだけど、いじるのを最低限にしたかったので雑改修です。

--- monitor.py  2023-03-26 17:40:18.160950025 +0900
+++ grow-monitor_zbx.py 2023-03-26 17:39:53.120949852 +0900
@@ -18,6 +18,7 @@
 from grow.moisture import Moisture
 from grow.pump import Pump

+import pyzbxtool

 FPS = 10

 class View:
     def __init__(self, image):
@@ -998,6 +1010,17 @@


 def main():
+    # Zabbix sensot
+    zbx_sender = pyzbxtool.ZabbixSender("zbx.zumwalt.info", "10051")
+
+    # Zabbix Kyes
+    zbx_keys = {
+        "grow.s1.sat": "",
+        "grow.s2.sat": "",
+        "grow.s3.sat": "",
+        "grow.light":"",
+    }
+
     def handle_button(pin):
         index = BUTTONS.index(pin)
         label = LABELS[index]
@@ -1042,6 +1065,7 @@
         Channel(2, 2, 2),
         Channel(3, 3, 3),
     ]
+    print(channels)

     alarm = Alarm(image)
@@ -1127,9 +1151,20 @@
             channel.update()
             if channel.alarm:
                 alarm.trigger()
+            zbx_key_name = f"grow.s{channel.channel}.sat"
+            zbx_keys[zbx_key_name] = float(channel.sensor.saturation) * 100

-        light_level_low = light.get_lux() < config.get_general().get("light_level_low")
+        host = "pigrow"
+        zbx_keys["grow.light"] = light.get_lux()
+        for zbx_key, zbx_value in zbx_keys.items():
+            zbx_sender.add(host, zbx_key, zbx_value)
+        result = zbx_sender.send()
+        print(result)

+        light_level_low = light.get_lux() < config.get_general().get("light_level_low")
         alarm.update(light_level_low)

         viewcontroller.update()
@@ -1150,7 +1185,7 @@

         config.save()

-        time.sleep(1.0 / FPS)
+        time.sleep(60)


 if __name__ == "__main__":

Zabbixテンプレート作成

水分量センサー3個と明るさを取れるGrowテンプレートを作成しました。
さくっとこんな感じに。

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>5.4</version>
    <date>2023-03-26T08:50:17Z</date>
    <groups>
        <group>
            <uuid>7df96b18c230490a9a0a9e2307226338</uuid>
            <name>Templates</name>
        </group>
    </groups>
    <templates>
        <template>
            <uuid>93ec92e081a243178f2d7ba1c50737d8</uuid>
            <template>Template Grow</template>
            <name>Template Grow</name>
            <groups>
                <group>
                    <name>Templates</name>
                </group>
            </groups>
            <items>
                <item>
                    <uuid>0443f9a180254803955552864b4f4096</uuid>
                    <name>grow light</name>
                    <type>TRAP</type>
                    <key>grow.light</key>
                    <delay>0</delay>
                    <history>365d</history>
                    <trends>1000d</trends>
                    <value_type>FLOAT</value_type>
                    <units>lux</units>
                    <tags>
                        <tag>
                            <tag>Vender</tag>
                            <value>Pimoroni</value>
                        </tag>
                    </tags>
                </item>
                <item>
                    <uuid>a95eb4d0665346d29ec57d7edd8084c0</uuid>
                    <name>S1 saturation</name>
                    <type>TRAP</type>
                    <key>grow.s1.sat</key>
                    <delay>0</delay>
                    <history>365d</history>
                    <trends>1000d</trends>
                    <value_type>FLOAT</value_type>
                    <units>%</units>
                    <tags>
                        <tag>
                            <tag>Vender</tag>
                            <value>Pimoroni</value>
                        </tag>
                    </tags>
                </item>
                <item>
                    <uuid>deb2c2e8cb874804813b3283de845b57</uuid>
                    <name>S2 saturation</name>
                    <type>TRAP</type>
                    <key>grow.s2.sat</key>
                    <delay>0</delay>
                    <history>365d</history>
                    <trends>1000d</trends>
                    <value_type>FLOAT</value_type>
                    <units>%</units>
                    <tags>
                        <tag>
                            <tag>Vender</tag>
                            <value>Pimoroni</value>
                        </tag>
                    </tags>
                </item>
                <item>
                    <uuid>66210faa4272485f9990d9984473828e</uuid>
                    <name>S3 saturation</name>
                    <type>TRAP</type>
                    <key>grow.s3.sat</key>
                    <delay>0</delay>
                    <history>365d</history>
                    <trends>1000d</trends>
                    <value_type>FLOAT</value_type>
                    <units>%</units>
                    <tags>
                        <tag>
                            <tag>Vender</tag>
                            <value>Pimoroni</value>
                        </tag>
                    </tags>
                </item>
            </items>
        </template>
    </templates>
    <graphs>
        <graph>
            <uuid>f7ca57e3853540dab2bf5ed55fa9bf72</uuid>
            <name>saturation</name>
            <graph_items>
                <graph_item>
                    <sortorder>1</sortorder>
                    <color>1A7C11</color>
                    <item>
                        <host>Template Grow</host>
                        <key>grow.s1.sat</key>
                    </item>
                </graph_item>
                <graph_item>
                    <sortorder>2</sortorder>
                    <color>F63100</color>
                    <item>
                        <host>Template Grow</host>
                        <key>grow.s2.sat</key>
                    </item>
                </graph_item>
                <graph_item>
                    <sortorder>3</sortorder>
                    <color>2774A4</color>
                    <item>
                        <host>Template Grow</host>
                        <key>grow.s3.sat</key>
                    </item>
                </graph_item>
            </graph_items>
        </graph>
    </graphs>
</zabbix_export>

コードとか

出来上がり

HW

雑ぅ!!

グラフ

  • 水分量

  • 明るさグラフ

おまけ

使ってなくて死蔵してたカメラもセットアップして日に数回写真撮るようにしてみました。

まとめ

  • ポテトバッグ、植えるまでは簡単だった
  • Grow、屋内用だけあって線が短い…
  • 水分量センサーの結線周りの防水もちょっとあやしいけどまぁそのまま対応せずに使ってみる
  • カメラもPiCameraV1なのでフォーカスが微妙に合わない…
  • Zabbixのバージョンアップもしないとなぁ…
  • 結果は半年後くらい!