Are you a good talker now? Leave it to Google Home to tell you what's difficult to say in just 10 lines!
table of contents
Hello.
I'm Mandai, in charge of Wild on the development team.
At the end of last year, I received a Google Home at a company reception, but since it was gathering dust at home, I brought it to work and let it talk all I wanted.
What to prepare
The only equipment I'll be using this time is Google Home (mini can also be used) and a PC.
The PC does not need to be a Raspberry PI.
If you just want it to talk, anything is fine as long as
google-home-notifier In the case of Windows, rebuilding node-gyp seems to be a problem.
this article may be helpful.
In my case, the CentOS VM was running at the time I was planning to do it, so I was able to quickly create it with the VM.
Additionally, if you have the node cron module, you can also make scheduled communications.
Preparation
- Check the local IP of Google Home
- Installing node.js
- Installing the libraries required for communication between the PC and Google Home
- Install the required modules with npm
- npm install google-home-notifier
- npm install cron (optional)
Check the local IP of Google Home
For Android, you can check from the Google Home app
Display the menu from the three lines on the top left and select your device.
If you are able to connect with Google Home, select "Settings" and the IP address should be displayed at the bottom.
Installing node.js
You can use yum, but I prefer something newer.
This time I'm using node.js v8.9.4.
Installing the libraries required for communication between the PC and Google Home
When you try to install google-home-notifier with npm after preparing node, you may get something like the following.
npm install google-home-notifier > [email protected] install /home/vagrant/Documents/googlehome/node_modules/mdns > node-gyp rebuild make: Entering directory `/home/vagrant/Documents/googlehome/node_modules/mdns/build' CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o In file included from ../src/dns_sd.cpp:1:0: ../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory #include ^ compilation terminated. make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1 make: Leaving directory `/home/vagrant/Documents/googlehome/node_modules/mdns/build' gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258: 23) gyp ERR! stack at emitTwo (events.js:126:13) gyp ERR! stack at ChildProcess.emit (events.js:214:7) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process .js:198:12) gyp ERR! System Linux 3.10.0-693.17.1.el7.x86_64 gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules /node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /home/vagrant/Documents/googlehome/node_modules/mdns gyp ERR! node -v v8.9.4 gyp ERR! node-gyp -v v3 .6.2 gyp ERR! not ok npm WARN [email protected] No description npm WARN [email protected] No repository field. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] install: `node-gyp rebuild` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] install script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/vagrant/.npm/_logs/2018-03-17T06_56_20_006Z-debug.log
The error is that the header file dns_sd.h to include does not exist, but if you run the command below, the header file will also be installed.
sudo yum install avahi-compat-libdns_sd-devel
Errors may occur when installing using npm related to node-gyp, but since node-gyp is simply node.js, it is a tool that automates the compilation of sources written in C++ as in this case, so it is usually necessary to build. The problem is a lack of required files.
nvm , it might be easier to clean up afterwards!
Install the required modules with npm
All you have to do is install the necessary modules from npm.
The minimum requirement is google-home-notifier, without which you cannot link with Google Home.
If you install node-cron as an option, it will chat periodically, which is perfect for lively.
# Build a working environment mkdir path/to/project cd path/to/project npm init # Install google-home-notifier npm install google-home-notifier # Install module for periodic execution (cron) npm install cron
easy sauce
The code prepared here is very simple, so I will expose it first.
// sample1.js const googlehome = require('google-home-notifier'); const googlehome_name = 'Your Google Home Name'; // Google Home name (any name) const googlehome_ip = 'xxx.xxx.xxx.xxx '; // IP address of Google Home const language = 'ja'; // Language you want Google Home to speak (English in US) const message = 'Let's chat'; // Content you want Google Home to speak googlehome.device (googlehome_name, language); googlehome.ip(googlehome_ip); googlehome.notify(message, (res) => { console.log(res); });
Save the above source as sample1.js.
Execute the following command.
node sample.js
There is almost no need for explanation, but there are three places to change, so please enter them according to your environment.
- googlehome_name
- googlehome_ip
- language
Please be careful around the 8th and 9th line.
It seems that a lot of people are addicted to it, and originally it seems that you can resolve the name (DNS lookup) using the name given to Google Home with just the 8th line, but it often doesn't work, so you can do a DNS lookup with the name given to Google Home on the 9th line. Specified.
If you are specifying an IP address, line 8 is unnecessary, but it seems that the language setting can only be done from the device() method, so I purposely wrote both.
Develop it so that it can be executed regularly
Since the google-home-notifier module is very well made, I didn't have much to do with it, so I decided to develop it a little more and say something periodically, preferably with cron, so I did something like that. I'll take a look.
I would like to implement it using the npm module cron instead of using Linux cron.
// sample2.js const googlehome = require('google-home-notifier'); const CronJob = require('cron').CronJob; const messages = require('./messages'); // Execution interval and content to talk about const googlehome_name = 'Your Google Home Name'; // Google Home name (anything is fine) const googlehome_ip = 'xxx.xxx.xxx.xxx'; // Google Home IP address const language = 'ja '; // Language you want Google Home to speak (English in US) 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', }) ; });
Below is a definition file containing the sentences to be spoken and the schedule.
// messages.js module.exports = [ // The writing style is almost the same as Linux cron { schedule: '0 0 10,13,16,19,22 * * *', message: 'Hogehoge' }, / / Note the concept of seconds at the beginning { schedule: '0 0 22 * * *', message: 'test' }, // Write with numbers, asterisks, commas, hyphens, and slashes { schedule: '0 */5 9-18 1,2,3 * *', message: 'I will speak every 5 minutes from 9:00 to 18:00 in January, February, and March' }, ];
If you make messages.js fatter, it will talk about various things and you will be able to enjoy it for a while.
summary
I had a lot of fun just having a device that I could talk to.
Above all, the level of abstraction of google-home-notifier is so great that you can say that you don't need to do anything on your part, but it's amazing that you can just give the string you want to speak as an argument. I think it could become more common.
I thought that if all this was included in the Google Home package, it would probably sell better, but would it be too much?
That's it.