022_pymqtt - kotaproj/study_zenpan GitHub Wiki

paho-mqtt

https://qiita.com/ekzemplaro/items/14ab3b599a6785187f6f

broker

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")

⚠️ **GitHub.com Fallback** ⚠️