Я продолжаю рассказ о том, как сделать интеграцию с Google Home своими руками. В этом проекте я буду интегрировать несколько домашних кондиционеров, которые исходно управляются с пульта по infrared. Интеграция с Google Home означает возможность сказать “Hey G, turn on air conditioner” и получить желаемый результат.

В этой части я расскажу, как создать проект в Google Assistant и Firebase. И для разогрева создам простой “Hello, world” для Firebase Functaions.

Полный список заметок этой серии:

Создагние проектов Assistant и Firebase

У Google Home нет собственной консоли и собственных проектов. Его проекты - это проекты определенной категории в рамках Google Assistant. Дальше я расскажу о шагах, чтобы “накликать” себе проект. Если вы уже знакомы с консолями Assistant и Firebase - прочитайте два абзаца ниже и смело листайте к следующей статье.

Итак, чтобы создать проект:

Actions on Google console -> Add/import project -> Укажите имя -> Create project -> дальше из списка Home control -> Home automation. Проект создан, настраивать буду потом.

Вкладка Develop -> В левом меню в самом низу Backend Services -> Cloud Functions -> View in Firebase – и в Firebase будет создан одноименный проект. Выглядит удобно.

ID созданного проекта можно посмотреть в Project Settings как в Actions on Google console, так и в Firebase Console. Запомните его, он нам потребуется.

Далее локально:

npm install -g firebase-tools
firebase login
firebase init functions

При логине используйте тот же аккаунт, в котором созданы проекты. При инициализации выберите созданный на предыдущем шаге проект и TypeScript.

Исходники функций будут лежать внутри созданного каталога проекта в functions/src/, там исходно есть index.ts

“Hello, World” на TypeScript в Firebase Functions

Дальше я создаю “Hello, World” в Firebase Functions.

Чтобы структурировать исходники, тестовая функция пойдет в файл hello.ts:

import * as functions from 'firebase-functions'

export const helloWorld = functions.https.onRequest((request, response) => {
    response.send('Hello from Firebase!\n\n');
});

В index.ts остается только повторный экспорт:

export * from "./hello"

Дальше можно задеплоить и вызвать функцию с помощью curl. URL функции можно посмотреть в сообщениях при деплое, и он всегда виден в консоли Firebase.

firebase deploy --only functions
curl https://us-central1-YOUR-PROJECT-ID.cloudfunctions.net/myhome

Немного о TypeScript

На примере этой простейшей функции видно, как в TypeScript осуществляется импорт и экспорт. Эти места придется всегда исправлять, если копипастить себе какие-то чужие примеры на JavaScript.

Поскольку это мое первое знакомство с TypeScript и почти первое с Firebase Functions, я нагуглил немного ресурсов:

Для написания кода я использую WebStorm от JetBrains, версия из “Early Access Program” бесплатная.