我试图建立一个我在网上找到的自动浇水系统,此时泵只在用户按下启动时运行,在用户按下停止时停止。我想让它每两天运行一次。我不确定是否需要将其放入我的javascript水泵文件或我的ruby Sinatra应用程序脚本中。我尝试过使用发条,每当宝石出现时,我认为我的语法错误,我试着把它放在app.rb中的CLIENT.publish上。同样在教程中我跟随创建者说要将正确的参数添加到app.rb文件中的末尾CLIENT.publish('pump/data', {state:{pump: params['action']}}.to_json)
。我也试过在water-pump.js中做setInterval,但不确定如何做。我还没有对index.haml文件做任何事情,我需要在.pump-control中放一些东西。如果您想查看它https://www.hackster.io/demirhanaydin/waterpi-houseplant-remote-watering-and-monitoring-system-340400
这是我的water-pump.js文件
function takeAction() {
var button = $('#pumper'),
action = $('#action_input').val();
$('#action-form').trigger('submit');
if (action == 'start') {
$('#action_input').val('stop');
button.text('stop');
} else {
$('#action_input').val('start');
button.text('start');
}
}
$(document).ready(function() {
$('#action-form').submit(function(event) {
event.preventDefault(); // Prevent the form from submitting via the browser
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
});
这是我的app.rb
# app.rb
require 'sinatra'
require './boot'
set :sessions, true
set :session_secret, SESSION_SECRET
enable :sessions
get '/' do
haml 'welcome/index'.to_sym
end
post '/take-action' do
CLIENT.publish('pump/data', {state:{pump: params['action']}}.to_json)
200
end
这是我的index.haml文件
%head
%script{type: "text/javascript", src: url('javascripts/jquery.min.js')}
%script{type: "text/javascript", src: url('/javascripts/water-pump.js')}
%iframe{:align => "center",:height => "450", :src => "https://app.redash.io/taylor/embed/query/76316/visualization/132291?api_key=EfPwD8WgLKybMagKriu7JrLFXvYWpVVQrV5g0qqp", :width => "820",:style => "float:left;margin-top:30px;"}
%link{rel: :stylesheet, type: :"text/css", href: url('/stylesheets/default.css')}
#container
#synchronized
.gauge
#container-speed
.pump-control
%form{method: :post, action: '/take-action', id: 'action-form' }
%input{type: 'hidden', name: 'action', value: 'start', id: 'action_input'}
%span{:align => "center",id: 'pumper', onclick: 'takeAction()'}
start
答案 0 :(得分:0)
您最好的办法是使用cron job来安排系统。
我建议使用cron或其他值得信赖的调度系统,因为依赖于长时间运行的应用程序来保持计划是危险的。它也被认为是一种很好的设计,可以构建仅擅长一件事的组件,以便您可以单独测试它们。