# Bramka: Własny komponent w Asystencie domowym

**URL:** <https://ai-speaker.discourse.group/t/bramka-wlasny-komponent-w-asystencie-domowym/68>\
**Category:** Komponenty niestandardowe\
**Created:** [18 Grudzień 2019 09:27 UTC](https://ai-speaker.discourse.group/t/bramka-wlasny-komponent-w-asystencie-domowym/68 "2019-12-18T09:27:53Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Autor:** ![Celina](https://yyz2.discourse-cdn.com/free1/user_avatar/ai-speaker.discourse.group/celina/32/27_2.png) [@Celina](https://ai-speaker.discourse.group/u/Celina)\
**Data wpisu:** [18 Grudzień 2019 09:27 UTC](https://ai-speaker.discourse.group/t/bramka-wlasny-komponent-w-asystencie-domowym/68/1 "2019-12-18T09:27:53Z")

</div>

## Cel dodania własnego komponentu

Przeszukałeś 1400 gotowych komponentów i nie znalazłeś możliwości integracji ze swoim urządzeniem? Coś nie do końca działa tak jak byś chciał i masz pomysł jak zrobić to lepiej? Siłą projektów OpenSource jest to, że masz dostęp do kodu i masz możliwość jego zmiany pod własne potrzeby. Nadszedł czas, aby napisać swój pierwszy kod do integracji.

Poniżej opiszemy krok po krok,u w jaki sposób dodać najprostszy komponent do Asystenta domowego.  
Bardziej obszerne przykłady integracji są dostępne w repozytorium przykładowych własnych integracji Home Assistant

> **[home-assistant/example-custom-config](https://github.com/home-assistant/example-custom-config/tree/master/custom_components/)**
>
> master/custom\_components/

## Folder z własnymi komponentami

W konsoli przechodzimy do folderu z konfiguracją Asystenta domowego

```bash
cd ~/AIS

```

dodajemy folder custom\_components

```bash
mkdir custom_components

```

następnie w folderze custom\_components dodajemy folder dla naszego komponentu, nazwijmy go **hej\_dom**

```bash
cd custom_components
mkdir hej_dom

```

przechodzimy do folderu hej\_dom i dodajemy 2 pliki:

1. **manifest.json** z opisem naszej integracji

```json
{
  "domain": "hej_dom",
  "name": "Moja integracja",
  "documentation": "https://link-do-dokumentacji.pl",
  "dependencies": [],
  "codeowners": [],
  "requirements": []
}

```

1. **init.py** z kodem naszej integracji

```python
DOMAIN = 'hej_dom'

async def async_setup(hass, config):
    hass.states.async_set('hej_dom.info', 'Cześć!')

    # Zwróć True, aby wskazać, że inicjalizacja komponentu powiodłTo jest całkiem proste — wprowadzimy Cię w ten proces krok po kroku.
a się.
    return True

```

### Dodanie naszej integracji do konfiguracji systemu

W konsoli przechodzimy do folderu z konfiguracją Asystenta domowego.

```bash
cd ~/AIS

```

Ulubionym edytorem tekstowym otwieramy plik configuration.yaml

```bash
nano configuration.yaml

```

i dodajemy na końcu następująca konfigurację.

```auto
hej_dom:

```

### Sprawdzenie konfiguracji i Restart serwera

Upewnijmy się, że nasza konfiguracja jest poprawna — w tym celu kliknij przycisk **Sprawdź konfigurację** dostępny w opcjach ogólnych systemu. Następnie restartujemy serwer przyciskiem **Uruchom ponownie**

 ![3faq_sensor_4](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/1X/1b6d028d08303f336c7df817df166a72a57dd38f.png)

### Nowa encja w systemie

W informacjach o stanie encji systemu możemy już odszukać nasz nowo dodany element systemu (encja hej\_dom) i zobaczyć jego status oraz atrybuty

 ![2faq_custom_component_1](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/1X/c5ef2d70e74706c87e9524e7b89e3039a0481465.png)

Oczywiście ten przykład to tylko wprowadzenie w temat, Twój docelowy komponent na pewno będzie bardziej przydatny niż ten z naszego przykładu. Celowo nie dodawaliśmy w kodzie żadnej logiki, żeby nie zaciemniać zagadnienia. Docelowy komponent może sprawdzać kursy walut, wyliczać prawdopodobieństwo wzrostów na giełdzie czy opadów lub zamawiać głosowo piwo — pełna dowolność, my nie osądzamy 😉  
Następnie taki nowy komponent możesz w łatwy sposób połączyć z innymi w systemie Asystent domowy za pomocą automatyzacji i gdy np. zapowiadany jest deszcz → nie włączasz podlewania trawnika lub gdy w kalendarzu masz rocznicę ślubu, to Asystent przypomina Ci o tym głosowo (a z czasem, będzie zamawiał kolację i włączał scenę romantyczną w salonie, itp).

### Dodanie komponentu do wydania Asystenta domowego

Jeżeli dojdziesz do wniosku, że Twój komponent jest tak fajny, że chcesz go udostępnić innym, to preferowana droga by to wykonać to **pull request do Home Assistant**

> **[home-assistant/core](https://github.com/home-assistant/core)**
>
> :house\_with\_garden: Open source home automation that puts local control and privacy first

w ten sposób Twój komponent zostanie sprawdzony i przetestowany przez setki programistów oraz tysiące użytkowników, a następnie trafi oficjalnie do Asystenta domowego wraz w najnowszą wersją Home Assistenta.

### Problemy

Może się zdarzyć, że dodana własna integracja (w tym przykłdzie sterowanie telewizorem) nie przechodzi walidacji i nie działa poprawnie, objawia się to zwykle w ten sposób

 ![3faq_custom_component_2](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/1X/efb78cc925602026ae473b8eb1a2700c6c05b1fc.png)

oznacza to, że nie udało się Asystentowi domowemu zwalidować i zaimportować komponentu z folderu custom\_components. Przyczyną może być błąd w kodzie lub brak na urządzeniu biblioteki, która używana jest w tej integracji.  
To, co należy w takim przypadku zrobić, to sprawdzić kod integracji oraz dostępność na urządzeniu bibliotek stosowanych w integracji.

 ![4faq_custom_component_3](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/1X/e066cb91df1a618a20c1519c9423c8508f0d1911.png)

W powyższym przypadku widzimy, że w kodzie importowany jest pakiet wakeonlan, ale nie jest on dostępny na urządzeniu, więc go doinstalowujemy ręcznie.

Następnie wracamy do sprawdzenia konfiguracji, restart serwera i możemy już sterować naszym telewizorem.

 ![5faq_custom_component_4](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/1X/b7d2a7058022f6629adb6b56bc05815bd87cdc3d.png)

Gdy stosujemy własny komponent w logach pojawi się stosowne ostrzeżenie

 ![6faq_custom_component_5](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/1X/28bb6857df19d86de4e625e7b0fe7e486337cadf.png)
