Raspberry PIのIoTサーバー
このチュートリアルでは、Raspberry PIにmachbase-neoをインストールし、センサーデータを収集・検索する手順を説明します。
DHT11センサーとRaspberry PIの接続
DHT11センサーをGPIOに接続する前に、必ずRaspberry PIの電源を切ってください。

DHT11にはVCC、DAT、GNDの3本のピンがあり、それぞれGPIOヘッダーの物理ピン2、3、6に接続します。物理ピン3がGPIO 2です。

センサーデータの読み取り
- Raspberry PI 4 Model B(このチュートリアルではメモリ4GBモデルを使用)
- Adafruit_DHT 11(センサー)
センサーデータを読み取るために、PythonモジュールAdafruit_DHTをインストールします。
pip3 install Adafruit_DHT以下のコードは、DHT11センサーのDATAピンに接続したGPIO 2(pinnum = 2)から値を読み取ります。
1秒ごとに標準出力へname, timestamp, value形式のデータを出力します。
machbase-neoがナノ秒単位のタイムスタンプを処理できるように、1000000000を掛けた値を生成します。
import Adafruit_DHT
from time import time
from time import sleep
pinnum = 2
sensor = Adafruit_DHT.DHT11
while (True):
hum, temp = Adafruit_DHT.read_retry(sensor,pinnum)
ts_ns = int(time() * 1000000000)
if hum is not None and temp is not None:
print(f'temperature,{ts_ns},{temp}')
print(f'humidity,{ts_ns},{hum}')
sleep(1)ソースをdht.pyとして保存し、実行して結果を確認します。
$ python dht.py
temperature,1676008535430951936,28.0
humidity,1676008535430951936,33.0
temperature,1676008536956561152,28.0
humidity,1676008536956561152,33.0
temperature,1676008538482078464,28.0
humidity,1676008538482078464,33.0
temperature,1676008540007633664,28.0
humidity,1676008540007633664,33.0
^Cmachbase-neoのインストール
- SSHまたはコンソールでPIに接続します。
$ ssh -l pi <ip address>demoディレクトリを作成します。
mkdir demo && cd demo- machbase-neoをダウンロードします。
sh -c "$(curl -fsSL https://docs.machbase.com/install.sh)"- アーカイブを展開します。
$ unzip machbase-neo-{{ site.latest_version }}-linux-arm64.zip
$ cd machbase-neo-{{ site.latest_version }}-linux-arm64- machbase-neoを起動します。
./machbase-neo serve
停止するにはCtrl+Cを押します。
machbase-neoのネットワーク設定
外部接続用のIPバインド
既定の設定では、machbase-neoはlocalhost(127.0.0.1)でのみ待ち受けます。
ノートPCや他のアプリケーションサーバーからHTTPなどで接続するには、--host <bind_ip_addr>オプションでホストIPをバインドする必要があります。
./machbase-neo serve --host 0.0.0.0データの保存
exampleテーブルの作成
machbase-neo serveの実行中に、以下のコマンドでexampleテーブルを作成します。
./machbase-neo shell "create tag table if not exists EXAMPLE (name varchar(100) primary key, time datetime basetime, value double)"machbase-neoへのデータ書き込み
dht.pyを実行し、出力をmachbase-neo shell importにパイプで渡します。
importコマンドは既定でCSV形式を受け取り、EOFに達するまで、指定したテーブル(ここではexample)に1行ずつ取り込みます。
python dht.py | ./machbase-neo shell import example標準出力をパイプで渡しているため、出力メッセージは表示されません。
machbase-neoからのデータ読み取り
直近に保存したデータの確認
書き込み中に別のターミナルを開いてSQLを実行すると、最新のデータを確認できます。
--tz localオプションは、TIMEフィールドをUTCではなくローカルタイムゾーンで表示します。
./machbase-neo shell walk --tz local 'select * from example order by time desc'rキーを押すと、クエリを再実行して最新のデータに更新します。

アプリケーションからのデータ検索
machbase-neoは保存したデータを検索するHTTP APIを提供しているため、以下のようにSQLを含むHTTPリクエストで容易にデータを取得できます。
from urllib import parse
import pandas as pd
query_param = parse.urlencode({
"q":"select * from example order by time limit 500",
"format": "csv",
})
df = pd.read_csv(f"http://192.168.1.214:5654/db/query?{query_param}")
df