リモヌトサヌビス倚機胜BDS-Mをブロックする

この幞せなメモで、私は快適な家の珟圚の構成に関する話を締めくくりたす。 私の秘密の蚈画のシステムの最埌の郚分は、垞に「メディアコントロヌラヌ」ずいうコヌドの䞋を通過しおいたす。 そしお、圓然、むンタヌネットやブラりザを備えたスマヌトフォンやコンピュヌタヌからテレビ、メディアプレヌダヌ、゚アコンを制埡するこずを目的ずしおいたした。 い぀ものように、機胜は倖出先で補完され、開発されたした-私は即興挔奏に察するある皮の砎壊的な情熱を持っおいるようです。



したがっお、単玔なIRコマンドリピヌタヌから、メディアコントロヌラヌはそれほど単玔ではないものに倉わりたした。 たず、そこに倧気圧センサヌを远加しお、倩気図を完成させたした。 そしお-ワむダレスセンサヌからの無線信号のリピヌタヌ。これにより、䞭倮コントロヌラヌの䞀郚の機胜の寿呜ず䜿甚が倚少簡玠化されたした。 より正確には、猫の逌箱のほずんど問題のない管理が刀明したした。



誀解はありたせんでした。このコントロヌラヌには特別な目的や必芁性はありたせんでした。 それを䜜るのは興味深いこずでしたが、窓の倖を泚意深く考え、コヌヒヌを飲み、い぀も暖かい栌子瞞の毛垃の䞋で氞遠のこずを考える以倖の䜕かず長い冬の倜を過ごすのは面癜かったです。



珟圚の実甚的なアプリケヌションの1぀攟棄しなければならなかったは、1぀のボタンでテレビにワむダレスキヌボヌドを含めるこずず、䜕かを芋るためにテレビに接続されたAndroidキヌチェヌンでファむルマネヌゞャヌを同時に起動するこずです。 私が考える2番目のアプリケヌションは、おそらく炉にも送られるでしょうが、郚屋の枩床に応じお空調を自動制埡するこずです。



おそらくすべおが順調に進んでいたす。







シリヌズの他の装眮およびデバむス
私の快適な家

コントロヌラヌは䞭倮の家であり、党胜のKTsD-V-2-12

猫送り装眮制埡、パッシブAKK-PU-1

枩床ず湿床を枬定する機噚PI-TV-2

光ず音楜の機関銃ASIM-AU-2-6







。 アンテナは別ずしおzyrk-zyrk

画像



目的ず機胜


メディアコントロヌラヌは、䞭倮コントロヌラヌず連動するように蚭蚈されおいたす。



機胜が限られおいるため、各ボタンの固定コヌドを䜿甚しお互換性のあるプロトコルを䜿甚しおコマンドを発行できる無線リモヌトコントロヌルず組み合わせお自埋操䜜が可胜です原則ずしお、単玔な無線゜ケット、無線リレヌ、照明スむッチからリモヌト。



実装された機胜C-䞭倮コントロヌラヌ付き、A-オフラむンの可胜性あり



1LG TVコントロヌルC、A

2G-mini HDR900DメディアプレヌダヌコントロヌルC、A

3゚アコン制埡LG CS12AQC、A

4無線センサヌからセントラルコントロヌラヌぞの無線リモヌトコントロヌルコマンドおよび信号の䞭継C

5倧気圧ず宀枩の倀の枬定ず䞭倮制埡装眮ぞの送信C



背景


メディアコントロヌラヌの基本的な考え方は次のずおりです。 䞭倮制埡装眮から無線コマンドを受信し、察応するコマンドを送信したすが、すでにIRダむオヌドを介しおいたす。 もちろん、この堎合、メディアコントロヌラヌは制埡察象デバむスの比范的近くに配眮する必芁があり、制埡察象機噚のIRダむオヌドずIRレシヌバヌ間の盎接的な可芖性は、単に前提条件です。



原始的な方法でデバむスのIRコマンドを受け取りたした。IRremoteラむブラリを䜿甚しお、IRレシヌバヌずArduinoから小さなスタンドを組み立おたした。 このラむブラリの特城は、倚くのプロトコルを認識し、倚くの堎合、赀倖線リモコンの制埡コヌドを自信を持っお「読み取る」こずです。 この点では、RC-Switchず非垞によく䌌おいたす。コヌドを取埗したら、それをデバむスで䜿甚したす。



コヌドが認識されない堎合、IRremoteが制埡コヌドずずもに発行する「生の」䞀連のパルス幅がありたす。 ただし、欠点は、このオプションがコントロヌラヌリ゜ヌスの点ではるかに無駄になるこずです。 しかし、ここで必芁な堎合、䞀般的には、代替手段はありたせん。



䞡方の方法でアプリケヌションが芋぀かりたした。 たたたたテレビずメディアプレヌダヌに問題はなく、゚アコンは気たぐれでした。 同僚の話を読むず、ひどい真実が明らかになりたした。空調コマンドのコヌドワヌドには、蚭定された動䜜モヌドに関するすべおの情報が絶察に含たれおいたす。



゚アコンを飌いならす


平均的な゚​​アコンは、かなり愚かで埓順な生き物です。 圌は䜕も芚えおおらず、䜕も知らず、 舞台裏のリモコンが圌に䌝えるこずだけをしたす。



「生の」コヌドを䜿甚する必芁がある堎合、これがオプションであるこずを理解するのは非垞に簡単です。 たずえば、テレビのリモコンの同じボタンを䜕床でも抌すず、コマンドは毎回同じになりたす。 そしお、このコマンドはどこでも䜿甚できたす。



しかし、たずえば゚アコンのリモコンの枩床䞊昇ボタンを抌すず、枩床範囲内のコマンドは毎回異なりたす。 これは、蚭定枩床がコヌドワヌドで送信され、その倉化の兆候ではないためです。 たた、コヌドワヌドで送信されるのは、動䜜モヌド冷気/熱/ファン、ファン速床、ブラむンドの䜍眮などです。 IRremoteからの「デコヌドされた」結果を䜿甚しおも、珟実ずは䜕の関係もないため、良い結果で終わるこずはありたせん。



別の問題は、゚アコンの特城ず機胜が絶えず倉化しおいるこずです-䞖代から䞖代ぞ、モデルからモデルぞ。 そのため、ブランドのラむブラリを誰かが曞いたずしおも、最良の堎合、機胜そしお最悪の堎合、䜜業胜力は、基瀎ずなるモデルの機胜に制限されたす。



䟋は次のずおりです。垂盎ブラむンドを自動制埡せずに゚アコンを䜿甚しおいる人。 たた、コヌドワヌドで、バむトのペアが垂盎ブラむンドを制埡しおいるこずをどのように知っおいたすか元のプロトコルを芋おいない堎合 あなたが私の意芋が必芁な堎合-どこからでも。 確かに、コヌドワヌドに新しいチヌムのための予備があったずしおも、圌らが䜕をしおいるかを正確に理解するこずは䞍可胜です-おそらくむオン化が含たれたす。 たたは倚分空気也燥。 そのような、あなたは知っおいる、波打぀。



しかし、ヒヌロヌは存圚したす。 友人がLG゚アコンのために圌のラむブラリを曞きたした。



さお、空調コマンドを䜜成するロゞックを䜕らかの方法で蚈算する必芁があるかどうかを少し考えた埌、緊急の必芁はないずいう結論に達したした。 実際、かなり限られた機胜セットを䜿甚しおいたす。原則ずしお、同じ加熱枩床ず同じ冷华枩床です。 そのため、すべおの実装に時間を費やすのではなく、リモヌトコントロヌルに順番にむンストヌルしお、珟圚のモヌドのコマンドオン、オフ、加熱、冷华を読み取るこずにしたした。



だから、それは桁違いに思えたすが、1぀の機胜に1぀のマむクロコントロヌラヌを費やしおいるこずがわかりたす。 たた、それはなんずなく無駄だったので、少し考えお、そうであれば、倖郚の気象センサヌがこれを奪われおいるので、なぜ同時に気圧を枬定しないのかを決めたした。 そのため、人気の高いBMP085センサヌがコントロヌラヌに远加されたした。



倧気の驚き


興味深い話は、BMP085に関連しおいたす。 最初に、泚文しただけでなく、コピヌを受け取った埌にのみ、電圧が3Vず5Vの2぀のバヌゞョンの存圚に぀いお孊びたした。 さらに、兞型的なボヌド䞊では、このセンサヌが必芁ずする電圧の皮類を曞き蟌みたせん。 さたざたなセンサヌの写真を芋お、最終的にはチャンスを぀かむ必芁がありたした。



第二に、泚文時に、倧気圧センサヌを賌入しおいるず確信しおいたした。 実際、BMP085はどこでもたさにこの方法で衚瀺されたす。 したがっお、それを受け取った埌、センサヌの仕様を読んで、そこに「枩床枬定が含たれおいたす」ず思ったずき、私は非垞に驚きたした。 そしお詳现-「- 40〜+ 85°Cの動䜜範囲、+ -2°Cの枩床粟床 」。



圧力ず枩床の䞡方を同時に枬定するこずが可胜であるず思われたした。 さらに、特にこれは非垞に良いボヌナスであるため、粟床は非垞に良奜でした。



私はすぐに蚀わなければならない-私は枬定倀を特定の暙準枩床蚈ず比范しなかったので、センサヌがどれだけ、どの方向に間違っおいるかを蚀うこずはできたせん仮にあったずしおも。



。 マむクロコントロヌラヌの加熱が枩床枬定に䜕らかの圱響を䞎えるずは思わないように、センサヌをケヌスから真剣に取り出したした。 そしお、これは必芁です、圌はすでにほこりっぜいです

画像



リピヌタヌ


3番目の機胜のアむデアは、セントラルコントロヌラヌがラゞオボタンをあたりよく聞き取れず、猫の逌箱が䜜動するずいう事実に盎面したずきに、なんずかしお生たれたした。 䞀般に、倜間に目を開かずに、理想的には目を芚たさずにボタンを抌すず想定されおいたした。 珟実には独自の調敎が行われおいたす。手を䌞ばしお、ボタンを別の偎に回しお、䜕床か抌す必芁がありたした。



ボタンは䞭囜のセキュリティアラヌムからのものであり、たずもな範囲が異なるかなり厳しい送信機を持っおいるため、これは䞀般に奇劙です。



そしお、ここで、メディアコントロヌラヌの珟圚の堎所は非垞に成功したこずがわかりたした。ラゞオボタンず䞭倮コントロヌラヌのちょうど䞭間で、実際には信号が割り圓おられおいたした。 解決策は次のずおりです。メディアコントロヌラは無線をリッスンし、䜿い慣れたコマンドに遭遇した堎合は再送信したす。



競合の問題は非垞に簡単に解決されたす。 第䞀に、䞭倮制埡装眮は、ラゞオボタンコマンドのフレヌム内の最初の単語に応答する時間がありたす。 そしおその埌、圌は誰が䜕を再攟出するかを気にしたせん。 さらに、メディアリレヌコントロヌラヌは、原則ずしお、ラゞオボタンの埌にコマンドの送信を完了したす。これにより、歪みのない信号を受信するこずも可胜になりたす。



これは疑わしいず思うこずを理解しおいたす。 はい、そしお実装もどういうわけかそうではありたせん。 しかし実際には、ラゞオボタンの問題を忘れおいたした。 今ではい぀でも動䜜し、そこではずんでもない腕の振れがありたせん。



たあ、成功をきっかけに、念のために、ワむダレスセンサヌリヌクず煙のリレヌも远加したした。 それは私にずっお難しいこずではありたせんが、もしそれが圹に立぀なら、なぜですか



動䜜原理


䞀般に、メディアコントロヌラヌは䞭倮コントロヌラヌず連動するように蚭蚈されおいたす。 自埋的な䜜業は、マルチボタンの無線リモヌトコントロヌルを必芁ずし、機胜を制限するかなり゚キゟチックなアプリケヌションです。



したがっお、䞭倮制埡装眮ずの盞互䜜甚に぀いお具䜓的に説明したす。



IRリレヌ


IR制埡コマンドでは、いく぀かの条件が満たされおいる必芁がありたす。



1ネットワヌクりェブ、制埡無線、IRコマンドの察応衚を䜜成する必芁がありたす

2ネットワヌクりェブコマンドずコントロヌル無線コマンドは、セントラルコントロヌラヌで説明する必芁がありたす。

3メディアコントロヌラヌでは、制埡無線コマンドず察応するIRコマンドを蚘述する必芁がありたす



管理はスキヌムに埓っお行われたす。



1ナヌザヌがブラりザヌでネットワヌクWebコマンドを入力スマヌトフォンのボタンを抌す

2䞭倮制埡装眮はネットワヌクりェブコマンドを凊理し、察応する無線コマンドを発行したす

3メディアコントロヌラヌが無線コマンドを受信し、適切なIRコマンドをIRダむオヌドに発行する



ネットワヌクWebコマンドは、通垞のHTTP POSTリク゚ストですプリミティブ圢匏-ブラりザヌ行のアドレス。 䟋



192.168.22.185/?TVON



ここで、「 192.168.22.185 」はコントロヌラヌのアドレスであり、「TVON」はコマンドです。 したがっお、私たちは想像力ず垞識に基づいお自分たちでチヌムを䜜りたす。



無線コマンドはRC-Switchプロトコルに埓っおいたす。これにより、24ビットのデゞタルコヌド、぀たり0〜16777216の数字を送信できたす。぀たり、 すでに䜿甚できるコヌドを耇補しないか、近くでたずえば、隣人ず飛ぶコヌドを耇補しない限り、いずれかを遞択できたす。



次に䜕が起こっおいるかを調べるには、2぀の方法がありたす。1぀目は、機噚の䞍適切な動䜜によるものです。 -SwitchReceiveDemo_Simpleの䟋。



IRremoteラむブラリを䜿甚しお、テクノロゞヌのIRコマンドを認識できたす。



メディアコントロヌラによる無線コマンドの受信および実行の確認は提䟛されたせん。



倧気圧ず宀枩の䌝達


これらのむンゞケヌタヌを送信するには、気象センサヌず同じRC-Switchラむブラリず同じ手法を䜿甚したす。 ぀たり、コントロヌラヌは定期的に30分に1回倀を枬定し、数倀コヌドの圢匏で䞭倮コントロヌラヌに空䞭に送信したす。



気象センサヌずの違いは、私が怠けすぎお、各むンゞケヌタヌに個別のグルヌプを割り圓おたこずだけです。



その結果、圧力は1210XXXXの圢匏のコヌドで送信されたす。ここで、XXXXはmPaの圧力倀の敎数郚分です100分の1はあたり興味深くありたせん。 mmHgでの再蚈算は䞭倮コントロヌラヌによっお実行されたすが、理由は問わないでください。 知りたせん



枩床は1310YXXXの圢匏のコヌドで送信されたす。XXXは枩床倀に10を掛けた倀10分の1が送信されたす、Yは枩床蚘号0は正、1は負です。 たた、宀枩のサむンが必芁な理由を尋ねないでください。



䞡方の倀は、短い間隔で次々に送信されたす。



䞭倮制埡装眮によるコマンド受信の確認は提䟛されたせん。



無線コマンドリピヌタヌ


このサヌビス機胜は、RC-Switchを䜿甚しお基本的に実装されたす。 リレヌコヌドを決定し、そのリストをメディアコントロヌラに入力するだけで十分です。 䞭倮制埡装眮が「到達しない」無線゜ケットたたはスむッチのコヌドにするこずができたす。 たたは、䞭倮制埡装眮が「聞こえない」センサヌ。



したがっお、メディアコントロヌラがリレヌコヌドを認識した堎合ボタンが抌され、センサヌがトリガヌされ、コマンドが送信された堎合、指定された回数だけ繰り返したす。



唯䞀の特城は、私の実装では、「非䞀定」センサヌの信号、たずえばリモヌトコントロヌルがすぐに䞭継され、絶えず信号を送るセンサヌの信号たずえば、挏れや煙が呚期的に遅延しお䞭継されるこずです。



このロゞックは次のずおりです。 セントラルコントロヌラヌCCは垞にマルチメディアコントロヌラヌMKを聞くず考えられおいたすが、これは盞互の配眮によっお保蚌されおいたす。 同時に、MCを介した呚蟺信号のリレヌは、むニシ゚ヌタヌによる信号転送が終了するよりも埌に完了するこずが保蚌されおいたす。



したがっお、䞀方で、䞭倮委員䌚は、むニシ゚ヌタヌが聞こえなくおもリレヌ信号を受信するこずが保蚌され、他方では、むニシ゚ヌタヌずMKの䞡方が同時にそれを取埗した堎合にコマンドを受信したす。



残るのは、垞時信号を送るセンサヌの特異性だけです。 私が蚀ったように、挏氎センサヌは、氎に浞っおいる間、バッテリヌがなくなるたで絶叫するこずがありたす。 条件が正垞に戻った堎合にのみ停止したす。 したがっお、MKは最初に5秒間の䌑止埌に信号の䞭継を開始し䞭倮委員䌚自䜓がセンサヌを聞く堎合、次に、むニシ゚ヌタヌが信号を送信しおいる間、このサむクルを垞に繰り返したす。 ぀たり 「䞀緒に歌う」かのようにMK。



䞭倮制埡装眮によるコマンド受信の確認は提䟛されたせん。



鉄


私は疲れおいるこずを理解しおいたすが、私はあなたに思い出させたす-珟圚の構成のためのセット、䟋えばリンク。 だから



1 Arduino Pro Mini ATmega328p、16 MHz、5V

2433 MHz ASK / OOK レシヌバヌおよびトランスミッタヌキット

3IR LED IR513B-40940 nm2個たたは類䌌品

4LEDの電流制限抵抗理想的には68オヌム

4 BMP085センサヌ 5Vバヌゞョン

5奜みに合わせおLED、電源、スむッチング、コネクタ、ブレッドボヌドワむダに察応するワむダ

6ケヌス

7電源



AV機噚を制埡したい堎合は、IRリモヌトコントロヌルの信号を読み取るための光怜出噚も必芁です。 この目的のために、 TSOP4836 最も䞀般的な倉調呚波数36 kHzの受信埩調噚を䜿甚したした。 このフィゎビナの特城は、もしあなたが裏偎を䜕かで芆わなければ、倧量の干枉がキャッチされるずいうこずです。 心に留めおおくか、すぐにシヌルドされたものを賌入しおください。



この4぀のコンポヌネントのうち3぀が「デフォルト」ピンに接続されおいるため、このスケッチのアセンブリ図は完党には明らかではありたせん。これらはLED、レシヌバヌ、およびBMP085センサヌです。 ただし、送信ピンは原則ずしお自分で遞択できたす。コヌドの埌半で修正するこずを忘れないでください。



1受信機



DATA-デゞタルピン2

VCC-電源+ 5V

GND-地面ぞ



2送信機



DATA-デゞタルピン6

VCC-電源+ 5V

GND-地面ぞ



3BMP085

Adafruitの指瀺に埓っお 



SCL-アナログピン5ぞ

SDA-アナログピン4

VCC-電源+ 5Vバヌゞョン5Vのみ、それ以倖-3.3V

GND-地面ぞ



4IRダむオヌド



䞡方が盎列に接続されおいたす。 短い方のワむダヌを持っおいるのは片方だけです-圌はテレビを芋おいたすが、もう片方は本物です-圌ぱアコンに入る必芁がありたす。



申し蚳ありたせんが、私は垞にアノヌドずカ゜ヌドを混同しおいたす。 䞀般的に、䞀方の偎-アヌスカ゜ヌド、そしおもう䞀方アノヌド、電流制限抵抗私はペアで180オヌム、぀たり90オヌムからデゞタルピン3これはラむブラリでデフォルトで蚭定されおいたす、ただし、Megaでは機胜したせん。ラむブラリコヌドの倉曎が必芁になりたす-芚えおおいおください。



正盎に蚀うず、私の抵抗は間違っおいたす。 しかし、他に手近なものはなく、3぀を䞊列に配眮するのは怖いです。なぜなら、定栌電流はArduinoの胜力よりも高くなる可胜性があり、確認したくなかったからです。



電流制限抵抗は、䟿利な電卓で自分でダむオヌドの数に぀いお蚈算できたす。



私はこの幞せをすべお文字通り小さな箱に詰めたした。 ああ、そうでない堎合は、受信機ず送信機のアンテナを忘れないでください。 手元にたったく䜕もない堎合は、ワむダヌを1/4波長173 mmたたは164 mmに切断できたす。



最初は、BMP085センサヌも内郚にありたしたが、そこでさらに加熱される可胜性があるこずに気付き、実際に実行したした。 芋た目はそれほど矎しくありたせんが、枩床をもう少し正確に枬定する必芁がありたす。



。 コネクタ電源およびLED接続甚。 埌者の堎合-通垞のモノラル2.5 mmゞャック

画像



゜フトりェア


Sketchには次の非暙準ラむブラリが必芁です。



1デヌタ亀換およびリレヌ信号甚のRC-Swtich 。

2IR リモコンで AV機噚を制埡するためのIRremote 。

3BMP085センサヌからデヌタを受信するAdafruit_BMP085 。

4時間間隔をカりントするためのSimpleTimer 。



動䜜するには、次のものが必芁です。



1リレヌ甚の無線コマンドのコヌドを入力したす。

2管理察象デバむスのIRコヌドを入力したす。

3マルチメディアコントロヌラヌがIRコマンドを発行する無線コマンドのコヌドを入力したす。

4セントラルコントロヌラヌのコヌドでマルチメディアコントロヌラヌのコマンドセクションをカスタマむズするむンタヌネット経由の制埡甚。



䞭継甚の無線コマンドのコヌドを既に知っおいるこずを前提ずしおいたすこれらは無線センサヌ、リモコンなどです。 わからない堎合は、Arduino、レシヌバヌ、ReceiveDemo_SimpleサンプルでRC-Switchラむブラリを䜿甚したす。



制埡されたデバむスのIRコヌドは、むンタヌネットサヌフィンに䜿甚されるタブレットから、たたはリモヌトコントロヌルから読み取るこずで確認できたす。 2番目の堎合、光怜出噚をArduinoに接続し、IRremoteラむブラリを䜿甚する必芁がありたす。 急いでいる堎合は、䞻なものを芚えおおいおください



1同じボタンを抌したずきに異なる倀が衚瀺される堎合は、䜕かがおかしいこずを意味するか、゚アコンからのリモヌトコントロヌルがありたす。 この堎合、適切な管理ラむブラリを探すのが理にかなっおいたす。 たたは、そうでない堎合は、倉数セクションで行ったように「生の」コヌドを䜿甚しお、すべおをPROGMEMにパックしたす。



「生の」コヌドでは、行に明確に衚瀺される最初の倀は手動で砎棄する必芁があるこずに泚意しおください。



2同じボタンを抌したずきに同じコヌドが衚瀺される堎合-安党に䜿甚できたす。 IRremoteにも独自の送信フォヌマットがあり、コマンドコヌドに加えお、送信を実行するコマンドシステムを指定する必芁があるこずも忘れないでください。 NECがありたす。



そしお、ここにコヌド自䜓がありたす。
// 28.10.2013 -        // 29.11.2013 -        #include <Wire.h> #include <Adafruit_BMP085.h> #include <RCSwitch.h> // http://code.google.com/p/rc-switch/ #include <SimpleTimer.h> // #include <IRremote.h> unsigned long myData; long aL; boolean water1=false; //        boolean water2=false; boolean water3=false; boolean smoke1=false; boolean smoke2=false; boolean smoke3=false; #define txPin 6 //   SimpleTimer checkWeather; //   RCSwitch meteoSwitch = RCSwitch();  RC-Switch IRsend irsend; //  IRRemote //    PROGMEM const prog_uint16_t acON[59] PROGMEM ={9450, 4350, 650, 1600, 600, 500, 550, 550, 550, 500, 600, 1600, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 550, 1650, 600, 500, 600, 1600, 550, 1650, 600, 500, 550, 550, 600, 500, 550, 550, 600, 1600, 600, 450, 600, 1600, 600, 1600, 600}; const prog_uint16_t acOFF[59] PROGMEM ={9550, 4300, 600, 1600, 650, 450, 650, 450, 600, 500, 650, 1550, 600, 500, 600, 500, 600, 500, 600, 1600, 600, 1600, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 500, 600, 600, 500, 600, 500, 600, 450, 650, 450, 600, 1600, 650, 450, 600, 1600, 650, 450, 600, 500, 600, 500, 650, 1550, 600}; const prog_uint16_t acCool[59] PROGMEM ={9500, 4350, 600, 1650, 600, 500, 600, 500, 600, 500, 600, 1550, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 550, 1650, 600, 500, 600, 1600, 600, 1600, 600, 500, 600, 1600, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 1600, 600, 1550, 600, 1600, 600, 1600, 600}; const prog_uint16_t acHeat[59] PROGMEM ={9500, 4350, 600, 1600, 650, 450, 650, 450, 650, 450, 600, 1600, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 1600, 600, 500, 600, 1550, 650, 1550, 600, 1600, 650, 1550, 650, 450, 650, 1550, 600, 500, 600, 500, 600, 500, 650, 450, 650, 1550, 600, 500, 600, 500, 600, 500, 600}; //     PROGMEM const prog_uint16_t *IRRemotePointer[] = { acON, acOFF, acCool, acHeat}; Adafruit_BMP085 bmp; //  BMP085 void setup() { pinMode(13, OUTPUT); //  bmp.begin(); meteoSwitch.enableTransmit(txPin); // meteoSwitch.enableReceive(0); //    2 checkWeather.setInterval(1800000, getClimate); //     delay(2000); //      } void txSwitch(long cmd) { //     RC-Switch,        meteoSwitch.disableReceive(); //  ,    for (byte txC=0; txC<1; txC++) { meteoSwitch.send(cmd, 24); meteoSwitch.enableReceive(0); } } void repeatAlarm() { //   ""      txSwitch(aL); water1=false; water2=false; water3=false; smoke1=false; smoke2=false; smoke3=false; } void enableRx() { meteoSwitch.enableReceive(0); //   } void loop () { checkWeather.run(); if (meteoSwitch.available()) { //      ,   int value = meteoSwitch.getReceivedValue(); if (value != 0) { switch (meteoSwitch.getReceivedValue()) { case 1418288: // Water leak KITCHEN -   ,    5  (   ) if (water1 == false) { aL=1418288; checkWeather.setTimeout(5000, repeatAlarm); water1 = true; } break; case 3470133: // Water leak WASHER if (water2 == false) { aL=3470133; checkWeather.setTimeout(5000, repeatAlarm); water2 = true; } break; case 3592421: // Water leak MAIN if (water3 == false) { aL=3592421; checkWeather.setTimeout(5000, repeatAlarm); water3 = true;} break; case 1084887: // Smoke KITCHEN if (smoke1 == false) { aL=1084887; checkWeather.setTimeout(5000, repeatAlarm); smoke1=true; } break; case 2184536: // Smoke HALL if (smoke2 == false) { aL=2184536; checkWeather.setTimeout(5000, repeatAlarm); smoke2 = true; } break; case 12602757: // Smoke ROOM if (smoke3 == false) { aL=12602757; checkWeather.setTimeout(5000, repeatAlarm); smoke3 = true;} break; case 15741424: //      txSwitch(15741424); break; case 46151: //      txSwitch(46151); break; case 46150: //      txSwitch(46150); break; //  - // tv-on case 88100: irsend.sendNEC(0x20DF10EF,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; //     // tv-back case 88116: irsend.sendNEC(0x20DF14EB,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-volup case 88132: irsend.sendNEC(0x20DF40BF,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-voldown case 88164: irsend.sendNEC(0x20DFC03F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-chup case 88128: irsend.sendNEC(0x20DF00FF,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-chdown case 88256: irsend.sendNEC(0x20DF807F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-mute case 88512: irsend.sendNEC(0x20DF906F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-menu case 89100: irsend.sendNEC(0x20DFC23D,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-ok case 89108: irsend.sendNEC(0x20DF22DD,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-up case 89116: irsend.sendNEC(0x20DF02FD,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-down case 89132: irsend.sendNEC(0x20DF827D,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-left case 89164: irsend.sendNEC(0x20DFE01F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-right case 89128: irsend.sendNEC(0x20DF609F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // tv-av case 89256: irsend.sendNEC(0x20DFD02F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-on case 89512: irsend.sendNEC(0xF9EA15,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-off case 87108: irsend.sendNEC(0xF9EA15,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-play case 87116: irsend.sendNEC(0xF90AF5,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-back case 87132: irsend.sendNEC(0xF9F20D,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-volup case 87164: irsend.sendNEC(0xF9E817,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-voldown case 87128: irsend.sendNEC(0xF92AD5,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-ff case 87256: irsend.sendNEC(0xF9C03F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-rew case 87512: irsend.sendNEC(0xF9E01F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-menu case 92108: irsend.sendNEC(0xF96897,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-set case 92116: irsend.sendNEC(0xF958A7,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-up case 92132: irsend.sendNEC(0xF9C23D,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-down case 92164: irsend.sendNEC(0xF950AF,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-left case 92128: irsend.sendNEC(0xF9609F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-right case 92256: irsend.sendNEC(0xF9708F,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // media-ok case 92512: irsend.sendNEC(0xF940BF,32); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // ac-cool case 95108: IRTransmit(2, 59); delay(150); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // ac-heat case 95116: IRTransmit(3, 59); delay(150); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // ac-on case 95132: IRTransmit(0, 59); delay(150); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; // ac-off case 95164: IRTransmit(1, 59); delay(150); digitalWrite(13, HIGH); delay(40); digitalWrite(13, LOW); break; } } meteoSwitch.resetAvailable(); } } //   void getClimate() { int Pressure = bmp.readPressure()/100; int Temperature = bmp.readTemperature()*10; myData = 12100000+Pressure; meteoSwitch.send(myData, 24); //   if (Temperature > 0) { myData = 13100000+Temperature; meteoSwitch.send(myData, 24); //    } else { myData = 13101000+abs(Temperature); meteoSwitch.send(myData, 24); //    } } //   "" - void IRTransmit(byte cmd, byte cmdlen) { // prog_uint16_t *currentIRRemotePointer = (prog_uint16_t *)pgm_read_word(&IRRemotePointer[cmd]); //      PROGMEM unsigned int IRRawCodes[cmdlen]; //       for (byte i = 0; i < cmdlen; i = i + 1) { //    IRRawCodes[i] = pgm_read_word(€tIRRemotePointer[i]); // } irsend.sendRaw(IRRawCodes, cmdlen, 38); //    IRRemote delay(150); }
      
      









さお、最埌。 あなたがどこかで間違いを犯した堎合-䟋えば、私たちはそれを敎理したす。 そしお、残りは、あなたが知っおいる、あなたがより良くするこずができ、できるず信じおいたす。



远䌞 誰がタむトルに退屈な略語を蚎えたしたか



All Articles