Chciałbym pokazać Wam jak komunikować się z nasza bramką przez asystenta gogle, głośniki home mini itd. wychodzimy z infrastruktury google i mówimy do naszej bramki
Może niektórzy są trochę na bakier z angielskim jak ja, to jest dla nich, można podać jakie się chce komendy oraz dla tych co chcą rozszerzyć możliwości,
Ten poradnik jest dla osób które mają node-red.
Jeżeli ktoś nie chce instalować na bramce i nie ma gdzie postawić mam sugestię:
Praktycznie każdy ma w domu mini komputer, którego nie używa… jaki?
A no stary smartfon
Możesz postawić sobie node-red’a na starej komórce, poprzez emulator konsoli.
Wyciągnąłem baterie z komórki co by nie puchła i postawiłem serwer NR w 2 minuty, działa bez zająknięcia, przecież moja komórka z przed 5 lat ma 8 rdzeni i 2gb ram
Instrukcja jak to zrobić:
https://nodered.org/docs/getting-started/android
Ok jak już mamy node-red’a to musimy zainstalować jedną integrację, która połączy noda webhook z naszą bramką: GitHub - zachowj/hass-node-red: Companion Component for node-red-contrib-home-assistant-websocket to help integrate Node-RED with Home Assistant Core
Następnie wchodzimy do node reda i wstawiamy noda webhook, ustawiamy swój serwer HA i losujemy sobie ID potem wciskamy Deploy.
Po tym zabiegu robimy pełny restart bramki.
Teraz wchodzimy w Konfiguracja > konfiguracja bramki AIS > zdalny dostęp > Wywołania zwrotne http
( dla tych co nie mają bramki AIS, wydaje mi sie, że jest to w nabu casa, musicie ustalić, nie wiem)
Powinien nam się pojawić nowy dostęp, klikamy POKAŻ… to jest nasz adres na który google asystent będzie wysyłać wiadomości. Tak wygląda w moim przypadku:
https:// dom-888888888888888.paczka.pro/api/webhook/fdghfdh5h45t4h56dfhgfd5
Teraz przechodzimy do IFTTT.COM
Nie potrzebujemy do tego płatnego konta premium,
Wersja darmowa pozwala na zaprogramowanie 3 apletów, my potrzebujemy tylko jeden.
Tworzymy aplet:
Create> IF THIS > Google assistant > „Say a phrase with a text ingredient”
I teraz tak, aby asystent wiedział że mówimy do naszej bramki musimy użyć jakiegoś magicznego słowa,
Jako że mam bramke AIS to nic lepszego nie przyszło mi do głowy jak mówić AIS zrób to, AIS zrób tamto
Oczywiście mówiąc AIS asystent rozumie to jako ICE
Musimy i to jest bardzo ważne w pierwszym okienku wpisać jakąś długą frazę zawierającą nasze magiczne słowo i wartość customową czyli $, jak podamy za prostą nie będziemy mogli zapisać.
Np. ice please do something awesome $
Najpierw spisujemy tylko ta fraze po zapisie całego apletu dopiero wchodzimy w edycje i wpisujemy pozostałe dwa
Potem w następnych dwóch okienkach już idziemy na skróty:
Ice dolar
oraz
dolar ice
Także gdy powiemy „ice office light” asystent zrozumie, ze mówimy ICE i wartościa customową jest OFFICE LIGHT.
Wciskamy CREATE TRIGGER
Teraz wchodzimy w „Then That” > webhooks > Make a web request
Podajemy tutaj nasz adres z bramki który stworzyliśmy, post, application/json oraz w BODY musimy kliknąć Add ingredient i dodać TextField.
Cokolwiek teraz powiemy dodając magiczne słowo (u mnie ICE) to gogle assistant wyśle do naszej bramki.
Czas na przetworzenie otrzymanych wiadomości:
Wchodzimy w NODE-RED
Podłączamy sobie noda debug żeby widzieć przychodzące wiadomości.
Mówimy do głośnika magiczne slowo oraz np. office light
Dostajemy taki komunikat, jak widzicie w payload mamy naszą wypowiedzianą fraze.
Teraz dodajemy sobie switch który sprawdza jaką mamy funkcję, np. light, switch, clean itd.
Contains – (czyli jeżeli w wiadomości payload wystepuje) ight
Dlaczego ight? Dlatego że google czasem napisze Light a czasem light, więc albo rezygnujemy z pierwszej litery jak ja albo robimy dwa wyjścia z light oraz Light.
Ok, teraz robimy kolejny switch, czyli jak wystepuje light to ma trafić do switcha, który sprawdza np. w jakim pokoju, np. „office”, czyli „ffice”,
Do tego wyjścia dodajemy kolejny nod call service z light toogle
I tym oto sposobem jak powiemy „ice office light” to wpadnie do pierwszego switcha gdzie znajdzie slowo light potem poleci do drugiego switcha gdzie znajdzie slowo office i poleci do trzeciego gdzie zapali lampkę.
Chcemy dodać następną komendę, ice light bath room, więc dodajemy takie wyjścia
Możemy dać komendy jednowyrazowe, np. ice table który włacza swiatło nad stołem.
Chodziło mi o pokazanie logiki całego procesu, oczywiście Ci co znają node red, wiedzą że tylko wyobraźnia nas ogranicza co ma się wydarzyć.
Jeżeli mamy asystenta po polsku na jakimś urządzeniu to równiez możemy tak mówić, google automatycznie tłumaczy nasz tekst
Na podsumowanie filmik z przykładem jak to działa.
EDIT.
Dodam jeszcze sposób w jaki prowadzę dialog z moją bramką.
Przykład.
Chce powiedzieć light i bramka ma mnie zapytać w którym pokoju i czekać na podpowiedz.
mówię komendę “ice llight” i nie dodaje o jaki pokój chodzi,
więc wiadomość wpada sprawdza że jest light, leci do drugiego switcha lecz nie znajduje pokoju, więc leci do ostatniego “otherwise” i teraz tak,
zadaje pytanie, “w którym pomieszczeniu?” po czym ustawiam sobie w global.odpowiedz cyfrę 1 (nie jako string tylko number, bo dwucyfrowe będą źle czytane)
Dzięki temu jeżeli wpadnie nowa wiadomość “ice office”, to poleci do switcha light gdzie wyszuka pokój. Najpierw sprawdzamy czy bramka ma nasłuchiwać odpowiedzi, czyli wpada do switcha Odpowiedz? i szuka czy któreś pytanie jest aktywne.
Za każdym pytaniem jak ma czekać na odpowiedź ustawiam sobie inną cyfrę, 1, 2, 3, 4
więc odpowiedź trafia tam gdzie powinna.
Oczywiście po otrzymaniu odpowiedzi wartość global.odpowiedz zmieniam na 0, żeby kolajna komenda szła głównym flow.
Mam też ustawione zmianę na 0 po 60 sekundach od zadania pytania, czasem mogę nie chcieć odpowiedzieć
Możecie to wykorzystać do dopytywania przez bramkę, jak i również jak w przykładzie filmu na końcu, sugerowane akcje, mówi czy jest jakieś światło włączone i pyta czy chcemy wyłączyć.