ぷろじぇくと、みすじら。

Google Homeからプロセス、WebHookやIRKitを呼び出してあれこれする

Created at:

Google Home/AssistantからプロセスやWebHook、IRKitなどを呼び出すサーバーアプリケーション、Beatrice を公開しました。

これを家の中で立ち上げて連携しておくと、プロセスを実行したり、IRKitをキックしたり、WebHookを呼び出したりをGoogle Homeから仮想的なデバイスとして認識できるので、例えば「OK Google、Excelをオン(オフ)にして」でExcelを起動したり終了するといったことができます。

WebHookとプロセス実行さえあれば何とでもなるじゃろ感というやつです。

特徴 & IFTTTを使う場合との違い

[それIFTTTでできるよ]と言われそうですがBeatriceはIFTTTのトリガーと異なり、スマートホームデバイスのサービスとして振舞います。

例えばIFTTTのtriggerでは特定のワードに反応してWebHookを呼び出すといった形のため特定のワードを正確に発音する必要があり、「明かりをすべて消して」とお願いしてもホームデバイスとして認識していないので反応しません。

対してBeatriceはキーワード反応ではなく、操作する対象をスマートホームデバイスのサービス(Hueなどと同じ)のデバイスとして見せかけるため、他のホームデバイスと同列の操作可能がです。例えばプロセスの起動/終了を仮想的なスイッチとして公開できるので、いろいろなことができます。ただしその分設定は面倒です。

動機

最初はGoogle Homeで明かりのオンオフなどを行うのにIFTTT経由のIRKit呼び出しでいいかと思ったのですが、いざ使ってみるとそもそも設定したワードから外れると認識されない、スマートホームのデバイス扱いではないのでまとめてコントロールする命令が効かないといったところがイマイチだなーと感じていました。

そこでHomeKitに対するHomebridgeのようになんでもスマートホームのデバイスに見えるようにブリッジするツールがあればよいのではというところが出発点となっています。

仕組み

一般的にGoogle Homeの連携アプリはDialogflowあたりを使うと思いますが、Beatriceでは先にも書いた通りスマートホームデバイス向けのGoogle on ActionsのSmart home appの仕組みを利用します。

Smart home appの作り方のページにも書いてあるのですが、Smart home appはBeatriceに限らず下記の図のようにサービス登録して、連携するというフローとなります。

要するにサービスはOAuthのサーバーとなって、Googleは音声入力を解釈してコマンドに変換した後OAuthのクライアントとして投げつけてくるという構成ですね(意外とめんどくさい)。

そもそもこれは一般向けではなくHueのようなデバイスを多くのユーザーに対して提供する企業向けの仕組みです。そのため完全個人の固有のものであるBeatriceはテストプロジェクトとして動かすことになり、完全無保証です(!)

ちなみにもしこのようなものを作りたい(作ることになった)という方は
actions-on-google/actionssdk-smart-home-nodejsというサンプルがあるのでこちらを参考にするのがおすすめです。

動作環境 & クイックスタート

外部からアクセスでき、.NET Core 2.0が動けば動きます。つまりWindows、Linux、macOSで動作します。Raspberry Pi 3 + Raspbian Lite (Linux)でも動作可能です。

お試ししたい方はQuickStart(Quickとは言っていない)にそってお試しください。これ以外のドキュメントはREADMEしかないのです…。

なお現状サポートしているFeature(Beatrice用語で機能単位)はIRKit, WebHook, Process, Loggingです。

制限

テストプロジェクトで動かす都合、1アカウントにつきプロジェクトは1つしか有効にできません。
そもそも使い方として想定されていないので使えなくなってもまあそういうものです。

おわりに

現状ではオンオフ以外に対応していませんがステートを公開したり、モード切替、Web UIからの実行テストなどにも対応していきたいところです。

微妙なハックをしてる感のある代物の上、まだ作りかけなところも多くきちんと動かないかもしれませんが、もしお役に立つようであればどうぞご利用ください。

ドメインに参加しているとMicrosoftアカウントで同期できない

Created at:

問題

Windows 10でドメインに参加しているデバイスでMicrosoft アカウントを登録してもアカウントの同期設定を有効にできない問題があります。その一方で以前からある環境は有効なままとなっていることもあります。

発生する環境

理由

設定とデータのローミングに関する FAQにあれこれ書いてありますが、要するにWindows 10 Creators Update以降ではいわゆる企業のアカウント(AD, Azure AD)とMicrosoftアカウントを結びつけることができなくなった影響です。

企業の所有の下で Azure AD に接続された Windows 10 デバイスの Microsoft アカウントは、今後ドメイン アカウントに接続できません。 Microsoft アカウントをドメイン アカウントに接続してそのユーザーの全データを Microsoft アカウントに同期させる機能 (Microsoft アカウントと Active Directory との接続による Microsoft アカウントでのローミング機能) は、Active Directory と Azure AD とが接続された環境に参加している Windows 10 デバイスからは削除されます。

Feedback Hubにもフィードバックが起票されていますが、企業アカウントの場合にはMSAではなくてAzure ADのEnterprise State Roamingを使ってくださいと。

In the Windows 10 Anniversary Update, domain joined users who connected their Microsoft Account (MSA) could roam settings and data between Windows devices. Many IT Pros told us that this functionality was not consistent with their policies for managing information owned by the organization. They did not want their PCs roaming to an individual’s personal cloud. A group policy to prevent users from connecting their MSAs did and does exist, but this setting also prevents users from easily accessing their personal Microsoft services. To address IT Pro concerns, we removed the ability for domain joined machines to roam with an MSA. Enterprises can still enable Enterprise State Roaming with Azure Active Directory.

ややこしいのが同期できている環境も場合によってはあるというところでしょうか。

どうやらCreators Update前にすでに同期していた環境であれば設定が引き継がれているためMicrosoftアカウントとの同期が可能なままということのようです。そのため新しくセットアップした場合に設定できずにハマります。

現時点で一応機能は残っているのでレジストリをいじると動かせるという話もありますが、今後を考えるとやめておいた方がよい気もします。

まとめ

つまり要するにどういうことなのかという話ですが…

確かに一貫性はありそうではありますが…うーん、今までできていたので不便ですね…。

まあとりあえずこれを踏まえて新しく設定するのであればアカウントの種類の使い分けとしては以下のような感じにするとよさそうです。

メモ: Enterprise State Roamingで同期するとテーマが同期されない

ところでAzure Active Directoryに参加したデバイスでEnterprise State Roamingを利用した同期を行った際、テーマの設定(背景、ロック画面、アクセントカラー)が同期されませんでした。ExplorerやEdge、タスクバーなどの設定は同期されているので謎です…。