『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 9820|回复: 15

mqtt长时间未收到上报,如何置设备状态为不可用

[复制链接]

22

主题

139

帖子

806

积分

高级会员

Rank: 4

积分
806
金钱
667
HASS币
0
发表于 2021-1-4 12:48:59 | 显示全部楼层 |阅读模式
本帖最后由 sundat 于 2021-1-6 09:36 编辑

之前在PVE中,用脚本获取CPU温度然后通用MQTT上报,但在温度停止上报后,HA中一直显示最后一次上报时的温度,只要不重启HA 就会一直这样显示。有没有办法在自动脚本中设置一定时间未收到上报就把设备显示为不可能。谢谢各位大佬!!



说下这两天的研究:
传感器:MQTT的传感器 设置个expire_after,就可以在掉线改 改变状态为不可用。
开关:开关比传感器麻烦,感应这就是个设计BUG 为什么不能像传感器一样用收没收到上报来确定设备是否在线呢?说说方法:
用的是  MQTT 遗嘱消息(Will Message)客户端发送一个 available,这个值是服务端和端户端约定的,比如发送 available为1表示在线。HA开关配置中加入应该就OK了
    availability_topic: "device/test/test/availability"
    payload_available: '1'
    payload_not_available: '0'

回复

使用道具 举报

23

主题

1338

帖子

6757

积分

超级版主

Rank: 8Rank: 8

积分
6757
金钱
5394
HASS币
100

教程狂人

发表于 2021-1-4 13:10:24 | 显示全部楼层
设置available属性
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24349
金钱
22918
HASS币
290
发表于 2021-1-4 14:49:56 | 显示全部楼层
有没有帖子分享一下PVE 如何安装mqtt上报及设置属性的教程?
回复

使用道具 举报

22

主题

139

帖子

806

积分

高级会员

Rank: 4

积分
806
金钱
667
HASS币
0
 楼主| 发表于 2021-1-4 15:18:21 | 显示全部楼层
dscao 发表于 2021-1-4 14:49
有没有帖子分享一下PVE 如何安装mqtt上报及设置属性的教程?
    # 服务器地址
    host = '192.168.66.250'
    # 通信端口
    port = 1883
    username = '123'
    password = '123'

    # 发送的主题
    topic = 'emi/cpu/cputemp'
    def send_message():
#        push_data = cputemp
        push_data = {
            "cputemp":cputemp,
            "data": {
                'test': 'data'
            }}
        # 发送一次消息后断开连接
        publish.single(topic=topic, payload=json.dumps(push_data), qos=1, client_id=str(math.floor(time.time())),
                                   auth={"username": username, "password": password}, hostname=host, retain=False)

    if __name__ == '__main__':
        send_message()
就是这样搞个循环不停的发就行了
回复

使用道具 举报

22

主题

139

帖子

806

积分

高级会员

Rank: 4

积分
806
金钱
667
HASS币
0
 楼主| 发表于 2021-1-4 15:19:24 | 显示全部楼层
natic 发表于 2021-1-4 13:10
设置available属性

能不能搞个示例呀,我搜索了半天 发现可能和Will Message 有关,但实在没搞明白怎么使用。。。。
回复

使用道具 举报

23

主题

1338

帖子

6757

积分

超级版主

Rank: 8Rank: 8

积分
6757
金钱
5394
HASS币
100

教程狂人

发表于 2021-1-4 15:44:44 | 显示全部楼层
sundat 发表于 2021-1-4 15:19
能不能搞个示例呀,我搜索了半天 发现可能和Will Message 有关,但实在没搞明白怎么使用。。。。 ...

https://www.home-assistant.io/integrations/sensor.mqtt/
回复

使用道具 举报

22

主题

139

帖子

806

积分

高级会员

Rank: 4

积分
806
金钱
667
HASS币
0
 楼主| 发表于 2021-1-4 16:18:25 | 显示全部楼层
本帖最后由 sundat 于 2021-1-4 16:22 编辑

谢谢,搞定了,只要加入  expire_after: "180"  即3分钟收不到上报信息 即会被标注为"不可用"
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24349
金钱
22918
HASS币
290
发表于 2021-1-4 22:32:17 | 显示全部楼层
sundat 发表于 2021-1-4 15:18
就是这样搞个循环不停的发就行了

谢谢,原理明白了,不过还是不会操作。PVE是否需要安装python环境,还是pve已经自带了?这个脚本放哪儿,通过什么命令让它执行或启动后执行。这些都不知道,google了一下也没看到比较合适的内容。
回复

使用道具 举报

22

主题

139

帖子

806

积分

高级会员

Rank: 4

积分
806
金钱
667
HASS币
0
 楼主| 发表于 2021-1-4 23:16:04 | 显示全部楼层
dscao 发表于 2021-1-4 22:32
谢谢,原理明白了,不过还是不会操作。PVE是否需要安装python环境,还是pve已经自带了?这个脚本放哪儿, ...

PVE的系统就是个Debian,装上Python就行了,我发的就是个py发送MQTT的代码
回复

使用道具 举报

22

主题

139

帖子

806

积分

高级会员

Rank: 4

积分
806
金钱
667
HASS币
0
 楼主| 发表于 2021-1-4 23:17:40 | 显示全部楼层
natic 发表于 2021-1-4 15:44
https://www.home-assistant.io/integrations/sensor.mqtt/

expire_after: "180"  这样的方式只对传感器有用,开关还是没用,不知有啥方法能让开关也实现这样的效果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-26 20:51 , Processed in 0.593556 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表