volshebniks / sauresha

Integrations Saures controller to HA
MIT License
44 stars 11 forks source link

Перестали обновляться датчики #54

Open Kirilloff73 opened 11 months ago

Kirilloff73 commented 11 months ago

После обновления Homeassistant 2023.9.3 отвалилась интеграция SauresHA, после обновления интеграции она вроде как ожила, но перестали обновляться датчики. Вернее они обновляются только при перезагрузке Homeassistant.

sweethome29 commented 11 months ago

есть такое. сенсоры в ha обновляются только при перезагрузке ha. плагин 1.0.3

ghost commented 11 months ago

не работает обновление сенсоров

Kirilloff73 commented 11 months ago

Обновление v. 1.0.4 устранило проблему с обноление датчиков. Автору интеграции большое спасибо!

sweethome29 commented 11 months ago

зря закрыл. проблема не устранена

ghost commented 11 months ago

Подтверждаю, обновление не решило проблему.

volshebniks commented 11 months ago

вот это уже очень странно, так как код в 1.0.4 ровно то же что был и до добавления user_agent и обновления HA. При этом на тестовом аккаунте - никаких проблем не замечено. Самим устройством я уже давно не пользуюсь.

Ошибки в логе есть?

Kirilloff73 commented 11 months ago

image У меня всё обновляется

ghost commented 11 months ago

изображение изображение

DivanX10 commented 11 months ago

Подтверждаю, обновление не решило проблему.

Попробуйте принудительно обновить счетчики через службу, мне это помогало

service: homeassistant.update_entity
data: {}
target:
  entity_id:
    - sensor.saures_gvs
    - sensor.saures_khvs
alias: Обновить данные водосчетчика
sweethome29 commented 11 months ago

нет, не помогает.

DivanX10 commented 11 months ago

Как вариант можно использовать встроенный RESTFull сенсор в Home Assistant. Я реализовал через RESTFull и все подтягивается само.

Все подробности можно изучить на сайте Saures API

Скриншоты ![image](https://github.com/volshebniks/sauresha/assets/64090632/59be1c18-2328-4d1a-906d-0c38867ebc15) ![image](https://github.com/volshebniks/sauresha/assets/64090632/5810e6bb-d1ac-4d57-a6f0-f20f276e2ca1) ![image](https://github.com/volshebniks/sauresha/assets/64090632/711e0a1c-e133-4e6f-ba67-7b0c6e043f2e) ![image](https://github.com/volshebniks/sauresha/assets/64090632/2caadd02-c90b-4f93-b86f-63d2a7530ec7)

Запросы должны быть не чаще чем 15 минут и больше, чем реже, тем лучше, тогда саурес не забанит ваш сервер. Для первого раза, чтобы данные быстрее подтянулись, для SID укажите 600 сек, а для остальных сенсоров 660 сек. Почему 600 и 660? Потому что в первую очередь идет регистрация в облачный сервер саурес и мы получаем токен, он же SID и срок жизни токена 15 минут. Далее, имея SID, мы запрашиваем ID (идентификация объекта), такой ID создается при указании объекта и меняется только в том случае, если удалили контроллер и перепривязали к другому объекту, а имея SID и ID мы можем извлекать всю информацию с контроллера. Проще говоря, сперва мы получаем SID, потом извлекается ID и потом идет опрос контроллера с помощью SID и ID. Помним, что SID живет 15 минут, а ID до тех пор, пока не сменим адрес для контроллера, поэтому его часто не нужно обновлять, можно раз в сутки

1) Saures API: SID (идентификационный токен) - для первого раза в scan_interval достаточно указать 600 сек, потом укажите к примеру 3600(1 час) или 7200 (2 часа)

2) Saures API: Object - для первого раза в scan_interval достаточно указать 660. Потом указываем в scan_interval запрос раз в сутки, в месяц, в год, не важно, важно то, что нам достаточно получить один раз актуальный ID и больше нам этот сенсор не нужен, так как ID записывается в другой сенсор Saures Storage: ID Object который хранит в базе ID и не стирает его до тех пор, пока Saures API: Object не получит новый ID и не перешлет его в Saures Storage: ID Object. Поэтому я и назвал Saures Storage (хранение, хранилище)

3) Saures API: Controller - для первого раза в scan_interval достаточно указать 660 сек. Потом можете указать время как у Saures API: SID или на 60 сек позже, чем у Saures API: SID

Пример для первого раза, чтобы ускорить время получения данных, но при этом не нагружать сервер запросами Saures API: SID - scan_interval: 600 Saures API: Object - scan_interval: 660 Saures API: Controller - scan_interval: 660

Как получили ответы на запросы, то увеличиваем время на свое усмотрение (подбирайте интервалы опытным путем), ниже всего лишь пример Saures API: SID - scan_interval: 7200(2 часа) Saures API: Object - scan_interval: 86400(24 часа) Saures API: Controller - scan_interval: 7200(2 часа) или 7260(2 часа и 1 минута)


В сенсоре Saures API: SID есть строка payload: !secret saures_login_payload, это ваш логин и пароль для авторизации, указывать их нужно в secrets.yaml

В secrets.yaml добавляем

saures_login_payload: email=ваш почтовый ящик&password=ваш пароль

Сам код

#RESTful Sensor. Документация https://www.home-assistant.io/integrations/sensor.rest
#Получаем SID. При авторизации система выдает sid, все последующие запросы выполняются передачей этого идентификатора. Cрок жизни #идентификатора 15 минут

sensor:
  - platform: rest
    name: "Saures API: SID"
    unique_id: saures api sid
    icon: mdi:package-down
    resource: https://api.saures.ru/1.0/login
    method: POST
    scan_interval: 7200
    headers:
      Content-Type: application/x-www-form-urlencoded; charset=utf-8
      User-Agent: HTTPie/3.2.2
    payload: !secret saures_login_payload
    value_template: "{{ value_json.data.sid }}"

#Делаем запрос objects на извлечение ID объекта. Это нужно для того, чтобы делать запросы где требуется sid и id
rest:
#GET запрос user/objects
  - resource: https://api.saures.ru/1.0/user/objects
    scan_interval: 86400
    method: GET
    headers:
      User-Agent: HTTPie/3.2.2
    params:
      sid: "{{ states('sensor.saures_api_sid') }}"
    sensor:
#GET запрос object
      - name: "Saures API: Object"
        unique_id: saures api object
        icon: mdi:home
        value_template: "{{ states('sensor.saures_storage_id_object' ) }}"
        json_attributes_path: "$.data.objects.0"
        json_attributes:
          - access_level
          - connect_dt
          - enable
          - house
          - id
          - label
          - number
          - object_company_account
          - object_company_inn
          - object_company_name
          - object_company_url
          - personal_account
          - tariffs

#GET запрос object/meters
  - resource: https://api.saures.ru/1.0/object/meters
    scan_interval: 7260
    method: GET
    headers:
      User-Agent: HTTPie/3.2.2
    params:
      sid: "{{ states('sensor.saures_api_sid') }}"
      id: "{{ states('sensor.saures_storage_id_object' ) }}"
    sensor:
      #GET запрос. Контроллер
      - name: "Saures API: Controller"
        unique_id: saures api controller
        value_template: "{{ value_json.status }}"
        json_attributes_path: "$.data.sensors.0"
        json_attributes:
          - active
          - bat
          - cap_state
          - check_hours
          - check_period_display
          - empty_inputs
          - firmware
          - hardware
          - last_connection
          - last_connection_warning
          - lic_channels
          - local_ip
          - log
          - model
          - name
          - nbiot
          - power_supply
          - readout_dt
          - request_dt
          - requests
          - rssi
          - scan
          - send
          - sn
          - ssid
          - vol

      #GET запрос. Водосчетчик 1
      - name: "Saures API: Water Meter 1"
        unique_id: saures api water meters 1
        icon: mdi:water-pump
        value_template: "{{ value_json.data.sensors.0.meters.0.vals.0 }}"
        unit_of_measurement: m³
        state_class: total
        device_class: water
        json_attributes_path: "$.data.sensors.0.meters.0"
        json_attributes:
          - approve_dt
          - eirc_num
          - input
          - meter_id
          - meter_name
          - sn
          - state
          - type
          - unit
          - vals

      #GET запрос. Водосчетчик 2
      - name: "Saures API: Water Meter 2"
        unique_id: saures api water meters 2
        icon: mdi:water-pump
        value_template: "{{ value_json.data.sensors.0.meters.1.vals.0 }}"
        unit_of_measurement: m³
        state_class: total
        device_class: water
        json_attributes_path: "$.data.sensors.0.meters.1"
        json_attributes:
          - approve_dt
          - eirc_num
          - input
          - meter_id
          - meter_name
          - sn
          - state
          - type
          - unit
          - vals

#Шаблоны. Документация https://www.home-assistant.io/integrations/template/
#Сохраняем ID объект, чтобы после перезагрузки Home Assistant сенсоры Saures не сбрасывался сенсор
template:
  - trigger:
      - platform: template
        value_template: "{{ state_attr('sensor.saures_api_object', 'id') | is_defined }}"
    sensor:
      - name: "Saures Storage: ID Object"
        unique_id: saures storage id object
        icon: mdi:home
        state: "{{ state_attr('sensor.saures_api_object','id') }}"

#Водосчетчик 1. Сохраняем показания водосчетчика
  - trigger:
      - platform: state
        entity_id:
          - sensor.saures_api_water_meter_1
        not_to:
          - unavailable
          - unknown
    unique_id: trigger saures storage water meter 1
    sensor:
      - name: "Saures Storage: Water Meter 1"
        unique_id: sensor saures storage water meter 1
        icon: mdi:counter
        unit_of_measurement: m³
        state_class: total
        device_class: water
        state: >-
          {% if trigger.to_state.state != trigger.from_state.state %}
            {{ states('sensor.saures_api_water_meter_1') }}
          {% endif %}

#Водосчетчик 2. Сохраняем показания водосчетчика
  - trigger:
      - platform: state
        entity_id:
          - sensor.saures_api_water_meter_2
        not_to:
          - unavailable
          - unknown
    unique_id: trigger saures storage water meter 2
    sensor:
      - name: "Saures Storage: Water Meter 2"
        unique_id: sensor saures storage water meter 2
        icon: mdi:counter
        unit_of_measurement: m³
        state_class: total
        device_class: water
        state: >-
          {% if trigger.to_state.state != trigger.from_state.state %}
            {{ states('sensor.saures_api_water_meter_2') }}
          {% endif %}

#Автоматизация
#После запуска Home Assistant будут обновлены сенсоры водосчетчиков Saures и загрузятся актуальные данные
automation:
  - alias: "Saures API: Обновить сенсоры после запуска Home Assistant"
    id: c0192c64-d64b-45b6-ab2e-91170c12f591
    trigger:
      - platform: homeassistant
        event: start
    action:
      - wait_template: "{{ has_value('sensor.saures_api_sid') }}"
      - service: homeassistant.update_entity
        target:
          entity_id: sensor.saures_api_controller

Если 4 счетчика, то добавляем еще строки кода после #GET запрос. Водосчетчик 2

      #GET запрос. Водосчетчик 3
      - name: "Saures API: Water Meter 3"
        unique_id: saures api water meters 3
        icon: mdi:water-pump
        value_template: "{{ value_json.data.sensors.0.meters.2.vals.0 }}"
        unit_of_measurement: m³
        state_class: total
        device_class: water
        json_attributes_path: "$.data.sensors.0.meters.2"
        json_attributes:
          - approve_dt
          - eirc_num
          - input
          - meter_id
          - meter_name
          - sn
          - state
          - type
          - unit
          - vals

      #GET запрос. Водосчетчик 4
      - name: "Saures API: Water Meter 4"
        unique_id: saures api water meters 4
        icon: mdi:water-pump
        value_template: "{{ value_json.data.sensors.0.meters.3.vals.0 }}"
        unit_of_measurement: m³
        state_class: total
        device_class: water
        json_attributes_path: "$.data.sensors.0.meters.3"
        json_attributes:
          - approve_dt
          - eirc_num
          - input
          - meter_id
          - meter_name
          - sn
          - state
          - type
          - unit
          - vals
sweethome29 commented 11 months ago

это всё конечно замечательно.. но мы требуем внимание разработчика к проблеме.

upd// в const включил debug - нет обновления. Хотя может оно и происходит, но в XA ничего не меняется. В логе как и выше..

home-assistant_2023-10-21T08-36-14.262Z.log

DivanX10 commented 11 months ago

это всё конечно замечательно.. но мы требуем внимание разработчика к проблеме. IMG_20231020_123113

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

Последнее сообщение автора https://github.com/volshebniks/sauresha/issues/53#issuecomment-1770345152

image

Есть несколько путей решения проблемы: 1) Помочь автору устранить ошибку и предоставить ему рабочий код 2) Сделать форк этого проекта и самому продолжать поддерживать этот проект 3) Использовать альтернативное решение 4) Сидеть и ждать, когда автор исправит

Я python не знаю и помочь автору не могу, поэтому пользуюсь готовыми решениями. Понимая, что работа интеграции sauresha находится под угрозой неработоспособности и что автор может забросить проект, я перешел на альтернативный вариант, это RestFull сенсоры - код выложил выше.

anikin-ab commented 11 months ago

у меня вода обновляется, а ээ нет заметил вот что у меня счетчик ээ стоит на 9 канале а в коде 9 канала нет, есть 8

        meter = self.current_meter
        str_return_value = meter.value
        # if meter.type_number == 8: БЫЛО
        if meter.type_number == 9:                
            self._attributes.update(
                {
                    "friendly_name": meter.name,
                    "condition": meter.state,
                    "sn": meter.sn,
                    "type": meter.type,
                    "meter_id": meter.meter_id,
                    "input": meter.input,
                    "approve_dt": meter.approve_dt,
                    "t1": meter.t1,
                    "t2": meter.t2,
                    "t3": meter.t3,
                    "t4": meter.t4,

... elif meter.type_number == 9: self._attributes.update( { "unit_of_measurement": "kWh", "device_class": "energy", "state_class": "total_increasing", } )

            self.isStart = False
anikin-ab commented 11 months ago

это RestFull сенсоры - код выложил выше.

подскажи, плиз, сенсоры в конфиге прописываем?

sweethome29 commented 11 months ago

Могу всем у кого нет обновления показаний в HA после первого запуска предложить такой костыль: в entity.py находим self.isStart= False и меняем на True entity_py Сохраняем и перезагружаем HA.

DivanX10 commented 11 months ago

это RestFull сенсоры - код выложил выше.

подскажи, плиз, сенсоры в конфиге прописываем?

Да, прописываем в конфиге. Подробно про RESTful Sensor читаем здесь

Для справки. Я добавил еще парочку сенсоров, которые хранят в себе показания счетчика в базе и не исчезнут, если вруг отвалится саурес через RESTful Sensor. Такое бывает, если время не совпадет при интервале. Я играюсь с интервалом и пока выставил всем 3600, вроде отвалов на второй день не наблюдается как ранее. В общем пробуйте и меняйте код на свое усмотрение

#Шаблоны. Документация https://www.home-assistant.io/integrations/template/
#Сохраняем ID объект в базу, чтобы после перезагрузки Home Assistant сенсоры Saures не сбрасывался сенсор
template:
  - trigger:
      - platform: template
        value_template: "{{ state_attr('sensor.saures_api_object', 'id') | is_defined }}"
    sensor:
      - name: "Saures Storage: ID Object"
        unique_id: saures storage id object
        icon: mdi:home
        state: "{{ state_attr('sensor.saures_api_object','id') }}"

#Водосчетчик 1. Сохраняем показания водосчетчика в базу
  - trigger:
      - platform: state
        entity_id:
          - sensor.saures_api_water_meter_1
        not_to:
          - unavailable
          - unknown
    unique_id: trigger saures storage water meter 1
    sensor:
      - name: "Saures Storage: Water Meter 1"
        unique_id: sensor saures storage water meter 1
        icon: mdi:counter
        unit_of_measurement: m³
        state_class: total
        device_class: water
        state: >-
          {% if trigger.to_state.state != trigger.from_state.state %}
            {{ states('sensor.saures_api_water_meter_1') }}
          {% endif %}

#Водосчетчик 2. Сохраняем показания водосчетчика в базу
  - trigger:
      - platform: state
        entity_id:
          - sensor.saures_api_water_meter_2
        not_to:
          - unavailable
          - unknown
    unique_id: trigger saures storage water meter 2
    sensor:
      - name: "Saures Storage: Water Meter 2"
        unique_id: sensor saures storage water meter 2
        icon: mdi:counter
        unit_of_measurement: m³
        state_class: total
        device_class: water
        state: >-
          {% if trigger.to_state.state != trigger.from_state.state %}
            {{ states('sensor.saures_api_water_meter_2') }}
          {% endif %}
anikin-ab commented 11 months ago

а счетчик э/э ты себе не прописывал или у тебя нет?

anikin-ab commented 11 months ago

все заработало странно, что в сущностях стоит 8 канал, а в приложении написано , что используется 9 канал для счетчика ЭЭ

alekslegkih commented 3 months ago

Кто ни будь смог победить ошибку Platform rest does not generate unique IDs. ? Судя по вялотекущей теме #90394 нет.

Update.

Решение для исправления ошибки Platform rest does not generate unique IDs. найдено @timr49.

Необходимо код сенсора для получения API

#Получаем SID. При авторизации система выдает sid, все последующие запросы выполняются передачей 
#этого идентификатора. Cрок жизни идентификатора 15 минут

sensor:
  - platform: rest
    name: "Saures API: SID"
    unique_id: saures api sid
    icon: mdi:package-down
    resource: https://api.saures.ru/1.0/login
    method: POST
    scan_interval: 7200
    headers:
      Content-Type: application/x-www-form-urlencoded; charset=utf-8
      User-Agent: HTTPie/3.2.2
    payload: !secret saures_login_payload
    value_template: "{{ value_json.data.sid }}"

изменить на следующий:

rest:
  - resource: https://api.saures.ru/1.0/login
    scan_interval: 14400
    method: POST
    headers:
      Content-Type: application/x-www-form-urlencoded; charset=utf-8
      User-Agent: HTTPie/3.2.2
    payload: !secret saures_login_payload
    sensor:
      - name: "Saures API: SID"
        unique_id: saures_api_sid
        icon: mdi:package-down
        value_template: "{{ value_json.data.sid }}"

После этого ошибка не возникает. Данные с сайта saures забираются корректно.

PS. Если есть желание получить дополнительную информацию с контролера, можно создать дополнительные сенсоры. Например батарея и время последней передачи контролером информации. Размещаем в template

  #Дачики контролера
  #Батарея
  - sensor:
      - name: "Saures Api: Controller battery"
        unique_id: saures_api_controller_battery
        icon: mdi:battery
        unit_of_measurement: "%"
        state: >-
          {{ state_attr('sensor.saures_api_controller', 'bat') }}
  #Последняя отправка данных
  - sensor:
      - name: "Saures Api: Controller last connection"
        unique_id: saures_api_controller_last_connection
        icon: mdi:timer-sync-outline
        state: >-
          {{  (state_attr('sensor.saures_api_controller', 'last_connection') | as_timestamp()) | timestamp_custom("%H:%M:%S") }}
DivanX10 commented 3 months ago

Посмотрел документацию RESTful, никаких изменении. Ошибка Platform rest does not generate unique IDs может возникать из-за того, что пытаетесь создать или создали несколько сенсоров с одинаковыми unique_id. Проверьте свой код внимательно и обращайте внимание на строки unique_id, где не должно быть повторяющихся имен. Вы просто создали другой сенсор без unique_id, поэтому и заработало. Ищите у себя в коде сенсор у которого имеется одинаковый unique_id или ищите в объектах GUI

У меня стоит крайняя версия Home Assistant.

Home Assistant 
Core 2024.6.4
Supervisor 2024.06.2
Operating System 12.4
Пользовательский интерфейс 20240610.1

Использую этот код для запроса API SID

sensor:
  - platform: rest
    name: "Saures API: SID"
    unique_id: saures api sid
    icon: mdi:package-down
    resource: https://api.saures.ru/1.0/login
    method: POST
    scan_interval: 3600 #Запрос через каждые 15 минут
    headers:
      Content-Type: application/x-www-form-urlencoded; charset=utf-8
      User-Agent: HTTPie/3.2.2
    payload: !secret saures_login_payload
    value_template: "{{ value_json.data.sid }}"

API sid успешно генерится image


Верните назад код и в строке unique_id для проверки вместо saures api sid укажите другое имя, например saures api sid rest sensor и перезапустите конфигурацию REST через Панель разработчика. После посмотрите в журнале, появляется ли ошибка Platform rest does not generate unique IDs

sensor:
  - platform: rest
    name: "Saures API: SID"
    unique_id: saures api sid rest sensor #указал другое имя для unique_id
    icon: mdi:package-down
    resource: https://api.saures.ru/1.0/login
    method: POST
    scan_interval: 3600 #Запрос через каждые 15 минут
    headers:
      Content-Type: application/x-www-form-urlencoded; charset=utf-8
      User-Agent: HTTPie/3.2.2
    payload: !secret saures_login_payload
    value_template: "{{ value_json.data.sid }}"

В документации RESTful пишется

unique_id string (optional)
An ID that uniquely identifies this entity. This allows changing the name, icon and entity_id from the web interface.

Вы можете не указывать в коде unique_id, тогда unique_id сгенерится автоматически и присвоится свой уникальный unique_id, но вам не будет доступно через GUI редактировать сущность и вы не сможете изменить название, иконку и т.д

alekslegkih commented 3 months ago
> sensor:
>   - platform: rest
>     name: "Saures API: SID"
>     unique_id: saures api sid
>     icon: mdi:package-down
>     resource: https://api.saures.ru/1.0/login
>     method: POST
>     scan_interval: 3600 #Запрос через каждые 15 минут
>     headers:
>       Content-Type: application/x-www-form-urlencoded; charset=utf-8
>       User-Agent: HTTPie/3.2.2
>     payload: !secret saures_login_payload
>     value_template: "{{ value_json.data.sid }}"

@DivanX10 Вы неверно поняли. По Вашей схеме как раз с датчиком "Saures API: SID" никаких проблем нет, Он единственный исправно получает данные. А вот все остальные получают ровно один раз после запуска. При втором обращении они вываливаются с ошибкой Platform rest does not generate unique IDs. По исправленной схеме остальные датчики получают информацию без ошибок.

Проверьте свой код внимательно и обращайте внимание на строки unique_id,

Ну это проверилось в первую очередь. Эта проблема совсем не причем. Но если у Вас работает по описанной у вас схеме, то хорошо. У меня не работает, для чего я и написал как можно исправить.

DivanX10 commented 3 months ago

По Вашей схеме как раз с датчиком "Saures API: SID" никаких проблем нет, Он единственный исправно получает данные. А вот все остальные получают ровно один раз после запуска. При втором обращении они вываливаются с ошибкой Platform rest does not generate unique IDs.

Если получают ровно один раз после запуска, значит работает. Проведите эксперимент. Создайте копию вашего файла и скопируйте в другое место. В коде уберите у всех unique_id. Проверьте все сущности в разделе Объекты, которые связаны с saures, и чтобы не было красного круга с восклицательным знаком. Если есть, то удалите все сущности связанные с saures, у которых такой знак. Почистите свой Home Assistant от старых и недействительных сущностей связанные с saures. Сократите интервал опроса до 600 сек., для всех сенсоров для проверки. После всех настроек перезапустите Home Assistant. Потом повторно проверьте все сущности saures, не должно быть недействительных сущностей или дублей

Когда объект недоступен, то справа будет красный кружок с восклицательным знаком image

Мои интервалы подобранные путем проб и из-за превышения интервала сенсоры не работали. Если у SID стоит интервал 7200 и больше, то сенсоры не работают

Для запроса login (SID) интервал: 3600 сек Для запроса user/objects интервал: 86400 сек Для запроса object/meters интервал: 3600 сек

alekslegkih commented 2 months ago

Проведите эксперимент. Создайте копию вашего файла и скопируйте в другое место. В коде уберите у всех unique_id. Проверьте все сущности в разделе Объекты, которые связаны с saures, и чтобы не было красного круга с восклицательным знаком. Если есть, то удалите все сущности связанные с saures, у которых такой знак. Почистите свой Home Assistant от старых и недействительных сущностей связанные с saures. Сократите интервал опроса до 600 сек., для всех сенсоров для проверки. После всех настроек перезапустите Home Assistant. Потом повторно проверьте все сущности saures, не должно быть недействительных сущностей или дублей

Хоть и все это пройдённый этап, но решил всё таки проверить еще раз. Ну вдруг что не так делаю.

Поднял новый пустой тестовый сервер на распбери, на него скопировал ваш файл с указанными настройками. При запуске Saures API: SID тут же получил SID. 1 и 2 счетчики получили данные.
Saures API: Object получил статус unknown, но данные в Saures Storage: ID Object записались правильные. Далее прошел час Saures API: SID получил новый SID, все остальное вывалилось в unknown, * в логи записалась ошибка

Platform rest does not generate unique IDs. saures_api_object already exists - ignoring sensor.saures_api_controller
Platform rest does not generate unique IDs. ID saures_api_controller already exists - ignoring sensor.saures_api_controller
Platform rest does not generate unique IDs. saures_api_water_meters_1 already exists - ignoring sensor.saures_api_controller
Platform rest does not generate unique IDs. saures_api_water_meters_2 already exists - ignoring sensor.saures_api_controller

Хорошо, решил убрать unique_id, ошибка исчезла, через сутки в системе было 24 счётчика холодной воды, 24 горячей и так далее. С unique_id:

Убрал Saures API: SID из секции sensor: в секцию rest: всё заработало, все данные получает вовремя и корректно. Ошибок нет.

@DivanX10 я нисколько не сомневаюсь, что у вас всё работает, но у меня так. И исправляется ситуация только выносом датчика в другую секцию. Поэтому, если у кого то возникнет ситуация аналогичная моей с появлением ошибки Platform rest does not generate unique IDs. , то они могут попробовать исправить ситуацию предложенным решением.

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