Raspberry Pi と IP Messenger でネットワーク対応回転灯を作る2

さて、Raspberry Piを使うとなるとやはり開発言語はPythonでしょう。

IP Messengerのプロトコルについてはこの辺りを参考にさせていただきます。 http://ipmsg.org/protocol.txt
http://libipmsg.sourceforge.jp/specification.html

今回はメッセージの送信は重要視しておらず、IP Messengerのユーザリストにリストアップされて、送られてくるメッセージを受け取ることができればOKです。 ざっくりまとめると、

  1. ネットワーク上のIP MessengerサービスにエントリするためのメッセージをUDP 2425でブロードキャスト。
  2. その後2425をリッスン。
  3. メッセージが来たら受け取ったよメッセージを返す。エントリメッセージの場合はエントリ受け付けたよメッセージを返す。

これだけです。 プロトコルフォーマットは
<バージョン>:<パケット番号>:<ユーザ名>:<ホスト名>:<コマンド番号>:<オプション部>
です。

バージョンは1固定でOKっぽいです。
パケット番号は乱数で。
ユーザ名とホスト名は適当に文字列を。
コマンド番号はIP Messengerのソースコードをダウンロードしてipmsg.hをみると早いです。エントリ時に送信するメッセージはこんな感じで定義されていました。

#define IPMSG_BR_ENTRY 0x00000001UL

とりあえずユーザリストにリストアップしてもらうところまでをさらっと。

import socket
import random

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('0.0.0.0', 2425))

pnum = random.randrange(1, 100000)
msg = "%s:%s:%s:%s:%s:%s" % (1, pnum, 'ipmsg_light', 'raspberrypi', 1, '')
s.sendto(msg, ('255.255.255.255', 2425))

s.close()

これで実行すると、
実行前
これが
実行後_リストに表示された
こう。
ちゃんとエントリされました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です