022_pymqtt - kotaproj/study_zenpan GitHub Wiki
https://qiita.com/ekzemplaro/items/14ab3b599a6785187f6f
https://qiita.com/ekzemplaro/items/ab90dd630c3ad8e819ab
import ui
import paho.mqtt.client as mqtt
#host = '192.168.11.33'
host = '172.20.10.9'
port = 1883
topic = "topic_1"
TOP_PREFIX = "monitor:"
COLOR_UI_BG = "#101010"
COLOR_UI_BTN_BG = "#1f1f1f"
COLOR_UI_BTN_BORDER = "#3f3f3f"
REMO_DICT = {
"call":
{
"visible": True,
"title": "call",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#012345678901
"0Soo|ooo|ooo",
"1ooE|ooo|ooo",
"2-----------",
"3ooo|ooo|ooo",
"4ooo|ooo|ooo",
"5-----------",
"6ooo|ooo|ooo",
"7ooo|ooo|ooo",
"8-----------",
"9ooo|ooo|ooo",
"0ooo|ooo|ooo",
"1-----------",
"2ooo|ooo|ooo",
"3ooo|ooo|ooo",
"4-----------",
"5-----------",
],
},
# "btn_1":
# {
# "visible": True,
# "title": "btn_1",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|Soo|ooo",
# "1ooo|ooE|ooo",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6ooo|ooo|ooo",
# "7ooo|ooo|ooo",
# "8-----------",
# "9ooo|ooo|ooo",
# "0ooo|ooo|ooo",
# "1-----------",
# "2ooo|ooo|ooo",
# "3ooo|ooo|ooo",
# "4-----------",
# "5-----------",
# ],
# },
# "btn_2":
# {
# "visible": True,
# "title": "btn_2",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|ooo|Soo",
# "1ooo|ooo|ooE",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6ooo|ooo|ooo",
# "7ooo|ooo|ooo",
# "8-----------",
# "9ooo|ooo|ooo",
# "0ooo|ooo|ooo",
# "1-----------",
# "2ooo|ooo|ooo",
# "3ooo|ooo|ooo",
# "4-----------",
# "5-----------",
# ],
# },
"menu":
{
"visible": True,
"title": "menu",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#012345678901
"0ooo|ooo|ooo",
"1ooo|ooo|ooo",
"2-----------",
"3Soo|ooo|ooo",
"4ooE|ooo|ooo",
"5-----------",
"6ooo|ooo|ooo",
"7ooo|ooo|ooo",
"8-----------",
"9ooo|ooo|ooo",
"0ooo|ooo|ooo",
"1-----------",
"2ooo|ooo|ooo",
"3ooo|ooo|ooo",
"4-----------",
"5-----------",
],
},
"ent":
{
"visible": True,
"title": "ent",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#012345678901
"0ooo|ooo|ooo",
"1ooo|ooo|ooo",
"2-----------",
"3ooo|Soo|ooo",
"4ooo|ooE|ooo",
"5-----------",
"6ooo|ooo|ooo",
"7ooo|ooo|ooo",
"8-----------",
"9ooo|ooo|ooo",
"0ooo|ooo|ooo",
"1-----------",
"2ooo|ooo|ooo",
"3ooo|ooo|ooo",
"4-----------",
"5-----------",
],
},
"esc":
{
"visible": True,
"title": "esc",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#012345678901
"0ooo|ooo|ooo",
"1ooo|ooo|ooo",
"2-----------",
"3ooo|ooo|Soo",
"4ooo|ooo|ooE",
"5-----------",
"6ooo|ooo|ooo",
"7ooo|ooo|ooo",
"8-----------",
"9ooo|ooo|ooo",
"0ooo|ooo|ooo",
"1-----------",
"2ooo|ooo|ooo",
"3ooo|ooo|ooo",
"4-----------",
"5-----------",
],
},
# "btn_6":
# {
# "visible": True,
# "title": "btn_6",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|ooo|ooo",
# "1ooo|ooo|ooo",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6Soo|ooo|ooo",
# "7ooE|ooo|ooo",
# "8-----------",
# "9ooo|ooo|ooo",
# "0ooo|ooo|ooo",
# "1-----------",
# "2ooo|ooo|ooo",
# "3ooo|ooo|ooo",
# "4-----------",
# "5-----------",
# ],
# },
# "btn_7":
# {
# "visible": True,
# "title": "btn_7",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|ooo|ooo",
# "1ooo|ooo|ooo",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6ooo|Soo|ooo",
# "7ooo|ooE|ooo",
# "8-----------",
# "9ooo|ooo|ooo",
# "0ooo|ooo|ooo",
# "1-----------",
# "2ooo|ooo|ooo",
# "3ooo|ooo|ooo",
# "4-----------",
# "5-----------",
# ],
# },
"up":
{
"visible": True,
"title": "up",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#012345678901
"0ooo|ooo|ooo",
"1ooo|ooo|ooo",
"2-----------",
"3ooo|ooo|ooo",
"4ooo|ooo|ooo",
"5-----------",
"6ooo|ooo|Soo",
"7ooo|ooo|ooE",
"8-----------",
"9ooo|ooo|ooo",
"0ooo|ooo|ooo",
"1-----------",
"2ooo|ooo|ooo",
"3ooo|ooo|ooo",
"4-----------",
"5-----------",
],
},
# "btn_9":
# {
# "visible": True,
# "title": "btn_9",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|ooo|ooo",
# "1ooo|ooo|ooo",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6ooo|ooo|ooo",
# "7ooo|ooo|ooo",
# "8-----------",
# "9Soo|ooo|ooo",
# "0ooE|ooo|ooo",
# "1-----------",
# "2ooo|ooo|ooo",
# "3ooo|ooo|ooo",
# "4-----------",
# "5-----------",
# ],
# },
# "btn_10":
# {
# "visible": True,
# "title": "btn_10",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|ooo|ooo",
# "1ooo|ooo|ooo",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6ooo|ooo|ooo",
# "7ooo|ooo|ooo",
# "8-----------",
# "9ooo|Soo|ooo",
# "0ooo|ooE|ooo",
# "1-----------",
# "2ooo|ooo|ooo",
# "3ooo|ooo|ooo",
# "4-----------",
# "5-----------",
# ],
# },
"down":
{
"visible": True,
"title": "down",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#012345678901
"0ooo|ooo|ooo",
"1ooo|ooo|ooo",
"2-----------",
"3ooo|ooo|ooo",
"4ooo|ooo|ooo",
"5-----------",
"6ooo|ooo|ooo",
"7ooo|ooo|ooo",
"8-----------",
"9ooo|ooo|Soo",
"0ooo|ooo|ooE",
"1-----------",
"2ooo|ooo|ooo",
"3ooo|ooo|ooo",
"4-----------",
"5-----------",
],
},
"mono":
{
"visible": True,
"title": "mono",
"background_color": COLOR_UI_BTN_BG,
"border_color": COLOR_UI_BTN_BORDER,
"page_0": [
#012345678901
"0ooo|ooo|ooo",
"1ooo|ooo|ooo",
"2-----------",
"3ooo|ooo|ooo",
"4ooo|ooo|ooo",
"5-----------",
"6ooo|ooo|ooo",
"7ooo|ooo|ooo",
"8-----------",
"9ooo|ooo|ooo",
"0ooo|ooo|ooo",
"1-----------",
"2Soo|ooo|ooo",
"3ooE|ooo|ooo",
"4-----------",
"5-----------",
],
},
# "btn_13":
# {
# "visible": True,
# "title": "btn_13",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|ooo|ooo",
# "1ooo|ooo|ooo",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6ooo|ooo|ooo",
# "7ooo|ooo|ooo",
# "8-----------",
# "9ooo|ooo|ooo",
# "0ooo|ooo|ooo",
# "1-----------",
# "2ooo|Soo|ooo",
# "3ooo|ooE|ooo",
# "4-----------",
# "5-----------",
# ],
# },
# "btn_14":
# {
# "visible": True,
# "title": "btn_14",
# "background_color": COLOR_UI_BTN_BG,
# "border_color": COLOR_UI_BTN_BORDER,
# "page_0": [
# #012345678901
# "0ooo|ooo|ooo",
# "1ooo|ooo|ooo",
# "2-----------",
# "3ooo|ooo|ooo",
# "4ooo|ooo|ooo",
# "5-----------",
# "6ooo|ooo|ooo",
# "7ooo|ooo|ooo",
# "8-----------",
# "9ooo|ooo|ooo",
# "0ooo|ooo|ooo",
# "1-----------",
# "2ooo|ooo|Soo",
# "3ooo|ooo|ooE",
# "4-----------",
# "5-----------",
# ],
# },
}
def publish_msg(topi, msg):
# print("publish_msg - run", msg)
client = mqtt.Client(protocol=mqtt.MQTTv311)
client.connect(host, port=port, keepalive=3)
client.publish(topi, msg)
client.disconnect()
return
def cal_point2frame(pnum, page, width, height):
find = False
x = y = -1
w = h = -1
phase = 0 # 0:find,x
for col, line in enumerate(page):
ref = line.find("S")
if ref != -1:
x = ref
y = col
ref = line.find("E")
if ref != -1:
w = ref - x + 1
h = col - y + 1
find = True
break
# 実座標への変換
w_unit = width / len(page[0])
h_unit = height / len(page)
return find, ((x*w_unit + pnum*width), y*h_unit, w*w_unit, h*h_unit)
# button action
def OnAction(sender):
# publish - topic1 , ios:btn_*
publish_msg(topic, (TOP_PREFIX + sender.name))
pass
vw = ui.View()
# vw.name = "Main"
vw.background_color = COLOR_UI_BG
w,h = ui.get_screen_size()
sv = ui.ScrollView()
sv.width = w
sv.height = h
sv.content_size = (1.0*w, 1.0*h)
sv.bg_color = COLOR_UI_BG
# buttons
count = 0
for bname in REMO_DICT:
propety = REMO_DICT[bname]
if False == propety["visible"]:
continue
button = ui.Button()
button.title = propety["title"]
button.name = bname
button.font = ("<System>", 14)
button.text_color = "white"
button.background_color = propety["background_color"]
button.border_color = propety["border_color"]
# button.frame = cal_point2frame(propety["point"], vw.width, vw.height)
for pnum in range(1):
find, button.frame = cal_point2frame(pnum, propety["page_"+str(pnum)], w, h)
if find:
break
button.border_width = 2
button.action = OnAction
# add ui
sv.add_subview(button)
# vw.add_subview(button)
vw.add_subview(sv)
# vw.present("sheet")
# vw.present("full_screen")
vw.present("panel")