前回まででデータベースの値を変更するとリアルタイムでWebページの値が更新されるようにすることができました。今回は、pythonからdjangoシステムにアクセスして、データベースに値を保存する方法を紹介します。
それではpythonコードを紹介します。
swampdragon-py-clientモジュールのダウンロード
下記サイトのモジュールを使用します。下記URLからsdclient.pyをRaspberry Piにダウンロードします。
https://github.com/jonashagstedt/swampdragon-py-client/tree/master/pyclient
websocket-clientのインストール
上記モジュールはwebsocket-clientを使用しますので、下記コマンドでインストールします。
sudo pip3 install websocket-client
pythonコードからdjangoシステムにアクセスする方法
それほど難しくありませんので、まずはコードにざっと目を通してください。
※url = 'ws://xxx.xxx.xxx.xxx:9999/data'のxxx.xxx.xxx.xxxにはRaspberryPiのIPアドレスを記載してください。
from sdclient import DragonClient
def on_channel_message(channel, message):
print(channel)
print(message)
if channel == 'ch-pidata':
output = '{} says: {}'.format(message.get('name'), message.get('message'))
print(output)
def on_subscribed(context, message):
print('-subscribed-')
def on_updated(context, message):
print('-updated-')
url = 'ws://xxx.xxx.xxx.xxx:9999/data'
client = DragonClient(url, on_channel_message=on_channel_message)
client.connect()
client.call_router('subscribe', 'pidata_router', callback=on_subscribed, channel='ch-pidata')
client.call_router('update', 'pidata_router', callback=on_updated, id='1', pidata1='123' , pidata2='234')
それではコードの説明をします。
・client = DragonClient(url, on_channel_message=on_channel_message)
⇒urlを指定して、DragonClientクラスをnewします。
・client.call_router(...)
⇒call_routerの引数は以下のようになります。
第1引数:routerクラスのvalid_verbsで指定している関数名を指定
第2引数:routerクラスのrouter_nameを指定
第3引数:callback関数の関数名を指定
第4引数:第1引数で指定した関数に必要なデータ
このpythonコードを実行するとWebのテーブルの値がリアルタイムで更新されたと思います。センサー値等をpythonで取得する場合は、そのままpythonコードでdjangoシステムにアクセスできるのでとても便利です。もちろん、Webアプリのテーブルの値もリアルタイムで更新されます。
かなり長くなりましたが、とても便利な機能だと思いますので使ってみてください。