# Youtube pořad Opravdu chytrá domácnost

# Každá deklarace může být v konfiguračním souboru pouze jednou, uvnitř pak odsazením lze přidávat další stejného typu.

# Sonoff LAN integrace HACS
# video jak přidat HACS
sonoff:                       # deklarace sonoff
    username: !secret_email
    password: !secret_heslo
    sensors: [power]          # typ senzorů, co chci najít a přidat
    force_update: [power]     # typ senzorů, co chci donutit častěji aktualizovat
    scan_interval: '00:00:05' # aktualizovat stavy každých 5 vteřin
    reload: always            # aktualizovat zařízení z eWeLink každý restart
    mode: local               # LAN mód, ale nemusí v něm fungovat všechna zařízení

# přetypování entit na jiný typ (device_class)
devices:
    10008c8efa:                    # označení senzoru ze .sonoff.json souboru v adresáři HA
        device_class: [light, fan] # dvojspínač - první bude světlo a druhý větrák
        name: Koupelna             # nové jméno spínače
    10007558d4:
        device_class: light
        name: Kuchyně

# Sonoff Bridge
fbridge:
    Chodba:                  # jméno senzoru v eWeLink aplikaci
        device_class: motion # typ sensoru: door, window nebo motion
        timeout: 120         # doba ve vteřinách, po které se sám přepne stav na OFF


# Tasmota integrace
# přetypování entit na světlo
light:                                # deklarace světla
  - platform: switch                  # původní typ
    name: "Koupelna"                  # nový název entity bude "light.koupelna"
    entity_id: switch.koupelna_svetlo # původní entita   

# přetypování entit na větrák
fan:                   # deklarace větráku
  - platform: template # lze jen za pomoci šablony
    fans:              # přidáme více větráků dle šablony
        koupelna:      # nový název entity bude "fan.koupelna"
            friendly_name: "Záchod" # uživatelsky přívětivější název jen pro zobrazování
            value_template: "{{ states('switch.zachod_vetrak') }}" # stav entity přes šablonu hodnoty
            turn_on:                              # co představuje stav zapnutý
                service: switch.turn_on           # služba zapni spínač
                entity_id: switch.koupelna_vetrak # entita větrák
            turn_off:                             # co představuje stav vypnutý
                service: switch.turn_off          # služba vypni spínač
                entity_id: switch.koupelna_vetrak # entita větrák

# Tasmota Bridge (Sonoff původně)
binary_sensor:                # deklarace binárního senzoru
  - platform: mqtt            # typ komunikace
    device_class: motion      # typ sensoru: motion, door, window
    name: 'pohyb_chodba'      # pojmenujte entitu
    payload_on: "EC2D2E"      # kód sensoru pro zapnutí
    payload_off: "EC2D2Eoff"  # kód sensoru pro vypnutí (nepovinný)
    off_delay: 20             # doba do autovypnutí ve vteřinách; 0 zůstane zapnuto
    state_topic: "tele/bridge/RESULT"                  # konstanta
    value_template: '{{ value_json.RfReceived.Data }}' # konstanta


# Variable proměnné integrace HACS
variable:             # deklarace proměnné
    window_left:      # jméno proměnné
        value: false  # výchozí hodnota
        restore: true # pamatovat si stav i po restartu HA
    window_right:
        value: false
        restore: true
    volume_last:
        value: 4
        restore: true
    volume_mute
        value: false
        restore: true
    video_id:
        value: ''
        restore: true
    video_position:
        value: 0
        restore: true
    mirror_program:
        value: 1
        restore: true
    mirror_youtube:
        value: 1
        restore: true



input_number:
# Posuvník hlasitosti
    volume_now:
        name: Hlasitost
        initial: 4
        min: 1
        max: 7
        step: 1
        icon: mdi:volume-high


# Telegram komunikace
# video jak vytvořit bota
telegram_bot:                     # deklarace robota telegramu
  - platform: polling            
    api_key: !secret_key          # vygenerovaný api klíč
    allowed_chat_ids: 123456789   # přidělené komunikační ID
notify:                           # deklarace komunikačního klienta
  - name: telegram                # jméno klienta
    platform: telegram            # služba klienta 
    chat_id: 123456789            # id pro klienta


climate:                                     # deklarace termostatu
# Termostat
  - platform: generic_thermostat             # softwarový termostat
    name: Obývák                             # jméno místnost termostatu
    heater: switch.topeni                    # spínač hlavice topného tělesa
    target_sensor: sensor.air98_temperature  # senzor teploty stejné místnosti
    min_temp: 20               # minimální teplota na termostatu
    max_temp: 24               # maximální teplota na termostatu 
    # target_temp: 23          # požadovaná teplota nastavená po restartu HA
    cold_tolerance: 0.5        # topit jakmile teplota klesne o 0,5°C pod požadovanou
    hot_tolerance: 0           # při dosáhnutí požadované teploty přestat topit
    min_cycle_duration:        # pokud bylo topení např. zapnuto, tak nemůže být
        seconds: 30            # dalších 30 sekund vypnuto - přepnuto
    initial_hvac_mode: "off"   # co má termostat dělat po restartu - topit "heat"
    away_temp: 15              # mód Pryč(Away) požadovaná teplota, když nejste doma
    precision: 0.1             # zohlednit nepřesnost měření teploty
    ac_mode: false             # zařízení je klimatizace, netopí, ale chladí


sensor:                              # deklarace senzoru
# Youtube kanál integrace HACS
  - platform: youtube                        # senzor youtube kanálu
        channel_id: UC-DzNfMTLCmUTXfKdNb5mzQ # adresu kanálu zkopírujte z konce webové adresy youtube kanálu
  - platform: template               # za základě šablony
    sensors:                         # přidáme více senzorů dle šablony
# Denní doba template sensor
        period_of_day:               # jméno senzoru
            friendly_name: "Denní doba"  # uživatelsky přívětivější název
            value_template: >-           # stav entity přes šablonu hodnoty
              {% if (as_timestamp(states.sun.sun.attributes.next_dusk)) - (as_timestamp(states.sun.sun.attributes.next_setting)) < 0 %}
                  dusk
                {% elif (as_timestamp(states.sun.sun.attributes.next_rising)) - (as_timestamp(states.sun.sun.attributes.next_dawn)) < 0 %}

                  dawn
                {% elif (states.sun.sun.attributes.elevation) < -4 %}
                  night
                {% else %}
                  day
                {% endif %}

            icon_template: >-            # určení ikony na základě stavu entity přes šablonu hodnoty
                {% if (as_timestamp(states.sun.sun.attributes.next_dusk)) - (as_timestamp(states.sun.sun.attributes.next_setting)) < 0 %}
                  mdi:weather-sunset-down
                {% elif (as_timestamp(states.sun.sun.attributes.next_rising)) - (as_timestamp(states.sun.sun.attributes.next_dawn)) < 0 %}
                  mdi:weather-sunset-up
                {% elif (states.sun.sun.attributes.elevation) < -4 %}
                  mdi:weather-night
                {% else %}
                  mdi:weather-sunny
                {% endif %}

# Semafor ovzduší venku
        air_color:
            friendly_name: "Semafor ovzduší"
            value_template: >-
               {% if states('sensor.castice_1')|float > 55 or states('sensor.castice_25')|float > 70 or states('sensor.castice_10')|float > 100 %}
                  red
               {% elif states('sensor.castice_1')|float > 25 or states('sensor.castice_25')|float > 35 or states('sensor.castice_10')|float > 45 %}
                  yellow
               {% elif states('sensor.castice_1')|float > 0 and states('sensor.castice_25')|float > 0 and states('sensor.castice_10')|float > 0 %}
                  green
               {% else %}
               {% endif %}

            icon_template: mdi:traffic-light
# Tlak přepočtený na hladinu moře
        tlak_venku:
            device_class: pressure
            #unit_of_measurement: 'hPa' # jednotka míry zmenšuje písmo a čitelnost hodnoty, často je lepší ji neuvádět
            friendly_name: "Tlak přepočtený na hladinu moře"
            value_template: "{{ ( states('sensor.tlak')|float / (1-0.0065*360/ (states('sensor.teplota_venku')|float + 273.15) ) ** (5.255) )|round(0) }}"
# uRADMonitor senzory SMOGGIE-PM
  - platform: rest                   # typ komunikace
    device_class: temperature        # typ senzoru
    resource: http://192.168.0.177/j # IP adresa senzoru
    name: Teplota uRadMonitor        # jméno senzoru
    unit_of_measurement: "°C"        # jednotka míry
    value_template: '{{ (value_json.data.temperature - 3.7)|round(1) }}'
    # od hodnoty senzoru odečtena kalibrační hodnota 3,7 a to celé round(1): zaokrouhleno na jedno desetinné místo
  - platform: rest
    device_class: humidity
    resource: http://192.168.0.177/j
    name: Vlhkost
    unit_of_measurement: "%"
    value_template: '{{ value_json.data.humidity|float|round(2) + 9.45 }}'
    # float: hodnota přetypována na číslo s desetinnou čárkou
  - platform: rest
    device_class: pressure
    resource: http://192.168.0.177/j
    name: Tlak
    unit_of_measurement: "Pa"
    value_template: '{{ ((value_json.data.pressure|float - 360) / 100) }}'
  - platform: rest
    resource: http://192.168.0.177/j
    name: Částice 1
    unit_of_measurement: "µg/m³"
    value_template: '{{ value_json.data.pm1 }}'
  - platform: rest
    resource: http://192.168.0.177/j
    name: Částice 25
    unit_of_measurement: "µg/m³"
    value_template: '{{ value_json.data.pm25 }}'
  - platform: rest
    resource: http://192.168.0.177/j
    name: Částice 10
    unit_of_measurement: "µg/m³"
    value_template: '{{ value_json.data.pm10 }}'


rest_command:
# Vektiva Smarwi
    window_open:  # otevření ventilace
        url: 'http://192.168.0.199/cmd/open'
    window_close: # zavření ventilace
        url: 'http://192.168.0.199/cmd/close'
    window_stop:  # zastavení pohybu
        url: 'http://192.168.0.199/cmd/stop'
    window_fix:   # odblokování okna pro manuální otevření; zablokujete zavřením
        url: 'http://192.168.0.199/cmd/fix'


switch:                # deklarace spínače
  - platform: template # na základě šablony
        switches:      # přidáme více spínačů šablony
# okno Vektiva
            smarwi:    # jméno vlastního spínače
                friendly_name: "Okno otevřít"
                value_template: "{{ is_state('variable.window_right', 'True') }}" # stav pro turn_on
                turn_on:              # co se stane při sepnutí
                  - condition: state  # vždy zabraňte opakovanému spuštění, nemusíte to pak dělat v automatizacích
                    entity_id: variable.window_right
                    state: 'False'
                  - service: variable.set_variable
                    data:
                        variable: window_right
                        value: True
                  - service: rest_command.window_open  # otevření okna
                  - service: climate.set_preset_mode   # přerušení topení - využijte preset_mode  
                    entity_id: climate.obyvak          # spínání si pak nechte pro časovou logiku    
                    data:
                        preset_mode: "away"
                turn_off:             # co se stane při vypnutí
                  - condition: state
                    entity_id: variable.window_right
                    state: 'True'
                  - service: variable.set_variable
                    data:
                        variable: window_right
                        value: False
                  - service: rest_command.window_close
                  - service: climate.set_preset_mode
                    entity_id: climate.obyvak
                    data:
                        preset_mode: "none"
                icon_template: >-
                    {% if is_state('variable.window_right', 'True') %}
                        mdi:window-open-variant
                    {% else %}
                        mdi:window-closed-variant
                    {% endif %}
# zvuk Windows
           
volume_mute:
                friendly_name: "Zvuk vypnut"
                value_template: "{{ is_state('variable.volume_mute', 'True') }}"
                turn_on:
                  - condition: state
                    entity_id: variable.volume_mute
                    state: 'False'
                  - service: variable.set_variable
                    data:
                        variable: volume_mute
                        value: True
                  - service: mqtt.publish
                    data:
                        topic: pc/mute
                turn_off:
                  - condition: state
                    entity_id: variable.volume_mute
                    state: 'True'
                  - service: variable.set_variable
                    data:
                        variable: volume_mute
                        value: False
                  - service: mqtt.publish
                    data:
                        topic: pc/mute
                icon_template: >-
                    {% if is_state('variable.volume_mute', 'True') %}
                        mdi:volume-mute
                    {% else %}
                        mdi:volume-low
                    {% endif %}


# Deklarujte pouze pokud je třeba auto-login. Pokud nevíte, co děláte, nedělejte to.
homeassistant:
    auth_providers:
      - type: trusted_networks
# Schválené IP adresy
        trusted_networks:
          - 192.168.0.111                                   # IP adresa Chromecastu
        trusted_users: 
            192.168.0.111: bb4013f64d8s4e90bcg25316h4sxc257 # ID vašeho uživatele, ne jméno uživatel
        allow_bypass_login: true # Přístup bez potřeby loginu (auto-login)
      - type: homeassistant      # Nutnost nakonci schválit přístup pro HA (jinak user error)