LINE Things로 쓰레기 일 알림 앱을 만들어 보았습니다.
17862 단어 linebotLIFFLINEThings
만든 것
휴지통에 착용 할 수있는 유형의 "쓰레기 일 알림"IoT 앱
LINE Things Award에 응모했습니다.
LINE bot상에서 움직일 수 있는 LIFF(LINE Front-end Framework)를 사용해, obniz에 정보를 등록해 obniz가 쓰레기의 날을 통지해 주는 앱을 만들었습니다.
LINE things의 좋은 곳은 독자적인 앱을 만들지 않아도 BLE 경유로 디바이스와 접속해 디바이스를 조작할 수 있는 점과
장치에서 LINE으로 자동으로 통신을 보낼 수있는 자동 통신이라는 기능을 사용하여 bot에서 메시지를 보낼 수 있다는 것이 좋은 점이었습니다!
만든 이유
사용법
구성
LINE Things의 BLE 통신을 할 수 있는 이점을 살린다면 wifi에 접속할 수 있는 obniz가 아니어도 좋다고 생각했지만, 집에 있었기 때문에 채용했습니다! 사용하기 쉽고 최고였습니다!
개발 흐름
코드 발췌 및 개발 tips
BLE 연결 정보
obniz와 LIFF간에 공통 UUID를 신뢰하는 연결
LIFF에서 장치를 찾고있는 곳 .js
device.gatt.connect().then(() => {
// Get service
device.gatt.getPrimaryService(USER_SERVICE_UUID).then(service => {
liffGetUserService(service);
}).catch(error => {
uiStatusError(makeErrorMsg(error), false);
});
device.gatt.getPrimaryService(PSDI_SERVICE_UUID).then(service => {
liffGetPSDIService(service);
}).catch(error => {
uiStatusError(makeErrorMsg(error), false);
});
// Device disconnect callback
const disconnectCallback = () => {
// Remove disconnect callback
document.getElementById("log").innerText = "failed";
device.removeEventListener('gattserverdisconnected', disconnectCallback);
// Try to reconnect
initializeLiff();
};
device.addEventListener('gattserverdisconnected', disconnectCallback);
}).catch(error => {
document.getElementById("log").innerText = "gets";
uiStatusError(makeErrorMsg(error), false);
});
데이터 교환
LIFF에서 장치로 데이터를 보내는 곳 .js
function submitValue(array){
let param = localStorage.getItem('param');
let str = JSON.stringify( param );
window.writeCharacteristic.writeValue(
Uint8Array.from(str.split(""), e => e.charCodeAt(0))
).catch(error => {
document.getElementById("log").innerText = error;
uiStatusError(makeErrorMsg(error), false);
});
};
장치에서 데이터를받는 곳 .js
writeCharacteristic.onwritefromremote = function(address, newvalue) {
let str = Array.from(newvalue, e => String.fromCharCode(e)).join("");
param = JSON.parse(str);
}
UUID를 사용하여 얻는 Characteristic 객체를 사용하여 charasteristic에 값을 읽고 씁니다.
편리.
charasteristic.js
var writeCharacteristic = new obniz.ble.characteristic({
"uuid" : writeCharacteristicUUID,
"properties" : ["write"],
"data" : [0x00]
});
쓰레기의 날 체크
쓰레기 일 체크.js
StartTimer = function() {
// 30分ごとの処理
timerID = setInterval(Timer, 1800000);
}
StopTimer = function() {
clearInterval(timerID);
}
Timer = function() {
if(!getParamFlag)
return;
}
let today = new Date();
checkDaysSchedule(today);
// checkDaysSchedule(tomorrow);
}
function checkDaysSchedule(day){
let date = weekdays[day.getDay()];
let weekNum = Math.floor((day.getDate() - day.getDay() + 12 ) / 7);
if(isSchedule) {
checkSchedule(date, weekNum);
}
}
function isSchedule(date){
return param["schedule"][date] != null;
}
async function checkSchedule(date, weekNum){
let schedule = param["schedule"][date];
let garbageInfo = param["garbageInfo"][schedule];
garbageInfo["frequency"].forEach(function(e) {
if(e == weekNum){
let output = "";
output += date + "は" + schedule + "日です。\n";
output += garbageInfo["hour"] + "時" + garbageInfo["min"] + "収集です。";
obniz.display.print(output);
NotifyToLine();
swichLed(true);
}
})
}
타이머 돌려 30분마다 통지를 할 필요가 있는지 판별하고 있습니다!
힘든 점
즐거운 점
또 뭔가 만들어요!
참고한 기사
LINE Things 자동 통신 기능 핸즈온
Reference
이 문제에 관하여(LINE Things로 쓰레기 일 알림 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oyaoyaoya/items/ebc9b7380e9626368c64
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(LINE Things로 쓰레기 일 알림 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oyaoyaoya/items/ebc9b7380e9626368c64텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)