OpenHABビギナーズガイドパート2:ZWave、MQTT、ルール、チャート

OpenHABビギナーズガイドパート2:ZWave、MQTT、ルール、チャート

無料は必ずしも「有料ほど良くない」という意味ではなく、OpenHABも例外ではありません。オープンソースのホームオートメーションソフトウェアは、市場に出回っている他のホームオートメーションシステムの機能をはるかに上回っていますが、セットアップは簡単ではありません。実際、それはまったくイライラする可能性があります。





ガイドのパート1では、私はあなたを案内しました RaspberryPiへのOpenHABのインストール 、OpenHABのコアコンセプトを紹介し、最初のアイテムをシステムに追加する方法を示しました。今日はさらに進んでいきます:





  • ZWaveデバイスの追加
  • HarmonyUltimateコントローラーの追加
  • ルールの紹介
  • MQTTの紹介、およびArduinoのセンサーを使用したMQTTブローカーのPiへのインストール
  • データの記録とグラフ化

Z-Waveの紹介

Z-Waveは、長年にわたって主要なホームオートメーションプロトコルでした。信頼性が高く、広範囲に開発されており、他のどのスマートホーム製品よりもはるかに長い範囲で機能します。さまざまなタスクを実行する何百ものZ-Waveセンサーを利用できます。 OpenHAB できる Z-Waveで動作しますが、セットアップが面倒であり、信頼性は保証されません。





OpenHAB専用のZ-Waveセンサーが満載の家の購入を検討している場合は、再検討することをお勧めします。それはあなたにとってうまくいくかもしれません、あるいはそれは小さいが永続的な問題に悩まされるかもしれません。少なくとも、いくつか試してみる機会が得られるまで、センサーでいっぱいの家を購入しないでください。 Z-Waveを選択する唯一の理由は、OpenHABに100%落ち着いておらず、将来的にオプションを開いたままにしておきたい場合です。たとえば、Z-WaveはSamsungSmartThingsハブおよびZ-Wave固有のハブで動作します。 Homeseerなど、およびその他のさまざまなソフトウェアオプション domoticz

OpenHABにはZ-Waveバインディングが含まれていますが、それでも 最初にZ-Waveネットワークを構成します 、OpenHABがデータのクエリを開始する前に。 Rasberryコントローラーボードをお持ちの場合は、ネットワークを構成するためのソフトウェアが提供されているため、ここでは取り上げません。 Aeotec USB Z-Stickコントローラーなどを購入した場合は、ソフトウェアが含まれていない可能性が高いので、読み進めてください。



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB to Create Gateway(通常の白) アマゾンで今すぐ購入

すでにZ-Waveネットワークをセットアップしている場合 、コントローラーをPiに接続するだけで、バインディングとアイテムの構成を開始できます。これがZ-Waveへの最初の進出である場合、それはもう少し複雑です。

まず、ハードウェア側です。各コントローラーには、デバイスとペアリングする独自の方法があります(技術的には、ノードIDが割り当てられる「包含モード」と呼ばれます)。 Aotec Z-Stickの場合、これはUSBポートからプラグを抜き、ボタンを1回押して包含モードにすることを意味します。次に、ペアリングしているデバイスに近づけて、そのデバイスの包含ボタンも押します (これも異なります。私のEverspringソケットでは、ボタンをすばやく3回押す必要があるため、ここでのレッスンは、デバイスのマニュアルを読むことです)





Z-Stickが短時間点滅して、成功を示します。これにより、新しいポートが割り当てられるため、Piに接続し直すときに問題が発生します。 Piを再起動して、別のポートに動的に再割り当てされていることがわかった場合は、Piを標準ポートにリセットします。さらに良いことに、最初にすべてのハードウェアペアリングを完了するまで、Piに接続しないでください。

HABminおよびZ-Waveバインディングのインストール

OpenHABは実際にはZ-Waveの構成ユーティリティではないため、HABminと呼ばれる別のWeb管理ツールをインストールします。に向かいます HABminGithubリポジトリ 現在のリリースをダウンロードします。解凍すると、2つ見つかります .jar アドオンディレクトリ内のファイル–これらはOpenHABホーム共有の対応するアドオンディレクトリに配置する必要があります (Aotec gen5 Z-Stickも使用している場合は、少なくともバージョン1.8のZ-Waveバインディングがあることを確認してください)





次に、webappsディレクトリに新しいフォルダを作成し、「habmin」と呼びます(小文字が重要です)。ダウンロードした残りのファイルをそこにコピーします。

注: HABmin 2 活発な開発中。インストールはほとんど同じですが、.jarアドオンが1つ追加されています。どちらを好むかを確認するためだけに、両方を試す価値があるかもしれません。

まだ行っていない場合は、コントローラーをPiに接続します。次のように入力して、正しいポートを見つけます。

ls / dev / tty *

名前にUSBが含まれているものを探しているか、私の特定のケースでは、Zスティックは次のように表示されます / dev / ttyACM0 (モデム)。プラグを差し込む前と後でコマンドを実行する方が簡単な場合があるため、不明な場合は何が変わるかを確認できます。

OpenHAB構成ファイルを開き、Z-Waveのセクションを変更して、両方の行のコメントを解除し、実際のデバイスアドレスを入力します。私にとっての最後のステップの1つは、OpenHABユーザーがモデムにアクセスできるようにすることでした。

sudo usermod -a-Gダイヤルアウトopenhab

ここで、すべてを実行に移すには、OpenHABを再起動します

sudoサービスopenhab再起動

うまくいけば、デバッグログをチェックしている場合は、次のようなものが表示されます。おめでとうございます、あなたは今Z-Waveについて話している。また、さまざまなZ-Waveノードからのメッセージでデバッグログが殺到することもあります。まず、HABMINをチェックして、何が見つかったかを確認しましょう:http://openhab.local:8080 / habmin / index.html(openhab.localをRaspberry Piのホスト名またはIPアドレスに置き換えます)。

HABMINには見どころがたくさんありますが、私たちは本当に関心があるのは 構成->バインディング-> Z-Wave->デバイス 以下に示すように、タブ。ノードを展開して、参照しやすいように場所と名前のラベルを編集します。

Z-Waveアイテムの構成

各Z-Waveデバイスには、OpenHAB用の特定の構成があります。ありがたいことに、ほとんどのデバイスはすでに調査されており、すでに例があります。認識されないカスタムデバイスの構成は、このガイドの範囲をはるかに超えていますが、今のところサポートされていると仮定しましょう。

まず、ノード3に基本的なEverspring AN158電源スイッチとメーターがあります。すばやくグーグルすると、サンプルアイテムの構成を含むWetwa.reのブログ投稿に移動しました。私はこれを次のように適応させました:

Switch Dehumidifier_Switch '除湿機' {zwave = '3:command = switch_binary'}

Number Dehumidifier_Watts '除湿器の消費電力[%.1f W]' {zwave = '3:command = meter'}

完全。

次はAeotecGen5マルチセンサーです。

Aeon Labs Aeotec Z-Wave Gen5マルチセンサー(Z-Wave Plus) アマゾンで今すぐ購入

これについては、サンプル構成を次の場所で見つけました。 iwasdot.com 、そして私のマルチセンサーはノード2にあります。

数値Hallway_Temperature '廊下温度[%.1f°C]'(廊下、温度){zwave = '2:0:command = sensor_multilevel、sensor_type = 1、sensor_scale = 0'}

Number Hallway_Humidity'Hallway Humidity [%.0f %%] '(Hallway、Humidity){zwave =' 2:0:command = sensor_multilevel、sensor_type = 5 '}

Number Hallway_Luminance'Hallway Luminance [%.0f Lux] '(Hallway){zwave =' 2:0:command = sensor_multilevel、sensor_type = 3 '}

連絡先Hallway_Motion'Hallway Motion [%s] '(Hallway、Motion){zwave =' 2:0:command = sensor_binary、respond_to_basic = true '}

番号sensor_1_battery 'バッテリー[%s %%]'(モーション){zwave = '2:0:command = Battery'}

この形式がおかしいと思われる場合は、最初の形式に戻ってください。 ビギナーズガイド 特に、アイテムがどのように追加されるかを説明する色相バインディングセクション。おそらく、このような貼り付けの例をコピーするだけで済みますが、新しいデバイスを使用している場合は、バインディングドキュメントにすべての詳細が記載されています。 コマンド

Logitech Harmony Binding

ルールに入る前に、ハーモニーバインディングの操作について簡単に説明したいと思います。私は、ホームメディアセンターのエクスペリエンスを簡素化するための究極のリモートのHarmonyシリーズの大ファンですが、スマートホーム内の独立したシステムとして機能することがよくあります。 OpenHABを使用すると、Logitech Harmonyアクティビティと完全なデバイス制御を一元化されたシステムの一部にすることができ、自動化ルールに含めることもできます。

apt-cacheを使用して「harmony」を検索して見つけた3つのバインディングファイルをインストールすることから始めます。

することを忘れないでください chown 完了したら、バインディングディレクトリを再度実行します。

sudo apt-get install openhab-addon-action-harmonyhub

sudo apt-get install openhab-addon-binding-harmonyhub

sudo apt-get install openhab-addon-io-harmonyhub

sudo chown -hR openhab:openhab / usr / share / openhab

バインディングを構成するには、openhab.cfgファイルを開き、次のように新しいセクションを追加します。

##########ハーモニーリモートコントロール##########

harmonyhub:host = 192.168.1.181 またはあなたのIP

harmonyhub:username = your-harmony-email-login

harmonyhub:password = あなたのパスワード

IPアドレスは、HarmonyハブのIPアドレスです。それを見つけるためにネットワークスキャナーを使用してください。また、標準のHarmony設定ユーティリティを起動したときに入力するログインの詳細も入力する必要があります。それでおしまい。 Hueを再起動すると、デバッグログにバインディングからの出力が突然バーストするはずです。

これは、送信できるすべてのアクティビティ、デバイス、およびコマンドのJSON形式のリストです。後で参照できるように、これをコピーしておくことをお勧めします。オンラインのJSONフォーマッターに貼り付けることで、折りたたみ可能なノードでさらに読みやすくすることができます このような

デフォルトの標準のPowerOffアクティビティに加えて、ここに名前でリストされた独自の定義済みアクティビティがあります。それでは、アクティビティを開始するための簡単なワンボタンコントロールを作成しましょう。まず、アイテムファイルに次の行を追加します。必要に応じて、グループとアイコンを変更します。

/ *ハーモニーハブ* /

String Harmony_Activity'Harmony [%s] '(Living_Room){harmonyhub =' * [currentActivity] '}

これは 双方向の文字列バインディング 、現在のアクティビティをフェッチすることも、現在のアクティビティを別のものにするように命令することもできます。これで、サイトマップファイルにボタンを作成できます。

Switch item = Harmony_Activity Mappings = [PowerOff = 'Off'、Exercise = 'Exercise'、13858434 = 'TV'、Karaoke = 'Karaoke']

無料ストリーミングサイトはサインアップしません

角括弧内に、ラベルとともに各アクティビティが表示されます。通常、リモコンで名前を付けたアクティビティを直接参照できますが、私が見つけた例外は、「テレビを見る」など、アクティビティ名にスペースが含まれるものでした。この場合、アクティビティIDを使用する必要があります。この場合も、JSONデバッグ出力でIDを見つけることができます。インターフェイスを保存して更新すると、次のようなものが表示されます。

次に説明するように、ルール内のアクティビティを参照することもできます。詳細については、wikiページをお読みください。 ハーモニーバインディング

ルールの一般的な紹介

ほとんどのスマートホームハブには、家のセンサーデータやイベントに自動的に反応できるように、ある種のルール作成が含まれています。実際、真にスマートな家は、モバイルアプリの操作に時間を費やす必要がある家ではなく、エンドユーザーには見えず、完全に自動化されている家だと私は主張します。この目的のために、OpenHABには、プログラム可能な強力なルールスクリプト言語も含まれており、ほとんどのスマートホームハブやIFTTTレシピの複雑さをはるかに超えています。

プログラミングルールはそれよりも悪いように聞こえます。プレゼンスセンサーに応じてライトをオンまたはオフにする2つのルールから簡単に始めましょう。

ルール「ジェームズがいるときにオフィスが点灯する」

いつ

アイテムJamesInOfficeがOFFからONに変更されました

それから

sendCommand(Office_Hue、ON)

終わり

ルール「ジェームズが去るとオフィスが消灯する」

いつ

アイテムJamesInOfficeがONからOFFに変更されました

それから

sendCommand(Office_Hue、OFF)

終わり

まず、ルールに名前を付けます–説明的であるため、どのイベントが発生しているかがわかります。次に、次のように言って簡単なルールを定義します xが真の場合、yを実行します 。終了は、その特定のルールの終了を意味します。ルールで使用できる特別な単語はたくさんありますが、今のところ、2つの簡単な構文を扱っています- アイテム 、これにより、何かの状態を照会できます。と sendCommand 、これはあなたが思うことを正確に実行します。これは簡単だと言いました。

おそらく2つのルールを使用する必要はありませんが、ロジックが複雑になるにつれて、エリアに入るのか出るのかを区別するのが有益です。どこかに光センサーを追加することをお勧めします。方程式に入れて、不必要にライトをオンにしないようにします。

スケジュールされたルールを作成する別の例を見てみましょう。

ルール「毎朝の運動」

いつ

時間cron'0 0 8 1/1 *? * '

それから

harmonyStartActivity( 'Exercise')

終わり

繰り返しになりますが、ルールに名前を付け、起動するタイミングの条件と実行するアクションを示します。ただし、この場合、時間パターンを定義しています。引用符で囲まれている面白いコードは、Quartz SchedulerのCRON式です(形式は通常のCRONtabとは少し異なります)。使った cronmaker.com 式の作成に役立ちますが、詳細な説明とその他の例については、フォーマットガイド[もう利用できません]を読むこともできます。

正しくフォーマットされたCron式を生成するために使用されるCronMaker.com

私のルールでは、「毎朝午前8時、毎日、ハーモニーアルティメットシステムにエクササイズアクティビティを開始するように指示する」と書かれています。これにより、テレビ、Xbox、アンプがアクティブになり、1分後にAボタンを押して起動します。ドライブ内のディスク。

悲しいことに、OpenHABはまだ私のために運動をすることができません。

私があなたに示したいもう一つのルールは、私の家の湿度レベルを管理するために使用するものです。私は必要な場所を移動する必要がある除湿機を1つ持っているので、すべての湿度センサーを調べて、どれが最も高いかを見つけ、それを変数に格納することにしました。現在、毎分トリガーされますが、簡単に下げることができます。最初に見てください:

importorg.openhab.core.library.types。*

importorg.openhab.model.script.actions。*

java.lang.Stringをインポートします

ルール「湿度モニター」

Time cron '0 * * * *?'の場合

それから

var prevHigh = 0

var highHum = ''

湿度?.members.forEach [hum |

logDebug( 'humidity.rules'、hum.name);

if(hum.state as DecimalType> prevHigh){

prevHigh = hum.state

highHum = hum.name + ':' + hum.state + '%'

}

Windows10の時計を修正する方法

]

logDebug( 'humidity.rules'、highHum);

postUpdate(Dehumidifier_Needed、highHum);

終わり

ルールの中核は 湿度?.members.foreach ライン。湿度は私の湿度センサーのグループ名です。 .members そのグループのすべてのアイテムを取得します。 foreach それらを繰り返します(おそらくなじみのない奇妙な角括弧形式を使用します)。ルールの構文はXtendの派生物であるため、次のように読むことができます。 Xtendドキュメント 適応する例が見つからない場合。

ただし、おそらくそうする必要はありません。そこには何百ものサンプルルールがあります。

OpenHABおよびモノのインターネット向けのMQTT

MQTTは、マシン間通信用の軽量メッセージングシステムです。ArduinoまたはRaspberry Piが相互に通信するための一種のTwitterです(もちろん、これらだけでは機能しません)。急速に人気が高まり、モノのインターネットデバイスが設置されています。これらのデバイスは通常、センサーデータをハブに送信したり、リモートコマンドを受信したりするための信頼性の高い方法を必要とする低リソースのマイクロコントローラーです。それがまさに私たちがそれを使ってやろうとしていることです。

しかし、なぜ車輪の再発明をするのでしょうか。

MQ Telemetry Transportは、信頼性の高いデータ配信を提供しながら、バッテリーの使用量と帯域幅を最小限に抑えるように特別に設計された、低速の衛星接続を介して石油パイプラインを接続するために1999年に発明されました。何年にもわたって設計原則は同じままでしたが、ユースケースは特殊な組み込みシステムから一般的なモノのインターネットデバイスにシフトしました。 2010年に、プロトコルはロイヤリティフリーでリリースされ、誰でも使用および実装できるようになりました。私たちは無料が好きです。

なぜ私たちがさらに別のプロトコル(結局のところすでにHTTPを持っている)に悩まされているのか疑問に思われるかもしれません。これは、あらゆる種類のWeb接続システム(OpenHABやIFTTTなど、特に新しいメーカーチャネルで)間で迅速なメッセージを送信するために使用できます。 )。そして、あなたは正しいでしょう。ただし、HTTPサーバーの処理オーバーヘッドは非常に大きいため、Arduinoのような組み込みマイクロコントローラーで簡単に実行することはできません(少なくとも、実行できますが、他に使用できるメモリはあまりありません。 )。一方、MQTTは軽量であるため、ネットワークを介してメッセージを送信してもパイプが詰まることはなく、小さなArduinoメモリスペースに簡単に収まります。

MQTTはどのように機能しますか?

MQTTには、サーバー(「ブローカー」と呼ばれる)と1つ以上のクライアントの両方が必要です。サーバーは仲介者として機能し、メッセージを受信して​​、関心のあるクライアントに再ブロードキャストします。

続けましょう Twitter-for-machines しかし類推。 Twitterユーザーが自分の無意味な140文字をツイートしたり、ユーザーが他のユーザーを「フォロー」して厳選された投稿のストリームを表示したりできるのと同じように、MQTTクライアントは特定のチャネルにサブスクライブして、そこからすべてのメッセージを受信したり、独自のメッセージを公開したりできます。そのチャネルに。このパブリッシュおよびサブスクライブパターンは、 pub / sub 、伝統とは対照的に クライアントサーバー HTTPのモデル。

HTTPでは、通信しているマシンに連絡する必要があります。たとえば、Helloと言ってから、データを取得または配置している間、常に相互に確認し合う必要があります。 pub / subを使用すると、パブリッシュを行うクライアントは、サブスクライブされているクライアントを知る必要がありません。メッセージを送り出すだけで、ブローカーはサブスクライブされたクライアントにメッセージを再配布します。どのクライアントも、Twitterユーザーと同じように、トピックのパブリッシュとサブスクライブの両方を行うことができます。

ただし、Twitterとは異なり、MQTTは140文字に制限されていません。データに依存しないため、小さな数値や大きなテキストブロック、JSON形式のデータグラム、さらには画像やバイナリファイルを送信できます。

MQTTがすべての点でHTTPより優れているわけではありませんが、 家中にたくさんのセンサーがあり、常にレポートを作成する場合に適しています。

OpenHABがMQTTブローカーとして機能しないことを知っておくことも重要です。これについては後で説明します。ただし、OpenHABはクライアントとして機能します。OpenHABアクティビティログを公開するだけでなく、特定のチャネルをデバイスにバインドできるため、たとえば、特定のチャネルのMQTTメッセージによって制御されるスイッチを使用できます。これは、センサーでいっぱいの家を作るのに理想的です。

PiにMosquittoをインストールします

OpenHABにはMQTTクライアントが含まれているため、トピックをサブスクライブしてメッセージを公開することもできますが、サーバーとしては機能しません。そのためには、WebベースのMQTTブローカー(有料または無料)を使用するか、Piに無料のソフトウェアをインストールする必要があります。すべて社内に保管したいので、PiにMosquittoをインストールしました。

残念ながら、通常のapt-getで入手できるバージョンは完全に古くなっています。代わりに、最新のソースを追加しましょう。

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key add mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install mosquitto

MQTTサーバーをローカルネットワークで稼働させるために必要なのはこれだけです。ブローカーはデフォルトでポート1883で実行されています。

クロスプラットフォームである無料のMQTT.fxを使用して、MQTTサーバーが機能していることを確認します。設定アイコンをクリックして新しいプロファイルを作成し、RaspberryPiのIPアドレスまたは名前を入力します。保存して、接続を押します。右上の小さな信号が緑色に変わったら、準備は完了です。

簡単なテストを行うには、[サブスクライブ]タブをクリックして、次のように入力します。 inTopic / テキストボックスに入力し、 申し込む ボタン。これで、inTopicという名前のトピックに関するメッセージを受信するようにサブスクライブされましたが、メッセージは0個表示されます。 [公開]タブに戻り、小さなボックスにinTopicと入力し、下の大きなテキストボックスに短いメッセージを入力します。打つ 公開 数回、サブスクライブタブを振り返ります。そのトピックにいくつかのメッセージが表示されているはずです。

ネットワークに実際のセンサーを追加する前に、トピックレベルについて学習する必要があります。これにより、MQTTネットワークを構造化およびフィルタリングできます。トピック名では大文字と小文字が区別されます。$で始めたり、スペースや非ASCII文字を含めたりしないでください。実際には変数名の標準的なプログラミング手法です。

/区切り文字は、階層的なトピックレベルを示します。たとえば、以下はすべて有効なトピックレベルです。

inTopic / smallSubdivision / evenSmallerSubdivision

myHome / livingRoom / Temperature

myHome / livingRoom / humidity

myHome /キッチン/温度

myHome /キッチン/湿度

すでに、このツリー構造がセンサーやデバイスでいっぱいのスマートホームに最適であることがわかるはずです。 1つの部屋で複数のセンサーを使用するためのベストプラクティスは、同じチャネルに複数のタイプのセンサーを公開しようとするのではなく、各センサー変数を独自のトピックレベルとして公開することです(上記の例のように)。 。

クライアントは、個々のトピックレベルをいくつでも公開またはサブスクライブしたり、特別なワイルドカード文字を使用してツリーの上位からフィルタリングしたりできます。

+ワイルドカードは、任意の1つのトピックレベルの代わりになります。例えば:

myHome / + /温度

クライアントを両方にサブスクライブします

myHome / livingRoom / Temperature

myHome /キッチン/温度

...しかし湿度レベルではありません。

#はマルチレベルのワイルドカードであるため、次の方法でlivingRoomセンサーアレイから何でもフェッチできます。

myHome / livingRoom /#

技術的には、ルートレベル#にサブスクライブすることもできます。これにより、ブローカーを通過するすべてのものを完全に取得できますが、それはあなたの顔に消火ホースを突き刺すようなものです。少し圧倒されます。 HiveMQからパブリックMQTTブローカーに接続し、#にサブスクライブしてみてください。クライアントがクラッシュする前に、数秒で約300通のメッセージが届きました。

MQTT初心者向けのヒント: ' /私の家/' 'とは別のトピックです 私の家/' –先頭にスラッシュを含めると、空白のトピックレベルが作成されます。これは技術的には有効ですが、混乱を招く可能性があるためお勧めしません。

理論がわかったので、Arduino、イーサネットシールド、DHT11温度および湿度センサーを試してみましょう。スターターキットに含まれている可能性がありますが、そうでない場合は、環境センサーをモーションに交換するだけです。センサー(またはボタン)。

イーサネット接続を使用したArduinoからのMQTTの公開

Wi-Fiまたはイーサネットが組み込まれたハイブリッドArduino互換デバイスがある場合は、それも機能するはずです。最終的には、すべての部屋でネットワーク接続を使用する必要があることを伝えるためのより良い/より安い方法が必要になりますが、これは基本を学ぶのに役立ちます。

ダウンロードから始めます Githubのpubsubclientライブラリ 。 [ZIPとしてダウンロード]ボタンを使用した場合、構造が少し間違っています。解凍し、フォルダの名前を「 pubsubclient 、次に2つのファイルをから取り出します src フォルダを作成し、ダウンロードしたフォルダのルートまで1レベル上に移動します。次に、フォルダ全体を自分のフォルダに移動します Arduino /ライブラリ ディレクトリ。

これがあなたが適応できる私のサンプルコードです :DHT11信号出力はピン7にあります。次の行で、サーバーIPをPiのサーバーIPに変更します。

client.setServer( '192.168.1.99'、1883);

残念ながら、わかりやすい名前は使用できません (私の場合はOpenHAB.local) ArduinoのTCP / IPスタックは非常に単純であり、Bonjour命名のコードを追加すると、無駄にしたくない大量のメモリが必要になるためです。センサーデータがブロードキャストされているトピックを変更するには、次の行までスクロールします。

char buffer [10];

dtostrf(t、0、0、buffer);

client.publish( 'openhab / himitsu / Temperature'、buffer);

dtostrf(h、0、0、buffer);

client.publish( 'openhab / himitsu / humidity'、buffer);

このコードには、コマンドチャネルへのサブスクリプションも含まれています。次の行を見つけて調整します。

client.subscribe( 'openhab / himitsu / command');

その周辺のコードを調べると、たとえば特定のチャネルにコマンドを送信することで、LEDやリレーを簡単に制御できることがわかります。サンプルコードでは、コマンドの受信を確認するメッセージを送り返すだけです。

コードをアップロードし、Arduinoをネットワークに接続し、MQTT.fxを使用していずれかにサブスクライブします また openhab/himitsu/# (または部屋名を変更したものは何でも、最後に#を含めることを忘れないでください)。すぐにメッセージが届くはずです。また、コマンドトピックにONまたはOFFを送信すると、確認応答も返されます。

OpenHABのMQTTバインディング

方程式の最後のステップは、これをOpenHABにフックすることです。そのためには、もちろんバインディングが必要です。

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab:openhab / usr / share / openhab

そして、設定ファイルを編集してバインディングを有効にします。

mqtt:broker.url = tcp:// localhost:1883

mqtt:broker.clientId = openhab

OpenHABを再起動します

sudoサービスopenhab再起動

次に、アイテムを1つか2つ追加しましょう。

/ * MQTTセンサー* /

数値Himitsu_Temp'Himitsu Temperature [%.1f°C] '(Himitsu、Temperature){mqtt ='<[broker:openhab/himitsu/temperature:state:default]'}

Number Himitsu_Humidity 'Himitsu Humidity [%.1f %%]' (Himitsu,Humidity) {mqtt='<[broker:openhab/himitsu/humidity:state:default]'}

これで、フォーマットを理解する必要があります。それは ナンバーアイテム MQTTバインディングから、指定されたトピックについて。これは簡単な例です。wikiページを参照することをお勧めします。 より複雑になる可能性があります

おめでとうございます。これで、安価なArduinoベースのセンサーアレイの基礎ができました。将来的にはこれを再検討し、Arduinoを独自の完全に別個のRFネットワークに配置する予定です。私も同じバージョンを作成しました Wizwiki7500ボード用 あなたがそれらの1つを持っている場合。

永続性とグラフ化データ

これまでに、Z-WaveからでもMQTTを実行しているカスタムArduinoからでも、おそらく多数のセンサーがセットアップされているので、いつでもそれらのセンサーの現在の状態を表示でき、ルールの値に対応する必要もあります。しかし、センサー値の興味深い点は、一般に、時間の経過とともに変化することです。そこで、永続性とグラフ化が役立ちます。 永続性 OpenHABでは、時間の経過とともにデータを保存することを意味します。先に進んで、RRD4J(Round Robin Database for Java)をセットアップしましょう。これは、データがラウンドロビン方式で保存されるために呼び出されます。古いデータは、データベースのサイズを圧縮するために破棄されます。

次のコマンドを使用してrrd4jパッケージをインストールします。

sudo apt-get install openhab-addon-persistence-rrd4j
sudo chown -hR openhab:openhab /usr/share/openhab

次に、という新しいファイルを作成します rrd4j.persist の中に 構成/永続性 フォルダ。以下に貼り付けます。

戦略{

everyMinute: '0 * * * *?'

everyHour: '0 0 * * *?'

everyDay: '0 0 0 * *?'

デフォルト= everyChange

}

アイテム{

//値が更新されたときにすべてを永続化し、デフォルトのみで、起動時にデータベースから復元します

*:戦略= everyChange、restoreOnStartup

//次に、Temperatureグループのすべてに対してeveryHourの特定の戦略を定義し、Humidityに対して毎分を定義します

友達のMinecraftサーバーに参加する方法

温度*:戦略= everyHour

湿度*:戦略= everyMinute

//または、ここに特定のアイテムを追加することもできます。

// Bedroom_Humidity、JamesInOffice:strategy = everyMinute

}

このファイルの最初の部分では、戦略を定義しています。これは、CRON式に名前を付けることを意味します。これは、My.OpenHABですでに行ったのと同じですが、今回は、everyDay、everyHour、everyMinuteで使用できるいくつかの新しい戦略を作成します。まだ全部使っていませんが、将来使うかもしれません。

ファイルの後半では、保存するデータ値をrr4djに指示します。デフォルトでは、更新するたびにすべてを保存しますが、特定のセンサーに対して時間ベースの戦略も指定しました。気温はあまり気にしないので、毎時だけ節約するように設定しましたが、湿度は私にとって大きな関心事なので、毎分どのように変化するかを確認したいと思います。特に設定した時間に保存したいデータが他にある場合は、ここに追加するか、必要に応じて調整してください。

注:データもグラフ化する場合は、少なくとも1分に1回は保存する必要があります。センサーデータがこれほど迅速に更新されるかどうかは関係ありません。rr4djに1分に1回保存するように指示するだけです。

これを定義すると、値が格納されていることを示すデバッグ出力が表示されるようになります。

次に、このすべてのデータのきれいなグラフを作成しましょう。本当に簡単です。個々のセンサーのグラフを作成するには、サイトマップに以下を追加します。

チャートアイテム=寝室_湿度期間= h

文字通り必要なのはそれだけです。期間の有効な値は次のとおりです。 h、4h、8h、12h、D、3D、W、2W、M、2M、4M、Y ;これらが何を意味するのかは明らかです。指定されていない場合、データの1日はデフォルトでDになります。

複数の項目を含むグラフを作成するには、代わりにグループ名をグラフ化するだけです。

チャート項目=湿度期間= h

このグラフを他の場所で使用できることを知りたいと思うかもしれません。次のURLを使用して画像を生成しています。 http:// YOUROPENHABURL:8080 / chart?groups = Humidity&period = h

いかがですか あなたの OpenHABシステムが登場しますか?

このガイドの今回の記事は以上ですが、OpenHABについて私たちから最後に聞くことになるとは思わないでください。うまくいけば、これと初心者向けガイドが、独自の完全なOpenHABシステムを開発するための確固たる基盤を提供してくれますが、それは実際には完全に終了することのないプロセスです。

ありがたいことに、OpenHABは、単純なルールの複雑さから究極のホームオートメーションまで、数台のデバイスから数百台のデバイスまで適切に拡張できます。では、システムはどのように機能しているのでしょうか。どのデバイスを選びましたか?あなたが取り組むつもりの次の大きなプロジェクトは何ですか?

コメントで話しましょう。このガイドが役に立った場合は、共有ボタンをクリックして、友達にも独自のOpenHABシステムをセットアップする方法を教えてください。

私たちがお勧めし、議論するアイテムを気に入っていただければ幸いです。 MUOはアフィリエイトとスポンサーのパートナーシップを持っているので、私たちはあなたの購入のいくつかから収入の一部を受け取ります。これはあなたが支払う価格に影響を与えることはなく、私たちが最高の製品の推奨を提供するのに役立ちます。

共有 共有 つぶやき Eメール スピーチをアニメーション化するためのビギナーズガイド

スピーチのアニメーション化は難しい場合があります。プロジェクトにダイアログを追加する準備ができたら、プロセスを分解します。

次を読む
関連トピック
  • DIY
  • スマートホーム
  • Arduino
  • ホームオートメーション
  • 長い形式
  • ロングフォームガイド
著者について ジェームズブルース(707件の記事が公開されました)

ジェームズは人工知能の理学士号を取得しており、CompTIA A +およびNetwork +の認定を受けています。ハードウェアレビューエディターとして忙しくないときは、LEGO、VR、ボードゲームを楽しんでいます。 MakeUseOfに参加する前は、照明技術者、英語教師、データセンターエンジニアでした。

ジェームズブルースのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください