qwench a écrit:Bonjour
Je reprend le fil de discussion avant la remise en route du chauffage...
Merci aux intervenants d'avoir avancé sur le sujet.
J'ai modifié le script pour simplifier la gestion du token. Et plus besoin de la session id du cookie, le token suffit.
J'ai ajouté le token dans une variable eedomus pour éviter d'éditer le script à chaque fois.
On peut aussi le mettre directement dans le script si on veut (décommenter la ligne) en tête de script.
Donc
- Editez le script eedomus enphase et copier celui ci-dessous à la place. Sauvegardez.
- Dans la config du périphérique eedomus, ajouter dans VAR3: token=eyJra... (c'est le token obtenu sur le site enphase)
- Ajouter VAR3 dans l'url de la requête: http://localhost/script/?exec=envoy_metered.php&[VAR1]&[VAR2]&[VAR3]
- Faites un test et vous devriez avoir des valeurs dans le json.
- Code : Tout sélectionner
<?
//*************************************************************************
// Widget envoy Créé le 22/08/2021
// merguez07 Version 1.4 du 21/06/2022 : correction d'un bug dans le json
// merguez07 Version 1.5 du 16/09/2022 : correction d'un bug dans le json
// damien, qwench... 1.6 du 20/10/2023 : gestion du token
// ISO 8859-1
//*************************************************************************
function sdk_unit($value)
{
global $unit;
return round($value / $unit, 2);
}
$type = getArg('type', false);
//Token défini dans le code
//$token = 'eyJ...';
//Lecture du token depuis une variable eedomus
$token = getArg('token');
if ($type == "widget") {
$api_master = getArg('api_master');
$periph_list = getPeriphList();
foreach ($periph_list as $key => $value) {
if ($value["parent_device_id"] == $api_master) {
$api_child[] = $value["device_id"];
}
}
foreach ($api_child as $api) {
$a = getValue($api);
if (strpos($a["full_name"], "% de charge") !== false) $pourcent_batteries = $a["value"] . "%";
if (strpos($a["full_name"], "Etat des batteries") !== false) $State_batteries = $a["value"];
if (strpos($a["full_name"], "Energie stockée") !== false) $W_Charge_batteries = round($a["value"]) . "Wh";
if (strpos($a["full_name"], "P échangée") !== false) $P_Charge_batteries = round(abs($a["value"])) . "W";
if (strpos($a["full_name"], "Nb de batteries") !== false) $Nb_batteries = $a["value"];
if (strpos($a["full_name"], "P import/export") !== false) $P_import_mes = $a["value"];
if (strpos($a["full_name"], "P réelle de production") !== false) $P_onduleurs_mes = round($a["value"]) . "W";
if (strpos($a["full_name"], "Production journalière") !== false) $W_prod_j_mes = round($a["value"]) . "Wh";
if (strpos($a["full_name"], "Consommation journalière") !== false) $W_conso_j_mes = round($a["value"]) . "Wh";
if (strpos($a["full_name"], "P consommée") !== false) $P_conso_mes = round($a["value"]) . "W";
if (strpos($a["full_name"], "Consommation journalière") !== false) $W_consoJ = "Wj=" . round($a["value"]) . "Wh";
if (strpos($a["full_name"], "Consommation sur 7 jours") !== false) $W_conso7J = "W7j=" . round($a["value"]) . "Wh";
}
if ($P_import_mes < 0) {
$reseau_txt = "Export";
} else {
$reseau_txt = "Import";
}
$P_import_mes = round(abs($P_import_mes)) . "W";
// Widget envoy
?>
<div class="widget">
<img src="https://i.ibb.co/bF1v1JL/image-2021-08-22-T15-43-07-583-Z.png" alt="">
<?php //réseau
?>
<span class="widget-text reseau-puissance"><?= $P_import_mes; ?></span>
<span class="widget-text reseau-state"><?= $reseau_txt; ?></span>
<span class="widget-text reseau-wj"><?= $W_consoJ; ?></span>
<span class="widget-text reseau-w7j"><?= $W_conso7J; ?></span>
<?php //maison
?>
<span class="widget-text consommation-puissance"><?= $P_conso_mes; ?></span>
<span class="widget-text consommation-energieJ"> <?= $W_conso_j_mes; ?></span>
<?php //batterie
?>
<span class="widget-text batterie-puissance"> <?= $P_Charge_batteries; ?></span>
<span class="widget-text batterie-energie"> <?= $W_Charge_batteries; ?></span>
<span class="widget-text batterie-pourcent"> <?= $pourcent_batteries; ?></span>
<span class="widget-text batterie-nb"> <?= $Nb_batteries; ?></span>
<?php //panneaux solaire
?>
<span class="widget-text panneaux-solaire-puissance"><?= $P_onduleurs_mes; ?></span>
<span class="widget-text panneaux-solaire-energieJ"><?= $W_prod_j_mes; ?></span>
<?php //flèches
?>
<?php if ($reseau_txt == 'Import') : ?>
<span class="widget-arrow clignote"></span>
<?php else : ?>
<span class="widget-arrow inverse clignote"></span>
<?php endif; ?>
<?php if ($state_batterie == 'Charge') : ?>
<span class="widget-arrow batterie clignote"></span>
<?php else : ?>
<span class="widget-arrow batterie inverse clignote"></span>
<?php endif; ?>
<span class="widget-arrow panneaux"></span>
<span class="widget-arrow maison"></span>
</div>
<style media="screen">
:root {
--width-element: 1;
}
.widget {
display: inline-block;
width: calc(100% * var(--width-element));
height: auto;
position: relative;
font-family: Arial, sans-serif;
text-align: center;
}
.widget>img {
width: 100%;
height: auto;
border: none;
}
.widget-text {
position: absolute;
font-size: calc(2.7vw * var(--width-element));
font-weight: bold;
color: black;
width: 14%;
}
.reseau-puissance {
top: 56%;
left: 4%;
}
.reseau-state {
top: 42%;
left: 4%;
}
.reseau-wj {
top: 46%;
left: 21%;
}
.reseau-w7j {
top: 51%;
left: 22%;
}
.consommation-puissance {
top: 56%;
left: 83%;
color: #4285F4;
}
.consommation-energieJ {
top: 42%;
left: 83%;
color: #4285F4;
}
.batterie-puissance {
top: 93%;
left: 43%;
color: #4B8523;
}
.batterie-energie {
top: 79%;
left: 43%;
color: #4B8523;
}
.batterie-pourcent {
top: 86%;
left: 49%;
color: #4B8523;
}
.batterie-nb {
top: 86%;
left: 36%;
color: #4B8523;
}
.panneaux-solaire-puissance {
top: 18%;
left: 43%;
color: #D49806;
}
.panneaux-solaire-energieJ {
top: 3%;
left: 43%;
color: #D49806;
}
.widget-arrow {
position: absolute;
top: 48.7%;
left: 35%;
display: inline-block;
width: calc(3.4vw * var(--width-element));
height: calc(3.4vw * var(--width-element));
background-image: url('https://i.ibb.co/Z6XwJWW/image-2021-08-22-T07-07-16-112-Z.png');
background-size: cover;
background-repeat: none;
}
.widget-arrow.inverse {
transform: rotate(180deg);
}
.widget-arrow.batterie {
top: 60%;
left: 47.6%;
background-image: url('https://i.ibb.co/CPCgs9q/arrow-batterie.png');
transform: rotate(90deg);
}
.widget-arrow.panneaux {
top: 35%;
left: 47.6%;
background-image: url('https://i.ibb.co/ssGk3Rh/arrow-panneau.png');
transform: rotate(90deg);
}
.widget-arrow.maison {
top: 48.7%;
left: 62%;
background-image: url('https://i.ibb.co/yyWvW7j/arrow-house.png');
}
.clignote {
color: green;
animation: clignote 2s linear infinite;
}
@keyframes clignote {
50% {
opacity: 0;
}
}
</style>
<?
die;
}
$cache_duration = 1; // minutes
$time_last_xml = loadVariable('time_last_xml');
if ((time() - $time_last_xml) / 60 < $cache_duration) {
sdk_header('text/xml');
$cached_xml = loadVariable('cached_xml');
echo $cached_xml;
die();
}
$address_envoy = getArg('adress');
//https required
$url = 'https://' . $address_envoy . '/production.json';
//$oauth_token = NULL required
$request = httpQuery($url, $action = 'GET', $post = NULL, $oauth_token = NULL, $headers = array("Authorization: Bearer $token"), $use_cookies = false, $ignore_errors = true);
if (strpos($request, 'Connection refused')) {
echo 'Connection refused';
$xml .= "<ETAT> Envoy injoignable</ETAT>\n";
sdk_header('text/xml');
echo $xml;
return;
}
$xml .= "<ETAT> ok </ETAT>\n";
/*$request="{\"production\":
[
{\"type\":\"inverters\",
\"activeCount\":41,
\"wNow\":1346
},
{\"type\":\"eim\",
\"wNow\":1425.817,
\"whToday\":3150.953,
\"whLastSevenDays\":216872.953
}
],
\"consumption\":
[
{\"type\":\"eim\",
\"wNow\":1159.042,
\"whToday\":3186.23,
\"whLastSevenDays\":167332.23
},
{\"type\":\"eim\",
\"wNow\":11266.775
}
],
\"storage\":
[
{\"type\":\"acb\",
\"activeCount\":16,
\"wNow\":1537,
\"whNow\":5791,
\"state\":\"charging\",
\"percentFull\":29
}
]
}";*/
$Trequest = sdk_json_decode($request);
$nb_onduleurs = $Trequest['production'][0]['activeCount'];
$P_onduleurs_calc = $Trequest['production'][0]['wNow'];
$P_onduleurs_mes = $Trequest['production'][1]['wNow'];
$W_prod_j_mes = $Trequest['production'][1]['whToday'];
$W_prod_7j_mes = $Trequest['production'][1]['whLastSevenDays'];
$P_conso_mes = $Trequest['consumption'][0]['wNow'];
$W_conso_j_mes = $Trequest['consumption'][0]['whToday'];
$W_conso_7j_mes = $Trequest['consumption'][0]['whLastSevenDays'];
$P_import_mes = $Trequest['consumption'][1]['wNow'];
$Nb_batteries = $Trequest['storage'][0]['activeCount'];
$P_Charge_batteries = $Trequest['storage'][0]['wNow'];
$W_Charge_batteries = $Trequest['storage'][0]['whNow'];
$State_batteries = $Trequest['storage'][0]['state'];
$pourcent_batteries = $Trequest['storage'][0]['percentFull'];
$unit = 1;
$xml .= "<NB_ONDULEURS>" . $nb_onduleurs . "</NB_ONDULEURS>\n";
$xml .= "<P_ONDULEURS_CALCULEE>" . sdk_unit($P_onduleurs_calc) . "</P_ONDULEURS_CALCULEE> \n";
$xml .= "<P_ONDULEURS>" . sdk_unit($P_onduleurs_mes) . "</P_ONDULEURS> \n";
$xml .= "<PRODUCTION_J>" . sdk_unit($W_prod_j_mes) . "</PRODUCTION_J> \n";
$xml .= "<PRODUCTION_7J>" . sdk_unit($W_prod_7j_mes) . "</PRODUCTION_7J> \n";
$xml .= "<P_CONSOMMATION>" . sdk_unit($P_conso_mes) . "</P_CONSOMMATION> \n";
$xml .= "<CONSOMMATION_J>" . sdk_unit($W_conso_j_mes) . "</CONSOMMATION_J> \n";
$xml .= "<CONSOMMATION_7J>" . sdk_unit($W_conso_7j_mes) . "</CONSOMMATION_7J> \n";
$xml .= "<P_IMPORT_RESEAU>" . sdk_unit($P_import_mes) . "</P_IMPORT_RESEAU> \n";
$xml .= "<NB_BATTERIES>" . $Nb_batteries . "</NB_BATTERIES> \n";
$xml .= "<P_CHARGE_BATTERIES>" . sdk_unit($P_Charge_batteries) . "</P_CHARGE_BATTERIES> \n";
$xml .= "<ENERGIE_STOCKEE>" . sdk_unit($W_Charge_batteries) . "</ENERGIE_STOCKEE> \n";
$xml .= "<ETAT_BATTERIES>" . $State_batteries . "</ETAT_BATTERIES> \n";
$xml .= "<POURCENT_CHARGE>" . $pourcent_batteries . "</POURCENT_CHARGE> \n";
$cached_xml = "<ENPHASE>\n";
$cached_xml .= "<cached>0</cached>\n";
$cached_xml .= $xml;
$cached_xml .= '</ENPHASE>';
sdk_header('text/xml');
echo $cached_xml;
if ($xml != '') // non vide
{
$cached_xml = str_replace('<cached>0</cached>', '<cached>1</cached>', $cached_xml);
saveVariable('cached_xml', $cached_xml);
saveVariable('time_last_xml', time());
}
die;
?>
bidou6678 a écrit:Bonjour et meilleurs voeux à tous,
chez moi aussi ça a marché. Merci Beaucoup à seblanglois78 et qwench.
Qui peut faire la mise à jour du script sur le site eedomus ?
vbust a écrit:Bonjour pour suivre aussi
je n'arrive meme pas a faire la demande de token...
Julian40 a écrit:bidou6678 a écrit:Bonjour et meilleurs voeux à tous,
chez moi aussi ça a marché. Merci Beaucoup à seblanglois78 et qwench.
Qui peut faire la mise à jour du script sur le site eedomus ?
Bonjour à tous,
Alors que tout était ok pour moi depuis 1 an, patatras depuis début de semaine... le renouvellement de Token est maintenant nécessaire tous les jours... J'ai crée un ticket à Enphase...
En attendant j'ai mis à jour le Script grace à la modif de qwench, merci beaucoup qwench, ça ne me prend pas longtemps pour générer un token et mettre à jour la VAR3... mais, tous les jours... ce n'est pas une vie...
j'attends le retour d'Enphase avec impatience...
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 18 invité(s)