CL-SYSTEM で、ホームオートメーション

CL-SYSTEM で、ホームオートメーション

CL-SYSTEM を使って、ホームオートメーション化するための実際の作業の進め方について解説していきます。

後半では、自動化のためのルールの作り方についても、追記しておきました。

Asterisk(ビジネスフォンのシステムでよく使われているサーバーソフトウエア)との連携については、
openHAB2 と Asterisk の連携のページをご参照ください

Google Calender との連携については、GOOGLE CALENDER と OPENHAB2 との連携 をご覧ください

このページの項目

システムの設計

まずは、ホームオートメーション化するシステムの全体について設計していく必要がありますが、ここでの環境として、

  • 照明器具(オン・オフのみ)4台
  • 調光照明器具 2台
  • エアコン 2台
  • 鍵(MIWA か GOAL の制御盤にて施錠・開錠操作できるもの) 1台

という、設定でお話ししていきます。

配電盤は1か所、ここに、各照明器具の電源配線が、それぞれ別々に集まっているものとします。
エアコンの JEM-A 端子(HA 端子の場合もあります)から配電盤まで4芯のケーブルが設置されているものとします。
鍵の制御盤の端子(MIWAの制御盤の場合、JEM-A 端子の MONITOR の + と – 、タイマー端子の + と -) から配電盤まで4芯のケーブルが設置されているものとします。
MIWA の制御盤の場合、JEM-A 端子の4芯のみの制御だと、常時解放設定ができない可能性があります。タイマー端子を使うほうが制御が容易です。

注意:照明器具等の電源配線が配電盤から1本伸びていて、壁内などや点検口のない天井内など、
アクセスできない場所で分岐して、複数の器具に配線している場合は、個別には制御できません
各機器から個別に配電盤まで引き直すか、
器具の近くなどにコントローラーとターミナルを設置するための分電盤を設置する等、
ご検討ください

用意するもの

MQTT BROKER (サーバー)を運用するためのパソコン 1台
多種のものが利用可能ですが、主には以下のようなものがあります
古いパソコンに UBUNTU や Cent OS など、Linux 系の OSをインストールしたもの、
Windows 10 パソコンに WSL にて Linux 系の OS をインストールしたもの
Windows パソコンや Mac OS など
Raspberry Pi など

CL SYSTEM コントローラー 1台
以下の2種類のうちのどちらか
CL-Controller 又は M5Stack に CL-Controller 用のファームウエアを書き込んだもの

ターミナル
リレー・ディマー・JEM
本例では各1台

決めておかなければならないこと

CL-SYSTEM は、全体を AREA と PLACE という2つの区切りで管理し、MQTT のトピック(データー送受信の宛先)に利用します。
比較的規模の小さいシステムであれば、適当に決めて、すべて同じで運用すればよいでしょう。
区分けする場合、例えば、2階建ての家であれば、

AREAPLACE管理するもの
/HOME1F1階の照明や換気扇全て
/HOME2F2階の照明や換気扇全て
/HOMEAC全てのエアコン
/HOMEKY全ての鍵

といった分け方が考えられます。
今回は、

AREA/HOME
PLACEHomeItems

という全て同じで運用する想定で設計していきます。

今回紹介するシステム構築の構成と設定

以上の環境の設定で、今回紹介するシステムの構成と設定は以下の通りで行います。
なお、ネットワークに関しては、ルーターの設定などの各環境によって異なりますので、自分の環境をよく確認して行ってください。

機材MQTT BROKER 用パソコン( Ubuntu Desktop 18.04.2 LTS を予めインストールしたもの) 1台
ファームウエア書き込み用パソコン(Windows10 64bit 版インストール済みのもの) 1台
M5Stack 1台 (Wifi にてネットワークへ接続)
リレーターミナル 1台(シリアル番号 0108DEMO001)
ディマーターミナル 1台(シリアル番号 0308DEMO001)
JEMターミナル 1台(シリアル番号 0508DEMO001)
LCD スイッチ 2台
Seeed Grove System I2C 20cmケーブル 爪なし 1本
Seeed Grove System I2C 20cmケーブル 爪あり 3本
制御される機器ターミナル 0108DEMO001 に、照明器具 1~4 をチャンネル 1~4
ターミナル 0308DEMO001 に、調光器具 1・2 をチャンネル 1・2
ターミナル 0508DEMO001 に、エアコン1・2、鍵1
SSIDMyHome
SSID パスワードMyPass
AREA/HOME
PLACEHomeItems
ネットワーク192.168.0.0 ~ 192.168.0.255
ルーターの IP アドレス192.168.0.1
DHCP が割り振るアドレスの範囲192.168.0.100 ~ 192.168.0.150 までを ルーターの DHCP サーバー機能で割り振る設定になっているものとします
DNS の IP アドレス192.168.0.1 (独自の DNS サーバーを置かず、ルーターを使用する場合)
MQTT BROKER アドレス192.168.0.250
サブネットマスク255.255.255.0

作業手順

OpenHAB2とMosqutto のサーバーを作る

パソコンへの OS のインストールは、ネット上に情報があふれていると思いますので、今回は触れません。更新ファイルは最新の状態にしておいてください。
なお、このパソコンの IP アドレスは固定しておく方が好ましいです。
独自の DNS サーバーを立てたり、好況で提供されている Mosquitto を使用する場合など、必須とは言えませんが、
今回は上記の表の通り、192.168.0.250 を割り当てられているものとします。
IP アドレスの固定方法は、他の情報サイト等を参考にしてください。

MQTT Broer として、今回は Mosquitto を使います。もちろん、RabbitMQ など、他の Broker でも構いません。
TLS を使用して、セキュア穴接続を行う場合は、TLS 1.2 を利用できることが条件です。

OPENHAB 2 のインストール のページと
MOSQUITTO のインストール のページ 、
OPENHAB 2 の設定のページをみて、設定を済ませてください。

ファームウエア書き込み環境を整える

この手順の詳細についてはARDUINO-CLI のインストールにも書いてありますので、ご参照ください。
まずは、 Go 言語(Go Language) の最新版をダウンロードして インストールしてください。
初期値である c:\Go にインストールするのであれば、「はい」と「NEXT」をクリックするだけですぐに終わります。

次に、ツールとファームウエアのページの、
ARDUINO-CLI インストール用バッチから最新のバッチファイルと、ARDUINO-CLI コンパイル・アップロードバッチファイルから最新の コンパイル・アップロードバッチファイル をダウンロード後、解凍してください。

ARDUINO-CLI インストール用バッチを解凍したフォルダ内に Install.bat がありますので、ダブルクリックで実行してください。

バッチファイル起動後、
「バッチファイルを置いたフォルダを指定してください:」
と表示されるので、その文字のところにバッチファイルのフォルダをドラッグアンドドロップで放り込んでください。
フォルダを開いた状態であれば、フォルダのアドレスの左端の黄色い書類アイコンを ドラッグアンドドロップ すれば放り込めます。

「スケッチフォルダ:」
と表示されたら、初期値のフォルダでよければそのままエンターキーを押してください。
変更したい場合は、任意の場所を入力してエンターキーを押してください。

その後、
「Arduino-Cli のインストール終了までしばらくお待ちください」
と、表示されますが、これは、3~5分くらいかかるかもしれません。しばらくお待ちください。

バッチファイルの実行が終了すると
「インストールが終了しました」
「何かキーを押してください」
と、表示されますので、エンターキー等押して終了してください。

インストール用バッチのフォルダは、インストール終了後は消してしまって構いません。

コンパイル・アップロードバッチファイルのフォルダは、使いやすい適当な場所に移動してしまって構いません。
書き込みのたびに使うので、場所を覚えておいてください。

M5Stack に、ファームウエアを書き込んでコントローラーを作る(CL-Controller を M5Stack で代用する場合)

ツールとファームウエアのページCL-CONTROLLERファームウエアから、最新のファームウエアをダウンロードしてください。
ダウンロードが終わったら、解凍しておきます。

次に、(M5Stack を USB でつないでいない状態で)コマンドプロンプトを立ち上げ、

arduino-cli.exe board list

と、入力します。
コマンドプロンプトは、Windows ボタンを押してから CMD とキーを打つか、
スタートメニューの「Windows システムツール」の「コマンドプロンプト」で立ち上がります。
現在使用中の COM ポートの一覧が表示されます(なければ表示されません)。

次に M5Stack を USB ケーブルでパソコンに接続し、もう一度

arduino-cli.exe board list

と、入力します。この時、増えた COM ポートが、接続した M5Stack の使用しているポート番号になりますので、覚えておいてください。

次に、ダウンロードしたファームウエアのフォルダを、コンパイル・アップロードバッチファイルのフォルダ内の UploadM5Stack.bat にドラッグアンドドロップで放り込んでください。
DOSウィンドウが表示され、頭に COM ポート一覧と
「COM ポートの番号を指定してください:COM」
と、表示されるので、M5Stack が使用している COM ポート番号を半角の数字で入力してエンターキーを押してください。

書き込みが終了すると
「インストールが終了しました」
「何かキーを押してください」
と、表示されますので、エンターキー等押して終了してください。

コントローラーの設定

設定の書き込みをシリアル通信で行いますが、ここでは TeraTerm を使った例をあげていきます。
COM ポート番号と通信速度等、設定が正しければ、どのシリアル通信ソフト(ターミナルソフト)を使ってもかまいません。
TeraTerm のインストールがまだならば、「TERA TERM」のインストールをご参照ください。

TeraTerm を立ち上げると、

  • TCP/IP
  • シリアル

から選ぶウィンドウが立ち上がるので、「シリアル」を選んで、「ポート」から M5Stack の使用している COM ポート番号を選んで「OK」ボタンを押してください。
次に「設定」メニューの「シリアルポート」を選び、「ボー・レート」を115200 にして「OK」を押してください。

設定が終わったら、M5Stack の左側の赤いボタンを一度押して再起動しておきます。
TeraTerm の画面にずらずらと表示され、最後に
「Ready:」
が表示されたら、コントローラーは入力受付可能な状態になっています。

以下のコマンドを入力していきます。
1行ずつ実行し、表示が終わるのを待ってください。

カンマの前がコマンドでカンマの後ろがパラメータ(設定内容)ですが、上記の設定の表の内容になっているので、カンマの右側はご自身の環境等に合わせ、適時変更して入力してください。
なお、カンマの前後に空白スペースを入れないでください。

「,」(カンマ)の右側は、それぞれの環境に合わせて変更し、入力してください。
下記の例では、「今回紹介するシステム構築の構成と設定」に合わせた入力になっています。

SSID,MyHome
SSIDPass,MyPass
AREA,/HOME
PLACE,HomeItems
BROKER,192.168.0.250
REBOOT

最後の「REBOOT」入力後、再起動します。起動後、Wifi に接続されると MQTT に接続します。
MQTT に正常に接続できると M5Stack に MQTT のBroker のアドレスが表示されるので、正常に接続できることを確認しておいてください。

各ターミナルのコントローラーとの接続

コントローラーと各ターミナルの接続・認識は、配電盤等に設置後でも可能ですが、できれば卓上で、接続を確認してから設置してください。

まずは、ターミナル 0108DEMO001 に USB Type-B ケーブルを接続し、パソコンとつなぎます。モバイルバッテリーや AC アダプタなど、USB で電源供給できるものならば、パソコンでなくてもかまいません。
次に、ターミナル 0108DEMO001 とコントローラーを爪なし Grove ケーブルで接続します。
接続できたら、M5Stack の電源ボタンを一度押して再起動するか、 M5Stack の3つのボタンのうち、「CHECK」と表示された左のボタンを押してターミナルを認識させます。
コントローラーを ターミナルソフト につないだままであれば、認識の様子が ターミナルソフト上に表示されます。

次に、 ターミナル 0308DEMO001 を USB ケーブル で電源供給し、ターミナル 0108DEMO001 と爪有りの Grove ケーブルでつなぎ(コントローラーと Seeed Grove ケーブルで数珠つなぎになった状態)、M5Stack の電源ボタンを一度押して再起動するか、 M5Stack の3つのボタンのうち、「CHECK」と表示された左のボタンを押してターミナルを認識させます。

認識されたら、同様に、ターミナル 0508DEMO001 を USB ケーブル で電源供給し、ターミナル 0308DEMO001 と爪有りの Grove ケーブルでつなぎ、M5Stack の電源ボタンを一度押して再起動するか、 M5Stack の3つのボタンのうち、「CHECK」と表示された左のボタンを押してターミナルを認識させます。

複数のターミナルの認識と接続は、1台ずつ、順番に、USB ケーブルをコネクタにつないで電源供給したうえで、同様の手順で全てのターミナルを認識させていってください。

Seeed Grove ケーブルでの連結は、20cm のケーブルなら 3 台まで、50cm のケーブルなら 2 台までは安定して動きますが、多すぎると通信が不安定になります。
台数が増える場合には、別売の分岐用のコネクタ等を利用するか、コントローラーを分けてください。

I2C アドレスの割り振りが正常に行われていない状態のターミナルを同時に複数接続すると、I2C アドレスの競合から正常な設定が行われません。
この場合、おかしくなったターミナルの赤黒2つ並んだボタンのうちの黒を押したまま、1回赤ボタンを押して離し、10秒ほど待ってから黒ボタンを離してください。
ターミナルの初期化が実行され、I2C アドレスも初期値の 0x11 (17) に設定されますので、再度1台ずつの認識を実行してください。
なお、ターミナルの初期化が行われるので、事前に個別設定をしていた場合は、再度設定しなおしてください。

ターミナルソフト上には、認識したターミナルの機器名や各チャンネル名、設定等が表示されます。チャンネル名の初期値は、ターミナルのシリアル番号に「-」と、00 から始まる 2桁のチャンネルのインデックス番号を付け加えたものになるます。
例えばターミナル 0108DEMO001 であれば、チャンネル1番目が 0108DEMO001-00 で、8番目が 0108DEMO001-07 となります。
スイッチの設定等で使用するので、把握しておいてください。
もちろん MQTT 経由や、シリアル経由で名前を変更することも可能です。

設定が正常に終了したら、配電盤等、コントローラーやターミナルの設置、ターミナルとの配線等を行ってください。

LCD スイッチの設定

USB コネクタに接続されたケーブルをパソコンやモバイルバッテリー、AC アダプタ等、USB に電源供給できる機器か、 電源接続コネクタ に 6 ~12v(推奨 6v) の直流電源を接続してください。
起動後、スマートフォン等の Wifi 接続できる機器で、SSID シリアル番号、SSID パスワード「01234567」に接続し、ブラウザーで http://192.168.4.1 を開いてください。
機器のページが表示されます。

ブラウザ経由での設定を参考に、

  • Wifi SSID
    Wifiの SSID で本設定では MyHome
  • Wifi パスワード
    Wifi のパスワードで本設定では MyPass
  • ブローカーアドレス
    MQTT Broker(サーバー)の IP アドレスか URLで本設定では 192.168.0.250
  • MQTT エリア名
    AREAで本設定では /HOME
  • MQTT プレース名
    PLACEで本設定では HomeItems

を入力後、「送信」を押してください。
再起動後、Wifi と MQTT につながるはずです。
再起動したら
再度同様に Wifi 接続機器で LCD のホームページを表示するか
MQTT に正常接続できたら画面が黒で左上に歯車アイコンが表示されるので、歯車アイコンを押してセキュリティページを表示し、
セキュリティページの左下の「OK」ボタンを押すと現在の IP アドレス等が表示されますから、パソコンのブラウザでそのアドレスを入力して LCD のホームページを表示してください。

ホームページの「ボタン設定」を押すとボタン設定ページが表示されます。

ブラウザ経由での設定を参考に、 以下の項目を設定してください。

ページの項目設定内容
Button Nameボタン名(半角31文字以内)
半角英数字で任意の名前を付けてください
Labelボタンに表示される名前(半角63文字以内)
長すぎると表示できませんので、半角で6文字程度以内にしてください
GB2312 で漢字を表示することも可能ですが、慣れるまでは半角英数文字で設定してください
Iconボタンのアイコンとして表示したいものを選んでください
Command Topic命令用 Topic (半角63文字以内)
AREA/PLACE/チャンネル名/command
例:本例でターミナル 0108DEMO001の1番目のチャンネルをオンオフするなら
/HOME/HomeItems/0108DEMO001-00/command
と、なります。
Status Topic状態取得用 Topic (半角63文字以内)
AREA/PLACE/チャンネル名/state
例:本例でターミナル 0108DEMO001の1番目のチャンネルをオンオフするなら
/HOME/HomeItems/0108DEMO001-00/state
と、なります。
On CommandON
備考:オン命令ペイロードを半角英数 15 文字以内で入力します
Off CommandOFF
備考:オフ命令ペイロードを半角英数 15 文字以内で入力します
Status CommandVALUE
備考:状態取得命令ペイロードを半角英数 15 文字以内で入力します

設定入力後、「EDIT」ボタンを押して設定を保存してください。
念のために、LCD スイッチのホームページの「再起動」ボタンを押して再起動後、ページが正しく表示されるか確認してください。

以上で、LCD スイッチでの機器のコントロールが可能となります。

RFID キーの設定(使用する場合)

ここでも設置例では機器に入っていませんが、 RFID キーも同様に以下の設定方法で設定することができます。
USB コネクタに接続されたケーブルをパソコンやモバイルバッテリー、AC アダプタ等、USB に電源供給できる機器か、 電源接続コネクタ に 6 ~12v(推奨 6v) の直流電源を接続してください。
起動後、スマートフォン等の Wifi 接続できる機器で、SSID シリアル番号、SSID パスワード「01234567」に接続し、ブラウザーで http://192.168.4.1 を開いてください。
機器のページが表示されます。

ブラウザ経由での設定を参考に、

  • Wifi SSID
    Wifiの SSID で本設定では MyHome
  • Wifi パスワード
    Wifi のパスワードで本設定では MyPass
  • ブローカーアドレス
    MQTT Broker(サーバー)の IP アドレスか URLで本設定では 192.168.0.250
  • MQTT エリア名
    AREAで本設定では /HOME
  • MQTT プレース名
    PLACEで本設定では HomeItems

を設定すると使用可能状態となります。

OpenHAB2 の設定

OPENHAB2 と MQTT の連携を参考に、設定を行ってください。
本例での item ファイルを openHAB2 の items フォルダ内の myHouse.items として作成する場合、ファイル内容は、以下の通りとなります。

Linux ( Ubuntu や CentOS など)では、openHAB2 のデフォルトの設定ファイルの位置は
/etc/openhab2
になります。
アイテム
場所 /etc/openhab2/items
拡張子 .items
ルール
場所 /etc/openhab2/rules
拡張子 .rules
変換
場所 /etc/openhab2/transform
アイコン
場所 /etc/openhab2/icons
スクリプト
場所 /etc/openhab2/scripts
Basic UI のサイト
場所 /etc/openhab2/sitemaps
拡張子 .sitemap

Group     myHouse           "我が家"

Group     1fLights          "一階照明"       <light>      (myHouse)
Group     2fLights          "二階照明"       <light>      (myHouse)
Group     AllLights         "オンオフ照明"   <slider>     (myHouse)
Group     AllDimmers        "調光照明"       <slider>     (myHouse)
Group     AirCons           "エアコン"       <snow>       (myHouse)
Group     Keys              "鍵"            <door>       (myHouse)

Switch     0108DEMO001-00   "外灯"          <light>      (myHouse, 1fLights, AllLights)    {mqtt=">[broker:/HOME/HomeItems/0108DEMO001-00/command:command:*:default],<[broker:/HOME/HomeItems/0108DEMO001-00/state:state:default]"}
Switch     0108DEMO001-01   "キッチン"      <light>      (myHouse, 1fLights, AllLights)    {mqtt=">[broker:/HOME/HomeItems/0108DEMO001-01/command:command:*:default],<[broker:/HOME/HomeItems/0108DEMO001-01/state:state:default]"}
Switch     0108DEMO001-02   "リビング"      <light>      (myHouse, 1fLights, AllLights)    {mqtt=">[broker:/HOME/HomeItems/0108DEMO001-02/command:command:*:default],<[broker:/HOME/HomeItems/0108DEMO001-02/state:state:default]"}
Switch     0108DEMO001-03   "寝室天井"      <light>      (myHouse, 2fLights, AllLights)    {mqtt=">[broker:/HOME/HomeItems/0108DEMO001-03/command:command:*:default],<[broker:/HOME/HomeItems/0108DEMO001-03/state:state:default]"}
Switch     0308DEMO001-00   "玄関"          <light>      (myHouse, 1fLights, AllDimmers)   {mqtt=">[broker:/HOME/HomeItems/0308DEMO001-00/command:command:*:default],<[broker:/HOME/HomeItems/0308DEMO001-00/state:state:default]"}
Switch     0308DEMO001-01   "寝室調光"      <light>      (myHouse, 2fLights, AllDimmers)   {mqtt=">[broker:/HOME/HomeItems/0308DEMO001-01/command:command:*:default],<[broker:/HOME/HomeItems/0308DEMO001-01/state:state:default]"}
Switch     0508DEMO001-00   "ACリビング"    <light>      (myHouse, AirCons)                {mqtt=">[broker:/HOME/HomeItems/0508DEMO001-00/command:command:*:default],<[broker:/HOME/HomeItems/0508DEMO001-00/state:state:default]"}
Switch     0508DEMO001-01   "AC寝室"        <light>      (myHouse, AirCons)                {mqtt=">[broker:/HOME/HomeItems/0508DEMO001-01/command:command:*:default],<[broker:/HOME/HomeItems/0508DEMO001-01/state:state:default]"}
Switch     0508DEMO001-02   "玄関鍵"        <light>      (myHouse, Keys)                   {mqtt=">[broker:/HOME/HomeItems/0508DEMO001-02/command:command:*:default],<[broker:/HOME/HomeItems/0508DEMO001-02/state:state:default]"}

本例での sitemap ファイルを openHAB2 の sitemaps フォルダ内の myHouse.sitemap として作成する場合、ファイル内容は、以下の通りとなります。

sitemap myHouse label="我が家" {
    Frame {
        Group item=1fLights
        Group item=2fLights
        Group item=AllLights
        Group item=AllDimmers
        Group item=AirCons
        Group item=Keys
    }
}

ルールの作り方

OpenHAB2のルールは、デフォルトでは

/etc/openhab2/rules/ファイル名.rules

になります。

プラグインで作成した場合は、データベースファイルとして、別な場所に保存されますので、
プラグインで作成したファイルは、プラグインにて編集してください。

今回は、Ubuntu 上の openHAB2 をインストールし、その PC にログインして直接ファイルを作成するものとして、例を挙げていきます。

sudo vi /etc/openhab2/rules/default.rules

と入力し、設定ファイルを作成しましょう。

ルールファイルの構造は、

rule “<ルール名>
when
<トリガー> [or <トリガー2>] [or <トリガー3>…]
then
<スクリプト>
end

となっています。詳細については、公式サイトのルールのページをご参照ください。

(「<」、「>」で囲まれた部分は、かっこも含め、設定する文言に書き換えてください。「[」、「]」で囲まれた部分は、省略可能で、必要な場合に追加するという意味です。以下も同じです。)

rule:ルールの名前を適当に決めてください。
when:トリガーは、動作のきっかけとなる動作を記述します。
then:トリガーが起こった時の動作を記述します。
end:1つのルールの終わりを示します。

トリガー

各アイテムのコマンドを受け付けたときや状態変更の際のトリガーには以下があります。

  • Item <アイテム> received command [<コマンド>]
  • Item <アイテム> received update [<状態>]
  • Item <アイテム> changed [from <状態>] [to <状態>]

スクリプト

トリガーが発生した場合の動作の記述をする部分です。

ルールの例

トイレの電気をつけたとき、トイレの換気扇をつける
トイレの電気を消したとき、洗面台の照明を 10 秒間だけつけて消す

トイレの電気、換気扇、洗面台の電気として、以下のアイテムが /etc/openhab2/default.items に記述されているものとします。

Switch     Lt1FWC   "トイレ照明"   <light>      (myHouse, 1fLights, AllLights)    {mqtt=">[broker:/HOME/HomeItems/0108DEMO002-00/command:command:*:default],<[broker:/HOME/HomeItems/0108DEMO002-00/state:state:default]"}
Switch     Fn1FWC   "トイレ換気扇" <light>      (myHouse, 1fLights, AllLights)    {mqtt=">[broker:/HOME/HomeItems/0108DEMO002-01/command:command:*:default],<[broker:/HOME/HomeItems/0108DEMO002-01/state:state:default]"}
Switch     Lt1FWash "洗面台照明"   <light>      (myHouse, 1fLights, AllLights)    {mqtt=">[broker:/HOME/HomeItems/0108DEMO002-02/command:command:*:default],<[broker:/HOME/HomeItems/0108DEMO002-02/state:state:default]"}

/etc/openhab2/1fwc.rules ファイルに記述するとして、内容は以下となります。

import org.openhab.model.script.actions.Timer
import java.text.SimpleDateFormat
import org.openhab.model.script.actions.Timer

rule "1F WC ON"
when
    Item Lt1FWC changed to ON
then
    sendCommand(Fn1FWC, ON)
end

rule "1F WC OFF"
when
    Item Lt1FWC changed to OFF
then
    sendCommand(Lt1FWash, ON)
    delayTimer1 = createTimer(now.plusSeconds(10)) [|
        sendCommand(Lt1FWash, OFF)
        delayTimer1 = null
    ]
end

1 ~ 3 行目は、java のスクリプトを利用するための宣言です。
わからなければ、各ルールファイルの先頭に、呪文のつもりで書いておいてください。

“1F WC ON” が、トイレの電気がオンの場合のルールです。

when には、アイテム Lt1FWC がオンになった時(change to on)というトリガーが書いてあります。

then には、アイテム Fn1FWC にオンコマンドを送信する(sendCommand(<アイテム>, <送信するコマンド>))と書いてあります。

“1F WC OFF” が、トイレの電気がオフの場合のルールです。

when には、アイテム Lt1FWC がオフになった時(change to off)というトリガーが書いてあります。

then は、
アイテム Lt1fWash にオンコマンドを送信する(sendCommand(<アイテム>, <送信するコマンド>))と、
設定を、今(作った時)から 10 秒後に動作する(now.plusSeconds(10))よう delaytimer1 というタイマーを作り(createTimer)、
10 秒たったら アイテム Lt1fWash にオフコマンドを送信して(sendCommand(Lt1fWash, OFF))、
作ったタイマーを消去する(delayTimer1 = null)
と、いう意味です。

change to や、sendCommand の部分のアイテムを変えたり、タイマーの設定秒数を変えたりすることで、応用して使ってみてください。

その他のルール

グループを設定している場合、グループの状態変更に対するトリガーを作ったり、日の出日没や、cron に準じて日付時間でのルール作成も可能です。
今後設定例として記述していく予定です。

openHAB2 と Asterisk の連携

参考までに弊社 RFID キーと連動して、入室者をブラウザーで読み上げる例を書いておきます。

ブラウザーで HABPanel を開いておけば、誰かがカギを開けたときや閉めたときに、音声で教えてくれます。

ついでに、BASIC UI にグループとして RfidKey を書いておけば、鍵の開いている間は鍵を開けた人が、
LastRfidKey を書いておけば、最終入室者がブラウザで確認できます。

機器の設定
鍵は、MIWA の制御盤「BAN-AS16」を経由し、JEM ターミナルのチャンネル 0508DEMO001-00 に接続し、
RFID キーは、機器名を CL-KEYBackEnt と、設定済み
openHAB2 のアドオンの VOICE に Google Cloud Text-to-Speech (voice-googletts – 2.4.0) を設定済み

/etc/openhab2/items/default.items

Group     MyHome           "我が家"          <status>
Group     RfidKey          "RFIDキー状態"      <snow>          (MyHome)
Group     LastRfidKey      "RFIDキー最終操作"  <snow>          (MyHome)

Switch    LkBackDoor       "裏口"                 <lock>   (RfidKey)     ["Switchable"] {mqtt=">[broker:/HOME/HomeItems/0508DEMO001-00/command:command:*:default],<[broker:/HOME/HomeItems/0508DEMO001-00/state:state:default]"}
String    PnBackEnt        "裏口鍵操作 [%s]"       <lock>  (RfidKey)                    {mqtt="<[broker:/HOME/HomeItems/CL-KEYBackEnt/OPERATE:state:JSONPATH($.UserName)]"}
String    NameBackEnt      "裏口鍵最終入室者 [%s]" <lock>   (LastRfidKey)

/etc/openhab2/rules/Key.rules

rule "LkBackDoor Locked"
when
    Item LkBackDoor changed to ON
then
    logInfo("LkBackDoor value", LkBackDoor.state.toString)
    say("裏口の鍵が施錠されました")
end

rule "LkBackDoor Unlocked"
when
    Item LkBackDoor changed to OFF
then
    logInfo("LkBackDoor value", LkBackDoor.state.toString)
    logInfo("PnBackEnt value", PnBackEnt.state.toString)
    if (PnBackEnt.state.toString == "Auto" || PnBackEnt.state.toString == "NULL")
    {
        say("スイッチ操作で裏口の鍵が開錠されました")
    }
end

rule "BackEnt Unlock"
when
    Item PnBackEnt changed
then
    logInfo("LkBackDoor value", LkBackDoor.state.toString)
    logInfo("scan.BackEnt value", PnBackEnt.state.toString)
    if (LkBackDoor.state != OFF && PnBackEnt.state.toString != "Auto")
    {
        NameBackEnt.postUpdate(PnBackEnt.state.toString)
        val String timestampString = PnBackEnt.state.toString + "さんが裏口から入りました"
        logInfo("Unlock.BackEnt", timestampString)
        say(timestampString)
    }
end

注意:say() は、Google Text To Speech アドオンを入れてある場合に、しゃべらせるためのコマンドです。