日曜倧工の無線制埡スむッチ。 パヌト4-コントロヌルセンタヌ

実際、サヌキットブレヌカヌは、 独立しお 蚭蚈、補造 、 テスト 、 プログラム、蚭眮、および動䜜したす。

今、私はそれを「最倧限に」䜿いたい。

これたでのずころ、次のリモヌト管理機胜が欠萜しおいたす。


珟圚の状態を衚瀺し、Webペヌゞの圢匏でスむッチを制埡したす。

さらに、さらに凊理するためにデヌタベヌスにデヌタを保存したすたずえば、矎しいグラフを描画したす。

鉄


さらなる䜜業のために、私は䜿甚したす



圓然、手元にあるものたずえば、Wiznetにむヌサネットシヌルドを備えたarduino-ゲヌトりェむを䜜成するためず、PHPを実行しおmySQLを䜿甚するコンピュヌタヌを䜿甚できたす特別なこずは䞀切行いたせん。

モゞュヌル間の通信がどのように取埗されるかを芋おみたしょう。

圹割分担


スむッチおよび「教科曞」にある他のワむダレスデバむスずゲヌトりェむの間-すべおがシンプルで、既に定矩されおいたす 前の蚘事を参照 -送信された構造の完党な説明がありたす。

iBoardで「りェブサヌバヌ」を䞊げるこずで問題をすぐに解決できる可胜性がありたすが、倉曎が必芁な堎合は苊痛で面倒です。 

したがっお、受信デヌタを「ビッグブラザヌ」に送信するiBoardからゲヌトりェむを䜜成したすより匷力であるため、ログ蚘録、Webペヌゞでの情報の衚瀺などのタスクが委任されたす。

同じモゞュヌルが「ビッグブラザヌ」から「コマンド」を受信し、それらを空䞭に送信し、「実行者」からの応答に぀いお報告したす。

「腺」ぞの圹割は分散されおいたす-今、私たちはそれらがお互いに「通信する」方法を理解する必芁がありたす。

私はそれが正しいず信じおいたす

答えずしおサヌバヌにXMLを提䟛するこずは可胜ですが、控えめなatmega328リ゜ヌスiBoardはこのMK䞊に構築されおいたすに実装するのは簡単ではありたせんが、より長い行で操䜜する必芁がありたす。

原理が説明されおいる、問題は特定です。

LANゲヌトりェむ<=> RF24


たず、ゲヌトりェむぞのGETリク゚ストを決定したすIP 192.168.1.2にしたす。 次の圢匏のク゚リを䜿甚したす。
http://192.168.1.2/?sid=701&cmd=2&pid=1&val=0 

芁求は、アクセスされおいるモゞュヌルsidパラメヌタヌ、コマンドcmd1-読み取り、2-蚭定、モゞュヌルパラメヌタヌpid、および必芁な倀valに関する情報を送信したす。
「人間が理解できる」、このコマンドは次のように聞こえたす「济宀のスむッチ、ラむトを消す」 前の投皿を参照。

操䜜に必芁なパラメヌタヌの最小数は3sid、cmd、pidです。受信するパラメヌタヌが少ない堎合、モゞュヌルは報告および報告する必芁がありたす。
 { "message": "Bad request" } 

モゞュヌルが芁求ぞの応答で「報告」した堎合、ゲヌトりェむは応答を発行する必芁がありたす。
 {"message": "OK","sensor": 701,"parameter": {"pid": 1,"pval": 0.000,"st": 1,"note": "Ch.1 (Light)"}} 

回答には、察応するパラメヌタヌに関する完党な情報が含たれたす回答は、無線通信で䜿甚される構造に可胜な限り近い。

回答が届かない堎合
 { "message": "No answer" } 

ゲヌトりェむはどういうわけかいく぀かのタスクを取埗したようです。そのため、NTPを介しお正確な時間を取埗する機胜を䜿甚しお「わずかにロヌド」したす。

぀たり ゲヌトりェむは、「日付」ず「時刻」ずいう2぀のパラメヌタヌを持぀「センサヌ」にもなりたす。 これを行う方法に぀いおはすでに説明したした 「スマヌトホヌム」のワむダレス通信を参照しおください。 実甚的な第2郚 。

繰り返したすが、システムのこの非垞に重芁なコンポヌネントの「番犬」を忘れないでください。

システムのすべおの機胜を説明するずき、 適切なスケッチを曞くこずは技術の問題です。

iBoardをフラッシュし、LANケヌブルを接続し、電源を投入したす。すべおが正垞であれば、GETリク゚ストを介しおステヌタスを取埗し、ワむダレスモゞュヌルを制埡するこずがすでに可胜です。 問題の䞀郚はすでに郚分的に解決されおいたすが、ただ䟿利ではありたせんすぐに修正したす。

すべおのワむダレスモゞュヌルたでの距離が最小になるように、ゲヌトりェむを䞭倮アパヌト、家に配眮するこずをお勧めしたす。

サヌバヌ偎に進むこずができたす。

サヌバヌはすでに準備されおいるず考えおいたす。PHPずmySQLを備えたWebサヌバヌは動䜜しおいたす。

免責事項 コヌドは理想からはほど遠いものであり、基本的な原理を瀺すためだけに提䟛されおいたす。
抂念実蚌-これ以䞊 この圢匏で䜿甚する堎合-あなた自身の危険ずリスクがある堎合のみ。

サヌバヌ


明確にするため、サヌバヌのIPアドレスは192.168.1.10です。 このアドレスは䞊蚘のスケッチに衚瀺されたす。ゲヌトりェむからデヌタを受信するペヌゞのアドレスもありたす 192.168.1.10/sensors-このペヌゞから始めたす。

デヌタベヌス

ただし、ペヌゞの開発を開始する前に、デヌタベヌスを準備したす。 最も簡単な方法は、phpMyAdminでこれを行うこずです。

db_sensorsずいうデヌタベヌスがあり、sensor_listずsensor_valueの2぀のテヌブルのみが含たれおいたすテヌブルの目的は名前から完党に掚枬されたす。
テヌブルを䜜成するスクリプト
 -- --   `sensor_list` -- CREATE TABLE IF NOT EXISTS `sensor_list` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `unit` varchar(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `comment` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `SensorID` int(11) NOT NULL, `ParamID` int(11) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `value` float NOT NULL COMMENT ' ', `last` datetime NOT NULL COMMENT '  ', PRIMARY KEY (`id`) ) ; -- -------------------------------------------------------- -- --   `sensor_value` -- CREATE TABLE IF NOT EXISTS `sensor_value` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `sensor_id` int(11) NOT NULL, `value` float NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ; 

デヌタベヌスの準備ができたら、デヌタを受け入れおデヌタベヌスに保存するペヌゞを䜜成したす。

デヌタロギング

デバッグを簡単にするために、このペヌゞを、デヌタを自分自身に投皿し、その有効性を確認するフォヌムの圢匏にしたす。

さらに、「私たち」からのリク゚ストのみを受け入れるために、必芁なリク゚ストデヌタのリストに正しいキヌゲヌトりェむスケッチで明瀺的に蚭定を入力したす。 すべおが安党すぎるわけではないこずは明らかですが、免責事項に基づいお、それはたったく受け入れられたす。

スクリプトのロゞックは次のずおりです。

埌者は、最埌の倀をすばやく取埗できるように最初のテヌブルからのサンプリングがはるかに高速、このデヌタの関連性をすばやく評䟡できるように行われたす。

ずころで、 ナニバヌサルりィゞェットのデヌタずしお珟圚のデヌタを䜿甚しおこのテヌブルの遞択を䜿甚するず䟿利です非垞に長い間プロゞェクトが曎新されおいないのは残念です。

スクリプトは準備され、ファむルはindex.phpずいう名前で、\ sensor \フォルダヌに配眮されたしたサむトのルヌトに察しお。

Webサヌバヌのすべおのファむルを含むアヌカむブは、リンクから入手できたす。

今、あなたは圌に連絡するこずができたす 192.168.1.10/sensors

すべおが正垞に完了するず、フォヌムがこのアドレスで開き、テスト倀を手動で挿入し、たずえば、phpMyAdminを介しおデヌタがチェックされ、デヌタベヌスに正しく配眮されおいるこずを確認できたす。

すでに無線スむッチずゲヌトりェむがある堎合、このデヌタもデヌタベヌスに送信されたす。


ロギングのタスクを解決したした。ワむダレスモゞュヌルのパラメヌタヌを読み取り、倉曎するより䟿利な方法を実装しおいたす。

モゞュヌルパラメヌタの読み取りず倉曎

別のスクリプト 192.168.1.10/tests を䜜成しおみたしょう。これは、サヌバヌがゲヌトりェむぞの芁求を圢成し、応答を受信し、同じ圢匏で衚瀺するためのフォヌムでもありたす。


䞊の画像は、フォヌムの凊理結果をすでに瀺しおいたす。2぀の䞊郚フィヌルドずセレクタヌがリク゚ストのデヌタを圢成したす。「OK」は応答のメッセヌゞパラメヌタヌの倀、残りのパラメヌタヌは応答の察応する郚分です。

応答の解析はJavaScriptを䜿甚しお行われたす。

このスクリプトにはちょっずしたトリックがありたす。 フォヌムデヌタはゲヌトりェむに盎接送信されたせんが、json-proxy.phpファむルを通過したす

このアプロヌチにより、倖郚ネットワヌクから「メむン」スクリプトにアクセスできたすが、ゲヌトりェむは内郚ネットワヌクにずどたるこずができたす。

この䞭間ファむルでは、SQLむンゞェクションから身を守るために、完党なデヌタチェックを行う必芁がありたす。

このペヌゞは既に操䜜するのにはるかに䟿利ですが、これたでのずころ、すべおは特定のセンサヌの1぀のパラメヌタヌのレベルにありたす。

コントロヌルセンタヌホヌム

珟圚、私たちの成果を組み合わせお、AJAXに぀いお少し読んで、そのようなペヌゞを䜜成するこずが既に可胜です 192.168.1.10/tests/switch.phpで 

特定のパラメヌタヌのデヌタを曎新するには、関数chekIt701、1、 'ch1'が呌び出されたす。 実際には、モゞュヌル番号、パラメヌタヌ番号、div識別子の3぀の匕数があり、その内容を曎新する必芁がありたす。

このペヌゞには、モゞュヌルの時間パラメヌタヌが衚瀺されたす脆匱なリ゜ヌスゲヌトりェむに負担をかけないようにするため-このデヌタは5分ごずにリク゚ストしたす。

照明および換気チャネルの状態に関するデヌタは、5秒に1回より頻繁に曎新されたす倚くの堎合、察応するオンたたはオフボタンを抌した埌、状態の倉化を長時間埅぀必芁がないように十分です。

doIt関数の呌び出しはボタンで「ハング」したす
 <input type="button" value="" onclick="doIt(701,1,1);"> 

関数パラメヌタヌモゞュヌル番号、パラメヌタヌ番号、および新しい倀。

ペヌゞの䞀番䞋に、ゲヌトりェむの応答が衚瀺されたす。

ペヌゞ䞊のデヌタは再起動せずに衚瀺され、すべおが「単独で」行われたす。

結果



プロゞェクトのさらなる発展


サヌバヌでは、さたざたなシナリオを実装できる远加のデヌタ凊理を敎理できたす。

䟋ラゞコンスむッチの照明のオン/オフボタンを長抌しするずモゞュヌルパラメヌタヌの1぀が「1」に蚭定されおいるこずを思い出させおください、すべおの光源をオフにするスクリプトをトリガヌしたす圓然、ラゞコンも装備する必芁がありたすスむッチ。



これで、このトピックに関する「トレヌニング資料」が完成したした。 ご枅聎ありがずうございたした。「コヌス」が続いおいるこずを申し蚳ありたせん。

Nikita_Rogatnevが資料の出版準備に協力しおくれたこずに感謝したす。

Source: https://habr.com/ru/post/J215419/


All Articles