You can try the following code:
for($hora= 0; $hora < 24; $hora++){
$hoje = new DateTime();
for($minuto = 0; $minuto <= 30; $minuto += 30){
$data_hora = $hoje->format('Y-m-d') . ' ' // dia mes e ano de hoje
. str_pad($hora, 2,'0', STR_PAD_LEFT) // hora do primeiro loop (formatado com zero à esquerda)
. ':' . str_pad($minuto, 2,'0', STR_PAD_LEFT) . ':00'; // minutos do segundo loop (formatado com zero à esquerda)
// nota: os segundos estão fixos em 00 (linha acima)
$resultado[] = processa_query($data_hora ); // chama a função que irá processar o sql
}
}
// monta o resultado em $JSON e exibe o mesmo, o implode junta a array em uma string
echo $JSON = '{ "dados":[' . implode(', ', $resultado) . ']}';
function processa_query($data_hora){
$sql = "SELECT valor FROM valores where data_hora < '$data_hora' order by id desc limit 1 ";
$consulta = $pdo->query($sql);
$resultado = $consulta->fetchAll(3);
$valor_equipamento = $resultado[0][0];
// através do explode, separo a data da hora (separados pelo espaço)
$hora_minuto = explode(' ' ,$data_hora);
// removo os segundos
$hora_minuto = substr($hora_minuto[1], 0,5);
// monto um item o JSON concatenando:
// label: recebe a variável $hora_minuto
// y: recebe o $valor_equipamento (sem aspas)
// indexLabel: recebe o $valor_equipamento (com aspas)
return "{label:'$hora_minuto', y:$valor_equipamento , indexLabel:'$valor_equipamento'}";
}