Open42

ハッカソンメモ!

ウメウメ

hexabase API
ヘキサベースです。
BaaSと呼ばれるもの

ウメウメ

blastengine API
メール関係のAPI
メールを送信する。

ウメウメ

洗い出しで皆さんがどんどん出してるのがすごい

ウメウメ

とりあえず、手元でJpegカメラを使うことはできたけど、はてさて

ウメウメ

とりあえず、つくりたい方向性はできた!技術的にできるかはわからない!

ウメウメ

機能としては、LINEに通知する機能と、PCの音声にて通知する機能をつくる。
PC音声はnode.jsの音声出力するのをとりあえず使う。

ウメウメ

node.jsで、中に保存するときは以下を参考にした。
ちなみに、fsはrequireする必要がある。

obniz.io6.output(true);
obniz.io9.output(false);
var cam = obniz.wired("JpegSerialCam", {vcc:0, cam_tx:1, cam_rx:2, gnd:3});
await cam.startWait({baud: 38400});
const jpegData = await cam.takeWait();
fs.writeFile("output.jpg", Buffer.from(cam.arrayToBase64(jpegData), "base64") , (err) => {
  if (err) console.log(err);
});

ウメウメ

なんと、LINEbotで画像を送るときは、URLを公開していないとダメなのか、、、どうすりゃええの?

ウメウメ

なんかGoogleDriveに保存してから、画像取ってこようと考えたけど、いまいちわからんので、いったん飛ばして、LINEを作って画像を送信するところまで作ろう

ウメウメ

LINEbotでエコーバックまでは完成。
これ作るの、いつもちょっとどきどきする笑
ここ自動化できたら良いのにね。

ウメウメ

gyazo使ってみた!けど、保存は簡単にできたけど、LINEで送るとちょっと違う感じになるね。URLとして送るのもありかもしれぬ

ウメウメ
'use strict';

const player = require('play-sound')();
const express = require('express');
const line = require('@line/bot-sdk');

const PORT = process.env.PORT || 3000;

// Messaging APIを利用するための鍵を設定します。ここは自分のものに書き換えてください。
const config = {
    channelSecret: '**********,
    channelAccessToken: '************************'
};
const client = new line.Client(config);

// リプライメッセージ返答処理
// ユーザーからメッセージがあったときに呼び出されます
async function handleEvent(event) {
    if (event.type !== 'message' || event.message.type !== 'text') {
        return Promise.resolve(null);
    }
    
    // 最後にメッセージに入れます。
    let resMessage = [];
    resMessage.push({
        type: 'text',
        text: 'https://gyazo.com/32478dd423a4834abacbe9cc9b311d8e'
    // originalContentUrl: 'https://drive.google.com/uc?id=1fLF_1vECTmMSgzhuIYFwfosuoB3NMmgV', 
    // previewImageUrl: 'https://drive.google.com/uc?id=1fLF_1vECTmMSgzhuIYFwfosuoB3NMmgV'
    // originalContentUrl: 'https://gyazo.com/32478dd423a4834abacbe9cc9b311d8e', 
    // previewImageUrl: 'https://gyazo.com/32478dd423a4834abacbe9cc9b311d8e'
    });
    player.play('./audio/opening.mp3', err => {
        if (err) throw err
    });

    console.log(resMessage)
    // ユーザーにリプライメッセージを送ります。
    return client.replyMessage(event.replyToken, resMessage);
}

// ここ以降は理解しなくてOKです
const app = express();
app.get('/', (req, res) => res.send('Hello LINE BOT! (HTTP GET)'));
app.post('/webhook', line.middleware(config), (req, res) => {

    if (req.body.events.length === 0) {
        res.send('Hello LINE BOT! (HTTP POST)');
        console.log('検証イベントを受信しました!');
        return;
    } else {
        console.log('受信しました:', req.body.events);
    }

    Promise.all(req.body.events.map(handleEvent)).then((result) => res.json(result));
});

// ローカルで確認するときに必要
app.listen(PORT);
console.log(`ポート${PORT}番でExpressサーバーを実行中です…`);
ウメウメ

画像データからバイナリ値を取得する方法を模索中、、、

ウメウメ

ああ、いやそもそも、カメラから保存するときにバイナリデータ挟んでるやんけ

ウメウメ

サウンドセンサーは、なんか使えないなー

ウメウメ

くっつけて、0.3Vくらいが閾値かなー?

ウメウメ

ううー、やはり、最終的な動作を実現するときに、微細なところを詰めていくと時間がかかるな、、、

ウメウメ

リッチメニューって同時に全部作成しないとダメなことを忘れて、一つ設定したら、適当してまた次やってみて、前のやつ消えてるやん、ってことがあるよね

ウメウメ

余裕があれば、サポートAPIのLINE WORKSとかそのあたり触ってみたかったなー他の人の投稿みて、刺激うける!できるかはまったくわからんが

ウメウメ

基本的に、ハッカソンはやること決めて望めるなら臨んだほうが良い気がしてきた。発表資料作るのもハッカソンであると心得る。

ウメウメ

途中からここに残す作業を忘れていた、、、反省。。。
ポモドーロとか使って、休憩中に書いたりするのも良いかもしれない。今後開発とかするときに試してみよう