andvikt / mega_hacs

MegaD HomeAssistant integration
130 stars 17 forks source link

SHT31. #72

Closed andvikt closed 11 months ago

andvikt commented 2 years ago

Настроил интеграцию, не работает датчик температуры SHT31. В меге данные есть, в интеграции по одному датчику показывает все время температуру 130. По второму по нулям.

__Originally posted by @ruslantag in https://github.com/andvikt/mega_hacs/issues/67#issuecomment-955596887__

andvikt commented 2 years ago

Исправил в v1.1.1b0

ruslantag commented 2 years ago

обновления в HACS пока еще не появились, жду

andvikt commented 2 years ago

обновления в HACS пока еще не появились, жду

Ничего ждать не нужно. Нужно в списке интеграций меню hacs найти мою интеграцию, нажать кнопку с тремя точками, нажать обновить информацию, затем нажать переустановить и поставить галку показывать бета-версии.

ruslantag commented 2 years ago

обновил состояние unknown, интеграцию и мегу перезагружал. теперь и влажность не показывает, до обновления влажность отображалась

andvikt commented 2 years ago

Ясно, значит не получилось. Сложно без устройства что-то добавлять новое, откатывайтесь. Но у вас точно в логе должны быть ошибки-напишите сюда

ruslantag commented 2 years ago

может Андрей как-то сможет помочь?

andvikt commented 2 years ago

может Андрей как-то сможет помочь?

Не думаю. Вы лог-то пришлете?

andvikt commented 2 years ago

Еще один момент-нажмите в настройках порта с вашим датчиком кнопку scan, это на меге и пришлите сюда исходный html-код страницы, так я смогу хотя бы симитировать ваше устройство в своих тестах

ruslantag commented 2 years ago
Переносить строки --   | Back
0x44 - SHT31/PCA9685/OPT3001
ruslantag commented 2 years ago

может Андрей как-то сможет помочь?

Не думаю. Вы лог-то пришлете?

Эта ошибка возникла в кастомной интеграции.

Logger: custom_components.mega.mega1 Source: custom_components/mega/hub.py:312 Integration: mega (documentation, issues) First occurred: 20:55:36 (1 occurrences) Last logged: 20:55:36

timeout while requesting http://192.168.1.210/sec/?pt=9&cmd=scan

andvikt commented 2 years ago

у вас сохраняется эта проблема? просто по присланной ошибке - это никак не связано с SHT31 - тут у вас таймаут на сканирование порта 9 и таймауты по опыту предыдущих пользователей - это неполадки в сетевом оборудовании, те либо кабель, либо роутер/свич.

ruslantag commented 2 years ago

проблема осталась, данный датчик пока напрямую подключил через command_line. С сетью проблем не наблюдаю, остальные датчики работают нормально, есть датчик DHT22 работает через интеграцию. SHT31 нормально передает значения влажности, через модуль

andvikt commented 2 years ago

проблема осталась, данный датчик пока напрямую подключил через command_line.

С сетью проблем не наблюдаю, остальные датчики работают нормально, есть датчик DHT22 работает через интеграцию.

SHT31 нормально передает значения влажности, через модуль

Мистика )

abcdeyka commented 2 years ago

После установки беты2 и обновления портов показывает нормально температура и влажность, но на след получении значений через 30 сек температура становится 130... Влажность в порядке

abcdeyka commented 2 years ago

На 1.1.1 все также иногда показывает нормальную температуру, а более 90% времени показывает 130 градусов. У меня таких датчиков 4 шт. Надо что то с ними сделать...

http://192.168.1.16/sec/?pt=39&scl=44&i2c_dev=sht31&i2c_par=1
andvikt commented 2 years ago

Проблема не в интеграции, а в датчиках. Вы можете использовать filter_high, чтобы игнорировать эти "мусорные" значения

andvikt commented 2 years ago

Но желательно добиться стабильности. И тут несколько вариантов причин неисправности ваших датчиков: слишком частое обновление, плохое соединение, плохое питание. Если это датчик в составе "универсального датчика", обратитесь к ермакову на форуме, он вам его по идее заменит ) мне менял, датчик действительно был неисправен то ли с завода, то ли в процессе монтажа на плату.

abcdeyka commented 2 years ago

Через непосредственно адрес Меги значения есть. Все отлично работает temp:20.28/hum:57.74 Type I2C Mode SDA SCL 44 Cat Temp/Hum Dev SHT31 I2C Scan Даже после обновления портов первый раз показывают нормальные значение, но стоит только обновиться автоматом порты через 30сек и все.

andvikt commented 2 years ago

сделал маленькую правку, версия 1.1.2b0 (нужно включить беты), возможно проблема в слишком быстром переходе от чтения температуры к чтению влажности (сейчас там стояло полсекунды, увеличил до полутора секунд). Попробуйте эту версию

abcdeyka commented 2 years ago

После манипуляций вроде бы заработало. 'sht31': [ DeviceType(DEVICE_CLASS_HUMIDITY, PERCENTAGE, None, delay=0.5), DeviceType(DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None, delay=1), ],

https://ab-log.ru/smart-house/ethernet/megad-2561 на сайте меги Андрей писал

 # Отображение влажности (SHT31/SHT85)
http://192.168.0.14/sec/?pt=35&scl=34&i2c_dev=sht31
# Отображение температуры (SHT31) (Между отдельными запросами температуры и влажности должно быть не менее 0,1 сек.)
http://192.168.0.14/sec/?pt=35&scl=34&i2c_dev=sht31&i2c_par=1
# Инициализация датчика (в том случае, если в Dev выбрано другое устройство)
http://192.168.0.14/sec/?pt=35&scl=34&i2c_dev=sht31&i2c_par=9
abcdeyka commented 2 years ago

Теперь данные по датчикам не обновляються... mega1_38_sht31_temperature 7 минут назад 22,39 °C

andvikt commented 2 years ago

я понял.

# Инициализация датчика (в том случае, если в Dev выбрано другое устройство)
http://192.168.0.14/sec/?pt=35&scl=34&i2c_dev=sht31&i2c_par=9

Эту часть я не делаю вообще.

abcdeyka commented 2 years ago

почему-то перестали обновляться даные из sht31 после добавления delay=0.5 в оба параметра....

UA-Caspar commented 2 years ago

Так же само обновился до последней беты, ничего не изменилось. Стоит 3 одинаковых датчика SHT31 но только на одном до ХА не доходит влажность. Если нужно какие-то логи скинуть, все предоставлю. настройки на меге стандартные

UA-Caspar commented 2 years ago

Так же по поводу отсечения ложных значений. Почему-то это работает только на 2 датчиках, на третьем график выглядит вот так Screenshot_14 Screenshot_13

Скрины из 38 датчика Настройки в ХА: 38: filter_low: 10 filter_high: 80

40: filter_low: 10 filter_high: 70

42: filter_low: 10 filter_high: 70

abcdeyka commented 2 years ago

Временно поборол тем что удалил опрос температуры и задержку с вашей интеграции по датчикам sht31(4 шт) И отдельно добавил сенсоры температуры по типу такого: ` - platform: rest

name: Гостиная температура

unit_of_measurement: '°C'

device_class: temperature

resource: http://192.168.1.16/sec/?pt=38&scl=44&i2c_dev=sht31&i2c_par=1

` думаю если разнести опрос датчиков sht31 на 2 части тоесть сначала опрос всех на влажность, потом опрос на температуру, то проблемма исчезнет.

andvikt commented 11 months ago

должно работать в v1.1.8b8, просьба проверить

abcdeyka commented 11 months ago

Отвалились все датчики... 22222

andvikt commented 11 months ago

извиняюсь, просьба откатиться на предыдущую версию, завтра поправлю

abcdeyka commented 11 months ago

так и делаю.

andvikt commented 11 months ago

так и делаю.

вроде поправил в v1.1.8b9

abcdeyka commented 11 months ago

Logger: custom_components.mega.mega1 Source: helpers/update_coordinator.py:290 Integration: mega (documentation, issues) First occurred: 22:25:41 (4 occurrences) Last logged: 22:26:44

Unexpected error fetching megad data: unsupported operand type(s) for |=: 'set' and 'str' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 290, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 246, in _async_update_data return await self.update_method() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 265, in poll ret = await self._update_i2c(x) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 507, in _update_i2c self.sht31inited |= pt TypeError: unsupported operand type(s) for |=: 'set' and 'str'

andvikt commented 11 months ago

Logger: custom_components.mega.mega1 Source: helpers/update_coordinator.py:290 Integration: mega (documentation, issues) First occurred: 22:25:41 (4 occurrences) Last logged: 22:26:44

Unexpected error fetching megad data: unsupported operand type(s) for |=: 'set' and 'str' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 290, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 246, in _async_update_data return await self.update_method() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 265, in poll ret = await self._update_i2c(x) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 507, in _update_i2c self.sht31inited |= pt TypeError: unsupported operand type(s) for |=: 'set' and 'str'

спасибо за терпение ) v1.1.8b10

abcdeyka commented 11 months ago

Эта ошибка возникла в пользовательской интеграции. Logger: custom_components.mega.mega1 Source: helpers/update_coordinator.py:290 Integration: mega (documentation, issues) First occurred: 23:11:50 (1 occurrences) Last logged: 23:11:50

Unexpected error fetching megad data: unsupported operand type(s) for |=: 'set' and 'str' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 290, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 246, in _async_update_data return await self.update_method() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 265, in poll ret = await self._update_i2c(x) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 507, in _update_i2c self.sht31inited |= pt TypeError: unsupported operand type(s) for |=: 'set' and 'str'

andvikt commented 11 months ago

Эта ошибка возникла в пользовательской интеграции. Logger: custom_components.mega.mega1 Source: helpers/update_coordinator.py:290 Integration: mega (documentation, issues) First occurred: 23:11:50 (1 occurrences) Last logged: 23:11:50

Unexpected error fetching megad data: unsupported operand type(s) for |=: 'set' and 'str' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 290, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 246, in _async_update_data return await self.update_method() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 265, in poll ret = await self._update_i2c(x) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/mega/hub.py", line 507, in _update_i2c self.sht31inited |= pt TypeError: unsupported operand type(s) for |=: 'set' and 'str'

Кажется вы не обновились на v1.1.8b10, в этой версии нет этой строчки кода

abcdeyka commented 11 months ago

там кроме ht31 еше и b280 отваливаеться....замена " на ' может виной?

andvikt commented 11 months ago

там кроме ht31 еше и b280 отваливаеться....замена " на ' может виной?

Не понял о чем вы. Лог пожалуйста ) а виной тому кодинг вслепую без возможности потестить что получилось )

abcdeyka commented 11 months ago

Обновил, вот журнал там датчики sht31 так же как и ранее отображают 130 градусов. пользовался все время тем что ужалял температуру из меги и вручную эти датчики опрашивал через скрипт типа

- platform: rest
  name: Гостиная температура
  unit_of_measurement: '°C'
  device_class: temperature
  resource: http://192.168.1.16/sec/?pt=38&scl=44&i2c_dev=sht31&i2c_par=1
    "sht31": [
        DeviceType(SensorDeviceClass.HUMIDITY, PERCENTAGE, None),

    ],

и тогда проблем небыло с этими датчиками(они висят 5 шт на 1 mega) + bmx280 home-assistant_2023-10-15T20-53-43.627Z.log

andvikt commented 11 months ago

Обновил, вот журнал там датчики sht31 так же как и ранее отображают 130 градусов. пользовался все время тем что ужалял температуру из меги и вручную эти датчики опрашивал через скрипт типа

- platform: rest
  name: Гостиная температура
  unit_of_measurement: '°C'
  device_class: temperature
  resource: http://192.168.1.16/sec/?pt=38&scl=44&i2c_dev=sht31&i2c_par=1
    "sht31": [
        DeviceType(SensorDeviceClass.HUMIDITY, PERCENTAGE, None),

    ],

и тогда проблем небыло с этими датчиками(они висят 5 шт на 1 mega) + bmx280 home-assistant_2023-10-15T20-53-43.627Z.log

нашел проблему, одна строчка кода все портила, параметр задержки между запросами по факту не учитывался.

пробуйте v1.1.8b12

только по вашему логу я не вижу что b280 отваливается:

2023-10-15 23:49:30.454 DEBUG (MainThread) [custom_components.mega.mega1] i2c response: {(('pt', '43'), ('scl', '44'), ('i2c_dev', 'bmx280')): '742.65'}
2023-10-15 23:49:30.454 DEBUG (MainThread) [custom_components.mega.mega1] request: http://192.168.1.16/sec/?pt=43&scl=44&i2c_dev=bmx280&i2c_par=1
2023-10-15 23:49:30.476 DEBUG (MainThread) [custom_components.mega.mega1] response 26.18
2023-10-15 23:49:30.477 DEBUG (MainThread) [custom_components.mega.mega1] i2c response: {(('pt', '43'), ('scl', '44'), ('i2c_dev', 'bmx280'), ('i2c_par', 1)): '26.18'}
2023-10-15 23:49:30.477 DEBUG (MainThread) [custom_components.mega.mega1] request: http://192.168.1.16/sec/?pt=43&scl=44&i2c_dev=bmx280&i2c_par=2
2023-10-15 23:49:30.499 DEBUG (MainThread) [custom_components.mega.mega1] response 41.37
2023-10-15 23:49:30.499 DEBUG (MainThread) [custom_components.mega.mega1] i2c response: {(('pt', '43'), ('scl', '44'), ('i2c_dev', 'bmx280'), ('i2c_par', 2)): '41.37'}
abcdeyka commented 11 months ago

b280 все ок, по ht31 вроде тоже ок темпа и влажность есть, посмотрим будут ли скачки до 130градусов..., понаблюдаю отпишусь

abcdeyka commented 11 months ago

за сутки по влажности по 2-3 раза вылазила 100% Влажность на всех 5 датчиках, с температурами только у 2х датчиковы по 2-3 раза 130 градусов, как можно отключить эти 100% и 130 градусов?

andvikt commented 11 months ago

за сутки по влажности по 2-3 раза вылазила 100% Влажность на всех 5 датчиках, с температурами только у 2х датчиковы по 2-3 раза 130 градусов, как можно отключить эти 100% и 130 градусов?

Для этого есть фильтры:


mega: # название интеграции
  entities:
    sensor.some_sensor: #entity_id как в интерфейсе HA
      filter_low: 20
      filter_high: 40
abcdeyka commented 11 months ago

Можно ли попробовать добавить поддержку устройств по шине rs485 например таких как dds238-1 ? Готов поучаствовать в испытаниях. Так как такое устройство есть в системе и работает на костылях

andvikt commented 11 months ago

Можно ли попробовать добавить поддержку устройств по шине rs485 например таких как dds238-1 ? Готов поучаствовать в испытаниях. Так как такое устройство есть в системе и работает на костылях

В теории можно, но не первый приоритет )

abcdeyka commented 11 months ago

Вот так сейчас идет опрос dds238-1 который подключен к rs 485 на меге но часто ошибки и прочее прилетает

- platform: command_line
  name: uart_electric_params
  command:
    "/usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_tx=0103000C0001&mode=rs485' && sleep 0.1 && \
    /usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_rx=1&mode=rs485' && sleep 0.1 && \
    /usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_tx=0103000E0001&mode=rs485' && sleep 0.1 && \
    /usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_rx=1&mode=rs485' && sleep 0.1 && \
    /usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_tx=010300000001&mode=rs485' && sleep 0.1 && \
    /usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_rx=1&mode=rs485' && sleep 0.1 && \
    /usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_tx=010300010001&mode=rs485' && sleep 0.1 && \
    /usr/bin/curl -X GET 'http://192.168.1.15/sec/?uart_rx=1&mode=rs485'"

- platform: template
  sensors:
    electric_input_voltage:
      friendly_name: "Напряжение в сети"
      device_class: voltage
      unit_of_measurement: V
      value_template: >
        {% set value = states('sensor.uart_electric_params') %}
        {% if value == 'CRC Error' %}
        {{ states('sensor.electric_input_voltage') | float | round(1) }}
        {% else %}
        {% set value = value.split('Done')[1][-5:].replace('|','') | int(value,16) %}
        {{ (value / 10) | round(1) }}
        {% endif %}
      availability_template: >
        {{ states("sensor.uart_electric_params") not in ["unknown", "unavailable", "none"] }}

    electric_use_active_power:
      friendly_name: "Текущая активная мощность, Вт"
      unit_of_measurement: W
      device_class: power
      value_template: >
        {% set value = states('sensor.uart_electric_params') %}
        {% if value == 'CRC Error' %}
        {{ states('sensor.electric_use_active_power') | float | round(0) }}
        {% else %}
        {% set value = value.split('Done')[2][-5:].replace('|','') %}
        {{ value | int(value,16) }}
        {% endif %}
      availability_template: >
        {{ states("sensor.uart_electric_params") not in ["unknown", "unavailable", "none"] }}

    electric_counter:
      friendly_name: "Счетчик потребления, кВт"
      unit_of_measurement: kWh
      device_class: energy
      value_template: >
        {% set value = states('sensor.uart_electric_params') %}
        {% if value == 'CRC Error' %}
        {{ states('sensor.electric_counter') | float | round(2) }}
        {% else %}
        {% set value = states('sensor.uart_electric_params').split('Done')[3][-5:].replace('|','') + states('sensor.uart_electric_params').split('Done')[4][-5:].replace('|','') %}
        {{ ((value | int(value, 16) / 100) + 3063) | round(2) }}
        {% endif %}
      availability_template: >
        {{ states("sensor.uart_electric_params") not in ["unknown", "unavailable", "none"] }}

home-assistant_2023-10-18T20-34-06.526Z.log