스마트 폰의 배터리 과충전을 방지하고 싶었고 Google Home의 힘을 빌려 보았습니다.

힘을 빌려 보았다고 해도, 스마트폰의 배터리가 80% 충전에 이르면, 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를 계속 소중히 사용해 가고 싶습니다(=^·^=)

좋은 웹페이지 즐겨찾기