<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eu5.fusionsolar.huawei.com/thirdData/login',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_POST => true,
CURLOPT_HEADER => true,
CURLOPT_POSTFIELDS =>'{
"userName":"xxxxxxx",
"systemCode":"zzzzzzz"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json'
),
));
$result = curl_exec($curl);
$headerSize = curl_getinfo( $curl , CURLINFO_HEADER_SIZE );
$headerStr = substr( $result , 0 , $headerSize );
$headers = headersToArray( $headerStr );
$token = $headers['xsrf-token'];
curl_close( $curl );
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eu5.fusionsolar.huawei.com/thirdData/getDevRealKpi',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HEADER => true,
CURLOPT_POSTFIELDS =>'{
"devIds": '.$argv[1].',
"devTypeId": '.$argv[2].'
}',
CURLOPT_HTTPHEADER => array(
'XSRF-TOKEN: '.$token,
'Content-Type: application/json'
),
));
$result = curl_exec($curl);
$headerSize = curl_getinfo( $curl , CURLINFO_HEADER_SIZE );
$headerStr = substr( $result , 0 , $headerSize );
$bodyStr = substr( $result , $headerSize );
curl_close($curl);
$data = json_decode($bodyStr,true);
print_r($data['data'][0]['dataItemMap'][$argv[3]]);
function headersToArray( $str )
{
$headers = array();
$headersTmpArray = explode( "\r\n" , $str );
for ( $i = 0 ; $i < count( $headersTmpArray ) ; ++$i )
{
if ( strlen( $headersTmpArray[$i] ) > 0 )
{
if ( strpos( $headersTmpArray[$i] , ":" ) )
{
$headerName = substr( $headersTmpArray[$i] , 0 , strpos( $headersTmpArray[$i] , ":" ) );
$headerValue = substr( $headersTmpArray[$i] , strpos( $headersTmpArray[$i] , ":" )+1 );
$headers[$headerName] = $headerValue;
}
}
}
return $headers;
}
?>
Voici le script :
« xxxxxxx » : username reçu par Huawei
« zzzzzzz » : mot de passe reçu par Huawei
La requête est : /var/www/html/plugins/script/data/huawei.php 1000000035yyyyyy 39 battery_soh
« 1000000035yyyyyy » : Id du device à afficher
« 39 » : id du type du device à afficher
« battery_soh » : valeur à afficher (ici c’est la capacité de la batterie)
l’id et le type sont listés via le call : https://eu5.fusionsolar.huawei.com/thirdData/getDevList
Voilà, pour l’instant c’est du brute mais cela fonctionne.
Pour les valeurs, j’affiche donc :
type : 39 (batteries)
« battery_soh » : capacité de charge de la batterie en kW
« battery_soc » : % de charge de la batterie
type : 38 (panneaux)
« active_power » : production actuelle des panneaux
« day_cap »: production du jour des panneaux
type : 47 (compteur)
« active_cap » : production électrique vers le réseau (totaux depuis j-0)
« reverse_active_cap »: production électrique depuis le réseau (totaux depuis j-0)
tips : pour calculer la production (compteur) du jour en cours, j’ai fait un widget virtuel avec les valeurs « max(#[Maison][Fusion Huawei][Production from Grid]#,today)-max(#[Maison][Fusion Huawei][Production from Grid]#,yesterday) » qui représente donc la valeur maximum du jour que je soustrais de la valeur maximum de jour précédent et j’en fais de même pour la production « to grid » pour avoir le total de la production du jour depuis le réseau et vers le réseau.
Avec ses données, j’ai pu faire cela :