Natywna integracja z Home Assistant (komponent) 2.1

  • 338 Odpowiedzi
  • 25165 Wyświetleń
*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #285 dnia: Lutego 22, 2022, 22:56:47 »
@Fantomas Masz włączoną chmurę?

@admin "rozwiazałem" mój problem z lokalizacją integracji w custom - "podniosłem" w manifest.json wersję do 2.1.4 i jest ok. Nie mam pojęcia dlaczego tak się dzieje, ale wyczytałem na jakimś forum że to może pomóc i pomogło :)
« Ostatnia zmiana: Lutego 22, 2022, 23:00:52 wysłana przez SebiCo »

Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #286 dnia: Lutego 22, 2022, 23:02:06 »
Masz włączoną chmurę?
Bez chmury i bez zjadających połączenia notyfikacji. Za to używam na bramce skryptu (poza integracją) do odczytywania stanu głowic. Czyżby ostatnia aktualizacja oprogramowania kontrolera mogła namieszać?
Elementy systemu, których używam: Bramka AIS DEV 3 + pilot, EFC-01, 3x ROP-01, 3x ROP-02, RDP-01, ROP-07, RNK-02, 5x RNK-04, RNP-01, P-257/2, 2x ROP-21, 3x ROP-22, 5x RNK-24, RCK-21, 3x RCR-21, RCM-21, 4x RGT-01, urządzenia Zigbee, kamera IP.

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #287 dnia: Lutego 22, 2022, 23:04:47 »
Może tak być, ja niestety musiałem zrezygnować z dodatkowego skryptu bo zajmował dodatkowe połączenie, na które już nie było wolnych slotów i działy się różne dziwne rzeczy. Dla testu zablokuj skrypt i zobacz czy pomoże bo z logów wynika jakbyś właśnie miał problem z połączeniem z kontrolerem.
« Ostatnia zmiana: Lutego 22, 2022, 23:06:54 wysłana przez SebiCo »

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #288 dnia: Lutego 22, 2022, 23:07:58 »
Na wersji dostarczonej z AIS:
Logger: homeassistant.config_entries
Source: components/extalife/pyextalife.py:797
First occurred: 22:40:12 (1 occurrences)
Last logged: 22:40:12

Error setting up entry efc-01 for extalife
Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/asyncio/tasks.py", line 492, in wait_for
    fut.result()
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 793, in async_send_message_await_response
    await asyncio.wait_for(fut, timeout)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/asyncio/tasks.py", line 494, in wait_for
    raise exceptions.TimeoutError() from exc
asyncio.exceptions.TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/config_entries.py", line 313, in async_setup
    result = await component.async_setup_entry(hass, self)  # type: ignore
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 188, in async_setup_entry
    return await initialize(hass, config_entry)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 302, in initialize
    await data.async_start_polling(poll_now=True)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 362, in async_start_polling
    await self.async_execute_status_polling()
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 369, in async_execute_status_polling
    await self._async_update_callback()
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 389, in _async_update_callback
    channels = await self.controller.async_get_channels()
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 466, in async_get_channels
    resp = await self._connection.async_execute_command(cmd, None)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 815, in async_execute_command
    response = await self.async_send_message_await_response(msg, command)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 797, in async_send_message_await_response
    raise TCPConnError("Disconnected while waiting for API response!")
homeassistant.components.extalife.pyextalife.TCPConnError

Na 2.1.2 praktycznie to samo:
Logger: homeassistant.config_entries
Source: components/extalife/pyextalife.py:798
First occurred: 22:51:07 (1 occurrences)
Last logged: 22:51:07

Error setting up entry efc-01 for extalife
Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/asyncio/tasks.py", line 492, in wait_for
    fut.result()
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 794, in async_send_message_await_response
    await asyncio.wait_for(fut, timeout)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/asyncio/tasks.py", line 494, in wait_for
    raise exceptions.TimeoutError() from exc
asyncio.exceptions.TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/config_entries.py", line 313, in async_setup
    result = await component.async_setup_entry(hass, self)  # type: ignore
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 144, in async_setup_entry
    return await initialize(hass, config_entry)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 248, in initialize
    await data.async_start_polling(poll_now=True)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 308, in async_start_polling
    await self.async_execute_status_polling()
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 315, in async_execute_status_polling
    await self._async_update_callback()
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/__init__.py", line 335, in _async_update_callback
    channels = await self.controller.async_get_channels()
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 425, in async_get_channels
    resp = await self._connection.async_execute_command(cmd, None)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 818, in async_execute_command
    response = await self.async_send_message_await_response(msg, command)
  File "/data/data/pl.sviete.dom/files/usr/lib/python3.9/site-packages/homeassistant/components/extalife/pyextalife.py", line 798, in async_send_message_await_response
    raise TCPConnError(
homeassistant.components.extalife.pyextalife.TCPConnError
Ale to jest inny problem niż wcześniej. Integracja nie może się tu połączyć z kontrolerem. Brakuje wolnego połączenia. Używasz notyfikacji lub chmury Exta Life?
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #289 dnia: Lutego 22, 2022, 23:09:23 »
A integracja 2.1.2 z GitHub to jest to samo co dostarcza AIS bo oni to biorą z mojego GitHub repo ;)
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #290 dnia: Lutego 23, 2022, 00:00:46 »
Coś tutaj się podle zbiegło: aktualizacja oprogramowania kontrolera, odtworzenie backupu konfiguracji na nim (czasem się konfiguracja rozjeżdża - znikają mi niektóre urządzenia ExtaFree, ale to już inna historia), próba zastosowania wersji beta, być może zwieszające się skrypty... Póki co przywróciłem inny backup kontrolera, wyłączyłem skrypty (żeby nie zjadały połączenia) i większość automatyzacji (bo i tak do przejrzenia i zmiany urządzeń na encje). Póki co wróciło wszystko, oczywiście oprócz odczytu czasu odświeżenia głowic i poziomu otwarcia zaworów (skrypt).

Dalsze prace raczej dopiero w weekend.
Elementy systemu, których używam: Bramka AIS DEV 3 + pilot, EFC-01, 3x ROP-01, 3x ROP-02, RDP-01, ROP-07, RNK-02, 5x RNK-04, RNP-01, P-257/2, 2x ROP-21, 3x ROP-22, 5x RNK-24, RCK-21, 3x RCR-21, RCM-21, 4x RGT-01, urządzenia Zigbee, kamera IP.

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #291 dnia: Lutego 23, 2022, 11:46:58 »
@admin

Ciekawostka - zmiana w manifest.json

"version": "2.1.3alpha0" - integracja nie uruchamia się z custom
"version": "2.1.3a0" - uruchamia się z custom
« Ostatnia zmiana: Lutego 23, 2022, 11:51:25 wysłana przez SebiCo »

Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #292 dnia: Lutego 23, 2022, 15:17:26 »
Może tak być, ja niestety musiałem zrezygnować z dodatkowego skryptu bo zajmował dodatkowe połączenie, na które już nie było wolnych slotów i działy się różne dziwne rzeczy. ...
A czy nie ma sposobu na użycie w swoim skrypcie tego samego połączenia, którego używa integracja?
Elementy systemu, których używam: Bramka AIS DEV 3 + pilot, EFC-01, 3x ROP-01, 3x ROP-02, RDP-01, ROP-07, RNK-02, 5x RNK-04, RNP-01, P-257/2, 2x ROP-21, 3x ROP-22, 5x RNK-24, RCK-21, 3x RCR-21, RCM-21, 4x RGT-01, urządzenia Zigbee, kamera IP.

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #293 dnia: Lutego 23, 2022, 16:00:14 »
@admin

Ciekawostka - zmiana w manifest.json

"version": "2.1.3alpha0" - integracja nie uruchamia się z custom
"version": "2.1.3a0" - uruchamia się z custom
Podmieniłeś u siebie lokalnie? No tak, to by tłumaczyło sprawę. Ja u siebie w HA dev mam 2.1.2, a wersję podmieniłem dopiero na github. Ale bardzo zaskakujący błąd. Żeby z tego powodu HA nie ładował integracji w ogóle, to jest bardzo dziwne, i jak dla mnie to wygląda na jakiś bug w HA.

Zapoznałem się z guideline HA na temat wersjonowania (https://developers.home-assistant.io/docs/creating_integration_manifest/#version) i faktycznie podane tam wytyczne sugerują, że składnia "2.1.3alpha0" jest nieprawidłowa, ale "2.1.3a0" już tak. Ale żeby od razu rzucać błędem, że nie znaleziono integracji?  :-\
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline SebiCo

  • ***
  • 225
    • Zobacz profil
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #294 dnia: Lutego 23, 2022, 20:21:08 »
Cytuj
A czy nie ma sposobu na użycie w swoim skrypcie tego samego połączenia, którego używa integracja?

To już by musiał @admin się nad tym pochylić i dołożyć do integracji bo inaczej chyba nie da rady.
Skrypt uruchomiony "na boku" tworzy nowe połączenie i przez nie odpytuje kontroler.
Ale teraz przy odrobinie pomysłowości i chęci i nowej funkcjonalności killowania połączenia integracji można kombinować z wykonywaniem sekwencyjnym skryptu i integracji.

Cytuj
Podmieniłeś u siebie lokalnie?
Tak, lokalnie.
« Ostatnia zmiana: Lutego 23, 2022, 20:23:04 wysłana przez SebiCo »

Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #295 dnia: Lutego 23, 2022, 22:44:04 »
Wrzuciłem alfę. Teraz działa, błędów w logach chwilowo brak :)

Usługa Exta Life: restart pozwoli mi zrezygnować z resetowania kontrolera za pomocą sterowanego gniazdka. To może jeszcze robienie i odtwarzanie backupu z HA?  ;D
Chociaż jednak mam wątpliwość, że jak się kontroler całkiem "zwiesi", to nic nie pomoże, tylko gniazdko off/on.
« Ostatnia zmiana: Lutego 23, 2022, 22:54:54 wysłana przez Fantomas »
Elementy systemu, których używam: Bramka AIS DEV 3 + pilot, EFC-01, 3x ROP-01, 3x ROP-02, RDP-01, ROP-07, RNK-02, 5x RNK-04, RNP-01, P-257/2, 2x ROP-21, 3x ROP-22, 5x RNK-24, RCK-21, 3x RCR-21, RCM-21, 4x RGT-01, urządzenia Zigbee, kamera IP.

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #296 dnia: Lutego 24, 2022, 11:47:51 »
Cytuj
A czy nie ma sposobu na użycie w swoim skrypcie tego samego połączenia, którego używa integracja?

To już by musiał @admin się nad tym pochylić i dołożyć do integracji bo inaczej chyba nie da rady.
Skrypt uruchomiony "na boku" tworzy nowe połączenie i przez nie odpytuje kontroler.
Ale teraz przy odrobinie pomysłowości i chęci i nowej funkcjonalności killowania połączenia integracji można kombinować z wykonywaniem sekwencyjnym skryptu i integracji.

Cytuj
Podmieniłeś u siebie lokalnie?
Tak, lokalnie.

Macie namiary na ten skrypty? Gdzieś na github może? Kiedyś może uda mi się to dodać do integracji. To "tylko" wywołanie kolejnej komendy dla konkretnych urządzeń. Problemem jest tylko jak to sensownie zrobić, bo biblioteka do komunikacji jest tak zrobiona, że nie ma logiki, która rozróżnia co to za urządzenia i czy trzeba coś jeszcze doczytać, ale może kiedyś coś mi się uda tam zmienić. Będzie łatwiej jak będzie gdzieś działający gotowiec
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #297 dnia: Lutego 24, 2022, 11:50:42 »
Wrzuciłem alfę. Teraz działa, błędów w logach chwilowo brak :)

Usługa Exta Life: restart pozwoli mi zrezygnować z resetowania kontrolera za pomocą sterowanego gniazdka. To może jeszcze robienie i odtwarzanie backupu z HA?  ;D
Chociaż jednak mam wątpliwość, że jak się kontroler całkiem "zwiesi", to nic nie pomoże, tylko gniazdko off/on.
restart jest tam od wersji 2.0. Może być pomocny, ale faktycznie warunkiem zadziałania jest to aby kontroler nie wisiał więcw krytycznej sytuacji może nie pomóc.
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #298 dnia: Lutego 24, 2022, 11:52:30 »
Wczoraj poprawiłem na github plik manifest dla wersji 2.1.3a0, więc po ściągnięciu powinien działać wszędzie. Niestety błędy w logach na razie zostaną. Nie wiem kiedy uda mi się z tym uporać. Chwilowo mnie to przerasta, szczególnie że ani nie jestem pythonowcem, ani na asyncio się za bardzo nie znam, ale jestem dobrej myśli. DO tej pory to była kwestia determinacji i przede wystarczającej ilości wolnego czasu.
Elementy systemu, których używam: 3xSRP-22, 5xRDP-21, 3xROP-22, 4x ROP-21, 1xP-456/36, 1xRNK-24, 3x RNP-21, 1xRCT-22, aplikacja na Android oraz iOS + Home Assistant

Odp: Natywna integracja z Home Assistant (komponent) 2.1
« Odpowiedź #299 dnia: Lutego 24, 2022, 12:45:11 »
Macie namiary na ten skrypty? Gdzieś na github może? Kiedyś może uda mi się to dodać do integracji. To "tylko" wywołanie kolejnej komendy dla konkretnych urządzeń. Problemem jest tylko jak to sensownie zrobić, bo biblioteka do komunikacji jest tak zrobiona, że nie ma logiki, która rozróżnia co to za urządzenia i czy trzeba coś jeszcze doczytać, ale może kiedyś coś mi się uda tam zmienić. Będzie łatwiej jak będzie gdzieś działający gotowiec

Wrzucam moje rozwiązanie tutaj dla potomności - implementacja pobierania danych o głowicach (z doświadczenia widzę, że komunikuje się tylko z kontrolerem, nie wymusza żadnej komunikacji radiowej):

1. Definicje sensorów command_line (takie coś dla każdej głowicy):
- platform: command_line
  name: "Termostat Sypialnia"
  json_attributes:
    - valve_val
    - sync_time
    - last_sync
    - time
    - readings_time
    - button_lock
    - colors
    - global_temperatures
  command: "python ~/py/command25.py 34"
  unit_of_measurement: "%"
  scan_interval: 60
  value_template: "{{ value_json.valve_val }}"

2. Obsługa komendy 25 kontrolera - zwraca JSON-a: command25.py
import sys
import socket
import json

import exta

# Pobiera dane z glowicy (m.in. ostania synchronizacja i poziom zamkniecia zaworu)

# Parametry:
# [1] - numer urzadzenia, np. 31 (climate.salon)
device = int(sys.argv[1])

s = exta.exta_socket()

exta.login(s)

obj = {
  "command": 25,
  "data": {
    "channel": 1,
    "id": device
  }
}
s.sendall(bytes(json.dumps(obj)+'\x03', 'UTF-8'))
data = s.recv(1024)
j = json.loads(str(data, 'UTF-8')[:-1])
print(json.dumps(j.get("data")))

3. Kawałek wspólny dla różnych innych skryptów (które póki co w powijakach, do obsługi komend 75 i 77): exta.py
import socket

def host():
  return 'x.x.x.x'

def port():
  return 20400

def exta_socket():
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.connect((host(), port()))
  return s

def login(s):
  s.sendall(b'{"command":1,"data":{"login":"xxx","password":"xxx"}}\x03')
  data = s.recv(1024)

  return True

Efekt działania - przykładowa zawartość sensor.termostat_sypialnia:
valve_val: 100
sync_time: 1645706570
last_sync: 282
time: 1645706852
readings_time: 300
button_lock: false
colors:
  - 10092339
  - 10092531
  - 16773887
  - 2236979
global_temperatures:
  - 180
  - 200
  - 240
  - 220
unit_of_measurement: '%'
friendly_name: Termostat Sypialnia

Jeszcze dodatkowe sensory template "odwracające" poziom zamknięcia na poziom otwarcia (lepsze do wykresów):
- sensor:
  - name: "Valve Sypialnia"
    unit_of_measurement: "%"
    state: >
      {% set valve = state_attr('sensor.termostat_sypialnia','valve_val') %}
      {% if valve == None %}
      {{ 0 | float() }}
      {% else %}
      {{ 100 - valve | float()  }}
      {% endif %}
« Ostatnia zmiana: Lutego 24, 2022, 12:57:27 wysłana przez Fantomas »
Elementy systemu, których używam: Bramka AIS DEV 3 + pilot, EFC-01, 3x ROP-01, 3x ROP-02, RDP-01, ROP-07, RNK-02, 5x RNK-04, RNP-01, P-257/2, 2x ROP-21, 3x ROP-22, 5x RNK-24, RCK-21, 3x RCR-21, RCM-21, 4x RGT-01, urządzenia Zigbee, kamera IP.