스마트 폰의 배터리 과충전을 방지하고 싶었고 Google Home의 힘을 빌려 보았습니다.
배경
매일 스마트 폰이나 태블릿을 여러 대 충전하고 있지만, 충전이 끝난 것을 눈치 채지 않고 과충전 그대로 방치하고있는 것이 상당히 있습니다. 괜찮을까 매번입니다. 집 어디에 있어도 충전 종료를 알고 싶습니다.
흐름
1. Raspberry Pi에서 간단한 Webhook을 이동합니다.
2. 안드로이드 스마트 폰에 MacroDroid - 장치 자동화을 설치하고 "배터리> = 80 %"라면 Webhook에 "기종명 ◯◯"을 통지합니다.
3. 웹훅이 알림을 받으면 Google Home에 '◯◯ 충전을 마치세요.'라고 말하도록 알립니다.
참고 : Qiita - Webhook이란?
시스템 구성

Raspberry Pi 설정
1. Raspbian Stretch 패키지 업데이트
$ cd
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.3 (stretch)
Release: 9.3
Codename: stretch
2.Node.js 및 npm 설치
참고 : Qiita - 우분투에 최신 Node.js를 어려움없이 설치
$ sudo apt-get install nodejs npm
$ sudo npm cache clean
$ sudo npm install n -g
$ sudo n stable
$ sudo ln -sf /usr/local/bin/node /usr/bin/node
$ node -v
v9.4.0
$ sudo apt-get purge nodejs npm
3.Node.js+Express로 간단한 Webhook 만들기
참고 : Qiita - Node.js + Express 4.x + MongoDB (Mongoose)에서 RESTful jsonAPI 서버의 작성을 정중하게 설명한다. + 테스트 클라이언트를 사용한 API 테스트까지
참고 : 초보자를위한 Node.js 프로그래밍 시작 -
참고 : Qiita - Google Home 개발 시작 / google-home-notifier 설명
참고 : GitHub - noelportugal/google-home-notifier
$ npm init
$ npm install --save express
$ npm install --save body-parser
$ sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
$ npm install --save google-home-notifier
$ cp -p ./node_modules/mdns/lib/browser.js ./node_modules/mdns/lib/browser.js.org
$ vi ./node_modules/mdns/lib/browser.js
$ diff ./node_modules/mdns/lib/browser.js ./node_modules/mdns/lib/browser.js.org
117,122d116
< // Browser.defaultResolverSequence = [
< // rst.DNSServiceResolve()
< // , 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo()
< // , rst.makeAddressesUnique()
< // ];
<
124c118,119
< rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]})
---
> rst.DNSServiceResolve()
> , 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo()
(1). mywebhook.js를 만듭니다.
mywebhook.js
// 必要なパッケージの読み込み
var express = require('express');
var app = express();
const googlehome = require('google-home-notifier')
const language = 'ja';
googlehome.device('Google-Home', language);
// 3000番を指定
var port = process.env.PORT || 3000;
// expressでAPIサーバを使うための準備
var router = express.Router();
router.get('/', function(req, res) {
var m = req.query.m;
if ( m ) {
googlehome.notify(m+'の充電を終えてください。', function(res) {
console.log(res);
});
res.json({ message: 'OK' });
}
});
// ルーティング登録
app.use('/api', router);
//サーバ起動
app.listen(port);
console.log('listen on port ' + port);
(2). mywebhook.js를 실행합니다.
$ node mywebhook.js
listen on port 3000
(3). mywebhook.js의 동작을 확인합니다.
Raspberry Pi의 IP 주소는 192.168.3.210입니다.
$ curl http://192.168.3.210:3000/api?m=Nexus4
Google Home에서 'Nexus4 충전을 마칩니다.'라고 들으면 문제가 없습니다.
5.supervisor로 mywebhook.js를 데몬화
$ sudo apt-get install supervisor
$ sudo vi /etc/supervisor/conf.d/mywebhook.conf
/etc/supervisor/conf.d/mywebhook.conf
[program:mywebhook]
command=/usr/bin/sudo /usr/bin/node /home/pi/mywebhook.js
numprocs=1
autostart=true
user=pi
$ sudo reboot
Android 스마트폰 설정
1. MacroDroid - 장치 자동화을 설치합니다.
2. 매크로를 만듭니다.
(1). "트리거"
배터리 잔량
⦿ 지정 잔량으로 증가/감소 시
⦿~까지 증가
80%
(2). "액션"
웹사이트 열기/HTTP 취득
htp://192.168.3.210:3000/아피? m = 네 s4
☑ HTTP GET (웹 브라우저 미사용)

마지막으로
이것을 사용해, 지금도 현역으로 사용하고 있는 Galaxy Ace나 Nexus4를 계속 소중히 사용해 가고 싶습니다(=^·^=)
Reference
이 문제에 관하여(스마트 폰의 배터리 과충전을 방지하고 싶었고 Google Home의 힘을 빌려 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/somainit/items/d0da2cef2ec465827cb5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)