Home Assistant - For Dummies (hass.io)

Olenko nyt ymmärtänyt oikein, että voin tökätä tällaisen mihin tahansa päin kämppää ja se toimii tukiasemana kaikille HA - verkon BLE - laitteille? Tarvitseeko tuo jotenkin ensin setuppia Shellyn omilla laitteilla?
Tuosta en osaa sanoa, mutta tutki ESP ble proxy myös. Halpa kikkare ja toimii kuin se kuuluisa junan vessa.
 
Kaksi kysymystä olisi:

1) Olenko nyt ymmärtänyt oikein, että voin tökätä tällaisen mihin tahansa päin kämppää ja se toimii tukiasemana kaikille HA - verkon BLE - laitteille? Tarvitseeko tuo jotenkin ensin setuppia Shellyn omilla laitteilla?

Ymmärsit. Tukiasema toiminto on myös kaikilla verkkovirtaan kytkettävillä shelly laitteilla kunhan pistää BT päälle laitteen omista asetuksista ja homeassistantista asettaa laitteesta BT scanning actiiviseksi.
 
Viimeksi muokattu:
2) HA pyörii nykyään Raspilla, joka ei ole ihan ideaalinen värkki, varsinkin kun muistikorttikin alkaa osoittaa väsymisen merkkejä. Ilmeisesti backup-restore-syklillä pitäisi kohtuullisen helposti siirtää nykyinen asennus säätöinen toiselle alustalle, mutta onko kenelläkään kokemusta siitä, että siirtäisi tuollaisen "paljaan" asennuksen uuteen alustaan, jossa HA pyörii dockerissa? On ollut tässä ajatuksena päivittää kotipalvelinsetit vähän ajantasaisemmiksi ja kun tarpeet on kuitenkin aika vähäiset, niin mieluiten pyörittäisi kaiken yhdellä palvelinkoneella.
Docker-asennuksen rajoitteet kannattaa sitten tiedostaa. Itse en tuohon lähtisi kun HAOS virtuaalikoneena on älyttömän paljon helpompi.

 
Mulla on pyörinyt HA Proxmox:issa jo monta vuotta ilman ongelmia.
Asensin sen helper scriptillä, taisi olla tämä:
 
Mulla on pyörinyt HA Proxmox:issa jo monta vuotta ilman ongelmia.
Asensin sen helper scriptillä, taisi olla tämä:
Itellä pyörii kanssa proxmoxissa ha ja todennäköisesti samalla scriptillä asennettuna. Miten sulla näyttää muistin käytön tuolta proxmoxin dashboardista? Mulla pyörii 95% tienoilla, kun taas ha:n käyttöliittymässä jotain 10-20% luokkaa.

En nyt asiasta kauheasti ole stressannut, mutta olisi kiva jos tuo näyttäisi oikein. Helpompi olisi mitoittaa muistia muille alustoille jos tieto olisi oikein.
 
Itellä pyörii kanssa proxmoxissa ha ja todennäköisesti samalla scriptillä asennettuna. Miten sulla näyttää muistin käytön tuolta proxmoxin dashboardista? Mulla pyörii 95% tienoilla, kun taas ha:n käyttöliittymässä jotain 10-20% luokkaa.

En nyt asiasta kauheasti ole stressannut, mutta olisi kiva jos tuo näyttäisi oikein. Helpompi olisi mitoittaa muistia muille alustoille jos tieto olisi oikein.
Molemmat luvut ovat oikein, näyttävät vaan hieman eri asioita. HA:n käyttöliittymä näyttää kuinka paljon muistia on käytössä itse HA:lla, Proxmoxin muistinkäyttö näyttää myös sen muistin käytettynä mitä käyttöjärjestelmä käyttää buffereihin/cacheen. Sitten kun softat rupeavat käyttämään enemmän muistia niin tuo buff/cache -varattu määrä pienenee ja vastaavasti oikeasti sovelluksille käytetty muisti kasvaa. Ihan normaali juttu linux/unix-tyylisissä käyttöjärjestelmissä, eihän sitä muistia kannata turhaan tyhjänä pitää jos sinne voi cachettaa ja bufferoida kaikenlaista joka taas nopeuttaa toimintaa.

Esimerkki omasta linux-koneesta millä kirjoittelen tätä viestiä:
Koodi:
MiB Mem :  31817,1 total,  20239,4 free,   4364,3 used,   7213,4 buff/cache
Eli 32G muistia yhteensä, noin 20G vapaata, reilu 4G käytetty sovelluksille ja reilu 7G käytössä puskureille ja cachelle.
Muistin määrä - (sovelluksille käytetty - buff/cache) = vapaa muisti.
 
Molemmat luvut ovat oikein, näyttävät vaan hieman eri asioita. HA:n käyttöliittymä näyttää kuinka paljon muistia on käytössä itse HA:lla, Proxmoxin muistinkäyttö näyttää myös sen muistin käytettynä mitä käyttöjärjestelmä käyttää buffereihin/cacheen. Sitten kun softat rupeavat käyttämään enemmän muistia niin tuo buff/cache -varattu määrä pienenee ja vastaavasti oikeasti sovelluksille käytetty muisti kasvaa. Ihan normaali juttu linux/unix-tyylisissä käyttöjärjestelmissä, eihän sitä muistia kannata turhaan tyhjänä pitää jos sinne voi cachettaa ja bufferoida kaikenlaista joka taas nopeuttaa toimintaa.

Esimerkki omasta linux-koneesta millä kirjoittelen tätä viestiä:
Koodi:
MiB Mem :  31817,1 total,  20239,4 free,   4364,3 used,   7213,4 buff/cache
Eli 32G muistia yhteensä, noin 20G vapaata, reilu 4G käytetty sovelluksille ja reilu 7G käytössä puskureille ja cachelle.
Muistin määrä - (sovelluksille käytetty - buff/cache) = vapaa muisti.
No tääpä oli ihan uutta tietoa. Ei tuota juuri ole aikaisemmin sen kummemmin mietittyä. Kyllähän tuosta ha:lta olisi vara vapauttaa muistia muiden alustojen käyttöön jos tarve tulee. Nyt taitaa olla 16gigaa varattuna :D
 
No tääpä oli ihan uutta tietoa. Ei tuota juuri ole aikaisemmin sen kummemmin mietittyä. Kyllähän tuosta ha:lta olisi vara vapauttaa muistia muiden alustojen käyttöön jos tarve tulee. Nyt taitaa olla 16gigaa varattuna :D
Onhan tuossa aika reippaasti ylimääräistä (ellei sulla pyöri jotain todella muisti-intensiivistä HA:ssa), itselläni tosiaan HA Proxmoxissa pyörimässä ja sille on annettu 2x vCPU ja 2GB RAM ja tuntuu pyörivän ihan mallikkaasti. Levyä mulla on vähän reippaasti tuolla mutta sitä kun on tuossa Proxmoxissa reilusti eli runsaasti niin 100GB levytila HA:lla riittää kaikenlaisille addoneille, integraatioille sun muille ainakin hetkeksi tulevaisuuteen.
 
Levyä mulla on vähän reippaasti tuolla mutta sitä kun on tuossa Proxmoxissa reilusti eli runsaasti niin 100GB levytila HA:lla riittää kaikenlaisille addoneille, integraatioille sun muille ainakin hetkeksi tulevaisuuteen.
Onneks tuli aikoinaan laitettua suoraan 256GB levy. Tällä hetkellä 46% levystä käytössä. Toki tuolla on koko ajan myös pari paikallista varmuuskopiota nas-palvelimen lisäksi mahdollista nopeaa palauttamista varten. Toki eihän toi itse HA lopulta vie juuri mitään tilaa, mutta kyllä noihin lisäosiin ja dataan saa uppoamaan levytilaa, kun on käppyröitä muutamalta vuodelta tallessa.
 
Onhan tuossa aika reippaasti ylimääräistä (ellei sulla pyöri jotain todella muisti-intensiivistä HA:ssa), itselläni tosiaan HA Proxmoxissa pyörimässä ja sille on annettu 2x vCPU ja 2GB RAM ja tuntuu pyörivän ihan mallikkaasti. Levyä mulla on vähän reippaasti tuolla mutta sitä kun on tuossa Proxmoxissa reilusti eli runsaasti niin 100GB levytila HA:lla riittää kaikenlaisille addoneille, integraatioille sun muille ainakin hetkeksi tulevaisuuteen.
Siinä pyöri vähän aikaa frigaten kamerat, mutta se on jo jonkun aikaa pyörinyt omalla alustallaan. Tuota muistia vaan joskus tuli lisättyä ihan sen takia kun luulin, että ha käyttää 95% tarjolla olevasta ja eihän se nyt ihan optimi ole jos koko ajan muistinkäyttö.
 
Itse asensin vanhaan NUCiin ja sekin olisi asenna ja unohda, jos siinä olisi akku. Nyt tarttee sähkökatkojen jälkeen käydä manuaalisesti pistämässä virta päälle. Joten ota se kannettava vain hyötykäyttöön :tup:.

Läppäri otettu käyttöön ja voi pojat että meinaa olla opettelua, mutta toimii se ja tabletti eteisen seinässä, mistä näkee yhdellä silmäyksellä kaiken ja automaatiotkin toimii.

Osittain mutu vastaus mutta mielestäni tarviit Bluetooth adapterin, tai jos on Ruuvi bridge käytössä niin sitten ei tarvita bluetoothia. Ikea Dirigera uskoakseni uppoaa suoraan tuohon integraation kautta. Xiaomi home uppoaa kanssa suoraan integraation kauttaa. Home Assistantin sivuilta kannattaa etsiä Integrations kohdasta tarkemmin tietoa vielä.

Bluetooth toimii läppärin kautta, mutta Ruuvi Bridgeä en ole vielä saanut (jaksanut) asennettua joten kaikki anturit ei vielä näy, mutta pikku hiljaa päivittelen. Ikea toimii ns. suoraan Xiaomia en ole vielä saanut toimimaan kun en tunnuksia ns osaa laittaa oikein?


Mutta kuten sanottu, pari päivää vasta jumpannut ja 80% toimii niin voi olla ihan tyytyväinen.

wrthrjiu.png
 
Ihan hyvältä toi näyttää, fyysinen asennus on siisti ja perus dashboard näkymä on myös yksinkertainen ja siisti! Tuosta se vuosien säätäminen ja datankeruu alkaa. :D
 
Täällä ois tarkoitus kans vihdoin siirtää kaikki laitteet Home Assistantin alle. Mulla on yksi HP Elitedesk, johon ois tarkoitus se asentaa. Konetta ei käytetä muuhun, joten varmaankin paras korvata koneessa oleva Windows suoraan tolla HA:lla?

Tässä vaiheessa ei ole vielä muita laitteita käytössä kuin Huen valoja ja pistorasioita sekä Nediksen pistorasioita. Jos olen oikein ymmärtänyt, niin nuo pitäisi toimia suoraan ilman mitään lisäkilkkeitä HA:n kanssa? Sitten on yksi Googlen Nest Hub, jota on käytetty ohjaamaan paria noista pistorasioista. Ilmeisesti sen ääniohjauksen saa toimimaan jatkossakin, jos jättää ne pistorasiat Googlen Homen puolellekin? Ja vissiin tuohon hubiin sais peilattua jotenkin HA:n dashboardiakin?

Jatkossa ois tarkoitus hommata ainakin muutama lämpötila/kosteusanturi, joista yksi tulisi saunaan ja yksi autotalliin. Merkeistä ei mitään hajua vielä. Ja sitten yksi liiketunnistin, joka pitäisi saada yhteistyöhön yhden Huen valon kanssa. En tiedä, tarvitseeko näitä varten sitten jotain lisävarusteita jotta ne saa toimimaan HA:n kanssa.
 
Täällä ois tarkoitus kans vihdoin siirtää kaikki laitteet Home Assistantin alle. Mulla on yksi HP Elitedesk, johon ois tarkoitus se asentaa. Konetta ei käytetä muuhun, joten varmaankin paras korvata koneessa oleva Windows suoraan tolla HA:lla?

Jatkossa ois tarkoitus hommata ainakin muutama lämpötila/kosteusanturi, joista yksi tulisi saunaan ja yksi autotalliin. Merkeistä ei mitään hajua vielä. Ja sitten yksi liiketunnistin, joka pitäisi saada yhteistyöhön yhden Huen valon kanssa. En tiedä, tarvitseeko näitä varten sitten jotain lisävarusteita jotta ne saa toimimaan HA:n kanssa.
En omaa syväosaamista ICT:stä, joten ostin reilu vuosi sitten 120 € käytetyn Lenovo Thinkcentren (i3/256Gb) ja asensin siihen suoraan Home Assistant OS:n.

Jotta pystyy HAOS:lla ohjaamaan laitteita, tarvitsee tällä hetkellä tyypillisesti seuraavat yhteydet: Zigbee, WiFi ja bluetooth. Zigbee:tä varten ostin Aliexpress:tä SLZB-06m koordinaattorin, maksoi noin 40 € ja bluetooth varten ostin amazon.de:stä muutaman ESP-32 piirilevyä (taisi olla AZ-Delivery). ESP32 toimii siis linkkinä WIFI:n ja bluetoothin kanssa (ESPHome).

Tuolla setillä käytän mm:
Philips hue; lamppuja, ledinauhoja, katkaisimia, liike- ja lämpötunnistimia
Ikea: lamppuja, katkaisimia, kosteusantureita, liiketunnistimia, ovitunnistimia ja pistorasioita
Nedis: pistorasioita
Reolink ja Tapo kameroita
TCL: televisiota

Laitteita pystyy ohjaamaan ja kodin tilannetta seuraamaan tietokoneella nettiselaimella ja puhelimen/tabletin sovelluksella. Softa mennyt vuoden aikana huomattavasti eteenpäin, itse katsonut lukuisia tunteja youtube videoista ohjeita ja käyttänyt esim. ChatGPT:tä apuna. Videoita löytyy youtubesta vaikka kuinka paljon mutta monessa asiassa kannattaa pyrkiä löytämään mielellään max vuoden vanhoja pätkiä, sillä käyttöjärjestemän ulkoasu muuttuu tällä hetkellä niin nopeasti.
 
Nyt on espit ja mikit tilattu. En tilannut Sonoksia yms. vaan aion käyttää paluuaudioon google homea joka pystyy castia suorittamaan. Eli mikrofoni vastaanottaa ja vastaanottava mikrofoni määrittelee, mihin google home kaiuttimeen vastaus lähetetään. Mutta joo nyt odotellaan tarvikkeita ja sitten pitää ryhtyä opiskelemaan mitä pitää oikeasti tehdä.

Jonkin aikaa se otti, että sai aikaiseksi. Nyt on kaikki Google Homet heivattu kotoa pois ja tilalla on kolme HA Voice Assistantia vastailemassa asioihin. Perustuu ESP32-S3-WROOM kortteihin, vahvistin komponenttiin jossa google homesta siirretty kaiutin. Lisäksi toki mikrofoni, sekä led-merkkivalo. Nämä compilattu Voice Assiastant koodilla, joka ajettu ESPHOMEn kautta laitteiksi Home Assiastantiin. Hyvin myös tuntuu toimivan.

AI-moottoria alla, niin pystyy keskustelemaan asioista vuoropuhelumaisesti niin kodin asioihin kuin julkisen verkon takana oleviin tietoihin peilaten. Kuvio on sinällään todella mielenkiintoinen, koska nyt olen onnistunut korvaamaan chatgpt:n kanssa käydyn kirjeenvaihdon osittain keskusteluksi, johon oikeasti saan vastauksia. Autotallissa erästä moottoria eilen huollettaessa kysyin kiristysmomentit pultille ja niin vain vastasi oikein :) Tällaista arjen apuria kaipasin ja sellaisen melko toimivan nyt sain. Pientä säätöä tämä toki vielä vaatii, mutta lähtökohtaisesti täysin toimiva kokonaisuus.

Ainoat tämän hetkisen todot:
- keskustelun viive on komennosta toteutukseen n.8sek. Tähän ei taida nopeutuskonstia toistaiseksi olla, mutta oletan että lähitulevaisuus korjaa viiveitä. Osan komennoista (kodin osuus) voisi ajaa paikallisesti, mutta koska olen halunnut internet-vuoropuhelun mukaan, niin siitä maksetaan viiveen muodossa. Tavoitteena google homen vaste, joka on n. 4sek.
- en ole vielä ehtinyt tutkimaan miten voisin pyytää google home tyyppisesti musiikkia spotifysta tai youtube musicista. Olen kuitenkin ymmärtänyt, että music assistantilla tämä voisi olla mahdollista. Pitää perehtyä.
- internetiin perustuvissa vastauksissa assistant lisää keskusteluun joskus urlit mukaan. Eli jos kysyn säätietoja, niin oikean vastauksen jälkeen tulee hooteeteepeekaksoispistekauttakauttaweeweeweepiste blaa blaa. Olen yrittänyt antaa AI:lle erilaisia komentoja, että älä toista urleja tai lähdeosoitteita, mutta tämän komennon sivuuttaa täysin. Tämä vaatisi jossakin jotain kehitystyötä, en tiedä missä.

Niin ja tovin mietin mihin näitä ESPejä kotona piilottelen. Ensimmäinen ajatus oli, että hienoin ratkaisu olisi se missä laitteita ei näkyisi lainkaan muuta kuin ledin osalta kun keskustelija aktiivnen. Eli huoneessa kuin huoneessa voisit avata keskustelun ja led jossakin kertoisi, että kuunnellaan ja reagoidaan. Lopulta päädyin kuitenkin ratkaisuun, jossa jokainen ESP on erillisessä kotelossaan mutta ei niin helposti huomattavissa. Kotoa löytyi muutama peltilaatikko joita koriste-esineinäkin voi joku käyttää. Näin siis meillä kuten kuvissa, ja hei tuotekehitys on vasta alkutaipaleella :D
Autotallin osalta integroin espin analogiseen seinäkelloon. Tästä ei nyt kuvaa ole, mutta autotallissa kello on se joka puhuu ja näyttää ledeillä olevansa aktiivinen.

1765092969882.png

1765092933165.png
 
Olen yrittänyt antaa AI:lle erilaisia komentoja, että älä toista urleja tai lähdeosoitteita, mutta tämän komennon sivuuttaa täysin. Tämä vaatisi jossakin jotain kehitystyötä, en tiedä missä.
Ootko laittanut tästä ohjeistusta sinne system promptiin?

Voitko laittaa tarkempaa listausta mitä kamoja tuollaisen satelliitin rakentamiseen tarvitsee? Espejä löytyy jo ylimääräisä muutenkin, mutta mitä mikrofoneja käytit ja tarviiko vielä jotain muuta, kaiutinelementtejä?
 
Jonkin aikaa se otti, että sai aikaiseksi. Nyt on kaikki Google Homet heivattu kotoa pois ja tilalla on kolme HA Voice Assistantia vastailemassa asioihin. Perustuu ESP32-S3-WROOM kortteihin, vahvistin komponenttiin jossa google homesta siirretty kaiutin. Lisäksi toki mikrofoni, sekä led-merkkivalo. Nämä compilattu Voice Assiastant koodilla, joka ajettu ESPHOMEn kautta laitteiksi Home Assiastantiin. Hyvin myös tuntuu toimivan.

AI-moottoria alla, niin pystyy keskustelemaan asioista vuoropuhelumaisesti niin kodin asioihin kuin julkisen verkon takana oleviin tietoihin peilaten. Kuvio on sinällään todella mielenkiintoinen, koska nyt olen onnistunut korvaamaan chatgpt:n kanssa käydyn kirjeenvaihdon osittain keskusteluksi, johon oikeasti saan vastauksia. Autotallissa erästä moottoria eilen huollettaessa kysyin kiristysmomentit pultille ja niin vain vastasi oikein :) Tällaista arjen apuria kaipasin ja sellaisen melko toimivan nyt sain. Pientä säätöä tämä toki vielä vaatii, mutta lähtökohtaisesti täysin toimiva kokonaisuus.

Ainoat tämän hetkisen todot:
- keskustelun viive on komennosta toteutukseen n.8sek. Tähän ei taida nopeutuskonstia toistaiseksi olla, mutta oletan että lähitulevaisuus korjaa viiveitä. Osan komennoista (kodin osuus) voisi ajaa paikallisesti, mutta koska olen halunnut internet-vuoropuhelun mukaan, niin siitä maksetaan viiveen muodossa. Tavoitteena google homen vaste, joka on n. 4sek.
- en ole vielä ehtinyt tutkimaan miten voisin pyytää google home tyyppisesti musiikkia spotifysta tai youtube musicista. Olen kuitenkin ymmärtänyt, että music assistantilla tämä voisi olla mahdollista. Pitää perehtyä.
- internetiin perustuvissa vastauksissa assistant lisää keskusteluun joskus urlit mukaan. Eli jos kysyn säätietoja, niin oikean vastauksen jälkeen tulee hooteeteepeekaksoispistekauttakauttaweeweeweepiste blaa blaa. Olen yrittänyt antaa AI:lle erilaisia komentoja, että älä toista urleja tai lähdeosoitteita, mutta tämän komennon sivuuttaa täysin. Tämä vaatisi jossakin jotain kehitystyötä, en tiedä missä.

Niin ja tovin mietin mihin näitä ESPejä kotona piilottelen. Ensimmäinen ajatus oli, että hienoin ratkaisu olisi se missä laitteita ei näkyisi lainkaan muuta kuin ledin osalta kun keskustelija aktiivnen. Eli huoneessa kuin huoneessa voisit avata keskustelun ja led jossakin kertoisi, että kuunnellaan ja reagoidaan. Lopulta päädyin kuitenkin ratkaisuun, jossa jokainen ESP on erillisessä kotelossaan mutta ei niin helposti huomattavissa. Kotoa löytyi muutama peltilaatikko joita koriste-esineinäkin voi joku käyttää. Näin siis meillä kuten kuvissa, ja hei tuotekehitys on vasta alkutaipaleella :D
Autotallin osalta integroin espin analogiseen seinäkelloon. Tästä ei nyt kuvaa ole, mutta autotallissa kello on se joka puhuu ja näyttää ledeillä olevansa aktiivinen.

1765092969882.png

1765092933165.png
Kuulostaa hienolta systeemiltä! Eli käytät AI:ta pilvestä? Suomeksi oletan ja onko joku maksullinen paketti alla?
Ja onko tuosta esp32 toteutuksesta jotain ohjeistus ?
Noihin piilotuksiin kaiuttimen kangas voisi olla hyvä, toki tuollaiset rasiat on myös huomaamattomia.
Olen vastaavaa miettinyt mutta mietityttää se pilven yhdistäminen ma pitää olla suomeksi.
Rautaa olisi kyllä , dell r730 missä pyörii proxmox ja siinä mm home assistant, pari ai serveriäkin löytyy mutta cpulla niin ei sitä oikein viitsi käyttää. Jonku nvidian tuonne jossain vaiheessa voisi hommata
 
Ootko laittanut tästä ohjeistusta sinne system promptiin?
Jep, promptissa ohjeena nyt:
You are a smart home assistant. Your main job is to answer questions about Home Assistant, devices, automations, and other smart home functions. You can also answer simple general questions like weather, time, or basic facts. Speak in short, clear sentences. Keep it simple and to the point. Do not include source URLs, http addresses or other long explanations.
Mutta tämä ei huomioi tuota loppuosan URL mainintaa mitenkään.

Kuulostaa hienolta systeemiltä! Eli käytät AI:ta pilvestä? Suomeksi oletan ja onko joku maksullinen paketti alla?
Ja onko tuosta esp32 toteutuksesta jotain ohjeistus ?
Noihin piilotuksiin kaiuttimen kangas voisi olla hyvä, toki tuollaiset rasiat on myös huomaamattomia.
Olen vastaavaa miettinyt mutta mietityttää se pilven yhdistäminen ma pitää olla suomeksi.
Rautaa olisi kyllä , dell r730 missä pyörii proxmox ja siinä mm home assistant, pari ai serveriäkin löytyy mutta cpulla niin ei sitä oikein viitsi käyttää. Jonku nvidian tuonne jossain vaiheessa voisi hommata

OpenAI (https://platform.openai.com/) käytössä ja sijoitin sinne alussa 10$ credit balanceen varsinaisesti ymmärtämättä, että kuinka paljon rahaa tähän AI käyttöön nyt todellisuudessa asisstant käytössä kuluu. Nyt sitten kun model on gpt4.1-mini, niin tuo kuluttaa täysin olemattomasti tokeneita. Eli tähän asti kaikki testaus ja nyt muutaman päivän "tuotannossa" näitä käyttäneenä, kulut ovat 1,13$. Toki jos ottaa nerokkaamman modelin käyttöön, niin sitten tokenit kuluu nopeammin ja kulut dollareissakin kasvaisi.

1765115383292.png


Itse Assistant toimii suomeksi ja halusin nimenomaan suomalaisen juttukumppanin, jota lapsetkin voivat suomeksi käyttää.
Keskusteluagenttina OpenAI kuten todettu. Puheen tekstiksi kääntää OpenAIWhisper (suomi) ja tekstin puheeksi Google Translate (suomi), eli se sama nainen joka puhuu mm. Google Mapsissa. Käytin aluksi Piperia, mutta siellä suomalaisen miehen ääni on sen verran hirveä, että halusin rennomman naisen juttelemaan.



1765115232191.png

Voitko laittaa tarkempaa listausta mitä kamoja tuollaisen satelliitin rakentamiseen tarvitsee? Espejä löytyy jo ylimääräisä muutenkin, mutta mitä mikrofoneja käytit ja tarviiko vielä jotain muuta, kaiutinelementtejä?

Laitekittinä nämä:
BOARD: Freenove ESP32-S3-WROOM: Freenove ESP32-S3 ESP32 S3 Wireless Board, Dual-core 32-bit 240 MHz Microcontroller, Python C Code, Example Projects Tutorial - AliExpress 502
SPEAKER: 4ohmin mikä tahansa kaiutin: 1/3pair Audio Portable Speakers 3070 4Ohm / 8Ohm 3W Computer Speaker Advertising LCD TV Speakers Loudspeaker Rectangle Speaker - AliExpress 502 (itse purin google home minit ja otin kaiuttimet niistä.
AMPLIFIER: Max98357: Kaiuttimelle vahvistin: High Quality MAX98357 MAX98357A I2S 3W Class D Amplifier Breakout Interface I2S DAC Decoder for Audio - AliExpress 502
LED: WS2812: WS2812B COB LED Strip Individually Addressable 60/100/160Leds/m High Density Flexible WS2812 Smart RGB Dream Color Tape DC5V - AliExpress
DUPONT-WIRES: 40-120pcs Dupont Line 10CM 20CM 30CM 40Pin Male to Male + Male to Female Female to Female Jumper Wire Dupont Cable for DIY KIT - AliExpress
MICROPHONE: Inmp441: Omnidirectional Microphone Module I2S Interface INMP441 MEMS High Precision Low Power Ultra small volume for ESP32 - AliExpress 502
Lisäksi usb-c kaapeli ja virta-adapteri 5V3A.

Siinäpä se. Kytkennät näyttää minulla tältä:
1765116329869.png


Mutta ESPIlle flashattavassa koodissa sitten voi itse valita haluamansa pinnit millä mm. ledinauhaa ohjataan. Oletuksena koodi mitä itse käytän omalla setupilla. Jos tätä käyttää, niin tarkastaa vain että johdot on sitten oikeissa pinneissä kytkettynä. Koodiin pitää myös lisätä mm. oma wlan ssid salasanoineen. Olen täytettävät kohdat kirjoitellut capsit päällä tiedoksi.

Koodi:
# ESP Voice Assistant
# 07 Oct 2024 (v 3.0.0)
# - Based on the ESP32-S3_BOX version
#   adapted to work without a screen but with I2s amp and mic
#   Added some LED's for interacting
#   Request and response sensors in HA
#   Made to work in contineous mode
#
# by A.A. van Zoelen
# Based on the work of Giants

# Voice puck location: WOONKAMER

substitutions:
  # Phases of the Voice Assistant
  # IDLE: The voice assistant is ready to be triggered by a wake-word
  voice_assist_idle_phase_id: '1'
  # LISTENING: The voice assistant is ready to listen to a voice command (after being triggered by the wake word)
  voice_assist_listening_phase_id: '2'
  # THINKING: The voice assistant is currently processing the command
  voice_assist_thinking_phase_id: '3'
  # REPLYING: The voice assistant is replying to the command
  voice_assist_replying_phase_id: '4'
  # NOT_READY: The voice assistant is not ready
  voice_assist_not_ready_phase_id: '10'
  # ERROR: The voice assistant encountered an error
  voice_assist_error_phase_id: '11' 
  # MUTED: The voice assistant is muted and will not reply to a wake-word
  voice_assist_muted_phase_id: '12'

esphome:
  name: "esp-wroom-assistant-1"
  friendly_name: ESP Assistant VP1
  project:
    name: AA_van_Zoelen.VoicePuck
    version: '4.0.0'
  on_boot:
    priority: 600
    then:
      - light.turn_on:
          id: led_strip
          blue: 0%
          red: 0%
          green: 100%
          brightness: 50%
          effect: "scanning"
      - delay: 30s
      - if:
          condition:
            lambda: return id(init_in_progress);
          then:
            - lambda: id(init_in_progress) = false;
            - light.turn_off:
                id: led_strip
      

esp32:
  board: esp32-s3-devkitc-1
  cpu_frequency: 240MHz
  variant: esp32s3
  flash_size: 16MB
  framework:
    type: esp-idf
    version: recommended
    sdkconfig_options:
      CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
      CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
      CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB: "y"

      CONFIG_SPIRAM_RODATA: "y"
      CONFIG_SPIRAM_FETCH_INSTRUCTIONS: "y"

      CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST: "y"
      CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY: "y"

      CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC: "y"
      CONFIG_MBEDTLS_SSL_PROTO_TLS1_3: "y"

#network:
#  enable_ipv6: true

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "TÄHÄNOMAENCRYPTIONKEY"
  actions:
    - action: start_va
      then:
        - voice_assistant.start
    - action: stop_va
      then:
        - voice_assistant.stop

ota:
  - platform: esphome
    password: "TÄNNEOMAKEY"

wifi:
  ssid: "TÄHÄNKOTIVERKONWLANINSSID"
  password: "JATÄHÄNSALASANA"
  output_power: 8.5dB
  manual_ip:
    static_ip: 192.168.86.150
    gateway: 192.168.86.1
    subnet: 255.255.255.0
    dns1: 192.168.86.1
    dns2: 8.8.8.8
  # If the device connects, or disconnects, to the Wifi: Run the script to refresh the LED status
  on_connect:
#    - script.execute: led_off
    - light.turn_off:
        id: led_strip     
  on_disconnect:
#    - script.execute: control_led
    - light.turn_on:
        id: led_strip
        blue: 0%
        red: 100%
        green: 0%
        brightness: 98%
        effect: "Fast Pulse"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "ESP_fallback_SSID"
    password: "TÄHÄNOMAKEKSITTYSALASANA"

psram:
  mode: octal
  speed: 80MHz

i2s_audio:
  - id: i2s_in
    i2s_lrclk_pin: GPIO18  #WS
    i2s_bclk_pin: GPIO2 #SCK
  - id: i2s_out
    i2s_lrclk_pin: GPIO15
    i2s_bclk_pin: GPIO16

microphone:
  - platform: i2s_audio
    id: mic_id
    adc_type: external
    i2s_audio_id: i2s_in
    i2s_din_pin: GPIO4 #SD
    channel: left
    

speaker:
  - platform: i2s_audio
    id: speaker_id
    i2s_audio_id: i2s_out
    dac_type: external
    i2s_dout_pin:   
      number: GPIO14 #DIN Pin of the MAX98357A Audio Amplifier
    sample_rate: 48000
    buffer_duration: 90ms

  - platform: mixer
    id: mixer_speaker_id
    output_speaker: speaker_id
    source_speakers:
      - id: announcement_spk_mixer_input
      - id: media_spk_mixer_input

  - platform: resampler
    id: media_spk_resampling_input
    output_speaker: media_spk_mixer_input
  - platform: resampler
    id: announcement_spk_resampling_input
    output_speaker: announcement_spk_mixer_input

globals:
  # Global initialisation variable. Initialized to true and set to false once everything is connected. Only used to have a smooth "plugging" experience
  - id: init_in_progress
    type: bool
    restore_value: no
    initial_value: 'true'
  # Global variable tracking the phase of the voice assistant (defined above). Initialized to not_ready
  - id: voice_assistant_phase
    type: int
    restore_value: no
    initial_value: ${voice_assist_not_ready_phase_id}
  # Variable for tracking TTS triggering
  - id: is_tts_active
    type: bool
    restore_value: no
    initial_value: 'false'
  # Variable for tracking built-in continued conversations
  - id: question_flag
    type: bool
    restore_value: no
    initial_value: 'false'
  # Variable for tracking ww
  - id: last_wake_word
    type: std::string
    restore_value: no
    initial_value: '""'

light:
  - platform: esp32_rmt_led_strip
    rgb_order: GRB
    pin: GPIO10 #GPIO48 # On board light orig oli GPIO17
    num_leds: 5
    chipset: WS2812
    name: "Status LED"
    id: led_strip
    disabled_by_default: False
    entity_category: config
    icon: mdi:led-on
    default_transition_length: 0s
    effects:
      - pulse:
          name: "Slow Pulse"
          transition_length: 770ms
          update_interval: 770ms
          min_brightness: 10%
          max_brightness: 20%
      - pulse:
          name: "Fast Pulse"
          transition_length: 100ms
          update_interval: 100ms
          min_brightness: 60%
          max_brightness: 80%
      - addressable_scan:
          name: "Scanning"
          move_interval: 120ms
          scan_width: 1
      - pulse:
          name: "Waiting for wake word"
          min_brightness:  15%
          max_brightness: 35%
          transition_length: 3s      # defaults to 1s
          update_interval: 3s


media_player:
  - platform: speaker
    name: None
    id: speaker_media_player_id
    media_pipeline:
        speaker: media_spk_resampling_input
        num_channels: 1
    announcement_pipeline:
        speaker: announcement_spk_resampling_input
        num_channels: 1
    on_announcement:
      - mixer_speaker.apply_ducking:
          id: media_spk_mixer_input
          decibel_reduction: 25
          duration: 0.2s
    on_state:
      - delay: 0.7s
      -  if:
          condition:
            and:
              - not:
                  voice_assistant.is_running:
              - not:
                  media_player.is_announcing:
          then:
            - mixer_speaker.apply_ducking:
                id: media_spk_mixer_input
                decibel_reduction: !lambda |-
                  return id(ducking_decibel).state;
                duration: 1.0s
    files:
      - id: alarm_sound
        file: https://github.com/mitrokun/esp32s3-voice_assistant/raw/main/alarm.flac # 48000 Hz sample rate, mono or stereo audio, and 16 bps
      - id: beep
        file: https://github.com/mitrokun/esp32s3-voice_assistant/raw/main/r2d2d.flac
        
voice_assistant:
  id: va
  microphone:
    microphone: mic_id
    gain_factor: 16
  media_player: speaker_media_player_id
  micro_wake_word: mww
  noise_suppression_level: 2.0
  auto_gain: 0 dbfs
  volume_multiplier: 1

  # When the voice assistant connects to HA:
  # Set init_in_progress to false (Initialization is over).
  # If the switch is on, start the voice assistant
  on_client_connected:
    - lambda: id(init_in_progress) = false;
    - if:
        condition:
          switch.is_on: voice_enabled
        then:
          - micro_wake_word.start
          - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};
        else:
          - lambda: id(voice_assistant_phase) = ${voice_assist_muted_phase_id};
    - light.turn_on:
        id: led_strip
        blue: 10%
        red: 10%
        green: 100%
        effect: "Waiting for wake word"
    - delay: 5s
    - light.turn_off:
        id: led_strip 


  # When the voice assistant disconnects to HA:
  # Stop the voice assistant
  on_client_disconnected:
    - lambda: id(voice_assistant_phase) = ${voice_assist_not_ready_phase_id}; 
    - micro_wake_word.stop

  on_listening:
    # Reset flags
    - lambda: |-
        id(voice_assistant_phase) = ${voice_assist_listening_phase_id};
        id(is_tts_active) = false;
        id(question_flag) = false;
    # Microphone operation indicator (red led)
    - light.turn_on:
        id: led_strip
        blue: 0%
        red: 100%
        green: 0%
        brightness: 50%
        effect: "Fast Pulse"
    # Waiting for speech for 4 seconds, otherwise exit
    - script.execute: listening_timeout

  on_stt_vad_start:
    # Turn off the script if speech is detected
    - script.stop: listening_timeout

  on_stt_vad_end:
    - light.turn_off:
        id: led_strip 
    - lambda: id(voice_assistant_phase) = ${voice_assist_thinking_phase_id};

  on_stt_end:
  # Event for HA with recognized speech
  - homeassistant.event:
      event: esphome.stt_text
      data:
        text: !lambda return x;

  on_intent_progress:
    - if:
        condition:
          # A nonempty x variable means a streaming TTS url was sent to the media player
          lambda: 'return !x.empty();'
        then:
          - lambda: id(voice_assistant_phase) = ${voice_assist_replying_phase_id};
          # Set the flag when the stage is reached
          - lambda: |-
              id(is_tts_active) = true;
          # Start a script that would potentially enable the stop word if the response is longer than a second
          - script.execute: activate_stop_word_once

  on_tts_start:
    - if:
        condition:
          # The intent_progress trigger didn't start the TTS Reponse
          lambda: 'return id(voice_assistant_phase) != ${voice_assist_replying_phase_id};'
        then:
          - lambda: id(voice_assistant_phase) = ${voice_assist_replying_phase_id};
          # Start a script that would potentially enable the stop word if the response is longer than a second
          - script.execute: activate_stop_word_once
    # Finding a question mark at the end of a sentence.
    - lambda: |-
        bool is_question = false;
        if (!x.empty() && x.back() == '?') {
          is_question = true;
        }
        id(question_flag) = is_question;
#    - logger.log:
#        format: "question_flag: %d (0=false, 1=true)"
#        args:
#          - id(question_flag)
  on_tts_end:
    - if:
        condition:
          switch.is_on: extended_dialog
        then:
          - lambda: |-
              id(is_tts_active) = true;

  on_timer_finished:
    then:
      - switch.turn_on: timer_ringing

  on_end:
    # Additional check for microphone LED
    - if:
        condition:
          - light.is_on: led_strip
        then:
          - light.turn_off:
              id: led_strip 

    - wait_until:
        condition:
          - media_player.is_announcing:
        timeout: 0.5s

    - wait_until:
        not:
          voice_assistant.is_running:
    - delay: 0.5s
    
    # New start of the pipeline if the conditions are met
    - if:
        condition:
          and:
            - switch.is_on: continued_conversation_enabled
            - lambda: 'return !id(question_flag);'
            - lambda: 'return id(is_tts_active);'
            - lambda: 'return id(last_wake_word) != "Stop";'
        then:
          - voice_assistant.start:
              wake_word: !lambda return id(last_wake_word);
        else:
          # Stop ducking audio.
          - mixer_speaker.apply_ducking:
              id: media_spk_mixer_input
              decibel_reduction: !lambda |-
                return id(ducking_decibel).state;
              duration: 1.0s
          - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};

  # When the voice assistant encounters an error:
  # Wait 1 second and set the correct phase (idle or muted depending on the state of the switch)
  on_error:
    - if:
        condition:
          lambda: return !id(init_in_progress);
        then:
          - lambda: id(voice_assistant_phase) = ${voice_assist_error_phase_id}; 
          - delay: 1s
          - if:
              condition:
                switch.is_on: voice_enabled
              then:
                - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};
              else:
                - lambda: id(voice_assistant_phase) = ${voice_assist_muted_phase_id};

micro_wake_word:
  models:
    - model: https://github.com/kahrendt/microWakeWord/releases/download/okay_nabu_20241226.3/okay_nabu.json
      id: okay_nabu
    - model: https://raw.githubusercontent.com/Darkmadda/ha-v-pe/refs/heads/main/hey_glados.json
      id: hey_glados
    - model: https://github.com/kahrendt/microWakeWord/releases/download/stop/stop.json
      id: stop
      internal: true
  vad:
    model: https://github.com/kahrendt/microWakeWord/releases/download/v2.1_models/vad.json
  id: mww
  stop_after_detection: false
  on_wake_word_detected:
    - if:
        condition:
          switch.is_on: timer_ringing
        then:
          - switch.turn_off: timer_ringing
        else:
          - if:
              condition:
                switch.is_on: voice_enabled
              then:
                - if:
                    condition:
                      voice_assistant.is_running:
                    # Restart the pipeline if Continued conversation is enabled
                    # Or stop it completely by saying “Stop”
                    then:
                      - lambda: id(last_wake_word) = wake_word;
                      - delay: 100ms
                      - voice_assistant.stop:
                    # Stop any other media player announcement
                    else:
                      - if:
                          condition:
                            media_player.is_announcing:
                          then:
                            - media_player.stop:
                                announcement: true
                          # Start the voice assistant and play the wake sound, if enabled
                          else:
                            - lambda: id(last_wake_word) = wake_word;
                            - script.execute:
                                id: play_sound
                                priority: true
                                sound_file: !lambda return id(beep);
                            - delay: 280ms
                          #  - media_player.speaker.play_on_device_media_file:
                          #      media_file: beep
                          #      announcement: true
                          #  - delay: 300ms
                            - voice_assistant.start:
                                wake_word: !lambda return wake_word;

script:
#  - id: led_off
#    then:
#      - light.turn_off:
#          id: led_strip 

  - id: listening_timeout
    mode: restart
    then:
      - delay: 3s
      - if:
          condition:
            lambda: |-
              return id(voice_assistant_phase) == 2;
          then:
# BARM            - switch.turn_off: wake_led
            - light.turn_off:
                id: led_strip
            - voice_assistant.stop:
            - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};

  - id: activate_stop_word_once
    then:
      - delay: 1s
      # Enable stop wake word
      - if:
          condition:
            switch.is_off: timer_ringing
          then:
            - micro_wake_word.enable_model: stop
            - wait_until:
                not:
                  media_player.is_announcing:
            - if:
                condition:
                  switch.is_off: timer_ringing
                then:
                  - micro_wake_word.disable_model: stop

  - id: play_sound
    parameters:
      priority: bool
      sound_file: "audio::AudioFile*"
    then:
      - lambda: |-
          if (priority) {
            id(speaker_media_player_id)
              ->make_call()
              .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_STOP)
              .set_announcement(true)
              .perform();
          }
          if ( (id(speaker_media_player_id).state != media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING ) || priority) {
            id(speaker_media_player_id)
              ->play_file(sound_file, true, false);
          }

select:
  - platform: template
    name: "Wake word sensitivity"
    optimistic: true
    initial_option: Slightly sensitive
    restore_value: true
    entity_category: config
    options:
      - Slightly sensitive
      - Slightly+ sensitive
      - Moderately sensitive
      - Very sensitive
    on_value:
      # Sets specific wake word probabilities computed for each particular model
      # Note probability cutoffs are set as a quantized uint8 value, each comment has the corresponding floating point cutoff
      # False Accepts per Hour values are tested against all units and channels from the Dinner Party Corpus.
      # These cutoffs apply only to the specific models included in the firmware: okay_nabu@20241226.3, hey_jarvis@v2, hey_mycroft@v2
      lambda: |-
        if (x == "Slightly sensitive") {
          id(okay_nabu).set_probability_cutoff(217);    // 0.85 -> 0.000 FAPH on DipCo (Manifest's default)
        } else if (x == "Slightly+ sensitive") {
          id(okay_nabu).set_probability_cutoff(191);    // 0.75
        } else if (x == "Moderately sensitive") {
          id(okay_nabu).set_probability_cutoff(176);    // 0.69 -> 0.376 FAPH on DipCo
        } else if (x == "Very sensitive") {
          id(okay_nabu).set_probability_cutoff(143);    // 0.56 -> 0.751 FAPH on DipCo
        }
  - platform: logger
    id: logger_select
    name: Logger Level
    disabled_by_default: true

button:
  - platform: restart
    name: reboot

number:
  - platform: template
    name: "Decibel Reduction"
    id: ducking_decibel
    min_value: 0
    max_value: 12
    step: 1
    initial_value: 0
    unit_of_measurement: "dB"
    set_action:
      - mixer_speaker.apply_ducking:
          id: media_spk_mixer_input
          decibel_reduction: !lambda 'return (int)x;'
          duration: 0.2s


switch:
  - platform: template
    name: Enable Voice Assistant
    id: voice_enabled
    optimistic: true
    restore_mode: RESTORE_DEFAULT_ON
    icon: mdi:assistant
    # When the switch is turned on (on Home Assistant):
    # Start the voice assistant component
    on_turn_on:
      - if:
          condition:
            lambda: return !id(init_in_progress);
          then:     
            - lambda: id(voice_assistant_phase) = ${voice_assist_idle_phase_id};
            - if:
                condition:
                  not:
                    - voice_assistant.is_running
                then:
                  - micro_wake_word.start
                  - light.turn_on:
                      id: led_strip
                      blue: 15%
                      red: 0%
                      green: 15%
                      brightness: 20%
                      effect: "Slow Pulse"                 
    # When the switch is turned off (on Home Assistant):
    # Stop the voice assistant component
    on_turn_off:
      - if:
          condition:
            lambda: return !id(init_in_progress);
          then:     
            - voice_assistant.stop
            - micro_wake_word.stop
            - lambda: id(voice_assistant_phase) = ${voice_assist_muted_phase_id};
            - light.turn_off:
                id: led_strip

  - platform: template
    name: "Ring Timer"
    id: timer_ringing
    optimistic: true
    restore_mode: ALWAYS_OFF
    on_turn_off:
        # Stop playing the alarm
        - media_player.stop:
            announcement: true
    on_turn_on:
        - while:
            condition:
                switch.is_on: timer_ringing
            then:
                # Play the alarm sound as an announcement
                - media_player.speaker.play_on_device_media_file:
                    media_file: alarm_sound
                    announcement: true
                # Wait until the alarm sound starts playing
                - wait_until:
                    media_player.is_announcing:
                # Wait until the alarm sound stops playing
                - wait_until:
                    not:
                      media_player.is_announcing:
                - delay: 1000ms

  - platform: template
    name: Continued Conversation
    id: continued_conversation_enabled
    optimistic: true
    restore_mode: RESTORE_DEFAULT_ON
    icon: mdi:chat-processing-outline

  - platform: template
    name: Continued Conversation+
    id: extended_dialog
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF
    icon: mdi:chat-plus-outline
 

Statistiikka

Viestiketjuista
294 477
Viestejä
5 039 239
Jäsenet
80 687
Uusin jäsen
-techman-

Hinta.fi

Back
Ylös Bottom