-2

[Edited for better explanation and code included]

Hi! I have a php script on my web server that logs in to my heat pump web interface nibeuplink.com and gets all my temperature readings and so forth and returns them in a json-format.

freeboard.io is a free service for visualizing data, so I'm making a freeboard.io for my heat pump values. in freeboard.io I can add any json data as a data source, so I have added the link to my php-script. It fetches the data once but it seems there is some kind of cached values that it uses after that so they are not updated with new values from the script. freeboard.io uses a get-function to get the url. If i use a normal web browser to run the php script and refresh it, the values are updated - and also immediately updated in freeboard.io. Freeboard.io has a setting to automatically update the data source every 5 seconds.

It seems that there is something that triggers the script correctly when it is fetched from my web browser, but not when it is fetched from freeboard.io that uses a get function every 5 seconds to get new data.

in freeboard I can add headers to the get request, is there some header that would help me here to discard any cached data?

I hope that explains my problem better.

Is there anything i can add to my code in the beginning to always force an override of any cached data?

<?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>"; 
} 
?>
  • To ask an On Topic question, please read [What topics can I ask about](http://stackoverflow.com/help/on-topic) and [What topics to avoid](https://stackoverflow.com/help/dont-ask) and [How to ask a good question](http://stackoverflow.com/help/how-to-ask) and [the perfect question](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) and how to create a [Minimal, Complete and Verifiable Example](http://stackoverflow.com/help/mcve) and [take the tour](http://stackoverflow.com/tour) – RiggsFolly Mar 02 '18 at 18:16

1 Answers1

0

You can make an ajax call to php script to refresh the part of webpage. I don't understand what do you mean by io i.e. are you talking about fetching the data from database and if any changes occurred in database then only newly added records must be fetched. If you mean it in that sense then you can use cookie to track any new records added into database and only if it finds new records it can make ajax call to php script to run your algorithm on fetched total dataset.