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

 找回密码
 立即注册
查看: 5058|回复: 31

[硬件DIY] 涂鸦红外遥控器刷ESPHome

[复制链接]

4

主题

55

帖子

1039

积分

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
984
HASS币
20
发表于 2023-2-16 14:01:04 | 显示全部楼层 |阅读模式
本帖最后由 David_dongye 于 2023-7-7 11:31 编辑

电信之前送过一个涂鸦红外遥控器,想接入HA,但是涂鸦自己的localtuya啥的试了,不行。又在github上发现了TUYA-CONVERT,可以把涂鸦设备(esp8266的)刷入tasmota,但是需要“一个有无线网卡的 Linux 设备”,感觉有点麻烦就没弄。
后面拆开直接刷了esphome,引脚定义参考官方文档https://developer.tuya.com/cn/do ... 8425498767728997246烧录用usb转ttl,接板子对应位置(板子上都标注好了的  ),刷的时候D0要接地
这个东西便宜的很,咸鱼上20多,如果只用红外的话,我感觉比博联的体验好(我路由器AC86U, 博联偶尔连不上)
我的涂鸦红外遥控器型号是UFO-R1,圆形黑色

esphome:
  name: tuya-ir

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "11"
ota:
  password: "11"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "tuya-ir"
    password: "111111111"
  manual_ip:
    static_ip: 192.168.50.**    #自己定义的地址
    gateway: 192.168.50.1       #网关
    subnet: 255.255.255.0   
  
captive_portal:
 
mqtt:
  broker: 192.168.50.**
  username: *****
  password: *****
  discovery: true
  
remote_receiver: 
  pin: 
    number: GPIO5
    inverted: True
    mode: INPUT_PULLUP
  dump: all
  on_nec:
    then:
    - script.execute: show_light
    - mqtt.publish:
        topic: tuya/recv/ir
        payload: !lambda |-
          char temp[20];
          sprintf(temp, "nec:%d:%d", x.address, x.command);
          ESP_LOGI("main", "nec: %s", temp);
          id(ir_recv_code).publish_state(temp);
          return temp;
  on_panasonic:
    then:
    - script.execute: show_light
    - mqtt.publish:
        topic: tuya/recv/ir
        payload: !lambda |-
          char temp[20];
          sprintf(temp, "panasonic:%d:%d", x.address, x.command);
          ESP_LOGI("main", "nec: %s", temp);
          id(ir_recv_code).publish_state(temp);
          return temp;          
  on_sony:
    then:
    - script.execute: show_light
    - mqtt.publish:
        topic: tuya/recv/ir
        payload: !lambda |-
          char temp[20];
          sprintf(temp, "sony:%d:%d", x.data, x.nbits);
          ESP_LOGI("main", "nec: %s", temp);
          id(ir_recv_code).publish_state(temp);
          return temp; 
  on_samsung:
    then:
    - script.execute: show_light
    - mqtt.publish:
        topic: tuya/recv/ir
        payload: !lambda |-
          char temp[20];
          sprintf(temp, "samsung:%d:%d", x.data, x.nbits);
          ESP_LOGI("main", "nec: %s", temp);
          id(ir_recv_code).publish_state(temp);
          return temp; 
  on_rc6:        
    then:
    - script.execute: show_light
    - mqtt.publish:
        topic: tuya/recv/ir
        payload: !lambda |-
          char temp[20];
          sprintf(temp, "rc6:%d:%d", x.address, x.command);
          ESP_LOGI("main", "nec: %s", temp);
          id(ir_recv_code).publish_state(temp);
          return temp; 
  on_rc5:        
    then:
    - script.execute: show_light
    - mqtt.publish:
        topic: tuya/recv/ir
        payload: !lambda |-
          char temp[20];
          sprintf(temp, "rc5:%d:%d", x.address, x.command);
          ESP_LOGI("main", "nec: %s", temp);
          id(ir_recv_code).publish_state(temp);
          return temp;

remote_transmitter:
  pin: GPIO14
  carrier_duty_percent: 50%

text_sensor:
  - platform: template
    id: ir_recv_code
    name: "IR recv code"
    update_interval: 3600s
  - platform: mqtt_subscribe
    name: "IR send code"
    topic: tuya/send/ir_nec
    on_value:
      then:
        remote_transmitter.transmit_nec:
          address: !lambda |-
            unsigned int addr;
            unsigned int command;
            sscanf(x.c_str(),"%d:%d",&addr,&command);
            return addr;
          command: !lambda |-
            unsigned int addr;
            unsigned int command;
            sscanf(x.c_str(),"%d:%d",&addr,&command);
            return command;
switch:
  - platform: gpio
    id: signal_light
    pin: GPIO4  #D4
    name: "signal_light"

script:
  - id: show_light
    then:
      - switch.turn_on:
          id: signal_light
      - delay: 0.1s
      - switch.turn_off:
          id: signal_light

web_server:
  port: 80
发送只加了一个nec编码格式的,如果红外是其他编码格式请自行添加哦

使用:

先用遥控器按下按钮,此时HA中的ir_recv_code会显示收到的码,将这个码记下来,用nodered的mqttout节点发给涂鸦遥控

Snipaste_2023-02-16_13-57-52.png Snipaste_2023-02-16_11-42-10.png


关于空调无法控制的问题,我参考了网上这篇博客https://weiyangbo.gitee.io/2022/03/06/ESPHome-IRomte/#%E7%BA%A2%E5%A4%96%E6%8E%A5%E6%94%B6%E4%B8%8E%E9%81%A5%E6%8E%A7%E5%99%A8%E5%AD%A6%E4%B9%A0

我的理解是空调的raw码(原始未处理的红外信号格式)比较长,在转换成NEC格式的时候有信息丢失了,我是用笨办法解决的:
首先代码中要改为返回raw码,在日志就会打印出接收到的原始红外码
dump: raw 
OTA升级了后,按下空调遥控器按键,在日志中就能看到原始红外码,即Recived Raw字段的内容,然后把这段码写死到代码中的code数组中就可以了
Snipaste_2023-07-07_11-17-47.png

我记录了开机、24~28摄氏度
Screenshot_20230707_111950.jpg

代码如下,不优雅了,只能将就用用
esphome:
  name: tuya-ir-121

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "123"
ota:
  password: "123"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "tuya-ir-121"
    password: "123456"
  manual_ip:
    static_ip: 192.168.50.121   #自己定义的地址
    gateway: 192.168.50.1       #网关
    subnet: 255.255.255.0   
  
captive_portal:
 
remote_receiver:
  pin: 
    number: GPIO5
    inverted: True
    mode: INPUT_PULLUP
  dump: raw
  idle: 40ms

remote_transmitter:
  pin: GPIO14
  carrier_duty_percent: 50%
 
button:
  - platform: template
    name: "Close"
    on_press:
      - script.execute: show_light
      - remote_transmitter.transmit_raw:
          carrier_frequency: 38kHz
          code: [8483, -4093,***此处省略,反正很长**** -545, 552]  #这个code改成自己识别到的raw码
  - platform: template
    name: "24℃"
    on_press:
      - script.execute: show_light
      - remote_transmitter.transmit_raw:
          carrier_frequency: 38kHz
          code: [8482, -4095,***此处省略,反正很长**** 547, -550, 547]  #这个code改成自己识别到的raw码
  - platform: template
    name: "25℃"
    on_press:
      - script.execute: show_light
      - remote_transmitter.transmit_raw:
          carrier_frequency: 38kHz
          code: [8487, -4090,***此处省略,反正很长****44, -552, 550]  #这个code改成自己识别到的raw码
  - platform: template
    name: "26℃"
    on_press:
      - script.execute: show_light
      - remote_transmitter.transmit_raw:
          carrier_frequency: 38kHz
          code: [8486, -4090, ***此处省略,反正很长****, -551, 548]  #这个code改成自己识别到的raw码
  - platform: template
    name: "27℃"
    on_press:
      - script.execute: show_light
      - remote_transmitter.transmit_raw:
          carrier_frequency: 38kHz
          code: [8488, -4090, ***此处省略,反正很长**** -551, 548]  #这个code改成自己识别到的raw码
  - platform: template
    name: "28℃"
    on_press:
      - script.execute: show_light
      - remote_transmitter.transmit_raw:
          carrier_frequency: 38kHz
          code: [8487, -4089***此处省略,反正很长****-550, 547]  #这个code改成自己识别到的raw码

switch:
  - platform: gpio
    id: signal_light
    pin: GPIO4  #D4
    name: "signal_light"

script:
  - id: show_light
    then:
      - switch.turn_on:
          id: signal_light
      - delay: 0.1s
      - switch.turn_off:
          id: signal_light

web_server:
  port: 80





评分

参与人数 5金钱 +56 HASS币 +10 收起 理由
summ99111 + 5
kifaawww + 1 以为是青铜,原来是王者!
sorrypqa + 10 膜拜大神!
+ 20 + 10 高手,这是高手!
dscao + 20 感谢楼主分享!

查看全部评分

回复

使用道具 举报

76

主题

1357

帖子

1万

积分

元老级技术达人

积分
18388
金钱
16991
HASS币
290
发表于 2023-2-16 14:50:15 | 显示全部楼层
本帖最后由 dscao 于 2023-2-16 22:57 编辑

什么都不懂时就买了一个,一直闲置着,好几年了。现在去拆开看看,也折腾一下。
怎么拆开呀,找了半天没看到螺丝。
难道又是卡扣+粘胶的?


暴力敲开了,卡扣基本全坏了。唉……

3.jpg

终于搞定,可以了。

1.jpg

2.jpg



回复

使用道具 举报

5

主题

67

帖子

427

积分

中级会员

Rank: 3Rank: 3

积分
427
金钱
360
HASS币
0
发表于 2023-2-16 14:56:23 | 显示全部楼层
真是物美价廉了
回复

使用道具 举报

7

主题

1072

帖子

3361

积分

论坛元老

Rank: 8Rank: 8

积分
3361
金钱
2289
HASS币
0
发表于 2023-2-16 15:45:13 | 显示全部楼层
正在鼓捣这个,涂鸦的比博联便宜,大佬就出了教程

大佬,请喝茶。
回复

使用道具 举报

4

主题

55

帖子

1039

积分

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
984
HASS币
20
 楼主| 发表于 2023-2-16 15:54:06 | 显示全部楼层
隔壁的王叔叔 发表于 2023-2-16 15:45
正在鼓捣这个,涂鸦的比博联便宜,大佬就出了教程

大佬,请喝茶。

在下可不是大佬,都是在论坛搜一搜东拼西凑出来的,论坛个个都是人才,说话又好听
回复

使用道具 举报

4

主题

55

帖子

1039

积分

金牌会员

Rank: 6Rank: 6

积分
1039
金钱
984
HASS币
20
 楼主| 发表于 2023-2-16 15:58:53 | 显示全部楼层
dscao 发表于 2023-2-16 14:50
什么都不懂时就买了一个,一直闲置着,好几年了。现在去拆开看看,也折腾一下。
怎么拆开呀,找了半天没看 ...

正常的,卡扣很紧,我也掰坏了
回复

使用道具 举报

0

主题

22

帖子

206

积分

中级会员

Rank: 3Rank: 3

积分
206
金钱
184
HASS币
0
发表于 2023-2-16 21:43:17 | 显示全部楼层
好东西啊
回复

使用道具 举报

2

主题

199

帖子

3373

积分

论坛元老

Rank: 8Rank: 8

积分
3373
金钱
3174
HASS币
0
发表于 2023-2-21 21:53:20 | 显示全部楼层
dscao 发表于 2023-2-16 14:50
什么都不懂时就买了一个,一直闲置着,好几年了。现在去拆开看看,也折腾一下。
怎么拆开呀,找了半天没看 ...

大佬,外壳上标注的具体啥型号呀?想去淘一个玩玩
回复

使用道具 举报

76

主题

1357

帖子

1万

积分

元老级技术达人

积分
18388
金钱
16991
HASS币
290
发表于 2023-2-21 22:11:31 | 显示全部楼层
本帖最后由 dscao 于 2023-2-22 00:07 编辑
yingzaiha 发表于 2023-2-21 21:53
大佬,外壳上标注的具体啥型号呀?想去淘一个玩玩

发现这个改成esphome确实好用,非常方便,也容易扩展。

自己闲置几年的是普通版的,前几天又淘了个联通版的,也是一样的,成功刷机。

另外看到大量电信版的二十元不到,但要买多个才包邮。第一次一是不敢买多了,二是实际上家里用有一两个也就足够了。

看楼主的说电信送的,应该就是电信版的吧。

型号我看看,私信给你吧。免得像那个插座一样一周时间不到就涨价很多。



回复

使用道具 举报

0

主题

562

帖子

2185

积分

金牌会员

Rank: 6Rank: 6

积分
2185
金钱
1623
HASS币
0
发表于 2023-2-22 09:06:21 | 显示全部楼层
这个遥控什么设备?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-28 14:24 , Processed in 0.061733 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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