'''
@Author: Baron
@Date: 2020-04-24
@LastEditTime: 2020-04-24 17:06:08
@Description: example for module umqtt
@FilePath: example_mqtt_file.py
'''
from usr.umqtt import MQTTClient
# from umqtt import MQTTClient
import utime
import log
import checkNet
import dataCall
import ethernet

'''
下面两个全局变量是必须有的，用户可以根据自己的实际项目修改下面两个全局变量的值
'''
PROJECT_NAME = "QuecPython_MQTT_example"
PROJECT_VERSION = "1.0.0"

checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)

# 设置日志输出级别
log.basicConfig(level=log.INFO)
mqtt_log = log.getLogger("MQTT")


state = 0

def sub_cb(topic, msg):
    global state
    mqtt_log.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode()))
    state = 1


def mqtt_test():

    count = 0
        
    # 创建一个mqtt实例
    c = MQTTClient("mqttx_a74955fc", "5.111.222.333", 1844, reconn=False, keepalive =60 )
    # c = MQTTClient("umqtt_client", "mq.tongxinmao.com", 18830)
    # 设置消息回调
    c.set_callback(sub_cb)
    #建立连接
    c.connect()
    # 订阅主题
    c.subscribe(b"/public/TEST/quecpython")
    mqtt_log.info("Connected to mq.tongxinmao.com, subscribed to /public/TEST/quecpython topic" )
    # 发布消息
    c.publish(b"/public/TEST/quecpython", b"my name is Quecpython!")
    mqtt_log.info("Publish topic: /public/TEST/quecpython, msg: my name is Quecpython")

    while True:
        c.wait_msg()  # 阻塞函数，监听消息
        if count < 5:
            mqtt_log.info("count is %d", count)
            count += 1
        else:    
            break
    # 关闭连接
    mqtt_log.info("close connect")
    c.disconnect()


if __name__ == '__main__':

    # Get the 4G NIC information
    lte = dataCall.getInfo(1, 0)
    if lte[2][0] == 1:
        print('lte init success')
        print(lte[2][2])
        lte_defalut_nic = lte[2][2]

    # Initialize the Ethernet NIC. The Ethernet NIC will get a dynamic IP address through DHCP in WAN mode to connect to the network
    eth = ethernet.YT8512H(b'\x12\x34\x56\x78\x9a\xbc')
    eth.dhcp()
    eth.set_up()
    print('ethernet init success')

    # Set the Ethernet NIC as the default NIC
    eth_defalut_nic = eth.ipconfig()[1][1]
    print(eth_defalut_nic)


    ret = eth.set_default_NIC(lte_defalut_nic)
    print("eth_defalut_nic is", ret)

    mqtt_test()

    utime.sleep(10)

    ret = eth.set_default_NIC(eth_defalut_nic)
    print("eth_defalut_nic is", ret)


    stagecode, subcode = checknet.wait_network_connected()
    if stagecode == 3 and subcode == 1:
        mqtt_log.info('Network connection successful!')
        mqtt_test()

    else:
        mqtt_log.info('Network connection failed! stagecode = {}, subcode = {}'.format(stagecode, subcode))

