obnizのフォーラムは新しいシステムに移行しております。
新しいフォーラムはこちらになりますエラーをcatchしてresetできますか?
-
WS2812搭載のLEDを60個接続し、hsvs関数で表示制御しています。1時間ほど連続使用していると時折以下のようなエラーが発生し、制御がフリーズすることはしばしば発生します。こうしたエラーをcatchして本体resetすることは可能でしょうか?
-
こちらobnizのファームウェアに問題があり、社内テスト中となります。
来週中に新バージョンとして公開予定ですのでしばらくお待ち下さい。また、エラー時のハンドルとリセットですが
var _error = obniz.error; obniz.error = function(obj){ _error(obj); obniz.reset(); }
という方法が可能です。
ファームウェアからエラーが返ってくることは多くないのでハンドルしにくくなっています。
この辺りは今後改善したいと思います。
-
ありがとうございます!
この方法を試してみます。ちなみに私が観測しているエラーですが、Wifi接続されたPCのブラウザから長時間実行していると出る気がします。obnizとブラウザ間の通信が滞ったときにどこかにリクエストが溜まって、、って感じかなと想像していました。
-
おっしゃる通り長時間の通信で発生しやすいです。
あるタイミングでTCP通信が起きたときにのみ発生するエラーで長時間使用していると遭遇することが多くなります。新バージョンのファームウェアは社内テストももう少しで完了しますのであと数日お待ち下さい。
-
この現象に関連しているかどうか不明ですが、長時間運用時にまた別のエラー(添付画像)が発生しています。1日に数回の割合です。お知らせまで。
-
@Kazunori-Sato ご連絡ありがとうございます。確認します。
-
@Kazunori-Sato すいません、上記僕のミスでした。エラー箇所はここで、
error(msg) { if (this.isNode) { <================ エラー console.error(msg); } else { if (msg && typeof msg === 'object' && msg.alert) { this.showAlertUI(msg); msg = msg.message; } if (typeof showObnizDebugError === 'function') { showObnizDebugError(new Error(msg)); console.error(new Error(msg)); } else { throw new Error(msg); } } }
お伝えしたエラーハンドリングの方法のプログラムで呼んでいた
_error(obj)
が良くなかったです。
エラーを特別表示などする必要がなければ
_error(obj);を呼ばないでいただければそれだけで大丈夫です。
-
@Yuki-Sato 了解です、ではこの行を外しておきます。ありがとうございます!
-
-
了解です、また復活させて使ってみますね。
ちなみに、このエラーハンドリングを入れてから安定して長期稼働できるようになりました。数時間に1回の割合でresetしているようです。
-
かしこまりました。
Updateでresetは今後起きなくなるかと思いますので、それでも起こるようでしたらまたご連絡ください。