Pogadaj z Jolką

ad 1. :wink:

tak - to jest możliwe - mamy w api coś takiego jak API i zasób command i jak się tam wyśle micOn to powinno zadziałać

Tu jest opis api:

Przykład, mam tablet który ma IP 192.168.6.248

wchodzę na to IP - wywołuje API AIS - w przeglądarce (robie GET na API na porcie 8122) i widzę, coś tekigo:

image

żeby wywołać zasób command trzeba zrobić POST-a (wywołać inną metodę) z parametrami, to już z konsoli:

curl -v --header "Content-Type: application/json" --request POST --data '{"micOn": true}' http://192.168.6.248:8122/command

komenda trafia do API aplikacji ais-dom (zainstalowanej na tablecie/telefonie):

i w efekcie włączył się mikrofon:

Opisaliśmy kiedyś podobny przypadek w tym poście:

Cały czas mamy tą automatyzacje - mikrofon to PS3 podpięty do bramki w biurze.
Oczywiście wyzwalaczem nie muszą być drzwi ale coś zupełnie innego - dowolnego… zapalenie światła w kuchni rano, wykrycie ruchu, wykrycie obecności …

Może to być też głos, np taki moduł wykrywający słowo triger może włączyć mikrofon przez API AIS:

tu jest więcej o tym module:


cdn… Poczytamy i odpowiemy :slight_smile: Dzięki za wyrozumiałość!

5 polubień

Dzięki wielkie!
Całkowicie zapomniałem o API :scream:
Oczywiście działa elegancko:

2 polubienia

To tak:
w dokumentacji jest to napisane tak jak by dotyczyła tylko API bramki,
chociaż teraz jak już wiem to wyłapałem:

API bramki (dostęp do natywnych zasobów systemu Android) na porcie 8122

I teraz:

Obecnie dostępne są 2 zasoby http://ais-dom.local:8122/text_to_speech i http://ais-dom.local:8122/command

Jeżeli chcemy wysłać notyfikację na telefon to mamy opcje:

1
standardowo przez Asystentke Jolka, jak mamy otwartą aplikację to powie na wszystkich urządzeniach

gfhtfht

2
przez usługę notify bezpośrednio do jednej aplikacji.
ais_ai_service.mob_notify
Ustawiając say: true apliakcja powie wiadomosć i będziemy mieli również notyfikacje na pasku.

3
po prostu poprzez casta przez tts na konkretnego media_player wysyłamy
"data":{"message": "Uwaga, Awaria grzałki"}
co powoduje otworzenie na telefonie takiego czarnego ekranu apliakcji AIS jak przy streamowaniu.

fdghdfh

4
I teraz doszło :slight_smile: przez API do konkretnej aplikacji za pomocą /text_to_speech
w tym przypadku, nic nie zaloguje do dziennika, nie powie w innych aplikacjach oraz nie pokaże żadnej notyfiakcji nic nie wyskoczy ani się nie włączy, ekran będzie zgaszony… po prostu powie.
Puszczając przed komunikatem jeszcze {"setVolume":"80"} na /commands
Ustawiamy sobie głośność na 80% i puszczamy komunikat.

Jak by ktoś chciał: flows (2).json (3,6 KB)

Zauważyłem tylko jedną rzecz, przy puszczeniu na /text_to_speech komunikatu zostaje wypowiedziany, a puszczając drugi i enty raz ten sam komunikat już nic nie mówi, dlaczego?
Puszczenie innego lub pustego {"text":""} rozwiązuje ten problem.

3 polubienia

tak to tak działa, bo komunikaty mogą być odtwarzane na 2 sposoby:

  1. przez tts w przeglądarce

  2. przez nasze natywne API

Zdarzało się, że komunikat był mówiony 2 razy

i dlatego dodaliśmy takie zabezpieczenie na bramce i teraz 2 razy nie mówimy tego samego…

Ale jak widać to faktycznie może być też problem. Coś kiedyś wymyślimy lepszego, narazie pozostaje faktycznie obejście z pustym komunikatem.

Tak się tylko dzieje wtedy jak mamy zalogowanego użytkownika tego samego na bramce i na urządzeniu mobilnym, na każdym musi być inny użytkownik. wtedy nie ma podwójnych komunikatów.

ad 2. kontekst w automatyzacji

To co opisałeś to ciekawa funkcjonalność i coś takiego kiedyś będzie :slight_smile:

Już teraz możemy definiowac automatyzację uruchamianą komendami głosowymi:

Należało by teraz przy wywołaniu automatyzacji dodać kontekst - obszar lub urządzenie którego automatyzacja dotyczy:

mając ten kontekst mogli byśmy wykonać automatyzację bardziej “smart”:

Żeby to osiągnąć można:

  1. Poczekać aż ktoś to doda do HA i wtedy pojawi się to a AIS
  2. Zgłosić to jako pomysł u nas na forum - jak znajdzie się odpowiednia ilość ludzi, którzy to poprą, to namówimy @3.14 albo @araczkowski albo @Sebastian , żeby to napisali, oczywiście pomożemy :slight_smile:

Mam wrażenie, że ten pomysł może być łatwo zrealizowany (nie jest to duża zmiana). Wg mie należało by tylko dodać nową encję z informacją jaki klient wywołał usługę. Jeżeli naprawdę potrzebujesz taką funkcjonalność, to tu jest opis zasad zgłaszania pomysłów autorstwa @Stravi :+1:

2 polubienia

Poniekąd jest to już wpisane w plany:

1 polubienie

Kurczę, myślałem, że można już to jakoś łatwo wyciągnąć beż żadnych zmian w aplikacji, tylko po prostu nie wiem jak :frowning:

Jak w ad. 3 - to by wystarczyło, aby zrobić automatyzację, że gdy mikrofon się uruchamia (zmienia się stan switch) na danym urządzeniu to wiemy że mówimy właśnie do niego.
(tak jak samo zmienienie stanu switch już ma atrybut użytkownika user_id)

Rozumiem, że guzik mikrofonu zrobiliście Wy? A nie z aplikacji HA.
Czyli po aktywacji mikrofonu (z jakiego kolwiek powodu- guzik, api, hotword), oprócz rozpoczęcia usługi “nagrywania” zmienia on stan encji (chociażby pomocnika), po zakończeniu, tak samo jak guzik zmienia stan na nieaktywny tak samo zmiani encję switcha na wyłączony.

Czy to nie jest dodanie jednej liniki kodu właśnie w tym miejscu?

1 polubienie

Czy na podstawie tego booleana, nie można zrobić chociażby publish mqtt z nazwą aplikacji (mobile_ais_dom_87676)

AisCoreUtils.java

EDIT.

Hmm…
to tutaj trzeba dodać sensor z unikalną nazwą urządzenia?

DomWebInterface.java

@jolka jak już dostałem wywołany do tablicy, to powiem, że średnio mi się podoba aktualny mechanizm automatyzacji rozmowy z Jolką, bardziej by mi się podobało utworzenie nowego typu triggera, wtedy kontekst wywołania by można było zawrzeć w jego parametrach. Wydaje mi się, że takie podejście by było bardziej zgodne z działaniem HA i pozwoliłoby na dużo bardziej zaawansowane korzystanie z asystenta głosowego (identyfikatory triggerów, template sensory, wait_for_trigger itp)

2 polubienia

@jolka
Czy jest jakaś możliwość wyłączenia agenta AIS,
a żeby został jedynie Conversation z własnymi sentencjami.
Tak jak mogę wyłaczyć agenta Google Home odinstalowując integracje google home.
Oraz żeby wyłaczyć wszelakie wyszukiwanie, sugerowanie itd…
Żeby tylko reagowało na sentencje jakie sam sobie ustale?
Czasem przes nasłuchiwanie hotword słucha 2-3zdań i potem mówi “nie rozumiem … no jechałem po bułki i sroga koparka na jezdni jak byłeś u swojej mamy…”
bzdury,
czy mogę zmienić żeby powiedziało tylko samo “nie rozumiem” i koniec?

1 polubienie

Po początkowej euforii sterowania głosem zwłaszcza po polsku, po blisko 2 latach entuzjazm minął i staram się tak organizować automatyzacje aby działały w tle i zamiast wydawać komendę np. włącz światło w salonie i zgaś w kuchni, działa to autonomicznie. Jednak brakuje mi w Jolce dwóch komend: tak i nie, które po odpowiednim przemodelowaniu choćby znanego powitania wypowiadanego po restarcie centralki “Witaj w domu, co mogę dla Ciebie zrobić?” centralka proponowałaby kilka wybranych działań typu raport temperatury, wilgotności, włączanie wskazanych urządzeń lub uruchomienie wybranych scen i setek innych działań co można zatwierdzić lub anulować komendą tak/nie. Oczywiście wiem, że jest to wykonalne już teraz przy pomocy intencji/sentencji ale wbudowanie tych komend ułatwiłoby konwersację w sterowaniu.
Nb. mój syn każdorazowo jak słyszy powitanie przy starcie centralki odpowiada lektorce poleceniem wykonania prostego przyrządu ortopedycznego i to jest dopiero siła przyzwyczajenia.

jeżeli robisz to z pilota AIS to tak - mikrofon wysyła kod przycisku i w zależności od tego kodu możesz robić różne automatyzacje

wyzwalanie mikrofonu z innych klientów (aplikacji) to już inny temat

jeżeli umiesz programować to możesz sobie zrobic forka kodu i dodać własnego agenta
możesz też, zmienić kod na bramce - kody całego asystenta masz na bramce w języku Python:

to skomplikowane… poczytaj:

mają przykłady w różnych językach

nie pamiętam dokładnie :wink: bo NDA trzeba podpisać żeby dostać cenę
Są to większe kwoty w USD, które w budżecie mają większe firmy:

to skomplikowane… nawet jak zapłacisz 10 tysięcy USD to nikt nie da gwarancji, że to zadziała

Jest już na rynku inna firma, która ma troszkę inne podejście do trenowania słowa klucza, wysłaliśmy jej nasze nagrania oni nam próbki… ale niestety nadal nie ma szału.

Po kilku latach projektu rozumiemy bardziej, że sterowanie głosem (możliwość włączenia i wyłączenia światła poleceniem głosowym ) bardzo się czasami przydaje, ake na codzień to trochę nieergonomiczna zabawka. Lepszy efekt da się osiągnąć jak się ma ogromną ilość czujników i automatyzacji, wtedy system wymaga minimum uwagi i jest smart magia :slight_smile:

Oczywiście nadal robimy wszystko, co się daje zrobić, by żyło się lepiej i łatwiej.

Kiedyś to pewnie dodamy. Pamiętaj o możliwości zgłoszenia pomysłu tą drogą:

Oczywiście możesz też to napisać lub znaleźć kogoś, kto to napisze - jesteśmy otwarci na wszystkie poprawki i ulepszenia.
:+1:

1 polubienie

Super pomysł :slight_smile: Dostęp do kodu masz oczywiście, więc jak tylko okaże się, że faktycznie jest chęć zmiany tego w społeczności :wink: to każdy ma możliwość zgłoszenia takej potrzeby i działajmy - ulepszajmy, tak jak sugerujesz.

Gratulacje sukcesu integracji lovelace-xiaomi-vacuum-map-card
Przepisałeś apkę xiaomi do HA :heart_eyes_cat: niesamowite jak to działa :slight_smile:

:+1:

W te rejony kodu jeszcze nie zaglądałem :wink:

Dzięki, dużo roboty poszło na tą kartę

1 polubienie

Jest szansa aby ta integracja trafiła na AiS? :slightly_smiling_face::slightly_smiling_face:

Super karta, zastanawiam się właśnie nad zakupem robota odkurzającego, będzie jak znalazł :).

To, co zrobiłeś Piotr, to jest… mistrzostwo świata :medal_sports: :heart:

Jak to się pojawiło, to cały zespół AIS ściągnął czapki z głów i z otwartymi buziami… patrzyliśmy, jak reddit oszalał :wink: i byliśmy naprawdę dumni, że to Piotr, który jest na naszym forum i ma bramkę AIS, potrafi coś takiego wykonać. Dla tych, co nie wiedzą, o co chodzi, tu jest wpis na reddit:

To oczywiście działa na bramce AIS, ale jako komponent niestandardowy. Sami testujemy i śmiga pięknie, tu posprzątał dokładnie ten kwadracik:

Niestety to nie jest na oficjalnym API i utrzymanie tego byłoby dla AIS zbyt kosztowne i ryzykowne. Dlatego nie możemy tego oficjalnie dołączyć i utrzymywać… każdy kto chce może sam sobie ten komponent doinstalować i utrzymywać.

@3.14 Piotr po tym, co pokazałeś światu, wiemy jedno - jeżeli trafi się jakieś zadanie niemożliwe, to wiemy do kogo dzwonić. Masz niesamowite umiejętności, mamy nadzieję, że będziemy w stanie kiedyś z nich skorzystać (że pojawi się jakiś fajny temat biznesowy) i dojdzie do tego, że do nas dołączysz. Jak byś z nami pracował, to po wydaniu tego kodu, nie tylko ja, ale każdy z sepołu AIS, robił by Ci kawę :coffee: przez cały miesiąc i podawał do biurka :tipping_hand_woman:

PS
Mamy też nadzieję, że lubisz serial “Silicon Valley” i masz poczucie humoru :slight_smile: - specjalnie dla Ciebie, przerobiony kadr (“Silicon Valley”), w tym kadrze wyjaśniony jest pewien algorytm, trochę to nawiązuje… do tego, co zrobiłeś :heart_eyes_cat:

4 polubienia

Dzięki jeszcze raz! :smiley:

Główny problem nie polega tutaj na samej karcie (bo ona akurat nie używa żadnych zewnętrznych API i jest względnie prosta w utrzymaniu). Problematyczna jest integracja, której ona używa do wyciągnięcia map z chmury Xiaomi - tutaj wszystko jest robione “bokiem”, przez co nie ma gwarancji, że Xiaomi tego w końcu nie zablokuje, no i nie wszystkim działa :confused:

PS trochę offtop się zrobił…

5 polubień

To może chociaż jakiś kod dla entuzjastów którzy wiedzą na co się piszą :slightly_smiling_face::slightly_smiling_face:
Fajnie by było przestać korzystać z aplikacji choć na chwilę :slightly_smiling_face: