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

 找回密码
 立即注册
查看: 11135|回复: 16

[技术探讨] 求救一下!简单的开关折腾我好久个晚上了。。实在是没.....

[复制链接]

8

主题

157

帖子

905

积分

高级会员

Rank: 4

积分
905
金钱
748
HASS币
0
发表于 2020-7-10 00:06:40 | 显示全部楼层 |阅读模式
switch:                           ##设备类型;
  - platform: gpio
    c     ##自定义名称,最好起关联的名称;
    id: relay       ##ID 为继电器开关;
    icon: "mdi:gate"
    pin:
      number: RX    ##ESP01/01S 是GPIO0脚;
      inverted: yes    ## inverted 参数,表示低电平有效,即继电器是低电平触发;
  - platform: template
    name: "RX_xn"
    icon: "mdi:fire"
    optimistic: true
简单的1个开关,代码如上。nodered用虚拟开关控制gpio口的开关,虚拟开关加了delay,会造成2个开关不同步。
想要要虚拟开关“name: "RX_xn"的状态和"name: "01s_rx" 状态保持一致,请问语句应该怎么写。谢谢帮忙!



GIF.gif
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

发表于 2020-7-10 08:20:21 | 显示全部楼层
本帖最后由 XCray 于 2020-7-10 09:05 编辑

你还在折腾同一件事情?
我很想帮你,在你第一个帖子里也告诉你方法了,奈何你没接收啊。
感觉你的思维方式倾向于把简单的事情复杂化,并且思路没理清楚、没有弄明白esphome的原理就按着自己的想像去实施。。。
发帖也总是缺少关键信息、或者语言过于简化让人看不明白你的目的到底是什么?你具体碰到的问题又是什么?

比如这个帖子,你贴出来的yaml语句,第三行就是一个字母c,这肯定是错的啊!你难道没看到编译时的错误提示?

你一边说加了delay会不同步,一边又想让两个状态保持一致,状态保持一致不就是同步吗?那你到底是想让它们同步还是不想让它们同步?

既然碰到了错误,日志贴出来更便于大家帮你分析,咋不贴出来呢?

~~~~~~~~~~~~~~~~~~~~
结合你之前发的两个帖子(你来这个论坛就发了这3个帖子是吧?),你最初的需求是:

有一个虚拟按钮、点一下就可以触发物理开关的状态转换。

你之前碰到了ESP-01的gpio0存在跳闪会导致继电器错误动作的问题,怕不安全,所以又买了用单片机接收串口指令再控制继电器的模块(开始我确实误会了,以为你说的单片机是esp01,但我在你第一个帖子里的回复完全可以解决你的需求)。

这就肯定不存在跳闪的问题了(就像你知道且说过的,新的模块不是电平触发的),既然没有跳闪问题也就不需要延迟了吧?最早建议延迟就是为了规避跳闪问题。

那么你最初说的需求就很容易满足了:
1、一个uart switch,看你第一个帖子发的yaml,基本上是正确的。删掉后面莫名其妙的binary_sensor就可以了。
编译、烧写、成功联网后在esphome dashboard和hass里就可以看到了
2、在node-red或者hass里,都可以调用这个开关的 toggle 服务,实现开/关状态转换。

评分

参与人数 1金钱 +20 收起 理由
neroxps + 20 值得表扬

查看全部评分

回复

使用道具 举报

8

主题

157

帖子

905

积分

高级会员

Rank: 4

积分
905
金钱
748
HASS币
0
 楼主| 发表于 2020-7-10 09:53:28 | 显示全部楼层
本帖最后由 hejie127 于 2020-7-10 09:56 编辑
XCray 发表于 2020-7-10 08:20
你还在折腾同一件事情?
我很想帮你,在你第一个帖子里也告诉你方法了,奈何你没接收啊。
感觉你的思维方式 ...

谢谢你的回复。先回答一下你的疑问。
  “第三行就是一个字母c”我的程序里面是没有的,论坛帖的时候才出现,不知道怎么回事。我的固件已经编译通过了的。
  “那你在别的地方定义RX对应数字几了”只是用rx口替代gpio0控制继电器,别的地方不用rx
  “delay”的事下面说
我的需求:用ESP-01s+继电器模块,固件用esphome+nodered+hass远程控制热水器。(热水器有交流接触器,不用考虑功率问题)

1、不纠结ESP-01s的gpio0跳闪的问题了,这个通过不用gpio0口,改用rx口,已经解决了。
      (通过单片机接收串口指令模块我买了,还没有用。gpio0跳闪是上电跳闪,加delay是解决不了的。)
2、 delay的目的:用手机控制热水器,怕小孩子反复乱点烧坏设备,所以想实现一个小功能,就是手机点击开/关之后,先判断与上次开/关的时间,如果小于10秒无效(延时),大于10秒再触发开关,这样。在10秒之内连续点击开关是不管用的。(开关只能10秒用一次,杜绝安全风险)
       (为了实现第2点,我通过一个虚拟开关(name: "RX_xn"),在node-red中通过判断(data.timeSinceChangedMs)来控制RX口的开关,已经实现想法了。 测试.gif
        (实现这一点之后,又引发了一个新问题,就是在hass中点击虚拟开关,10秒之内虚拟开关的状态是变化的,但是RX没变,导致2个开关状态不一致,所以我需要让虚拟开关的.state和rx口一致起来。就是虚拟开关的状态以rx开关(rx_id)为准。 例如:(论坛发帖,请忽略格式),
state:(rx_id) ;

这个语句我不会写,看官方也没看懂,完全靠猜,所以来问一下





回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-7-10 10:09:07 | 显示全部楼层
hejie127 发表于 2020-7-10 09:53
谢谢你的回复。先回答一下你的疑问。
  “第三行就是一个字母c”我的程序里面是没有的,论坛帖的时候才出 ...

学 esphome 最好还是多看例子。

https://github.com/Samuel-0-0/ph ... eassistant_api.yaml
Nero
回复

使用道具 举报

8

主题

157

帖子

905

积分

高级会员

Rank: 4

积分
905
金钱
748
HASS币
0
 楼主| 发表于 2020-7-10 10:45:41 | 显示全部楼层
neroxps 发表于 2020-7-10 10:09
学 esphome 最好还是多看例子。

https://github.com/Samuel-0-0/phicomm_dc1-esphome/blob/master/yaml/ ...

谢谢,我回去试一下这个语句
    on_turn_on:
      - switch.turn_on: LOGO_light
      - lambda: |-
          if (id(shadow1).state) {
            id(switch1).turn_on();
            id(shadow1).publish_state(false);
          }


目前我找范例的地方只有esphome.io,里面的程序都不是完整的,请问想学的话有系统一点的网站推荐吗?
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-7-10 10:50:22 | 显示全部楼层
hejie127 发表于 2020-7-10 10:45
谢谢,我回去试一下这个语句

没办法,我都是看例子看回来的,还有就是 lambda 的东西都是看源码才行~


https://github.com/smarthomefans/esphome-template

这里有几个我弄的 esphome 范例可以参考下。
Nero
回复

使用道具 举报

8

主题

157

帖子

905

积分

高级会员

Rank: 4

积分
905
金钱
748
HASS币
0
 楼主| 发表于 2020-7-10 10:56:58 | 显示全部楼层
本帖最后由 hejie127 于 2020-7-10 10:59 编辑
neroxps 发表于 2020-7-10 10:50
没办法,我都是看例子看回来的,还有就是 lambda 的东西都是看源码才行~

多谢!完整的例子去哪里找呢。?之前玩arduino,完整的资料很多,很容易就上手了。这个yaml找不到完整的例子,不知道该按什么格式来写,上手有点吃力
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-7-10 11:03:20 | 显示全部楼层
hejie127 发表于 2020-7-10 10:56
多谢!完整的例子去哪里找呢。?之前玩arduino,完整的资料很多,很容易就上手了。这个yaml找不到完整的例 ...

官网的救是完整文档,其实esphome.io 的文档还算全的,就是你要理解他配置的逻辑,不能用 arduino 思维去理解。如果你懂 arduino 也可以编译只会去临时文件夹去看下他编译出来的源码文件。这样你能够更加容易理解他的逻辑。
Nero
回复

使用道具 举报

8

主题

157

帖子

905

积分

高级会员

Rank: 4

积分
905
金钱
748
HASS币
0
 楼主| 发表于 2020-7-10 11:09:50 | 显示全部楼层
neroxps 发表于 2020-7-10 11:03
官网的救是完整文档,其实esphome.io 的文档还算全的,就是你要理解他配置的逻辑,不能用 arduino 思维去 ...

一下就说到关键点上了。目前就是没搞懂他的逻辑关系。

目前对写程序来说,我的思维逻辑就是上大学那会学的C语言。 后面用arduino,或者vba,包括按键精灵,都不困难,都能凑合解决实际问题。

你说的看源码,请问应该怎么看?
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-7-10 11:17:09 | 显示全部楼层
hejie127 发表于 2020-7-10 11:09
一下就说到关键点上了。目前就是没搞懂他的逻辑关系。

目前对写程序来说,我的思 ...

esphome 编译的时候会把 yaml 翻译成C++文件。我不知道你是怎么部署 esphome 的hassio 的话,会在 config里面有一个 esphome 文件夹的。
Nero
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-26 06:36 , Processed in 0.062299 second(s), 38 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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