Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

GitでIoT的なことをする。

More than 3 years have passed since last update.

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で。

https://github.com/syuhei176/git-iot

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に迷惑をかけないようにしましょう

iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away