Pas de mise à jour sur capteur HTTP avec script PHP

Discussion et échanges de scripts pour la box eedomus

Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar akua » 16 Jan 2025 11:51

Bonjour à tous,

J'ai un petit souci que je n'arrive pas à régler, il y a peut-être quelque chose de simple qui m'échappe.
Je suis sous Tempo (EDF), et j'ai développé un petit script qui me somme à chaque fin de journée rouge ma consommation de la journée en kWh.

J'ai créé un capteur HTTP dans lequel j'ai mis le script en URL de la requête (http://localhost/script/?exec=totalHProuge.php), j'ai précisé le chemin XPath (//HPRougeTotal), et j'ai mis une fréquence à 0.

Enfin, j'ai créé une règle qui se lance à 23h00 chaque jour rouge, qui fait l'action "Mettre à jour" sur mon périphérique.

Le souci c'est que ça ne fonctionne qu'une fois sur 4 ou 5, la règle se déclenche, mais la valeur de mon périphérique ne se met presque jamais à jour :oops:

Avez-vous une idée de ce que je pourrais regarder, ou si j'ai raté quelque chose ?


Voici un extrait des quelques lignes intéressantes qui font la sortie de mon script :
Code : Tout sélectionner
sdk_header('text/xml');
$xml = "<root>";
...
$xml .= "Conso totale..."
...
$xml .= "</root>";
echo $xml;


Merci ! :)
akua
 
Messages : 95
Inscription : 11 Déc 2017

Re: Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar opa95 » 16 Jan 2025 14:26

Bonjour akua
akua a écrit:Bonjour à tous,

J'ai un petit souci que je n'arrive pas à régler, il y a peut-être quelque chose de simple qui m'échappe.
Je suis sous Tempo (EDF), et j'ai développé un petit script qui me somme à chaque fin de journée rouge ma consommation de la journée en kWh.

J'ai créé un capteur HTTP dans lequel j'ai mis le script en URL de la requête (http://localhost/script/?exec=totalHProuge.php), j'ai précisé le chemin XPath (//HPRougeTotal), et j'ai mis une fréquence à 0.

Enfin, j'ai créé une règle qui se lance à 23h00 chaque jour rouge, qui fait l'action "Mettre à jour" sur mon périphérique.

Le souci c'est que ça ne fonctionne qu'une fois sur 4 ou 5, la règle se déclenche, mais la valeur de mon périphérique ne se met presque jamais à jour :oops:

Avez-vous une idée de ce que je pourrais regarder, ou si j'ai raté quelque chose ?


Voici un extrait des quelques lignes intéressantes qui font la sortie de mon script :
Code : Tout sélectionner
sdk_header('text/xml');
$xml = "<root>";
...
$xml .= "Conso totale..."
...
$xml .= "</root>";
echo $xml;


Merci ! :)

Si ça marche 1 fois sur 5, c'est sans doute que ton script est correct (l'extrait du code est trop court pour pouvoir donner un avis).
Pour le déclenchement de la règle, il faudrait la copie de la règle pour te donner un avis.
Pourquoi déclenches-tu à 23h plutôt qu'à minuit, cela faciliterait les comparaisons avec tes relevés faits par le fournisseur?
Moi, j'ai une règle de ce type qui me renvoie une notification en une fois à minuit avec les consommations (venant du linky) à diverses heures de la journée (6h30, 13h, 18h, 20h, 22h30 et 24h) : ça marche sans souci depuis des années :)
Dernière édition par opa95 le 21 Jan 2025 15:23, édité 1 fois.
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 892
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar akua » 16 Jan 2025 17:31

Merci pour la réponse !

En fait ce qui m'importe le plus, c'est la conso entre 06h00 et 22h00 sur les journées rouge, donc j'ai mis 23h00 mais j'aurais pu mettre 22h01 c'était pareil.

Voici le script complet :

Code : Tout sélectionner
<?

$joursSemaine = array("", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim");
$periph_TotalHPRouge_value = getValue('3375846', true);
$TotalHPRouge = $periph_TotalHPRouge_value['value'];

$periph_ZLinkyHPRouge = getValue('3235756', true);
$ZLinkyHPRouge = $periph_ZLinkyHPRouge['value'];

$TotalHPRougeDetail = explode(" - ", $TotalHPRouge);

$lastIndex = $TotalHPRougeDetail[1];

sdk_header('text/xml');
$xml = "<root>";

// Exemple de sortie : "Mar 14/01/2025 - 390672 - Conso 33.6 kWh"

if ($ZLinkyHPRouge > $lastIndex) {
   $xml .= "<HPRougeTotal>".$joursSemaine[date('N')]." ".date('d/m/Y')." - ".$ZLinkyHPRouge." - Conso ".round((($ZLinkyHPRouge-$lastIndex)/1000), 1)." kWh</HPRougeTotal>";

} else {
      $xml .= "<HPRougeTotal>Erreur, script lance alors qu'on n'est pas sur un jour rouge</HPRougeTotal>";
}

$xml .= "</root>";

echo $xml;

?>



Le périphérique 3375846 correspond à mon capteur "Total kW HP Rouge" qui totalise la conso chaque jour rouge.
Le périphérique 3235756 correspond à mon compteur HP Rouge renvoyé par le Zlinky


Et voici le détail de la règle en question :
regle.png
regle.png (17.85 Kio) Consulté 1303 fois
akua
 
Messages : 95
Inscription : 11 Déc 2017

Re: Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar opa95 » 17 Jan 2025 09:44

Bonjour akua
J'ai mis ton script en test : certaines instructions m'ont étonné (je ne pensais pas que ça marchait), mais ça tourne bien sans le test pour savoir si le jour est rouge ou pas (en fait, c'est une simulation qui teste toutes les heures).
Je le mets en test ce matin avec une simulation de jour rouge ou pas : réponse dans l'après-midi.
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 892
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar opa95 » 18 Jan 2025 11:34

Bonjour akua
J'ai continué la simulation avec ton script et une version modifiée pour être plus facilement adaptable à diverses situations. J'ai utilisé ta règle de déclenchement, toutes les heures au lieu de 1 fois par jour, et je n'ai observé aucun problème de déclenchement; il s'agit en fait d'une simulation, car je ne dispose pas du contrat Tempo : j'ai utilisé le Linky normal et un interrupteur d'activation du mode "rouge".
Quand tu n'as pas de mise à jour, est-ce-que la règle a bien déclenché?
Voici ce que j'ai testé
akua.png
device
akua.png (28.28 Kio) Consulté 1185 fois

akua_regle.png
regle
akua_regle.png (22.21 Kio) Consulté 1185 fois

Le nouveau script n'est pas différent du tien dans son principe, mais :
L'id du compteur est dans VAR1 (pas dans le script)
L'id du device et l'unité du compteur sont récupérés automatiquement
Le facteur pour la consommation est dans VAR2 (1000 par défaut)
Le nombre de décimales est dans VAR3 (1 par défaut)
On peut effectuer un débogage dans la fenêtre de test, sans perdre le résultat de XPATH
Les variables ont été renommées pour que ça fonctionne avec n'importe quel compteur totalisateur.
La ligne de commande a été complétée et le XPATH (le compteur n'est pas nécessairement HP Rouge).
Pour utiliser un compteur particulier, il suffit de modifier VAR1 et la règle de déclenchement sans intervenir sur le script. :)
Code : Tout sélectionner
<?
// Gestion Consommation compteur pour box eedomus
// But : relevé journalier de compteur si actif
// Heure de relevé et gestion de l'activité par une règle
// Version 1 Akua janvier 2025, adaptation (opa95 17/01/2025)
// Appel http://localhost/script/?exec=releve_compteur.php&counter=[VAR1]
// ou http://localhost/script/?exec=releve_compteur.php&counter=[VAR1]&factor=[VAR2]&prec=[VAR3]
// pour debogage, dans la fenêtre de test, ajouter &debug=1
// la sortie reste valable même en mode debug
// VAR1 id du compteur (linky HP Rouge : 3235756)
// VAR2 (optionnel) facteur d'échelle pour consommation (défaut DEFFACT = 1000)
// VAR3 (optionnel) précision de la consommation (défaut : DEFPREC = 1)
// XPath //index
// Frequence de la requête : 0
// Appel par règle à 23h (entre 22h05 et 05h59) si HP

define('DEFFACT',1000);//Diviseur par défaut
define('DEFPREC',1);//Precision par défaut

$joursSemaine = array(1 => "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim");
$periph_id = getArg ('eedomus_controller_module_id');//id du periph
$counter_id = getArg('counter');//id du compteur (dans [VAR1])
$factor = getArg('factor',false,"");
if ($factor == "") $factor = DEFFACT;
$prec = getArg('prec',false,DEFPREC);
if ($prec == "") $prec = DEFPREC;
$debug = getArg('debug',false,0);//

//recupération ancien index
$periph_values = getValue($periph_id, true);//
$periph_old_value = $periph_values['value'];
$old_value = explode(" - ", $periph_old_value);
$old_index = $old_value[1];//dernierindex valide

//recupération nouvel index
$new_compteur = getValue($counter_id, true);
$new_index = $new_compteur['value'];//new_index
$unit = $new_compteur['unit'];

$conso = ($new_index - $old_index)/$factor;

switch ($factor){
  case 1000 : $unit_conso = 'k'.$unit;break;
  case 100  : $unit_conso = 'h'.$unit;break;
  case 10   : $unit_conso = 'D'.$unit;break;
  default   : $unit_conso = $unit;
}
$unit_conso = substr($unit_conso,0,-1);

@sdk_header('text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
if ($debug) {
  echo "<!--\n";//commentaire
  echo "id periph : $periph_id\n";
  echo "id Compteur : $counter_id\n";
  echo "Facteur : $factor\n";
  echo "Precision : $prec\n";
  echo "Periph\n";
  var_dump($periph_values);
  echo "Linky\n";
  var_dump($new_compteur);
  echo "Ancien : $periph_old_value\n";
  echo "Nouvel index ($unit) : $new_index\n";
  echo "Ancien index ($unit) : $old_index\n";
  echo "Conso ($unit_conso) : $conso\n";
  echo "-->\n";
}

$xml = "<root><result>";

// Exemple de sortie : "Mar 14/01/2025 - 390672 - Conso 33.6 kWh"
if ($conso > 0) {
  $conso = round($conso,$prec);
  $xml .= $joursSemaine[date('N')]." ".date('d/m/Y')." - $new_index - Conso $conso $unit_conso";
} else {
      $xml .= "Erreur, script lance hors periode";
}
$xml .= "</result></root>";
echo $xml;

?>

Dernière édition par opa95 le 21 Jan 2025 15:22, édité 1 fois.
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 892
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar akua » 19 Jan 2025 12:41

Bonjour opa,

Merci beaucoup pour ces tests et pour la nouvelle version du script, en effet bien mieux écrit et plus générique !
Je viens de le mettre en place, quand je fais un test à la main ça fonctionne nickel, j'ai remis ma planification quotidienne sur les jours rouge, on verra demain soir si ça se lance bien tout seul ! ;) :)
akua
 
Messages : 95
Inscription : 11 Déc 2017

Re: Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar akua » 22 Jan 2025 12:33

Bonjour,
Le script fonctionne parfaitement, merci ! :P
akua
 
Messages : 95
Inscription : 11 Déc 2017

Re: Pas de mise à jour sur capteur HTTP avec script PHP

Messagepar opa95 » 22 Jan 2025 15:55

Bonjour akua
akua a écrit:Bonjour,
Le script fonctionne parfaitement, merci ! :P

Tant mieux.
En toute rigueur, en étant puriste, la ligne 45 devrait être (la version en ligne a été corrigée)
Code : Tout sélectionner
case 10   : $unit_conso = 'D'.$unit;break;

au lieu de
Code : Tout sélectionner
case 10   : $unit_conso = 'd'.$unit;break;

:)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 892
Inscription : 04 Fév 2019
Localisation : Val d'Oise


Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 7 invité(s)