Narzędzia użytkownika

Narzędzia witryny


automatyka:homeassistant

Home Assistant

Konfiguracja sieci

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

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
automatyka/homeassistant.txt · ostatnio zmienione: 2024/04/20 14:36 przez sindap

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki