OpenHABずArduinoを友達にする方法

私たちは皆、生掻をより良くし、技術革新を家に加え、それを自動化し、より安党にしたいず考えおいたす。 倚くの堎合、これらの欲求は熊手運動に倉わりたす。 プロプラむ゚タリなシステムは高䟡であり、盞互に互換性がない堎合が倚く、すべおの専門家が独自の゜リュヌションを䜜成できるずは限りたせん。 䜕をすべきか、アマチュアにずっおアクセスしやすいだけでなく、専門家にずっおも興味深いシンプルな゜リュヌションを芋぀ける方法は



Arduinoはアマチュアから尊敬されおいるシンプルな電子デザむナヌであり、圌らはひどい実隓でひそかにそれを䜿甚しおいたすが、専門家はそれを嫌っおいるず蚀いたす。 その人気の秘密は䜕ですか、それをどのように䜿甚しお問題を解決したすか



Arduinoは家のロヌカル監芖ず制埡に適しおいたす。これにはネットワヌク䞊に倚くのプロゞェクトがありたす-グロヌバルに考える必芁があるため、優れおいたすが十分ではありたせん ネットワヌク接続ずモバむルむンタヌフェむスが必芁です



さお、 この蚘事のおかげで、OpenHABに粟通しおいたす。OpenHABは、さたざたなプロトコルを持぀倚数のデバむスを単䞀のネットワヌクに結合するオヌプン゜ヌスプラットフォヌムです。 OpenHABはJavaで実装されおいるため、さたざたなOSで動䜜し、シングルボヌドコンピュヌタヌ䞊でもルヌタヌ䞊でも実行でき、モバむルむンタヌフェヌスずWebむンタヌフェヌスを備えおいたす。 すでに熊手を退屈しおいる、私たちのものに察する呪文の良いセットのように聞こえたすか



たず、 OpenHABをむンストヌルし 、ダりンロヌドペヌゞを開き、ランタむムコアずデモのセットアップをダりンロヌドし、C\ openhabで展開したす。 デモのセットアップを解凍するずき、README.txtファむルの眮き換えを蚱可したす。 Javaがコンピュヌタヌで䜿甚できない堎合java –versionコマンドで確認、 指瀺に埓っおむンストヌルしたす 。



C\ openhab \ start.batを実行しおOpenHABを実行し、少し埅っおWebむンタヌフェヌスを開きたす -localhost8080 / openhab.appSitemap = demo

OpenHABを停止する必芁がある堎合-Ctl + Cを抌すか、プログラムコン゜ヌルを閉じたす



画像



動䜜したす 続けたしょう。 私たちの目暙は簡単な解決策を芋぀けるこずですので、実隓から始めたしょう。 この蚘事に関するコメントの1぀は、Serial-Bindingを䜿甚しおシリアルポヌト経由でコントロヌラヌをOpenHubに接続するこずを提案したした。 非垞に興味深い解決策、それを実装しおみおください。



アドオンをむンストヌルするには、ダりンロヌドペヌゞを開き、アドオンをダりンロヌドし、org.openhab.binding.serial-1.6.1.jarプラグむンのバヌゞョンは異なる堎合がありたすをC\ openhab \ addonsフォルダヌに解凍したす。 必芁に応じお、 ドキュメントをお読みください。



通垞、実際のデバむスずの察話のデバッグには倚くの問題があるため、最初に端末からコマンドを送信し、ヌルモデムケヌブル゚ミュレヌタヌを介しおOpenHABに接続しおみたしょう。



com0com゚ミュレヌタをダりンロヌドしおむンストヌルし、ナヌティリティを実行したす 画像 プログラムメニュヌからセットアップするず、むンストヌル䞭にシリアルポヌトの仮想ペアが既に䜜成されおいるこずがわかりたす。COM35+ COM36がありたす。 それらを䜜業に䜿甚したす。



画像



端末ずしおHercules SETUPナヌティリティを䜿甚したした。これは、倚数のポヌトを遞択し、適切なボタンを抌しお送信する耇数のコマンドを入力できる無料のプログラムです。 ダりンロヌドしお、hercules_3-2-8.exeを実行し、「シリアル」タブに移動しお、仮想ペアの2番目のポヌトCOM36がありたすを遞択し、速床9600、8ビット、1ストップビット、パリティなしを入力したす。 ポヌトを開きたす。







次に、openHABを構成する必芁がありたす。そのために、デザむナヌを䜿甚したす。 ダりンロヌドペヌゞを開き、 openHAB DesignerをダりンロヌドしおC\ openhab \ designerフォルダヌに解凍し、C\ openhab \ designer \ openHAB-Designer.exeを実行しお、構成が配眮されおいるフォルダヌC\ openhab \ configurationsを遞択したす。







たず、芁玠アむテムを䜜成し、仮想ペアの最初のシリアルポヌトに関連付けたすCOM35がありたす。 これを行うには、demo.itemsファむルの最埌に次のコヌドを远加し、゚ディタヌりィンドりで右クリックしおコマンド「保存」を䜿甚したす。代わりに、単にctl + Sを抌したす。



String Serial_string " [%s]" { serial="COM35" }
      
      









テストのために、䜜成された芁玠に毎分コマンドを送信するルヌルを䜜成したす。 これを行うには、demo.rulesファむルの最埌に次のコヌドを远加しお保存したす。



 rule "Test serial string" when System started or Time cron "0 * * * * ?" then Serial_string.sendCommand("Test") end
      
      









OpenHABが実行されおいる堎合、タヌミナルプログラムでコマンドテキストの受け入れをほがすぐに開始し、コン゜ヌルにその通過に関するレポヌトが衚瀺されたす。







次に、OpenHABにコマンドを送信しおみたしょう。 タヌミナルでは、「送信」パネルの最初のフィヌルドにテキスト「ON_1」を入力し、2番目のフィヌルドに「OFF_1」を入力したす。 最初の「送信」ボタンを抌しおから、2番目を抌したす。 この結果、コン゜ヌルに次のメッセヌゞが衚瀺されたす。







䜜業が無駄にならないように、コマンドを凊理するルヌルを䜜成したす。これを行うには、demo.rulesファむルの最埌に次のコヌドを远加しお保存したす。



 rule "Serial control" when Item Serial_string received update then if(Serial_string.state=="ON_1") sendCommand(Light_FF_Corridor_Ceiling, ON) if(Serial_string.state=="OFF_1") sendCommand(Light_FF_Corridor_Ceiling, OFF) if(Serial_string.state=="ON_2") sendCommand(Light_GF_Kitchen_Ceiling, ON) if(Serial_string.state=="OFF_2") sendCommand(Light_GF_Kitchen_Ceiling, OFF) end
      
      





WEBむンタヌフェヌスを開き、アむテム「First Floor」をクリックしおからアむテム「Corridor」をクリックするか、リンクをブラりザヌにコピヌしたす localhost 8080 / openhab.appSitemap = demo_FF_Corridor、テキスト「ON_1」、次にOFF_1を端末から送信したす。 WEBアプリケヌションでスむッチを制埡し、その状態を倉曎する必芁がありたす。







「ホヌム」をクリックし、「グラりンドフロア」を遞択しおから「キッチン」を遞択するか、ブラりザヌでリンクをコピヌしたす localhost 8080 / openhab.appSitemap = demo_GF_Kitchen、テキスト「ON_2」、次に「OFF_2」を端末から送信したす。 WEBアプリケヌションでスむッチを制埡し、その状態も倉曎する必芁がありたす。







実隓の結果は、アプリケヌションコン゜ヌルで確認できたす。アプリケヌションコン゜ヌルには、次のメッセヌゞが衚瀺されたす。







すべおがコンピュヌタヌで動䜜したす。珟実の䞖界に接続する時です



ほずんどのArduinoボヌドには、COMポヌトからUSBぞのアダプタヌが既に搭茉されおいるため、コンピュヌタヌやラップトップぞの接続に問題はありたせん。 手元のツヌルからレむアりトを組み立おたす。そのためには、Arduinoコントロヌラヌ、ブレッドボヌド、ワむダヌ、ボタン、LED、10kおよび1kオヌムの抵抗噚が必芁です。







ネットワヌクには十分な説明ず䟋がありたすので、Arduinoの開発環境でむンストヌルプロセスず䜜業を詳现に説明する必芁はありたせん。 ボタンのクリックを凊理し、シリアルポヌト経由でテキストコマンドを送信する簡単なスケッチの䜜成にすぐに進みたす。 コマンドの誀った送信を避けるために、スケッチぞの接觊バりンスに察する単玔な保護を远加したす。



゚ディタヌを開き、次のコヌドを゚ディタヌに远加しお、btn.inoファむルにスケッチを保存したす。



 //   const int buttonPin = 2; //  ,    const int ledPin = 13; //    //  int buttonState = 3; //      int buttonCnt = 0; //       void setup() { //  ,   ,   pinMode(ledPin, OUTPUT); //  ,   ,   pinMode(buttonPin, INPUT); //    Serial.begin(9600); } void loop(){ //    delay(1); if (buttonState != digitalRead(buttonPin)) buttonCnt++; else buttonCnt = 0; if (buttonCnt > 100) { //      buttonState = digitalRead(buttonPin); buttonCnt = 0; //     //  ,  buttonState  LOW: if (buttonState == LOW) { //   digitalWrite(ledPin, HIGH); //   Serial.print("ON_1"); } else { //   digitalWrite(ledPin, LOW); //   Serial.print("OFF_1"); } } }
      
      









スケッチをコンパむルしおArduinoにロヌドし、ポヌトモニタヌを開き、9600の速床を遞択しお、ボヌド䞊のボタンを抌しおみたす。 その結果、コマンドの受信を確認できたす。







ポヌトモニタヌを閉じお、コントロヌラヌずのOpenHAB接続を構成したす。このため、芁玠の蚭定を線集したすこの堎合、Arduino USBアダプタヌがこのポヌトにむンストヌルされおいるため、倀をCOM18に倉曎する必芁がありたす。



 String Serial_string " [%s]" { serial="COM18" }
      
      





最埌に、コン゜ヌルずWEBむンタヌフェむスを䜿甚しおコマンドの通過を制埡したす。



私たちの仕事の結果ずしお埗たもの



1むンストヌル、OpenHABの構成、アむテムアむテムの远加方法、およびルヌルルヌルを䜿甚した凊理の自動化方法を孊習したした。

2人は、゜フトりェアツヌルを䜿甚しお亀換をテストするこずを孊びたした。 これらのツヌルは、将来のトラブルシュヌティングや独自の実隓の蚭定に圹立ちたす。

3はArduinoの最も簡単なスケッチを䜜成し、OpenHABに接続し、テキストコマンドを凊理するルヌルを䜜成し、シリアルポヌトを介しお制埡する機胜をテストしたした。



結論



テキスト圢匏でコマンドを送信するこずはArduinoの慣習では䞀般的です。そのようなコマンドの凊理はOpenHABで実装できるため、この察話方法は泚意ず議論に倀したす。



この゜リュヌションの欠点は、コマンドが䞀時停止以倖のもので区切られおいないこずです。これにより、コマンドが「固着」し、信頌性の䜎い凊理に぀ながる可胜性がありたす。 この問題を解決するには、コマンドを凊理するためのスケッチずルヌルを倉曎するか、シリアルバむンディングモゞュヌルを倉曎する必芁がありたす。



倚くの人がこのOpenHABアマチュアずの察話オプションを呌び出すため、䜜業を続行する前に、OpenHABずArduinoをModbusプロトコルを介しお接続しようずしたす。



これに぀いおは、次の資料で説明しおいたす。

ArduinoずModbus habrahabr.ru/post/249043

ArduinoおよびOpenHAB habrahabr.ru/post/252555

Arduino vk.com/myremoterに基づくオヌプンスマヌトホヌムコントロヌラヌ



All Articles