2

ラズベリー pi で実行され、OpenSprinkler Pi で動作する、オープン ソースの nodejs を使用したスプリンクラー システムを構築しています。

私は使っている:

  • Sailsjs 0.9.3

  • laterjs - スケジュールの解釈と計算用

最終的な結果は、rpi と、開発対象として決定したフロントエンドとの間の REST API インターフェイスになります。web/mobile/cli .. など

/programsスケジューリング コンポーネントが機能する方法は、値がゾーン ID、名前、初期ステータス (false)、およびプレーン テキストの人間が読めるスケジュール フレーズevery 12 hours starting on the 6th hour before 10 minutes(06:00 & 18:00 for 10 mins ) とともにURL に投稿されることです。 )。

このスケジュールは解析され、文字列化され、次のように db に保存されます。

{\"schedules\":[{\"h\":[6,18],\"m_b\":[10]}],\"exceptions\":[],\"error\":-1}

他の値は消去され、入力されたとおりに保存されます。

私の質問は:

これらのスケジュールを見つけて、それらの実行時間/日付を決定するにはどうすればよいですか? スケジューリング部分があり、実行時間がダウンして動作しています (10 分間実行)。ただし、スケジュールを効率的に取得するための理論に苦労しています。


私の最初の考えは、1分ごとに間隔を空けてデータベースをポーリングすることでした...

setInterval(function(){
  //get programs from db
  //iterate through programs
  //enable programs which start now?
}, 60000);

しかし、これはちょっと非論理的なようです。スケジュールが作成されると、setIntervalまたはsetTimeout適切なスケジューリング情報で作成されると思います..しかし、rpi が電源を失った場合、またはこれらの間隔がすべてそこにぶら下がっているため、メモリを少し消費する可能性がある場合はどうなりますか..

  • すでにデータベースにある既存のスケジュールをどのように処理しますか?

オープンソース リポジトリ

私がこれまでに持っているもの (作成 api/models/Programs.js 以外にはほとんどありません) はここにあります: https://github.com/RelativeMedia/nodesprinkler.git

4

0 に答える 0