User Tools

Site Tools


vrm_portal:vrm_juice_php_example

This is an old revision of the document!


VRM Juice PHP Example

For more info about VRM Juice, see VRM JSON Juice API notes (DEPRECATED!)

Many thanks to Steven from http://lackancottage.co.uk/blog/, who wrote this code for his blog and providing it to us.

<?php
$url = 'https://juice.victronenergy.com/';
$username="YOUR VRM USERNAME";
$password="YOUR VRM PASSWORD";
$version="200.i";
$verification_token="1";
$instance="0";

$fields = array(
	'username' => urlencode($username),
	'password' => urlencode($password),
	'version' => urlencode($version),
	'verification_token' => urlencode($verification_token),
);

foreach($fields as $key=>$value)
	$fields_string .= $key.'='.$value.'&';
rtrim($fields_string, '&');

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url."user/login");
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

$result=json_decode($result);
$sessionid=$result->data->user->sessionid;

$fields = array(
	'sessionid' => urlencode($sessionid),
	'version' => urlencode($version),	
	'verification_token' => urlencode($verification_token),
);

foreach($fields as $key=>$value)
	$fields_string .= $key.'='.$value.'&';
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url."sites/get");
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$result = json_decode(curl_exec($ch));
if($result->status->code==200){
	$i=0;
	$str="";
	$ajax_values=array();
	foreach($result->data->sites as $site){
		$i++;
		$fields = array(
			'sessionid' => urlencode($sessionid),						
			'version' => urlencode($version),						
			'verification_token' => urlencode($verification_token),						
			'siteid' => urlencode($site->idSite),
			#ADD THE ATTRIBUTES YOU NEED TO RETURN HERE						
			'attributes'=> '[113, 131, 144, 143 ]',						
			'instance' => urlencode($instance),
		);
		foreach($fields as $key=>$value)
			$fields_string .= $key.'='.$value.'&';
		rtrim($fields_string, '&');
		
		$ch = curl_init();				
		curl_setopt($ch,CURLOPT_URL, $url."sites/attributes");				
		curl_setopt($ch,CURLOPT_POST, count($fields));				
		curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);				
		curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);			
				
		$attributes = json_decode(curl_exec($ch));				
		if($attributes->status->code==200){
			$attributes=$attributes->data->attributes;
		}
		else{
			$str.="Error in API Call. Try again<br /><h3>Error Description:</h3><p>".$attributes->status->message."</p>";
		}
		$ajax_values[$i-1]=array(
			"site_id"=>$site->idSite,
			"site_name"=>$site->name,
			"attributes"=>array()
		);
		$str.='<div class="title" id="site_'.$site->siteId.'">'.$site->name.'</div>';
		if(isset($attributes) && is_array($attributes)){
			foreach($attributes as $attribute){
				$str.='<div class="row" id="site_'.$site->idSite.'">';
				$value="value".ucfirst($attribute->dataType);
				switch($attribute->idDataAttribute){
					case 131:
						$str.="<div class='consumption'><div id='customlabel'>Consumption</div><div id='value'>We are using <span id='attribute_".$attribute->idDataAttribute."'>".round($attribute->$value, 2)."</span> W</div></div>";
						$ajax_values[$i-1]["attributes"][]=array($attribute->idDataAttribute,round($attribute->$value, 2));
					break;
					case 113:
						$str.="<div class='yield'><div id='customlabel'>Solar Yield:</div><div id='value'>Generating <span id='attribute_".$attribute->idDataAttribute."'>".round($attribute->$value, 1)."</span> W</div></div>";
						$ajax_values[$i-1]["attributes"][]=array($attribute->idDataAttribute,round($attribute->$value, 1));
					break;
					case 143:
						$str.="<div class='voltage'><div id='customlabel'>Battery:</div><div id='value'>Voltage <span id='attribute_".$attribute->idDataAttribute."'>".$attribute->$value."</span> V</div></div>";
						$ajax_values[$i-1]["attributes"][]=array($attribute->idDataAttribute,$attribute->$value);
					break;
					case 144:
						$str.="<div class='soc".($attribute->$value<=25?"1":($attribute->$value>25 && $attribute->$value<=50)?"2":($attribute->$value>50 && $attribute->$value<=75)?"3":"4")."'><div id='customlabel'>Battery:</div><div id='value'>SOC <span id='attribute_".$attribute->idDataAttribute."'>".$attribute->$value."</span>%</div></div>";
						$ajax_values[$i-1]["attributes"][]=array($attribute->idDataAttribute,$attribute->$value);
					break;
				}
                $str.='</div>';
         	}
		}
		else{
			$str.='<div class="row">&nbsp;</div>';
		}		
	}
	$ajax_values[1]=$ajax_values[0];
	if(!isset($_GET["ajax"])){
		?>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script>
        $(window).load(function(){
			setInterval(function(){
				$(".status_msg").show();
				$.get("<?php echo $_SERVER['PHP_SELF']?>", {ajax: 1}, function(data){
					data=data.split("##JSON##");
					if(data[1]){
						data = JSON.parse(data[1]);
						for($i=0; $i<data.length; $i++){
							for($j=0; $j<data[$i].attributes.length; $j++){
								$("#site_"+data[$i].site_id+" #attribute_"+data[$i].attributes[$j][0]).html(data[$i].attributes[$j][1]);
							}
						}
					}
					$(".status_msg").hide();
				});
			}, 10000); // change this value to whatever interval you need for update
		});
        </script>
		<style>
			.status_msg{ display:none;}        
			.list{
				border-collapse: collapse;
				font-size: 11px;
				margin: 0 auto;
				width: 1000px;
			}
			.list .th, .list .td {
				border: 1px solid #333;
				padding: 5px; vertical-align:top;
			}
			.list .th {
				background: none repeat scroll 0 0 #333;
				border: 1px solid #fff;
				color: #fff;
			}
			.list .tr.odd {
				background: none repeat scroll 0 0 #ccc;
			}
			.list .tr.even {
				background: none repeat scroll 0 0 #ff1;
			}
			.title { font-family: arial, sans-serif; font-size: 15px; font-weight:bold: }
			.row {display: block; width: 300px;padding:10px;padding-left: 80px; margin:5px; border: 1px solid #666; }
			#customlabel { font-family: arial, sans-serif; font-size: 13px; font-weight:normal; display:block;}
			#value { font-family: arial, sans-serif; font-size: 13px; font-weight:normal; display:block;}
			#consumption {background-image url('images/thumb_kwh_metre.png'); background-repeat:no-repeat; background-position: left, middle; }
			#yield {background-image url('images/thumb_weather_00.png'); background-repeat:no-repeat; background-position: left, middle; }
			#voltage {background-image url('images/thumb_lightning.png'); background-repeat:no-repeat; background-position: left, middle; }
			#soc {background-image url('images/thumb_battery_4.png'); background-repeat:no-repeat; background-position: left, middle; }
		</style>	
		<div class="list">
        	<?php echo $str;?>
            <div class="status_msg">Updating...</div>
        </div>
		<p>
		  <?php
	}
	else
		echo "##JSON##".json_encode($ajax_values)."##JSON##";
}
else
	echo "Error in API Call. Try again<br /><h3>Error Description:</h3><p>".$result->status->message."</p>";
curl_close($ch);
?>
		  
		  
		  <br />
		  <strong>Sample Values for Attribute ID's.</strong><br /> #description=Battery Power (System)
		  #Attribute ID 243 Value(valueFloat): -141.54%F%.0F W
	    <br /> #description=Grid L1
	    #Attribute ID 134 Value(valueFloat): 0%.0F%.0F W		  <br /> 
		#description=AC Consumption L1
	    #Attribute ID 131 Value(valueFloat): 116%.0F%.0F W		  <br /> 
		#description=Solar charger serial number
		  #Attribute ID 118 Value(valueString): HQ143299WX7%s%s
		  <br />
		  #description=PV - DC-coupled
	    #Attribute ID 113 Value(valueFloat): 0%.0F%.0F W		  <br />
	    #description=Battery watts
	    #Attribute ID 107 Value(valueFloat): 0%.0F%.0F W <br /> 
		#description=Solarcharger model
	    #Attribute ID 106 Value(valueString): 108%s%s		  <br /> 
		#description=Battery to consumers
	    #Attribute ID 105 Value(valueFloat): 0.0599995%.2F%.2F kWh<br /> 
		#description=Error code
		  #Attribute ID 98 Value(valueEnum): 0%s%s		  <br /> #description=Maximum charge power yesterday
		  #Attribute ID 97 Value(valueFloat): 1118%d%d		  <br /> 
		#description=Yield yesterday
		  #Attribute ID 96 Value(valueFloat): 1.83%.2F%.2F
		  
		  <br /> #description=Maximum charge power today
		  #Attribute ID 95 Value(valueFloat): 157%d%d
		  
		  <br /> #description=Yield today
		  #Attribute ID 94 Value(valueFloat): 0.4%.2F%.2F
		  
		  <br /> #description=High batt. voltage alarm
		  #Attribute ID 93 Value(valueEnum): 0%s%s
		  
		  <br /> #description=Low batt. voltage alarm
		  #Attribute ID 92 Value(valueEnum): 0%s%s
		  
		  <br /> #description=Battery Voltage (System)
		  #Attribute ID 143 Value(valueFloat): 23.59%.2F%.2F V
		  
		  <br /> #description=Battery State of Charge (System)
		  #Attribute ID 144 Value(valueFloat): 94%.1F%.1F %%
		  
		  <br /> #description=Battery Consumed Amphours (System)
		  #Attribute ID 145 Value(valueFloat): -20.7%.2F%.2F Ah
		  
		  <br /> #description=VE.Bus hidden SOC
		  #Attribute ID 240 Value(valueFloat): 84.5%.1F%.1F %%
		  
		  <br /> #description=Network traffic rx
		  #Attribute ID 239 Value(valueFloat): 89506%d%d B
		  
		  <br /> #description=Network traffic tx
		  #Attribute ID 238 Value(valueFloat): 8997%d%d B
		  
		  <br /> #description=Boot type
	    #Attribute ID 237 Value(valueEnum): 1%s%s <br /> 
		#description=log time offset
		  #Attribute ID 216 Value(valueFloat): 119%s%s s
		  
		  <br /> #description=Battery state
		  #Attribute ID 215 Value(valueEnum): 2%s%s
		  
		  <br /> #description=Remote support
		  #Attribute ID 154 Value(valueEnum): 0%s%s
		  
		  <br /> #description=VE.Bus charge current (System)
		  #Attribute ID 153 Value(valueFloat): -5.7%.1F%.1F A
		  
		  <br /> #description=Update to
		  #Attribute ID 151 Value(valueEnum): 0%d%d
		  
		  <br /> #description=Auto update
		  #Attribute ID 150 Value(valueEnum): 1%d%d
		  
		  <br /> #description=Local ip address
		  #Attribute ID 149 Value(valueString): 192.168.2.2%s%s
		  
		  #<br /> #description=Remote ip address
		  #Attribute ID 148 Value(valueString): 88.145.32.15%s%s
		  
		  <br /> #description=Battery Current (System)
		  #Attribute ID 147 Value(valueFloat): -6%.2F%.2F A
		  
		  <br /> #description=Battery Time to Go (System)
		  #Attribute ID 146 Value(valueFloat): 23.5%.2F%.2F h
		  
		  <br /> #description=Relay on the charger
		  #Attribute ID 90 Value(valueEnum): 0%s%s
		  
		  <br /> #description=PV current
		  #Attribute ID 87 Value(valueFloat): 0%.1F%.1F
		  
		  <br /> #description=PV voltage
		  #Attribute ID 86 Value(valueFloat): 10.98%.2F%.2F
		  
		  <br /> #description=Active input current limit
		  #Attribute ID 27 Value(valueFloat): 3.1%.2F%.2F A
		  
		  <br /> #description=Output frequency
		  #Attribute ID 26 Value(valueFloat): 49.8982%.2F%.2F Hz
		  
		  <br /> #description=Output current phase 1
		  #Attribute ID 23 Value(valueFloat): 0.64%.1F%.1F A
		  
		  <br /> #description=Output voltage phase 1
		  #Attribute ID 20 Value(valueFloat): 245.02%.1F%.1F VAC
		  
		  <br /> #description=Input power 1
		  #Attribute ID 17 Value(valueFloat): 0%.0F%.0F VA
		  
		  <br /> #description=Input frequency 1
		  #Attribute ID 14 Value(valueFloat): 50.1026%.2F%.2F Hz
		  
		  <br /> #description=Input current phase 1
		  #Attribute ID 11 Value(valueFloat): 0%.1F%.1F A
		  
		  <br /> #description=Input voltage phase 1
		  #Attribute ID 8 Value(valueFloat): 247.06%.1F%.1F VAC
		  
		  <br /> #description=VE.Bus device version
		  #Attribute ID 7 Value(valueString): 2610304%s%s
		  
		  <br /> #description=mk2 version
		  #Attribute ID 6 Value(valueString): 1130133%s%s
		  
		  <br /> #description=Longitude
		  #Attribute ID 5 Value(valueFloat): -6.08909%.5F%.5F LNG
		  
		  <br /> #description=Latitude
		  #Attribute ID 4 Value(valueFloat): 54.2621%.5F%.5F LAT
		  
		  <br /> #description=gatewayBuildDate
		  #Attribute ID 3 Value(valueString): 201412221640%s%s
		  
		  
		  <br /> #description=gatewayVersion
		  #Attribute ID 2 Value(valueString): v1.17%s%s
		  
		  <br /> #description=Output power 1
		  #Attribute ID 29 Value(valueFloat): 116%.0F%.0F VA
		  
		  <br /> #description=Battery voltage
		  #Attribute ID 32 Value(valueFloat): 23.6%.2F%.2F V
		  
		  <br /> #description=Battery current
		  #Attribute ID 33 Value(valueFloat): -5.7%.1F%.1F A
		  
		  <br /> #description=Charge state
		  #Attribute ID 85 Value(valueEnum): 0%s%s
		  
		  <br /> #description=Charger on/off
		  #Attribute ID 84 Value(valueEnum): 4%s%s
		  
		  <br /> #description=Battery temperature
		  #Attribute ID 83 Value(valueFloat): 4.75%.1F%.1F C
		  
		  <br /> #description=Battery current
		  #Attribute ID 82 Value(valueFloat): 0%.1F%.1F A
		  
		  <br /> #description=Battery voltage
		  #Attribute ID 81 Value(valueFloat): 23.61%.2F%.2F V
		  
		  <br /> #description=Solar charger version
		  #Attribute ID 80 Value(valueString): v2.02%s%s
		  
		  <br /> #description=Switch Position
		  #Attribute ID 79 Value(valueEnum): 3%s%s
		  
		  <br /> #description=Overload alarm
		  #Attribute ID 44 Value(valueEnum): 0%s%s
		  
		  <br /> #description=Low battery alarm
		  #Attribute ID 43 Value(valueEnum): 0%s%s
		  
		  <br /> #description=Temperature alarm
		  #Attribute ID 42 Value(valueEnum): 0%s%s
		  
		  <br /> #description=VE.Bus Error
		  #Attribute ID 41 Value(valueEnum): 0%s%s
		  
		  <br /> #description=VE.Bus state
		  #Attribute ID 40 Value(valueEnum): 9%s%s
		  
		  <br /> #description=Active input
		  #Attribute ID 35 Value(valueFloat): 0%d%d
		  
		  <br /> #description=Phase count
		  #Attribute ID 34 Value(valueFloat): 1%d%d
		  
		  <br /> #description=gatewayID
		  #Attribute ID 1 Value(valueEnum): 1%s%s
	    </p>
		

DISQUS

~~DISQUS~~

vrm_portal/vrm_juice_php_example.1478698203.txt.gz · Last modified: 2016-11-09 14:30 by mvader

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki