Привет! У меня есть php-скрипт на моем веб-сервере, который входит в веб-интерфейс моего теплового насоса nibeuplink.com, получает все показания температуры и т. Д. И возвращает их в формате json.
freeboard.io — это бесплатный сервис для визуализации данных, поэтому я создаю freeboard.io для своих значений теплового насоса. в freeboard.io я могу добавить любые данные json в качестве источника данных, поэтому я добавил ссылку на свой php-скрипт. Он извлекает данные один раз, но кажется, что есть некоторые кэшированные значения, которые он использует после этого, поэтому они не обновляются новыми значениями из скрипта. freeboard.io использует функцию get для получения URL. Если я использую обычный веб-браузер, чтобы запустить скрипт php и обновить его, значения обновляются, а также немедленно обновляются в freeboard.io. Freeboard.io имеет настройку автоматического обновления источника данных каждые 5 секунд.
Кажется, что-то правильно запускает скрипт, когда он выбирается из моего веб-браузера, но не когда он выбирается из freeboard.io, который использует функцию get каждые 5 секунд для получения новых данных.
в freeboard я могу добавить заголовки к запросу get, есть ли какой-нибудь заголовок, который помог бы мне здесь удалить любые кэшированные данные?
Я надеюсь, что это объясняет мою проблему лучше.
Есть ли что-нибудь, что я могу добавить в свой код в начале, чтобы всегда вызывать переопределение любых кэшированных данных?
<?php
/*
* read nibe heatpump values from nibeuplink status web page and return them in json format.
* based on: https://www.symcon.de/forum/threads/25663-Heizung-Nibe-F750-Nibe-Uplink-auslesen-auswerten
* to get the code which is required as parameter, log into nibe uplink, open status page of your heatpump, and check url:
* https://www.nibeuplink.com/System/<code>/Status/Overview
*
* usage: nibe.php?email=<email>&password=<password>&code=<code>
*/
// to add additional debug output to the resulting page:
$debug = false;
date_default_timezone_set('Europe/Helsinki');
$date = time();
// Create temp file to store cookies
$ckfile = tempnam ("/tmp", "CURLCOOKIE");
// URL to login page
$url = "https://www.nibeuplink.com/LogIn";
// Get Login page and its cookies and save cookies in the temp file
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
// Now you have the cookie, you can POST login values
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, "Email=".$_GET['email']."&Password=".$_GET['password']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); // Uses cookies from the temp file
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Tells cURL to follow redirects
$output = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "https://www.nibeuplink.com/System/".$_GET['code']."/Status/ServiceInfo");
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_POST, 0);
$result = curl_exec($ch);
$pattern = '/<h3>(.*?)<\/h3>\s*<table[^>]*>.+?<tbody>(.+?)<\/tbody>\s*<\/table>/s';
if ($debug) echo "pattern: <xmp>".$pattern."</xmp><br>";
$pattern2 = '/<tr>\s*<td>(.+?)<span[^>]*>[^<]*<\/span>\s*<\/td>\s*<td>\s*<span[^>]*>([^<]*)<\/span>\s*<\/td>\s*<\/tr>/s';
if ($debug) echo "pattern2: <xmp>".$pattern2."</xmp><br>";
preg_match_all($pattern, $result, $matches);
// build json format from matches
echo '{';
$first = true;
foreach ($matches[1] as $i => $title) {
echo ($first ? '"' : ',"').trim($title).'":{';
$content = $matches[2][$i];
preg_match_all($pattern2, $content, $values);
$nestedFirst = true;
foreach ($values[1] as $j => $field) {
echo ($nestedFirst ? '"' : ',"').trim($field).'":"'.$values[2][$j].'"';
$nestedFirst = false;
}
echo "}";
$first = false;
}
echo ",\"time\":{\"Last fetch\":\"$date\"}";
echo "}";
if ($debug) {
echo "<pre><xmp>";
echo print_r($matches);
echo "<br><br>";
echo $result;
echo "</xmp></pre>";
}
?>
Вы можете сделать ajax-вызов php-скрипта, чтобы обновить часть веб-страницы. Я не понимаю, что вы подразумеваете под io, то есть вы говорите о получении данных из базы данных, и если какие-либо изменения произошли в базе данных, то должны быть выбраны только новые записи. Если вы подразумеваете это в этом смысле, то вы можете использовать cookie для отслеживания любых новых записей, добавляемых в базу данных, и только если он находит новые записи, он может сделать ajax-вызов php-скрипта, чтобы запустить ваш алгоритм для извлеченного общего набора данных.
Других решений пока нет …