センサ等で取得した値の保存方法について



  • センサ等の取得した値を保存するにはどのような方法があるのでしょうか?
    クラウド上でデータ保存して、後からそのデータをダウンロードして確認するということはできるのでしょうか?


  • administrators

    @Inventor-1m さん

    いくつか方法がありますので、状況に合わせて選んでいただければと思います。

    1. obniz cloud apiを使ってobniz cloudにデータを保存する
      obnizのユーザー登録&デバイス登録をして頂くと、リポジトリ内にデータを保存できるようになります。
      ドキュメントがこちらにありますが、SDKが現在はないため、少々難易度が高いかも知れません。
      https://obniz.io/ja/doc/obniz_api/cloud_repository

    2. Dropboxをつかう
      Dropbox での保存方法はこちらにて紹介しています。
      https://obniz.io/ja/lessons/dropbox/lessons_dropbox

    3. ambientを使う
      ambientというストレージ+グラフ化サービスがあります。
      グラフ化までしてしまいたい場合はこちらも選択肢になるかと思います。
      https://ambidata.io/samples/devices/obniz/

    4. AWS S3、google cloudなどを使う
      obnizのプログラムはawsやgoogle cloudなど、どんなクラウドサービスとも連携することができます。具体的に紹介しているサイトが有るわけではありませんが、それらと組み合わせて保存することも可能です。



  • ご連絡が遅くなり、大変申し訳ありません。
    ご回答いただき、ありがとうございます。
    内容を確認いたします。
    不明点等があれば、再度、ご連絡させていただきますので
    よろしくお願いいたします。



  • 早速、2の方法で、保存方法を勉強しているのですが
    データは上書きしかできないのでしょうか?
    上書きをせず、定期的にデータを取得するのはどのようにすればよいでしょうか?
    ご確認をよろしくお願いいたします。


  • administrators

    @Inventor-1m さん

    Dropboxへの保存ですね。
    DropboxのAPIを確認しましたが、追記は無いようでした。

    別の方法として、ファイルの内容を取得→追記したテキストを作成→ファイル保存 のようにやると追記することができます。

    もしくは、ファイル名を変えて頂くと、上書きされずに新しいファイルで作ることができます。



  • ご回答をいただき、ありがとうございます。
    追記がないことは承知いたしました。
    一つのファイルにまとめたいので、
    前者の方法を考えていますが、具体的にはどのようにすればよいでしょうか?

    聞いてばかりで、大変申し訳ありませんが
    よろしくお願いいたします。


  • administrators

    @Inventor-1m さん

    ①ファイルの内容を取得→②追記したテキストを作成→③ファイル保存 ですが、
    ①についてはこちらが参考になるかと思います
    https://stackoverflow.com/questions/42622526/dropbox-api-v2-javascript-read-file

    上記の記事内で、test.txtのデータを読むために書きを行っています。

    dbx.filesDownload({path: '/test.txt'})
        .then(function (response) {
            var blob = response.fileBlob;
            var reader = new FileReader();
            reader.addEventListener("loadend", function() {
                console.log(reader.result); // will print out file content
            });
            reader.readAsText(blob);
        })
        .catch(function (error) {
            ...
        })
    

    これのconsole.log(reader.result);の部分にてデータの取得ができますので
    文字列を追記して②追記したテキストを作成していただければと思います。

    ③についてはすでに実装されているかと思います。

    上記は少々難しいので、難易度が高ければ教えてください。
    もし用途にあうようでしたら、dropboxではなく、ambientを使うほうが簡単かもしれません



  • ご回答いただき、ありがとうございます。

    ご回答内容を参考にプログラムを作成して
    一応、データの追加は出来たのですが
    なぜか途中にカンマが入ったり入らなかったりします。
    これを直すことはできるのでしょうか?
    また、データの追加方法を縦並びにすることは可能でしょうか?
    下記のプログラムはカラーセンサの値を取り出した例です。

    obniz.onconnect = async function() {
    var j= [];
    for(var i=0;i<5;i++){
    Obniz.PartsRegistrate(SS);
    var colorSens = obniz.wired("SS", {vcc:0, sda:1, scl:2, gnd:3});
    colorSens.init();
    var ret = await colorSens.getVal();
    console.log("getVal:"+ ret);
    var red = ret[0];
    var green = ret[1]; 
    var blue = ret[2]; 
    var ir = ret[3];

      console.log("Red:"+ red);
      console.log("Green:"+ green);
      console.log("Blue:"+ blue);
      console.log("IR:"+ ir);
      
      var dbx = new Dropbox.Dropbox({ accessToken: '111111' });
      dbx.filesDownload({path: '/suncon.txt'})
        .then(function (response) {
        var blob = response.fileBlob;
        var reader = new FileReader();
        reader.addEventListener("loadend", function() {
            console.log(reader.result); // will print out file content
            j[i]=reader.result;
        });
        reader.readAsText(blob);
    })
    .catch(function (error) {
      alert(error);
    }) 
     dbx.filesUpload({path: '/11111.txt', contents:j + "Red:"+ red + "Green:"+ green + "Blue:"+ blue + "IR:"+ ir, mode: 'overwrite' })
     .catch(function(error) {
     alert(error);
        });
        await obniz.wait(5000);
      }
    

    txtファイルの内容は
    ,Red:1693Green:3562Blue:1758IR:1259,Red:1660Green:3497Blue:1726IR:1142,,Red:1693Green:3562Blue:1758IR:1259Red:1644Green:3454Blue:1708IR:1177Red:1657Green:3485Blue:1719IR:1173
    となります。

    ご対応をよろしくお願いいたします。


  • administrators

    dbx.filesUpload({path: '/11111.txt', contents:j + "Red:"+ red + "Green:"+ green + "Blue:"+ blue + "IR:"+ ir, mode: 'overwrite' })
    

    こちらの行のcontents:j + ...のjが配列のため、カンマが入ったり入らなかったりしてると思われます。

    やりたいことから推測すると、こちらのようなコードはいかがでしょうか。
    ※上記以外の部分もawaitを入れたりなど少々変更しています

    
          obniz.onconnect = async function () {
            Obniz.PartsRegistrate(SS);
            var colorSens = obniz.wired("SS", {vcc:0, sda:1, scl:2, gnd:3});
            colorSens.init();
    
            var j= [];
            for(var i=0;i<5;i++){
              var ret = await colorSens.getVal();
              console.log("getVal:"+ ret);
              var red = ret[0];
              var green = ret[1];
              var blue = ret[2];
              var ir = ret[3];
              console.log("Red:"+ red);
              console.log("Green:"+ green);
              console.log("Blue:"+ blue);
              console.log("IR:"+ ir);
    
              var dbx = new Dropbox.Dropbox({ accessToken: 'xxxxx' });
              await dbx.filesDownload({path: '/suncon.txt'})
                .then(function (response) {
                var blob = response.fileBlob;
                var reader = new FileReader();
                return new Promise((resolve)=>{
                  reader.addEventListener("loadend", function() {
                    console.log(reader.result); // will print out file content
                    j[i]=reader.result;
                    resolve(reader.result)
                  });
                  reader.readAsText(blob);
                });
    
              })
                .catch(function (error) {
                alert(error);
              })
    
    
              await dbx.filesUpload({path: '/suncon.txt', contents:j[i] + "\nRed:"+ red + "Green:"+ green + "Blue:"+ blue + "IR:"+ ir, mode: 'overwrite' })
                .catch(function(error) {
                alert(error);
              });
              await obniz.wait(5000);
            }
          }
    


  • ご連絡が遅くなり、大変申し訳ありません。

    ご回答いただき、ありがとうございます。

    内容を確認いたしました。
    私の思っていた通りのことができました。

    お忙しい所、
    色々とご対応いただき、ありがとうございました。

    不明点等がでましたら、再度、ご連絡させていただきますので
    その際はよろしくお願いいたします。


  • administrators

    @Inventor-1m さん

    無事完成してよかったです!
    また何かありましたらご連絡下さい


 

Recent Projects

  • @nak435 かしこまりました。よろしくお願いします。

    read more
  • @Yuki-Sato さん、

    外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    今週末に確認しますので、お待ちください。

    read more
  • @nak435 時間がかかってすいません、

    なんとか3.3vをgndにつないでFlick Largeを動かしたかったのですが、うまく動かすことができなかったです。
    3.3vをgndを繋がずに接続するというのはライブラリで推奨して伝えることは難しいと思ってます。

    Flick LargeでなくFlick Hatの方で、外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    よろしくお願い致します。

    read more
  • @nak435 ありがとうございます。
    接続は3.3vのgnd以外同じでした。
    エラーはそのせいかもしれませんが、しかし電気的にはgndを繋がない場合3.3vとしてうまく供給できないはずなのでそこが不思議です。

    教えていただいたプログラムの部分を修正して試してみたいと思います。
    また少し時間がかかりそうなのですが、早めに試したいと思います。

    引き続きよろしくお願い致します。

    read more