Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; GeSHi has a deprecated constructor in /var/www/www/plugins/content/geshi/geshi/geshi.php on line 262

Deprecated: Function create_function() is deprecated in /var/www/www/plugins/content/geshi/geshi/geshi.php on line 4719
Afdrukken
Hits: 4923

Wij hebben sinds een half jaar een plugwise stretch in huis, om verbruik van diverse apparaten in kaart te brengen, én ook om beter te kunnen monitoren wat onze zonnepanelen leveren. (Met historische gegevens.)

Dit kan allemaal in de Plugwise app, maar het is veel leuker om dit ook buiten deze applicatie (op de plekken waar je dit zelf wilt) kunt uitlezen.  Er zijn al wat mensen die hier e.e.a. over uitgevonden hebben, zie bijv. http://phoenixinteractive.nl/ Hier heb ik in eerste instantie al leuke dingen gevonden, ook hij is fan van AutoIT ;-).

Maar ik wil ook online eenvoudig kunnen kijken wat ik nu 'lever' met de zonnepanelen, en daar heb ik een php script voor gemaakt.  Het resultaat zie je in mijn vorige artikel (wind en zon gecombineerd!)

 

Dit 'plugwise' script is meteen zo gemaakt dat je in principe van al je apparaten de status kunt uitlezen, maar ook eenvoudig een enkele selectie kunt maken. Hij ziet de 'Appliance' naam, status (aan/uit/offline) en wat het op dit moment verbruikt / levert.

Ik publiceer ze hieronder, hopelijk hebben anderen er zo ook wat aan!

Hier volgt een eenvoudig script om de plugwise stretch uit te lezen:

<?php
//Script to read power Sunpanels and more from Plugwise.
include 'plugwise_functions.php';
 
$stretchaddress = "192.168.XXX.XXX";
$stretchid = "yourid";
$appname = "";
 
$information = get_state_appliances($stretchaddress,$stretchid,$appname);
foreach ($information as $name => $info)
{
echo $name." status: ".$info[0]["state"]." gebruikt: ".$info[0]["consuming"]."Watt.<br />"; 
}
?>

Hier volgen de php-functies die ik hiervoor gemaakt heb:

<?php
// gets the data from plugwise stretch URL with curl.
function get_stretch_data($url,$stretchid) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_USERPWD,"stretch:$stretchid");
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}
// End function
 
// Start function get_state_appliances
// Usage: get_state_appliances(<StretchIP>,<stretchID>,<appliance_name>)
// if appliance_name is empty, all appliances are returned
// Returns: Array with Name,State (also on/offline), current Consuming value.
// If appliance is producing, the consuming value wil become negative.
function get_state_appliances($stretchaddress,$stretchid,$appname) {
$appname = strtolower($appname);
$xmlstr = get_stretch_data("http://".$stretchaddress."/core/appliances",$stretchid);
$appliances = new SimpleXMLElement($xmlstr); //put xml-data into array for easy reading.
$returndata = array();
foreach ($appliances as $value) {
  if ($appname == "" or strtolower($value[0]->name) == $appname) { 
  $tmparray = array();
  $name = strval($value[0]->name);
  $state = strval($value[0]->actuators->relay->state);
  $onlinestate = mktime() - strtotime($value[0]->modified_date);
  if ($onlinestate >300) // 5 minuten is offline!
    {$state = $state." (offline)"; } 
  $consuming = 0;
  for ($i = 0; $i <= 2; $i++) {
    if ($value[0]->logs->point_log[$i]->type == 'electricity_consumed' and $value[0]->logs->point_log[$i]->period->measurement <> 0)
      { $consuming = strval($value[0]->logs->point_log[$i]->period->measurement); }
    if ($value[0]->logs->point_log[$i]->type == 'electricity_produced' and $value[0]->logs->point_log[$i]->period->measurement <> 0)
      { $consuming = strval(-floatval($value[0]->logs->point_log[$i]->period->measurement)); }
  }
  $tmparray["state"] = $state;
  $tmparray["consuming"] = $consuming;
  $returndata["$name"][] = $tmparray;
  }
}
return $returndata;
}
// End function
?>