HomeServerの環境設定画面をつくるには。IoT+WEBのためのホームサーバ計画の実装編23。

環境設定は、まぁ必要かもしれない

『つないだだけでつかえる』
と、銘打っていても、最後の最後にどうしようもないとき、
設定がPC画面でできるとうれしいわけですよ。

さぁどうします。
そうですね。簡単なのはWebサーバを立てちゃうことだとは思うのです。
そして、ありがちな命題、

ホームサーバのIPがDHCPだとわからんやん^^;

というもの。

もちろん、IPのスキャンしたりすればできるわけですが、
めんどいわけなので。

でも、そう、いままでさんざんやったじゃないですか。
UDPの無駄遣いをすればよいのです。

今までは、IoTクライアントがUDPでブロードキャストを投げてましたが、
HomeServerにも投げさせましょう。

そんで、PCでPythonのプログラムでUDPを受け取り、IPを特定し、ブラウザを開くようにしちゃえばそれでOKですね。

仕組みは。

仕組みは簡単です。
HomeServerはいくつかのスレッドが動いているので、
これにあらたにUDPでブロードキャストを投げ続けるスレッドを追加するだけですね。
もちろん、自分のIPを知らせることだけが目的なので、
なんの連携も必要ないことを考えれば、
スレッドじゃなくてプロセスでも良いです。ハイ。

【HomeServerでUDPでなげつづける】というプロセスを追加。

うぅーーん。そうですね。1分に1回とか。30秒に1回とか。そんな感じですかね。

そしたら今度はPC側ですね。
UDPのブロードキャストでコマンドを受信したら、
そのIPをブラウザで開くっていうPythonを実行させればよいのです。

ブラウザを開くとこはこんな感じで、別に、chrome.exeとかを指定する必要はありません。

import subprocess
#urlが設定されてるとして、、
subprocess.Popen(['start', url], shell=True)

完成形

UDPで投げ続ける方。

最初は5秒おきに20回投げ、その後は30秒に1回投げ続けます。

#-------------------------------------------------------
import const
import sys
import time
import multiprocessing
#--------------------------------------
from hiraSockUDPC	import hiraSockUDPC		#	UDP client
#--------------------------------------
import hiraSetting	# only port number
#--------------------------------------
def thrower():
	for w in range(20):
		C = hiraSockUDPC(const.HIRA_USE_BROAD_ADDR,const.HIRA_USE_UDP_THROW_PORT)
		C.exec("FINRED_ENVIRONMENT")
		print("upto FINRED_ENVIRONMENT")
		time.sleep(5)
	while True:
		C = hiraSockUDPC(const.HIRA_USE_BROAD_ADDR,const.HIRA_USE_UDP_THROW_PORT)
		C.exec("FINRED_ENVIRONMENT")
		print("..upto FINRED_ENVIRONMENT")
		time.sleep(30)
#----------------------------------
if __name__ == '__main__':
	p = multiprocessing.Process(target = thrower)
	p.start()

受け取ってブラウザ開く方

受け取ったら、ブラウザを自動で立ち上げて、Pythonのプロセス自体は終了させます

#-------------------------------------------------------
import const
import os
import sys
import multiprocessing
import subprocess
#--------------------------------------
from hiraSockUDP	import hiraSockUDP		#	UDP server
#--------------------------------------
import hiraSetting	# only port number
#--------------------------------------
def udpRecv(adr,dat):
	print(adr)
	print(dat)
	if dat == b'FINRED_ENVIRONMENT':
		print("合致")
		url = "http://" + adr + ":" + str(const.HIRA_USE_HOME_HTTP_PORT) + "/"
		subprocess.Popen(['start', url], shell=True)
		sys.exit()

def udpRecvExec():
	U = hiraSockUDP(const.HIRA_USE_BROAD_ADDR,const.HIRA_USE_UDP_THROW_PORT)
	U.setFunc(udpRecv)
	U.exec()
#----------------------------------
if __name__ == '__main__':
	P = multiprocessing.Process(target = udpRecvExec)
	P.start()

まぁhiraSockUDPとかhiraSockUDPCとかは、たぶん過去ブログ参照^^;

コメントする

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