你现在很健谈吗? 难的事情就交给Google Home 10行告诉你吧!

你好。
我是Mandai,负责Wild 开发团队。
去年年底,我在公司年终聚会上收到了一台 Google Home,但它一直放在家里落灰,所以我把它带到办公室,让它自由发挥。
需要准备什么
这次你只需要一台 Google Home(或迷你版)和一台电脑。
这台电脑不一定非得是树莓派。
如果你只是想让它能说话,任何能运行
google-home-notifier 的对于 Windows 系统来说,重新编译 node-gyp 似乎有点麻烦。
这篇文章或许对你有帮助。
就我而言,我计划执行此操作时,CentOS 虚拟机正在运行,因此我能够在虚拟机中快速创建它。
如果您安装了节点cron
准备
- 查找您的 Google Home 的本地 IP 地址
- 安装 node.js
- 安装电脑和 Google Home 之间通信所需的库
- 使用 npm 安装所需的模块
- npm install google-home-notifier
- npm install cron(可选)
查找您的 Google Home 的本地 IP 地址
对于安卓用户,您可以通过Google Home 应用
显示左上角的三行菜单,然后选择“设备”。
如果它已连接到 Google Home,请选择“设置”,IP 地址应显示在底部。
安装 node.js
你可以使用 yum,但最好使用尽可能新的版本。
这次我使用的是 node.js v8.9.4。
安装电脑和 Google Home 之间通信所需的库
如果在准备好 Node.js 环境后尝试使用 npm 安装 google-home-notifier,可能会遇到以下错误:
npm install google-home-notifier > [email protected] install /home/vagrant/Documents/googlehome/node_modules/mdns > node-gyp rebuild make: 进入目录“/home/vagrant/Documents/googlehome/node_modules/mdns/build” CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o 在包含自 ../src/dns_sd.cpp:1:0 的文件中: ../src/mdns.hpp:32:20: 致命错误:dns_sd.h:没有该文件或目录 #include编译终止。make:*** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] 错误 1 make:离开目录“/home/vagrant/Documents/googlehome/node_modules/mdns/build” gyp ERR! 构建错误 gyp ERR! 堆栈错误:`make` 失败,退出代码:2 gyp ERR! 堆栈位于 ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23) gyp ERR! 堆栈位于 emitTwo (events.js:126:13) gyp ERR! 堆栈位于 ChildProcess.emit (events.js:214:7) gyp ERR!堆栈信息位于 Process.ChildProcess._handle.onexit (internal/child_process.js:198:12) gyp ERR! 系统 Linux 3.10.0-693.17.1.el7.x86_64 gyp ERR! 命令 "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! 当前工作目录 /home/vagrant/Documents/googlehome/node_modules/mdns gyp ERR! node 版本 v8.9.4 gyp ERR! node-gyp 版本 v3.6.2 gyp ERR! 失败 npm WARN [email protected]没有描述 npm WARN [email protected]没有仓库字段。 npm ERR! 代码 ELIFECYCLE npm ERR!错误号 1 npm ERR! [email protected]安装:`node-gyp rebuild` npm ERR! 退出状态 1 npm ERR! npm ERR! [email protected]安装脚本执行失败。 npm ERR! 这可能不是 npm 的问题。上方可能还有其他日志输出。 npm ERR! 本次运行的完整日志可在以下位置找到: npm ERR! /home/vagrant/.npm/_logs/2018-03-17T06_56_20_006Z-debug.log
错误信息显示要包含的头文件 dns_sd.h 不存在,但可以通过运行以下命令安装该头文件。
sudo yum install avahi-compat-libdns_sd-devel
由于 node-gyp 的原因,您在使用 npm 安装时可能会遇到错误,但 node-gyp 只是一个使用 node.js 自动编译用 C++ 编写的源代码的工具,就像本例中一样,因此问题通常是缺少构建所需的文件。
nvm,之后清理起来可能会更容易!
使用 npm 安装所需的模块
你只需要从 npm 安装必要的模块即可。
最低要求是安装 google-home-notifier,没有它您将无法连接到 Google Home。
如果您添加 node-cron 作为选项,它会定期发出语音提示,非常适合用来活跃气氛。
# 创建工作环境 mkdir path/to/project cd path/to/project npm init # 安装 google-home-notifier npm install google-home-notifier # 安装用于定期执行(cron)的模块 npm install cron
简易酱汁
我们将提供的代码非常简单,所以我们先向您展示一下。
// sample1.js const googlehome = require('google-home-notifier'); const googlehome_name = '您的 Google Home 名称'; // 您的 Google Home 的名称(任意名称均可) const googlehome_ip = 'xxx.xxx.xxx.xxx'; // 您的 Google Home 的 IP 地址 const language = 'ja'; // 您希望 Google Home 使用的语言(美国用户为英语) const message = '我们聊聊吧'; // 您想说的话 googlehome.device(googlehome_name, language); googlehome.ip(googlehome_ip); googlehome.notify(message, (res) => { console.log(res); });
将上述代码保存为 sample1.js。
使用以下命令运行它。
node sample.js
几乎不需要解释,但有三处需要修改,请根据您的实际情况进行修改。
- googlehome_name
- googlehome_ip
- 语言
需要注意的是第 8 行和第 9 行。
有些人似乎会卡在这里,虽然第 8 行应该足以使用您为 Google Home 指定的名称解析名称(DNS 查找),但通常不起作用,因此我们在第 9 行指定 IP 地址。
如果您指定了 IP 地址,您可能会认为第 8 行是不必要的,但由于语言设置似乎只能通过 device() 方法完成,因此我特意将两者都包含在内。
将其发展成可以定期执行的程序。
由于 google-home-notifier 模块已经做得非常出色,所以这方面需要做的并不多,因此我将尝试对其进行一些扩展,使其能够定期发出通知,最好使用 cron 定时任务。我会尝试
使用 npm 模块 cron 而不是 Linux cron 来实现它。
// sample2.js const googlehome = require('google-home-notifier'); const CronJob = require('cron').CronJob; const messages = require('./messages'); // 描述执行间隔和消息内容的文件 const googlehome_name = '您的 Google Home 名称'; // 您的 Google Home 的名称(任意名称均可) const googlehome_ip = 'xxx.xxx.xxx.xxx'; // 您的 Google Home 的 IP 地址 const language = 'ja'; // 您希望 Google Home 使用的语言(美国用户默认为英语) googlehome.device(googlehome_name, language); googlehome.ip(googlehome_ip); messages.forEach((m) => { new CronJob({ cronTime: m.schedule, onTick: () => { googlehome.notify(m.message, (res) => { console.log(res); }); }, start : true, timeZone: 'Asia/Tokyo', }); });
下面是一个定义文件,其中包含口语句子和时间表。
// messages.js 模块导出 = [ // 语法几乎与 Linux cron 相同 { schedule: '0 0 10,13,16,19,22 * * *', message: 'Hogehoge' }, // 注意秒的概念在开头 { schedule: '0 0 22 * * *', message: 'Test' }, // 使用数字、星号、逗号、连字符和斜杠来编写 { schedule: '0 */5 9-18 1,2,3 * *', message: '一月、二月和三月,每天 9:00 到 18:00 每 5 分钟播报一次' }, ];
如果你把 messages.js 文件加厚,它会告诉你各种各样的信息,你可能会觉得很有趣一段时间。
概括
拥有一个会说话的设备就给我带来了很多乐趣。
更棒的是,google-home-notifier 的抽象程度非常高,我们几乎不需要做任何操作,只需提供你想让它说的话作为参数就行了,这真是太神奇了。我觉得这种功能可能会更普及。
如果把所有这些功能都包含在 Google Home 套件里,销量肯定会更好,但这会不会意味着功能太多了呢?
就是这样。
0