ラズベリー pi で実行され、OpenSprinkler Pi で動作する、オープン ソースの nodejs を使用したスプリンクラー システムを構築しています。
私は使っている:
Sailsjs 0.9.3
laterjs - スケジュールの解釈と計算用
- 私はbunkatsレポでしばらく前に問題を作成し、彼にこれを説明するように求めました.. https://github.com/bunkat/later/issues/19
最終的な結果は、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