SpeeDBee SynapseでPostgreSQLエミッタを作成してみた！

概要
・Raspberry Pi Model 4（bookworm）で稼働しているSpeeDBee Synapseに、Pythonを使ってPostgreSQLへデータ登録するエミッタを作成してみます。登録するデータを取得する[リソースコレクタは設定済](https://qiita.com/ss-hk/items/84a8ececcd9c6ded08e9)です。

１）PostgreSQLをインストールします。
・ここでは、Synapseが稼働している、Raspberry PiにPostgreSQL（バージョン15）をインストールします。

![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/ec4ec6f9-0279-401c-362d-70f798380be9.jpeg)

・PostgreSQLの管理ユーザのパスワードを設定し、管理ユーザにログインします。

![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/37af7091-6a4d-4142-7e98-fde98d5f65bb.jpeg)

・一般ユーザーを作成し、オーナーになるデータベース（testdb）を作成します。一般ユーザのパスワードを設定し、データベースに接続後、権限を付与します。

![3-create-user.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/4559b0ef-11d6-eed9-c5c9-ce50f0966a65.jpeg)

・一般ユーザで接続し、テーブル作成、データ挿入、データ検索が可能か確認します。

![4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/82d99b93-5d26-a182-bb92-555637de8201.jpeg)

※以上で、登録先PostgreSQLのセットアップが完了しました。

２）Synapseのカスタムコンポーネントを作成します。
・ドキュメントの付録にある、Python-APIリファレンスを参考に作成します。

![5-doc.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/6eaaf517-9c5e-9341-0309-7e1cf66aabad.jpeg)

・ドキュメントだけでは、理解しづらいのでサンプルプログラムを参考にしてください。

![6-sample.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/22a7ded7-b9ab-4956-8ee7-a451cbb9c397.jpeg)

・「サンプルカスタムコンポーネントのダウンロード」をクリックすると、２つのファイルがダウンロードされます。read_and_log.pyは、入力ポートと出力ポートの両方を備えたサンプルなので、エミッタを作るには最適です。

![6.5-ファイル.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/68825fef-2d10-6608-6778-5cec225283be.jpeg)

・サンプルの先頭には、importするモジュールや、クラス定義をします。UUIDにはユニークな値を設定してください。（他のカスタムコンポーネントと重複しないように）

![7-import.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/3678a9fb-4840-82b1-1f11-5fead1467083.jpeg)

・出力カラムの設定です。カラム名とデータ型を指定します。

![8-create-col.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/d426ba7d-3a23-f47b-cb8c-8c74eee0649a.jpeg)

・入力データ情報を取得します。

![9-input-col.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/ec6adb71-d00d-0b91-ab14-0e7bd43a5cbf.jpeg)

・出力データは、タイムスタンプ付きで出力します。

![9-insert.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/7a594f8b-cdb1-aadd-7c1c-a81391c7f509.jpeg)

・PostgreSQLにPythonでアクセスするには、psycopg2モジュールをインポートする必要があります。サンプルを参考にPostgreSQLエミッタを作成しました。

![10-psql-emitta.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/b2c71f40-9e12-57d9-0332-6676bdda9ccd.jpeg)

・PostgreSQLエミッタのパラメータには、PostgreSQL接続情報、テーブル名、指定テーブルが無い場合に作成するかの指定をします。パラメータ設定の為に、カスタムUI機能を使い、JSONファイルを登録します。

![11-json.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/82308a76-a8f9-91a3-55b7-0e225ca2cc50.jpeg)

３）カスタムコンポーネントをSynapseに登録します。
・Edit Modeにして、設定メニューからカスタム（Python）を選択します。

![12-設定メニュー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/f6a1ea96-6cff-23e9-597e-0c0601f0e93d.jpeg)

・Pythonモジュールにバイナリ形式のpsycopg2モジュール、psycopg2-binaryを指定して「追加」ボタンをクリックします。

![13-psycopg2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/70a11b12-9fae-9a99-c776-bd4b11fd0326.jpeg)

・確認ダイアログが表示されまうので、「はい」をクリックします。

![14-psycopg2-yes.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/b70f2370-200d-2f30-44fc-4dbe1dcf02d9.jpeg)

・Pythonモジュールにpsycopg2-binaryが表示されている事を確認し、カスタムコンポーネントの「追加」ボタンをクリックします。

![15-psycopg2-binary.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/62bbefd4-9f79-dd94-5a8d-3dec22b21779.jpeg)

・Pythonで作成したpsql_emitter_cui.pyファイルを選択するとカスタムコンポーネントの一覧に追加されます。

![16-emita-added.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/10ed9bf8-bc8a-faf3-d8d6-9f2db980b238.jpeg)

・「UI設定」ボタンをクリックして、「登録」ボタンでJSONファイルを登録します。

![17-customui-before.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/46ec1bce-4ee7-116e-14c4-caf41256453c.jpeg)

・「閉じる」をクリックして登録を完了します。

![18-customui-after.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/b9514088-693e-24db-1855-4a68958e9af1.jpeg)

・確認ダイアログが表示されますので、「はい」をクリックします。

![19-confarm.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/730a4494-6042-5a23-6224-6c79cb4a7e22.jpeg)

・Emitterを開くと、PostgreSQLエミッタが追加されていますので、パネルにドラッグ＆ドロップすると、パラメータ設定画面が表示されます。

![20-PostgreSQLせってい.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/657575e9-85ac-61ca-8fdd-e2cca1e8fb6a.jpeg)

４）PostgreSQLエミッタを起動します。
・設定画面にPostgreSQL接続情報とテーブル名、テーブル自動作成：ONにして保存します。

![21-起動前.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/b277eda8-8b1f-0082-02ca-bd6f5b7d892f.jpeg)

・リソースコレクタを起動し、リソースコレクタの出力ポートと、PostgreSQLエミッタの入力ポートを繋ぎ、PostgreSQLエミッタを起動します。

![23-go.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/a92cc4c8-0020-2e0e-4aed-d32848dd0532.jpeg)

５）pgAdminツールでPostgreSQLのデータを確認します。
・作業PCにpgAdmin4をインストールし、起動します。

![1-pgadmin.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/f994058a-7a2c-b523-ac44-91f7d6968330.jpeg)

・クイックリンクにある「新しいサーバを追加」をクリックします。

![2-pgadmin.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/4bb0c43f-f6b6-b6dd-1725-641e14a5f714.jpeg)

・名前を指定して、「接続タブ」を開きます

![3-pgadmin.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/c49ba3f7-a607-6a68-a59d-2f22e911bcd8.jpeg)

・PostgreSQLがインストールされているRaspberry PiのIPアドレスを指定し、一般ユーザ名とパスワードを指定し、「保存」ボタンをクリックします。

![3-5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/235ff779-0ae7-8869-f4c8-3e83b15a9443.jpeg)

・データベース：testdbにある、テーブル：tbl193を右クリックし、データを閲覧/編集をクリックすると、登録されているデータを確認できます。

![4-pgadmin.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3923315/5b6ab27f-6f0c-0aa9-d55a-71cff331d3bd.jpeg)


▶以上で、PostgreSQLエミッタの作成と動作確認が完了しました。