Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

SwampDragonの使い方 (その4)

前回まででデータベースの値を変更するとリアルタイムで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アプリのテーブルの値もリアルタイムで更新されます。

かなり長くなりましたが、とても便利な機能だと思いますので使ってみてください。