LoginSignup
12
12

More than 5 years have passed since last update.

GitでIoT的なことをする。

Last updated at Posted at 2016-08-03

IoTというとエッジデバイスでデータを集計してメッセージブローカーやIoTプラットフォームでうんぬんとかいうのを想像しますが、今回はそういうのを使わずにIoT的なことをしたいと思いました。

ちょうど下記のような記事を見つけまして。
コンテンツ・アドレッサブルで多バージョン分散データベースNomsのAttic Labsが$8.1Mを調達

NomsというのはGitにアイデアを得た分散DBということらしいのですが、じゃあ逆にGitでIoT的なことができるのか?ということで、普段使っている、GitだけでIoT的なことをやってみました!これぞサーバレスアーキテクチャですね。(嘘)

ここからGitの機能で、MacのLoad Averageを定期的にデータを取得し、Webブラウザでチャートを表示する過程を書いています。ネタですので時間を無駄にしたくない人は気をつけましょう!

IoTのThings側

デバイス側はgitが使える、パワフルな環境じゃないといけません。とりあえずMacで、Load Average取ります。localで定期的にcommitするソースコードは以下です。

var child_process = require('child_process');
var fs = require('fs');


getUptimeLoop();

function getUptimeLoop() {
    getUptime(function(data) {
        fs.appendFileSync('data.txt', data[0] + "," + data[1] + "," + data[2] + "\n");
        git_cmd();
        setTimeout(getUptimeLoop, 10000);
    });
}

function getUptime(cb) {
    var exec = require('child_process').exec;
    var child = exec('uptime', function (error, stdout, stderr) {
        var index = stdout.indexOf('load averages:');
        var str = stdout.substr(index+15);
        var las = str.split(' ');
        cb([Number(las[0]), Number(las[1]), Number(las[2])]);
    });
}


function git_cmd(cb) {
    child_process.execSync('git add data.txt');
    child_process.execSync('git commit -m "Added data"');
}

data.txtにLoad Averageの値をappendしていきます。それを定期的にgit add .git commitします。

動かす前にgit initしておきます。
実際に動かすとこんな感じです。

git-iot1.gif

Internetへ!

できました。リモートにpushします。今回はGithubで。

remoteリポジトリを追加します。

git remote add origin git@github.com:syuhei176/git-iot.git

git pushは1日に一回くらいの想定です。今回は手動で。gh-pagesブランチにpushします。

git push origin gh-pages

pushされました。

スクリーンショット 2016-08-04 1.10.32.png

data.txtのhistoryがぎっしり。

スクリーンショット 2016-08-04 1.13.44.png

データを可視化

gh-pagesブランチにpushしているのでGithubページが使えます。htmlとjsを書けば、貯めたデータをブラウザでチャート化できます。

スクリーンショット 2016-08-04 9.25.46.png

出来上がったチャートのURLはこちら:https://syuhei176.github.io/git-iot/

まとめ

なんとIoTプラットフォームもメッセージブローカーも何も使わずに、デバイスからデータを取ってWebで可視化できました。今回は完全にネタですので。はい、どうもすみません!

注) Githubに迷惑をかけないようにしましょう

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12