Menu główne

Natywna integracja z Home Assistant (komponent) 2.1

Zaczęty przez admin, Wrzesień 14, 2020, 11:04:03

Poprzedni wątek - Następny wątek

admin

Cytat: Fantomas w Październik 28, 2021, 12:26:36
Już namierzyłem miejsce. Dzieje się to przy ponownym wczytywaniu wczytywaniu konfiguracji. Wygląda na to, że ta funkcja jest też wołana niejawnie przy włączeniu/wyłączaniu urządzeń.
Trochę się bawiłem nowymi urządzeniami i dlatego to wyszło.
Ta opcja to coś co pojawiło się relatywnie niedawno w HA. Myślę gdzieś w ciągu ostatniego roku. Podczas gdy tworzyłem integrację, to nie było jeszcze tej funkcji w HA więc nie testowałem tego. Prawdopodobnie będą potrzebne jakieś zmiany w  kodzie, aby wprowadzić obsługę tej funkcji w HA i zwiększyć kompatybilność, ale ostatnio bardzo krucho u mnie z czasem, więc na razie musi zostać tak jak jest, bo nawet nie wiem co dokładnie potrzeba zrobić, aby to działało. Muszę trochę poczytać, albo rozeznać się na discord HA u innych developerów.

Jako workaround proponuję nie używać tej funkcji, a gdy będzie potrzeba przeładowania integracji to sugeruję zrestartować całego HA Core i wtedy wszystko załaduje się od nowa.
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

Fantomas

#226
Jest OK.

Inna sprawa, czy powinien się pojawić ten błąd (tak, w logu jest jako błąd a nie ostrzeżenie) w przypadku ponownego wczytywania konfiguracji, czy też da się to jakoś naprawić.

EDIT: na "naprawić" odpowiedź widzę już w poprzednim poście  ;)
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.

admin

Ten błąd loguje HA, a nie sama integracja, więc ja nie mam nad tym kontroli. Przestanie się pokazywać gdy zrobię niezbędne zmiany żeby obsłużyć to ponowne wczytywanie
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

Fantomas

OK, nic pilnego.

Kolejne pytanie: Czy da się wyciągnąć trochę więcej informacji z RGT-01? Interesowałby mnie czas ostatniej synchronizacji i poziom zamknięcia zaworu.

Aktualnie dostępne atrybuty (BTW: battery_status, to prawdziwe info - nie jest wyczerpana, czy raczej tylko zaślepka?) :

hvac_modes:
  - auto
  - heat
min_temp: 5
max_temp: 50
target_temp_step: 0.5
current_temperature: 22
temperature: 18
channel_id: 34-1
not_responding: false
waiting_to_synchronize: false
battery_status: false
temperature_old: 220
friendly_name: Sypialnia
supported_features: 1
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.

admin

Cytat: Fantomas w Październik 28, 2021, 19:04:27
OK, nic pilnego.

Kolejne pytanie: Czy da się wyciągnąć trochę więcej informacji z RGT-01? Interesowałby mnie czas ostatniej synchronizacji i poziom zamknięcia zaworu.

Aktualnie dostępne atrybuty (BTW: battery_status, to prawdziwe info - nie jest wyczerpana, czy raczej tylko zaślepka?) :

hvac_modes:
  - auto
  - heat
min_temp: 5
max_temp: 50
target_temp_step: 0.5
current_temperature: 22
temperature: 18
channel_id: 34-1
not_responding: false
waiting_to_synchronize: false
battery_status: false
temperature_old: 220
friendly_name: Sypialnia
supported_features: 1

Powinno się dać,.ale nie posiadam tego urządzenia i nie mam też już dostępu do logów z EFC-01 od kolegi shibby, więc nie wiem już jak wygląda model danych RGT w protokole Extalife. Jeśli zarejestrujesz komunikację między telefonem, a kontrolerem to zobaczymy co da się zrobić
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

admin

A informacje o baterii są skopiowane z protokołu Extalife i pokazują to co wysyła kontroler do aplikacji. Jeśli cos się nie zgadza to już Zamela trzeba pytać  :)
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

admin

To ciekawe. Z ciekawości odpaliłem na chwilę swoją instancję HA deweloperską i użyłem funkcji ponownego wczytania integracji i nie mam żadnego błędu. Integracja wczytuje się od nowa poprawnie. HA 2021.12.0. Może to jednak kwestia AIS? Na instancji produkcyjnej 2021.10 nie próbowałem. Może jutro spróbuję
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

Fantomas

Cytat: admin w Październik 28, 2021, 19:46:09
A informacje o baterii są skopiowane z protokołu Extalife i pokazują to co wysyła kontroler do aplikacji. Jeśli cos się nie zgadza to już Zamela trzeba pytać  :)
A to ciekawa różnorodność, bo dla innych encji (np. sensor.*) battery_status jest 0/1, a tutaj jest true/false  :)
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.

admin

Cytat: Fantomas w Październik 28, 2021, 22:50:51
Cytat: admin w Październik 28, 2021, 19:46:09
A informacje o baterii są skopiowane z protokołu Extalife i pokazują to co wysyła kontroler do aplikacji. Jeśli cos się nie zgadza to już Zamela trzeba pytać  :)
A to ciekawa różnorodność, bo dla innych encji (np. sensor.*) battery_status jest 0/1, a tutaj jest true/false  :)
Poza Zamelem raczej nikt nie wie dlaczego tak to tutaj jest a gdzie indziej inaczej. Generalnie są pewne niekonsekwencje w protokole Exta Life, a to jest kolejna z nich. Generalnie atrybuty encji mają poza kilkoma wyjątkami dla licznika MEM-21 wartości takie jak przysyła kontroler bez żadnych zmian.
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

Fantomas

Coś tam udało mi się namierzyć  ;D
Z odpowiedzi na komendę 25:

{
   "status":"success",
   "command":25,
   "data":{
      "sync_time":1635684838,
      "last_sync":267,
      "time":1635685105,
      "hist_temperatures_max":5,
      "hist_temperatures_min":5,
      "alarm_temperatures_max":900,
      "alarm_temperatures_min":100,
      "readings_time":300,
      "synch_time":2,
      "valve_val":100,
      "button_lock":false,
      "global_temperatures":[
         180,
         200,
         240,
         220
      ],
      "colors":[
         10092339,
         10092531,
         16773887,
         2236979
      ]
   }
}


valve_val - zamknięcie zaworu (100%, czyli zamknięty)
sync_time - znacznik czasowy ostatniej synchronizacji (zapewne :D )

Są jeszcze zapytania dzięki którym można wyciągnąć harmonogram z głowicy i go ustawić. Do tego potrzebne będzie ustawienie global_temperatures z powyższej encji, więc ich odczyt przyszłościowo też może się przydać (w tablicy po kolei: 'poza domem', 'ekonomiczna', 'komfortowa', 'użytkownika'. Tak samo kolorki do nich przypisane w tablicy colors.
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.

shibby

@Fantomas

ja mam tak
      sync_grzejnik_salon:
        friendly_name: "Salon synch."
        value_template: "{{ state_attr('climate.grzejnik_salon', 'waiting_to_synchronize') }}"
      batt_grzejnik_salon:
        friendly_name: "Wymiana baterii"
        value_template: "{{ state_attr('climate.grzejnik_salon', 'battery_status') }}"


jeżeli jedno albo drugie zbyt długo jest na True to jest to dla mnie info że bateria nadaje się do wymiany.

dla pozostałych czujników tj multisenson czy czujka ruchu mam tak
lastsync_multisensor_salon:
        friendly_name: "Multi. salon"
        value_template: "{{ state_attr('sensor.multisensor_salon_5', 'sync_time') | timestamp_custom('%Y-%m-%d %H:%M') }}"


czyli data ostatniej synchronizacji.
Elementy systemu, których używam: EFC-01, 1x RNK-22, 2x RNK-24, P-457/2, ROP-21, 3x ROP-22, RDP-21, 2x RGT-01, SLR-21, SLR-22, 3x RCK, 2x RCM, RCZ, RCR

Fantomas

Moja wariacja na temat, do włożenia do karty markdown:


{% if state_attr('climate.salon','waiting_to_synchronize') -%}
<ha-icon icon="mdi:sync"></ha-icon> Czekam na synchronizację z głowicą.
{%- else -%}
<ha-icon icon="mdi:check"></ha-icon> Ustawienia zsynchronizowane z głowicą.
{%- endif %}
{% if state_attr('climate.salon', 'battery_status') -%}
<ha-icon icon="mdi:battery-low"></ha-icon> Bateria do wymiany.
{%- else -%}
<ha-icon icon="mdi:battery-high"></ha-icon> Bateria OK.
{%- endif %}


Jednakowoż czas synchronizacji by się też przydał - żeby wiedzieć, czy w zadanych interwałach komunikacja z głowicą następuje.
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.

admin

#237
Cytat: Fantomas w Październik 31, 2021, 17:06:49
Coś tam udało mi się namierzyć  ;D
Z odpowiedzi na komendę 25:

{
   "status":"success",
   "command":25,
   "data":{
      "sync_time":1635684838,
      "last_sync":267,
      "time":1635685105,
      "hist_temperatures_max":5,
      "hist_temperatures_min":5,
      "alarm_temperatures_max":900,
      "alarm_temperatures_min":100,
      "readings_time":300,
      "synch_time":2,
      "valve_val":100,
      "button_lock":false,
      "global_temperatures":[
         180,
         200,
         240,
         220
      ],
      "colors":[
         10092339,
         10092531,
         16773887,
         2236979
      ]
   }
}


valve_val - zamknięcie zaworu (100%, czyli zamknięty)
sync_time - znacznik czasowy ostatniej synchronizacji (zapewne :D )

Są jeszcze zapytania dzięki którym można wyciągnąć harmonogram z głowicy i go ustawić. Do tego potrzebne będzie ustawienie global_temperatures z powyższej encji, więc ich odczyt przyszłościowo też może się przydać (w tablicy po kolei: 'poza domem', 'ekonomiczna', 'komfortowa', 'użytkownika'. Tak samo kolorki do nich przypisane w tablicy colors.
Ah tak, teraz pamiętam. Ktoś już kiedyś o tym pisał. To osobna komenda do zaimplementowania. Szkoda, że tak to Zamel wymyślił, bo to dość mocno komplikuje mi sprawę, bo dla pewnego rodzaju urządzeń trzebaby robić dodatkowe zapytania. A w zasadzie żeby było ładnie i spójnie to dla każdego trzebaby robić takie zapytanie, a to niestety oznacza, że kontroler musiałby wykonać dodatkowe zapytanie do każdego urządzenia. W rezultacie całkowity czas odpytywania wszystkich urządzeń (cyklicznie co 5 minut) znacznie się wydłuży, a co za tym idzie - szansa, że nastąpi zakłócenie transmisji jakiegoś czujnika lub sygnał sterujący z kontrolera lub nadajnika/pilota nie dotrze do odbiornika. Generalnie czas zajętości radia należy zdecydowanie minimalizować.
Ale nie wykluczam, że zastanowię się, może jako kwestia konfiguracji w integracji. Będzie można to sobie włączyć dodatkowo i wtedy encje zyskają dodatkowe informacje.
Tyle że z czasem u mnie już nie tak dobrze jak w 2018,19 i nawet 2020 roku i gdybym teraz miał robić integrację z ExtaLife to zajęłoby mi to nieporównywalnie więcej czasu.
Ale nie wykluczam, że jak sytuacja się zmieni to coś tutaj dodam.

Żeby mi trochę ułatwić sprawę w przyszłości to mam zadanie dla ciebie: uzupełnienie naszej wiki o opis komendy 25 - pod tym adresem. Jako referencyjny przykład może być ten (poziom szczegółowości): https://www.forumextalife.pl/wiki/index.php/EFC-01:TCP/IP:Polecenia:FetchDevicesFromCategory, lub ten: https://www.forumextalife.pl/wiki/index.php/EFC-01:TCP/IP:Polecenia:ControlDevice

To usystematyzuje wiedzę o protokole i ułatwi odnajdywanie potrzebnych do implementacji informacji. Powodzenia!

PS. Logowanie do wiki działa przez autoryzację forum - ten sam user i hasło jaki masz na forum
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

SebiCo

#238
Wiem, że to "druciarnia, ale...

Mam skrypty dla:
-synchronizacji (sync.py)

import socket
host = '192.168.1.136'
port = 20400
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'{"command":1,"data":{"login":"login","password":"haslo"}}')
data = s.recv(1024)
s.sendall(b'{"command":25,"data": {"channel":1,"id":18}}')
data = s.recv(1024)
lista = str(data)
print(lista[lista.find('last_sync')+11:lista.find('"time"')-1])


- otwarcia zaworu (zaw.py)

import socket
host = '192.168.1.136'
port = 20400
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'{"command":1,"data":{"login":"login","password":"haslo"}}')
data = s.recv(1024)
s.sendall(b'{"command":25,"data": {"channel":1,"id":18}}')
data = s.recv(1024)
lista = str(data)
print(str(100 - lista[lista.find('valve_val')+11:lista.find('"button_lock"')-2]))


W sensorach mam dodane

- platform: command_line
  name: Sync zawór kuchnia
  command: "python sciezka_do_pliku/sync.py"
  unit_of_measurement: "s"
  scan_interval: 300
 
- platform: command_line
  name: Zawór kuchnia
  command: "python sciezka_do_pliku/zaw.py"
  unit_of_measurement: "%"
  scan_interval: 300

 
Oczywiście trzeba zmienić na swoje: ip, login, hasło, id zaworu i ścieżkę do plików.

i u mnie działa ;)

Jak widać poniżej zawór w kuchni ma problemy, alarm mam ustawiony na > 3600 więc niedługo dostane maila ;)

admin

Cytat: SebiCo w Listopad 03, 2021, 22:48:17
Wiem, że to "druciarnia, ale...

Mam skrypty dla:
-synchronizacji (sync.py)

import socket
host = '192.168.1.136'
port = 20400
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'{"command":1,"data":{"login":"login","password":"haslo"}}')
data = s.recv(1024)
s.sendall(b'{"command":25,"data": {"channel":1,"id":18}}')
data = s.recv(1024)
lista = str(data)
print(lista[lista.find('last_sync')+11:lista.find('"time"')-1])


- otwarcia zaworu (zaw.py)

import socket
host = '192.168.1.136'
port = 20400
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'{"command":1,"data":{"login":"login","password":"haslo"}}')
data = s.recv(1024)
s.sendall(b'{"command":25,"data": {"channel":1,"id":18}}')
data = s.recv(1024)
lista = str(data)
print(str(100 - lista[lista.find('valve_val')+11:lista.find('"button_lock"')-2]))


W sensorach mam dodane

- platform: command_line
  name: Sync zawór kuchnia
  command: "python sciezka_do_pliku/sync.py"
  unit_of_measurement: "s"
  scan_interval: 300
 
- platform: command_line
  name: Zawór kuchnia
  command: "python sciezka_do_pliku/zaw.py"
  unit_of_measurement: "%"
  scan_interval: 300

 
Oczywiście trzeba zmienić na swoje: ip, login, hasło, id zaworu i ścieżkę do plików.

i u mnie działa ;)

Jak widać poniżej zawór w kuchni ma problemy, alarm mam ustawiony na > 3600 więc niedługo dostane maila ;)
Świetna robota kolego! :) Na pewno komuś się przyda. ExtaLife zdecydowanie stwarza potrzebę bycia wynalazcą :D Jest to dodatkowo świetny przykład jak genialnym systemem jest HA - można nim nawet leczyć niedociągnięcia innych systemów jak ten nasz.
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