GeekPad智慧屏编程控制(二)

前面已经实现了智慧屏开关的控制了,接下来再继续实现消息的订阅。

先如下图所示增加几个控件,一个按钮,2个文本框,其中右下角的文本框显示的内容会比较多,需要打开多行和右侧滚动条。

然后添加订阅消息的事件:

TestSubscribe();

订阅消息的事件函数:

public async Task TestSubscribe()
{
    // 订阅“/test”主题
    var rt = await client.SubscribeAsync("ECDA3B62A4CC/2/state", (e) =>
    {
        Returnmessage("收到ECDA3B62A4CC消息:\r\n" + "ECDA3B62A4CC/2/state/# =>" + e.Topic + ":" + e.Payload.ToStr()+"\r\n");
    }).ConfigureAwait(false);
    Returnmessage("成功订阅消息!\r\n");

}

因为不在UI线程/进程向文本框写入文本,所以需要添加委托:

delegate void ReturnmessageCallback(string msg);
public void Returnmessage(string msg)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new ReturnmessageCallback(Returnmessage), new object[] { msg });
    }
    else
    {
       textBox3.Text= textBox3.Text+msg;
    }
}

好了,下面来看下执行的结果:

首先,点击“启动MQTT服务"来启动MQTT服务器。

然后按”订阅消息“来订阅开关2的状态,注意订阅了以后并没有输出状态信息。

最后按”发布消息“来控制开关开关,开关状态发生变化时,订阅返回消息框中输出了开关的状态变化。

如果用XTrace.WriteLine来输出信息的话,log文件中也会收到对应的消息:

最后提醒一下,智慧屏开关的IP地址要设置为MQTT服务器的地址。

最后一个问题,有人可能会问:你怎么知道命令发布的主题是”homeassistant/ECDA3B62A4CC/2/set“而不是其他文本?

这个也简单,你把ClientId修改为”ECDA3B62A4CC“,然后再运行程序,log文件中就会输出GeekPad的各项信息了,具体参考下面的图片。

最后,谢谢新生命开发团队提供的NewLife.MQTT程序包。程序包地址链接:NuGet Gallery | NewLife.MQTT 2.0.2024.1212

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水滴与鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值