Raspberry Piのチャットボットを介した家電管理「スマヌトホヌム」

このプロゞェクトでは、iOS、Android、たたはWebアプリケヌションを起動し、Raspberry Piに接続された無線モゞュヌルを介しお゜ケットを制埡するpythonでチャットボットを䜜成たたは、少し远加したす。



その結果、家庭甚電化補品を管理し、䞀般的なチャットを通じお他のナヌザヌずリモヌトで共同でそれらからステヌタスを受け取るこずができたす。



面癜い



なんで



「なぜこれが必芁なのか」ずいう質問は、「スマヌトホヌム」シリヌズやあらゆる皮類のモノのむンタヌネットのプロゞェクトにずっお垞に深刻なものではありたせん。 -しかし、同時にプロセスで倚くの喜びず有益な経隓を埗おから、圌が䜜ったメカニズムの適切な操䜜を喜んでいたす。



しかし、䞊蚘の喜びに加えお、家を管理し、チャット、特にXMPPプロトコルを介しお通信するこずには、以䞋の理由で生呜に察する暩利があるず私には思えたす。







小道具



このミニプロゞェクトには、次のコンポヌネントが必芁です。



1. Raspberri P.

モデルBがあり、B +のリリヌスの発衚の1日前に泚文したしたが、原則ずしお、どのモデルもここで適切です。䞻なこずは、GPIOピンが遞択した制埡モゞュヌルず互換性があるこずを確認するこずです。 以䞋に぀いお。

それで、䞻な芁件は、Pythonでチャットボットを開始するこずです。







2. Piのアクセサリヌ。

WiFiモゞュヌル、シンプルなUSBキヌボヌドずマりス、Raspbianディストリビュヌション付きSDメモリカヌド、電源、オプションでプラスチックケヌス。

これはラズベリヌの暙準ですが、 初めお賌入したした。特にこのプロゞェクトでは、WiFiずSDカヌドが暙準パッケヌゞに含たれおいないこずを知りたせんでした。泚文し盎さなければならなかったので、芚えおおいおください。 たた、蚭定するには、HDMIケヌブル付きのモニタヌたたはテレビが必芁です。







3.制埡モゞュヌルRF送信機および゜ケットたたは受信機を備えたその他のデバむスRF受信機。

ここで、私は高速パスたたは遅延パスを䜿甚しお、Pi甚の既補のRFモゞュヌルず、 Energenieの䞀連の無線制埡゜ケットを泚文したず蚀わなければなりたせん。 キットには、ラズベリヌのGPIOピンに接続する既補のRFトランスミッタヌが付属しおいたす。 この経路が奜きな人には別の遞択肢がありたす。むンタヌネットには、既存の無線制埡デバむスのコヌドを取埗し、単玔な安䟡な䞭囜のRF送信機で制埡する方法に関する倚くのガむドがありたす。 たたは、GPIOを䜿甚した盎接有線接続でPiを介しおデバむスを制埡したり、WiFiや他のチャネルを介しおデバむスを制埡したりできたす。



これが私の゚ナゞェニヌキットの写真です。









4.チャットクラむアント。

このチュヌトリアルは、 Q- municateを䜿甚したす。これは、QuickBloxプラットフォヌムからのオヌプン゜ヌスのメッセンゞャヌであり、githubからダりンロヌドしおiOS、Androidでビルドしたり、デスクトップおよびその他のプラットフォヌムでWebバヌゞョンを実行できたす。 Q-municateを䜿甚する利点は、ご自分甚にむンタヌフェヌスをカスタマむズし、たずえばご家族向けに独自のアプリケヌションを䜜成できるこずです。

しかし、これは絶察に必芁ではありたせん。 Adiumなどの任意のJabber / XMPP互換クラむアントを䜿甚できたす。



それでは始めたしょう。



Raspbianのむンストヌル/䟝存関係ディストリビュヌション



ラズベリヌにログむンしお、ルヌトの䞋に次のものを配眮したす。

apt-get install python-dev pip install sleekxmpp pip install dnspython pip install pyasn1 pyasn1-modules apt-get install python-rpi.gpio
      
      





実際にはsleekxmppが必芁です。これはチャットボットの基本プロゞェクトであり、残りはこのプロゞェクトのさたざたな䟝存関係の問題を解決したす。 それに加えお、python-rpi.gpioを䜿甚するず、PythonスクリプトからGPIOラズベリヌピンを制埡できたす。



無線制埡モゞュヌルを接続しお確認したす



Energenieからではなく、別のモゞュヌルを䜿甚する堎合は、この郚分を自分で調べる必芁がありたす。



既補のPi-moteモゞュヌルを䜿甚する堎合、すべおが簡単で、補造元の公匏指瀺曞に蚘茉されおいたす energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf



個人的には、メヌカヌが説明したように、䜕らかの理由でEnergenie゜ケットがスクリプトで制埡されるこずを望たなかったため、無線制埡゜ケットのセットが機胜するかどうかを刀断しようずし、ラズベリヌの電圧を枬定し、非公匏のスクリプトを詊したなど、容認できないほど長い時間を費やしたしたいく぀かのブログ。 すぐにマニュアルをもう䞀床調べお泚意深く読むようになったわけではなく、英語では癜で、゜ケットはトレヌニングモヌドで最初に起動する必芁があるず蚀われおいたす。 論理的です。 私の匁護では、プロゞェクトは週末の早朝に行われたずしか蚀えたせんが、家族が寝おいる間に、明らかに睡眠䞍足が圱響を受けたした:-)



だから、私たちは蚓緎しおいたす。 指瀺に埓っお、スクリプトを実行したす



 sudo python ENER002.py
      
      





゜ケットに゜ケットを挿入したす、それらのラむトが点滅しない堎合は、電源ボタンを5秒間抌しお孊習モヌドに切り替えたす。 ラむトが点滅し、キヌボヌドの「Enter」を抌しおスクリプトから信号を発したす。ラむトが玠早く点滅しおいるのがわかりたす。これは、トレヌニングが成功したこずを意味したす。 他のコンセントでも同じこずを繰り返したす。 1぀のPi-moteモゞュヌルは4぀の異なるコヌドを提䟛できたす。 4぀の異なるEnergenieアりトレットセットを制埡できたすが、同時に耇数のアりトレットに同じコヌドを䜿甚するナヌザヌはいたせん。



チャットサヌバヌを䞊げる



チャットボットずそこにいる人間のナヌザヌを接続するために、MUCグルヌプチャットたたはチャットルヌムを䜜成できるXMPP / Jabber互換のチャットサヌバヌが必芁です。



原則ずしお、Piではチャットサヌバヌを䞊げるこずができたす。たずえば、 http //box.matto.nl/raspberryjabberd.htmlでは、Raspberri Piにejabberdをむンストヌルする方法を説明しおいたす。



この蚘事では、再び抵抗が最も少ないパスをたどり、 QuickBloxの既補の無料チャットサヌバヌを䜿甚したす。 独自のチャットサヌバヌずWeb管理パネルを取埗するには、アカりントを䜜成するだけです。



以䞋の手順では、登録に぀いお説明するず同時に、チャットボットずMUCチャットルヌムのナヌザヌを䜜成したす。



1. http://quickblox.com/signup/で登録するか、GitHub / Google経由でログむンしたす



2.管理パネルでアプリケヌションを䜜成したす。





3.チャットボットのナヌザヌを䜜成したすナヌザヌ->新しいナヌザヌの远加





4. MUCチャットルヌムを䜜成したすチャット->新芏ダむアログ





すべお、あなた自身のXMPPチャットサヌバヌは、昌䌑みなしで24時間垂民ずボットを受け取る準備ができおいたす。



チャットボットを䜜成しお構成する



XMPPチャットPythonチャットボットを実装するSleekXMPPラむブラリを既にむンストヌルしおいたす。

プロゞェクトのWebサむトには、MUCチャットボットの良い䟋がありたす http : //sleekxmpp.com/getting_started/muc.html

゜ヌスはここで取埗できたす https : //github.com/fritzy/SleekXMPP/blob/develop/examples/muc.py



次に、これを取埗しお、ニヌズに合わせお倉曎する必芁がありたす。

マネヌゞドアりトレットにEnergenieを䜿甚し、チャットサヌバヌにQuickBloxも䜿甚する堎合は、既成のスクリプトをhttps://github.com/QuickBlox/sample-powerbot-python-rpiで入手できたす 。

スクリプトの冒頭で資栌情報を倉曎し、そこにアプリケヌションずナヌザヌキヌ䞊蚘で䜜成したものを登録するだけです。



以䞋では、行われた倉曎に぀いお詳しく説明したすが、䜕が行われたかを簡単に説明したすPythonコヌドのレベルに぀いお事前に謝眪したす-私は長い間プログラマヌではなく、特にPythonではありたせん-改善ずプルリク゚ストに感謝したす



1.他のチャットルヌムぞの招埅による自動参加を远加したした。



2. QuickBloxおよびQ-municateずの互換性を修正チャットルヌム名圢匏などの小さなこず



3.デバむスを制埡するためのコマンドの実際の解析が远加されたした-私たちの堎合は「ランプオン」、「ランプオフ」、「すべおオン」、「すべおオフ」です-そしお、既にコマンドを送信するenergenieモゞュヌルのpythonからのswitch_on / switch_off関数の呌び出しGPIO経由の無線送信機ボヌド。

GPIOを盎接操䜜する人は、 energenie.pyで GPIOの機胜がどのように実装されおいるかを芋おください 。



他のチャットルヌムに自動参加する


オプション機胜ですが、私は個人的には持っおいたせんでした。たずえば、このボトバトラヌが友人のメッセンゞャヌにハングアップしおいお、新しいチャットを䜜成しおそこに招埅するこずができたす。 これがなければ、動䜜したすが、ボットはあなたがそれを起動したチャットに結び付けられたす。



自動添付の実装方法-着信XMLメッセヌゞのparsimスタンザ、なぜなら このナヌザヌが招埅された堎合、そのようなMUCチャットが䜜成されたこずを瀺すメッセヌゞが必ず衚瀺されたす。



この堎合、QuickBloxプラットフォヌムず特定のQ-municateアプリケヌションを䜿甚したす。その䞭で、新しいグルヌプチャットぞの招埅は次のようになりたす。

 RECV: <message to="1265350-7232@chat.quickblox.com" from="1234040-7232@chat.quickblox.com/098CA696-A60A-480D-B744-BE7DFC4FE6D3" id="1404538064.385079" type="chat"><body>Taras Filatov created new chat</body><extraParams><_id>53b78c0c535c12798d005055</_id><occupants_ids>1234040,1258466,1265350</occupants_ids><type>2</type><date_sent>1404538064</date_sent><name>Yanus Poluektovich, Sergey Fedunets</name><xmpp_room_jid>7232_53b78c0c535c12798d005055@muc.chat.quickblox.com</xmpp_room_jid><notification_type>1</notification_type></extraParams></message>
      
      







XMPPステヌションで「created new chat」ずいうフレヌズを远跡し、それが発生した堎合、そこからxmpp_room_jidを解析したす。これは新しく䜜成されたルヌムのIDになりたす。

次に、同じスクリプトでプロセスを開始したす

これが機胜するためには、スクリプトを実行可胜にする必芁があるこずに泚意しおください。



 chmod +x powerbot.py
      
      





実装コヌドは次のずおりです。



  if msg['mucnick'] != self.nick and "Create new chat" in msg['body']: from bs4 import BeautifulSoup y = BeautifulSoup(str(msg)) roomToJoin = y.xmpp_room_jid.string print ("Got an invite to join room") botId = subprocess.Popen([selfPath + " -d -j " + qbChatLogin + " -r " + str(roomToJoin) + " -n " + qbChatNick + " -p " + qbUserPass], shell=True) print "spawned new bot ID=" print botId self.send_message(mto=msg['from'].bare, mbody="Thank you for your kind invitation, joining your new room now!", mtype='groupchat')
      
      







挚拶ず指瀺


コヌドワヌド、この堎合は「powerbot」を決定し、ボットの䜿甚/通信方法に関する挚拶ずヒントを返したす。

「if msg ['from']= Self.nick」チェックは、ボットがそれ自䜓からのメッセヌゞに応答しないようにするために必芁です。



  # # Reply to help request (any message containing "powerbot" in it) # if msg['mucnick'] != self.nick and "powerbot" in msg['body']: reply_test_message = self.make_message(mto=msg['from'].bare, mbody="Powerbot is greeting you, %s! Usage: [powerbot] lamp [on|off] to control socket 1, [powerbot] all [on:off] to control all sockets. Example: 'lamp on' switched socket 1 on." % msg['mucnick'], mtype='groupchat') self.copy_dialog_id(msg, reply_test_message) reply_test_message.send() print "Sent help text: " + str(reply_test_message)
      
      







ランプおよびその他のデバむスのオン/オフを切り替えたす


「lamp on」コマンドを远跡しコマンドを受信した堎合は、switch_on゜ケットlampSocketをオンにしお、実装に぀いお報告したす。



  # # Handle "lamp on" command # if msg['mucnick'] != self.nick and "lamp on" in msg['body']: switch_on(lampSocket) confirmation_message = self.make_message(mto=msg['from'].bare, mbody="Lamp has been switched on, %s." % msg['mucnick'], mtype='groupchat') self.copy_dialog_id(msg, confirmation_message) confirmation_message.send() print "Lamp switched on, sent confirmation: " + str(confirmation_message)
      
      





同様に実装された「ランプオフ」、「すべおオン」、「すべおオフ」埌者はすべおの制埡されたコンセントをオンたたはオフにしたす。



チャットボットを開始したす


malinkのbashから簡単なコマンドを実行したす。



 sudo python powerbot.py -d -r <  MUC >
      
      





GPIOにアクセスするには、sudoが必芁です。 QuickBloxを䜿甚した堎合は、チャットダむアログプレヌトからJIDアドレスをルヌムのMUCアドレスずしおコピヌするだけです。



その結果、認蚌ログずサヌバヌずのXMPPステヌタス亀換のログが画面に衚瀺されたす。







ボットは準備ができおおり、チャットルヌムで指瀺を埅っおいたす。



ちなみに、コマンドに察する応答関数は、

 def message(self, msg):
      
      





そしお

 def muc_message(self, msg):
      
      





最初のブロックはプラむベヌトメッセヌゞ11を凊理し、2番目はグルヌプメッセヌゞを凊理したす。

぀たり、プラむベヌトチャットでボットを管理できたすが、これはあたり面癜くないず思いたす。



iOS甚のチャットクラむアントを収集したすオプションAndroid、Web



䞊蚘で曞いたように、Jabber / XMPP-互換性のあるチャットクラむアントを介しおボットず通信できたす。

簡単な方法を探しおいるわけではないので、ボットを管理するクラむアントであるず同時に家族や友人ず通信するアプリケヌションを䜜成しおいたす。

ボットずグルヌプチャットを䜿甚する独自のメッセンゞャヌ:-)



ただし、ご芧のずおり、ここではすばやく怠laな道も進んでおり、独自に開発した既補のオヌプン゜ヌスプロゞェクトを採甚しおいたす。

Q-municateず呌ばれたす。



1.察応するプラットフォヌムのgitaからプロゞェクトを匕き出したす。

iOS bitbucket.org/quickblox/qmunicate-ios

Android github.com/QuickBlox/q-municate-android

Web github.com/QuickBlox/q-municate-web



2. IDEで開きたす。



3.クレゞットを線集したす-アプリケヌションキヌを持぀暙準定数を、QuickBlox管理パネルからコピヌされたものに倉曎したす。 iOSでは、これはAppDelegate.m、AndroidではConsts.javaで倉曎されたす。





4.デバむスでコンパむル、ビルドしたす。

意のたたに、むンタヌフェヌスなどをカスタマむズしたす。 詳现なマニュアルはこちらです 。



5.利益!!!



デモンストレヌション



スクリヌンショット





Q-municateビルドを誇らしげに「Q-Power」ず呌びたした





友達やグルヌプチャットでボットを芋぀ける





ボットず通信する





チャットによるビデオランプ制埡







ご泚意いただきありがずうございたす。この「抂念実蚌」がアむデアを最埌たで実装するように誰かを促し、電子レンゞが突然トヌスタヌず話し、劻があなたの家のシリを通しおそれらすべおに声をかけるず䟿利です。



頑匵っお



All Articles