01 前言
本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。
02 概述
在我开发的Modbus解析流程中,其实隐藏了一些小功能,后面会一一揭晓,今天就介绍其中的一个实用的功能:开关状态反转。
03 应用场景
场景一:继电器控制。我有一个Modbus继电器模块,主要控制一个设备的电源开启和关闭,但是这个设备基本上是长期通电的,只有在强制重启时才会关闭电源。但是我不希望继电器长期通电吸合,这样不利于继电器的寿命和功耗控制,但这个继电器模块有常开和常闭两个输出接口,于是我把电源串联在继电器的常闭端上,这样继电器模块平时不吸合电路也是接通的,如果需要断开打开继电器模块即可。
但是这样操作存在一个问题,正常情况下在HomeAssistant中反馈的状态开启状态实际电路是断开的,反之反馈的关闭状态电路则是导通的。这样在前端显示就不够直观,时间一长就忘记电路是打开还是关闭了,于是就需要用到状态反转的功能。即电路的导通和断开状态在前端显示一致。
场景二:燃气电磁阀状态。我并没有使用机械手控制燃气阀门,而是采用了12V电磁阀控制并与可燃气体探测器联动实现。控制器采用Modbus继电器模块,电磁阀关闭采用12V脉冲电压控制,为避免误操作并没有生成开关实体,而是通过自动化实现,但要监视和记录动作情况则需要把它定义为一个传感器,这时需要把电磁阀控制电源串联到继电器模块的常开接口,继电器未动作时需显示电磁阀状态未开启,动作时显示为关闭,但是继电器状态则和我需要显示的状态是相反的。
03 工作原理和实现
我在定义流程功能时对开关OP选项是这样定义的:OP: ["OFF", "ON"],OFF位置为索引值为0,ON位置索引值为1,在Modbus中通常使用0代表关闭,1代表开启。流程在处理开关状态时,就会根据以上定义发送对应的状态主题和Payload值,如何实现状态的反转呢?其实很简单,对调OFF和ON的位置即可,将OP值定义修改为:OP: ["ON", "OFF"],即可实现状态反转的功能。同理电磁阀状态显示可以这样定义: OP: ["打开", "关闭"]。
使用我开发的流程时朋友可以试试,小功能很实用,还没了解过流程的朋友可以通过以下链接快速访问: