Scalaire a écrit:Salut,
Je découvre ce sujet et comme je ne maitrise pas pas les scripts je me demandais s'il était possible de le modifier pour avoir la valeur de la puissance routée vers les chauffe eau en watts à la place des pourcentage car j'ai ajouté des pinces amperemetrique sur les ce ?
<?xml version="1.0" encoding="UTF-8"?>
<root>
<time>2023-02-05 14:16:45</time>
<timestamp>1675603005</timestamp>
<current>
<conso>-541.5</conso> <production>-5253.1</production> <routage_1>400</routage_1> <routage_2>400</routage_2> <tension>226.4</tension> <enConso>9042.6</enConso> <enProd>-118.1</enProd> <enPV_J>-7772.8</enPV_J> <enPV_P>-1416199.2</enPV_P> <heure>14:16:45</heure> <date>05/02/2023</date> <etat>On</etat> <intervalle>01:00</intervalle> <nom>MS_PV4_2</nom> <version>5.0.1</version> <sn>dl0420a</sn> <cmd1>auto</cmd1> <cmd2>auto</cmd2>
</current>
<rtcc v0="14:16:44 DI" />
<paramSys v0="14:16:45" v1="05/02/2023" v2="On" v3="01:00" v4="0.0" v5="MS_PV4_2" v6="5.0.1" v7="dl0420a" v8="102e" v9="102c" v10="00:00" v11="00:00" />
<inAns v0="-541.5" v1="-5253.1" v2="400" v3="400" v4="226.4" v5="0.9" v6="2784.4" v7="0.0" v8="0.0" v9="0.0" v10="0.0" v11="0.0" v12="0.0" v13="0.0" v14="0.0" v15="0.0" />
<survMm v0="0" v1="0" v2="0" v3="0" v4="0" v5="0" v6="0" v7="0" v8="0" v9="0" v10="0" v11="0" v12="0" v13="0" v14="0" v15="0" />
<cmdPos v0="10" v1="0" v2="0" v3="0" v4="0" v5="0" v6="0" v7="2" />
<outStat v0="100" v1="100" v2="0" v3="0" v4="0" v5="0" v6="0" v7="0" v8="0" v9="0" v10="0" v11="0" v12="0" v13="0" v14="0" v15="0" />
<cptVals v0="90426" v1="-118.1" v2="-7772.8" v3="-1416199.2" v4="0" v5="0" v6="0" v7="0" />
<chOutVal v0="0" v1="0" v2="0" v3="255" v4="0" v5="0" v6="0" v7="0" />
</root>
http://localhost/script/?exec=MSUNPV.php&url=192.168.x.y
<?php
// optimisateur de production solaire MSUNPV.php
// V1.0 : opa95 2023-02-03 niveaux instantanes
// V1.1 : opa95 2023-02-05 généralisation
//ligne decommande http://localhost/script/?exec=MSUNPV.php&adresse=192.168.1.247
//Récupération des valeurs par //champ/@vi
function sdk_set_command($cmd1,$cmd2) {//$command off ou 0, manuel ou 1, auto ou 2)
$commande = $cmd[$cmd1] + 4*$cmd[$cmd2];
return $command;//nombre entre 0 et 10
}
function sdk_get_command($command) {//$command entre 0 et 10, select 0 ou 1
if (strtolower($command) == 'a') $command = 10;
$arrCmd[1] = $command%4;
$arrCmd[2] = round(($command - $arrCmd[1])/4);
return $arrCmd;
}
$hexa = array('cmdPos','cptVals','chOutVal');//Champ hexa
$inAns = array('conso','production','routage_1','routage_2','tension');
$cptVals = array('enConso','enProd','enPV_J','enPV_P');
$paramSys = array('heure','date','etat','intervalle','','nom','version','sn');
$cmdPos = array('cmd0');
$cmdArr = array('off','manuel','auto');
$max_int_pos = 0X100000000;
$max_int = ($max_int_pos+1)*2;
$url = getArg('url');
$url = $url.'/sensors.xml';
$response = httpQuery($url, 'GET', '','', $header);
$response = xpath($response,"concat('rtcc=',//rtcc,'@paramSys=',//paramSys,'@inAns=',//inAns,'@survMm=',//survMm,'@cmdPos=',//cmdPos,'@outStat=',//outStat,'@cptVals=',//cptVals,'@chOutVal=',//chOutVal)");
$response = trim(str_replace(';@','@',$response));
$response = str_replace(',','.',$response);
$arr_response = explode('@',$response);
foreach ($arr_response as $field) {
list($key,$values) = explode('=',$field);
$arrValue = array();
$arr_values = explode(';',$values);
if (in_array($key,$hexa)) {
foreach ($arr_values as $value){
$value = trim($value);
if ($value != '') {$result[$key][] = hexdec($value);}
}
}
else {
foreach ($arr_values as $value){
$value = trim($value);
if ($value != '') $result[$key][] = $value;
}
}
}
//var_dump($result);
$cmds = sdk_get_command($result['cmdPos'][0]);
$heure = $result['paramSys'][0];
list($day,$month,$year) = explode('/',$result['paramSys'][1]);
$date = $year.'-'.$month.'-'.$day;
$timestamp = strtotime($date.' '.$heure);
$time = date('Y-m-d H:i:s',$timestamp);
@sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL;
$xml .= ' <root>'.PHP_EOL;
$xml .= ' <time>'.$time.'</time> '.PHP_EOL;;
$xml .= ' <timestamp>'.$timestamp.'</timestamp>'.PHP_EOL;;
$xml .= ' <current>'.PHP_EOL.' ';
$key = 'inAns';
$ind = 0;
foreach ($inAns as $item){
if ($item != '') $xml .= '<'.$item.'>'.$result[$key][$ind].'</'.$item.'> ';
$ind++;
}
$key = 'cptVals';
$ind = 0;
foreach ($cptVals as $item){
if ($item != '') {
if ($result[$key][$ind]<=$max_int_pos) {
$xml .= '<'.$item.'>'.($result[$key][$ind]/10).'</'.$item.'> ';
}
else {
$result[$key][$ind] = ($result[$key][$ind]-$max_int)/10;
$xml .= '<'.$item.'>'.$result[$key][$ind].'</'.$item.'> ';
}
$ind++;}
}
$key = 'paramSys';
$ind = 0;
foreach ($paramSys as $item){
if ($item != '') $xml .= '<'.$item.'>'.$result[$key][$ind].'</'.$item.'> ';
$ind++;
}
$xml .= '<cmd1>'.$cmdArr[$cmds[1]].'</cmd1> '.'<cmd2>'.$cmdArr[$cmds[2]].'</cmd2> ';
$xml .= PHP_EOL.' </current>'.PHP_EOL;
foreach ($result as $key => $value){
$xml .= ' <'.$key.' ';
foreach ($result[$key] as $key1 => $value1){
$xml .= 'v'.$key1.'="'.$value1.'" ';
}
$xml .= '/>'.PHP_EOL;
}
$xml .= ' </root>'.PHP_EOL;
echo $xml;
?>
flc85 a écrit:Ça à l’air pas tout ça, je vais jeter un œil pour vérifier et tester l’envoi de commandes, j’ai changé le titre du sujet
Scalaire a écrit:ça ne fonctionnait pas, mais j'avais vu les posts de flc85 qui avait modifié ceci:
$url = $url.'/sensors.xml'; par $url = $url.'/status.xml';et là certains xpath marche, je continu de tester. les infos les plus pertinentes pour mon usage sont les puissances routées en what vers les chauffe eau : <inAns>
-1957,3;-5953,5;400;400;227,5;1,1;2917,7;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;
Quelle info puis-je fournir pour t'aider ? et comment les récupérer ?
En te remerciant
flc85 a écrit:Ça à l’air pas tout ça, je vais jeter un œil pour vérifier et tester l’envoi de commandes, j’ai changé le titre du sujet
http://localhost/script/?exec=MSUNPV.php&url=192.168.x.y&cmd1=manuel&eedomus_controller_module_id=xxxxxxxxx
<?php
/****************************************************************************
* optimisateur de production solaire MSUNPV.php
* V1.0 : opa95 2023-02-03 niveaux instantanes
* V1.1 : opa95 2023-02-05 généralisation tests par flc85 et Scalaire
* V1.2 : opa95 2023-02-06 modification des commandes
* ligne decommande http://localhost/script/?exec=MSUNPV.php&url=[VAR1]
* ligne decommande http://localhost/script/?exec=MSUNPV&php&url=[VAR1]&cmd1=a
* ligne decommande http://localhost/script/?exec=MSUNPV&php&url=[VAR1]&cmd2=b
* ligne decommande http://localhost/script/?exec=MSUNPV&php&url=[VAR1]&cmd1=a&cmd2=b
* avec VAR1 : adresse ip du MSUNPV
* avec a et b = 0 ou off, 1 ou manuel, 2 ou auto
*Récupération des valeurs dans XPATHpar //champ/@vi (i de 0 à 15)
* //rtcc/@v0
* //paramSys/@v0 à //paramSys/@v11
* //<inAns/@v0 à //<inAns/@v15
* //<survMm/@v0 à //<survMm/@v15
* //<cmdPos/@v0 à //<cmdPos/@v7
* //<outStat/@v0 à //<outStat/@v15
* //<cptVals/@v0 à //<cptVals/@v7
* //<chOutVal/@v0 à //<chOutVal/@v7
*Récuperations ciblées
* //time //timestamp //conso //production> //routage_1 //routage_2 //tension
* //powbal1 //powbal2 //enConso //enProd //enPV_J //enPV_P
* //heure //date //etat //intervalle //nom //version //sn //cmd1 //cmd2
*Contenu du xml renvoyé (exemple)
<?xml version="1.0" encoding="UTF-8"?>
<root>
<time>2023-02-05 14:16:45</time>
<timestamp>1675603005</timestamp>
<current>
<conso>-1957.3</conso> <production>-5953.5</production> <routage_1>400</routage_1>
<routage_2>400</routage_2> <tension>227.5</tension> <powbal1>1.1</powbal1>
<powbal2>2917.7</powbal2> <enConso>9042.6</enConso> <enProd>-118.1</enProd>
<enPV_J>-7772.8</enPV_J> <enPV_P>-1416199.2</enPV_P> <heure>14:16:45</heure>
<date>05/02/2023</date> <etat>On</etat> <intervalle>01:00</intervalle>
<nom>MS_PV4_2</nom> <version>5.0.1</version> <sn>dl0420a</sn>
<cmd1>auto</cmd1> <cmd2>auto</cmd2>
</current>
<rtcc v0="14:16:44 DI" />
<paramSys v0="14:16:45" v1="05/02/2023" v2="On" v3="01:00" v4="0.0" v5="MS_PV4_2" v6="5.0.1"
v7="dl0420a" v8="102e" v9="102c" v10="00:00" v11="00:00" />
<inAns v0="-1957.3" v1="-5953.5" v2="400" v3="400" v4="227.5" v5="1.1" v6="2917.7" v7="0.0"
v8="0.0" v9="0.0" v10="0.0" v11="0.0" v12="0.0" v13="0.0" v14="0.0" v15="0.0" />
<survMm v0="0" v1="0" v2="0" v3="0" v4="0" v5="0" v6="0" v7="0" v8="0" v9="0"
v10="0" v11="0" v12="0" v13="0" v14="0" v15="0" />
<cmdPos v0="10" v1="0" v2="0" v3="0" v4="0" v5="0" v6="0" v7="2" />
<outStat v0="100" v1="100" v2="0" v3="0" v4="0" v5="0" v6="0" v7="0"
v8="0" v9="0" v10="0" v11="0" v12="0" v13="0" v14="0" v15="0" />
<cptVals v0="90426" v1="-118.1" v2="-7772.8" v3="-1416199.2" v4="0" v5="0" v6="0" v7="0" />
<chOutVal v0="0" v1="0" v2="0" v3="255" v4="0" v5="0" v6="0" v7="0" />
</root>
**************************************************************************/
function sdk_set_command($cmd1,$cmd2) {//$command 0,1,2)
$cmd1 = min($cmd1%4,2);
$cmd2 = min($cmd2%4,2);
$command = $cmd1 + 4*$cmd2;
if ($command == 10) $command = 'a';
return $command;//nombre entre 0 et 10
}
function sdk_get_command($command) {//$command entre 0 et 10, select 0 ou 1
if (strtolower($command) == 'a') $command = 10;
$command = min($command,10);
$arrCmd[1] = $command%4;
$arrCmd[2] = round(($command - $arrCmd[1])/4);
return $arrCmd;
}
function sdk_num_command($cmd) {//$cmd off, manuel, auto
$cmd = trim(strtolower($cmd));
switch ($cmd) {
case '0' :
case 'off' : $cmd = 0;
break;
case '1' :
case 'manuel' : $cmd = 1;
break;
case '2' :
case 'auto' : $cmd = 2;
break;
default : $cmd = '*';
}
return $cmd;
}
$hexa = array('cmdPos','cptVals','chOutVal');//Champ hexa
$inAns = array('conso','production','routage_1','routage_2','tension','powbal1','powbal2');
$cptVals = array('enConso','enProd','enPV_J','enPV_P');
$paramSys = array('heure','date','etat','intervalle','','nom','version','sn');
$cmdPos = array('cmd0');
$cmdArr = array('off','manuel','auto');
$max_int_pos = 0X100000000;
$max_int = ($max_int_pos+1)*2;
$url_ = getArg('url');
$url = $url_.'/status.xml';
$url_cmd = $url_.'/index.xml';
$cmd1_ = sdk_num_command(getArg('cmd1',false,''));
$cmd2_ = sdk_num_command(getArg('cmd2',false,''));
$response = httpQuery($url, 'GET', '','', $header);
$response1 = xpath($response,'cmdPos');
list($old_command,$bof) = explode(';',$response1);
$old_cmds = sdk_get_command($old_command);
if ($cmd1_ === '*') $new_cmds[1] = $old_cmds[1];
else {$new_cmds[1] = $cmd1_; }
if ($cmd2_ === '*') $new_cmds[2] = $old_cmds[2];
else {$new_cmds[2] = $cmd2_;}
$is_new_command = ($new_cmds[1] != $old_cmds[1]) || ($new_cmds[1] != $old_cmds[1]) ;
$cmd = sdk_set_command($new_cmds[1],$new_cmds[2]);
if ($is_new_command){
// $headers[] = 'Content-Type: application/x-www-form-urlencoded';
$parS=$cmd.';0;0;0;0;0;0;2;';
$url1 = $url_cmd.'?parS='.$parS;
$response = httpQuery($url1, 'POST', '','', $header);
// var_dump($response);
}
$response = xpath($response,"concat('rtcc=',//rtcc,'@paramSys=',//paramSys,'@inAns=',//inAns,'@survMm=',//survMm,'@cmdPos=',//cmdPos,'@outStat=',//outStat,'@cptVals=',//cptVals,'@chOutVal=',//chOutVal)");
$response = trim(str_replace(';@','@',$response));
$response = str_replace(',','.',$response);
$arr_response = explode('@',$response);
foreach ($arr_response as $field) {
list($key,$values) = explode('=',$field);
$arrValue = array();
$arr_values = explode(';',$values);
if (in_array($key,$hexa)) {
foreach ($arr_values as $value){
$value = trim($value);
if ($value != '') {$result[$key][] = hexdec($value);}
}
}
else {
foreach ($arr_values as $value){
$value = trim($value);
if ($value != '') $result[$key][] = $value;
}
}
}
//var_dump($result);
$cmds = sdk_get_command($result['cmdPos'][0]);
$heure = $result['paramSys'][0];
list($day,$month,$year) = explode('/',$result['paramSys'][1]);
$date = $year.'-'.$month.'-'.$day;
$timestamp = strtotime($date.' '.$heure);
$time = date('Y-m-d H:i:s',$timestamp);
@sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL;
$xml .= ' <root>'.PHP_EOL;
$xml .= ' <time>'.$time.'</time> '.PHP_EOL;;
$xml .= ' <timestamp>'.$timestamp.'</timestamp>'.PHP_EOL;;
$xml .= ' <current>'.PHP_EOL.' ';
$key = 'inAns';
$ind = 0;
foreach ($inAns as $item){
if ($item != '') $xml .= '<'.$item.'>'.$result[$key][$ind].'</'.$item.'> ';
$ind++;
}
$key = 'cptVals';
$ind = 0;
foreach ($cptVals as $item){
if ($item != '') {
if ($result[$key][$ind]<=$max_int_pos) {
$xml .= '<'.$item.'>'.($result[$key][$ind]/10).'</'.$item.'> ';
}
else {
$result[$key][$ind] = ($result[$key][$ind]-$max_int)/10;
$xml .= '<'.$item.'>'.$result[$key][$ind].'</'.$item.'> ';
}
$ind++;}
}
$key = 'paramSys';
$ind = 0;
foreach ($paramSys as $item){
if ($item != '') $xml .= '<'.$item.'>'.$result[$key][$ind].'</'.$item.'> ';
$ind++;
}
$xml .= '<cmd1>'.$cmdArr[$cmds[1]].'</cmd1> '.'<cmd2>'.$cmdArr[$cmds[2]].'</cmd2> ';
$xml .= PHP_EOL.' </current>'.PHP_EOL;
foreach ($result as $key => $value){
$xml .= ' <'.$key.' ';
foreach ($result[$key] as $key1 => $value1){
$xml .= 'v'.$key1.'="'.$value1.'" ';
}
$xml .= '/>'.PHP_EOL;
}
$xml .= ' </root>'.PHP_EOL;
echo $xml;
?>
Retour vers API eedomus & eedomus toolbox
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 12 invité(s)