Android voice assistant

Περί τίνος πρόκειται?

Η εφαρμογή Companion του home assistant στο android προσφέρει πολλές διαφορετικές επιλογές ειδοποιήσεων.
Αντί για την αποστολή μιας πραγματικής ειδοποίησης στη συσκευή, μπορείτε να στείλετε μια εντολή ως μήνυμα για την ενεργοποίηση ορισμένων ενεργειών στο τηλέφωνό σας.

Δηλαδή?

Μπορούμε να χρησιμοποιήσουμε τον voice assistant του home assistant ως εναν εναλλακτικό open source assistant που θα εκτελεί λειτουργίες στο ίδιο το τηλέφωνο.

Τι θα χρειαστεί?

  • TTS και STT engines στον HASS σέρβερ.

Αν η εγκατάσταση σου ειναι πλήρες HASS OS μπορείς να εγκαταστησεις τα whisper (Stt) και piper (tts) ως addon.
Αν η εγκατάσταση σου ειναι docker container τοτε θα πρεπει να σηκώσεις τα whisper και Piper ως ξεχωριστά docker containers.

Whisper:

version: '3'
services:
  wyoming-whisper:
    image: rhasspy/wyoming-whisper
    ports:
      - "10300:10300"
    volumes:
      - "./data:/data"
    command: ["--model", "tiny-int8", "--language", "en"]

Στον HASS

Ρυθμίσεις>συσκευές>προσθήκη ενσωμάτωσης>whisper>ok

Ο Host είναι η IP του raspberry pi σας, π.χ. 192.168.1.1

Η θύρα είναι 10300 (μπορεί να αντιστοιχίσει οποιαδήποτε διαθέσιμη θύρα στον κεντρικό υπολογιστή).

Στη συνέχεια, στο Settings>devices>Wyoming protocol>entity>fast whisper>settings>enable

Και τέλος

Settings>voice assistant>assist>επιλογή whisper στο speech to text

Piper:

version: '3'
services:
  wyoming-piper:
    image: rhasspy/wyoming-piper
    ports:
      - "10200:10200"
    volumes:
      - ./data:/data
    command: ["--voice", "en_US-lessac-medium"]

Στον HASS

Ρυθμίσεις>συσκευές>προσθήκη ενσωμάτωσης>piper>ok

Ο Host είναι η IP του raspberry pi σας, π.χ. 192.168.1.1

Η θύρα είναι 10200 (μπορεί να αντιστοιχίσει οποιαδήποτε διαθέσιμη θύρα στον κεντρικό υπολογιστή).

Στη συνέχεια, στο Settings>devices>Wyoming protocol>entity>piper>settings>enable

Και τέλος

Settings>voice assistant>assist>επιλογή piper στο text to speech

Notification Commands

Για να εκτελέσουμε ενα activity μιας android εφαρμογής προσδιορίζοντας το URI της , Θα χρησιμοποιησουμε το service notify.mobile_app με message το command_activity.
Θα χρειαστούμε το divice ID του companion app:
Ρυθμίσεις > companion app > home > device name

  • Examples

Στο παρακατω παραδειγμα θα δουμε οως θα χρησιμοποιησουμε το voice assistant δινοντας του την εντολη να ξεκινησει την πλοηγηση σε μια συγκεκριμενη τοποθεσια.

Script:

Δημιουργούμε απο το UI απο τη διαδρομή settings> automation>scripts>add script>crate new>edit in yaml

alias: Navigate
mode: single
fields:
 location:
   description: The location to navigate to
   example: Nea Smyrni
sequence:
 - service: notify.mobile_app_phone
   data_template:
     message: command_activity
     data:
       intent_package_name: com.here.app.maps
       intent_action: android.intent.action.VIEW
       intent_uri: google.navigation:q={{ location }}?startActivity;

package name ειναι το όνομα του πακέτου της εφαρμογής που θα χρησιμοποιησουμε

Το action ειναι VIEW

Στο uri χρησιμοποιούμε τα google intents μιας και λειτουργουν με την εφαρμογη here

automation

Θα δημιουργήσουμε ενα custom sentence το οποίο θα τρέχει το παραπάνω script.
Επιπρόσθετα θα πρόσθετςι ως μεταβλητή οτι ακούσει μετά το custom sentence .

Δημιουργούμε απο το UI απο τη διαδρομή settings> automation>automation>add automation>crate new>edit in yaml

alias: Navigate
description: ""
trigger:
 - platform: conversation
   command: Go to {location}
condition: []
action:
 - service: script.navigate
   data:
     location: "{{ trigger.slots.location }}"
mode: single

platform: conversation

Conversation ειναι η πλατφόρμα του voice assistant

command: Go to {location}

Στο πεδίο Command γραφυμε τις φράσεις τις οποίες αν θα ακούσει ο assist θα πυροδοτήσει το πεδίο action

"notify.mobile_app_phone:" phone ειναι το device ID μου αντικατέστησε το με το δοκό σου.

‘location’ ειναι το variant που χρησιμοποιείω για το voice match που κανει η voice assistant μετα την εντολή. Τα παρακατω πεδία του automation πρεπει να ταυτίζεται με το πεδίο {{ location }} του script

"fields: location:"

"command: Go to {location}"

data: location:

"{{ trigger.slots.location }}"

Τέλος στο

“service: script.navigate”

Το navigate πρεπει να ταυτίζεται με το alias του script

Επιλογος

Επι της ουσίας αν γνωρίζουμε το uri του activity της εφαρμογής μπορούμε να το εκινησουμε και να το χρησιμοποιησουμε σε οτι αυτοματισμό θέλουμε

3 «Μου αρέσει»