Etusivu › Käyttöopas › Kodin automaatio › Kojelauta
Home Assistant · vaihe vaiheelta

Rakenna tämä Home Assistant -kojelauta noin tunnissa

Kymmenen vaihetta, jokaisen kortin YAML ja koko näkymä, jonka voit liittää kerralla. Rakennettu ja kuvattu oikealla Marantz CINEMA 30:llä. Vaihda kaksi merkkijonoa, niin se on sinun.

Valmis kojelauta: nyt soi -pääkortti, äänenvoimakkuus dB-esiasetuksilla, lähderuudukko, surround-tilat, huonekorjaus, tilanteet ja äänenvoimakkuuskaavio
Mitä rakennat
Kiire? Hyppää vaiheeseen 10, lataa koko näkymä, vaihda kaksi merkkijonoa ja liitä se. Välivaiheet selittävät, mitä kukin osa tekee, jotta voit muokata sitä.

Ennen aloittamista

Kojelautaa syöttää kaksi lähdettä, ja ero on tärkeä jokaisessa alla olevassa vaiheessa.

Tulee täältäAntaa sinulle
AVR Maestron synkronoidut skriptitJokaisen ohjaimen. Tulot, surround-tilat, Audyssey, Dirac, Smart Selectit, esiasetukset, himmennin, eco, omat tilanteesi.
Denon AVR -integraation mediasoitinentiteettiReaaliaikaisen tilan. Virta, valittu lähde, surround-tila, äänenvoimakkuus, mykistys.
Vaihe 1

Asenna neljä korttia HACS:stä

Kaikki neljä ovat HACS:n oletuskaupassa. Home Assistantissa: HACS › Frontend › Explore & Download Repositories, hae nimellä, valitse Download ja lataa selain uudelleen.

HakusanaKäyttötarkoitusJos jätät väliin
MushroomJokainen ohjainruutu ja äänenvoimakkuuden liukusäädinKäytä tavallista button-korttia. Toimii, näyttää kulmikkaammalta.
button-cardOsio-otsikot reaaliaikaisella tekstilläKäytä markdown-korttia tai tavallisia otsikoita.
card-modVärit ja aktiivisen ruudun valaistu tilaKaikki toimii silti. Mikään ei syty.
apexcharts-cardHistoriakaaviotKäytä sisäänrakennettua history-graph-korttia.
Mikään niistä ei ole pakollinen. Jokainen alla oleva ohjain toimii tavallisella Home Assistantin painikekortilla, joka osoittaa samaan skriptiin. Mukautetut kortit ovat meikkiä, eivät putkistoa.
Vaihe 2

Etsi kaksi entiteettitunnustasi

Jokainen tämän sivun koodinpätkä käyttää kahta paikkamerkkiä. Etsi omasi kerran, niin loppu on kopioimista ja liittämistä.

Jokaisen skriptitunnuksen keskiosa on vastaanottimesi MAC-osoite, kaksitoista pientä kirjainta tai numeroa, sama kaikissa. Kopioi se kerran. Kaikkialle, minne tämä sivu kirjoittaa MAC, laita omasi.

Ohita kaikki, joissa lukee unavailable. Vanhemmat versiot nimesivät skriptit vastaanottimen nimen eikä MAC-osoitteen mukaan. Jos synkronoit silloin, nuo vanhat ovat yhä luettelossa ja ne ovat kuolleita. Toimivat ovat MAC-osoitteella nimetyt.
Vaihe 3

Luo näkymä

  1. 1. Asetukset › Kojelaudat › Lisää kojelauta › Uusi kojelauta tyhjästä. Nimeä se miten haluat.
  2. 2. Avaa se ja napsauta oikean yläkulman kynäkuvaketta muokataksesi.
  3. 3. Lisää näkymä ja valitse Sections-asettelu. Ei Masonry. Sections saa sen mukautumaan kunnolla puhelimella.
  4. 4. Aseta näkymän asetuksissa Max columns arvoon 3 ja ota käyttöön Dense section placement.

Tästä eteenpäin jokainen vaihe on sama: lisää osio ja liitä siihen kortteja. YAML:n liittämiseksi käytä kortin kolmen pisteen valikkoa ja valitse Edit in YAML, tai kojelaudan kolmen pisteen valikosta Raw configuration editor, jolloin liität kaiken kerralla.

# The view's own settings, if you prefer to type them
type: sections
title: AVR Maestro
icon: mdi:audio-video
max_columns: 3
dense_section_placement: true
Vaihe 4

Lisää ohjain

Aloita taulun yksinkertaisimmasta asiasta, jotta tiedät entiteettitunnustesi olevan oikein ennen kuin rakennat mitään monimutkaista. Lisää osio, lisää kortti, Edit in YAML, liitä:

type: button
name: Pure Direct
icon: mdi:speaker
tap_action:
  action: perform-action
  perform_action: script.turn_on
  target:
    entity_id: script.avr_maestro_MAC_mode_pure_direct

Tavallista Home Assistantia. HACS:ää ei tarvita.

Napauta sitä. Jos vastaanotin reagoi, tunnuksesi ovat oikein ja kaikki alla toimii. Jos mitään ei tapahdu, palaa vaiheeseen 2.

Vaihe 5

Saa se syttymään, kun se on aktiivinen

Tämä on opettelemisen arvoinen kuvio, ja jokainen taulun lähde- ja surround-ruutu on kopio siitä. Kortti lähettää skriptin ja värittää itsensä vastaanotinentiteetin mukaan, joten tulo, jota oikeasti käytät, palaa ja muut eivät.

Lähderuudukko, jossa Nvidia Shield palaa oranssina ja muut kaksitoista tuloa ovat tummia
Yksi palava ruutu, kaksitoista tummaa
type: custom:mushroom-template-card
entity: script.avr_maestro_MAC_input_cd
icon: mdi:disc
primary: CD
icon_color: >-
  {{ 'orange' if (state_attr('media_player.your_receiver','source') or '')|lower
     == 'cd' else 'grey' }}
layout: vertical
fill_container: true
tap_action:
  action: perform-action
  perform_action: script.turn_on
  target:
    entity_id: script.avr_maestro_MAC_input_cd
card_mod:
  style: |
    ha-card {
      border-radius: 14px;
    {% if (state_attr('media_player.your_receiver','source') or '')|lower == 'cd' %}
      background: linear-gradient(160deg, rgba(226,86,10,0.34), rgba(15,15,17,0.88));
      border: 1px solid rgba(255,122,24,0.80);
    {% else %}
      background: rgba(15,15,17,0.72);
      border: 1px solid rgba(255,122,24,0.14);
    {% endif %}
    }

Vaihda kolme asiaa tuloa kohden: skripti, kuvake ja merkkijono, johon verrataan.

Kaksi asiaa on tehtävä oikein, tai ruutu ei koskaan syty:

Surround-tilat ovat sama kortti, jossa sound_mode korvaa tunnuksen source.

Vaihe 6

Anna jokaiselle osiolle reaaliaikainen otsikko

Pelkkä otsikko on hukkatilaa. Laita reaaliaikainen arvo sen alle, niin ”Sources” muuttuu muotoon ”Sources / Now on Nvidia Shield”.

type: custom:button-card
name: Sources
icon: mdi:video-input-hdmi
color_type: label-card
entity: media_player.your_receiver
show_label: true
label: >-
  [[[ var v = states["media_player.your_receiver"].attributes.source;
      return v ? ("Now on " + v) : "Receiver in standby"; ]]]
tap_action:
  action: none
styles:
  grid:
    - grid-template-areas: '"i n" "i l"'
    - grid-template-columns: min-content auto
  name:
    - font-size: 13px
    - letter-spacing: 3px
    - text-transform: uppercase
    - justify-self: start
  label:
    - font-size: 11px
    - justify-self: start

Kaksirivinen ruudukko saa tekstin otsikon alle sen viereen sijaan.

Vaihda attributes.source tunnukseen attributes.sound_mode Surround-otsikossa, ja niin edelleen.

Vaihe 7

Näytä äänenvoimakkuus desibeleinä

Home Assistant ilmoittaa äänenvoimakkuuden murtolukuna. Kukaan ei aseta vastaanotinta arvoon ”0.67”. Yksi rivi laskentaa korjaa sen, ja koko osio alkaa lukea kuin vastaanotin.

Äänenvoimakkuusosio: liukusäädin, ylös, alas, mykistys ja neljä dB-esiasetusta
Night, Dialog, Movie ja Loud, kukin nimetty asettamansa dB-arvon mukaan
Muunnos. Home Assistant julkaisee arvon volume_level pää-äänenvoimakkuutena jaettuna sadalla, ja Denon- ja Marantz-vastaanottimissa MV 80 on 0 dB:n vertailutaso. Siis dB = volume_level × 100 − 80. Arvo volume_level 0.67 vastaa pää-äänenvoimakkuutta 67, joka on −13.0 dB.
# The readout
type: custom:mushroom-template-card
entity: media_player.your_receiver
icon: mdi:volume-high
primary: >-
  {% set v = state_attr('media_player.your_receiver','volume_level') %}
  {% if v is not none %}{{ (v * 100 - 80) | round(1) }} dB{% else %}Standby{% endif %}
secondary: Master volume
layout: vertical
# The slider. media_controls must be empty or the bar becomes a power button
type: custom:mushroom-media-player-card
entity: media_player.your_receiver
volume_controls:
  - volume_set
media_controls: []
show_volume_level: true
# A preset. 0.50 is master volume 50, which is -30 dB
type: custom:mushroom-template-card
entity: media_player.your_receiver
icon: mdi:weather-night
primary: Night
secondary: "-30 dB"
tap_action:
  action: perform-action
  perform_action: media_player.volume_set
  target:
    entity_id: media_player.your_receiver
  data:
    volume_level: 0.50
Valitse kovin esiasetuksesi harkiten. Yllä oleva sarja päättyy arvoon −10 dB. Kojelautaa on paljon helpompi painaa vahingossa kuin kaukosäädintä, ja suuren vastaanottimen vertailutaso on todella kova.
Vaihe 8

Lisää tilanteesi

Lue nimi skriptistä sen kirjoittamisen sijaan, niin tilanteen uudelleennimeäminen AVR Maestrossa nimeää myös ruudun ilman kojelaudan muokkausta.

Neljä tilanneruutua, jokainen luettelee tilanteen palauttamat asetukset
Jokainen ruutu kertoo, mitä sen tilanne oikeasti palauttaa
type: custom:mushroom-template-card
entity: script.avr_maestro_MAC_scene_1234567890123
icon: mdi:theater
primary: >-
  {{ state_attr('script.avr_maestro_MAC_scene_1234567890123','friendly_name')
     | replace('AVR Maestro - ', '') | replace(' (Your Receiver)', '') }}
secondary: >-
  {% set t = states.script['avr_maestro_MAC_scene_1234567890123'].attributes.last_triggered %}
  {{ 'recalled ' ~ relative_time(t) ~ ' ago' if t else 'not run yet' }}
multiline_secondary: true
tap_action:
  action: perform-action
  perform_action: script.turn_on
  target:
    entity_id: script.avr_maestro_MAC_scene_1234567890123

Kaksi replace()-kutsua leikkaa etuliitteen ja vastaanottimen nimen pois helppolukuisesta nimestä.

Toinen rivi on ylimääräisen minuutin arvoinen. Seinällinen elokuvallisesti nimettyjä painikkeita ei kerro mitään kello 11 illalla, mutta rivi, joka kertoo mitä kukin palauttaa, kertoo minkä painat.

Vaihe 9

Lisää historia

Home Assistant tallentaa vastaanottimen mediasoitinentiteetin kuten minkä tahansa muun, joten saat kuunteluhistorian ilmaiseksi. Kaikki alla oleva tulee tuosta yhdestä entiteetistä: ei lisäantureita, ei apuelementtejä, ei mitään ensin määritettävää.

Viisi historiakaaviota: virta ja aktiivisuus, pää-äänenvoimakkuus dB:nä, äänenvoimakkuus päivittäin, käytetty lähde ja surround-tila
Viisi kaaviota, yksi entiteetti, seitsemän päivää

Tavallinen tila-aikajana ei tarvitse lainkaan mukautettuja kortteja, ja se on se, jonka haluaminen kannattaa eniten:

type: history-graph
hours_to_show: 168
entities:
  - entity: media_player.your_receiver
    name: Receiver

Päällä, pois ja mitä se teki, viikon ajalta.

Äänenvoimakkuus dB:nä käyttää samaa muunnosta kuin vaihe 7:

type: custom:apexcharts-card
graph_span: 7d
header:
  show: true
  title: Master volume, last 7 days
series:
  - entity: media_player.your_receiver
    attribute: volume_level
    name: Master volume
    type: line
    curve: smooth
    unit: dB
    float_precision: 1
    transform: "return x == null ? null : Number(x) * 100 - 80;"
    extend_to: now
    group_by:
      duration: 1h
      func: last
      fill: last
apex_config:
  chart:
    height: 240
  yaxis:
    min: -60
    max: 0

group_by ja fill: last muuttaa harvat tapahtumat yhtenäiseksi viivaksi. Y-akseli on määritettävä apex_config-kohdassa, jotta se tulee voimaan.

Päivittäinen keskiarvo ja huippu muuttaa piikikkään viivan hahmoksi:

type: custom:apexcharts-card
graph_span: 7d
span:
  end: day
header:
  show: true
  title: Master volume by day in dB, average and peak
series:
  - entity: media_player.your_receiver
    attribute: volume_level
    name: Day average
    type: column
    float_precision: 1
    transform: "return x == null ? null : Number(x) * 100;"
    group_by: {duration: 1d, func: avg, fill: 'null'}
  - entity: media_player.your_receiver
    attribute: volume_level
    name: Day peak
    type: line
    curve: smooth
    float_precision: 1
    transform: "return x == null ? null : Number(x) * 100;"
    group_by: {duration: 1d, func: max, fill: 'null'}
apex_config:
  yaxis:
    min: 0
    max: 80
    labels:
      formatter: "EVAL:function (v) { return (v - 80).toFixed(0); }"
  tooltip:
    y:
      formatter: "EVAL:function (v) { return v == null ? '' : (v - 80).toFixed(1) + ' dB'; }"

Kaksi sarjaa samasta attribuutista, ryhmiteltynä päivittäin.

Miksi tämä piirtää välille 0-80 ja muotoilee dB:ksi sen sijaan, että piirtäisi dB:t. Pylväät kasvavat akselin pohjalta. Jos piirrät dB:t suoraan, jokainen pylväs roikkuu alas nollasta, joten pitkä pylväs tarkoittaa hiljaista, mikä lukeutuu väärinpäin. Piirrä raaka pää-äänenvoimakkuusluku ja vähennä 80 akselin ja työkaluvihjeen muotoilijoissa, niin pylväät kasvavat ylöspäin ja kaikki, minkä lukija näkee, on silti dB:tä. fill: 'null' tarkoittaa, että päivä ilman lukemia ei saa pylvästä eikä kanna eilistä eteenpäin.

Ja kaksi kaaviota, jotka vastaavat kysymykseen ”millä ja missä tilassa oikeasti katson”: lähde ja surround-tila, piirrettynä aikajanana siitä, mikä oli valittuna.

type: custom:apexcharts-card
graph_span: 7d
span:
  end: day
header:
  show: true
  title: Source in use, last 7 days
series:
  - entity: media_player.your_receiver
    attribute: source
    name: Source
    type: line
    curve: stepline
    stroke_width: 3
    extend_to: now
    float_precision: 0
    transform: |
      if (x == null) return null;
      var m = ["Phono", "NET", "Xbox", "Nvidia Shield"];
      var i = m.indexOf(x);
      return i < 0 ? 0 : i + 1;
apex_config:
  yaxis:
    min: 0
    max: 4
    tickAmount: 4
    labels:
      formatter: >-
        EVAL:function (v) { return ["Other", "Phono", "HEOS Net", "Xbox",
        "Shield"][Math.round(v)] || ''; }
  tooltip:
    y:
      formatter: >-
        EVAL:function (v) { return v == null ? 'off' : ["Other", "Phono",
        "HEOS Net", "Xbox", "Shield"][Math.round(v)] || 'Other'; }

Laita omat lähteesi transform-taulukkoon ja molempiin muotoilijataulukoihin. Pidä indeksi 0 arvossa ”Other”.

Kaavion akseli tarvitsee lukuja, joten transform kuvaa kunkin lähteen nimen sijaintiin ja muotoilijat kuvaavat sen takaisin nimiksi ja työkaluvihjeeseen. Tee kuvauksesta täydellinen: null (vastaanotin pois päältä) jää aukoksi, ja kaikki, mikä ei ole luettelossasi, päätyy arvoon ”Other”, joten näitä kahta ei voi koskaan sekoittaa. Sama kortti arvolla sound_mode antaa surround-tilan, ja merkkijonot ovat isoilla kirjaimilla täsmälleen niin kuin vastaanottimesi ne ilmoittaa.

Pidä stepline noissa kahdessa viimeisessä. Lähde tai surround-tila on luokka, ei luku. Pehmennä käyrää, ja viiva heilahtaa Shieldin ja Xboxin välillä kaiken akselilla niiden välissä olevan kautta ja piirtää tulon, jota ei koskaan valittu. Äänenvoimakkuus on todellinen suure ja pehmenee rehellisesti, luokka ei.
Tarkista ensin recorderin säilytysaika. Home Assistant säilyttää oletuksena kymmenen päivää, joten seitsemän päivää on suurin hyödyllinen pyyntö. Pidemmälle menemiseksi tarvitset state_class: measurement-mallipohja-anturin, jonka Home Assistant säilyttää pitkäaikaistilastoina vuosia.
Puuttuva päivä on yleensä oikein. Home Assistant tallentaa muutokset, ei näytteitä. Jätä vastaanotin yhteen tuloon yhteen äänenvoimakkuuteen kahdeksi päiväksi, niin se ei kirjoita mitään, joten sillä päivällä ei ole pylvästä. Se näyttää tietojen katoamiselta ja on sen vastakohta: mitään ei tapahtunut.
Vaihe 10

Tai ota koko paketti

Koko näkymä, jokainen osio ja kortti, entiteettitunnusten tilalla paikkamerkit.

  1. 1. Lataa näkymän YAML.
  2. 2. Avaa se millä tahansa tekstieditorilla ja korvaa kaksi merkkijonoa kaikkialla, missä ne esiintyvät: YOUR_RECEIVER mediasoitinentiteettisi nimellä ja YOURMAC vastaanottimesi kahdellatoista merkillä vaiheesta 2.
  3. 3. Avaa Home Assistantissa kojelautasi, kynäkuvake, kolmen pisteen valikko, Raw configuration editor, ja liitä se näkymänä.
Tilannetunnuksesi eivät täsmää. Tilanneskriptit on nimetty tilanteen luontihetken mukaan, joten tiedoston neljää ei ole järjestelmässäsi: ne kortit piirtyvät mutta eivät tee mitään. Korvaa niiden entiteettitunnukset omillasi vaiheesta 2 tai poista Tilanteet-osio ja rakenna se uudelleen vaiheella 8.
Kaksi muuta odotettavaa asiaa. Lähde- ja surround-kaaviot sisältävät sen vastaanottimen lähteiden nimet, jolla tämä rakennettiin, joten muokkaa nuo taulukot vaiheessa 9 kuvatulla tavalla. Ja ruutujen tekstit ovat englanniksi; tiedostossa ei ole mitään käännettyä.

Jos ruutu ei koskaan syty

Ennen kuin oletat tehneesi väärin: osa ruuduista ei voi syttyä, ja kannattaa tietää mitkä.

Ruutu voi näyttää tilansa vain, jos Home Assistant pystyy lukemaan sen, ja se lukee vastaanottimesi kahdesta paikasta. Denon AVR -integraatio julkaisee perusasiat mediasoitinentiteetillä. AVR Maestro julkaisee lopun: se luo Status Bridge -anturin, sensor.avr_maestro_your_receiver, ja kirjoittaa sille attribuuteiksi lukemat, jotka sillä jo on.

MediasoitinentiteetilläStatus Bridge -anturilla
VirtaAudyssey MultEQ -käyrä
Valittu lähdeDynamic Volume ja vertailutaso
Surround-tilaMikä Dirac-paikka on ladattu
Äänenvoimakkuus ja mykistysEtupaneelin himmennin, Eco-tila
Dynamic EQ, joskusKaiutinesiasetus, sävy ja kymmeniä muita

Molemmat sarakkeet ovat nyt luettavissa. Ota mediasoittimen arvo kohdasta states['media_player.your_receiver'].attributes ja Status Bridge -arvo kohdasta state_attr('sensor.avr_maestro_your_receiver','dirac_slot'), jolloin ruutu syttyy sille asetukselle, joka on oikeasti aktiivinen, sen sijaan että se vain laukaisisi skriptin, joka sen muuttaa.

Mitattu vastaanottimella, jolla tämä rakennettiin: mediasoitinentiteetti kantaa noin kaksikymmentä kuudestakymmenestä ohjaimesta, ja Status Bridge -anturi julkaisee suunnilleen neljäkymmentä lisää. Näiden kahden kesken kojelauta voi lukea lähes kaiken, minkä se voi muuttaa - ero painikeseinän ja ohjauspinnan välillä.

Jos arvo voi tarkoittaa kahta asiaa, sano se. Dynamic EQ saapuu muodossa true, false tai ei lainkaan. Jos ”ei lainkaan” käsitellään tilana ”pois”, seinällesi tulee varma väärä vastaus.
icon_color: >-
  {% set d = state_attr('media_player.your_receiver','dynamic_eq') %}
  {{ 'orange' if d is true else 'grey' }}
secondary: >-
  {% set d = state_attr('media_player.your_receiver','dynamic_eq') %}
  {% if d is none %}state not published{% elif d %}on{% else %}off{% endif %}

Kolme tilaa, ei kaksi.

Muuta hyödyllistä tietoa

Sama kojelauta puhelimen leveydellä, mukautuneena yhteen sarakkeeseen
Sama kojelauta puhelimen leveydellä: kolmesta sarakkeesta tulee yksi, eikä mitään määritetty sen aikaansaamiseksi
Usein kysyttyä

Kojelauta, vastauksia

Tarvitsenko HACS:n mukautettuja kortteja tämän rakentamiseen?
Et toimivuuden vuoksi. Jokainen tämän sivun säädin toimii tavallisella Home Assistantin painikekortilla. Mushroom, button-card, card-mod ja apexcharts-card tekevät siitä kuvakaappausten näköisen, ja jokainen alla oleva osio kertoo, mitä niistä se käyttää ja mitä menetät ilman sitä.
Miksi osa painikkeista syttyy ja osa ei?
Painike syttyy, kun Home Assistant pystyy lukemaan vastaavan tilan vastaanottimestasi. Lähde, surround-tila, äänenvoimakkuus ja mykistys tulevat vastaanottimen omasta media player-entiteetistä, joten ne korostuvat. Audyssey-käyrää, Dirac-paikkaa, himmenninta, eco-tilaa ja kaiutinesiasetusta Denon-integraatio ei julkaise, joten Home Assistant ei voi tietää, mikä niistä on aktiivinen, ja painikkeet pysyvät sammuneina, kunnes napautat jotakin.
Voinko näyttää todellisen dB-äänenvoimakkuuden prosenttiluvun sijaan?
Kyllä. Home Assistant julkaisee volume_level-arvon vastaanottimen pää-äänenvoimakkuutena jaettuna sadalla, ja Denon- ja Marantz-vastaanottimissa MV 80 on 0 dB:n vertailutaso. Siis dB on volume_level kertaa 100 miinus 80. Arvo volume_level 0.67 vastaa pää-äänenvoimakkuutta 67, joka on -13.0 dB.
Vastaavatko entiteettitunnukseni tämän oppaan tunnuksia?
Kuvio vastaa, keskiosa ei. AVR Maestro nimeää skriptinsä vastaanottimen MAC-osoitteen mukaan, jotta uudelleennimeäminen päivittää saman skriptin eikä luo kopiota. Sinun tunnuksesi on muotoa script.avr_maestro_, sitten omat kaksitoista merkkiäsi ja lopuksi ohjaimen nimi. Avaa Home Assistantissa Kehittäjätyökalut ja Tilat ja suodata haulla avr_maestro, niin näet oman luettelosi.
Lisää oppaasta

Muut AVR Maestro -oppaat

Aloitus · Kotinäyttö · Kohtaukset · Omat kuvakkeet · Ääni · Graafinen taajuuskorjain · Kaiuttimet · Miksi säädin on lukittu · Avustaja · Kodin automaatio · Vyöhykkeet · Kaukosäädin · Radio (FM/AM) · Kuvaruutunäyttö · Asetukset · Kielet · Äänenvoimakkuuden hallinta · Varmuuskopiointi & palautus · Nyt soi & HEOS

Koko vastaanottimesi yhdellä seinällä

Kodin automaatio on AVR Maestron ainoa maksullinen avaus. Kaikki muu, myös laitteella toimiva tekoälyavustaja, kuuluu hintaan.

Lataa Google Playsta Lataa App Storesta Lataa Mac App Storesta Hanki Microsoft Storesta

Takaisin kohtaan Kodin automaatio → · Koko käyttöopas →