Natywna integracja z Home Assistant (komponent) 2.2

  • 250 Odpowiedzi
  • 18365 Wyświetleń
Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #60 dnia: Października 11, 2022, 09:45:46 »
Ok. Spróbuję ogarnąć dzisiaj wieczorem. Podeślę pull-request.
Produkcja:RPi5,EFC-01; Sensory:MEM-21,RCK-21,9xRCM-21,2xRCR-21,RCW-21; Odbiorniki: 2xROB-21, 5xROG-21,11xROP-21,11xROP-22,1xRDP-21,11xSRP-22; Nadajniki: 2xP-457/36,4xP-457/4,P-457/8,P-521L,1xRNK-22,1xRNK-24 | Developer:RPi4,EFC-01,RCK-21,ROB-21,ROP-22,ROG-21,RCM-21

Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #61 dnia: Października 12, 2022, 15:02:58 »
Hallo admin ;),
cos z ostatnim commitem nie tak bo w __init__.py mam import DOMAIN_VIRTUAL_BINARY_SENSOR_SENSOR z .helpers.const ale na podstawie kodu i zmian nie jestem w stanie wymyślić co autor miał na myśli.
Jakieś sugestie ?

Na razie,
Gadulowaty
Produkcja:RPi5,EFC-01; Sensory:MEM-21,RCK-21,9xRCM-21,2xRCR-21,RCW-21; Odbiorniki: 2xROB-21, 5xROG-21,11xROP-21,11xROP-22,1xRDP-21,11xSRP-22; Nadajniki: 2xP-457/36,4xP-457/4,P-457/8,P-521L,1xRNK-22,1xRNK-24 | Developer:RPi4,EFC-01,RCK-21,ROB-21,ROP-22,ROG-21,RCM-21

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #62 dnia: Października 12, 2022, 15:57:26 »
Hallo admin ;),
cos z ostatnim commitem nie tak bo w __init__.py mam import DOMAIN_VIRTUAL_BINARY_SENSOR_SENSOR z .helpers.const ale na podstawie kodu i zmian nie jestem w stanie wymyślić co autor miał na myśli.
Jakieś sugestie ?

Na razie,
Gadulowaty

Jeden plik się nie przerzucił - właśnie const.py. Wrzuciłem go teraz. Powinno być już ok
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.2
« Odpowiedź #63 dnia: Października 12, 2022, 16:22:12 »
Super dzięki. Testuję właśnie zmiany i jest tylko jeden problem dla RCM - tam idą cztery kanały i dla każdego jest tworzony sensor baterii. Myślę że to nie ma sensu i wystarczy tworzyć tylko encje sensora baterii dla kanału 1. W tej chwili to wygląda tak:

def push_virtual_sensor_channels(self, virtual_sensor_domain: str, channel_data: dict):
        """Push additional, virtual sensor channels for entity attributes. These should be
        processed by all platforms during platform setup and ultimately sensor entities
        shouldbe created by the sensor platform"""

        virtual_sensors = self._get_virtual_sensors()
        _LOGGER.debug("Virtual sensors: %s", virtual_sensors)
        for virtual in virtual_sensors:
            v_channel_data = channel_data.copy()
            v_channel_data.update({VIRT_SENSOR_CHN_FIELD: virtual})
            self.core.push_channels(
                virtual_sensor_domain, v_channel_data, append=True, custom=True
            )


moja propozycja zmiany to takie coś:

    def push_virtual_sensor_channels(self, virtual_sensor_domain: str, channel_data: dict):
        """Push additional, virtual sensor channels for entity attributes. These should be
        processed by all platforms during platform setup and ultimately sensor entities
        shouldbe created by the sensor platform"""

        virtual_sensors = self._get_virtual_sensors()
        _LOGGER.debug("Virtual sensors: %s", virtual_sensors)
       
        data = self.channel_data
        channel = data.get("channel")

        for virtual in virtual_sensors:
            if channel > 1:
                sensor_class = virtual.get(VIRT_SENSOR_DEV_CLS)
                if sensor_class == SensorDeviceClass.BATTERY:
                    continue


            v_channel_data = channel_data.copy()
            v_channel_data.update({VIRT_SENSOR_CHN_FIELD: virtual})
            self.core.push_channels(
                virtual_sensor_domain, v_channel_data, append=True, custom=True
            )

A tak poza tym to wygląda to naprawdę nieźle. Kawał dobrej roboty.

Na razie,
Gadulowaty

PS: Możesz podrzucić swoje ustawienia do pylinta ?
« Ostatnia zmiana: Października 12, 2022, 16:40:11 wysłana przez Gadulowaty »
Produkcja:RPi5,EFC-01; Sensory:MEM-21,RCK-21,9xRCM-21,2xRCR-21,RCW-21; Odbiorniki: 2xROB-21, 5xROG-21,11xROP-21,11xROP-22,1xRDP-21,11xSRP-22; Nadajniki: 2xP-457/36,4xP-457/4,P-457/8,P-521L,1xRNK-22,1xRNK-24 | Developer:RPi4,EFC-01,RCK-21,ROB-21,ROP-22,ROG-21,RCM-21

Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #64 dnia: Października 12, 2022, 16:59:19 »
Aloha admin,
Jeszcze jeden jeden błąd do poprawki w pliku const.py jest:
DOMAIN_VIRTUAL_SENSORS = (
    DOMAIN_VIRTUAL_SENSOR,
    DOMAIN_VIRTUAL_CLIMATE_SENSOR,
    DOMAIN_VIRTUAL_COVER_SENSOR,
    DOMAIN_VIRTUAL_LIGHT_SENSOR,
    DOMAIN_VIRTUAL_SWITCH_SENSOR,

)

powinno być:
DOMAIN_VIRTUAL_SENSORS = (
    DOMAIN_VIRTUAL_SENSOR,
    DOMAIN_VIRTUAL_CLIMATE_SENSOR,
    DOMAIN_VIRTUAL_COVER_SENSOR,
    DOMAIN_VIRTUAL_LIGHT_SENSOR,
    DOMAIN_VIRTUAL_SWITCH_SENSOR,
    DOMAIN_VIRTUAL_BINARY_SENSOR_SENSOR,
)

bo tak jak jest to wirtualne sensory nie są tworzone dla BINARY_SENSOR.

Na razie,
Gadulowaty
Produkcja:RPi5,EFC-01; Sensory:MEM-21,RCK-21,9xRCM-21,2xRCR-21,RCW-21; Odbiorniki: 2xROB-21, 5xROG-21,11xROP-21,11xROP-22,1xRDP-21,11xSRP-22; Nadajniki: 2xP-457/36,4xP-457/4,P-457/8,P-521L,1xRNK-22,1xRNK-24 | Developer:RPi4,EFC-01,RCK-21,ROB-21,ROP-22,ROG-21,RCM-21

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #65 dnia: Października 12, 2022, 17:47:57 »
Super dzięki. Testuję właśnie zmiany i jest tylko jeden problem dla RCM - tam idą cztery kanały i dla każdego jest tworzony sensor baterii. Myślę że to nie ma sensu i wystarczy tworzyć tylko encje sensora baterii dla kanału 1. W tej chwili to wygląda tak:

def push_virtual_sensor_channels(self, virtual_sensor_domain: str, channel_data: dict):
        """Push additional, virtual sensor channels for entity attributes. These should be
        processed by all platforms during platform setup and ultimately sensor entities
        shouldbe created by the sensor platform"""

        virtual_sensors = self._get_virtual_sensors()
        _LOGGER.debug("Virtual sensors: %s", virtual_sensors)
        for virtual in virtual_sensors:
            v_channel_data = channel_data.copy()
            v_channel_data.update({VIRT_SENSOR_CHN_FIELD: virtual})
            self.core.push_channels(
                virtual_sensor_domain, v_channel_data, append=True, custom=True
            )


moja propozycja zmiany to takie coś:

    def push_virtual_sensor_channels(self, virtual_sensor_domain: str, channel_data: dict):
        """Push additional, virtual sensor channels for entity attributes. These should be
        processed by all platforms during platform setup and ultimately sensor entities
        shouldbe created by the sensor platform"""

        virtual_sensors = self._get_virtual_sensors()
        _LOGGER.debug("Virtual sensors: %s", virtual_sensors)
       
        data = self.channel_data
        channel = data.get("channel")

        for virtual in virtual_sensors:
            if channel > 1:
                sensor_class = virtual.get(VIRT_SENSOR_DEV_CLS)
                if sensor_class == SensorDeviceClass.BATTERY:
                    continue


            v_channel_data = channel_data.copy()
            v_channel_data.update({VIRT_SENSOR_CHN_FIELD: virtual})
            self.core.push_channels(
                virtual_sensor_domain, v_channel_data, append=True, custom=True
            )

Wstępnie myślałem, żeby to było zrobione na zasadzie konfiguracji opartej o dictionary - tak jak dla device class sensorów, tylko tutaj byłobyby przyporządkowanie atrybut:config. To byłby dictionary na zasadzie filter, czyli brak wpisu oznacza, że tworzymy sensor bezwarunkowo, a pasujący wpis oznacza, że nie tworzymy jeśli warunki się nie zgodzą..
Na początek byłby tylko filtr oparty o numer kanału, a kiedyś w razie potrzeby możnaby to rozbudować.
Przykładowy konfig wyglądałby tak:
w sensor.py:

VIRTUAL_SENSOR_RESTRICTIONS = {
  "battery_status": {"allowed_channels": (1)}
}
Wtedy czytasz dict dla atrybutu, odczytujesz "allowed_channels", sprawdzasz funkcją indexof() czy aktualny channel jest na liście i jeśli jest to ok, a jeśli nie to nie tworzymy. Tylko tą logikę trzebaby zbudować zamiast tutaj to w funkcję _get_virtual_sensors. Wtedy mielibyśmy filtrowanie na poprawnym poziomie bez sytuacji, że liczba zwróconych przez get_virtual_sensors sensorów będzie mniejsza niż liczba utworzonych. Byłoby to trochę mylące, a tak to tego unikniemy.
A jeszcze bardziej zaawansowana wersja zamiast dict "allowed_channels" mogłaby być klasą ze statycznym atrybutem "allowed_channels" - rozwiązanie podobne do SENSOR_TYPES w sensor.py. To rozwiązanie (klasy konfiguracyjne) upowszechnia się w kodzie HA i bardzo mi się podoba z tego względu, że wtedy mamy podpowiadanie kodu i walidację nazw pól już na poziomie pythonowej kompilacji. Nie trzeba także tworzyć constantów dla kolejnych pól dictionary, bo operujemy na statycznych atrybutach, które mają swoje nazwy. Generalnie python jest ciekawym językiem, ale brak typów w nim mnie wkurza. Do większych projektów to bardziej przeszkadza niż pomaga. W kodzie HA praktycznie wszystko jest typowane (tzn. pseudotypowane, bo to działa tylko w edytorze a nie runtime) - i to pomaga szybciej pisać kod i unikać błędów.

Generalnie coraz bardziej podoba mi się logika oparta o dictionary config, czyli unikanie ifów i elsów, a zamiast nich zdefiniowanie co, kiedy i do czego. Wtedy sam kod jest zwięzły i chyba bardziej czytelny. Integracja w większości nie jest tak napisana, bo wtedy jeszcze tej koncepcji nie znałem, ale jak zabrałem się za przebudowę sensora i przenanalizowałem kilka integracji, to już z tego skorzystałem i musze przyznać, że efekt mi się podoba :)

Cytuj
PS: Możesz podrzucić swoje ustawienia do pylinta ?
Mogę jak mi powiesz skąd je wziąć :) W dev container on po prostu jest samoczynnie uaktywniony i ma konfigurację zgodną z developmenem HA. Nie wnikałem skąd się to wzięło i jak go skonfigurować. Dlatego koncepcja dev container mi się tak podoba. Jeśli coś developerzy HA zmienią w ustawieniach to ja też to samoczynnie zobaczę przy najbliższej synchronizacji mojego forka z repo HA Core.
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.2
« Odpowiedź #66 dnia: Października 12, 2022, 17:48:32 »
Aloha admin,
Jeszcze jeden jeden błąd do poprawki w pliku const.py jest:
DOMAIN_VIRTUAL_SENSORS = (
    DOMAIN_VIRTUAL_SENSOR,
    DOMAIN_VIRTUAL_CLIMATE_SENSOR,
    DOMAIN_VIRTUAL_COVER_SENSOR,
    DOMAIN_VIRTUAL_LIGHT_SENSOR,
    DOMAIN_VIRTUAL_SWITCH_SENSOR,

)

powinno być:
DOMAIN_VIRTUAL_SENSORS = (
    DOMAIN_VIRTUAL_SENSOR,
    DOMAIN_VIRTUAL_CLIMATE_SENSOR,
    DOMAIN_VIRTUAL_COVER_SENSOR,
    DOMAIN_VIRTUAL_LIGHT_SENSOR,
    DOMAIN_VIRTUAL_SWITCH_SENSOR,
    DOMAIN_VIRTUAL_BINARY_SENSOR_SENSOR,
)

bo tak jak jest to wirtualne sensory nie są tworzone dla BINARY_SENSOR.

Na razie,
Gadulowaty
Racja - przeoczenie. Poprawiaj śmiało :)
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.2
« Odpowiedź #67 dnia: Października 12, 2022, 18:17:00 »
Pull request sent.
Produkcja:RPi5,EFC-01; Sensory:MEM-21,RCK-21,9xRCM-21,2xRCR-21,RCW-21; Odbiorniki: 2xROB-21, 5xROG-21,11xROP-21,11xROP-22,1xRDP-21,11xSRP-22; Nadajniki: 2xP-457/36,4xP-457/4,P-457/8,P-521L,1xRNK-22,1xRNK-24 | Developer:RPi4,EFC-01,RCK-21,ROB-21,ROP-22,ROG-21,RCM-21

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #68 dnia: Października 12, 2022, 18:50:53 »
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.2
« Odpowiedź #69 dnia: Października 18, 2022, 22:53:33 »
Hej. Jako, że zaczął się sezon grzewczy jeśli znajdziecie wolne moce przerobowe i oczywiście chęci, może przyjrzycie się tematowi implementacji odczytu % otwarcia głowicy i czasu synchronizacji z RGT-21?
Dla przypomnienia podsyłam LINKA

Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #70 dnia: Października 19, 2022, 07:57:41 »
Hej. Jako, że zaczął się sezon grzewczy jeśli znajdziecie wolne moce przerobowe i oczywiście chęci, może przyjrzycie się tematowi implementacji odczytu % otwarcia głowicy i czasu synchronizacji z RGT-21?
Dla przypomnienia podsyłam LINKA
Popieram.

Ale zanim rozgrzebiecie moduł głowic, to poprosiłbym nieśmiało o "stabilną" wersję 2.2b5, bo 2.2b4 (AIS DEV3 kanał stabilny) wrzucone na próbę startuje u mnie bez końca.
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.2
« Odpowiedź #71 dnia: Października 19, 2022, 08:18:05 »
Myślę, że u Ciebie problemem jest właśnie ten "kanał stabilny".
U mnie AIS w wersji 2022.10.3 i extalife 2.2b4 działa bez problemu.
Stety/niestety HA dość ostro się zmienia i szybko traci na kompatybilności.

*

Offline admin

  • *****
  • 1657
  • Twórca i moderator forum
    • Zobacz profil
    • Forum ExtaLife
Odp: Natywna integracja z Home Assistant (komponent) 2.2
« Odpowiedź #72 dnia: Października 19, 2022, 09:43:32 »
Hej. Jako, że zaczął się sezon grzewczy jeśli znajdziecie wolne moce przerobowe i oczywiście chęci, może przyjrzycie się tematowi implementacji odczytu % otwarcia głowicy i czasu synchronizacji z RGT-21?
Dla przypomnienia podsyłam LINKA
Popieram.

Ale zanim rozgrzebiecie moduł głowic, to poprosiłbym nieśmiało o "stabilną" wersję 2.2b5, bo 2.2b4 (AIS DEV3 kanał stabilny) wrzucone na próbę startuje u mnie bez końca.
Myślę podobnie jak kolega @SebiCo. Z jakiegoś powodu problemem może być wersja HA. Kolega @tool również raportował problemy na którejś wersji HA, ale chyba zaktualizował HA do nowszej wersji i wszystko zaczęło działać (?). Kolego @tool daj znać jak u ciebie.

Generalnie w integracji w kwestii stabilności nic się nie zmieniło od wersji 2.2b4. 2.2b5 będize miała kilka drobnych usprawnień niezwiązanych ze stabilnością.
Jeśli nie ma u ciebie żadnego błędu w logach związanych z integracją, to trudno będzie dojść do tego co może być problemem, że u ciebie startuje bez końca. Kolega @tool miał identyczny problem
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.2
« Odpowiedź #73 dnia: Października 19, 2022, 09:57:08 »
Hej. Jako, że zaczął się sezon grzewczy jeśli znajdziecie wolne moce przerobowe i oczywiście chęci, może przyjrzycie się tematowi implementacji odczytu % otwarcia głowicy i czasu synchronizacji z RGT-21?
Dla przypomnienia podsyłam LINKA
hehe, tak ostatnio myślałem, że ten temat pewnie powróci :) Na razie wolnych mocy przerobowych brak. Za mało czasu. Nie miałem nawet czasu, żeby dokończyć i wydać 2.2b5, ale nie wykluczam, że niespodziewanie znajdzie się potrzebna chwila na to, tylko nie wiem kiedy.

A odnośnie głowic - tak czy owak, żeby zaoszczędzić sobie nerwów i czasu potrzebne będą logi komendy 25 dla głowic. W ciemno trudno to zrobić, a przynajmniej zajmuje to nieporównywalnie więcej czasu zarówno w implementacji jak i potem w testowaniu i poprawianiu kolejnych błędów wynikających z braku posiadanego urządzenia i braku możliwości lokalnego testowania. Ten link daje za mało informacji.
Potrzebuję 2 rzeczy:
1. log dla komendy 37 dla głowicy
2. log dla komendy 25 dla głowicy
Także kolego @SebiCo i @Fantomas - wrzućcie to tutaj na forum i jak przyjdzie odpowiedni moment to przynajmniej potrzebne dane będą gotowe i praca pójdzie szybciej
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.2
« Odpowiedź #74 dnia: Października 19, 2022, 10:22:49 »
Myślę, że u Ciebie problemem jest właśnie ten "kanał stabilny".
U mnie AIS w wersji 2022.10.3 i extalife 2.2b4 działa bez problemu.
Stety/niestety HA dość ostro się zmienia i szybko traci na kompatybilności.
Ok, czyli robota na weekend  ;D Trochę tylko nie wiem w jakiej kolejności to ogarnąć.
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.