Brokly / ESPHome-Mercury230

Home Assistant, ESPhome и счетчик Меркурий 230 AR-01
GNU General Public License v3.0
14 stars 2 forks source link

Esp перестаёт читать показания со счетчика #10

Open OM-3kChcBjgFR2COfP opened 7 months ago

OM-3kChcBjgFR2COfP commented 7 months ago

Во время сборки и тестов устройство работало, на объекте при монтаже - не читает счетчик, перезагрузил все что можно - заработало. Сейчас после смены интервала опроса в прошивке и соответственно после прошивки везде state N\A и в логах:

[D][Mercury:205]: 0000355526: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000356028: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000356528: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000357029: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000415524: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000416024: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000416525: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000417026: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000475524: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000476025: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000476526: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000477027: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000535531: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000536031: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000536532: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000537033: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000595524: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000596024: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000596524: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000597025: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000655526: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000656026: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000656526: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000657027: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000715525: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000716025: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000716525: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000717026: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000775531: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000776032: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000776533: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000777035: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000835524: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000836024: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000836524: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000837025: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000895531: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000896031: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000896532: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000897033: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000955524: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000956024: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000956524: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000957025: [<=] 1C 08 16 21 (480E)

т.е. ничего не менялось, просто обновил прошивку, в прошивке просто поменял интервал опроса с 10s на 120s и показания не читаются

yaml:

substitutions:
  upper_devicename: Mercury-230
  location: В электрощите.

esphome:
  name: esp32-interrupt
  friendly_name: esp32-interrupt

esp32:
  board: esp32doit-devkit-v1
  framework:
    type: arduino

external_components:
  - source: 
      type: local
      path: my_components     
    components: [ energy_meter_mercury230 ]
    refresh: 0s

# Enable logging
logger:
  level: DEBUG
  baud_rate: 9600

# Enable Home Assistant API
api:
  encryption:
    key: "LyIQA2OjWekXDbrydpqY3YGrIkJFc7jdJd1d7BVVxMU="

ota:
  password: "09a9f4538c39d6a9cee6b033c9b5ea5b"

wifi:
  networks:
  ***

web_server:
  port: 80
  version: 1

uart:
  id: uart_bus
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 9600
  data_bits: 8
  parity: NONE
  stop_bits: 1

binary_sensor:
#статус устройства
  - platform: status
    name: ${upper_devicename} HA Connected

switch:
#свитч рестарта устройства
  - platform: restart
    name: ${upper_devicename} Restart SW
    id: restart_sw_id

sensor:
  - platform: energy_meter_mercury230
    name: ${upper_devicename}
    # не забываем подключить uart
    uart_id: uart_bus

    # период цикла опроса счетчика
    update_interval: 60s
    # адрес счетчика (не обязательный), если не указан будет попытка обнаружить его с использованием пароля
    use_address: 28
    # пароль УКАЗЫВАТЬ В КАВЫЧКАХ для подключения (не обязательный), в случае дефолтного можно не указывать
    password: "111111"
    # тип пароля HEX или ASCII
    pass_in_hex: true

    # Напряжение по трем фазам
    voltage_a:
      id: VoltA
      name: ${upper_devicename} Volts A
    voltage_b:
      id: VoltB
      name: ${upper_devicename} Volts B
    voltage_c:
      id: VoltC
      name: ${upper_devicename} Volts C
    # Токи
    current_summ:
      id: Amps
      name: ${upper_devicename} Ampers Summ
    current_a:
      id: AmpA
      name: ${upper_devicename} Ampers A
    current_b:
      id: AmpB
      name: ${upper_devicename} Ampers B
    current_c:
      id: AmpC
      name: ${upper_devicename} Ampers C
    # Мощности
    power_summ:    
      id: Watts
      name: ${upper_devicename} Watts Summ
    power_a:
      id: WattA
      name: ${upper_devicename} Watts A
    power_b:
      id: WattB
      name: ${upper_devicename} Watts B
    power_c:
      id: WattC
      name: ${upper_devicename} Watts C

text_sensor:
#версия прошивки
  - platform: version
    name: $upper_devicename ESPHome Version

UPD: съездил на объект, потанцевал с бубном, перезагрузка счетчика и еспешки - безуспешно, а вот отключил-включил линию RS при работающих ESP и счётчике - заработало, пока ехал обратно - опять N\A в значениях, опрос не идёт, в чём тут дело?

Лог:

[C][Mercury:240]: Values Active+  'Mercury-230 Value Active'
[C][Mercury:240]:   Device Class: 'energy'
[C][Mercury:240]:   State Class: 'total_increasing'
[C][Mercury:240]:   Unit of Measurement: 'kWh'
[C][Mercury:240]:   Accuracy Decimals: 2
[C][Mercury:241]: Values Reactive+  'Mercury-230 Value Reactive'
[C][Mercury:241]:   Device Class: 'energy'
[C][Mercury:241]:   State Class: 'total_increasing'
[C][Mercury:241]:   Unit of Measurement: 'kWh'
[C][Mercury:241]:   Accuracy Decimals: 2
[C][Mercury:241]:   Accuracy Decimals: 2
[C][Mercury:243]: Serial Number  'Mercury-230 Serial Number'
[C][Mercury:243]:   Icon: 'mdi:numeric'
[C][Mercury:243]:   Icon: 'mdi:numeric'
[C][Mercury:249]: Device address: 28
[D][This:128]: Password for send: 1,1,1,1,1,1
[C][Mercury:262]: Password in HEX
[C][:266]: Password for send: 1,1,1,1,1,1
[C][version.text_sensor:021]: Version Text Sensor 'Mercury-230 ESPHome Version'
[C][version.text_sensor:021]:   Icon: 'mdi:new-box'
[C][web_server:168]: Web Server:
[C][web_server:169]:   Address: esp32-interrupt.local:80
[C][mdns:115]: mDNS:
[C][mdns:116]:   Hostname: esp32-interrupt
[C][ota:097]: Over-The-Air Updates:
[C][ota:098]:   Address: esp32-interrupt.local:3232
[C][ota:101]:   Using Password.
[C][ota:101]:   Using Password.
[C][api:139]: API Server:
[C][api:140]:   Address: esp32-interrupt.local:6053
[C][api:142]:   Using noise encryption: YES
[C][api:142]:   Using noise encryption: YES
[D][Mercury:205]: 0000175410: [<=] 1C 00 (0970)
[D][This:128]: Password for send: 1,1,1,1,1,1
[D][Mercury:205]: 0000175917: [<=] 1C 01 01 01 01 01 01 01 01 (EF41)
[W][component:214]: Component energy_meter_mercury230.sensor took a long time for an operation (0.13 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][Mercury:205]: 0000176420: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000176922: [<=] 1C 05 00 00 (17B5)
[D][Mercury:205]: 0000177424: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000177926: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000178427: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000178930: [<=] 1C 08 16 40 (89E6)
[I][ota:117]: Boot seems successful, resetting boot loop counter.
[D][esp32.preferences:114]: Saving 1 preferences to flash...
[D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[W][component:214]: Component ota took a long time for an operation (0.14 s).
[W][component:215]: Components should block for at most 20-30ms.
[D][Mercury:205]: 0000355409: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000355912: [<=] 1C 05 00 00 (17B5)
[D][Mercury:205]: 0000356415: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000356917: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000357419: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000357921: [<=] 1C 08 16 40 (89E6)
Brokly commented 7 months ago

Какая используется есп, какой can адаптер, какой блок питания, правильно ли введен пароль ? Все эти факторы и еще уйма других могут быть причиной описанной вами ситуации. Если счетчик тот же самый , который вы использовали во время тестов - внимательно проверьте подключения.

OM-3kChcBjgFR2COfP commented 7 months ago

Спасибо за ответ, счетчик и плата те же, просто спустя некоторое время опрос перестаёт идти, чуть позже дополню ответ

Brokly commented 7 months ago

Спасибо за ответ, счетчик и плата те же, просто спустя некоторое время опрос перестаёт идти, чуть позже дополню ответ

А если перегрузить есп, обмен восстанавливается ? Я думаю, что проходит слишком большой промежуток времени, который обязывает ввести пароль вновь. Если эта гипотеза подтвердится, то попробую допилить код.

Хочу обратить особое внимание на адаптер шины RS485. Если у вас простейший адаптер, то велика вероятность, что проблема в нем. Вот такой модуль точно не подходит: image Нормально будут работать такие модули: image image

OM-3kChcBjgFR2COfP commented 7 months ago

Спасибо за ответ и поддержку, модуль RS как на 2й картинке, плата которая опрашивает - ESP32WROOM, перед отправкой в полевые условия счетчик+модуль+плата лежали день/два на столе и работали, затем перед отправкой еще раз все проверил, все было ок.

Еще из изменений: счетчик стал ругаться на своем дисплее на слабую батарейку постоянной памяти, ошибка Е-01.

По поводу перезагрузки ЕСП, первым делом ребутнул есп - не помогло, ребутнул счетчик - не помогло. Есть подозрение, что помогает скинуть провода от шины RS при работающих счетчике и есп, затем подключить обратно на клеммы счетчика, после этого обмен начинается сам. Вот сейчас лог:

[I][ota:117]: Boot seems successful, resetting boot loop counter.
[D][esp32.preferences:114]: Saving 1 preferences to flash...
[D][esp32.preferences:114]: Saving 1 preferences to flash...
[D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
[D][Mercury:205]: 0000355053: [<=] 1C 08 01 (7606)
[D][Mercury:205]: 0000355556: [<=] 1C 05 00 00 (17B5)
[D][Mercury:205]: 0000356059: [<=] 1C 08 16 00 (8816)
[D][Mercury:205]: 0000356561: [<=] 1C 08 16 11 (481A)
[D][Mercury:205]: 0000357062: [<=] 1C 08 16 21 (480E)
[D][Mercury:205]: 0000357563: [<=] 1C 08 16 40 (89E6)

не могу найти полный мануал, что значат данные из лога? Это еспеха отправляет или счетчик что-то отвечает

Brokly commented 7 months ago

Какой у вас модуль RS485 ? Какой мануал вы ищите ? Данные лога говорят о том, что есп пытается опросить счетчик, он не отвечает.

OM-3kChcBjgFR2COfP commented 6 months ago

Какой у вас модуль RS485 ? Какой мануал вы ищите ? Данные лога говорят о том, что есп пытается опросить счетчик, он не отвечает.

Модуль как у вас на 2й картинке, как писал выше, мануал ищу на регистры меркурия, думал временно опрашивать с другого устройства С даты первого вопроса в принципе ничего не изменилось, к сожалению, буду снимать счетчик с еспешкой и разбираться

Brokly commented 6 months ago

Я полагаю, что это проблема в подключении или в модуле RS485, а не в прошивке. Поэтому могу помочь только советом.

Тут можно взять руководство по подключению https://www.incotexcom.ru/support/pasport , https://incotex-counter.ru/res/doc/other/blogger/m230/merkuriy-230-avlg-411152-021-re-izm-11-ot-2022-10-07.pdf Тут можно увидеть протокол https://www.incotexcom.ru/support/docs/protocol