Czy jest jakaś encja, która zwraca jako tekst wypowiedziane do Jolki komendy głosowe? Po przeszukaniu dokumentacji i przejrzeniu wielu encji poddałem się. Chciałbym w node-red uruchomić automatyzacje po wypowiedzeniu danej frazy. Prośba ewentualnie o podpowiedź jak to wy robicie (chciałbym pominąć wklepywanie nowych automatyzacji w AIS, dla każdej automatyzacji).
Przejrzyj w narzędziach deweloperskich usługi. Wydaje mi się, że będzie najlepsza
service: ais_ai_service.process
np. tak:
conversation.yaml:
swiatlobiuroON:
- zapal światło w biurze
- włącz światło w biurze
- włącz lampe w biurze
- włącz lampkę w biurze
- zapal lampkę w biurze
intents.yaml:
swiatlobiuroON:
speech:
text: Włączam światło w biurze
action:
- service: mqtt.publish
data:
topic: microphone/cmnd
payload: biuroON
Potem NR
mqtt temat: microphone/cmnd
nasłuchujesz komendy biuroON
Dziękuje Wam za odpowiedzi. bartik22 skorzystałem z Twojego rozwiązania i faktycznie działa to całkiem sprawnie.
Temat komend przeglądałem wcześniej w dokumentacji, ale nie wiedziałem jak użyć tego z NR - teraz wszystko jasne.
Mam problem z konfiguracją tych komend. Dla przykładu:
W conversation.yaml:
intents:
swiatlo_sypialnia_przyjemne:
- włącz przyjemne światło w sypialni
- zapal przyjemne światło w sypialni
- zaświeć przyjemne światło w sypialni
- uruchom przyjemne światło w sypialni
- włącz jaśniejsze światło w sypialni
W intents.yaml:
swiatlo_sypialnia_przyjemne:
speech:
text: Włączam przyjemne światło w sypialni
action:
- service: mqtt.publish
data:
topic: microphone/cmnd
payload: swiatlo_sypialnia_przyjemne
Następnie ustawiłem sobie łapanie payload’u w node-red, żeby dalej zrobić z nim co tylko zechcę.
Kiedy wypowiem np “włącz przyjemne światło w sypialni” otrzymuje taki komunikat zwrotny:
“Urządzenia przyjemne światło w sypialni nie można włączyć” albo coś w stylu “Oto kilka pasujących obrazów” w odpowiedzi na komendę: “zaświeć przyjemne światło w sypialni”
Domyślam się, że wbudowane komendy szukają urządzenia “przyjemne światło w sypialni” ale takiego nie znajdują stąd takie dziwne komunikaty. Gdzie robię błąd? Czy to po prostu tak działa.
Dodam że niektóre komunikaty mi ładnie przechodzą.
Tak to działa, ponieważ są komendy wbudowane w asystenta domowego:
Trochę słabo. Macie na to jakieś obejścia/rozwiązania? Albo jest możliwość nadpisania wbudowanych komend?
nazwij automatyzacje “Jolka: i komenda którą ma nadpisać”
np.: Jolka: pogoda
Ślicznie dziękuję - to rozwiązuje mój problem.
Teraz z kolei kombinuje, którym nodem z node-red’a uzyskam informacje, że dana automatyzacja w HA została aktywowana. Node “event: state” dla automatyzacji nie zwraca mi żadnych danych oprócz zmiany on/off w payload (w sensie czy dana automatyzacja jest aktywna).
Zobacz to podejście do poinformowania NR:
Dziękuję za ciekawy pomysł - przećwiczę dla wprawy
Wydaje mi się, że udało mi się zrobić to prościej:
- zdefiniowałem puste automatyzacje w HA i nazwałem je dla przykładu “Jolka: włącz radio” i “Jolka: wyłącz radio”.
- w node-red użyłem noda “events: all” i zafiltrowałem typ zdarzeń (Event Type), który mnie interesuje: “automation_triggered”.
- na jego wyjściu dodałam noda funkcji, który ładuje w payload nazwę automatyzacji, która została wyzwolona.
- później prostym node Switch sprawdzam jaka automatyzacja została wyzwolona i na wyjściu buduje flow jaki mi pasuje.
Dołączam przykład:
[
{
"id": "4fb2a9fa7603121d",
"type": "server-events",
"z": "861c0f49126e91c2",
"name": "",
"server": "85b2e2a05c9d75a2",
"version": 1,
"event_type": "automation_triggered",
"exposeToHomeAssistant": false,
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"waitForRunning": true,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "eventData"
},
{
"property": "topic",
"propertyType": "msg",
"value": "$outputData(\"eventData\").event_type",
"valueType": "jsonata"
}
],
"x": 180,
"y": 500,
"wires": [
[
"c7d4651ad9a2bc54"
]
]
},
{
"id": "c7d4651ad9a2bc54",
"type": "function",
"z": "861c0f49126e91c2",
"name": "",
"func": "msg.payload = msg.payload.entity_id;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 380,
"y": 500,
"wires": [
[
"53d950778872236e"
]
]
},
{
"id": "45cd0b3a4e5391d9",
"type": "api-call-service",
"z": "861c0f49126e91c2",
"name": "Włącz amplituner",
"server": "85b2e2a05c9d75a2",
"version": 3,
"debugenabled": false,
"service_domain": "media_player",
"service": "turn_on",
"entityId": "media_player.salon",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 710,
"y": 460,
"wires": [
[
"701f95854ec5209f"
]
]
},
{
"id": "53d950778872236e",
"type": "switch",
"z": "861c0f49126e91c2",
"name": "Radio",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "automation.jolka_wlacz_radio",
"vt": "str"
},
{
"t": "eq",
"v": "automation.jolka_wylacz_radio",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 510,
"y": 500,
"wires": [
[
"45cd0b3a4e5391d9"
],
[
"e2cb15e463a7261f"
]
]
},
{
"id": "e2cb15e463a7261f",
"type": "api-call-service",
"z": "861c0f49126e91c2",
"name": "Wyłącz aplituner",
"server": "85b2e2a05c9d75a2",
"version": 3,
"debugenabled": false,
"service_domain": "media_player",
"service": "turn_off",
"entityId": "media_player.salon",
"data": "",
"dataType": "jsonata",
"mergecontext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 700,
"y": 500,
"wires": [
[
"73140802731fa8c1"
]
]
},
{
"id": "85b2e2a05c9d75a2",
"type": "server",
"name": "Home Assistant",
"version": 1,
"addon": false,
"rejectUnauthorizedCerts": false,
"ha_boolean": "y|yes|true|on|home|open",
"connectionDelay": true,
"cacheJson": true
}
]