obnizのフォーラムは新しいシステムに移行しております。
新しいフォーラムはこちらになりますクラウド実行にてERRORが発生
-
ブラウザ実行にて問題なく動作しているプログラムをクラウド実行実行させようとしていますが、ERROR 30000ms TIMEOUTが発生し処理されません。
他に設定する必要があるのでしょうか?
ご回答お願いします。アプリ設定は「every/10minutes」設定しています。
-
追記します。
プラウザで正常起動するプログラムは、BLE/Wifi GATEWAY でOMRON 2JCIE-BL01 をペアリング後、データ取得しクラウドへデータを飛ばす流れですが、データを取得するまでに約50〜60sec掛かっています。
そもそもBLE/Wifi GATEWAYと2JCIEのペアリング時間が長すぎる為、どうしようもない状態です。クラウド実行は、終了を知らせる Obniz.App.done()関数が呼ばれるか、タイムアウト(30秒)するまで実行するとのことですが、プログラム処理時間が30秒を超えている為、処理できないのでしょうか?
またこの様な場合の対処方法はないのでしょうか?
-
@杉谷高宏 さん
プログラム処理時間が30秒を超えている為、処理できないのでしょうか?
はい、そのようになります。クラウド実行は30秒間までという制限がありますので、30秒以上の処理をしたい場合は、サーバーを別途用意していただくことになります。
たとえば、こちらではAWSのlambdaでobnizを使用する方法を記載しておりますので 参考にしていただければと思います。
https://obniz.com/ja/doc/guides/production/aws-lambda-single
-
@kido 様
ご回答ありがとうございます。
確認ですが
obnizの下記URLで展開されているOMRONセンサーからの最新データ取得コードがありますが、そのコードを単独で実行しても30sec以上(35〜38sec)掛かるのですが、そもそも2jcieはグラウド実行ができないということでしょうか?
ご検証いだけないでしょうか?https://obniz.com/ja/sdk/parts/2jcie/README.md
対象コード
[await]getLatestDataWait()
-
BLEの通信速度は環境にも依存するため、実行速度に関して確実なことは言えませんが、
30秒以上かかる場合はクラウド実行することはできません。その場合は、クラウド実行以外でおこなうか、クラウド実行できる時間内にプログラムを収める必要があります。
たとえば、2jcieの場合は
・advertisement頻度を高めてデバイスを見つけやすくする
・connectしないでadvertisementモードで使う
などにて実行速度の向上は可能かと思います。
-
@kido 様
ご回答誠にありがとうございます。
まず2jcieのブログラムを見直してみます。
それでも厳しい様でしたらAWSを利用してみたいと思います。
-
@kido said in クラウド実行にてERRORが発生:
たとえば、2jcieの場合は
・advertisement頻度を高めてデバイスを見つけやすくする
・connectしないでadvertisementモードで使う
などにて実行速度の向上は可能かと思います。上記のアドバイスより、2jcie-BL01をアドバタイズモードに変更したところ、ブラウザ実行で処理時間は平均10secまで短縮できました。
しかし、そのプログラムをクラウド実行(10min間隔)に設定するとタイムアウトエラーが発生します。クラウド実行に設定した場合、クラウドがBLE/WiFi GATEWAYに処理指示を出し実行するまでのフローはどの様になっているのでしょうか?
-
通常のHTMLと同じく、リソースの読み込み/scriptの実行が動きます
リソースを読み始めてから30秒、が制約になります。一度、一番シンプルなプログラムを試していただいたほうがイメージが付くかもしれません
<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous"></script> </head> <body> <div id="obniz-debug"></div> <h1>obniz instant html</h1> <button id="on">ON</button> <button id="off">OFF</button> <div id="print"></div> <script> console.log("start"); let request = {}; if (typeof req === "object") { request = req; console.log(request.query); console.log(request.body); } if(typeof done === "function"){ console.log("done"); done(); } </script> </body> </html>
上記をサーバーレスイベント(レガシー)で実行した場合の時間はこちらになります。
アプリのクラウド実行でも同じような時間になります。
上記の場合、
-
@kido said in クラウド実行にてERRORが発生:
通常のHTMLと同じく、リソースの読み込み/scriptの実行が動きます
リソースを読み始めてから30秒、が制約になります。一度、一番シンプルなプログラムを試していただいたほうがイメージが付くかもしれません
<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous"></script> </head> <body> <div id="obniz-debug"></div> <h1>obniz instant html</h1> <button id="on">ON</button> <button id="off">OFF</button> <div id="print"></div> <script> console.log("start"); let request = {}; if (typeof req === "object") { request = req; console.log(request.query); console.log(request.body); } if(typeof done === "function"){ console.log("done"); done(); } </script> </body> </html>
上記をサーバーレスイベント(レガシー)で実行した場合の時間はこちらになります。
アプリのクラウド実行でも同じような時間になります。
上記の場合、このプログラムを手持ちのBLE/WiFi GATEWAY にインストールしクラウド実行させてみましたが「タイムアウトエラー」が発生します。
この状態からすると、当方の環境が問題なのでしょうか?
-
この投稿が削除されました!
-
KIDO様
プログラムコードを展開いたします。
当社サーバーへデータ送信するファンクション部分はマスクしました。
何か問題ありますでしょうか?<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script>
</head>
<body>
<div id="obniz-debug"></div><script> //var obniz = new Obniz("OBNIZ_ID_HERE"); var obniz = new Obniz("****-****"); // called on online obniz.onconnect = async function() { //デバイスサーチ・データ取得 const Device = Obniz.getPartsClass('2JCIE'); await obniz.ble.initWait(); obniz.ble.scan.onfind = (p) => { if (Device.isDevice(p)) { let data = Device.getData(p); console.log(data); // send PNPS let j = _pnps.replace(data); _pnps.send(j, (res)=>{ console.log('pnps response', res); }); } }; await obniz.ble.scan.startWait(); //await obniz.wait(180000); //await new Promise((resolve) => { setTimeout(resolve, 240000) }); //クラウド実行 if (Obniz.App.isCloudRunning()) { Obniz.App.done({ status: 'success', text: `Worked` }) } //サーバーレスイベント if(typeof done === "function") { done(); } // called while online. obniz.onloop = async function() { }; }; // called on offline obniz.onclose = async function() { }; /* RISNER PNPS */ </script>
</body>
</html>
-
試してみますのでお待ち下さい。
-
@kido 様
状況はいかがでしょうか?
-
-
@kido said in クラウド実行にてERRORが発生:
@杉谷高宏 さん
サーバー側で、イベントのタイミングによってはサーバーレスイベントがうまく動かせていなかった問題を対応いたしました。
現在は治っておりますので、再度試してみていただけないでしょうか。
結論を申しますと、動作しませんでした。
リポジトリ上でプログラムを実行すると当社のサーバーに結果を送信しますが、サーバーレスイベントに設定すると、実行結果は残りますが当社サーバーにデータ送信できない様です。
-
この投稿が削除されました!
-
@杉谷高宏 さん
実行はされるようになったが、データ送信がされないということですね。
実行結果が保存されるようになったということはプログラム的には正常にdoneまで呼ばれているように思えますが、どのような実行結果が表示されているでしょうか
-
@kido said in クラウド実行にてERRORが発生:
@杉谷高宏 さん
実行はされるようになったが、データ送信がされないということですね。
実行結果が保存されるようになったということはプログラム的には正常にdoneまで呼ばれているように思えますが、どのような実行結果が表示されているでしょうか実行結果が保存されているかは確認できません。確認方法が不明です。
私が実行されているといっているのは、サーバーレスイベント画面の「今日の実行回数」がカウントされているということです。またリポジトリ上でのプログラム処理時間が、ブラウザ実行時より長いです。![alt text](image url)
-
すみませんが、画像がうまくアップロードされていないようです。
実行結果の確認方法はこちらのドキュメントのようになります。
https://obniz.com/ja/doc/reference/cloud/app/browserapp-cloudexec#クラウド実行の結果デバイス一覧および各デバイスの詳細画面にて実行の結果を確認することが可能です。
-
@kido said in クラウド実行にてERRORが発生:
すみませんが、画像がうまくアップロードされていないようです。
実行結果の確認方法はこちらのドキュメントのようになります。
https://obniz.com/ja/doc/reference/cloud/app/browserapp-cloudexec#クラウド実行の結果デバイス一覧および各デバイスの詳細画面にて実行の結果を確認することが可能です。
因みにですが、ここで紹介されているコードはアプリによる実行の際に追加するものですか?それともサーバーレスイベントのリポジトリのプログラムに追加するものですか?