Как использовать вычисляемые переменные для POST и проанализировать массив, возвращаемый для построения? - PullRequest
0 голосов
/ 07 июля 2019

Нужна помощь ПОЖАЛУЙСТА !!

Контекст: я использую PHP для получения массива (JSON) из конечной точки API, чтобы затем заполнить график с течением времени полученными значениями (Время, Температура, Влажность)от датчика транспортного средства IoT.

Короче:

Проблема 1) Создайте тело без использования констант и вместо этого используйте вычисленные переменные (если возможно) для функции POST, используя curl

Проблема 2) Разбор возвращаемых значений из массива JSON (Время, Температура, Влажность) для построения графика на графике

Проблема 1) Я нашел способ построения и успешного прохождения тела для получения данных датчикав ответе JSON, но только с использованием констант, а не с использованием вычисляемых переменных, что не является идеальным, поскольку цель здесь состоит в получении данных за последние 24 часа при каждом запуске сценария.

Проблема 2) Я пыталсячтобы заставить работать функции foreach, но я изо всех сил .. должно быть только 24 набора данных, ЕСЛИ я могу использовать вычисленные переменные.В настоящее время существует множество из них, что означает, что мне нужно сделать рекурсивный цикл.

Это вычисленные значения, которые мне нужно использовать, но они не будут работать в классе:

$time = $_SERVER['REQUEST_TIME'];
$startMs = (($time-18000)*1000);
$endMs = ($startMs-86400000);
$stepMs = 3600000;
$groupId = 34141;
$widgetId = 212014918549723;
$fillMissing = "withNull";
$field1 = "humidity";
$field2 = "temperature";
$endPoint = "https://api.samsara.com/v1/sensors/history?access_token=87ieoywNNcjdSbvgmhaprq3ffEPYsa";

class A
{ 
  public $endMs = 1561697999000; 
  public $fillMissing = 'withNull'; 
  public $groupId = 34141;
  public $startMs = 1561352400000;
  public $stepMs = 3600000;

  public $series = array(); 

function  __construct(){ 
      for ( $i=1; $i-->0;){ 
          array_push($this->series, new B);
          array_push($this->series, new C);
      } 
  } 
} 

class B { 
  public $field = "ambientTemperature";
  public $widgetId = 212014918549723;
} 

class C { 
  public $field = "humidity";
  public $widgetId = 212014918549723;
}                                                                      

$ch = curl_init('https://api.samsara.com/v1/sensors/history?access_token=87ieoywNNcjdSbvgmhaprq3ffEPYsa');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$result = curl_exec($ch);

$json = json_decode($result, true);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;

} else {
    echo "Values returned from the API:";
    print_r($json);
}

Вот мой текущий вывод ...

Array ( [results] => Array ( [0] => Array ( [timeMs] => 1561352400000 
[series] => Array ( [0] => 29105 [1] => 66 ) ) [1] => Array ( [timeMs] => 
1561356000000 [series] => Array ( [0] => 29469 [1] => 65 ) ) [2] => Array 
( [timeMs] => 1561359600000 [series] => Array ( [0] => 29115 [1] => 65 ) 
) [3] => Array ( [timeMs] => 1561363200000 [series] => Array ( [0] => 
28912 [1] => 65 ) ) [4] => Array ( [timeMs] => 1561366800000 [series] => 
Array ( [0] => 28740 [1] => 66 ) ) [5] => Array ( [timeMs] => 
1561370400000 [series] => Array ( [0] => 26895 [1] => 66 )......
...