做一次动作,但只在 x 次后重复
Do action once but only repeat it after x time
所以基本上,如果出现以下情况,我需要通知用户:
a) 传感器断开连接并且上次没有发送警报 $send_threshold
b) 如果警报在同一天发送且大于 $repeat_threshold.
变量的示例值
$send_threshold = 12 * 60; // 12 min
$repeat_threshold = 2 * 60 * 60 + 45 * 60; // 2 hr 45 min
我对如何实现它一无所知。传感器是无状态的,所以我无法检查传感器是否在线,只能检查传感器发布到 api.
的接收数据的时间戳。
/* FUNCTIONS */
function handleDisconnectAlerts($sensor,$dataset,$users,$settings)
{
end($dataset);
$last_timestamp = $dataset[key($dataset)]['timestamp'];
$now = time();
if($now > $last_timestamp && $now - $last_timestamp > $settings['disconnect_alarm'] * 60)
{
$send_threshold = $settings['disconnect_alarm'] * 60;
$repeat_threshold = $settings['disconnect_alarm_repeat_hours'] * 60 * 60 + $settings['disconnect_alarm_repeat_minutes'] * 60;
//not really sure what to do from here.
}
}
好吧,我猜是我自己想出来的。初始检查涵盖 60 * $settings['disconnect_alarm']
的初始间隔。从那里我只需要检查是否在 $repeat_threshold
时间内没有发送警报。很有魅力。
function handleDisconnectAlerts($sensor,$dataset,$users,$settings)
{
end($dataset);
$last_timestamp = $dataset[key($dataset)]['timestamp'];
$now = time();
if($now > $last_timestamp && $now - $last_timestamp > $settings['disconnect_alarm'] * 60)
{
$repeat_threshold = $settings['disconnect_alarm_repeat_hours'] * 60 * 60 + $settings['disconnect_alarm_repeat_minutes'] * 60;
$n_sent = R::count('sensoralerts',' timestamp >=:time and field_name="disconnect" and sensor_id=:id ',
[':time'=>$repeat_threshold,':id'=>$sensor['id']]
);
if($n_sent == 0){
multiSendDisconnect($users,$sensor);
}
}
}
所以基本上,如果出现以下情况,我需要通知用户:
a) 传感器断开连接并且上次没有发送警报 $send_threshold
b) 如果警报在同一天发送且大于 $repeat_threshold.
变量的示例值
$send_threshold = 12 * 60; // 12 min
$repeat_threshold = 2 * 60 * 60 + 45 * 60; // 2 hr 45 min
我对如何实现它一无所知。传感器是无状态的,所以我无法检查传感器是否在线,只能检查传感器发布到 api.
的接收数据的时间戳。/* FUNCTIONS */
function handleDisconnectAlerts($sensor,$dataset,$users,$settings)
{
end($dataset);
$last_timestamp = $dataset[key($dataset)]['timestamp'];
$now = time();
if($now > $last_timestamp && $now - $last_timestamp > $settings['disconnect_alarm'] * 60)
{
$send_threshold = $settings['disconnect_alarm'] * 60;
$repeat_threshold = $settings['disconnect_alarm_repeat_hours'] * 60 * 60 + $settings['disconnect_alarm_repeat_minutes'] * 60;
//not really sure what to do from here.
}
}
好吧,我猜是我自己想出来的。初始检查涵盖 60 * $settings['disconnect_alarm']
的初始间隔。从那里我只需要检查是否在 $repeat_threshold
时间内没有发送警报。很有魅力。
function handleDisconnectAlerts($sensor,$dataset,$users,$settings)
{
end($dataset);
$last_timestamp = $dataset[key($dataset)]['timestamp'];
$now = time();
if($now > $last_timestamp && $now - $last_timestamp > $settings['disconnect_alarm'] * 60)
{
$repeat_threshold = $settings['disconnect_alarm_repeat_hours'] * 60 * 60 + $settings['disconnect_alarm_repeat_minutes'] * 60;
$n_sent = R::count('sensoralerts',' timestamp >=:time and field_name="disconnect" and sensor_id=:id ',
[':time'=>$repeat_threshold,':id'=>$sensor['id']]
);
if($n_sent == 0){
multiSendDisconnect($users,$sensor);
}
}
}