[ファイアウォール]


<Interop2010(その23)-つぶやくルーターX10( @X10_2gou )の改造Luaスクリプト #yamaha_X10>

[ファイアウォール] Interop2010(その23)-つぶやくルーターX10( @X10_2gou )の改造Luaスクリプト #yamaha_X10

ヤマハの平野です。

Interop Tokyo 2010から帰還し、6月16日から再稼動したつぶやくルーター「@X10_2gou」の改造Luaスクリプト大公開です。

【注意事項】

  • Luaスクリプト機能における「HTTPクライアント機能拡張」が利用できるファームウェアは、2010年6月時点で一般公開されておりません。
    ※今後のリリース時期は、未定です。
  • 今回公開したLuaスクリプトのTwitterアクセスでは、Basic認証を利用しているため、2010年 6月30日 8月16日以降はご利用いただけません。
    ※OAuth認証もしくはxAuth認証への対応は、未定です。
  • 楽しめたとか、つまらなかったとか、わからなかったとか、ビジネスに生かせる可能性を感じられたとか、セキュリティはどうすんだとか、ご意見がありましたら、rt100i-users当blogへのコメントなどお願いします。

@X10_2gouの改造Luaスクリプト構成】

@X10_2gouの改造版は、博多弁版の dl_watch_2gou.lua と lan1_2gou をひとつのプログラムに集約したもので、LAN1ポートのlink up/downの監視と定期的な独り言のつぶやきができます。動作イメージは、次の図を参照してください。

X10_2goukai

@X10_2gouのLuaスクリプトのポイント】

  • 乱数関数
  • rt.syslogwatch()関数で、link up/downのログを待つ。
  • rt.syslogwatch()関数で、link up/downがあれば、情報をつぶやく。
  • rt.syslogwatch()関数で、timeoutしたら、独り言をつぶやく。
  • 漢字コード:
    ヤマハルーターで採用している漢字コードは、シフトJISなのですが、Twitterで利用できる文字コードは、UTF-8です。しかも、HTTP APIであるためURLエンコーディングも必要なので、UTF-8 + URLエンコーディングされた漢字(文字列)を埋め込んでいます。
  • Twitterの認証方式:
    Luaスクリプト機能で搭載予定のHTTPクライアント機能では、Basic認証しか対応しておりません。ヤマハルーターで実際にTwitterにつぶやく場合には、OAuth認証もしくはxAuth認証に対応する必要がありますが、現在の対応予定は未定です。

【技術情報】

【Luaスクリプト一覧】

lan1_2goukai.lua】  (208行)

--[[

 ● LAN1のlink up/downを監視するスクリプト+独り言(lan1_2goukai.lua)

 ・LAN1の各ポートのlink up/downを監視し、twitterに状況を博多弁で
  投稿するスクリプトです。

 ・このファイルをRTFSに保存し、schedule atコマンドで実行してください。
 ・複数実行しないでください。
 ・スクリプトを停止するときは terminate lua コマンドを実行してください。
  再実行するには lua コマンドで実行します。

 <ノート>
 ・つぶやきたいことは、UTF-8に変換後、URLエンコーディングする必要があります。
  このサイトなどで変換してください。(http://hogehoge.tk/tool/)
 ・本スクリプトファイルを編集する場合、文字コードは必ず Shift-JIS を使用してください。

]]

--------------------------------------------------
-- グローバル変数の設定                         --
--------------------------------------------------

--------------------------##  設定値  ##--------------------------------
-- twitterの設定
user = "(TwitterのユーザーID)"
pass = "(Twitterのパスワード)"

msg_monologue = {
	--Interopで参考出品しとったX10がつぶやいとるよ。 http://bit.ly/ds3Ovz 
	"Interop%E3%81%A7%E5%8F%82%E8%80%83%E5%87%BA%E5%93%81%E3%81%97%E3%81%A8%E3%81%A3%E3%81%9FX10%E3%81%8C%E3%81%A4%E3%81%B6%E3%82%84%E3%81%84%E3%81%A8%E3%82%8B%E3%82%88%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	-- つぶやくルーターX10 ( @X10_2gou )です。 http://bit.ly/ds3Ovz 
	"%E3%81%A4%E3%81%B6%E3%82%84%E3%81%8F%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BCX10+%28+%40X10_2gou+%29%E3%81%A7%E3%81%99%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	-- 博多弁でつぶやくルーター( @X10_2gou )です。 http://bit.ly/ds3Ovz 
	"%E5%8D%9A%E5%A4%9A%E5%BC%81%E3%81%A7%E3%81%A4%E3%81%B6%E3%82%84%E3%81%8F%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BC%28+%40X10_2gou+%29%E3%81%A7%E3%81%99%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	-- Luaスクリプト機能にHTTPクライアント機能を拡張して、Twitter APIを叩いとんよ~ http://bit.ly/ds3Ovz 
	"Lua%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E6%A9%9F%E8%83%BD%E3%81%ABHTTP%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E6%A9%9F%E8%83%BD%E3%82%92%E6%8B%A1%E5%BC%B5%E3%81%97%E3%81%A6%E3%80%81Twitter+API%E3%82%92%E5%8F%A9%E3%81%84%E3%81%A8%E3%82%93%E3%82%88%EF%BD%9E+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	-- 今、浜松なんよ~
	"%E4%BB%8A%E3%80%81%E6%B5%9C%E6%9D%BE%E3%81%AA%E3%82%93%E3%82%88%EF%BD%9E",
	--どげんしょぉ。
	"%E3%81%A9%E3%81%92%E3%82%93%E3%81%97%E3%82%87%E3%81%89%E3%80%82",
	-- ルーターに搭載されたLuaスクリプト機能があるけん、つぶやけるようになったとばい。 http://bit.ly/ds3Ovz 
	"%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AB%E6%90%AD%E8%BC%89%E3%81%95%E3%82%8C%E3%81%9FLua%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E6%A9%9F%E8%83%BD%E3%81%8C%E3%81%82%E3%82%8B%E3%81%91%E3%82%93%E3%80%81%E3%81%A4%E3%81%B6%E3%82%84%E3%81%91%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%B0%E3%81%84%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	-- 今、ヤマハの本社におるけん。
	"%E4%BB%8A%E3%80%81%E3%83%A4%E3%83%9E%E3%83%8F%E3%81%AE%E6%9C%AC%E7%A4%BE%E3%81%AB%E3%81%8A%E3%82%8B%E3%81%91%E3%82%93%E3%80%82",
	-- つぶやくルーターX10 ( @X10_v3 )が質問に答えとーけん。 http://bit.ly/ds3Ovz 
	"%E3%81%A4%E3%81%B6%E3%82%84%E3%81%8F%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BCX10+%28+%40X10_v3+%29%E3%81%8C%E8%B3%AA%E5%95%8F%E3%81%AB%E7%AD%94%E3%81%88%E3%81%A8%E3%83%BC%E3%81%91%E3%82%93%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	--説明はここば読んどけばよかけんね。 http://bit.ly/ds3Ovz 
	"%E8%AA%AC%E6%98%8E%E3%81%AF%E3%81%93%E3%81%93%E3%81%B0%E8%AA%AD%E3%82%93%E3%81%A9%E3%81%91%E3%81%B0%E3%82%88%E3%81%8B%E3%81%91%E3%82%93%E3%81%AD%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	--どげんねん
	"%E3%81%A9%E3%81%92%E3%82%93%E3%81%AD%E3%82%93",
	--いま、ヤマハの平野さんのPCを監視ばしよっと。
	"%E3%81%84%E3%81%BE%E3%80%81%E3%83%A4%E3%83%9E%E3%83%8F%E3%81%AE%E5%B9%B3%E9%87%8E%E3%81%95%E3%82%93%E3%81%AEPC%E3%82%92%E7%9B%A3%E8%A6%96%E3%81%B0%E3%81%97%E3%82%88%E3%81%A3%E3%81%A8%E3%80%82",
	--なんとかしおんしゃぁ。
	"%E3%81%AA%E3%82%93%E3%81%A8%E3%81%8B%E3%81%97%E3%81%8A%E3%82%93%E3%81%97%E3%82%83%E3%81%81%E3%80%82",
	-- 名前は、 @X10_2gou です。 http://bit.ly/ds3Ovz 
	"%E5%90%8D%E5%89%8D%E3%81%AF%E3%80%81+%40X10_2gou+%E3%81%A7%E3%81%99%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	--いま、LANの監視ばしよっと。
	"%E3%81%84%E3%81%BE%E3%80%81LAN%E3%81%AE%E7%9B%A3%E8%A6%96%E3%81%B0%E3%81%97%E3%82%88%E3%81%A3%E3%81%A8%E3%80%82",
	--うどんはダシがちがうけんね~
	"%E3%81%86%E3%81%A9%E3%82%93%E3%81%AF%E3%83%80%E3%82%B7%E3%81%8C%E3%81%A1%E3%81%8C%E3%81%86%E3%81%91%E3%82%93%E3%81%AD%EF%BD%9E",
	-- なんか( @X10_v3 )に質問したいんちゃろ。 http://bit.ly/ds3Ovz 
	"%E3%81%AA%E3%82%93%E3%81%8B%28+%40X10_v3+%29%E3%81%AB%E8%B3%AA%E5%95%8F%E3%81%97%E3%81%9F%E3%81%84%E3%82%93%E3%81%A1%E3%82%83%E3%82%8D%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	--とんこつラーメンが懐かしか~
	"%E3%81%A8%E3%82%93%E3%81%93%E3%81%A4%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3%E3%81%8C%E6%87%90%E3%81%8B%E3%81%97%E3%81%8B%EF%BD%9E",
	--博多弁がなつかしか~
	"%E5%8D%9A%E5%A4%9A%E5%BC%81%E3%81%8C%E3%81%AA%E3%81%A4%E3%81%8B%E3%81%97%E3%81%8B%EF%BD%9E",
	--筑前煮が食べたか~
	"%E7%AD%91%E5%89%8D%E7%85%AE%E3%81%8C%E9%A3%9F%E3%81%B9%E3%81%9F%E3%81%8B%EF%BD%9E",
	-- 遠慮せんで( @X10_v3 )に質問せんね。 http://bit.ly/ds3Ovz 
	"%E9%81%A0%E6%85%AE%E3%81%9B%E3%82%93%E3%81%A7%28+%40X10_v3+%29%E3%81%AB%E8%B3%AA%E5%95%8F%E3%81%9B%E3%82%93%E3%81%AD%E3%80%82+http%3A%2F%2Fbit.ly%2Fds3Ovz+",
	--だんご汁が食べたか~
	"%E3%81%A0%E3%82%93%E3%81%94%E6%B1%81%E3%81%8C%E9%A3%9F%E3%81%B9%E3%81%9F%E3%81%8B%EF%BD%9E",

	--いまなんしょっと。
	"%E3%81%84%E3%81%BE%E3%81%AA%E3%82%93%E3%81%97%E3%82%87%E3%81%A3%E3%81%A8%E3%80%82"
}

----------------------##  設定値ここまで  ##----------------------------

-- httpリクエストテーブル
http_t = {
	url = "http://twitter.com/statuses/update.xml",
	method = "POST",
	auth_type = "basic",
	auth_name = user,
	auth_pass = pass,
	content_type = "application/x-www-form-urlencoded"
}

--------------------------------------------------
-- つぶやく関数                                 --
--------------------------------------------------
function tweet(str)
	local r

	http_t.post_text = "status=" .. str .. time_stamp()
	r = rt.httprequest(http_t)

	if (r.code ~= 200) then
		print("[twitter] Failed to update status.")
	end
end

--------------------------------------------------
-- twitterへの接続テストをする関数                
--------------------------------------------------
function test_tweet()
	local t = {
		url = "http://twitter.com/help/test.xml",
		method = "GET"
	}

	r = rt.httprequest(t)
	return r.code
end

--------------------------------------------------
-- LAN1のLink up/down を判定する関数            --
--------------------------------------------------
msg_t = {
	-- LAN1.1 up. ヤマハの平野( @hisashi_hirano )しゃんがおるばい。
	mya_up = "LAN1.1+up.+%E3%83%A4%E3%83%9E%E3%83%8F%E3%81%AE%E5%B9%B3%E9%87%8E%28+%40hisashi_hirano+%29%E3%81%97%E3%82%83%E3%82%93%E3%81%8C%E3%81%8A%E3%82%8B%E3%81%B0%E3%81%84%E3%80%82",
	-- LAN1.1 down. ヤマハの平野( @hisashi_hirano )しゃんがおらんばい。どこ行っとぉとぉ~
	mya_down = "LAN1.1+down.+%E3%83%A4%E3%83%9E%E3%83%8F%E3%81%AE%E5%B9%B3%E9%87%8E%28+%40hisashi_hirano+%29%E3%81%97%E3%82%83%E3%82%93%E3%81%8C%E3%81%8A%E3%82%89%E3%82%93%E3%81%B0%E3%81%84%E3%80%82%E3%81%A9%E3%81%93%E8%A1%8C%E3%81%A3%E3%81%A8%E3%81%89%E3%81%A8%E3%81%89%EF%BD%9E",

	-- にGbEで繋がったごとあるばい。速かねぇ~
	giga = "%E3%81%ABGbE%E3%81%A7%E7%B9%8B%E3%81%8C%E3%81%A3%E3%81%9F%E3%81%94%E3%81%A8%E3%81%82%E3%82%8B%E3%81%B0%E3%81%84%E3%80%82%E9%80%9F%E3%81%8B%E3%81%AD%E3%81%87%EF%BD%9E",
	-- にLAN端末が繋がったごとあるばい。
	fast = "%E3%81%ABLAN%E7%AB%AF%E6%9C%AB%E3%81%8C%E7%B9%8B%E3%81%8C%E3%81%A3%E3%81%9F%E3%81%94%E3%81%A8%E3%81%82%E3%82%8B%E3%81%B0%E3%81%84%E3%80%82",
	-- にな~んも繋がっとらんばい。
	down = "%E3%81%AB%E3%81%AA%EF%BD%9E%E3%82%93%E3%82%82%E7%B9%8B%E3%81%8C%E3%81%A3%E3%81%A8%E3%82%89%E3%82%93%E3%81%B0%E3%81%84%E3%80%82"
}

function lan1_proc(str)
	local ptn_ud  = "LAN1: PORT(%d+) link (%w+)"
	local ptn_gbe = "1000BASE%-T"
	local port, ud, text

	port, ud = str:match(ptn_ud)

	if (port == "1") then
		-- LAN1.1専用のlink up/downのつぶやき文字列作成
		if (ud == "up") then
			text = msg_t.mya_up
		elseif (ud == "down") then
			text = msg_t.mya_down
		end
	elseif (port) and (ud) then
		-- LAN1.2~LAN1.4/LAN1.8のlink up/downのつぶやき文字列作成
		if (ud == "up") then
			if (str:match(ptn_gbe)) then
				text = "LAN1." .. tostring(port) .. msg_t.giga
			else
				text = "LAN1." .. tostring(port) .. msg_t.fast
			end
		elseif (ud == "down") then
			text = "LAN1." .. tostring(port) .. msg_t.down
		end
	end

	return text
end

--------------------------------------------------
-- 日付と時刻、ハッシュタグ関数を返す関数       --
--------------------------------------------------
function time_stamp()
	local t = os.date("*t")
	return string.format("%%28%02d%%2F%02d+%02d%%3A%02d%%3A%02d%%29+%%23yamaha_X10", 
		t.month, t.day, t.hour, t.min, t.sec)
end

--------------------------------------------------
-- メイン                                       --
--------------------------------------------------
local ptn = "LAN1: PORT%d link %w+"
local rtn, str
local count = 1

math.randomseed(os.time())		-- 乱数初期化

-- syslog debug on を設定
assert(rt.command("syslog debug on"), "スクリプトの初期化に失敗しました。")
if (test_tweet() ~= 200) then
	print ("twitterに接続できません。")
end

-- LAN1監視し始めたなう。
--tweet("LAN1%E7%9B%A3%E8%A6%96%E3%81%97%E5%A7%8B%E3%82%81%E3%81%9F%E3%81%AA%E3%81%86%E3%80%82")

while (true) do
	rtn, str = rt.syslogwatch(ptn, 1, math.random(1800, 5400))  -- 30分~90分待ったら独り言
	if (rtn) and (str) then
		-- LAN監視結果のつぶやき
		str = lan1_proc(str[1])
		if (str) then
			tweet(str)
		end
	else
		-- 一定時間経過後の独り言
		tweet(msg_monologue[count])
		count = count + 1
		if (count > #msg_monologue) then
			count = 1
		end
	end
end
print("end")

【Interop Tokyo 2010記事】


トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/240314/6969950

このページへのトラックバック一覧


コメント

コメントを投稿



ヤマハのネットワーク製品

プロジェクトフォン

会議システムとは、手軽に遠隔地と連絡や議論を行うためのもの。実際は、ハウリングしたり、声が途切れたり、返事が聞こえなかったり。プロジェクトフォンは、会議の音を改善する新しい会議システムです。

ルータ&ファイアウォール



 1995年よりISDN応用製品のひとつとして始めたヤマハルーター。常にSOHO、中堅・中小企業の皆様に最先端のネットワークソリューションを提供し、多くの実績をお客様と共に作って参りました。SRT100は、より信頼性の高いネットワークセキュリティを実現します。