Limych / py-beward

Library written in Python 3.x that exposes the Beward devices as Python objects.
MIT License
5 stars 0 forks source link

Executive devices control #2

Open Limych opened 4 years ago

Limych commented 4 years ago

Add ability to control outputs on doorbell controller.

Limych commented 4 years ago

image

Sergbmw commented 4 years ago

Привет А ссылку открытия замка не определил?

Limych commented 4 years ago

Как я писал ранее, для этого надо проводить реверс-инжиниринг того, как работает официальное приложение. На это у меня пока нет времени, прошу извинить.

Sergbmw commented 4 years ago

Я имею ввиду из этого документа

Limych commented 4 years ago

А смысл лепить костыли в контроллер? Их можно сделать и средствами самого Home Assistant. Через automations.

Я предпочитаю сразу сделать всё правильно.

Limych commented 4 years ago

@Sergbmw А у Вас на домофоне какой контроллер стоит? На один или на три выхода? Возможно, понадобится Ваша помощь в сборе данных для реверс-инжиниринга протокола.

KonstantinNosov commented 4 years ago

судя по докам они исользуют ONVIF для управления. По крайней скачав первую попавшуюся утилиту (https://sourceforge.net/projects/onvifdm/), поддерживающую этот протокол, получилось включить/выключить все три канала на DS06AP

Sergbmw commented 4 years ago

У меня контроллер на 1 выход

KonstantinNosov commented 4 years ago

Через пакет https://github.com/FalkTannhaeuser/python-onvif-zeep вот так можно включать и выключать каналы реле Почему приходится руками пропихивать wsdl хотя он в пакете приходит не понял пока

from onvif import ONVIFCamera
mycam = ONVIFCamera('192.168.4.18', 80, 'admin', 'admin','/usr/local/lib/python3.5/site-packages/wsdl/')
d = mycam.create_devicemgmt_service()
d.SetRelayOutputState({'RelayOutputToken': 'RelayOutput0', 'LogicalState':'active'})
d.SetRelayOutputState({'RelayOutputToken': 'RelayOutput0', 'LogicalState':'inactive'})
d.SetRelayOutputState({'RelayOutputToken': 'RelayOutput1', 'LogicalState':'active'})
d.SetRelayOutputState({'RelayOutputToken': 'RelayOutput1', 'LogicalState':'inactive'})
d.SetRelayOutputState({'RelayOutputToken': 'RelayOutput2', 'LogicalState':'active'})
d.SetRelayOutputState({'RelayOutputToken': 'RelayOutput2', 'LogicalState':'inactive'})

то же через cli который пакет ставит

onvif-cli devicemgmt SetRelayOutputState "{'RelayOutputToken': 'RelayOutput2', 'LogicalState':'active'}" --user 'admin' --password 'admin' --host '192.168.4.18' --port 80 -w /usr/local/lib/python3.5/site-packages/wsdl/
Limych commented 4 years ago

Можно потихоньку начинать тестировать. Правда, при этом придётся и обновить интеграцию для HA на тестовую версию: https://github.com/Limych/ha-beward/tree/feature/outputs-control

Limych commented 4 years ago

@KonstantinNosov:

судя по докам они исользуют ONVIF для управления. По крайней скачав первую попавшуюся утилиту (https://sourceforge.net/projects/onvifdm/), поддерживающую этот протокол, получилось включить/выключить все три канала на DS06AP

У меня к Вам просьба. У меня одноканальный контроллер домофона, а мне было бы полезно получить логи, как официальное приложение общается с трёхканальным. Не могли бы Вы собрать их на своём домофоне?

Для этого необходимо:

  1. поставить бесплатную программу WireShark
  2. Полностью закрыть официальное приложение (завершить его работу).
  3. Запустить сеанс сбора логов передачи данных WireShark с параметрами фильтрации (host ваш_ip) && (host ip_домофона) && http
  4. Запустить официальное приложение и в нём повключать все три канала (желательно каждый по одному разу, чтобы логов было не слишком много).
  5. Сохранить полученный лог и прислать его мне на почту. Слать рекомендую именно приватно, т.к. в логе будут видны ваши логин и пароль на доступ к домофону. Я, естественно, со своей стороны даю гарантии, что никогда не буду нигде публиковать эти данные авторизации.
KonstantinNosov commented 4 years ago

Могу конечно, но зачем это делать если они стандартный протокол используют... Только что набросал компонент для HA , релюшками можно щелкать прямо из него. Посмотрите, может просто сможете использовать , полноценно писать компонент времни нет а наброском могу поделиться https://www.dropbox.com/s/t6w6lt55b08vnmg/beward_relays.zip?dl=0

в конфигах

switch:
  - platform: beward_relays
    scan_interval: 5
    name: doorbell_relay1
    host: 192.168.4.18
    username: admin
    password: admin
    relay: 1
  - platform: beward_relays
    scan_interval: 5
    name: doorbell_relay2
    host: 192.168.4.18
    username: admin
    password: admin
    relay: 2
  - platform: beward_relays
    scan_interval: 5
    name: doorbell_relay3
    host: 192.168.4.18
    username: admin
    password: admin
    relay: 3  
KonstantinNosov commented 4 years ago

наврал - не могу. Стандартное приложение не видит трех каналов, управляет толкьо первым

KonstantinNosov commented 4 years ago

Включение первого канала (остальные из стандартного приложения не управляются) https://www.dropbox.com/s/eiph7v212ehkvrx/beward_nc311_relay1_open2.pcapng?dl=0 Пароль сменен на временный так что за безопасность не переживайте

KonstantinNosov commented 4 years ago

Вот так работает. Проверил

# включить канал 1
curl  -X GET "http://admin:admin@192.168.4.18/cgi-bin/alarmout_cgi?channel=0&Output=0&Status=1"
# выключить канал 1
curl  -X GET "http://admin:admin@192.168.4.18/cgi-bin/alarmout_cgi?channel=0&Output=0&Status=0"

# включить канал 2
curl  -X GET "http://admin:admin@192.168.4.18/cgi-bin/alarmout_cgi?channel=0&Output=1&Status=1"
# выключить канал 2
curl  -X GET "http://admin:admin@192.168.4.18/cgi-bin/alarmout_cgi?channel=0&Output=1&Status=0"

# включить канал 3
curl  -X GET "http://admin:admin@192.168.4.18/cgi-bin/alarmout_cgi?channel=0&Output=2&Status=1"
# выключить канал 3
curl  -X GET "http://admin:admin@192.168.4.18/cgi-bin/alarmout_cgi?channel=0&Output=2&Status=0"
KonstantinNosov commented 4 years ago

Попробовал ветку feature/outputs-control Пришлось руками собрать py-beward и добавить врапперов в BewardController (не уверен что это правильно, но без этого все валилось т.к. swicth.py пытаестя эту проперть читать/писать)

    @property
    def output1(self):
        return self._device.output1

    @output1.setter
    def output1(self, state):
        self._device.output1 = state

Реле щелкает , но ведет себя как-то странно. Свитч на lovelace прыгает туда-сюда после первого включения. Похоже проблемы с отслеживанием статуса реле...

KonstantinNosov commented 4 years ago

Еще момент... Вряд ли относится именно к этой ветке но тем не менее: После перезагрузки домофона сенсор нажатия кнопки перестает работать. Наверное подписка на алерты происходит только при старте, ребут железки не отслеживаестя...

Sergbmw commented 4 years ago

а не подскажите линк на вызов http запроса?

Exclusru commented 4 years ago

API, HTTP - Interface Specification_20161212_PTZ_only.pdf API, HTTP - Interface Specification_20161212.pdf Это официальные API.

Exclusru commented 4 years ago

Удалось написать модуль для HA? Есть поддержка SIP. Панель умеет отправлять get при нажатии кнопки вызова, я настроил полную интеграцию в loxone.

Sergbmw commented 4 years ago

Ну что есть новости на счет полной интеграции домофона с home assistant? Можно ли уже удаленно открывать замок?

Limych commented 4 years ago

Как я писал в этой теме ещё в ноябре прошлого года, есть тестовая версия кода: https://github.com/Limych/ha-beward/tree/feature/outputs-control Её нужно протестировать. Своими силами мне тестировать банально негде. Ждём-с добровольцев...

Sergbmw commented 4 years ago

Как я писал в этой теме ещё в ноябре прошлого года, есть тестовая версия кода: https://github.com/Limych/ha-beward/tree/feature/outputs-control Её нужно протестировать. Своими силами мне тестировать банально негде. Ждём-с добровольцев...

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

Limych commented 4 years ago

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

Fixed

bobsilesia commented 4 years ago

Hi, With this version I have information:

Invalid config The following integrations and platforms could not be set up:

beward

Please check your config.

In the official version, everything works fine

Gan2020 commented 4 years ago

hi, I have the same problem, after replacing the custom_components/beard files. In the official version, everything works fine image

you need to do something else besides updating the files in custom_components/beward?

bobsilesia commented 4 years ago

Hi, someone has successfully run the version with outputs-control?

Sergbmw commented 4 years ago

Ругается на ошибку beward 1.1

Limych commented 4 years ago

Ругается на ошибку beward 1.1

Без конкретики (логов ошибки) я ничем не смогу помочь.

Sergbmw commented 4 years ago

Setup failed for beward: Requirements for beward not found: ['beward~=1.1']. 14:18:23 – setup.py (ERROR) Unable to install package beward~=1.1: ERROR: Could not find a version that satisfies the requirement beward~=1.1 (from versions: 0.0.1, 0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.8.0, 0.8.1, 0.9.0, 0.10.0, 0.11.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6) ERROR: No matching distribution found for beward~=1.1 14:18:23 – util/package.py (ERROR)

Gan2020 commented 4 years ago

Могу удаленный доступ организовать, для изучения проблемы

Sergbmw commented 4 years ago

Могу удаленный доступ организовать, для изучения проблемы

у вас та же проблема?

Gan2020 commented 4 years ago

2020-04-07 10:29:00 ERROR (SyncWorker_12) [homeassistant.util.package] Unable to install package beward~=1.1: Could not find a version that satisfies the requirement beward~=1.1 (from versions: 0.0.1, 0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.8.0, 0.8.1, 0.9.0, 0.10.0, 0.11.0, 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6) No matching distribution found for beward~=1.1 2020-04-07 10:29:00 ERROR (MainThread) [homeassistant.setup] Setup failed for beward: Requirements for beward not found: ['beward~=1.1'].

Sergbmw commented 4 years ago

и тишина...

Gan2020 commented 4 years ago

Нужно ждать, когда автору станет это очень нужно или интересно :).

Limych commented 4 years ago

Дело не в интересе или нужностях. Есть задача выжить, есть обязательства перед людьми. Всё прочее, увы, на «когда время будет». Перед вами у меня нет обязательств, потому, извините, этот проект относится к третьей группе. Ничего личного.

PS. Для нетерпеливых все исходники я выложил. 😉

Gan2020 commented 4 years ago

Андрей, я это и имел виду. Вам спасибо, из за тот функционал, который сейчас работает!

Limych commented 4 years ago

I've remake library and HA integration. There are new version of library in PyPi repository for testing purposes: 1.1.0-beta

Limych commented 4 years ago

Known bugs:

KonstantinNosov commented 4 years ago

Я собрал щит для сада в который входит 3-канальный контроллер. Устанавливать буду чрез пару месяцев, а пока оно лежит в собранном и подключенном виде на столе, в HA тоже зведено. Самое время его помучить - потерять натсройки или еще что-то не жалко и бегать на улицу не надо чтобы что-то сделать. Так что, обращайтесь.

image

KonstantinNosov commented 4 years ago

попробовал обновиться на ветку feature/outputs-control

HA разваливатся. Весь лог завален эксепшнами

Apr 11 15:40:18 hass-01 hass[31077]: pkg_resources.extern.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "'eta'"
Apr 11 15:40:18 hass-01 hass[31077]: During handling of the above exception, another exception occurred:
Apr 11 15:40:18 hass-01 hass[31077]: Traceback (most recent call last):
Apr 11 15:40:18 hass-01 hass[31077]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/util/package.py", line 37, in is_installed
Apr 11 15:40:18 hass-01 hass[31077]:     req = pkg_resources.Requirement.parse(package)
Apr 11 15:40:18 hass-01 hass[31077]:   File "/srv/home-assistant/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3148, in parse
Apr 11 15:40:18 hass-01 hass[31077]:     req, = parse_requirements(s)
Apr 11 15:40:18 hass-01 hass[31077]:   File "/srv/home-assistant/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3094, in parse_requirements
Apr 11 15:40:18 hass-01 hass[31077]:     yield Requirement(line)
Apr 11 15:40:18 hass-01 hass[31077]:   File "/srv/home-assistant/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3103, in __init__
Apr 11 15:40:18 hass-01 hass[31077]:     raise RequirementParseError(str(e))

прописал в манифесте

  "requirements": [
    "beward==1.1.0b0"
  ]

вместо

  "requirements": [
    "beward~=1.1-beta"
  ]

Запустилось, но при этом не может настроить switch'и для оутпутов

Apr 11 16:53:48 hass-01 hass[26451]: 2020-04-11 16:53:48 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Apr 11 16:53:48 hass-01 hass[26451]: Traceback (most recent call last):
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity_platform.py", line 434, in _async_add_entity
Apr 11 16:53:48 hass-01 hass[26451]:     await entity.async_update_ha_state()
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 284, in async_update_ha_state
Apr 11 16:53:48 hass-01 hass[26451]:     self._async_write_ha_state()
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state
Apr 11 16:53:48 hass-01 hass[26451]:     state = self.state
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 602, in state
Apr 11 16:53:48 hass-01 hass[26451]:     return STATE_ON if self.is_on else STATE_OFF
Apr 11 16:53:48 hass-01 hass[26451]:   File "/home/homeassistant/.homeassistant/custom_components/beward/switch.py", line 69, in is_on
Apr 11 16:53:48 hass-01 hass[26451]:     return getattr(self._device, self._switch_id)
Apr 11 16:53:48 hass-01 hass[26451]: AttributeError: 'BewardController' object has no attribute 'output3'
Apr 11 16:53:48 hass-01 hass[26451]: 2020-04-11 16:53:48 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Apr 11 16:53:48 hass-01 hass[26451]: Traceback (most recent call last):
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity_platform.py", line 434, in _async_add_entity
Apr 11 16:53:48 hass-01 hass[26451]:     await entity.async_update_ha_state()
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 284, in async_update_ha_state
Apr 11 16:53:48 hass-01 hass[26451]:     self._async_write_ha_state()
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state
Apr 11 16:53:48 hass-01 hass[26451]:     state = self.state
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 602, in state
Apr 11 16:53:48 hass-01 hass[26451]:     return STATE_ON if self.is_on else STATE_OFF
Apr 11 16:53:48 hass-01 hass[26451]:   File "/home/homeassistant/.homeassistant/custom_components/beward/switch.py", line 69, in is_on
Apr 11 16:53:48 hass-01 hass[26451]:     return getattr(self._device, self._switch_id)
Apr 11 16:53:48 hass-01 hass[26451]: AttributeError: 'BewardController' object has no attribute 'output1'
Apr 11 16:53:48 hass-01 hass[26451]: 2020-04-11 16:53:48 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Apr 11 16:53:48 hass-01 hass[26451]: Traceback (most recent call last):
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity_platform.py", line 434, in _async_add_entity
Apr 11 16:53:48 hass-01 hass[26451]:     await entity.async_update_ha_state()
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 284, in async_update_ha_state
Apr 11 16:53:48 hass-01 hass[26451]:     self._async_write_ha_state()
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state
Apr 11 16:53:48 hass-01 hass[26451]:     state = self.state
Apr 11 16:53:48 hass-01 hass[26451]:   File "/srv/home-assistant/lib/python3.7/site-packages/homeassistant/helpers/entity.py", line 602, in state
Apr 11 16:53:48 hass-01 hass[26451]:     return STATE_ON if self.is_on else STATE_OFF
Apr 11 16:53:48 hass-01 hass[26451]:   File "/home/homeassistant/.homeassistant/custom_components/beward/switch.py", line 69, in is_on
Apr 11 16:53:48 hass-01 hass[26451]:     return getattr(self._device, self._switch_id)
Apr 11 16:53:48 hass-01 hass[26451]: AttributeError: 'BewardController' object has no attribute 'output2'

Кофнифиг

beward:
  - host: 192.168.4.18
    username: admin
    password: [SKIPPED]
    name: doorbell
    cameras:
      - live
      - last_motion
      - last_ding
    binary_sensors:
      - motion
      - online
      - ding
    sensors:
      - last_activity
      - last_motion
      - last_ding
    switches:
      - output1
      - output2
      - output3
Sergbmw commented 4 years ago

У меня так и не получилось запустить данную сборку... :(

Limych commented 4 years ago

У меня так и не получилось запустить данную сборку... :(

Да, возможно, что есть ошибки. У меня сейчас крайне мало свободного времени, а тут надо серьёзно разбираться. Извините…

conrad66 commented 3 years ago

Попробовал последнюю сборку. После прописывания даже самой простой конфигурации в файл beward:

Limych commented 3 years ago

Файл const.py не должен быть сокращён. Его последняя правка была 1,5 года назад: https://github.com/Limych/py-beward/commits/feature/outputs-control/beward/const.py

conrad66 commented 3 years ago

Да, прошу простить. Я перепутал с веткой https://github.com/Limych/ha-beward/tree/feature/outputs-control все что писал выше касалось её ......

Limych commented 3 years ago

Да, прошу простить. Я перепутал с веткой https://github.com/Limych/ha-beward/tree/feature/outputs-control все что писал выше касалось её ......

как я и писал выше, файл const.py давно не изменялся ни в одной из веток. Изменения в нём скорее технические, вызванные тем, что файл был автоматически отформатирован через black. В этом легко убедиться, посмотрем историю правок: https://github.com/Limych/ha-beward/commit/252dfbc367af991c21c44e5fef984bbd17b4b519#diff-6acc7d6f16258f15ae31c06e2db13d15

conrad66 commented 3 years ago

файл const.py давно не изменялся ни в одной из веток

Я возможно туплю.... Перехожу в тестовую ветку https://github.com/Limych/ha-beward/tree/feature/outputs-control Скачиваю тестовый компонент со switches. заменяю в НА. При проверке конфигурации вечно крутящееся колесо проверки. Смотрю этот файл https://github.com/Limych/ha-beward/blob/feature/outputs-control/custom_components/beward/const.py там всего 38 строчек... В этом же файле https://github.com/Limych/ha-beward/blob/master/custom_components/beward/const.py 81 строчка. На каком этапе я допускаю ошибку ?

Limych commented 3 years ago

Хм... Ни на каком — это я был неправ, утверждая, что const.py ни в одной из веток давно не изменялся. Прошу извинить склеротика... :) Изменения были в плане переноса из других файлов в одну кучу констант CAMERAS, BINARY_SENSORS и SENSORS. Они и создали дополнительный объём. Но это не должно никак влиять на результат в данном случае.

UPD И, да, файл, получается, был не сокращён, а расширен... ;)

conrad66 commented 3 years ago

UPD И, да, файл, получается, был не сокращён, а расширен... ;)

Получается из за этого тестовая сборка не работает ?