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

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

[经验分享] 新版esphome 2023.12.3 编译DC1固件修改

[复制链接]

1

主题

18

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
金钱
299
HASS币
0
发表于 2024-1-17 17:44:37 | 显示全部楼层 |阅读模式
本帖最后由 hamlesme 于 2024-1-30 19:07 编辑

最近想更新下我几个dc1的esphome固件, 发现新版esphome编译过不了,看了下新版变化太多,加上platformio的更新, 即使用旧的esphome1.14也不能正常编译了.
看了下esphome现在的components里有另一个类似io芯片的代码, pca9554, 比较了cat9554和pca9554的datasheet, 都一样, 所以对照esphome pca9554页面改下yaml就行了.
要改的就是把cat9554全部替换成pca9554, 然后把#irq_pin: GPIO4注释掉就能编译了.
默认情况下的wifi led不能控制了, 看了下esphome文档,用status_led platform代替status_led component就可以,附件就不修改了, 帖子里代码修改过了.
wifi led之前是要inverted,之前没注意.yaml已改.


用几天后,发现有时候会出现dc1半死机状态, 需要断电后才正常,大家慎用,当然在yaml里加上如下代码也是可以实现定时重启的.

time:
  - platform: homeassistant
    on_time:
      - seconds: 0
        minutes: 0
        hours: 2
        days_of_week: MON-SUN
        then:
           - switch.toggle: restart_switch

switch:
  - platform: restart
    name: "Auto Restart"
    id: restart_switch



测试正常使用.完整的yaml如下.

esphome:
  name: $device_name
  platform: ESP8266
  board: esp01_1m
  esp8266_restore_from_flash: yes
#----------------------------------------------------
  build_path: build/$device_name
#----------------------------------------------------


substitutions:
  config_version: 'v2019.12.26.001'
  device_name: dc1-api
  wifi_fast_connect: 'false'
  wifi_reboot_timeout: 0s
  api_reboot_timeout: 0s
  cse7766_update_interval: 1s

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

  domain: .local
  reboot_timeout: $wifi_reboot_timeout
  power_save_mode: none
  fast_connect: $wifi_fast_connect
  #use_address: ota.local
  
  ap:
    ssid: $device_name
    password: "1234567890"
captive_portal:

api:
  reboot_timeout: $api_reboot_timeout
#----------------------------------------------------

ota:
  safe_mode: true
  password: !secret ota_password
#  port: 3286

web_server:
  port: 80
#  css_url: https://esphome.io/_static/webserver-v1.min.css
#  js_url: https://esphome.io/_static/webserver-v1.min.js
#----------------------------------------------------

i2c:
  sda: GPIO3
  scl: GPIO12
  scan: false
  #frequency: 20kHz

pca9554:
  id: pca9554_hub
  #address: 0x20
  #irq_pin: GPIO4

uart:
  rx_pin: GPIO13
  baud_rate: 4800

#debug:

logger:
  # NONE、ERROR、WARN、INFO、DEBUG、VERBOSE、VERY_VERBOSE
  level: INFO
  baud_rate: 0
#  hardware_uart: UART1

sensor:
  - platform: cse7766
    voltage:
      name: "${device_name} voltage"
    current:
      name: "${device_name} current"
    power:
      name: "${device_name} power"
    update_interval: $cse7766_update_interval
  - platform: uptime
    name: "${device_name} uptime"
  - platform: wifi_signal
    name: "${device_name} wifi_signal"

binary_sensor:
  - platform: status
    name: "${device_name} status"
    internal: false
  - platform: gpio
    name: "${device_name} key1"
    internal: true
    pin:
      pca9554: pca9554_hub
      # Use pin number 0
      number: 0
      mode: INPUT
    filters:
      - invert:
      - delayed_on: 50ms
      - delayed_off: 50ms
    on_click:
      - min_length: 50ms
        max_length: 500ms
        then:
          - switch.toggle: switch1
  - platform: gpio
    name: "${device_name} key2"
    internal: true
    pin:
      pca9554: pca9554_hub
      # Use pin number 1
      number: 1
      mode: INPUT
    filters:
      - invert:
      - delayed_on: 50ms
      - delayed_off: 50ms
    on_click:
      - min_length: 50ms
        max_length: 500ms
        then:
          - switch.toggle: switch2
  - platform: gpio
    name: "${device_name} key3"
    internal: true
    pin:
      pca9554: pca9554_hub
      # Use pin number 2
      number: 2
      mode: INPUT
    filters:
      - invert:
      - delayed_on: 50ms
      - delayed_off: 50ms
    on_click:
      - min_length: 50ms
        max_length: 500ms
        then:
          - switch.toggle: switch3
  - platform: gpio
    name: "${device_name} key0"
    id: key0
    internal: true
    pin:
      number: GPIO16
      mode: INPUT_PULLDOWN_16
    filters:
      - invert:
      - delayed_on: 50ms
      - delayed_off: 50ms
    on_click:
      - min_length: 50ms
        max_length: 500ms
        then:
          - switch.toggle: switch0
  - platform: template
    name: "shadow1"
    id: shadow1
    internal: true
  - platform: template
    name: "shadow2"
    id: shadow2
    internal: true
  - platform: template
    name: "shadow3"
    id: shadow3
    internal: true
    
#status_led:
#  pin: GPIO0

## choose only one between light status_led platform and status_led component
light:
  - platform: status_led
    name: "${device_name} wifi_light"
    pin:
      number: GPIO0
      inverted: true

text_sensor:
  - platform: template 
    name: "${device_name} Config Version"
    lambda: |-
      return {"${config_version}"};
  - platform: version
    name: "${device_name} esphome_version"
    icon: mdi:information-outline
  - platform: wifi_info
    ip_address:
      name: "${device_name} IP Address"
    ssid:
      name: "${device_name} Connected SSID"
#    bssid:
#      name: "${device_name} Connected BSSID"

output:
  - platform: gpio
    id: realy3
    setup_priority: 900
    pin:
      pca9554: pca9554_hub
      # Use pin number 4
      number: 4
      mode: OUTPUT
      inverted: false
  - platform: gpio
    id: realy2
    setup_priority: 900
    pin:
      pca9554: pca9554_hub
      # Use pin number 5
      number: 5
      mode: OUTPUT
      inverted: false
  - platform: gpio
    id: realy1
    setup_priority: 900
    pin:
      pca9554: pca9554_hub
      # Use pin number 6
      number: 6
      mode: OUTPUT
      inverted: false
  - platform: gpio
    id: realy0
    setup_priority: 900
    pin:
      pca9554: pca9554_hub
      # Use pin number 7
      number: 7
      mode: OUTPUT
      inverted: false

switch:
  - platform: output
    name: "${device_name} switch0"
    output: realy0
    id: switch0
    on_turn_on:
      - switch.turn_on: LOGO_light
      - lambda: |-
          if (id(shadow1).state) {
            id(switch1).turn_on();
            id(shadow1).publish_state(false);
          }
          if (id(shadow2).state) {
            id(switch2).turn_on();
            id(shadow2).publish_state(false);
          }
          if (id(shadow3).state) {
            id(switch3).turn_on();
            id(shadow3).publish_state(false);
          }
    on_turn_off:
      - switch.turn_off: LOGO_light
      - lambda: |-
          if (id(switch1).state) {
            id(switch1).turn_off();
            id(shadow1).publish_state(true);
          }
          if (id(switch2).state) {
            id(switch2).turn_off();
            id(shadow2).publish_state(true);
          }
          if (id(switch3).state) {
            id(switch3).turn_off();
            id(shadow3).publish_state(true);
          }
  - platform: output
    name: "${device_name} switch1"
    output: realy1
    id: switch1
    on_turn_on:
      - lambda: |-
          if (!id(switch0).state) {
            id(switch0).turn_on();
          }
  - platform: output
    name: "${device_name} switch2"
    output: realy2
    id: switch2
    on_turn_on:
      - lambda: |-
          if (!id(switch0).state) {
            id(switch0).turn_on();
          }
  - platform: output
    name: "${device_name} switch3"
    output: realy3
    id: switch3
    on_turn_on:
      - lambda: |-
          if (!id(switch0).state) {
            id(switch0).turn_on();
          }
  - platform: gpio
    pin: GPIO14
    name: "${device_name} LOGO_light"
    id: LOGO_light
    internal: false
    inverted: true




dc1_homeassistant_api_pca9554.zip

1.61 KB, 下载次数: 29

评分

参与人数 6金钱 +75 收起 理由
wfnydx + 5 高手,这是高手!
sss190 + 10 感谢楼主分享!
kkkkllll08 + 8 论坛有你更精彩!
whxciotw + 16 膜拜大神!
dscao + 20 感谢楼主分享!
sorrypqa + 16 大神666!

查看全部评分

回复

使用道具 举报

11

主题

184

帖子

1380

积分

金牌会员

Rank: 6Rank: 6

积分
1380
金钱
1196
HASS币
0
发表于 2024-1-17 19:12:04 | 显示全部楼层
沙发0.0
dc1_homeassistant_api_pca9554.zip
回复

使用道具 举报

0

主题

23

帖子

139

积分

注册会员

Rank: 2

积分
139
金钱
116
HASS币
0
发表于 2024-1-17 22:42:46 | 显示全部楼层
留个脚印。。。
回复

使用道具 举报

2

主题

342

帖子

2927

积分

金牌会员

Rank: 6Rank: 6

积分
2927
金钱
2585
HASS币
0
发表于 2024-1-18 08:16:06 | 显示全部楼层
终于有人出手了
回复

使用道具 举报

7

主题

125

帖子

620

积分

高级会员

Rank: 4

积分
620
金钱
490
HASS币
20
发表于 2024-1-18 15:13:44 | 显示全部楼层
收藏,这个刷完homeassitant里是不是可以自动发现使用了?
回复

使用道具 举报

39

主题

750

帖子

4709

积分

论坛元老

Freddy.

Rank: 8Rank: 8

积分
4709
金钱
3934
HASS币
0

最佳新人卓越贡献

发表于 2024-1-18 15:20:14 | 显示全部楼层
之前的固件能在线刷不。。。。
回复

使用道具 举报

33

主题

687

帖子

4387

积分

论坛元老

Rank: 8Rank: 8

积分
4387
金钱
3690
HASS币
50
发表于 2024-1-18 19:27:27 | 显示全部楼层
日志里有点错误,不过貌似控制正常,不管了

                               
登录/注册后可看大图
回复

使用道具 举报

5

主题

116

帖子

861

积分

高级会员

Rank: 4

积分
861
金钱
740
HASS币
0
发表于 2024-1-18 23:00:17 | 显示全部楼层
不错,有空试试看
回复

使用道具 举报

1

主题

18

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
金钱
299
HASS币
0
 楼主| 发表于 2024-1-18 23:05:19 | 显示全部楼层
南柯醉一梦丶 发表于 2024-1-18 15:20
之前的固件能在线刷不。。。。

应该可以,不过我之前2019编译的固件也备份了,不过当时是固定ip,刷别的dc1上麻烦点
回复

使用道具 举报

1

主题

18

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
金钱
299
HASS币
0
 楼主| 发表于 2024-1-18 23:06:49 | 显示全部楼层
huang7dede 发表于 2024-1-18 19:27
日志里有点错误,不过貌似控制正常,不管了

我的暂时只发现几个warning
22:50:10[W][cse7766:062]Invalid checksum from CSE7766: 0x1C != 0x12
22:50:18[W][cse7766:062]Invalid checksum from CSE7766: 0xA0 != 0x9B
22:50:23[W][cse7766:062]Invalid checksum from CSE7766: 0x95 != 0x4F

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-6 02:28 , Processed in 0.067781 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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