Raspberry Pi の GPIO を使用して動きを感知し、サイレンを作動させるホーム セキュリティ プログラムを Python で作成しました。ユーザーは、ラズベリー パイにも接続されている nfc リーダーに NFC タグを使用して、システムをアクティブ化/非アクティブ化します。
このために、ブロックしない方法で nfc タグを常にチェックすると同時に、センサーの動きもブロックしないように常にチェックする必要があります。もう少し並行して行う必要がありますが、この 2 つで十分だと思います。
現在、このように開始/停止するスレッドを使用しています-一定時間後にスレッドを停止する-これが最適な方法であるかどうかはわかりませんが、現在、システムは正常に動作しています。
ここで、WebSocket を介して通知を提供するように機能を拡張したいと考えています。これは Twisted で実行できることがわかりましたが、混乱しています..
これが私がそれをやろうとしている方法のサンプルコードです:
from twisted.internet import reactor
from autobahn.websocket import WebSocketServerFactory, \
WebSocketServerProtocol, \
listenWS
def thread1(stop_event):
while(not stop_event.is_set()):
stop_event.wait(4)
print "checking sensor"
# sensor_state = GPIO.input(11)
if sensor_state == 1:
# how can I call send_m("sensor detected movement") #<---
t1_stop_event.set()
t1_stop_event = Event()
t1 = Thread(target=thread1, args=(t1_stop_event,))
class EchoServerProtocol(WebSocketServerProtocol):
def onMessage(self, msg, binary):
print "received: "+msg
print "stopping thread1"
t1_stop_event.set()
def send_m(self, msg):
self.sendMessage(msg)
if __name__ == '__main__':
t1.start()
factory = WebSocketServerFactory("ws://localhost:9000")
factory.protocol = EchoServerProtocol
listenWS(factory)
reactor.run()
では、thread1 のようなスレッドからサーバー プロトコルの send メソッドを呼び出すにはどうすればよいでしょうか。