====== Home Assistant ====== ===== Konfiguracja sieci ===== [[https://github.com/home-assistant/operating-system/blob/dev/Documentation/network.md]] ==== Konfiguracja WiFi ==== Jeżeli utraciliśmy dostęp do HA i chcemy go podłączyć do sieci WiFi możemy użyć karty SD naszego HA. Wyciągamy ją z naszego RPi i wkładamy do komputera/laptopa z systemem linux. W terminalu wydajemy polecenie ''fdisk -l''. Dysk /dev/sdb: 7,42 GiB, bajtów: 7969177600, sektorów: 15564800 Model dysku: Storage Device Jednostki: sektorów, czyli 1 * 512 = 512 bajtów Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512 Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512 Typ etykiety dysku: gpt Identyfikator dysku: 96A160B5-D519-482C-8AD5-11DD21BDD2DB Urządzenie Początek Koniec Sektory Rozmiar Typ /dev/sdb1 2048 67583 65536 32M Microsoft - zarezerwowana /dev/sdb2 67584 116735 49152 24M Linux - system plików /dev/sdb3 116736 641023 524288 256M Linux - system plików /dev/sdb4 641024 690175 49152 24M Linux - system plików /dev/sdb5 690176 1214463 524288 256M Linux - system plików /dev/sdb6 1214464 1230847 16384 8M Linux - system plików /dev/sdb7 1230848 1427455 196608 96M Linux - system plików /dev/sdb8 1427456 15564766 14137311 6,7G Linux - system plików Interesuje nas partycja ''/dev/sdb1'' która ma system plików zgodny z ''Microsoft - zarezerwowana''. Montujemy ją tymczasowo do katalogu ''/mnt'' poleceniem: mount /dev/sdb1 /mnt/ Na partycji widzimy: ls /mnt/ bcm2710-rpi-3-b.dtb bcm2710-rpi-zero-2.dtb bootcode.bin cmdline.txt fixup_cd.dat fixup_x.dat start_cd.elf start_x.elf bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-b.dtb boot.scr config.txt fixup.dat overlays start.elf u-boot.bin W katalogu ''/mnt'' tworzymy katalog ''config''. mkdir /mnt/config W nim katalog ''network''. mkdir /mnt/config/network W katalogu ''network'' tworzymy plik ''my-network'' z zawartością: [connection] id=my-network # uuid po wygenerowaniu uuid=1cf0cfd8-65e7-42a4-8844-c6844ff6891a type=802-11-wireless [802-11-wireless] mode=infrastructure ssid=NazwaSieci # Uncomment below if your SSID is not broadcasted #hidden=true [802-11-wireless-security] auth-alg=open key-mgmt=wpa-psk psk=tajnehaslo [ipv4] method=auto [ipv6] addr-gen-mode=stable-privacy method=auto Klucz uuid powinnismy wygenerować nowy. Przykładowo na stronie [[https://www.uuidgenerator.net/]] Po zapisaniu kartę umieszczamy w RPi i uruchamiamy. Poleceniem ''arp-scan'' sprawdzamy czy nasze RPi uzyskało adres IP. arp-scan -l --interface=wlp3s0 Interface: wlp3s0, type: EN10MB, MAC: 60:67:20:66:78:80, IPv4: 192.168.84.69 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.84.185 fe:20:b5:13:76:27 (Unknown: locally administered) 192.168.84.147 b8:27:eb:54:c3:26 Raspberry Pi Foundation 192.168.84.186 10:b2:32:22:4b:06 Qingdao Intelligent&Precise Electronics Co.,Ltd. Łączymy się [[http://192.168.84.147:8123]] Po połączeniu się z HA należy zapisać połączenie WiFi bo plik my-network i jego katalogi są już usunięte. Po restarcie byśmy się nie połączyli. ===== Aplikacja Home Assistant na Android ===== Czasami po instalacji aplikacji jest problem z zalogowaniem się do naszego serwera HA. Najczęściej pojawia się biały ekran i nic więcej się nie dzieje. Po pierwsze możemy sprawdzić czy wpisując ten sam adres URL do zwykłej przeglądarki Chrome naszego telefonu. Jeżeli nie działa lub nie dochodzi do autoryzacji to możemy spróbować wykonać aktualizację Chrome. Jeśli po aktualizacji możemy się połączyć to aplikacja również powinna działać prawidłowo. Najwidoczniej aplikacja HA wykorzystuje cześć zasobów Chroma. ===== Node-RED ===== Po instalacji dodatku przejść na zakładkę ''Konfiguracja''. Zaznaczyć ''Pokaż nieużywane opcjonalne opcje konfiguracji''. W polu ''credential_secret'' ustalić hasło. Wyłączyć opcję ''ssl''. Zapisać. Można uruchomić dodatek. Dodatkowo uaktywnić ''Uruchamianie przy starcie'', ''Obserwator'' oraz ''Pokaż na pasku bocznym''. ===== Kopia i przywracanie ===== Tworzenie kopii dd bs=4M if=/dev/mmcblk0 of=/home/user/HomeAssistant/obraz_8GB.img status=progress Przywracanie kopii dd bs=4M if=/home/user/HomeAssistant/obraz_8GB.img of=/dev/mmcblk0 status=progress ===== Zdalny dostęp ===== ==== Założenie domeny ==== Użyć serwisu [[https://www.ovhcloud.com/]] * Prosty interfejs * Widać koszt przedłużenia domeny w następnym roku. W panelu OVH zmieniamy jedynie w zakładce ''Serwery DNS''. Ich adresy odczytujemy z panelu Cloudflare. Przechodzimy do nasza_domena.ovh -> DNS -> Records i kopiujemy oba ''gabe.ns.cloudflare.com'' i ''sydney.ns.cloudflare.com'' do panelu OVH. Po zmianie trzeba zaczekać na aktualizację. ==== Założenie chmury na Cloudflare ==== https://www.cloudflare.com/ * Wybieramy wersję darmową * Po założeniu wybranej domeny w OVH dodajemy ją w panelu Cloudflare * Trzeba zaczekać na aktualizację serwerów DNS z Cloudflare wpisanych do OVH * Dopiero po potwierdzeniu przechodzimy do instalacji i konfiguracji dodatku Cloudflare w HomeAssistant ==== Instalacja dodatku Cloudflare w HomeAssistant ==== * Ustawienia -> Dodatki * Aby dodać Cloudflare należy dodać repozytorium * Wybieramy trzy kropki i dodajemy repozytorium [[https://github.com/brenner-tobias/ha-addons]] * Odświeżamy zakładkę dodatków * Instalujemy dodatek Cloudflare * W zakładce ''Konfiguracja'' dodajemy naszą domenę ''moja_domena.ovh'' * Kopiujemy z zakładki ''Dokumentacja'' dodatku wpis: http: use_x_forwarded_for: true trusted_proxies: - 172.30.33.0/24 * do pliku ''configuration.yaml'' HomeAssistant. Można to zrobić za pomocą dodatku ''File editor''. * Uruchamiamy dodatek Cloudflare * W zakładce ''Logi'' dodatku kopiujemy adres [[https://dash.cloudflare.com/argotunnel?...]] do przeglądarki celem autoryzacji tunelu. * Po pozytywnych logach przeładować HomeAssistant Logując się zdalnie do HomeAssistant wpisujemy [[https://moja_domena.ovh]] pamiętając o ''https''. ===== ESPHome ===== ==== Problem z kompilacją ==== Jeżeli jest problem z kompilacją to w konfiguracji dodatku ESPHome ustawienie ''compile_process_limit'' na wartość ''1'' powinno pomóc. Jeżeli to nie pomaga a uzywamy RPi 3B+ lub niższy to prawdopodobnie mamy problem z małą ilością pamięci RAM. Możemy dodać swap. * Instalujemy dodatek: Advanced SSH & Web Terminal * W dodatku wyłączamy tryb ochrony * W konfiguracji ustalamy użytkownika i hasło * Za linią **init_commands: []** dodajemy linię w formie jak niżej: init_commands: - if [ ! -f /backup/_swap.swap ]; then fallocate -l 2G /backup/_swap.swap && mkswap /backup/_swap.swap && chmod 0600 /backup/_swap.swap && swapon /backup/_swap.swap && echo SWAP_NEW_FILE_CREATED_USED ; elif [[ ! $(dmesg|grep _swap.swap) = *swap\ on* ]] ; then swapon /backup/_swap.swap && echo SWAP_USING_OLD_FILE ; else swapoff /backup/_swap.swap && swapon /backup/_swap.swap && echo SWAP_FINAL_ELSE_STATEMENT ; fi Po przeładowaniu systemu możemy się zalogować przez SSH i sprawdzić poleceniem ''htop'' zasoby systemu. Plik swap powinien pracować prawidłowo a kompilacja powinna się powieźć. Ponadto możemy usunąć wcześniej ustalony limit w opcji ''compile_process_limit''. Również ponownie możemy uruchomić ''tryb ochrony''. Należy zwrócić, że karta SD o pojemności 8GB to jest mało. Utworzenie pliku ''swap'' o wielkości 2GB praktycznie zajmie nam całą kartę. Do testów można utworzyć plik 1GB ale zalecane jest użycie karty SD minimum 16GB. ===== MCP23017 ===== Przykład: esphome: # To jest nazwa węzła. Powinien być zawsze unikalny w Twojej sieci ESPHome. # Może zawierać tylko małe litery, cyfry i łączniki i może mieć domyślnie # maksymalnie 24 znaki lub 31 znaków, jeśli name_add_mac_suffix # ma wartość false. Nazwa ta odpowiada nazwie pliku yaml. name: "esp8266plytka" # Przyjazna nazwa. Można uzywać spacji. Jest używana przez # Home Assistant jako nazwa integracji, nazwa urządzenia # i w razie potrzeby jest automatycznie poprzedzany elementami. friendly_name: Wemos D1 # Dodatkowe informacje tekstowe o tym węźle. # Tylko do wyświetlania w interfejsie użytkownika. comment: Płytka testowa z Wemos D1. # w postaci -aabbcc. Domyślnie jest to fałsz. # Zobacz Dodawanie adresu MAC jako przyrostka do nazwy urządzenia. name_add_mac_suffix: False esp8266: board: esp01_1m framework: version: recommended # Enable logging logger: # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password #manual_ip: # static_ip: 192.168.3.21 # gateway: 192.168.3.1 # subnet: 255.255.255.0 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "PLYTKA_TESTOWA" password: "skomplikowanehaslo" captive_portal: # Uruchomienie interfejsu i2c i2c: sda: GPIO4 scl: GPIO5 scan: true # frequency: 100kHz # Załadowanie obsługi ekspandera mcp23017 mcp23017: - id: 'mcp23017_U1' address: 0x20 - id: 'mcp23017_U2' address: 0x21 # Wyjścia do sterowania switch: - platform: gpio name: "Przekaźnik U1" id: przekaznik_u1 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U1 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik U2" id: przekaznik_u2 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U2 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik WeMos" id: przekaznik_wemos pin: number: GPIO12 inverted: false # Wejścia przycisków binary_sensor: - platform: gpio name: "Przycisk pin 1 układu MCP U1" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u1 pin: mcp23xxx: mcp23017_U1 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin 1 układu MCP U2" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u2 pin: mcp23xxx: mcp23017_U2 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin D7 WeMos" pin: number: GPIO13 inverted: True on_press: switch.toggle: przekaznik_wemos device_class: connectivity ==== Adresy wyjść ==== Maksymalnie do jednej linii I²C możemy podłączyć do ośmiu układów co da nam do dyspozycji 128 portów. ^ Adres ^ Pin ^ Układ ^ Nazwa ^ Chip address ^ A2 ^ A1 ^ A0 ^ Pin ^ Adres ^ | 8 | 1 | 0x20 | mcp23017_U1 | 000 | GND | GND | GND | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | | 8 | 1 | 0x21 | mcp23017_U2 | 001 | GND | GND | 3V3 | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | | 8 | 1 | 0x22 | mcp23017_U3 | 010 | GND | 3V3 | GND | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | | 8 | 1 | 0x23 | mcp23017_U4 | 011 | GND | 3V3 | 3V3 | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | | 8 | 1 | 0x24 | mcp23017_U5 | 100 | 3V3 | GND | GND | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | | 8 | 1 | 0x25 | mcp23017_U6 | 101 | 3V3 | GND | 3V3 | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | | 8 | 1 | 0x26 | mcp23017_U7 | 110 | 3V3 | 3V3 | GND | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | | 8 | 1 | 0x27 | mcp23017_U8 | 111 | 3V3 | 3V3 | 3V3 | 28 | 7 | | 9 | 2 | ::: | ::: | ::: | ::: | ::: | ::: | 27 | 6 | | 10 | 3 | ::: | ::: | ::: | ::: | ::: | ::: | 26 | 5 | | 11 | 4 | ::: | ::: | ::: | ::: | ::: | ::: | 25 | 4 | | 12 | 5 | ::: | ::: | ::: | ::: | ::: | ::: | 24 | 3 | | 13 | 6 | ::: | ::: | ::: | ::: | ::: | ::: | 23 | 2 | | 14 | 7 | ::: | ::: | ::: | ::: | ::: | ::: | 22 | 1 | | 15 | 8 | ::: | ::: | ::: | ::: | ::: | ::: | 21 | 0 | ===== TCA9548A ===== 8 połączonych dodatkowo MCP23017 daje nam 128 portów GPIO. Jeżeli będzie mało możemy zwiększyć ilość magistral I2C. Użycie układu da nam 8 kanałów I2C. Łącząc to z kolejnymi układami MCP23017 daje nam to teoretycznie 1024 porty. Ponadto możemy połączyć 8 układów TCA9548A a do nich po 64 układy MCP23017. Daje nam to 8192 porty. To jednak tylko teoria. Trzeba uwzględnić opóźnienia, zakłócenia i takie tam. Poniżej przykład konfiguracji: esphome: name: "esp8266plytka" friendly_name: Wemos D1 comment: Płytka testowa z Wemos D1. name_add_mac_suffix: False esp8266: board: esp01_1m framework: version: recommended # Enable logging logger: # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password #manual_ip: # static_ip: 192.168.3.21 # gateway: 192.168.3.1 # subnet: 255.255.255.0 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "PLYTKA_TESTOWA" password: "skomplikowanehaslo" captive_portal: # Uruchomienie interfejsu i2c i2c: - id: bus_a sda: GPIO4 scl: GPIO5 scan: true # Maksymalna częstotliwość pracy TCA9548A to 400kHz # Domyślna 50kHz # frequency: 400kHz tca9548a: # Adresowanie od 0x70, 0x71... do 0x77 - address: 0x70 id: multiplex0 i2c_id: bus_a channels: - bus_id: tca_can0 channel: 0 - bus_id: tca_can1 channel: 1 # Załadowanie obsługi ekspandera mcp23017 mcp23017: - id: 'mcp23017_U1' address: 0x20 i2c_id: tca_can0 - id: 'mcp23017_U2' address: 0x21 i2c_id: tca_can1 # Wyjścia do sterowania switch: - platform: gpio name: "Przekaźnik U1" id: przekaznik_u1 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U1 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik U2" id: przekaznik_u2 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U2 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik WeMos" id: przekaznik_wemos pin: number: GPIO12 inverted: false # Wejścia przycisków binary_sensor: - platform: gpio name: "Przycisk pin 1 układu MCP U1" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u1 pin: mcp23xxx: mcp23017_U1 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin 1 układu MCP U2" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u2 pin: mcp23xxx: mcp23017_U2 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin D7 WeMos" pin: number: GPIO13 inverted: True on_press: switch.toggle: przekaznik_wemos device_class: connectivity == Linki == [[http://domoticx.com/module-tca9548a-i2c-multiplexer/]] ===== Wyświetlacz na PCF8574, 1602, 16x2 ===== esphome: name: "esp8266plytka" friendly_name: Wemos D1 comment: Płytka testowa z Wemos D1. name_add_mac_suffix: False esp8266: board: esp01_1m framework: version: recommended # Enable logging logger: # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password #manual_ip: # static_ip: 192.168.3.21 # gateway: 192.168.3.1 # subnet: 255.255.255.0 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "PLYTKA_TESTOWA" password: "skomplikowanehaslo" captive_portal: # Uruchomienie interfejsu i2c i2c: - id: bus_a sda: GPIO4 scl: GPIO5 scan: true # Maksymalna częstotliwość pracy TCA9548A to 400kHz # Domyślna 50kHz # frequency: 100kHz tca9548a: # Adresowanie od 0x70, 0x71... do 0x77 - address: 0x70 id: multiplex0 i2c_id: bus_a channels: - bus_id: tca_can0 channel: 0 - bus_id: tca_can1 channel: 1 # Załadowanie obsługi ekspandera mcp23017 mcp23017: - id: 'mcp23017_U1' address: 0x22 i2c_id: tca_can0 - id: 'mcp23017_U2' address: 0x20 i2c_id: tca_can1 display: - platform: lcd_pcf8574 dimensions: 16x2 i2c_id: tca_can0 address: 0x27 id: lcd update_interval: 10s lambda: |- it.strftime(0, 0, "Godzina: %H:%M", id(my_time).now()); it.strftime(0, 1, "Data: %d.%m.%Y", id(my_time).now()); # it.printf(0, 1, "Hello Line2!"); # it.strftime("Czas: %H:%M Data: %d.%m.%Y", id(my_time).now()); time: - platform: homeassistant id: my_time # Wyjścia do sterowania switch: - platform: gpio name: "Przekaźnik U1" id: przekaznik_u1 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U1 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik U2" id: przekaznik_u2 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U2 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik WeMos" id: przekaznik_wemos pin: number: GPIO12 inverted: false # Wejścia przycisków binary_sensor: - platform: gpio name: "Przycisk pin 1 układu MCP U1" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u1 pin: mcp23xxx: mcp23017_U1 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin 1 układu MCP U2" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u2 pin: mcp23xxx: mcp23017_U2 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin D7 WeMos" pin: number: GPIO13 inverted: True on_press: switch.toggle: przekaznik_wemos device_class: connectivity ===== ESP32-S2 mini ===== ==== Podstawowa konfiguracja ==== esphome: name: esp32-mini01 friendly_name: esp32-mini01 comment: Smart Dunny Lolin S2 Mini esp32: board: lolin_s2_mini variant: ESP32S2 framework: type: esp-idf version: recommended # Custom sdkconfig options sdkconfig_options: CONFIG_COMPILER_OPTIMIZATION_PERF: y ==== Dwa porty I2C ==== esphome: name: esp32-mini01 friendly_name: esp32-mini01 comment: Smart Dunny Lolin S2 Mini esp32: board: lolin_s2_mini variant: ESP32S2 framework: type: esp-idf version: recommended # Optymalizacja kompliacji pod kątem wydajności. sdkconfig_options: CONFIG_COMPILER_OPTIMIZATION_PERF: y # Enable logging logger: # logs: # component: ERROR # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "PLYTKA_TESTOWA" password: "skomplikowanehaslo" captive_portal: # Konfiguracja portów i2c. # Domyślnie porty pracują z taktowaniem 50kHz. # Do prawidłowej pracy z układami MCP23017 częstotliwość # trzeba podwyższyc do minimum 800kHz. # Dalsze swiekszenie częstoptliwości będzie wymagać podniesienia napięcia zasilania # układów MCP23017 z 3,3V do 5V. i2c: - id: bus_a sda: 33 # SDA scl: 35 # SCL scan: False frequency: 800kHz - id: bus_b sda: 36 # SDA scl: 34 # SCL scan: False frequency: 800kHz # Załadowanie obsługi ekspandera mcp23017. # Do kazdego z portów bus_a i bus_b możemy podłączyć # po 8 układów MCP23017 mcp23017: - id: 'mcp23017_U1' address: 0x22 i2c_id: bus_a - id: 'mcp23017_U2' address: 0x20 i2c_id: bus_b # Wyjścia do sterowania switch: - platform: gpio name: "Przekaźnik U1" id: przekaznik_u1 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U1 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik U2" id: przekaznik_u2 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U2 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: true # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: false - platform: gpio name: "Przekaźnik WeMos S2 mini" id: przekaznik_wemos restore_mode: ALWAYS_OFF pin: number: GPIO1 inverted: false # Wejścia przycisków binary_sensor: - platform: gpio name: "Przycisk pin 1 układu MCP U1" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u1 pin: mcp23xxx: mcp23017_U1 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true # pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin 1 układu MCP U2" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u2 pin: mcp23xxx: mcp23017_U2 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: true # pullup: true # Jeżeli sterujemy minusem możemy ustawić - true inverted: true - platform: gpio name: "Przycisk pin 2 Wemos" pin: number: GPIO2 inverted: True on_press: switch.toggle: przekaznik_wemos device_class: connectivity ===== ESP-WROOM-32 ===== ^ ^ GPIO ^ PIN ^ ^ ^ PIN ^ GPIO ^ FUNCTION ^ | | | 1 | | | 38 | | GND | | | | 2 | | | 37 | 23 | VSPI MOSI | | | 36 | 3 | | | 36 | 22 | I2C A SCL | | | 39 | 4 | | | 35 | 1 | UART TX | | | 34 | 5 | | | 34 | 3 | UART RX | | | 35 | 6 | | | 33 | 21 | I2C A SDA | | | 32 | 7 | | | 32 | | GND | | | 33 | 8 | | | 31 | 19 | VSPI MISO | | | 25 | 9 | | | 30 | 18 | VSPI SCK | | | 26 | 10 | | | 29 | 5 | VSPI SS | | | 27 | 11 | | | 28 | 17 | I2C B SCL | | | 14 | 12 | | | 27 | 16 | I2C A SDA | | | 12 | 13 | | | 26 | 4 | ADC 10 | | | | 14 | | | 25 | 0 | ADC 11 | | | 13 | 15 | | | 24 | 2 | ADC 12 | | | 9 | 16 | | | 23 | 15 | ADC 13 | | | 10 | 17 | | | 22 | 8 | FLASH D1 | | | 11 | 18 | | | 21 | 7 | FLASH D0 | | | | 19 | | | 20 | 6 | FLASH SCK | ==== Przykład konfiguracji ESP-WROOM-32 ==== esphome: name: esp-wroom-32 friendly_name: ESP WROOM 32, 38 pins esp32: board: esp32dev framework: type: esp-idf version: recommended # Enable logging logger: # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password # use_address: '192.168.3.173' fast_connect: True domain: '.local' # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "TEST" password: "tajnehaslo" manual_ip: static_ip: 192.168.3.173 gateway: 192.168.3.1 subnet: 255.255.255.0 dns1: 192.168.3.1 dns2: 8.8.8.8 captive_portal: i2c: - id: m_bus_a sda: 21 # SDA scl: 22 # SCL scan: False # frequency: 100kHz - id: m_bus_b sda: 17 # SDA scl: 18 # SCL scan: False # frequency: 100kHz # Załadowanie obsługi ekspandera mcp23017 mcp23017: - id: 'mcp23017_U1' address: 0x20 i2c_id: m_bus_a - id: 'mcp23017_U2' address: 0x20 i2c_id: m_bus_b # Wyjścia do sterowania switch: - platform: gpio name: "Przekaźnik U1" id: przekaznik_u1 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U1 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: True # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: False - platform: gpio name: "Przekaźnik U2" id: przekaznik_u2 # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U2 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: True # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: False # Wejścia przycisków binary_sensor: - platform: gpio name: "Przycisk pin 1 układu MCP U1" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u1 pin: mcp23xxx: mcp23017_U1 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: True pullup: True # Jeżeli sterujemy minusem możemy ustawić - true inverted: True - platform: gpio name: "Przycisk pin 1 układu MCP U2" # Gdy naciśniesz to załącz "przekaznik" on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy switch.toggle: przekaznik_u2 pin: mcp23xxx: mcp23017_U2 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: True pullup: True # Jeżeli sterujemy minusem możemy ustawić - true inverted: True ==== Obsługa rolety z poziomu aplikacji HA i przcisków ==== esphome: name: esp-wroom-32 friendly_name: ESP WROOM 32, 38 pins esp32: board: esp32dev framework: type: esp-idf version: recommended # Enable logging logger: # Enable Home Assistant API api: ota: wifi: ssid: !secret wifi_ssid password: !secret wifi_password use_address: '192.168.3.175' fast_connect: True domain: '.local' # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Esp-Wroom-32 Fallback Hotspot" password: "tajnehaslo" manual_ip: static_ip: 192.168.3.175 gateway: 192.168.3.1 subnet: 255.255.255.0 dns1: 192.168.3.1 dns2: 8.8.8.8 captive_portal: i2c: - id: m_bus_a sda: 21 # SDA scl: 22 # SCL scan: False # frequency: 100kHz - id: m_bus_b sda: 17 # SDA scl: 18 # SCL scan: False # frequency: 100kHz # Załadowanie obsługi ekspandera mcp23017 mcp23017: - id: 'mcp23017_U1' address: 0x20 i2c_id: m_bus_a - id: 'mcp23017_U2' address: 0x20 i2c_id: m_bus_b # Wyjścia do sterowania switch: - platform: gpio name: "Opuść roletę" id: roleta_d # Automatyka z poziomu aplikacji HA dla rolety D on_turn_on: - if: condition: switch.is_on: roleta_g then: - switch.turn_off: roleta_g - logger.log: "Polecenie za then dla rolety_d" - delay: 10ms - switch.turn_off: roleta_d else: # - switch.turn_on: roleta_d - delay: 20s - if: condition: switch.is_on: roleta_d then: - switch.turn_off: roleta_d # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U1 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: True # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: False - platform: gpio name: "Podnieś roletę" id: roleta_g # Automatyka z poziomu aplikacji HA dla rolety G on_turn_on: - if: condition: switch.is_on: roleta_d then: - switch.turn_off: roleta_d - logger.log: "Polecenie za then dla rolety_g" - delay: 10ms - switch.turn_off: roleta_g else: # - switch.turn_on: roleta_g - delay: 20s - if: condition: switch.is_on: roleta_g then: - switch.turn_off: roleta_g # icon: mdi:globe-light-outline pin: mcp23xxx: mcp23017_U2 # Use pin A0 # Wyprowadzenie 21 układu. number: 0 mode: output: True # Jeżeli true to po uruchomieniu stan na wyjściu wysoki # ale przełącznik w pozycji off. inverted: False # Wejścia przycisków binary_sensor: - platform: gpio name: "Opuść roletę" # Gdy naciśniesz to załącz "przekaznik" # Automatyka z poziomu przycisków HA dla rolety D on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy # switch.toggle: roleta_d then: - if: condition: or: - switch.is_on: roleta_d - switch.is_on: roleta_g then: - switch.turn_off: roleta_d - switch.turn_off: roleta_g else: - switch.turn_on: roleta_d - delay: 20s - if: condition: switch.is_on: roleta_d then: - switch.turn_off: roleta_d pin: mcp23xxx: mcp23017_U1 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: True pullup: True # Jeżeli sterujemy minusem możemy ustawić - true inverted: True - platform: gpio name: "Podnieś roletę" # Gdy naciśniesz to załącz "przekaznik" # Automatyka z poziomu przycisków HA dla rolety G on_press: # toggle - każde naciśnięcie zmienia stan wyjścia # turn_on - naciśnięcie zmienia stan na włączony, nie wyłączymy # turn_off - naciśnięcie zmienia stan na wyłączony, nie włączymy # switch.toggle: roleta_g then: - if: condition: or: - switch.is_on: roleta_d - switch.is_on: roleta_g then: - switch.turn_off: roleta_d - switch.turn_off: roleta_g else: - switch.turn_on: roleta_g - delay: 20s - if: condition: switch.is_on: roleta_g then: - switch.turn_off: roleta_g pin: mcp23xxx: mcp23017_U2 # Wyprowadzenie 1 układu czyli 8 (A0 = 0, A1 = 1 itd.) number: 8 # Ustawienie wejścia mode: input: True pullup: True # Jeżeli sterujemy minusem możemy ustawić - true inverted: True