====== 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